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


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

include Init.make

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


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


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

CFLAGS           = 
CPPFLAGS         = -O2 -Wall
EXTRA_CPPFLAGS   =
LDFLAGS          =


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

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


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

ifeq ($(strip $(PROGRAM)),)
  TARGET         = noprogname
else
  TARGET         = $(PROGRAM)
endif
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 :
#
CPP		 = $(CROSS_COMPILE)cpp
CC               = $(CROSS_COMPILE)gcc
STRIP		 = $(CROSS_COMPILE)strip
CP               = cp
RM               = rm
INSTALL          = install
TAR              = tar
GZIP             = gzip
SED              = sed


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

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

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

noprogname:
	@echo "ERROR : No program name given. Change variable PROGRAM in Init.make."
	@exit 2

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)/" config.h.in > config.h

dep: .dependencies

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

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

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

clean: mostlyclean

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

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

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

install: $(TARGET)
	$(INSTALL) -d --mode=2775 $(BINDIR)
	$(INSTALL) --mode=0775 ./$(TARGET) $(BINDIR)

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

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

.dependencies: config.h $(PREDEP)
	@echo "Creating dependencies for $(PROGRAM)..."
	@-$(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:

