#!/bin/sh

# Par Julien MOREAU	( jmoreau@bigfoot.com )

nbps=0				# Nombre de paramètres souhaités (sans option)
mkf=Makefile			# Nom du fichier généré
nom_cmde=`basename $0`		# Nom de la commande
in_f="$nom_cmde.in"		# Nom du fichier d'entrée
usage="Usage: $nom_cmde [-h]"	# Message d'aide
usage=$usage"\n\tAffiche ce message d'aide.\n"
usage=$usage"\nUsage: $nom_cmde <filename> [<param2> ...]"
usage=$usage"\n\tMake maker : le générateur de $mkf."

if test `uname` != "HP-UX" ; then e="-e" ; fi

if [ $# -ne $nbps -o "$1" = "-h" ] ; then	# Vérifie le nb de paramètres
	echo $e $usage 1>&2 ; exit 1		# Affichage aide puis arrêt
fi

echo $e "#\n# Makefile\tgenerated with $nom_cmde\t( by jmoreau@bigfoot.com )\n#\n"\
	> $mkf

function renseigne
{
	if [ $# -ne 2 ] ; then
		echo "Erreur fonction $0 : $1 non renseigné." 1>&2 ; exit 2
	fi
	var="$1" ; comm="$2"
	echo $e "$comm ? \c" ; read rep	# -- ! Questions sur stdin ! -- #
	echo $rep		# Affichage propre si flux d'entrée redirigé

	# Variables à mémoriser :
	if test $var = EXTS ; then exts="$rep" ; fi
	if test $var = EXTI ; then exti="$rep" ; fi
	if test $var = TARGET ; then target="$rep" ; fi

	echo "$rep" >> "$in_f.new"
	echo $e "$var\t= $rep\t\c" >> $mkf
	nc=`echo $rep|wc -c`	# Nb caractères pour alignement des commentaires
	if [ $nc -lt 8 ] ; then echo $e "\t\c" >> $mkf ; fi
	if [ $nc -lt 16 ] ; then echo $e "\t\c" >> $mkf ; fi
	echo "# $comm" >> $mkf
}

> "$in_f.new"
renseigne COMPIL "Nom du compilateur (ex: gcc ou javac)"
renseigne OPTC	 "Options de compilation"
renseigne EXTS	 "Extension des fichiers sources (ex: c ou java)"
renseigne EXTI	 "Extension des fichiers objets (ex: o ou class)"
renseigne RUN	 "Lanceur si nécessaire (ex: java)"
renseigne TARGET "Exécutable (ou classe principale)"
renseigne OPTE	 "Options d'exécution"
mv "$in_f.new" "$in_f"

# target				  n'a pas d'extension
mainsrc="$target.$exts"		# Fichier source principale
final="$target"			# Dernier fichier à générer
if test "$exts" = "java" ; then final="$target.$exti" ; fi
#echo $e "mainsrc=$mainsrc\ttarget=$target\tfinal=$final"	# Debuggage

exec >> $mkf

echo $e "OBJ\t=\c"		# Construction liste fichiers intermédiaires :
for f in *.$exts ; do
	if test "$f" != "$mainsrc" ; then
		f2="${f%.*}.$exti"
		echo $e " $f2\c"
	fi
done

echo $e "\n"

# Première cible :
echo "$final:: $mainsrc \$(OBJ)"
#if test "$exts" != "java" ; then echo " \$(OBJ)" ; else echo ; fi
echo "\t\$(COMPIL) \$(OPTC) $mainsrc\n"

function compile
{
	f2="${1%.*}.$exti"		# Nom du fichier intermédiaire
	echo "$f2: $1"
	echo "\t\$(COMPIL) \$(OPTC) $1\n"
}

# Cibles suivantes (fichiers sources) :
for f in *.$exts ; do
	if test "$f" != "$mainsrc" ; then compile "$f" ; fi
done

# Les cibles classiques :
echo "clean:"
echo "\trm -f *.$exti \$(TARGET)\n"

echo "run:"
echo "\t\$(RUN) \$(OPTE) \$(TARGET)\n"

echo "all: clean $mkf \$(OBJ) $final run\n"

# La Javadoc si c'est du java :
if test "$exts" = "java" ; then
	dirdoc="../Doc/"
	optdoc="-d $dirdoc -author -private"
	if [ ! -d "$dirdoc" ] ; then mkdir "$dirdoc" ; fi

	echo "doc:"
	echo "\tjavadoc $optdoc *.java\n"
fi

echo "Fichier généré :\t$mkf" 1>&2

exit 0		# Sortie sans erreur

