#!/usr/bin/make -f
# Licensed under the terms of the GPLv2
# Guillaume Destuynder <kang@rsbac.org>

#
# Configuration
#

VERSION		:= 1.0
PACKAGE		:= pam_rsbac

INSTALL		:= install
CC		:= gcc
MSGFMT		:= msgfmt
ECHO		:= $(shell which echo)
ifeq ($(ECHO),)
ECHO		:= echo
endif

DESTDIR		:= 
PREFIX		:= /usr/local
LIBDIR		:= /lib
DIR_PAM		:= $(LIBDIR)/security
LOCALEDIR	:= $(PREFIX)/share/locale
DIR_PO		:= de fr

NLS		:= 1

CFLAGS		:= -fPIC -O2 -fomit-frame-pointer
CFLAGS		+= -shared -I../headers -I/usr/include -I/usr/local/include \
		   -I$(PREFIX)/include
LDFLAGS		:=

DEFINES		:= -DENABLE_NLS=$(NLS) \
		   -DPACKAGE=\"$(PACKAGE)\"

LIBS		:= -L../libs/.libs -L$(PREFIX)/lib -lrsbac

FILES_PAM	:= $(wildcard *.c)
FILES_PO	:= $(wildcard po/*.po)

#
# Nice make. Use make VERBOSE=1 to verbose compilation.
#
ifneq ($(VERBOSE), 1)
.SILENT:
E = @$(ECHO) -e " "
else
E = @:
endif

#
# Targets
#

all: $(FILES_PAM:.c=.so) $(FILES_PO:.po=.mo)
$(FILES_PAM:.c=.so): $(FILES_PAM)
	$(foreach f, $(FILES_PAM), $(ECHO) -e "  LIB\t\t$(f)"; \
	$(CC) $(LDFLAGS) $(CFLAGS) $(DEFINES) $(LIBS) -o $(f:.c=.so) $(f);)

$(FILES_PO:.po=.mo): $(FILES_PO)
ifeq ($(NLS), 1)
	$(foreach f, $(FILES_PO), $(ECHO) -e "  PO\t\t$(f)"; \
	$(MSGFMT) -o $(f:.po=.mo) $(f);)
else
	@touch $@
endif

clean:
	$(E) "CLEAN\t\t$(FILES_PAM:.c=.so)"
	rm -f $(FILES_PAM:.c=.so)

distclean: clean
	
install: $(FILES_PAM:.c=.so)
	$(E) "INTO\t\t$(DESTDIR)"
	$(E) "DIR\t\t$(DIR_PAM)"
	$(INSTALL) -d $(DESTDIR)/$(DIR_PAM)
	$(E) "INSTALL\t$(FILES_PAM:.c=.so)"
	$(INSTALL) -m755 $(FILES_PAM:.c=.so) $(DESTDIR)/$(DIR_PAM)
ifeq ($(NLS), 1)
	$(E) "DIR\t\t$(LOCALEDIR)"
	$(foreach f, $(DIR_PO), $(INSTALL) -d $(DESTDIR)/$(LOCALEDIR)/$(f)/LC_MESSAGES; \
	$(INSTALL) -d $(DESTDIR)/$(LOCALEDIR)/$(f)/LC_TIME;)
	$(E) "INSTALL\t$(DIR_PO)"
	$(foreach f, $(DIR_PO), \
	$(INSTALL) -m644 po/$(f).mo \
	$(DESTDIR)/$(LOCALEDIR)/$(f)/LC_MESSAGES/$(PACKAGE).mo; \
	$(INSTALL) -m644 po/$(f).mo \
	$(DESTDIR)/$(LOCALEDIR)/$(f)/LC_MESSAGES/$(PACKAGE)-$(VERSION).mo;)
endif

uninstall:
	$(foreach f, $(FILES_PAM:.c=.so), $(ECHO) -e "  UNINSTALL\t$(f)"; \
	rm -f $(DESTDIR)/$(DIR_PAM)/$(f);)
ifeq ($(NLS), 1)
	$(foreach f, $(DIR_PO), $(ECHO) -e "  UNINSTALL\t$(f)"; rm -f po/$(f).mo \
	$(DESTDIR)/$(LOCALEDIR)/$(f)/LC_MESSAGES/$(PACKAGE).mo;)
endif	

# Re-create the messages.po file
nls-messages:
	$(E) "XGETTEXT\t\tGenerating po/messages.tpo"
	xgettext -E --keyword=_ --keyword=N_ -p po -o messages.tpo *.c

# Merges translations
nls-merge-keep: $(FILES_PO)
	$(foreach f, $(FILES_PO), $(ECHO) -e "  MSGMERGE\t\tMerging $(f)"; \
	msgmerge -o $(f).new $(f) po/messages.tpo $(QUIET);)
	$(E) "MSGMERGE\t\tGenerated: $(FILES_PO:.po=.po.new)"

nls-merge-update: $(FILES_PO)
	$(foreach f, $(FILES_PO), $(ECHO) -e "  MSGMERGE\t\tMerging $(f)"; \
	msgmerge -U $(f) po/messages.tpo $(QUIET);)
	$(E) "MSGMERGE\t\tUpdated: $(FILES_PO)"

.PHONY: all clean distclean uninstall
