##################################################################
#                                                                #
# Makefile (generic program creation Makefile)                   #
#                                                                #
# Thomas Nemeth.                                                 #
#                                                                #
##################################################################


##################################################################
#                                                                #
#            PARTIE DES VARIABLES NON MODIFIABLES !              #
#              NO MODIFICATION BELOW THIS LINE !                 #
#                                                                #
##################################################################

include Init.make

TODAY       = $(shell date +%Y%m%d)
MY_OSTYPE   = $(shell uname -s | tr "[A-Z]" "[a-z]")
MY_MACHTYPE = $(shell uname -m | tr "[A-Z]" "[a-z]")


INSTALLDIR = $(DESTDIR)$(PREFIX)
BINDIR     = $(INSTALLDIR)/bin
MANDIR     = $(INSTALLDIR)/man/man1
LIBDIR     = $(INSTALLDIR)/lib
INCDIR     = $(INSTALLDIR)/include


#*****************************************************************
# FLAGS :
#

CFLAGS           = -DHAVE_CONFIG_H
CPPFLAGS         = -O2 -W -Wall
EXTRA_CPPFLAGS   = -I/usr/include
LDFLAGS          =


#*****************************************************************
# DEBUG MODE FLAGS :
#

DEBUG_CFLAGS     = -g3
DEBUG_CPPFLAGS   = -DDEBUG_LEVEL=${DEBUG_LEVEL}
DEBUG_LDFLAGS    = -g3


#*****************************************************************
# TARGET - SOURCES - OBJECTS :
#

TARGET           = $(PROGRAM)
SRCS             = $(shell ls *.c)
OBJS             = $(SRCS:%.c=%.o)


##################################################################
# GLOBAL DEFINITIONS :
#

DEFAULT_CPPFLAGS = $(CPPFLAGS) $(EXTRA_CPPFLAGS)

ALL_CFLAGS       = $(CFLAGS) $(DEBUG_CFLAGS) $(USER_CFLAGS)
ALL_CPPFLAGS     = $(DEFAULT_CPPFLAGS) $(DEBUG_CPPFLAGS) $(USER_CPPFLAGS)
ALL_LIBS         = $(LDFLAGS) $(DEBUG_LDFLAGS) $(USER_LDFLAGS)


#*****************************************************************
# COMMON COMMANDS :
#
CC               = gcc
CP               = cp
RM               = rm
INSTALL	         = install
TAR              = tar
GZIP             = gzip
SED              = sed


##################################################################
# RULES :
#

.PHONY: all dep mostlyclean clean distclean install install-strip uninstall package

all: config.h $(PREDEP) $(TARGET)

config.h: Init.make config.h.in
	@echo "Building config.h..."
	@$(SED) -e "s/#PACKAGE#/$(PACKAGE)/" \
	        -e "s/#PROGRAM#/$(PROGRAM)/" \
	        -e "s/#VERSION#/$(VERSION)/" \
	        -e "s/#BUILD#/$(TODAY)/" \
	        -e "s/#OSTYPE#/$(MY_OSTYPE)/" \
	        -e "s/#MACHTYPE#/$(MY_MACHTYPE)/" config.h.in > config.h

dep: .dependencies

$(TARGET): $(OBJS)
	$(CC) -o $(TARGET) $(OBJS) $(ALL_LIBS)

%.o: %.c
	$(CC) -c $(ALL_CFLAGS)  $(ALL_CPPFLAGS) $<

mostlyclean:
	-$(RM) -f *~ *.o
	-$(RM) -f core

clean: mostlyclean
	-$(RM) -f $(TARGET)

distclean: userdistclean clean
	-$(RM) -f config.h

mrproper: distclean
	-$(RM) -r .dependencies

install-bin: $(TARGET)
	$(INSTALL) -d --mode=0755 $(BINDIR)
	$(INSTALL) --mode=0755 ./$(TARGET) $(BINDIR)

install: install-bin
	$(INSTALL) -d --mode=0755 $(MANDIR)
	$(INSTALL) --mode=0644 ./$(TARGET).1 $(MANDIR)

install-strip: install
	strip $(BINDIR)/$(TARGET)

uninstall:
	-$(RM) -f $(BINDIR)/$(TARGET)

package: mrproper
	@-$(RM) -f ../$(PROGRAM)-$(VERSION).tar.gz
	@cd .. ; \
	  $(TAR) -cf $(PROGRAM)-$(VERSION).tar $(PROGRAM) ; \
	  $(GZIP) -9 $(PROGRAM)-$(VERSION).tar

.dependencies: config.h $(PREDEP)
	@echo "Making dependencies in `basename ${PWD}`..."
	@-$(RM) -f .dependencies
	@touch .dependencies
	@for i in ${SRCS} ; do \
	  echo "Making dependencies for $$i" ; \
	  $(CPP) $(ALL_CPPFLAGS) -MM $$i >> .dependencies ; \
	done

include .dependencies

userdistclean:

