CC = gcc
CFLAGS = -g -O2 -Wall -DHAVE_CONFIG_H
CPPFLAGS = 

EXEEXT = 
OBJEXT = o
PATH_SEPARATOR = :

LD = gcc
AR = ar
RANLIB = ranlib
LOADLIBES = 
LDLIBS +=  -lmcrypt -lz  -lm  -llzo 
LDFLAGS +=  

MODLIBS = -lmcrypt -lz 

INSTALL = /bin/install -c


prefix = /usr/local
mandir = ${prefix}/man
sysconfdir = ${prefix}/etc
datadir = ${prefix}/share
exec_prefix = ${prefix}
bindir = ${exec_prefix}/bin
libdir = ${exec_prefix}/lib

CONF = $(sysconfdir)/dact.conf
CFLAGS += -DDACT_CONFIG_FILE=\"$(CONF)\" -DEXEEXT=\"$(EXEEXT)\"
#CFLAGS += -O3
#LDFLAGS += -static

DEBUGALGO = comp_bitsums.c comp_factor.c comp_textrle.c
OBJS += dact_common.o comp_fail.o comp_plain.o buffer.o header.o sort.o dact.o module.o parse.o dendian.o crc.o net.o ui.o  strsep$U.o
ALGO = comp_snibble.c comp_delta.c comp_text.c comp_rle.c cipher_chaos.c cipher_sub.c cipher_psub.c comp_lzoox.c comp_lzooy.c comp_lzota.c cipher_serpent.c comp_zlib.c comp_mzlib.c comp_mzlib2.c 

TOBUILD = dact libdact.so libdact.a dact.conf

all: static

module: Makefile.dep
	@MODS="$(ALGO:.c=.so)" LDLIBS="" \
	  $(MAKE) $(TOBUILD)

static: Makefile.dep
	@OBJS="$(ALGO:.c=.o) $(CR_OBJ)" LDLIBS="$(MODLIBS)" $(MAKE) $(TOBUILD)

dact.conf: Makefile
	@echo "version_check    off" > dact.conf
	@echo "#block_size      0" >> dact.conf
	@echo "#exclude_algo    0" >> dact.conf
	@echo "use_urls         on" >> dact.conf
	@echo "color_ui         off" >> dact.conf
	@echo "network_access   on" >> dact.conf
	@echo "binary_check     off" >> dact.conf
	@echo "module_dir       $(datadir)/dact" >> dact.conf
	@echo "module_load_all  off" >> dact.conf
# 	@for so in $(MODS:.so=); do echo "load_module	$$so" >> dact.conf; done

dact: $(OBJS) $(MODS)
	$(CC) $(OBJS) $(LDFLAGS) $(LIBS) $(LDLIBS) -o dact$(EXEEXT)

libdact.so: $(OBJS) libdact.o
# 	@echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@  $(filter-out dact.c, $(^:.o=.c)); \
# 	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@  $(filter-out dact.c, $(^:.o=.c))
	@true

libdact.a: $(OBJS) libdact.o
	$(AR) rcu libdact.a $(filter-out dact.o, $^)
	$(RANLIB) libdact.a

%.so: %.c %.lnk
	@echo $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -DAS_MODULE  $< $(filter %.o, $^) `cat $(<:.c=.lnk)`; \
	$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ -DAS_MODULE  $< $(filter %.o, $^) `cat $(<:.c=.lnk)`

clean:
	rm -f dact dact$(EXEEXT) $(OBJS) libdact.so libdact.o libdact.a core *~ $(ALGO:.c=.o) $(ALGO:.c=.so)

distclean: clean
	rm -f Makefile config.h config.status config.log config.cache

mrproper: distclean
	rm -rf Makefile.dep configure autom4te.cache/ config.h.in

install-bin: dact
	$(INSTALL) -m 755 dact$(EXEEXT) $(bindir)/dact$(EXEEXT)

install: all install-bin
	$(INSTALL) -m 644 dact.conf $(CONF)
	$(INSTALL) -m 644 Docs/dact.1 $(mandir)/man1/dact.1
# 	-$(INSTALL) -m 755 libdact.so $(libdir)/libdact.so
	-$(INSTALL) -m 644 libdact.a $(libdir)/libdact.a
# 	mkdir -p -m 755 $(datadir)/dact
# 	for so in *.so; do $(INSTALL) -m 755 $$so $(datadir)/dact/$$so; done
#	./patch-magic-file $(datadir)/magic

install-bin-local: dact
	mkdir -p  $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`
	$(INSTALL) -m 755 dact$(EXEEXT) $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)

install-local: all install-bin-local
	$(INSTALL) -m 644 dact.conf $(HOME)/.dact/dact.conf
	-$(INSTALL) -m 644 libdact.a $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)
# 	$(INSTALL) -m 755 libdact.so $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/dact$(EXEEXT)
# 	for so in *.so; do $(INSTALL) -m 755 $$so $(HOME)/.dact/`uname -s | tr A-Z a-z`-`uname -m`/$$so; done

uninstall:
	rm -f $(bindir)/dact$(EXEEXT)
	rm -f $(mandir)/man1/dact.1 $(CONF)
	rm -f $(libdir)/libdact.a $(libdir)/libdact.so
# 	rm -rf $(datadir)/dact

depend: Makefile.dep

Makefile.dep: *.c *.h Makefile
	@echo "building Makefile.dep"
	@$(CC) $(CFLAGS) $(CPPFLAGS) -MM $(ALGO) $(OBJS:.o=.c) $(MODS:.so=.c) dact.c > Makefile.dep
	@$(CC) $(CFLAGS) $(CPPFLAGS) -MM $(ALGO) $(OBJS:.o=.c) $(MODS:.so=.c) dact.c  | sed -e "s/^\([^ ]*\)\.o: /\1.so: /g" >> Makefile.dep

include Makefile.dep
