Makefile pour developpement multi-OS, multi-variants

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

~~ / include.SOLARIS
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  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 
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.SOLARIS

Haut de page

Contacter crabs

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