VALAC = valac
MSGFMT ?= msgfmt
PACKAGES = --pkg gtk+-3.0 --pkg cairo --pkg pangocairo --pkg gio-2.0 --pkg gio-unix-2.0
TARGET = tech-hud
DOMAIN = $(TARGET)
DESKTOP = $(TARGET).desktop
VALA_SOURCES = tech_hud.vala
LANGUAGES ?= de fr ru zh_CN ja es sw it pt_BR nl ko ar he
PO_FILES = $(wildcard po/*.po)
LOCALE_MOS = $(foreach language,$(LANGUAGES),locale/$(language)/LC_MESSAGES/$(DOMAIN).mo)
VERSION = 1.2.0
PREFIX ?= /usr/local
DESTDIR ?=

all: $(TARGET) $(DESKTOP) $(LOCALE_MOS)

$(TARGET): $(VALA_SOURCES) Makefile
	$(VALAC) $(PACKAGES) $(VALA_SOURCES) -o $(TARGET) -X -lm -X -Wno-incompatible-pointer-types -X -DGETTEXT_PACKAGE=\"tech-hud\"

locale/%/LC_MESSAGES/$(DOMAIN).mo: po/%.po
	mkdir -p $(dir $@)
	$(MSGFMT) --check -o $@ $<

$(DESKTOP): Makefile
	printf '%s\n' '[Desktop Entry]' 'Name=Tech HUD' 'Comment=System telemetry HUD' 'Exec=$(TARGET)' 'Terminal=false' 'Type=Application' 'Categories=Utility;' > $@

translations: $(LOCALE_MOS)

clean:
	rm -f $(TARGET) $(DESKTOP)
	rm -f $(LOCALE_MOS)
	rm -rf deb-build pet-build *.deb *.tar.gz *.pet tech-hud-$(VERSION)

install: $(TARGET) $(DESKTOP) $(LOCALE_MOS)
	install -Dm755 $(TARGET) $(DESTDIR)$(PREFIX)/bin/$(TARGET)
	if [ -f marble-tile.jpg ]; then install -Dm644 marble-tile.jpg $(DESTDIR)$(PREFIX)/share/$(TARGET)/marble-tile.jpg; fi
	install -Dm644 $(DESKTOP) $(DESTDIR)$(PREFIX)/share/applications/$(DESKTOP)
	for language in $(LANGUAGES); do install -Dm644 locale/$$language/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(PREFIX)/share/locale/$$language/LC_MESSAGES/$(DOMAIN).mo; done

source: $(DESKTOP) $(PO_FILES)
	mkdir -p tech-hud-$(VERSION)
	cp $(VALA_SOURCES) Makefile README.txt marble-tile.jpg $(DESKTOP) tech-hud-$(VERSION)/
	mkdir -p tech-hud-$(VERSION)/po
	cp $(PO_FILES) tech-hud-$(VERSION)/po/
	tar -czf $(TARGET)_$(VERSION).orig.tar.gz tech-hud-$(VERSION)
	rm -rf tech-hud-$(VERSION)
	@echo "Source tarball created: $(TARGET)_$(VERSION).orig.tar.gz"

deb: all
	mkdir -p deb-build/DEBIAN
	mkdir -p deb-build$(PREFIX)/bin
	mkdir -p deb-build$(PREFIX)/share/applications
	if [ -f marble-tile.jpg ]; then mkdir -p deb-build$(PREFIX)/share/$(TARGET) && cp marble-tile.jpg deb-build$(PREFIX)/share/$(TARGET)/; fi
	for language in $(LANGUAGES); do mkdir -p deb-build$(PREFIX)/share/locale/$$language/LC_MESSAGES; cp locale/$$language/LC_MESSAGES/$(DOMAIN).mo deb-build$(PREFIX)/share/locale/$$language/LC_MESSAGES/$(DOMAIN).mo; done
	cp $(TARGET) deb-build$(PREFIX)/bin/
	cp $(DESKTOP) deb-build$(PREFIX)/share/applications/
	if [ -f marble-tile.jpg ]; then cp marble-tile.jpg deb-build$(PREFIX)/share/$(TARGET)/; fi

	@echo "Package: $(TARGET)" > deb-build/DEBIAN/control
	@echo "Version: $(VERSION)-1" >> deb-build/DEBIAN/control
	@echo "Section: x11" >> deb-build/DEBIAN/control
	@echo "Priority: optional" >> deb-build/DEBIAN/control
	@echo "Architecture: amd64" >> deb-build/DEBIAN/control
	@echo "Maintainer: Local Dev <dev@local>" >> deb-build/DEBIAN/control
	@echo "Description: Futuristic Vala/GTK3 technical spherical HUD window concept" >> deb-build/DEBIAN/control
	
	dpkg-deb --build deb-build $(TARGET)_$(VERSION)-1_amd64.deb
	rm -rf deb-build

pet64: all
	rm -rf pet-build
	mkdir -p pet-build/usr/bin
	mkdir -p pet-build/usr/share/applications
	mkdir -p pet-build/usr/share/$(TARGET)
	install -Dm755 $(TARGET) pet-build/usr/bin/$(TARGET)
	if [ -f marble-tile.jpg ]; then install -Dm644 marble-tile.jpg pet-build/usr/share/$(TARGET)/marble-tile.jpg; fi
	install -Dm644 $(DESKTOP) pet-build/usr/share/applications/$(DESKTOP)
	for language in $(LANGUAGES); do \
		if [ -f locale/$$language/LC_MESSAGES/$(DOMAIN).mo ]; then \
			install -Dm644 locale/$$language/LC_MESSAGES/$(DOMAIN).mo pet-build/usr/share/locale/$$language/LC_MESSAGES/$(DOMAIN).mo; \
		fi; \
	done
	cd pet-build && tar -czf ../$(TARGET)_$(VERSION)_amd64.tar.gz .
	mv $(TARGET)_$(VERSION)_amd64.tar.gz $(TARGET)_$(VERSION)_amd64.pet
	md5sum $(TARGET)_$(VERSION)_amd64.pet | awk '{print $$1}' >> $(TARGET)_$(VERSION)_amd64.pet
	rm -rf pet-build
	@echo "PET package created: $(TARGET)_$(VERSION)_amd64.pet"

.PHONY: all clean install source deb pet64 translations
