PREFIX = /usr
CC = gcc

PO_SRCS = $(wildcard locale/*/*/*.po)
PO_OUTS = $(patsubst locale/%.po,locale/%.mo,$(PO_SRCS))
PO_DIRS = $(wildcard locale/*/*)

SRCS    = $(wildcard src/*.c) $(wildcard src/*/*.c)
OBJS    = $(patsubst src/%.c,dist/%.o,$(SRCS))
HDRS    = $(wildcard include/*.h)
CFLAGS  = -O3 -fstack-protector-strong -fcf-protection=full -fstack-clash-protection
LIBS    = -lpthread -lcrypto -larchive -linih -lgpgme -lsqlite3

DEBUG   = 0

all: dist dist/libmp.so $(PO_OUTS)

dist:
	mkdir -p dist/ctx
	mkdir -p dist/mptp
	mkdir -p dist/pool
	mkdir -p dist/package
	mkdir -p dist/database

dist/libmp.so: $(OBJS)
	$(CC) -shared -o $@ $^ $(LIBS) $(CFLAGS)

dist/%.o: src/%.c
	$(CC) -c -Wall -fPIC -o $@ $^ $(LIBS) $(CFLAGS) -DLM_VERSION=\"${VERSION}\" -DLM_DEBUG=${DEBUG}

locale/%.mo: locale/%.po
	msgfmt $^ -o $@

locale/%.po: locale/libmp.pot
	cp $@ $@.old
	if msgmerge $@ $^ -o $@ ; then \
		rm $@.old ; \
		echo "merge success: $@" ; \
	else \
		echo "merge failed: $@" ; \
		mv $@.old $@ ; \
	fi; \

locale/libmp.pot: $(SRCS)
	mkdir -p locale
	xgettext -k_ -c $^ -o $@

install:
	install -m755  dist/libmp.so $(DESTDIR)/$(PREFIX)/lib/libmp.so
	install -dm755 $(DESTDIR)/$(PREFIX)/include/libmp
	install -m644  $(HDRS) $(DESTDIR)/usr/include/libmp
	rm $(DESTDIR)/usr/include/libmp/util.h
	@for po in $(PO_DIRS) ; do \
		echo "installing locale: $$po/libmp.mo" ; \
		install -dm755 $(DESTDIR)/$(PREFIX)/share/$$po ; \
		install -m644 $$po/libmp.mo $(DESTDIR)/$(PREFIX)/share/$$po ; \
	done

uninstall:
	rm $(DESTDIR)/$(PREFIX)/lib/libmp.so
	rm -r $(DESTDIR)/$(PREFIX)/include/libmp
	@for po in $(PO_DIRS) ; do \
		rm $(DESTDIR)/$(PREFIX)/share/$$po/libmp.mo ; \
	done

format:
	clang-format -i -style=file src/*.c include/*.h examples/*/*.c

examples:
ifeq (,$(wildcard dist/libmp.so))
	@echo "!!!! you should first compile libmp !!!!"
	exit 1
endif
	$(MAKE) -C $@

.PHONY: install uninstall format examples