# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved.
# This file is offered as-is, without any warranty.

PROJECT = ufo
BIN     = build/$(PROJECT)
DESTDIR =
PREFIX  = usr/local

SRC    := $(wildcard source/*.d)

DC             = ldc2
PHOBOS_LINKING = dynamic

PHOBOS_OPTS   := $(shell ./mh.sh $(DC) phobos_options $(PHOBOS_LINKING))
AMALTHEA_OPTS := $(shell ./mh.sh $(DC) amalthea_options $(AMALTHEA_LINKING))
RELEASE_OPTS  := $(shell ./mh.sh $(DC) release_options)
DEBUG_OPTS    := $(shell ./mh.sh $(DC) debug_options)
LINKING_OPTS  := $(PHOBOS_OPTS) $(AMALTHEA_OPTS)

DOC_DIR := $(shell ./mh.sh $(DC) doc_dir)/$(PROJECT)

OUT = -of
ifeq ($(DC),gdc)
	OUT = -o
endif

.PHONY: release debug install uninstall clean dub test

debug: $(SRC)
	mkdir -p build/
	$(DC) $^ $(OUT)$(BIN) $(DEBUG_OPTS) -Jsource -J. $(LINKING_OPTS)

release: $(SRC)
	mkdir -p build/
	$(DC) $^ $(OUT)$(BIN) $(RELEASE_OPTS) -Jsource -J. $(LINKING_OPTS)

INST_BINDIR      := $(DESTDIR)/$(PREFIX)/bin/
INST_DOCDIR      := $(DESTDIR)/$(PREFIX)/$(DOC_DIR)/
INST_HELPDIR     := $(DESTDIR)/$(PREFIX)/share/help
INST_HELPDIR_EN  := $(INST_HELPDIR)/en_US/$(PROJECT)/
INST_HELPDIR_RU  := $(INST_HELPDIR)/ru_RU/$(PROJECT)/
INST_HELPDIR_EO  := $(INST_HELPDIR)/eo/$(PROJECT)/
INST_MANDIR_EN   := $(DESTDIR)/$(PREFIX)/share/man/man1
INST_MANDIR_RU   := $(DESTDIR)/$(PREFIX)/share/man/ru/man1
INST_MANDIR_EO   := $(DESTDIR)/$(PREFIX)/share/man/eo/man1
INST_BASHCOMPDIR := $(DESTDIR)/$(PREFIX)/share/bash-completion/completions
INST_BASHCOMP    := $(INST_BASHCOMPDIR)/$(PROJECT)

install:
	mkdir -p "$(INST_BINDIR)"
	mkdir -p "$(INST_DOCDIR)" "$(INST_HELPDIR)" "$(INST_BASHCOMPDIR)"
	mkdir -p "$(INST_MANDIR_EN)" "$(INST_MANDIR_RU)" "$(INST_MANDIR_EO)"
	install "$(BIN)" "${INST_BINDIR}"
	cp copyright $(INST_DOCDIR)
	mkdir -p $(INST_HELPDIR_EN) $(INST_HELPDIR_RU) $(INST_HELPDIR_EO)
	cp help/help_en_US.txt $(INST_HELPDIR_EN)/help.txt
	cp help/help_ru_RU.txt $(INST_HELPDIR_RU)/help.txt
	cp help/help_eo.txt    $(INST_HELPDIR_EO)/help.txt
	gzip -9 -k -n help/$(PROJECT).1
	gzip -9 -k -n help/$(PROJECT).ru.1
	gzip -9 -k -n help/$(PROJECT).eo.1
	install help/$(PROJECT).1.gz    "$(INST_MANDIR_EN)/$(PROJECT).1.gz"
	install help/$(PROJECT).ru.1.gz "$(INST_MANDIR_RU)/$(PROJECT).1.gz"
	install help/$(PROJECT).eo.1.gz "$(INST_MANDIR_EO)/$(PROJECT).1.gz"
	install -m 755 contrib/bash-completion "$(INST_BASHCOMP)"
	rm help/*.1.gz


uninstall:
	rm -f $(INST_BINDIR)/$(PROJECT)
	rm -rf $(INST_DOCDIR)
	rm -rf $(INST_HELPDIR_EN) $(INST_HELPDIR_RU) $(INST_HELPDIR_EO)
	rm -f $(INST_MANDIR_EO)/$(PROJECT).1.gz
	rm -f $(INST_MANDIR_EN)/$(PROJECT).1.gz
	rm -f $(INST_MANDIR_RU)/$(PROJECT).1.gz
	rm -rf $(INST_HELPDIR)/en_US/$(PROJECT)
	rm -rf $(INST_HELPDIR)/ru_RU/$(PROJECT)
	rm -rf $(INST_HELPDIR)/eo/$(PROJECT)
	rm -f "$(INST_BASHCOMP)"

clean:
	rm -rf build/ .dub/ dub.selections.json

dub:
	dub build --compiler=$(DC) --force -v

meson:
	meson setup meson_builddir --prefix=/$(PREFIX)
	meson compile -C meson_builddir

meson-install:
	meson install -C meson_builddir --destdir=$(abspath $(DESTDIR))


ALL = .gitignore CHANGELOG.md copyright README.md \
Makefile mh.sh summary dub.sdl meson.build \
copying/ examples/ help/ source/

VERSION := $(shell cat source/version)
PKGNAME := $(PROJECT)-$(VERSION)

TARNAME := $(PKGNAME).tar.xz

tarball:
	mkdir -p build/$(PKGNAME)
	cp -p -r $(ALL) build/$(PKGNAME)/
	cd build ; tar --xz -cf $(TARNAME) $(PKGNAME)
