#-------------------------------------------------------------------------------
# Filename:    Makefile
# Description: LaTeX compilation flow
#-------------------------------------------------------------------------------

include ${MORPHEO_TOPLEVEL}/Makefile.tools
#--------------------------------------------------------------------------------
# User-defined options :
#--------------------------------------------------------------------------------

TYPE_DOC              	= ("doc" "ppt" "poster")

DEFAULT_LANG		= fr
FILE_SOURCE_SED  	= file_source.sed
FILE_SOURCE_STY		= file_source.sty
FILE_SOURCE_TEX		= file_source.tex

#--------------------------------------------------------------------------------
# Directory
#--------------------------------------------------------------------------------
VERSION			= "1.3" # 2007/07/18

DIR_DOCUMENTATION   	= ..
DIR_INCLUDE		= Include
DIR_PACKAGE		= Info
DIR_DOCUMENTS		= Documents
DIR_LANGUAGE		= Info
DIR_TYPE		= Info
DIR_GRAPH		= Graph
DIR_SCHEMA		= Schema
DIR_SCHEMA_EPS		= Schema_eps
DIR_SCHEMA_PNG		= Schema_png
DIR_TEX			= Source
DIR_LINK		= Link

#--------------------------------------------------------------------------------
# Directory
#--------------------------------------------------------------------------------
ENV_LATEX		= $(EXPORT) TEXINPUTS=$(DIR_INCLUDE):$$TEXINPUTS
LATEX_WITH_ENV		= $(ENV_LATEX); $(LATEX)



#--------------------------------------------------------------------------------
# File
#--------------------------------------------------------------------------------

ALL_FILES 		= $(wildcard $(DIR_TYPE)/*.type)

TEX_FILES 		= $(wildcard $(DIR_TEX)/*.tex)
FILES     		= $(patsubst $(DIR_TEX)/%.tex,%    ,$(TEX_FILES))
DVI_FILES	 	= $(patsubst $(DIR_TEX)/%.tex,%.dvi,$(TEX_FILES))
PS_FILES  		= $(patsubst $(DIR_TEX)/%.tex,%.ps ,$(TEX_FILES))
PDF_FILES 		= $(patsubst $(DIR_TEX)/%.tex,%.pdf,$(TEX_FILES))
PNG_FILES		= $(patsubst $(DIR_GRAPH)/%.p,$(DIR_SCHEMA_PNG)/%.png,$(wildcard $(DIR_GRAPH)/*.p))		\
			  $(patsubst $(DIR_SCHEMA)/%.fig,$(DIR_SCHEMA_PNG)/%.png,$(wildcard $(DIR_SCHEMA)/*.fig))	\
			  $(patsubst $(DIR_SCHEMA)/%.eps,$(DIR_SCHEMA_PNG)/%.png,$(wildcard $(DIR_SCHEMA)/*.eps))

#--------------------------------------------------------------------------------
# The reset of this file shall not be editted
#--------------------------------------------------------------------------------
.PHONY 			: all clean view help doc doc_all new delete
.SECONDARY 		: $(DVI_FILES) $(PS_FILES) $(PDF_FILES) $(PNG_FILES) $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)
.PRECIOUS		: %.pdf %.ps %.dvi $(DIR_SCHEMA_PNG)/%.png $(DIR_SCHEMA_EPS)/%.eps

all 			: help

doc			: $(PNG_FILES) $(DIR_TEX)
			@\
			for file in $(ALL_FILES); do                                				\
				file=`$(BASENAME) $$file .type`;						\
				type=`$(CAT) $(DIR_TYPE)/$$file.type`;						\
						           		                			\
				for lang in `$(CAT) $(DIR_LANGUAGE)/$$file.lang`; do                        		\
					if $(TEST) ! -f "$(DIR_TEX)/$$file-$$lang.tex"; then			\
			                        $(ECHO) "s/@LANG/$$lang/"                     >  $$$$;          \
			                        $(ECHO) "s/@FILE/$$file/"                     >> $$$$;          \
			                        $(ECHO) "s/@DIRPACKAGE/$(DIR_PACKAGE)/"       >> $$$$;        	\
			                        $(ECHO) "s/@DIRDOC/$(DIR_DOCUMENTS)\/$$file/" >> $$$$;        	\
			                        $(ECHO) "s/@DIRSCHEMA/$(DIR_SCHEMA_EPS)/"     >> $$$$;        	\
		        	                $(CAT) $(DIR_INCLUDE)/$$type-$(FILE_SOURCE_SED) | $(SED) -f $$$$ > $(DIR_TEX)/$$file-$$lang.tex; \
						$(RM)   $$$$;                                        		\
					fi;									\
				done;										\
			done;                                       		                		\
			$(MAKE) doc_all;

doc_all			: $(PDF_FILES)

#--------------------------------------------------------------------------------
# Generation of the formatted text:
# regular flow tex -> dvi -> ps -> pdf.
#--------------------------------------------------------------------------------
%.pdf 			: %.ps
			@\
			$(ECHO) "Gnration du fichier $*.pdf";		\
			$(PS2PDF) $< $@;				\
			$(CP) $@ $(DIR_DOCUMENTATION);

%.ps 			: %.dvi
			@\
			$(ECHO) "Gnration du fichier $*.ps";		\
			$(DVIPS) -o $@ $<;

#$(DIR_LINK)/%/*
%.dvi 			: $(DIR_TEX)/%.tex 
			@\
			$(ECHO) "Gnration du fichier $*.dvi";		\
			$(LATEX_WITH_ENV) $<;				\
			if $(TEST) $? -eq 0; then			\
				$(LATEX_WITH_ENV) $< > /dev/null;	\
				citation=`$(GREP) "citation" $*.aux`; 	\
	                	if $(TEST) -n "$$citation" ; then  	\
					$(BIBTEX) $* ; 			\
				fi;					\
				$(LATEX_WITH_ENV) $< > /dev/null;	\
				$(LATEX_WITH_ENV) $< > /dev/null;	\
			fi;

#--------------------------------------------------------------------------------
# New - Delete - Rename
#--------------------------------------------------------------------------------
new			:
			@											\
			$(ECHO) "";                       			                		\
			$(ECHO) "Choose a type of a document    : (0 is	default)";				\
			CPT=0;                                      		                		\
			declare -a type_doc=$(TYPE_DOC);							\
			for type in $${type_doc[@]}; do                                  			\
				$(ECHO) "$$CPT) $$type";                     		                	\
				CPT=$$(($$CPT+1));                  		                		\
			done;                                       		                		\
			declare -i NUM_TYPE;									\
			$(READ) NUM_TYPE;			    		                		\
														\
			if $(TEST) "$$NUM_TYPE" -ge "$$CPT"; then                               		\
				NUM_TYPE=0;                                  		        		\
			fi;											\
			declare    TYPE=$${type_doc[$$NUM_TYPE]};						\
														\
			declare    FILENAME;									\
			$(ECHO) "";                       			                		\
			$(ECHO) "Give the name of the documents :";						\
			$(READ) FILENAME;									\
														\
			if $(TEST) -z "$$FILENAME" -o -d "$(DIR_TYPE)/$$FILENAME.type";				\
			then											\
				$(ECHO) "Invalid name : string is empty, or filename is already used";		\
				$(EXIT);									\
			fi;											\
														\
			$(ECHO) "Create file      : $(DIR_LANGUAGE)/$$FILENAME.lang";                 		\
			$(ECHO) "                   (Default language : $(DEFAULT_LANG))";			\
			$(ECHO) "$(DEFAULT_LANG)" > $(DIR_LANGUAGE)/$$FILENAME.lang;                  		\
														\
			$(ECHO) "Create file      : $(DIR_TYPE)/$$FILENAME.type";                    		\
			$(ECHO) $$TYPE > $(DIR_TYPE)/$$FILENAME.type;						\
														\
			$(ECHO) "Create file      : $(DIR_PACKAGE)/$$FILENAME.sty";                    		\
			$(CP) $(DIR_INCLUDE)/$$TYPE-$(FILE_SOURCE_STY) $(DIR_PACKAGE)/$$FILENAME.sty;		\
														\
			$(ECHO) "Create file      : $(DIR_PACKAGE)/$$FILENAME.tex";                    		\
			$(CP) $(DIR_INCLUDE)/$$TYPE-$(FILE_SOURCE_TEX) $(DIR_PACKAGE)/$$FILENAME.tex;		\
														\
			$(ECHO) "Create directory : $(DIR_DOCUMENTS)/$$FILENAME";                    		\
			$(ECHO) "Create directory : $(DIR_DOCUMENTS)/$$FILENAME/common";              		\
			$(ECHO) "Create directory : $(DIR_DOCUMENTS)/$$FILENAME/$(DEFAULT_LANG)"; 		\
			$(MKDIR) $(DIR_DOCUMENTS)/$$FILENAME/common;						\
			$(MKDIR) $(DIR_DOCUMENTS)/$$FILENAME/$(DEFAULT_LANG);					\
														\
			$(ECHO) "Create link      : $(DIR_LINK)/$$FILENAME-$(DEFAULT_LANG)"; 			\
			$(LINK_SYMBOLIC) $(DIR_DOCUMENTS)/$$FILENAME/$(DEFAULT_LANG) $(DIR_LINK)/$$FILENAME-$(DEFAULT_LANG); \
														\
			$(ECHO) "Create file      : $(DIR_DOCUMENTS)/$$FILENAME/$(DEFAULT_LANG)/root.tex"; 	\
			$(TOUCH) $(DIR_DOCUMENTS)/$$FILENAME/$(DEFAULT_LANG)/root.tex

delete			:
			@											\
			declare -a FILES;									\
			declare -i CPT;         								\
			declare -i NUM_FILE;									\
			declare -i NUM_FILE_CONFIRM;								\
														\
			$(ECHO) "";                       			                		\
			$(ECHO) "Choose a document  : (0 by default)";		                		\
			$(ECHO) "0) ( none )";                               	                		\
														\
			CPT=1;                                      		                		\
			for files in $(ALL_FILES); do                                  				\
				files=`$(BASENAME) $$files .type`;                     				\
				$(ECHO) "$$CPT) $$files";           		                		\
				FILES[$$CPT]=$$files;				                		\
				CPT=$$(($$CPT+1));                  		                		\
			done;                                       		                		\
			$(READ) NUM_FILE;			    		                		\
														\
			if $(TEST) "$$NUM_FILE" -ge "$$CPT"; then                               		\
				NUM_FILE=0;                                  		        		\
			fi;											\
														\
			$(ECHO) "Please reenter the document id to confirm the delete";         		\
			$(READ) NUM_FILE_CONFIRM;		    		                		\
														\
			if $(TEST) "$$NUM_FILE" -eq "0" -o "$$NUM_FILE" -ne "$$NUM_FILE_CONFIRM"; then          \
				$(ECHO) "Delete cancelled";							\
				$(EXIT);                                       		        		\
			fi;											\
														\
			declare    FILENAME;									\
			FILENAME=$${FILES[$$NUM_FILE]};					      			\
														\
			$(ECHO) "Delete file      : $(DIR_TYPE)/$$FILENAME.type";                   		\
			$(RM) $(DIR_TYPE)/$$FILENAME.type;                 					\
														\
			$(ECHO) "Delete file      : $(DIR_LANGUAGE)/$$FILENAME.lang";                   	\
			$(RM) $(DIR_LANGUAGE)/$$FILENAME.lang;                 					\
														\
			$(ECHO) "Delete file      : $(DIR_PACKAGE)/$$FILENAME.sty";                    		\
			$(RM) $(DIR_PACKAGE)/$$FILENAME.sty;							\
														\
			$(ECHO) "Delete file      : $(DIR_PACKAGE)/$$FILENAME.tex";                    		\
			$(RM) $(DIR_PACKAGE)/$$FILENAME.tex;							\
														\
			$(ECHO) "Delete directory : $(DIR_DOCUMENTS)/$$FILENAME";                    		\
			$(RM) $(DIR_DOCUMENTS)/$$FILENAME;							\
			$(ECHO) "Delete link      : $(DIR_DOCUMENTS)/$$FILENAME";                    		\
			$(RM) $(DIR_LINK)/$$FILENAME-*;

rename			:
			@											\
			declare -a FILES;									\
			declare -i CPT;         								\
			declare -i NUM_FILE;									\
														\
			$(ECHO) "";                       			                		\
			$(ECHO) "Choose a document  : (0 by default)";		                		\
			$(ECHO) "0) ( none )";                               	                		\
														\
			CPT=1;                                      		                		\
			for files in $(ALL_FILES); do                                  				\
				files=`$(BASENAME) $$files .type`;                   				\
				$(ECHO) "$$CPT) $$files";           		                		\
				FILES[$$CPT]=$$files;				                		\
				CPT=$$(($$CPT+1));                  		                		\
			done;                                       		                		\
			$(READ) NUM_FILE;			    		                		\
														\
			if $(TEST) "$$NUM_FILE" -ge "$$CPT"; then                               		\
				NUM_FILE=0;                                  		        		\
			fi;											\
														\
			if $(TEST) "$$NUM_FILE" -eq "0"; then              					\
				$(ECHO) "Rename cancelled";							\
				$(EXIT);                                       		        		\
			fi;											\
														\
			declare    FILENAME_SRC;								\
			declare    FILENAME_DEST;								\
			FILENAME_SRC=$${FILES[$$NUM_FILE]};					      		\
														\
			$(ECHO) "Give the new name of the documents :";						\
			$(READ) FILENAME_DEST;									\
														\
			if $(TEST) -z "$$FILENAME_DEST" -o -d "$(DIR_TYPE)/$$FILENAME_DEST.type";		\
			then											\
				$(ECHO) "Invalid name : string is empty, or filename is already used";		\
				$(EXIT);									\
			fi;											\
														\
			$(ECHO) "Rename file      : $(DIR_LANGUAGE)/$$FILENAME_SRC.lang";              		\
			$(MV) $(DIR_LANGUAGE)/$$FILENAME_SRC.lang $(DIR_LANGUAGE)/$$FILENAME_DEST.lang;         \
														\
			$(ECHO) "Rename file      : $(DIR_TYPE)/$$FILENAME_SRC.type";                 		\
			$(MV) $(DIR_TYPE)/$$FILENAME_SRC.type     $(DIR_TYPE)/$$FILENAME_DEST.type;             \
														\
			$(ECHO) "Rename file      : $(DIR_PACKAGE)/$$FILENAME_SRC.sty";                    	\
			$(MV) $(DIR_PACKAGE)/$$FILENAME_SRC.sty   $(DIR_PACKAGE)/$$FILENAME_DEST.sty;		\
														\
			$(ECHO) "Rename directory : $(DIR_DOCUMENTS)/$$FILENAME_SRC";                    	\
			$(MV) $(DIR_DOCUMENTS)/$$FILENAME_SRC     $(DIR_DOCUMENTS)/$$FILENAME_DEST;		\
			$(ECHO) "Rename link      : manually please";



#--------------------------------------------------------------------------------
# View
#--------------------------------------------------------------------------------
view			: doc
			@                                           		                		\
			declare    SELECT_FILE;									\
			declare    SELECT_LANG;									\
			declare    SELECT_FORMAT;								\
			declare    SELECT_VIEWER;								\
														\
														\
			$(ECHO) "";                       			                		\
			$(ECHO) "Choose a document  : (0 by default)";		                		\
														\
			declare -i CPT;         								\
			declare -i NUM_FILE;									\
			declare -a FILES;									\
														\
			CPT=0;                                      		                		\
			for files in $(ALL_FILES); do                                  				\
				files=`$(BASENAME) $$files .type`;                   				\
				type=`$(CAT) $(DIR_TYPE)/$$files.type`;						\
				$(ECHO) "$$CPT) $$type - $$files";           		                	\
				FILES[$$CPT]=$$files;				                		\
				CPT=$$(($$CPT+1));                  		                		\
			done;                                       		                		\
			$(READ) NUM_FILE;			    		                		\
														\
			if $(TEST) "$$NUM_FILE" -ge "$$CPT"; then                               		\
				NUM_FILE=0;                                  		        		\
			fi;											\
														\
			SELECT_FILE=$${FILES[$$NUM_FILE]};							\
			$(ECHO) "Document selected  : $$SELECT_FILE";                           		\
			$(ECHO) "";                                 		                		\
														\
														\
														\
			$(ECHO) "Choose a language  : (0 by default)";	                        		\
														\
			declare -i NUM_LANG;									\
			declare -a LANG;      									\
														\
			CPT=0;						                        		\
			for lang in `$(CAT) $(DIR_LANGUAGE)/$$SELECT_FILE.lang`; do				\
			    	$(ECHO) "$$CPT) $$lang";				                	\
				LANG[$$CPT]=$$lang;				                		\
				CPT=$$(($$CPT+1));				                        	\
			done;						                        		\
			$(READ) NUM_LANG;			    	                        		\
														\
			if $(TEST) "$$NUM_LANG" -ge "$$CPT"; then                             			\
				NUM_LANG=0;	 			                        		\
			fi;						                        		\
														\
			SELECT_LANG=$${LANG[$$NUM_LANG]};							\
			$(ECHO) "Language selected  : $$SELECT_LANG";                       			\
			$(ECHO) "";                                 		                		\
														\
														\
														\
			$(ECHO) "Choose a format    : (0 by default)";	                        		\
														\
			declare -i NUM_FORMAT;									\
			declare -a FORMAT;      								\
			declare -a VIEWER;      								\
														\
			FORMAT=("pdf"           "pdf"        "ps"        "dvi");	                        \
			VIEWER=("$(VIEWPDF_FS)" "$(VIEWPDF)" "$(VIEWPS)" "$(VIEWDVI)");	                       	\
														\
			CPT=0;						                        		\
			while [ $$CPT -lt $${#FORMAT[*]} ]; do		                        		\
			    $(ECHO) "$$CPT) $${FORMAT[$$CPT]} ($${VIEWER[$$CPT]})";		                \
			    CPT=$$(($$CPT+1));				                        		\
			done;						                        		\
			$(READ) NUM_FORMAT;			    	                        		\
														\
			if $(TEST) "$$NUM_FORMAT" -ge "$$CPT"; then                             		\
				NUM_FORMAT=0;	 			                        		\
			fi;						                        		\
														\
			SELECT_FORMAT=$${FORMAT[$$NUM_FORMAT]};							\
			SELECT_VIEWER=$${VIEWER[$$NUM_FORMAT]};							\
			$(ECHO) "Format selected    : $$SELECT_FORMAT";                         		\
			$(ECHO) "";                                 		                		\
														\
														\
														\
			$$SELECT_VIEWER "$$SELECT_FILE-$$SELECT_LANG.$$SELECT_FORMAT" &                		\
														\
			$(ECHO) "";

#--------------------------------------------------------------------------------
# The figures directory
#--------------------------------------------------------------------------------
$(DIR_SCHEMA_EPS)	:
			@\
			$(ECHO) "Make directory       : $@";		\
			$(MKDIR) $@;

$(DIR_SCHEMA_PNG)	:
			@\
			$(ECHO) "Make directory       : $@";		\
			$(MKDIR) $@;

$(DIR_TEX)       	:
			@\
			$(ECHO) "Make directory       : $@";		\
			$(MKDIR) $@;

$(DIR_SCHEMA_PNG)/%.png : $(DIR_SCHEMA_EPS)/%.eps $(DIR_SCHEMA_PNG)
			@\
			$(ECHO) "Generate   files     : $*.png";	\
			$(EPS2PNG) $< $@;

$(DIR_SCHEMA_EPS)/%.eps	: $(DIR_SCHEMA)/%.eps $(DIR_SCHEMA_EPS)
			@\
			$(ECHO) "Generate   files     : $*.eps";	\
			$(CP) $(DIR_SCHEMA)/$*.eps $(DIR_SCHEMA_EPS);

$(DIR_SCHEMA_EPS)/%.eps	: $(DIR_SCHEMA)/%.fig $(DIR_SCHEMA_EPS)
			@\
			$(ECHO) "Generate   files     : $*.eps";	\
			$(FIG2EPS) $< $@;

$(DIR_SCHEMA_EPS)/%.eps	: $(DIR_GRAPH)/%.p    $(DIR_SCHEMA_EPS)
			@\
			$(ECHO) "Generate   files     : $*.eps";	\
			$(CD) $(DIR_GRAPH); $(GNUPLOT) $*.p;

#--------------------------------------------------------------------------------
# Cleaning
#--------------------------------------------------------------------------------

clean			:
			@\
			$(ECHO) "Delete     temporary files              "$(PWD);				\
			$(RM) $(DIR_SCHEMA_EPS) $(DIR_SCHEMA_PNG)  $(DIR_TEX) $(DIR_PACKAGE)/*.aux;		\
			$(RM) $(DVI_FILES) $(PS_FILES) $(PDF_FILES);						\
			$(MAKE) clean_rec DIR_CLEAN=.  ;

#Clean recursive
clean_rec		:
			@\
			$(ECHO) "Delete     temporary files in directory $(DIR_CLEAN)";				\
			$(RM)	$(DIR_CLEAN)/*~ 		\
				$(DIR_CLEAN)/*.bak  		\
				$(DIR_CLEAN)/*.aux  		\
				$(DIR_CLEAN)/*.bbl  		\
				$(DIR_CLEAN)/*.blg  		\
				$(DIR_CLEAN)/*.bmt  		\
				$(DIR_CLEAN)/*.log  		\
				$(DIR_CLEAN)/*.mtc* 		\
				$(DIR_CLEAN)/*.toc  		\
				$(DIR_CLEAN)/*.idx  		\
				$(DIR_CLEAN)/*.ilg  		\
				$(DIR_CLEAN)/*.ind  		\
				$(DIR_CLEAN)/*.out  		\
				$(DIR_CLEAN)/*.nav  		\
				$(DIR_CLEAN)/*.snm  		\
				$(DIR_CLEAN)/missfont.log;	\
			for files in `$(LS) $(DIR_CLEAN)`; do                              			\
				if $(TEST) -d $(DIR_CLEAN)/$$files;                         			\
				then                                                        			\
					$(MAKE) clean_rec DIR_CLEAN=$(DIR_CLEAN)/$$files;   			\
				fi;                                                         			\
			done;

clean_all		: clean
			@\
			$(ECHO) "Delete     temporary files (all)";						\
			$(RM) $(DIR_DOCUMENTATION)/*.pdf;

#--------------------------------------------------------------------------------
# Help
#--------------------------------------------------------------------------------

help			:
			@\
			$(ECHO) "Environnement to generate documents and presentations";             		\
			$(ECHO) "Version         : $(VERSION)";					     		\
			$(ECHO) "";								     		\
			$(ECHO) "List of rules   :";						     		\
			$(ECHO) " * all          : Cf rules \"help\"";				     		\
			$(ECHO) " * clean        : Erase generate files";			     		\
			$(ECHO) " * clean_all    : Erase all generate files";			     		\
			$(ECHO) " * delete       : Erase all file and directory of a document";	     		\
			$(ECHO) " * doc          : Generate all documents";			     		\
			$(ECHO) " * help         : Print this message";				     		\
			$(ECHO) " * new          : Create all file and directy for a new document";  		\
			$(ECHO) " * rename       : Rename a document";				     		\
			$(ECHO) " * view         : List all document to view";			     		\
			$(ECHO) "";                                                                  
