###############################################################################
# Makefile GENERAL de Wormux
# Par STINNER Victor (Haypo) - http://www.haypocalc.com/
###############################################################################

# Dfintions communes
include make.env

ifndef ERREUR
###############################################################################

# Rgle par dfaut : compile tout
all: compile_debut checklib i18n_mo $(BIN) compile_fin

# Compile en mode release
release: compile_debut checklib i18n_mo $(BIN) strip compile_fin
strip:
	@echo "o Nettoie le binaire (strip)"
	@strip $(BIN)

# Message d'accueil
compile_debut:
	@echo -e $(call SEPARATEUR,"(dbut compilation)")
	@echo
ifdef RELEASE
	@echo -e $(call TITRE,"Compilation de Wormux (RELEASE)")
	@echo
	@echo -e "CXXFLAGS =" $(call GRAS,$(CXXFLAGS))
else
	@echo -e $(call TITRE,"Compilation de Wormux (DEBUG)")
endif
	@echo

# Vrifie qu'on a toutes les librairies ncessaires
checklib:
	@(pkg-config clanlib --libs 1>/dev/null 2>&1 \
	 || clanlib-config --libs 1>/dev/null 2>&1) \
	 || (echo -e $(ERREUR_CLANLIB); exit 1)
	@pkg-config libxml++-1.0 --libs 1>/dev/null 2>&1 \
	 || (echo -e $(ERREUR_LIBXMLPLUSPLUS); exit 1)

# Affiche des informations sur la compilation
info:
	@echo -e $(call TITRE,"Wormux version" $(call GRAS,$(VERSION)))
	@echo
ifdef LINUX
	@echo -e "Compilation sous" $(call GRAS,"Linux")
else
	@echo -e "Compilation sous" $(call GRAS,"Windows")
endif
	@echo -e "CXX =" $(call GRAS,$(CXX))
	@echo
	@echo -e "CXXFLAGS =" $(call GRAS,$(CXXFLAGS))
	@echo
	@echo -e "LIBS =" $(call GRAS,$(LIBS))
	@echo

# Compilation proprement dite, puis liaison
$(BIN): $(OBJECTS)
	@echo -e "o Lie le tout dans" $(call GRAS,$(BIN))
	@$(CXX) -o $(BIN) $(CXXFLAGS) $(LIBS) $(OBJECTS)

# Generate .mo file
i18n_mo: $(I18N_MO)
%.mo: %.po
	@echo -e "Generate "$(call GRAS,$@)" file";
	@msgfmt $< -o $@

# Message de fin de compilation
compile_fin:
	@echo
	@echo -e $(call TITRE,"Compilation termine")
	@echo
	@echo -e "Lancez Wormux en tapant :" $(call GRAS,$(dir $(BIN))$(notdir $(BIN)))
	@echo -e "Vous pouvez aussi utiliser" $(call GRAS,"make exec")
	@echo -e "(ou make qexec pour eviter la liaison)"
	@echo -e $(call SEPARATEUR,"(fin compilation)")

# Crer une archive tgz du programme
# Options de tar :
# -cvf : Create Verbose File=
# -C : Change directory
# -z : Passe  travers gzip
tgz-bin: release
	@echo -e $(call SEPARATEUR,"(dbut archivage)")
	@echo
	@echo -e $(call TITRE,"Creer l'archive binaire")
	@echo
	@rm -f $(ARCHIVE_BIN)
	@echo -e "o Fichier :" $(call GRAS,$(ARCHIVE_BIN))
	@echo
	@echo -e "(en cas d'erreur, verifiez que le rpertoire principal de Wormux s'appelle bien 'wormux')"
	tar -czf $(ARCHIVE_BIN) -C ../../ $(addprefix wormux/,$(INCLU_TGZ_BIN)) $(EXCLU_TGZ_BIN)
	@echo
	@echo -e "Taille de l'archive =" \
                $(call GRAS,$(call TAILLE_FICHIER,$(ARCHIVE_BIN)))
	@echo
	@echo -e $(call SEPARATEUR,"(fin archivage)")

# Crer une archive tgz des sources (voir la regle 'tgz' pour plus d'infos)
tgz-src:
	@echo -e $(call SEPARATEUR,"(dbut archivage)")
	@echo
	@echo -e $(call TITRE,"Creer l'archive source")
	@echo
	@rm -f $(ARCHIVE_SRC)
	@echo -e "Fichier :" $(call GRAS,$(ARCHIVE_SRC))
	@echo
	@echo -e "(en cas d'erreur, verifiez que le rpertoire principal de Wormux s'appelle bien 'wormux')"
	@tar -czf $(ARCHIVE_SRC) -C ../../ \
        $(addprefix wormux/,$(INCLU_TGZ_SRC)) $(EXCLU_TGZ_SRC)
	@echo
	@echo -e "Taille de l'archive =" \
                $(call GRAS,$(call TAILLE_FICHIER,$(ARCHIVE_SRC)))
	@echo
	@echo -e $(call SEPARATEUR,"(fin archivage)")

# Nettoyage : Efface les binaires et temporaires
clean:
	@echo -e $(call SEPARATEUR,"(dbut du nettoyage)")
	@echo
	@echo -e $(call TITRE,"Nettoyage")
	@echo
	rm -f $(shell find ../ $(FICH_TMP_FIND))
	@echo
	@echo -n "Pour effacer les objets et binaire, "
	@echo "tapez make cleanall"
	@echo
	@echo -e $(call SEPARATEUR,"(fin du nettoyage)")

# Nettoyage : Efface les binaires et temporaires
cleanall: clean
	@echo -e $(call SEPARATEUR,"(dbut du gros nettoyage)")
	@echo
	@echo -e $(call TITRE,"Nettoyage")
	@echo
	rm -f *.o $(BIN)
	@echo
	@echo -e $(call SEPARATEUR,"(fin du gros nettoyage)")

### Compile, puis excute Wormux ###
exec: all qexec

### Excute Wormux, sans recompilation ###
qexec:
	@echo -e $(call SEPARATEUR,"(excution)")
ifdef LINUX
	@(cd $(dir $(BIN)); ./$(notdir $(BIN));)
else
	@cd $(dir $(BIN))
	@$(notdir $(BIN))
endif
	@echo -e $(call SEPARATEUR,"(fin d'excution)")

# Installation
pre_install:
	@touch constante.cpp

install: CXXFLAGS += -DINSTALL_DIR=\"$(DIR_SHARE)\"
install: pre_install release all
	@echo -e $(call SEPARATEUR,"(dbut installation)")
	@echo
	@echo -e $(call TITRE,"Installation de Wormux")
	@echo
	@echo -e "Rpetoire d'installation" $(call GRAS,$(DIR_OK))
	@echo
	@$(WARNING_ROOT)
	@echo
	@echo -e "Cration du rpetoire" $(call GRAS,$(DIR_BIN))
	@mkdir -p $(DIR_BIN)
	@echo -e "Cration du rpetoire" $(call GRAS,$(DIR_SHARE))
	@mkdir -p $(DIR_SHARE)
	@echo

	@echo -e "Nettoyage du rpertoire" $(call GRAS,$(DIR_SHARE))
	@rm -rf $(DIR_SHARE)*
	@echo

	@echo -e "Copie du binaire."
	@cp $(BIN) $(DIR_BIN)
	@echo -e "Copie des donnes."
	@cp -R ../donnee/* $(DIR_SHARE)
	@echo

	@echo -e "Change les droits des fichiers"
	@find $(DIR_SHARE) -type f -exec chmod 755 {} \;
	@echo -e "Change les droits des rpertoires."
	@find $(DIR_SHARE) -type d -exec chmod 755 {} \;
	@echo

	@echo -e $(call GRAS,"Installation de Wormux termine !")
	@echo
	@echo -e $(call SEPARATEUR,"(dbut installation)")

# Dsinstallation
uninstall:
	@echo -e $(call SEPARATEUR,"(dbut dsinstallation)")
	@echo
	@echo -e $(call TITRE,"Dsinstallation de Wormux")
	@echo
	@echo -e "Rpertoire d'installation :" $(call GRAS,$(DIR_OK))
	@$(WARNING_ROOT)
	@echo -e "o Suppression de" $(call GRAS,$(DIR_BIN)$(notdir $(BIN)))
	@rm -rf $(DIR_BIN)$(notdir $(BIN))

	@echo -e "o Suppression de" $(call GRAS,$(DIR_SHARE))
	@rm -rf $(DIR_SHARE)

	@echo
	@echo -e $(call GRAS,"Fin de la dsinstallation de Wormux termine")"."
	@echo
	@echo -e $(call SEPARATEUR,"(fin dsinstallation)")

# Gnration du nouveau fichier .po
i18n_pot: $(I18N_POT)
$(I18N_POT): $(SOURCES)
	@echo -e $(call SEPARATEUR,"(dbut fichier .po)")
	@echo
	@echo -e "Creation du fichier" $(call GRAS,$(I18N_POT))
	@xgettext -o $(I18N_POT) $(SOURCES) -k'_' -s \
	 --force --from-code iso-8859-1
	@echo
	@echo -e $(call SEPARATEUR,"(fin fichier .po)")

# Gnration des dpendances des fichiers sources
# Utilise "gcc -MM"
%.d: %.cpp
	@echo -e "o Calcule les dependences de" $(call GRAS,$<)
	@$(CC) -MM $< >$@.tmp \
	&& sed -e 's/\.o/.d/' <$@.tmp >$@\
	&& cat $@.tmp >>$@\
	&& rm -f $@.tmp
	@echo -e "\t"'@echo -e "o Compile" $$(call GRAS,$<)\\'"\n"\
	"\t"'&& $$(CXX) -o $(<:.cpp=.o) -c $< $$(CXXFLAGS)' >>$@

ifdef NEED_DEPEND

# Inclusion des dpendances
# Si elles n'existent pas, les gnre :-)
-include $(DEPENDS)

endif

ifdef NEED_OBJECT_RULE

# Rgle par dfaut pour la compilation
%.o: %.cpp
	@echo -e "o Compile" $(call GRAS,$<)
	@$(CXX) -o $@ -c $< $(CXXFLAGS)

endif

###############################################################################

# Erreur
else

%: all
all:
	@echo -e $(ERREUR)
	@exit 1

endif
