crabs_makefile-5.2 ©2003-2008 - Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com)
1 # 2 # ============================================================================= 3 # crabs_makefile-5.2 : Makefile pour developpement multi-OS, multi-variants 4 # Copyright (C) 2003-2008 : Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com) 5 # 6 # Ce source fait partie d'un projet logiciel libre. Vous pouvez le distribuer 7 # et/ou le modifier en respectant les termes de la GNU General Public License 8 # version 2 ou (suite a votre propre choix) une version ulterieure. 9 # 10 # Ce programme est distribue dans l'espoir qu'il puisse etre utile, mais 11 # sans aucune garantie, meme si il est associe a un produit qui vous en 12 # propose une. Conformez-vous a la GNU General Public License pour avoir 13 # plus de precisions. 14 # 15 # L'auteur ne peut etre tenu responsable de l'utilisation faite des 16 # composantes associees a ce projet (en partie ou dans leur totalite). 17 # 18 # Une copie du fichier de la GNU GPL est fournie dans le repertoire DOC 19 # de ce projet sous le nom gnu_gpl.txt 20 # 21 # ============================================================================= 22 # 23 .SILENT: 24 .KEEP_STATE: 25 .SUFFIXES: 26 # 27 # Variables projet de l'utilisateur 28 # 29 include $(PROJET_MK)/projet.env 30 CC=CC 31 NETLIB=-lnsl -lsocket 32 # 33 # Variable des variants 34 # 35 VARIANT=NORMAL 36 37 CF_NORMAL= -O 38 LD_NORMAL= -O 39 INFO_NORMAL= 40 41 CF_NORMAL64= -O -xarch=v9 42 LD_NORMAL64= -O -xarch=v9 43 INFO_NORMAL64= -xarch=v9 44 45 CF_DEBUG= -g 46 LD_DEBUG= -g 47 INFO_DEBUG= -g 48 49 CF_DEBUG64= -g -xarch=v9 50 LD_DEBUG64= -g -xarch=v9 51 INFO_DEBUG64= -g -xarch=v9 52 53 CFLAGS += -I$(PROJET)/INCLUDE 54 CPPFLAGS += -I$(PROJET)/INCLUDE 55 # 56 # recherche des includes a copier 57 # 58 i0=$(SRC) 59 i1=$(i0:%.c=) 60 i2=$(i1:%.cpp=) 61 i3=$(i2:%.f=) 62 i4=$(i3:%.sc=) 63 i5=$(i4:%.l=) 64 i6=$(i5:%.y=) 65 i7=$(i6:%.H=) 66 i8=$(i7:%.QH=) 67 i9=$(i8:%.qh=%.h) 68 INC=$(i9:%=$(PROJET)/INCLUDE/%) 69 # ETC 70 _ETC=$(ETC:%=$(PROJET)/ETC/%) 71 # 72 # Objet a compiler 73 # 74 C1=$(SRC:%.h=) 75 C2=$(C1:%.H=) 76 H_MOC1=$(C2:%.qh=.obj/$(OS)/$(VARIANT)/moc_%.o) 77 H_MOC2=$(H_MOC1:%.QH=.obj/$(OS)/$(VARIANT)/moc_%.o) 78 C_OBJ=$(H_MOC2:%.c=.obj/$(OS)/$(VARIANT)/%.o) 79 CPP_OBJ=$(C_OBJ:%.cpp=.obj/$(OS)/$(VARIANT)/%.o) 80 F_OBJ=$(CPP_OBJ:%.f=.obj/$(OS)/$(VARIANT)/%.o) 81 SC_OBJ=$(F_OBJ:%.sc=.obj/$(OS)/$(VARIANT)/%.o) 82 L_OBJ=$(SC_OBJ:%.l=.obj/$(OS)/$(VARIANT)/%.o) 83 Y_OBJ=$(L_OBJ:%.y=.obj/$(OS)/$(VARIANT)/%.o) 84 A_OBJ=$(Y_OBJ) $(OBJ) 85 86 _LIB=$(LIB:%=$(PROJET)/LIB/$(OS)/$(VARIANT)/%) 87 L=$(LIB:%.a=%) 88 89 _BIN=$(BIN:%=$(PROJET)/BIN/$(OS)/$(VARIANT)/%) 90 _PLIB=$(PLIB:%=$(PROJET)/LIB/$(OS)/$(VARIANT)/%) 91 92 _SBIN=$(SBIN:%=$(PROJET)/BIN/%) 93 D_SBIN=$(DIFFUS_SBIN:%=$(PROJET)/DIFFUS/$(OS)/BIN/%) 94 95 CDEF= -D$(OS) -D$(VARIANT) -DSOLARIS 96 INFO_C= .obj/$(OS)/$(VARIANT)/_info.c 97 INFO= .obj/$(OS)/$(VARIANT)/_info.o 98 VER=projet.info 99 100 # Internationnalisation : gettext 101 NLS_POT=$(NLS_PKG).pot 102 NLS_PO=$(NLS_LANG:%=%/$(NLS_PKG).po) 103 NLS_MO=$(NLS_LANG:%=$(PROJET)/I18N/%/$(NLS_PKG).mo) 104 # Internationnalisation : qt 105 QNL_TS=$(QNL_LANG:%=$(QNL_PKG)_%.ts) 106 QNL_QM=$(QNL_LANG:%=$(PROJET)/I18N/$(QNL_PKG)_%.qm) 107 108 .PRECIOUS: $(NLS_PO) $(NLS_POT) $(QNL_TS) 109 110 $$(PROJET)/ETC/% : % 111 echo Install ETC $< 112 mkdir -p `dirname $@` 113 cp $< $@ 114 115 $$(PROJET)/INCLUDE/%.h : %.h 116 echo Install INCLUDE $< 117 mkdir -p `dirname $@` 118 cp $< $@ 119 120 $$(PROJET)/INCLUDE/%.h : %.qh 121 echo Install INCLUDE $< 122 mkdir -p `dirname $@` 123 cp $< $@ 124 125 $$(PROJET)/BIN/% : % 126 echo Install SBIN $< 127 cp $< $@ 128 chmod +x $@ 129 130 .obj/$$(OS)/$(VARIANT)/%.o : %.c 131 echo "--- C: $<" 132 mkdir -p `dirname $@` 133 cc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) $< 134 135 .obj/$$(OS)/$(VARIANT)/%.o : %.cpp 136 echo "--- C++: $<" 137 mkdir -p `dirname $@` 138 CC -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) $< 139 140 .obj/$$(OS)/$(VARIANT)/%.o : %.f 141 echo "--- F77: $<" 142 mkdir -p `dirname $@` 143 f77 -c -o $@ $(CF_$(VARIANT)) $(FFLAGS) $< 144 145 .obj/$$(OS)/$(VARIANT)/%.o : %.sc 146 echo "--- SQL: $<" 147 mkdir -p `dirname $@` 148 esqlc -p $(SQLFLAGS) -f.obj/$(OS)/$(VARIANT)/$*.c $< 149 cc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) \ 150 .obj/$(OS)/$(VARIANT)/$*.c 151 152 .obj/$$(OS)/$(VARIANT)/%.o : %.l 153 echo "--- Lex: $<" 154 mkdir -p `dirname $@` 155 lex $(LFLAGS) $< 156 mv lex.yy.c .obj/$(OS)/$(VARIANT)/$*.c 157 cc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) -I`pwd` $(CDEF) \ 158 .obj/$(OS)/$(VARIANT)/$*.c 159 160 .obj/$$(OS)/$(VARIANT)/%.o : %.y 161 echo "--- Yacc: $<" 162 mkdir -p `dirname $@` 163 yacc $(YFLAGS) $< 164 mv y.tab.c .obj/$(OS)/$(VARIANT)/$*.c 165 mv y.tab.h .obj/$(OS)/$(VARIANT)/$*.h 166 cc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) \ 167 .obj/$(OS)/$(VARIANT)/$*.c 168 169 .obj/$$(OS)/$(VARIANT)/moc_%.o : %.qh 170 echo "--- Moc: $<" 171 mkdir -p `dirname $@` 172 moc -o .obj/$(OS)/$(VARIANT)/moc_$*.cpp -f $< 173 CC -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \ 174 .obj/$(OS)/$(VARIANT)/moc_$*.cpp 175 176 .obj/$$(OS)/$(VARIANT)/moc_%.o : %.QH 177 echo "--- Moc: $<" 178 mkdir -p `dirname $@` 179 moc -o .obj/$(OS)/$(VARIANT)/moc_$*.cpp -f $< 180 CC -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \ 181 .obj/$(OS)/$(VARIANT)/moc_$*.cpp 182 183 all : $(VER) $(DIRP) $(DIR) $(INC) $(LIB) $(BIN) $(_SBIN) $(_ETC) $(NLS_MO) $(QNL_QM) 184 185 info : FORCE 186 test -z "$(DIR)" || make -r info_dir 187 -echo "INFO: `PrelativeHome $(PROJET)` -=> `PrelativePath`" 188 189 info_dir: FORCE 190 for d in $(DIR); do (cd $$d; make -r info ) ;done 191 192 clean : FORCE 193 test -z "$(DIR)" || make -r clean_dir 194 -echo "CLEAN: `PrelativePath`" 195 if [ -d .obj ]; then rm -rf .obj; fi 196 if [ -d .dep ]; then rm -rf .dep; fi 197 198 clean_dir: FORCE 199 for d in $(DIR); do (cd $$d; make -r clean ) ;done 200 201 diffus : FORCE 202 test -z "$(BIN)" || test "$(DIFFUS)" != y || make -r diffus_bin 203 test -z "$(DIFFUS_SBIN)" || make -r diffus_sbin 204 test -z "$(LIB)" || test "$(DIFFUS)" != y || make -r diffus_lib 205 test -z "$(ETC)" || test "$(DIFFUS)" != y || make -r diffus_etc 206 test -z "$(DIR)" || make -r diffus_dir 207 208 diffus_bin: FORCE 209 echo DIFFUS $(BIN) 210 mkdir -p $(PROJET)/DIFFUS/$(OS)/BIN 211 cp $(_BIN) $(PROJET)/DIFFUS/$(OS)/BIN 212 213 diffus_sbin: FORCE 214 echo DIFFUS $(DIFFUS_SBIN) 215 mkdir -p $(PROJET)/DIFFUS/$(OS)/BIN 216 cp $(DIFFUS_SBIN) $(PROJET)/DIFFUS/$(OS)/BIN 217 chmod +x $(D_SBIN) 218 219 diffus_lib: FORCE 220 echo DIFFUS $(LIB) 221 mkdir -p $(PROJET)/DIFFUS/$(OS)/LIB 222 cp $(_LIB) $(PROJET)/DIFFUS/$(OS)/LIB 223 224 diffus_dir: FORCE 225 for d in $(DIR); do (cd $$d; make -r diffus ) ;done 226 227 $(DIR) : FORCE 228 -echo "== MAKE: `(cd $@; PrelativePath)`" 229 cd $@ ; make -r VARIANT=$(VARIANT) 230 231 $(DIRP) : FORCE 232 echo "== MAKE: $@" 233 cd $@ ; make -r VARIANT=$(VARIANT) 234 235 $(INFO) : $(INFO_C) 236 cc -c -o $(INFO) $(INFO_C) 237 238 $(INFO_C) : $(PROJET)/.projet/info.gpl $(DEP) $(A_OBJ) $(_PLIB) $(DLIB) 239 PgenInfo_c.sh $(OS) $(VARIANT) $(INFO_C) $L $(BIN) $(_PLIB) $(DLIB) 240 241 $(_LIB) : $(A_OBJ) $(INFO) 242 mkdir -p .obj/$(OS)/$(VARIANT) 243 mkdir -p `dirname $@` 244 if [ -f .obj/$(OS)/$(VARIANT)/SunWS_cache ] ; then \ 245 ar r $@ $(INFO) $(A_OBJ); \ 246 else \ 247 CC -xar -o $@ $(INFO) $(A_OBJ); \ 248 fi 249 echo "== LIB: $(LIB) 250 251 $(_BIN) : $(A_OBJ) $(_PLIB) $(DLIB) $(INFO) 252 echo "-=> Edition des liens: $(BIN) 253 mkdir -p `dirname $@` 254 -rm -f $(_BIN) 255 $(LD) -o $@ $(LD_$(VARIANT)) $(A_OBJ) $(INFO) $(_PLIB) $(DLIB) $(LDFLAGS) 256 echo "== BIN: $(BIN) 257 258 projet.info : $(PROJET)/.projet/info.gpl 259 PgenInfo_include.sh > $@ 260 261 $(LIB) : $(_LIB) 262 263 $(BIN) : $(_BIN) 264 265 $(PROJET)/I18N/%/$(NLS_PKG).mo : %/$(NLS_PKG).po 266 mkdir -p `dirname $@` 267 d=`dirname $@`;b=`basename $@`;echo " --==> MO: `PrelativePath $$d`/$$b" 268 /usr/sfw/bin/msgfmt -c -o $@ $? 269 touch $@ 270 271 %/$(NLS_PKG).po : $(NLS_POT) 272 L=`dirname $@` ;\ 273 [ -d $$L ] || mkdir -p $$L ; \ 274 echo " -=> PO: $@" ;\ 275 if [ ! -f $@ ] ; then \ 276 /usr/sfw/bin/msginit --no-translator -l $$L -i $? -o $@ ;\ 277 else \ 278 /usr/sfw/bin/msgmerge -s -U $@ $? ;\ 279 fi 280 touch $@ 281 282 $(NLS_POT) : FORCE 283 IL=`pwd`/nls.mk ; export IL ;\ 284 printf "$@ :" > $$IL ;\ 285 ( cd $(PROJET)/SRC ; make nls ) ;\ 286 printf "\n" >> $$IL ;\ 287 echo "\t"'if [ -f $$@ ] ; then \' >> $$IL ;\ 288 echo "\t\t"'/usr/sfw/bin/xgettext -o $$@ -j $$^ ;\' >> $$IL ;\ 289 echo "\t"'else \' >> $$IL ;\ 290 echo "\t\t"'/usr/sfw/bin/xgettext -o $$@ $$^ ;\' >> $$IL ;\ 291 echo "\t"'fi ;\' >> $$IL ;\ 292 echo "\t"'touch $@ ;\' >> $$IL ;\ 293 echo "\t"'echo " -=> POT: $@"' >> $$IL ;\ 294 make -f $$IL 295 296 $(QNL_QM) : $(QNL_TS) 297 d=`dirname $@`;b=`basename $@`;echo " --==> QM: `PrelativePath $$d`/$$b" 298 lrelease $? -qm $@ 299 300 $(QNL_TS) : FORCE 301 IL=`pwd`/qls.mk ; export IL;\ 302 printf "$@ :" > $$IL ;\ 303 ( cd $(PROJET)/SRC ; make qls ) ; \ 304 printf "\n" >> $$IL ;\ 305 echo "\t"'lupdate $$^ -ts $$@ ;\' >> $$IL ;\ 306 echo "\t"'touch $@ ;\' >> $$IL ;\ 307 echo "\t"'echo " -=> TS: $@"' >> $$IL ;\ 308 make -f $$IL 309 310 # nls/qls appeles de maniere recursive depuis la racine du projet dans 311 # tous les dossier du projet 312 nls: 313 if [ ! -z "$(DIR)" ] ; then \ 314 for d in $(DIR)"" ; do (cd $$d && make nls) ; done ; \ 315 fi ;\ 316 if [ ! -z "$(NLS_SRC)" ] ; then \ 317 for s in $(NLS_SRC)"" ; do printf " \\\\\n\t`pwd`/$$s" >> $(IL) ; done ; \ 318 fi 319 320 qls: 321 if [ ! -z "$(DIR)" ] ; then \ 322 for d in $(DIR)"" ; do (cd $$d && make qls) ; done ; \ 323 fi ;\ 324 if [ ! -z "$(QNL_SRC)" ] ; then \ 325 for s in $(QNL_SRC)"" ; do printf " \\\\\n\t`pwd`/$$s" >> $(IL) ; done ; \ 326 fi 327 FORCE: 328
Date de génération : 22/09/2011 21:47