Makefile pour developpement multi-OS, multi-variants

crabs_makefile-5.2 ©2003-2008 - Christophe Cazajus (crabs-mettre_le_signe_at-crabs-world.com)

~~ / include.LINUX
Makefile include.LINUX include.SOLARIS include.CGI include.CGI_BIN include.XPI xpi_rdf.xsl Pdepend.c Pinfo.c PrelativeHome.c PrelativePath.c Pprojetgpl.c Prelative.c PinfoGPL.sh PgenInfo_c.sh PenvProjet.sh Pinfo2html.sh Pinstall.sh PgenInfo_include.sh projet.env crabs_mk.sh crabs_mk.csh fr/crabs_makefile.po Makefile.SOLARIS
    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 utiles
   28 #
   29 CC=g++
   30 
   31 CPPFLAGS+= -D_REENTRANT
   32 
   33 CF_QT= -pipe -fno-exceptions -Wall -D_REENTRANT  -DQT_NO_DEBUG -DQT_THREAD_SUPPORT -DQT_SHARED -I$(QTDIR)/mkspecs/linux-g++
   34 LD_QT= -fnoexceptions -L$(QTDIR)/lib -lqt-mt
   35 
   36 CF_GTK2=`pkg-config gtkmm-2.4 --cflags`
   37 LD_GTK2=`pkg-config gtkmm-2.4 --libs`
   38 
   39 include $(PROJET_MK)/projet.env
   40 #
   41 # Variable des variants
   42 #
   43 VARIANT=NORMAL
   44 
   45 CF_NORMAL= -O
   46 LD_NORMAL= -O
   47 
   48 CF_DEBUG= -g
   49 LD_DEBUG= -g
   50 
   51 CFLAGS += -I$(PROJET)/INCLUDE
   52 CPPFLAGS += -I$(PROJET)/INCLUDE
   53 #
   54 # Pour les dependances : fichier c ou c++
   55 #
   56 d0=$(SRC)
   57 d1=$(d0:%.c=%.c)
   58 d2=$(d1:%.cpp=%.cpp)
   59 d3=$(d2:%.f=)
   60 d4=$(d3:%.sc=)
   61 d5=$(d4:%.l=)
   62 d6=$(d5:%.y=)
   63 d7=$(d6:%.H=)
   64 d8=$(d7:%.QH=%.QH)
   65 d9=$(d8:%.qh=%.qh)
   66 DEP=$(d9)
   67 #
   68 # recherche des includes a copie
   69 #
   70 i0=$(SRC)
   71 i1=$(i0:%.c=)
   72 i2=$(i1:%.cpp=)
   73 i3=$(i2:%.f=)
   74 i4=$(i3:%.sc=)
   75 i5=$(i4:%.l=)
   76 i6=$(i5:%.y=)
   77 i7=$(i6:%.H=)
   78 i8=$(i7:%.QH=)
   79 i9=$(i8:%.qh=%.h)
   80 INC=$(i9:%=$(PROJET)/INCLUDE/%)
   81 #
   82 # fichiers ETC
   83 #
   84 _ETC=$(ETC:%=$(PROJET)/ETC/%)
   85 #
   86 # Objet a compiler
   87 #
   88 C1=$(SRC:%.h=)
   89 C2=$(C1:%.H=)
   90 H_MOC1=$(C2:%.qh=.obj/$(OS)/$(VARIANT)/moc_%.o)
   91 H_MOC2=$(H_MOC1:%.QH=.obj/$(OS)/$(VARIANT)/moc_%.o)
   92 C_OBJ=$(H_MOC2:%.c=.obj/$(OS)/$(VARIANT)/%.o)
   93 CPP_OBJ=$(C_OBJ:%.cpp=.obj/$(OS)/$(VARIANT)/%.o)
   94 F_OBJ=$(CPP_OBJ:%.f=.obj/$(OS)/$(VARIANT)/%.o)
   95 SC_OBJ=$(F_OBJ:%.sc=.obj/$(OS)/$(VARIANT)/%.o)
   96 L_OBJ=$(SC_OBJ:%.l=.obj/$(OS)/$(VARIANT)/%.o)
   97 Y_OBJ=$(L_OBJ:%.y=.obj/$(OS)/$(VARIANT)/%.o)
   98 A_OBJ=$(Y_OBJ) $(OBJ)
   99 
  100 _LIB=$(LIB:%=$(PROJET)/LIB/$(OS)/$(VARIANT)/%)
  101 L=$(LIB:%.a=%)
  102 
  103 _BIN=$(BIN:%=$(PROJET)/BIN/$(OS)/$(VARIANT)/%)
  104 _PLIB=$(PLIB:%=$(PROJET)/LIB/$(OS)/$(VARIANT)/%)
  105 
  106 _SBIN=$(SBIN:%=$(PROJET)/BIN/%)
  107 D_SBIN=$(DIFFUS_SBIN:%=$(PROJET)/DIFFUS/$(OS)/BIN/%)
  108 
  109 CDEF=	-D$(OS) -D$(VARIANT) -DLINUX
  110 INFO_C= .obj/$(OS)/$(VARIANT)/_info.c
  111 INFO= .obj/$(OS)/$(VARIANT)/_info.o
  112 VER=projet.info
  113 
  114 # Internationnalisation : gettext
  115 NLS_POT=$(NLS_PKG).pot
  116 NLS_PO=$(NLS_LANG:%=%/$(NLS_PKG).po)
  117 NLS_MO=$(NLS_LANG:%=$(PROJET)/I18N/%/$(NLS_PKG).mo)
  118 # Internationnalisation : qt
  119 QNL_TS=$(QNL_LANG:%=$(QNL_PKG)_%.ts)
  120 QNL_QM=$(QNL_LANG:%=$(PROJET)/I18N/$(QNL_PKG)_%.qm)
  121 
  122 .PRECIOUS: $(NLS_PO) $(NLS_POT) $(QNL_TS)
  123 
  124 $(PROJET)/INCLUDE/%.h : %.h
  125 	echo Install INCLUDE $<
  126 	mkdir -p `dirname $@`
  127 	cp $< $@
  128 
  129 $(PROJET)/INCLUDE/%.h : %.qh
  130 	echo Install INCLUDE $<
  131 	mkdir -p `dirname $@`
  132 	cp $< $@
  133 
  134 $(PROJET)/BIN/% : %
  135 	echo Install SBIN $<
  136 	mkdir -p `dirname $@`
  137 	cp $< $@
  138 	chmod +x $@
  139 
  140 $(PROJET)/ETC/%.css : %.css
  141 	echo Install ETC $<
  142 	mkdir -p `dirname $@`
  143 	cp $< $@
  144 
  145 $(PROJET)/ETC/%.xsl : %.xsl
  146 	echo Install ETC $<
  147 	mkdir -p `dirname $@`
  148 	cp $< $@
  149 
  150 $(PROJET)/ETC/% : %
  151 	echo Install ETC $<
  152 	mkdir -p `dirname $@`
  153 	cp $< $@
  154 
  155 .obj/$(OS)/$(VARIANT)/%.o : %.c
  156 	echo "--- C: $<"
  157 	mkdir -p `dirname $@`
  158 	gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) $<
  159 
  160 .obj/$(OS)/$(VARIANT)/%.o : %.cpp
  161 	echo "--- C++: $<"
  162 	mkdir -p `dirname $@`
  163 	g++ -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) $<
  164 
  165 .obj/$(OS)/$(VARIANT)/%.o : %.f
  166 	echo "--- F77: $<"
  167 	mkdir -p `dirname $@`
  168 	f77 -c -o $@ $(CF_$(VARIANT)) $(FFLAGS) $<
  169 
  170 .obj/$(OS)/$(VARIANT)/%.o : %.sc
  171 	echo "--- SQL: $<"
  172 	mkdir -p `dirname $@`
  173 	esqlc -p $(SQLFLAGS) -f.obj/$(OS)/$(VARIANT)/$*.c $<
  174 	gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF)	\
  175 		.obj/$(OS)/$(VARIANT)/$*.c
  176 
  177 .obj/$(OS)/$(VARIANT)/%.o : %.l
  178 	echo "--- Lex: $<"
  179 	mkdir -p `dirname $@`
  180 	lex $(LFLAGS) $<
  181 	mv lex.yy.c .obj/$(OS)/$(VARIANT)/$*.c
  182 	gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) -I`pwd` $(CDEF)	\
  183 		.obj/$(OS)/$(VARIANT)/$*.c	
  184 
  185 .obj/$(OS)/$(VARIANT)/%.o : %.y
  186 	echo "--- Yacc: $<"
  187 	mkdir -p `dirname $@`
  188 	yacc $(YFLAGS) $<
  189 	mv y.tab.c .obj/$(OS)/$(VARIANT)/$*.c
  190 	mv y.tab.h .obj/$(OS)/$(VARIANT)/$*.h
  191 	gcc -c -o $@ $(CF_$(VARIANT)) $(CFLAGS) -I`pwd` $(CDEF)	\
  192 		.obj/$(OS)/$(VARIANT)/$*.c
  193 
  194 .obj/$(OS)/$(VARIANT)/moc_%.o : %.qh
  195 	echo "--- Moc: $<"
  196 	mkdir -p `dirname $@`
  197 	moc -o .obj/$(OS)/$(VARIANT)/moc_$*.cpp -f $<
  198 	g++ -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \
  199 		.obj/$(OS)/$(VARIANT)/moc_$*.cpp
  200 
  201 .obj/$(OS)/$(VARIANT)/moc_%.o : %.QH
  202 	echo "--- Moc: $<"
  203 	mkdir -p `dirname $@`
  204 	moc -o .obj/$(OS)/$(VARIANT)/moc_$*.cpp -f $<
  205 	g++ -c -o $@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \
  206 		.obj/$(OS)/$(VARIANT)/moc_$*.cpp
  207 
  208 all : $(VER) $(DIR) $(DIRP) $(LIB) $(BIN) $(_SBIN) $(_ETC) $(NLS_MO) $(QNL_QM)
  209 
  210 current : $(VER) $(DIR) $(DIRP) $(LIB) $(BIN) $(_SBIN) $(_ETC) $(NLS_MO) $(QNL_QM)
  211 
  212 clean : FORCE
  213 	test -z "$(DIR)" || make -r clean_dir
  214 	-echo "CLEAN: `PrelativePath`"
  215 	if [ -d .obj ]; then rm -rf .obj; fi
  216 	if [ -d .dep ]; then rm -rf .dep; fi
  217 	if [ -f .make.state ]; then rm -f .make.state; fi
  218 
  219 clean_dir: FORCE
  220 	for d in $(DIR); do (cd $$d && make -r clean ) ;done
  221 
  222 $(DIR) : FORCE
  223 	-echo "== MAKE: `(cd $@ && PrelativePath)`"
  224 	cd $@  && make -r VARIANT=$(VARIANT)
  225 
  226 $(DIRP) : FORCE
  227 	echo "== MAKE: $@"
  228 	(cd $@  && make -r VARIANT=$(VARIANT) )
  229 
  230 $(INFO) : $(INFO_C)	
  231 	cc -c -o $(INFO) $(INFO_C)
  232 
  233 $(INFO_C) : $(PROJET)/.projet/info.gpl $(DEP) $(A_OBJ) $(_PLIB) $(DLIB)
  234 	PgenInfo_c.sh $(OS) $(VARIANT) $(INFO_C) $L $(BIN) $(_PLIB) $(DLIB)
  235 
  236 $(_LIB) : $(DEP) $(A_OBJ) $(INFO)
  237 	mkdir -p `dirname $@`
  238 	ar rv $@ $? 
  239 	ranlib $@
  240 	echo "== LIB: $(LIB)"
  241 
  242 $(_BIN) : $(DEP) $(A_OBJ) $(_PLIB) $(INFO) $(DLIB)
  243 	echo "-=> Edition des liens: $(BIN)"
  244 	mkdir -p `dirname $@`
  245 	$(LD) -o $@ $(LD_$(VARIANT)) $(A_OBJ) $(INFO) $(_PLIB) $(DLIB) $(LDFLAGS)
  246 	echo "== BIN: $(BIN)"
  247 
  248 $(LIB) : $(INC) $(_LIB)
  249 
  250 $(BIN) : $(INC) $(_BIN)
  251 
  252 $(PROJET)/I18N/%/$(NLS_PKG).mo : %/$(NLS_PKG).po
  253 	mkdir -p `dirname $@`
  254 	d=`dirname $@`;b=`basename $@`;echo "  --==> MO: `PrelativePath $$d`/$$b"
  255 	msgfmt -c -o $@ $<
  256 	touch $@
  257 
  258 %/$(NLS_PKG).po : $(NLS_POT)
  259 	L=`dirname $@` ;\
  260 	[ -d $$L ] || mkdir -p $$L ; \
  261 	echo "  -=> PO: $@" ;\
  262 	if [ ! -f $@ ] ; then \
  263 		msginit --no-translator -l $$L -i $< -o $@ ;\
  264 	else \
  265 		msgmerge -s -U $@ $< ;\
  266 	fi
  267 	touch $@
  268 
  269 $(NLS_POT) : FORCE
  270 	export IL=`pwd`/nls.mk ;												\
  271 	export ROOT=`pwd` ;														\
  272 	printf "I18NS=" >$$IL ;													\
  273 	( cd $(PROJET)/SRC ; make nls ROOT=$$ROOT ) ;							\
  274 	printf "\n\n" >>$$IL ;													\
  275 	echo "$@"' : $$(I18NS)' >>$$IL ;										\
  276 	echo -e "\t"'if [ -f $$@ ] ; then \' >> $$IL ;							\
  277 	echo -e "\t\t"'xgettext -o $$@ -j $$(I18NS) ;\' >> $$IL ;				\
  278 	echo -e "\t"'else \' >> $$IL ;											\
  279 	echo -e "\t\t"'xgettext -o $$@ $$(I18NS) ;\' >> $$IL ;					\
  280 	echo -e "\t"'fi ;\' >> $$IL ;											\
  281 	echo -e "\t"'touch $@ ;\' >> $$IL ;										\
  282 	echo -e "\t"'echo "  -=> POT: $@"' >> $$IL ;							\
  283 	make -f $$IL
  284 
  285 $(QNL_QM) : $(QNL_TS)
  286 	d=`dirname $@`;b=`basename $@`;echo "  --==> QM: `PrelativePath $$d`/$$b"
  287 	lrelease $< -qm $@
  288 
  289 $(QNL_TS) : FORCE
  290 	export IL=`pwd`/qls.mk ;												\
  291 	export ROOT=`pwd` ;														\
  292 	printf "I18NS=" >$$IL ;													\
  293 	( cd $(PROJET)/SRC ; make qls ROOT=$$ROOT ) ;							\
  294 	printf "\n\n" >>$$IL ;													\
  295 	echo "$@"' : $$(I18NS)' >>$$IL ;										\
  296 	echo -e "\t"'lupdate -noobsolete -verbose $$(I18NS) -ts $$@ ;\' >>$$IL ;\
  297 	echo -e "\t"'touch $@ ;\' >> $$IL ;										\
  298 	echo -e "\t"'echo "  -=> TS: $@"' >> $$IL ;								\
  299 	make -f $$IL
  300 
  301 # nls/qls appeles de maniere recursive depuis la racine du projet dans
  302 # tous les dossier du projet
  303 nls:
  304 	if [ ! -z "$(DIR)" ] ; then												\
  305 		for d in $(DIR) ; do (cd $$d && make nls ROOT=$(ROOT) ) ; done ;	\
  306 	fi ;																	\
  307 	if [ ! -z "$(NLS_SRC)" ] ; then 										\
  308 		for s in $(NLS_SRC) ;												\
  309 			do printf " \\\\\n\t`Prelative $(ROOT) $$s`" >> $(IL) ; 		\
  310 		done ;																\
  311 	fi ;																	\
  312 
  313 qls:
  314 	if [ ! -z "$(DIR)" ] ; then												\
  315 		for d in $(DIR) ; do (cd $$d && make qls ROOT=$(ROOT) ) ; done ;	\
  316 	fi ;																	\
  317 	if [ ! -z "$(QNL_SRC)" ] ; then											\
  318 		for s in $(QNL_SRC) ; do											\
  319 			printf " \\\\\n\t`Prelative $(ROOT) $$s`" >> $(IL) ;			\
  320 		done ;																\
  321 	fi
  322 
  323 FORCE:
  324 
  325 #
  326 # GESTION DES DEPENDANCES
  327 #
  328 %.c : FORCE
  329 	mkdir -p .dep/$(OS)/$(VARIANT)
  330 	gcc -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CFLAGS) $(CDEF) $@
  331 	Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/$*.o
  332 
  333 %.cpp : FORCE
  334 	mkdir -p .dep/$(OS)/$(VARIANT)
  335 	g++ -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) $@
  336 	Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/$*.o
  337 
  338 %.qh : FORCE
  339 	mkdir -p .dep/$(OS)/$(VARIANT)
  340 	-g++ -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \
  341 		.obj/$(OS)/$(VARIANT)/moc_$*.cpp > /dev/null 2>&1
  342 	Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/moc_$*.o
  343 
  344 %.QH : FORCE
  345 	mkdir -p .dep/$(OS)/$(VARIANT)
  346 	-g++ -M -o .dep/$(OS)/$(VARIANT)/$@ $(CF_$(VARIANT)) $(CPPFLAGS) $(CDEF) \
  347 		.obj/$(OS)/$(VARIANT)/moc_$*.cpp > /dev/null 2>&1
  348 	Pdepend $@ .dep/$(OS)/$(VARIANT)/$@ .obj/$(OS)/$(VARIANT)/moc_$*.o
  349 
  350 projet.info : $(PROJET)/.projet/info.gpl
  351 	PgenInfo_include.sh > $@
Makefile include.LINUX include.SOLARIS include.CGI include.CGI_BIN include.XPI xpi_rdf.xsl Pdepend.c Pinfo.c PrelativeHome.c PrelativePath.c Pprojetgpl.c Prelative.c PinfoGPL.sh PgenInfo_c.sh PenvProjet.sh Pinfo2html.sh Pinstall.sh PgenInfo_include.sh projet.env crabs_mk.sh crabs_mk.csh fr/crabs_makefile.po Makefile.SOLARIS
~~ / include.LINUX

Haut de page

Contacter crabs

Date de génération : 22/09/2011 21:47