CC =     gcc -fdiagnostics-color=never -fno-diagnostics-show-caret
CFLAGS = -O0 -Wall -g -I../lib
#STATIC = -static
STATIC =


TARGETS = feda-ng fedakeys feda-ct natcheck feda-if fedaserv fedactl

INSTALLPATH = /usr/local/bin/

FEDA_NG_OBJS = feda-ng.o keyutils.o xyespwr.o fedapref.o txtr_out.o \
	../lib/monocypher/libmonocypher.a \
	../lib/yespower/libyespower.a

FEDA_CT_OBJS = feda-ct.o keyutils.o xyespwr.o \
	../lib/yespower/libyespower.a

FEDAKEYS_OBJS = fedakeys.o keyutils.o fedapref.o textrec.o textrecx.o\
        txtr_out.o fk_known.o knowndb.o xyespwr.o fedapref.o mastrkey.o \
	xyespwr.o fileutil.o message.o xmonocyp.o fk_help.o fk_mastr.o \
	fk_point.o fk_diags.o \
	fk_mesg.o fk_data.o hexdata.o kfiles.o kfschems.o pointcfg.o \
	../lib/monocypher/libmonocypher.a \
	../lib/yespower/libyespower.a

FEDASERV_OBJS = fedaserv.o fsrv_cfg.o fsrv_rx.o fsrv_dia.o fsrv_con.o \
	fsrv_tun.o fsrv_dst.o fsrv_pad.o fsrv_pir.o fsrv_sig.o fsrv_txq.o \
	fsrv_cfd.o fsrv_rep.o fsrv_pxy.o \
	hexdata.o treebyte.o inadrcol.o comcrypt.o comcryp2.o keyutils.o \
	addrport.o kfiles.o pointcfg.o fedapref.o knowndb.o mastrkey.o \
	fileutil.o textrec.o textrecx.o txtr_out.o kfschems.o xyespwr.o \
	nmobfusc.o ip6struc.o strargv.o servlog.o \
	../lib/monocypher/libmonocypher.a \
	../lib/yespower/libyespower.a \
	../lib/sue/libsue.a

FEDACTL_OBJS = fedactl.o

NATCHECK_OBJS = natcheck.o message.o comcrypt.o keyutils.o addrport.o \
	nmobfusc.o \
	../lib/monocypher/libmonocypher.a

FEDA_IF_OBJS = feda-if.o ip6struc.o

all:	$(TARGETS)

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

%:	%.o
	$(CC) $(STATIC) $^ -o $@

feda-ng: $(FEDA_NG_OBJS)

feda-ct: $(FEDA_CT_OBJS)

feda-if: $(FEDA_IF_OBJS)

fedakeys: $(FEDAKEYS_OBJS)

fedaserv: $(FEDASERV_OBJS)

fedactl: $(FEDACTL_OBJS)


# this needs to query DNS so with glibc it can't build statically
#    this needs to be fixed one day, with a local resolv library
natcheck: $(NATCHECK_OBJS)
	$(CC) $^ -o $@

# intentionally not made dependent on the binaries, to make sure
# building is not accidentally run as root
install:
	cp -v $(TARGETS) $(INSTALLPATH)

# this is forced to recompile every time to make sure the compile
# date will display correctly
fk_help.o: FORCE

tst_kyds: tst_kyds.o keyutils.o ../lib/monocypher/libmonocypher.a


../lib/monocypher/libmonocypher.a:
	cd ../lib/monocypher && $(MAKE)

../lib/yespower/libyespower.a:
	cd ../lib/yespower && $(MAKE)

../lib/sue/libsue.a:
	cd ../lib/sue && $(MAKE)

textrec_test: textrec.c
	$(CC) $(CFLAGS) -DTEXTREC_TEST=1 $< -o $@

treebyte_test: treebyte.c
	$(CC) -Wall -g -DTREEBYTE_TESTS $< -o $@

TESTBINS = textrec_test treebyte_test

_version.h: Version
	echo '#define FEDA_VERSION "'`head -1 Version`'"' > $@
	echo '#define FEDA_VERSIONID '`tail -1 Version` >> $@

deps.mk:	$(wildcard *.c) _version.h
	$(CC) -MM  $(wildcard *.c) > $@

clean:
	rm -f *.o $(TARGETS) $(TESTBINS) deps.mk _version.h

ifneq (clean, $(MAKECMDGOALS))
-include deps.mk
endif

FORCE:
