#!/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 [ ...]" 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