.PHONY: head tail elhoim

Project_Name=`./bin/head 1 Project.lst`

Sub_Projects_Names=`./bin/tail 2 Project.lst`

libs=`for j in \`./bin/tail 2 Project.lst\`; do echo -aI\`./bin/head 1 Project.lst\`/$$j/src/lib; done`

allsources=`for k in \`./bin/tail 2 Project.lst\`; do find \`./bin/head 1 Project.lst\`/$$k/src/lib -name "*.ad?"; done`

old_version=`./bin/tail -1 Versions.lst`

print : hello
	@echo "-----------------------------------------------------------------------"
	@echo "--                                                                   --"
	@echo "--                          Project ::= manuel ;                     --"
	@echo "--                                                                   --"
	@echo "--                    version  ::= spec 2.0.0a ;                     --"
	@echo "--                                                                   --"
	@echo "--      Date  ::= Mon  1 May 19:38:45 BST 2023 ;                     --"
	@echo "--      Depend of make, Gnat and source-highlight                     --"
	@echo "-----------------------------------------------------------------------"
	@echo "--                                                                   --"
	@echo "--         Self recursive call of self compiled softwre              --"
	@echo "--                                                                   --"
	@echo "-----------------------------------------------------------------------"
	@echo "--                         [ Make targets ]                          --"
	@echo "--                                                                   --"
	@echo "--  pre               :                 ; msg      : provide hello   --"
	@echo "--  prepare           : prepare project ; perfect  :                 --"
	@echo "--  update            :                 ; main     :                 --"
	@echo "--  all               : make project    ; hello    : print hello !   --"
	@echo "--  enlight-sources   : color sources   ; print    : print this      --"
	@echo "--  mrproper          : rm *~           ; info     : project info    --"
	@echo "--  clean             : rm *.o *.ali    ; default  : this with hello --"
	@echo "--  help              :                 ; tail     : provide tail    --"
	@echo "--  version           :                 ; head     : provide head    --"
	@echo "--  validate          :                 ; arch     : make archive    --"
	@echo "--  list              : print project   ; project  : provide project --"
	@echo "--  help              :                 ; usage    :                 --"
	@echo "-----------------------------------------------------------------------"

usage : print

	@echo "Par defaut, rien a faire pour etre bon."
	@echo "Cibles restantes : "
	@echo "'info' pour avoir les informations sur le projet ;"
	@echo "'prepare' pour fabriquer les repertoires du projet ;"
	@echo "'update' pour updater la version Versions.default ;; et ranger le workspace (a la main)."
	@echo "'all' pour compiler le projet ;"
	@echo "'enlight-sources' pour collorier les sources en sequence d'echappement"
	@echo "'mrproper' pour supprimer les fichiers objets obtenus avec make all ;"
	@echo "'clean' pour supprimer les anciens fichiers sources et les fichier objets sauf le fichier programme principal ;"
	@echo "'help' appelle le programme with '-h' option ;"
	@echo "'version' appelle le program with '-v' option ;"
	@echo "'validate' appelle les cibles info, help and version."
	@echo "'arch' pour archiver et compresser l'archive avec la derniere version dans Versions.default ;"
	@echo ""
	@echo "'perfect' permet d'appeller la suite de cible suivante dans l'odre d'apparition :"
	@echo ""
	@echo ""
	@echo "all afin de produire le programme"
	@echo "clean afin de supprimer les vieux fichers si la compilation a produit le programme."
	@echo "validate afin de pouvoir comparer la version du projet et la version du programme."


hello :
	@echo "\033[01;37mhello\033[0;37m !"

default : print pre head msg tail process

head:
	gnatmake -O2 -o bin/head head.adb -D obj

tail:
	gnatmake -O2 -o bin/tail tail.adb -D obj

pre :
	@touch Versions.lst
	@touch Project.lst
	@touch Copyright
	@touch HISTORY
	@touch HOWTO
	@touch Abstract.txt
	@touch TODO
	@touch README
	@if [ ! -d bin ]; then \
		mkdir bin; \
	fi;
	@if [ ! -d src ]; then \
		mkdir -p src/lib; \
	fi;
	@if [ ! -d data ]; then \
		mkdir data; \
	fi;
	@if [ ! -d web ]; then \
		mkdir -p web/html/images; \
		mkdir -p web/cgi/src/lib; \
		mkdir -p web/cgi/obj; \
		mkdir -p web/cgi/bin; \
	fi;

	@if [ ! -d obj ]; then \
		mkdir obj; \
	fi;


process :
	gnatmake -D obj -o bin/process process.adb
	./bin/process


info :
	@./bin/tail -1 Versions.lst

after :	msg prepare project enlight-sources all clean mrproper arch



list :
	@cat Project.lst


prepare:
	if [ ! -d $(Project_Name) ]; then \
		mkdir $(Project_Name) ;  \
	fi ;
	@mkdir -p doc/sources/enlighted;
	@mkdir -p doc/sources/html;
	@if [ -d $(Project_Name) ]; then \
		for i in $(Sub_Projects_Names) ; do \
			if [ ! -d  $(Project_Name)/$$i ]; then \
				mkdir -p $(Project_Name)/$$i; \
				mkdir -p $(Project_Name)/$$i/src/lib; \
				mkdir -p $(Project_Name)/$$i/obj; \
			fi; \
		done; \
	fi


msg : hello
	gnatmake -O2 -D obj -o bin/hello hello.adb

all: print

	@echo "Making textual project : $(Project_Name)..."
	@for i in $(Sub_Projects_Names) ; do \
		if [ -f $(Project_Name)/$$i/src/$$i.adb ]; then \
			gnatmake -O3 -q -Wall -gnatW8 -gnat12 $(Project_Name)/$$i/src/$$i.adb $(libs) \
			-aIPragmARC -aI/usr/share/ada/adainclude/aws -aO./AWS \
			-aI/usr/share/ada/adainclude/templates_parser -D $(Project_Name)/$$i/obj/ \
			-aIsrc/lib -o bin/$$i; \
		fi; \
	done


	@if [ -x bin/$(Project_Name) ]; then \
		strip bin/$(Project_Name); \
	fi;
	@echo "done."


project :
	@if [ -d bin ]; then \
		gnatmake project.adb -D obj -o bin/project; \
		bin/project Project.lst 128; \
	fi;


empty:



clean:
	@if [ -x bin/$(Project_Name) ]; then \
		for i in $(Sub_Projects_Names) ; do \
			rm -f $(Project_Name)/$$i/obj/*; \
		done; \
	fi;
	rm -f ./$(Project_Name)/obj/*.ali
	rm -f ./$(Project_Name)/obj/*.o
	rm -f obj/*.o obj/*.ali


mrproper:
	@rm -f *~ obj/*.ali obj/*.o
	@rm -f web/cgi/obj/*
	@rm -f web/cgi/src/*~
	@rm -f web/cgi/src/lib/*~
	@for i in $(Sub_Projects_Names) ; do \
		rm -f $(Project_Name)/$$i/obj/*~ \
		rm -f $(Project_Name)/$$i/src/lib/*~; \
		rm -f $(Project_Name)/$$i/src/*~; \
		rm -f bin/$(Project_Name); \
	done



elhoim:
	@if [ ! -d data ]; then \
		mkdir -p data/users; \
	fi;
	@if [ -d data ]; then \
		touch data/glossary.txt; \
	fi;
	@touch ai_objects_file.txt



enlight-sources:
	@if [ -d $(Project_Name) ]; then \
		if [ -d doc/sources/enlighted ]; then \
			for l in $(allsources); do \
				echo $$l; \
				source-highlight -s Ada -f ESC -o doc/sources/enlighted/`basename $$l`.txt -i $$l; \
				source-highlight -s Ada -f html -o doc/sources/html/`basename $$l`.html -i $$l; \
			done; \
		fi; \
		if [ -f $(Project_Name)/$(Project_Name)/src/$(Project_Name).adb ]; then \
			source-highlight -s Ada -f ESC -o doc/sources/enlighted/$(Project_Name).adb.txt \
			-i $(Project_Name)/$(Project_Name)/src/$(Project_Name).adb; \
			source-highlight -s Ada -f html -o doc/sources/html/$(Project_Name).adb.html \
			-i $(Project_Name)/$(Project_Name)/src/$(Project_Name).adb; \
		fi; \
	fi;
	source-highlight -s Ada -f html -o doc/sources/html/process.adb.html -i process.adb; \
	source-highlight -s Ada -f html -o doc/sources/html/project.adb.html -i project.adb; \
	source-highlight -s Ada -f html -o doc/sources/html/head.adb.html -i head.adb; \
	source-highlight -s Ada -f html -o doc/sources/html/tail.adb.html -i tail.adb; \
	source-highlight -s Ada -f html -o doc/sources/html/hello.adb.html -i hello.adb; 


upgrade:
	bin/$(Project_Name) -v >> Versions.lst

arch:	
	tar -c -v -z -f `./bin/head 1 Project.lst`-`./bin/tail -1 Versions.lst`.tgz \
	$(Project_Name) \
	.config_file data hello.adb TODO README Makefile Project.lst Versions.lst gpl.txt HISTORY \
	Copyright HOWTO Abstract.txt head.adb tail.adb process.adb \
	project.adb bin obj doc src web;

update : mrproper enlight-sources all clean arch upgrade
