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

#
# Configuration
#

VERSION		:= 1.4.0
PACKAGE		:= rsbac-tools

INSTALL		:= install
MSGFMT		:= msgfmt
STRIP		:= strip
CC		:= gcc
GZIP		:= gzip
CP		:= cp
ECHO		:= $(shell which echo)
ifeq ($(ECHO),)
ECHO		:= echo
endif

DESTDIR		:= 
PREFIX		:= /usr/local
LOCALEDIR	:= $(PREFIX)/share/locale
DIR_PO		:= de ru fr
DIR_DOC		:= $(PREFIX)/share/doc/$(PACKAGE)-$(VERSION)
DIR_MAN		:= $(PREFIX)/share/man/man1
DIR_BIN		:= $(PREFIX)/bin
DIR_RBIN	:= /bin

NLS		:= 1

CFLAGS		:= -fPIC -O2 -fomit-frame-pointer
CFLAGS		+= -Isrc -I../headers -I/usr/include -I/usr/local/include \
		   -I$(PREFIX)/include
LDFLAGS		:=
DEFINES		:= -DPACKAGE=\"$(PACKAGE)\" \
                   -DVERSION=\"$(VERSION)\" \
		   -DLOCALEDIR=\"$(LOCALEDIR)\" \
		   -DENABLE_NLS=$(NLS)

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

QUIET		:=  > /dev/null 2>&1

include module.mk

FILES_MAN	:= $(wildcard man/*1)
FILES_PO	:= $(wildcard po/*.po)
DIR_EXAMPLE	:= examples
#
# Nice make. Use make VERBOSE=1 to verbose compilation.
#
ifneq ($(VERBOSE), 1)
.SILENT:
E = @$(ECHO) -e " "
else
QUIET =
E = @:
endif

#
# Targets
#

all: $(FILES_TOOLS:.c=) $(FILES_PO:.po=.mo)

$(FILES_TOOLS:.c=): % : %.c
	$(E) "CC\t\t$@"
	$(CC) $(CFLAGS) $(LDFLAGS) $(DEFINES) $(LIBS) $@.c -o $@

$(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:
	$(foreach f, $(FILES_TOOLS:.c=), $(ECHO) -e "  CLEAN\t\t$(f)"; \
	rm -f $(f);)
	$(E) "CLEAN\t\t$(FILES_PO:.po=.mo)"
	rm -f $(FILES_PO:.po=.mo)

distclean: clean
	$(E) "CLEAN\t\t$(FILES_PO:.po=.po~)"
	rm -f $(FILES_PO:.po=.po~)
	$(E) "CLEAN\t\t$(FILES_MAN:.1=.1.gz)"
	rm -f $(FILES_MAN:.1=.1.gz)
	
install: all
	$(E) "INTO\t\t$(DESTDIR) ($(PREFIX))"
	$(E) "DIR\t\t$(DIR_BIN) $(DIR_MAN) $(DIR_DOC) $(DIR_RBIN)"
	$(INSTALL) -d $(DESTDIR)/$(DIR_BIN) $(DESTDIR)/$(DIR_MAN) $(DESTDIR)/$(DIR_DOC) $(DESTDIR)/$(DIR_RBIN)
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
	# /bin
	$(foreach f, $(PROGS_BIN), $(ECHO) -e "  INSTALL\t$(f)"; \
	$(INSTALL) -m755 $(f) $(DESTDIR)/$(DIR_RBIN);)
	# /usr/bin
	$(foreach f, $(PROGS_USR_BIN), $(ECHO) -e "  INSTALL\t$(f)"; \
	$(INSTALL) -m755 $(f) $(DESTDIR)/$(DIR_BIN);)
	$(foreach f, $(FILES_MAN), $(ECHO) -e "  GZIP\t\t$(f)"; \
	$(GZIP) -9c $(f) > $(f:.1=.1.gz);)
	$(foreach f, $(FILES_MAN:.1=.1.gz), $(ECHO) -e "  INSTALL\t$(f)"; \
	$(INSTALL) -m 644 $(f) $(DESTDIR)/$(DIR_MAN);)
	$(E) "INSTALL\t\tAUTHORS INSTALL README COPYING Changes"
	$(INSTALL) -m644 AUTHORS INSTALL README COPYING Changes $(DESTDIR)/$(DIR_DOC)
	$(E) "INSTALL\t\t $(DIR_EXAMPLE)"
	$(CP) -r $(DIR_EXAMPLE) $(DESTDIR)/$(DIR_DOC)

install-strip: install
	$(foreach f,  $(subst scripts/,,$(subst src/,,$(PROGRAMS))), $(ECHO) -e "  STRIP\t\t$(f)"; \
	$(STRIP) -s $(DESTDIR)/$(DIR_BIN)/$(f);) \
	$(foreach f,  $(subst scripts/,,$(subst src/,,$(PROGS_BIN))), $(ECHO) -e "  STRIP\t\t$(f)"; \
	$(STRIP) -s $(DESTDIR)/$(DIR_RBIN)/$(f);)
	
uninstall:
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
	# /bin
	$(foreach f, $(subst scripts/,,$(subst src/,,$(PROGS_BIN))), $(ECHO) -e "  UNINSTALL\t$(f)"; \
	rm -f $(DESTDIR)/$(DIR_RBIN)/$(f);)
	# /usr/bin
	$(foreach f, $(subst scripts/,,$(subst src/,,$(PROGS_USR_BIN))), $(ECHO) -e "  UNINSTALL\t$(f)"; \
	rm -f $(DESTDIR)/$(DIR_BIN)/$(f);)
	$(E) "UNINSTALL\t$(FILES_MAN)"
	rm -f $(DESTDIR)/$(DIR_MAN)/$(FILES_MAN)


#
# gettext translation stuff
#

# Re-create the messages.po file
nls-messages:
	$(E) "XGETTEXT\t\tGenerating po/messages.tpo"
	xgettext -p po -o messages.tpo src/*.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 install nls-messages
