#!/usr/bin/make -f

CC      = gcc -std=gnu99
CFLAGS  = -Wall -Wextra -Werror -g
#LDFLAGS = -s

PREFIX  = /usr/local

ifdef WINDIR
LDLIBS  = -lws2_32
EXE     = .exe
HIDE	= 0
else
EXE     = 
HIDE	= 1
endif

ARCS=arcs2

# TODO Fix install to strip .elf!

BINS    = arcs1 sshc
SCRIPTS = conflicts pacify git_commit_all vi- arcs_message git_commit_count arcs2 arcs
EXES    = $(BINS) $(SCRIPTS)

BINSEXE = $(shell for A in $(BINS); do echo $$A$(EXE); done)
EXESEXE = $(BINSEXE) $(SCRIPTS)
MANGZ   = $(shell for A in $(EXES); do echo $$A.1.gz; done)
MANTXT  = $(shell for A in $(EXES); do echo $$A.1.txt; done)

build: $(BINSEXE) $(MANGZ) $(MANTXT)
	for A in $(BINSEXE); do [ -L "$$A" ] || { mv "$$A" ."$$A".hide && ln -sf ."$$A".hide "$$A"; }; done
	ln -sf $(ARCS) arcs

arcs1$(EXE): arcs.c arcs_backend.c arcs_backend.h
	$(CC) $(CFLAGS) $(LDFLAGS) -o arcs1$(EXE) arcs_backend.c arcs.c $(LDLIBS)

sshc1$(EXE): sshc.c
	$(CC) $(CFLAGS) $(LDFLAGS) -o sshc$(EXE) sshc.c

install: build instdirs
	for I in $(EXESEXE); do install "$$I" "$(PREFIX)/bin/$${I%.elf}"; done
	install -m 644 $(MANGZ) "$(PREFIX)/share/man/man1/"

uninstall:
	for I in $(EXESEXE); do rm -f "$(PREFIX)/bin/$${I%.elf}"; done
	for I in $(MANGZ); do rm -f "$(PREFIX)/share/man/man1/$$I"; done

devinst: build instdirs
	for I in $(EXESEXE); do ln -sf "$$PWD/$$I" "$(PREFIX)/bin/$${I%.elf}"; done
	for I in $(MANGZ); do ln -sf "$$PWD/$$I" "$(PREFIX)/share/man/man1"; done

clean:
	rm -f $(BINSEXE) $(MANGZ) $(MANTXT)
	for I in $(BINS); do rm -f .$$I.exe; done
	for I in $(MANGZ) $(MANTXT); do rm -f .$$I; done

instdirs:
	mkdir -p "$(PREFIX)/bin" "$(PREFIX)/share/man/man1/"

distclean: clean

deb:
	debuild -b

debclean:
	fakeroot debian/rules clean

sic: build
	sudo $(MAKE) install
	$(MAKE) clean

%.1.gz: %.1
	gzip -9 -c $< >.$@
	ln -sf .$@ $@

%.1.txt: %.1
	man -l $< >$@ || touch $@

.PHONY: build install uninstall clean distclean deb cleandeb install distclean sic instdirs

