# $OpenBSD$

VERSION = 1.0.15
PROJECT = cmech

# Compiler flags
CFLAGS+= -Wall -Wextra -Werror
CFLAGS+= -Wstrict-prototypes -Wmissing-prototypes
CFLAGS+= -Wmissing-declarations -Wshadow
CFLAGS+= -Wpointer-arith -Wcast-qual -Wsign-compare
CFLAGS+= -Wpedantic -Wunreachable-code -fstack-protector
CFLAGS+= -I/usr/local/include
CFLAGS+= -DVERSION=\"$(VERSION)\"

LDFLAGS+= -ltls

# System installation directories (binaries and manuals)
PREFIX ?= /usr/local
BINDIR ?= $(PREFIX)/bin
MANDIR ?= $(PREFIX)/man
RC_DIR ?= /etc/rc.d

CLEANFILES += cyb cmech config.h *.o *.d $(PROJECT)-*.tar.gz

## Build all programs
all: cyb cmech

# cyb and cmech objects
CYB_OBJS = cyb.o cyb_run.o util.o net.o msg.o pipe.o conf.o

CMECH_OBJS = cmech.o cmech_run.o msg.o util.o pipe.o prc.o conf.o

cyb.o: cyb.c config.h cyb_run.h util.h conf.h
cyb_run.o: cyb_run.c cyb_run.h util.h config.h net.h msg.h pipe.h conf.h
cmech.o: cmech.c cmech_run.h config.h conf.h util.h pipe.h
cmech_run.o: cmech_run.c cmech_run.h config.h util.h msg.h pipe.h prc.h conf.h

# shared objects
util.o: util.c util.h config.h
net.o: net.c net.h util.h config.h
pipe.o: pipe.c pipe.h config.h
prc.o: prc.c prc.h config.h util.h
conf.o: conf.c conf.h config.h
msg.o: msg.c msg.h config.h

# cyb program
cyb: $(CYB_OBJS)
	${CC} -o cyb $(CYB_OBJS) ${LDFLAGS}

# cmech program
cmech:$(CMECH_OBJS)
	${CC} -o cmech $(CMECH_OBJS) ${LDFLAGS}

# Generate config.h from template
config.h: config.def.h
	cp config.def.h config.h

# Distribution tarball
SOURCES = Makefile cyb.1 cmech.1 cmech.rc cmech.conf cmech.txt cyb.txt \
	util.h net.h pipe.h prc.h conf.h msg.h cmech_run.h cyb_run.h config.def.h \
	util.c net.c pipe.c prc.c conf.c msg.c cmech_run.c cyb_run.c cyb.c cmech.c

dist: $(SOURCES)
	tar -czf $(PROJECT)-$(VERSION).tar.gz $(SOURCES)

# Install programs, manual pages, runtime data, and rc.d script
install: all
	mkdir -p ${DESTDIR}$(BINDIR)
	mkdir -p ${DESTDIR}$(MANDIR)/man1
	mkdir -p ${DESTDIR}$(RC_DIR)
	install -c -s -m 555 cyb ${DESTDIR}$(BINDIR)/cyb
	install -c -s -m 555 cmech ${DESTDIR}$(BINDIR)/cmech
	install -c -m 444 cyb.1 ${DESTDIR}$(MANDIR)/man1/cyb.1
	install -c -m 444 cmech.1 ${DESTDIR}$(MANDIR)/man1/cmech.1
	install -c -m 555 cmech.rc ${DESTDIR}$(RC_DIR)/cmech

# Uninstall
uninstall:
	rm -f ${DESTDIR}$(BINDIR)/cyb
	rm -f ${DESTDIR}$(BINDIR)/cmech
	rm -f ${DESTDIR}$(MANDIR)/man1/cyb.1
	rm -f ${DESTDIR}$(MANDIR)/man1/cmech.1
	rm -f ${DESTDIR}$(RC_DIR)/cmech

.include <bsd.prog.mk>
