# 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 = mediafragmenter
BIN = build/${PROJECT}
DESTDIR =
PREFIX = usr

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

DC = ldc2
PHOBOS_LINKING = dynamic
AMALTHEA_LINKING = dynamic

PHOBOS_OPTS    = $(shell ./mh.sh $(DC) phobos_options $(PHOBOS_LINKING))
AMALTHEA_OPTS  = $(shell ./mh.sh $(DC) amalthea_options $(AMALTHEA_LINKING))
EXTLIB_OPTS   := $(AMALTHEA_OPTS)
LIB_OPTS      := $(PHOBOS_OPTS) $(EXTLIB_OPTS)
LINKING_OPTS   = $(PHOBOS_OPTS) $(AMALTHEA_OPTS)
RELEASE_OPTS   = $(shell ./mh.sh $(DC) release_options)
DEBUG_OPTS     = $(shell ./mh.sh $(DC) debug_options)
OTHER_OPTS    := $(shell ./mh.sh $(DC) other_options)
BUILD_MODE    ?= debug
ifeq ($(BUILD_MODE),release)
	BUILD_OPTS := $(RELEASE_OPTS) $(OTHER_OPTS) $(LIB_OPTS)
else
	BUILD_OPTS := $(DEBUG_OPTS) $(OTHER_OPTS) $(LIB_OPTS)
endif


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

.PHONY: release debug dub install post-install uninstall clean

debug:
	$(MAKE) BUILD_MODE=debug all

release:
	$(MAKE) BUILD_MODE=release all

all: $(BIN)

$(BIN): $(SRC)
	mkdir -p build/
	@echo MODE=$(BUILD_MODE)
	$(DC) $^ $(BUILD_OPTS) $(OUT)$@

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


DOC_DIR          = $(shell ./mh.sh $(DC) doc_dir)/$(PROJECT)
INST_BINDIR      = $(DESTDIR)/$(PREFIX)/bin/
INST_SHAREDIR    = $(DESTDIR)/$(PREFIX)/share
INST_BASHCOMPDIR = $(INST_SHAREDIR)/bash-completion/completions/
INST_DOCDIR      = $(DESTDIR)/$(PREFIX)/$(DOC_DIR)/
INST_HELPDIR     = $(DESTDIR)/$(PREFIX)/share/help

install:
	mkdir -p "$(INST_BINDIR)" "$(INST_BASHCOMPDIR)"
	mkdir -p "$(INST_DOCDIR)" "$(INST_HELPDIR)"
	install "$(BIN)" "${INST_BINDIR}"
	cp source/bash-completion "$(INST_BASHCOMPDIR)/$(PROJECT)" || true
	cp copyright "$(INST_DOCDIR)"
	cp -r share/help/* "$(INST_HELPDIR)/"

	mkdir -p "$(INST_SHAREDIR)/mime/packages/"
	mkdir -p "$(INST_SHAREDIR)/applications/"
	cp res/fragpointer.xml "$(INST_SHAREDIR)/mime/packages/"
	cp res/mediafragmenter.desktop "$(INST_SHAREDIR)/applications/"

post-install:
	xdg-mime default mediafragmenter.desktop text/fragpointer || true
	update-mime-database "$(INST_SHAREDIR)/mime/" || true


INST_HELPDIR_EN := $(INST_HELPDIR)/en_US/$(PROJECT)/
INST_HELPDIR_RU := $(INST_HELPDIR)/ru_RU/$(PROJECT)/
INST_HELPDIR_EO := $(INST_HELPDIR)/eo/$(PROJECT)/

uninstall:
	rm -f "$(INST_BINDIR)/$(PROJECT)"
	rm -f "$(INST_BASHCOMPDIR)/$(PROJECT)"
	rm -rf "$(INST_DOCDIR)"
	rm -rf "$(INST_HELPDIR_EN)" "$(INST_HELPDIR_RU)" "$(INST_HELPDIR_EO)"
	rm -f "$(INST_SHAREDIR)/mime/packages/fragpointer.xml"
	rm -f "$(INST_SHAREDIR)/applications/mediafragmenter.desktop"

clean:
	rm -rf build/
