# -*- Makefile -*-

SHELL = /bin/sh

# Variables

OS = $(shell uname | tr '[a-z]' '[A-Z]')
CFLAGS += -D__$(OS)__
CFLAGS += -Wall -W -Wextra  -g -O0 -pthread
LDFLAGS +=-lpthread -pthread

VERSION = $(shell awk '/define[ \t]*VERSION/ { gsub(/"/, ""); print $$(NF) }' cpumon.c)

# Files for intalling

DOCS += COPYING README
DOCS += makefile.gnu makefile.bsd do_makefile.sh
DOCS += todo.txt

EXECS += cpumon

MANPAGES += cpumon.1

DATE = $(shell date +%F)

PACKAGE = cpumon

ifeq ($(DESTDIR),)
DESTDIR = /usr/local
endif

BINDIR = $(DESTDIR)/bin
DOCDIR = $(DESTDIR)/share/doc/$(PACKAGE)
MANDIR = $(DESTDIR)/share/man/man1

INSTBIN = $(addprefix $(BINDIR)/, $(EXECS))
INSTDOC = $(addprefix $(DOCDIR)/, $(DOCS))
INSTMAN = $(addprefix $(MANDIR)/, $(MANPAGES))

FILES = $(INSTBIN) $(INSTDOC) $(INSTMAN)

# Files for building

TARGETS = cpumon load
SOURCES = $(wildcard *.c)
HEADERS = $(wildcard *.h)
DEPENDS = $(SOURCES:.c=.d)
OBJECTS = $(SOURCES:.c=.o)

ALLFILES = $(DOCS) $(MANPAGES) $(SOURCES) $(HEADERS)

# Functions

MKDIR = mkdir -p $(1) && chmod a+rx,go-w $(1)

INSTALL = test -d `dirname $(2)` || $(call MKDIR, `dirname $(2)`) && cp -pa $(1) $(2) && chmod a+rX,go-w $(2)

# General rules

all: $(TARGETS) depends

archive:
	cd ..; mv $(PACKAGE) $(PACKAGE)-$(DATE)
	( cd ..; tar czf $(PACKAGE)-$(DATE).tgz $(addprefix $(PACKAGE)-$(DATE)/, $(ALLFILES)) )
	cd ..; mv $(PACKAGE)-$(DATE) $(PACKAGE)

clean:
	touch clean
	rm -f $(OBJECTS) $(DEPENDS) $(wildcard *~) $(wildcard */*~) clean

count:
	wc $(SOURCES) $(MANPAGES) $(DOCS)

depends: $(DEPENDS)

cpumon: cpumon.o

load: load.o

install: $(FILES)

$(INSTBIN):$(BINDIR)/%:%
	$(call INSTALL, $<, $@)

$(INSTDOC):$(DOCDIR)/%:%
	$(call INSTALL, $<, $@)

$(INSTMAN):$(MANDIR)/%:%
	$(call INSTALL, $<, $@)

package:
	cd ..; mv $(PACKAGE) $(PACKAGE)-$(VERSION)
	( cd ..; tar czf  $(PACKAGE)-$(VERSION).tgz $(addprefix $(PACKAGE)-$(VERSION)/, $(ALLFILES)) )
	cd ..; mv $(PACKAGE)-$(VERSION) $(PACKAGE)

purge: clean
	touch purge
	rm -f $(TARGETS) purge

$(TARGETS):%:
	$(CC) $(LDFLAGS) $? -o $@

%.o: %.c
	$(CC) $(CFLAGS) $< -c -o $@

%.d: %.c
	$(CC) -MM -D__DEPEND__ $< -o - | sed "s;^`basename $(<:.c=.o)`;$(<:.c=.o);" > $@

include $(wildcard *.d)

## Phony

.PHONY: all archive clean count depends install package purge
