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

# Dfintions communes
include make.env

# Ligne de sparation
SEPARATEUR="$(COUL_SEPAR)--- Wormux version $(VERSION) "$1" ---$(COUL_DEFAUT)"

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

### Compilation de Wormux ###
all: compile
compile: compile_intro compile_debut $(BIN) compile_fin

# Message d'accueil
compile_intro:
	@echo -e $(call SEPARATEUR,"(dbut compilation)")
	@echo

compile_debut:
ifdef RELEASE
	@echo -e $(call TITRE,"Compilation de Wormux (RELEASE)")
else
	@echo -e $(call TITRE,"Compilation de Wormux (DEBUG)")
endif
	@echo

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

# Generations des dependances
# (avec barre d'avancement toute jolie :-))
depend: $(SOURCES) $(ENTETES)
	@echo -e "* Cration des dependances" $(call GRAS,"make.dep")
	@rm -f make.dep
	@$(foreach source,$(SOURCES), \
           $(CXX) -MM $(source) >>make.dep || exit 1;)
-include make.dep

# 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
ifdef RELEASE
	@echo -e "Mode" $(call GRAS,"DEBUG")
else
	@echo -e "Mode" $(call GRAS,"RELEASE")
endif
	@echo -e "CXX ="  $(call GRAS,$(CXX))
	@echo -e "CXXFLAGS ="  $(call GRAS,$(CXXFLAGS))
	@echo -e "LIBS ="  $(call GRAS,$(LIBS))
	@echo -e "Rpertoire d'installation ="  $(call GRAS,$(INSTALL_DIR))
	@echo

# Compilation proprement dite, puis liaison
$(BIN): checklib depend $(OBJECTS)
	@echo -e "* Lie le tout dans" $(call GRAS,$(BIN))
	@$(CXX) -o $(BIN) $(CXXFLAGS) $(LIBS) $(OBJECTS)
ifdef RELEASE
	@echo "* Nettoie le binaire (strip)"
	@strip $(BIN)
endif

# 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: compile
	@echo -e $(call SEPARATEUR,"(dbut archivage)")
	@echo
	@echo -e $(call TITRE,"Creer l'archive binaire")
	@echo
	@rm -f $(ARCHIVE_BIN)
	@echo -e "* 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 ../ $(INCLU_TGZ_BIN) $(EXCLU_TGZ_BIN) $(notdir $(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 cfz $(ARCHIVE_SRC) -C ../../ $(EXCLU_TGZ_SRC) wormux
	@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 $(FICH_TMP) $(FICH_TMP_REP_COURANT)
	rm -f `find ../ $(FICH_TMP_FIND)`
	rm -f $(BIN)
	rm -f gmon.out
	@echo
	@echo -e $(call SEPARATEUR,"(fin 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)")

# Configuration de l'installation
config_install:
	@if [ "x$(DIR)" == "x" ]; then \
	  echo "Il faut spcifier un nouveau rpertoire d'installation !"; \
	  echo "Exemple : make config_install DIR=/usr/local"; \
	  exit 1; \
	fi
	@echo -e "Nouveau rpertoire d'installation :" $(call GRAS,"$(DIR_OK)")
	@echo -e "Corrige" $(call GRAS,"make.env")
	@mv make.env make.env.old
	@sed -e 's!^INSTALL_DIR=.*$$!INSTALL_DIR=$(DIR_OK)!' \
         make.env.old >make.env

	@echo -e "Corrige" $(call GRAS,"constante.cpp")
	@mv constante.cpp constante.old
	@sed -e 's!REPERTOIRE_INSTALL(.*)!REPERTOIRE_INSTALL("$(DIR_OK)")!' \
         constante.old >constante.cpp
	@echo

# Installation
install: compile
	@echo -e $(call SEPARATEUR,"(dbut installation)")
	@echo
	@echo -e $(call TITRE,"Installation de Wormux")
	@echo
	@echo -e "Rpertoire d'installation :" $(call GRAS,$(INSTALL_DIR))

	@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,$(INSTALL_DIR2))
	@echo

	@echo -e "Suppression de " $(call GRAS,$(DIR_BIN)$(notdir $(BIN)))
	@rm -rf $(DIR_BIN)$(notdir $(BIN))
	@echo -e "Nettoyage du rpertoire" $(call GRAS,$(DIR_SHARE))
	@rm -rf $(DIR_SHARE)*
	@echo

	@echo -e "Suppression du rpetoire" $(call GRAS,$(DIR_SHARE))
	@rmdir $(DIR_SHARE)
	@echo

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