Salome HOME
Hexa6 : Mise ajour des sources
[modules/hexablock.git] / src / HEXABLOCK / make.make
1 #!/bin/sh
2 # Comm : Generateur de Makefile
3
4 commande=$0
5 liste_args="$*"
6
7 # =============================================== al_aide
8 al_aide()
9 {
10 proc=`basename $commande`
11 cat << END_HELP
12 Syntaxe :
13     $    $proc [ options ] <fichiers_source>
14 Effet :
15     Genere un Makefile tenant compte des fichiers sources passes en argument
16     et des includes appeles par ces fichiers.
17 Avec :
18     <fichiers_sources> liste des fichiers *.c *.cc *.cpp *.cxx et *.C
19                        pris en compte pour constituer le Makefile.
20                       Si des fichiers *.h sont presents, c'est pour generer des
21                        fichiers qt (utilitaire moc)
22     Options:
23          Make=<fic>  : Nom du makefile a generer
24          opt=val      : Option passee
25          <autres>     : options de compilation
26                         (par exemple le repertoire des includes)
27 END_HELP
28 exit
29 }
30 # =============================================== ana_arguments
31 ana_arguments()
32 {
33 liste_src=
34 liste_rad=
35 liste_qrc=
36 liste_bnf=
37 liste_moc=
38 for arg in $liste_args
39     do
40     case $arg in
41          -setx )
42              set -x
43              ;;
44          -h | --help  )
45              al_aide
46              ;;
47          Make=* | make=* )
48              make_file=`echo $arg | cut -f2 -d=`
49              ;;
50          * )
51              arg_gcc="$arg_gcc $arg"
52              ;;
53     esac
54     done
55
56 for arg in *.cxx
57     do
58     case $arg in
59
60          \*.* ) :
61              ;;
62
63          *.cpp | *.cc | *.cxx | *.C | *.c )
64              rad=`echo $arg | cut -f1 -d.`
65              liste_src="$liste_src $arg"
66              liste_rad="$liste_rad $rad"
67              ;;
68          * ) :
69              ;;
70     esac
71     done
72 }
73 # =============================================== put_includes
74 put_includes()
75 {
76    if ( [ -z "$3" ] ) then
77       return
78       fi
79
80    obj=$repobj/$1
81    shift 2
82
83    for mot in $*
84        do
85        case $mot in
86            \\* ) : ;;
87
88            */Qt/* ) : ;;
89            */VTK* ) : ;;
90
91            * ) echo $obj $mot
92               ;;
93        esac
94        done
95 }
96 # =============================================== init_par_defaut
97 init_par_defaut()
98 {
99 os=`uname`
100 if ( [ $os = Linux ] ) then
101    opt_pic=-fPIC
102    fi
103
104 hdebut=`date '+%Hh %Mmn %Ss'`
105 make_file=Makefile
106 make_file=makefile.ozz
107 antislash=\\
108 liste_src=
109 liste_rad=
110 arg_gcc=
111 arg_plus=
112 make_body=OK
113 make_ref=OK
114
115 repobj='$(REPOBJ)'
116 replib='$(REPLIB)'
117 repexe='$(REPEXE)'
118 opt_user='$(OPT)'
119 compile='$(CPIL)'
120 archive='$(ARCH)'
121 link='$(LINK)'
122
123 val_repobj=.
124 cmd_cpil="g++ -c -g $opt_pic -Wall -DNO_CASCADE -Inokas --pedantic"
125 cmd_arch='ar rcvu $(BIBLI) *.o'
126 cmd_link='g++ -g'
127 uf=`pwd`
128 uf=`basename "$uf"`
129
130 ext=
131 namof_lib=lib$uf.a
132
133 comm=`basename $commande`
134 reptools=`dirname $commande`
135                    ###  Definition des includes par $ozz_opt_cpp
136
137 if ( [ -n "$OZZ_FLAGS" -a -f "$OZZ_FLAGS" ] ) then
138    . $OZZ_FLAGS
139 fi
140 }
141 # =============================================== add_entete
142 add_entete()
143 {
144 today=`date "+%d/%m/%y a %Hh%M"`
145 echo
146 echo  "# Makefile OZZ genere le $today"
147 echo  "# Par la commande : $comm "
148 echo  "# Role de ce makefile : "
149 echo  "#  - Compiler les fichiers-source defraichis avec la commande \$CPIL"
150 echo  "#  - Les archiver sur le fichier archive \$REPLIB/\$BIBLI"
151 echo  "#  - Linker le programme principal (test unitaire) passe en argument"
152 echo
153 echo ".SUFFIXES:"         ## Pour ne pas etre emm....
154 echo "OPT    = "          ## Options de compilation de l'appelant
155 echo "REPOBJ = ."
156 echo "REPLIB = ."
157 echo "REPEXE = ./work"
158 echo "BIBLI  = $namof_lib"
159 echo "ARCH   = $cmd_arch"
160 echo "CPIL   = $cmd_cpil"
161 echo "LINK   = $cmd_link"
162 echo "main   = test_hexa"
163 echo
164
165 precedente="OBJECTS  ="
166
167 for module in $liste_rad
168     do
169     echo "$precedente \\"
170     precedente="      $repobj/$module.o"
171     done
172
173 cat << FIN
174 $precedente
175
176 all  : saut link
177
178 saut :
179         @ echo ; echo ; echo ; echo ; echo ; echo ; echo ; echo ; echo ; echo
180
181 link     : $repexe/\$(main).exe
182
183 $repexe/\$(main).cpp  :
184         ./make.main \$(main)
185
186 $repexe/\$(main).exe  : $repexe/\$(main).cpp  \$(REPLIB)/\$(BIBLI)
187         \$(LINK) $repexe/\$(main).cpp  \$(REPLIB)/\$(BIBLI) -o $repexe/\$(main).exe
188
189 \$(REPLIB)/\$(BIBLI) : \$(OBJECTS)
190         $archive
191
192 clean :
193         rm -rf *.exe \$(REPLIB)/\$(BIBLI) \$(REPOBJ)/*.o *.bak *~
194
195 cleanobj :
196         rm -rf \$(REPLIB)/\$(BIBLI) \$(REPOBJ)/*.o *.bak *~
197
198 FIN
199 }
200 # =============================================== add_sources
201 add_sources()
202 {
203 echo
204 echo  "                     ### Compilations"
205 echo
206 for arg in $liste_src
207     do
208     radical=`echo $arg | cut -f1 -d.`
209     echo "$repobj/$radical.o : $arg"
210     echo "      $compile $opt_user $arg"
211     done
212 }
213 # =============================================== Begin
214 init_par_defaut
215 echo
216 echo " ... Generation de $make_file qui met a jour $namof_lib ..."
217
218 ana_arguments
219 ./make_dummycad
220
221 rm -rf $make_file
222 add_entete  >> $make_file
223 add_sources >> $make_file
224
225 makedepend -f $make_file -Y -I. $liste_src 2> /dev/null
226
227 hfin=`date '+%Hh %Mmn %Ss'`
228 echo " ... Fin de la generation : $hfin"
229 echo " ... Elle avait debute a  : $hdebut"