VERSION = 1.1.0
PREFIX ?= /usr/local

OS != uname -o

SOURCES := src/pathsd.nim
VENDOR_SOURCES := submodules/commandant/commandant.nim
ALL_SOURCES := $(SOURCES) $(VENDOR_SOURCES)

ALL_STAMPS := ${ALL_SOURCES:.nim=.stamp}

OUT := build/pathsd

.POSIX:
.SUFFIXES:
.SUFFIXES: .stamp .nim
.PHONY: all test install-license install-license-freebsd install clean sdist bdist-freebsd

all: $(OUT)

build:
	mkdir build

dist:
	mkdir dist

# This is such a hack. I love it ;).
.nim.stamp:
	touch $@

$(OUT): build $(ALL_STAMPS)
	nimble build -d:release

test:
	nimble test

install-license:
	install LICENSE "$(DESTDIR)$(PREFIX)/share/doc/pathsd/"

install-license-freebsd:
	install -d "$(DESTDIR)$(PREFIX)/share/licenses/pathsd-$(VERSION)/"
	install freebsd/LICENSE "$(DESTDIR)$(PREFIX)/share/licenses/pathsd-$(VERSION)/"
	install freebsd/catalog.mk "$(DESTDIR)$(PREFIX)/share/licenses/pathsd-$(VERSION)/" # Hmm?
	install LICENSE "$(DESTDIR)$(PREFIX)/share/licenses/pathsd-$(VERSION)/MIT"

install: $(OUT) dist
	install -d "$(DESTDIR)$(PREFIX)/bin"
	install -d "$(DESTDIR)$(PREFIX)/share/doc/pathsd"

	install -s build/pathsd "$(DESTDIR)$(PREFIX)/bin/"
	install README.md "$(DESTDIR)$(PREFIX)/share/doc/pathsd/"
	install CHANGELOG.md "$(DESTDIR)$(PREFIX)/share/doc/pathsd/"
	install NOTICE.txt "$(DESTDIR)$(PREFIX)/share/doc/pathsd/"

	if [ "$(OS)" = "FreeBSD" ];then make install-license-freebsd; else make install-license; fi

clean:
	nimble clean
	rm -f $(ALL_STAMPS)
	rm -rf build/ dist/

sdist: build dist
	rm -rf build/sdistroot/pathsd-${VERSION}
	mkdir -p build/sdistroot/pathsd-${VERSION}
	git ls-files --recurse-submodules | cpio -pd build/sdistroot/pathsd-${VERSION}
	(cd build/sdistroot; tar cvf ../../dist/pathsd-${VERSION}.tar.gz pathsd-${VERSION}/)

bdist-freebsd: $(OUT) dist
	make install DESTDIR=build/pkgroot
	cat freebsd/manifest.in | sed -e 's|%%VERSION%%|${VERSION}|' | sed -e 's|%%PREFIX%%|${PREFIX}|' | sed -e 's|%%FLATSIZE%%|${:! du -c build/pkgroot | tail -n 1 | cut -f 1!:}|' > build/manifest
	echo ${:! find build/pkgroot -type f !:C/^build\/pkgroot//} | tr ' ' '\n' > build/pkg-plist
	pkg create -M build/manifest -p build/pkg-plist -r build/pkgroot/ -o dist/ -f tgz