DESTDIR ?= /usr/local
CGIDIR  ?= $(DESTDIR)/share/captrap
BINDIR  ?= $(DESTDIR)/bin
SBINDIR ?= $(DESTDIR)/sbin
LIBDIR  ?= $(DESTDIR)/lib/site_perl
ETCDIR  ?= /etc/captrap

TRANS ?= util/trans.pl

# programs to be installed
cgi_progs  = grapher.pl main.pl viewer.pl
bin_progs  = captrap_graph captrap_main captrap_recurse captrap_view
sbin_progs = captrap_mac captrap_mkconfig captrap_mkdb

# directories of each program to install
cgi_dir  = cgi-bin
bin_dir  = bin
sbin_dir = sbin

# paths to files to be installed
cgi_files  = $(addprefix $(cgi_dir)/, $(cgi_progs))
bin_files  = $(addprefix $(bin_dir)/, $(bin_progs))
sbin_files = $(addprefix $(sbin_dir)/, $(sbin_progs))

# library stuff
main_lib = Captrap.pm
lib_dir = lib
main_lib_file = $(lib_dir)/$(main_lib)
sub_libs = Graph.pm Main.pm View.pm
sub_lib_dir = Captrap
sub_lib_files = $(addprefix $(lib_dir)/$(sub_lib_dir)/, $(sub_libs))

# what to build
build_dir = build
all_dirs = $(cgi_dir) $(bin_dir) $(sbin_dir) $(lib_dir) $(lib_dir)/$(sub_lib_dir)
all_files = $(cgi_files) $(bin_files) $(sbin_files) $(main_lib_file) \
    $(sub_lib_files)



# make sure this is always the first target
default: build
	@echo
	@echo "Done translating files for install. If you haven't already done"
	@echo "so, run 'make test' to check dependencies. Then you can run"
	@echo "'make install' to install Captrap. Alternatively, you can"
	@echo "run the scripts without installing them (see the README)."

build_dir:
	mkdir -p $(addprefix $(build_dir)/, $(all_dirs))

build: build_dir $(addprefix $(build_dir)/, $(all_files))

test:
	util/check_deps.pl

install: build
	# directories
	install -d "$(CGIDIR)" "$(BINDIR)" "$(SBINDIR)" "$(ETCDIR)"
	install -d "$(LIBDIR)" "$(LIBDIR)/$(sub_lib_dir)"
	# programs
	install -c -m 755 $(addprefix $(build_dir)/, $(cgi_files))  "$(CGIDIR)"
	install -c -m 755 $(addprefix $(build_dir)/, $(bin_files))  "$(BINDIR)"
	install -c -m 755 $(addprefix $(build_dir)/, $(sbin_files)) "$(SBINDIR)"
	# libraries
	install -c -m 755 $(addprefix $(build_dir)/, $(main_lib_file)) "$(LIBDIR)"
	install -c -m 755 $(addprefix $(build_dir)/, $(sub_lib_files)) \
	    "$(LIBDIR)/$(sub_lib_dir)"


uninstall:
	# programs
	rm -f $(addprefix "$(BINDIR)"/,  $(cgi_progs))
	rm -f $(addprefix "$(BINDIR)"/,  $(bin_progs))
	rm -f $(addprefix "$(SBINDIR)"/, $(sbin_progs))
	# libraries
	rm -f $(addprefix "$(LIBDIR)"/, $(main_lib_file))
	rm -f $(addprefix "$(LIBDIR)/$(sub_lib_dir)"/, $(sub_lib_progs))
	# directories
	rmdir --ignore-fail-on-non-empty "$(CGIDIR)" "$(ETCDIR)"
	rmdir --ignore-fail-on-non-empty "$(LIBDIR)/$(sub_lib_dir)"

clean:
	rm -rf $(build_dir)

distclean: clean


.PHONY: default build_dir build
.PHONY: test install uninstall clean distclean


# non-phony targets below here

build/%: %
	$(TRANS) $< $@
