X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Makefile;h=2441af5f8e7193cb922645eb14b74e44daf0144e;hb=7f68d7beda1cdbf985b64c16cb9474e271eb6b2b;hp=51d8b56c8e44fe9a06525fd1b66efbef7806d672;hpb=0cc4346e90a8b065a2384afb17468e1f77bbff79;p=build.git diff --git a/Makefile b/Makefile index 51d8b56c..2441af5f 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ ### $Id$ # #################### -# invokation: +# invocation: # # (*) make stage1=true # this extracts all specfiles and computes .mk from specfiles @@ -29,17 +29,17 @@ # (*) create your main yumgroups.xml as groups/.xml # (*) there are also various places where a set of modules are defined. # check for .lst files in the various modules that build root images -# and mimick what's done for planetlab +# and mimic what's done for planetlab # (*) then you need to run # make stage1=true PLDISTRO=onelab # #################### # This build deals with 2 kinds of objects # -# (*) packages are named upon the RPM name; they are moslty lowercase +# (*) packages are named upon the RPM name; they are mostly lowercase # Add a package to ALL if you want it built as part of the default set. # (*) modules are named after the subversion tree; as of this writing their names -# are mostly mixedcase like MyPLC or Vserverreference +# are mostly mixed case like MyPLC or Vserverreference # #################### packages # basics: how to build a package - you need/may define the following variables @@ -60,6 +60,10 @@ # would let you use the %release from the kernel's package when rpmbuild'ing mydriver - see automatic below # (*) package-DEPENDS # a set of *packages* that this package depends on +# (*) package-DEPENDDEVELS +# a set of *packages* that the build will rpm-install the -devel variant before building +# (*) package-DEPENDDEVELRPMS +# a set of *rpms* that the build will rpm-install before building # (*) package-DEPENDFILES # a set of files that the package depends on - and that make needs to know about # if this contains RPMS/yumgroups.xml, then the toplevel RPMS's index @@ -74,7 +78,7 @@ # the complete path where this module lies; # you can specify the trunk or a given tag with this variable # -# OR if the module is managed under cvs +# OR if the module is managed under cvs (will be obsoleted) # # (*) module-CVSROOT # (*) module-TAG @@ -82,14 +86,14 @@ #################### automatic variables # # the build defines the following make variables - these are extracted from spec files -# (*) package-TARBALL : from the Source: declaration -# example: kernel-i386-TARBALL = SOURCES/linux-2.6.20.tar.bz2 +# (*) package-TARBALLS : from the Source: declaration +# example: kernel-i386-TARBALLS = SOURCES/linux-2.6.20.tar.bz2 # (*) package-SOURCE : # example: kernel-i386-SOURCE = SOURCES/linux-2.6.20 # (*) package-SRPM # example: kernel-i386-SRPM = SRPMS/kernel-2.6.20-1.2949.fc6.vs2.2.0.1.0.planetlab.src.rpm -# (*) package-RPM -# example: kernel-i386-RPM = \ +# (*) package-RPMS +# example: kernel-i386-RPMS = \ # RPMS/i686/kernel-2.6.20-1.2949.fc6.vs2.2.0.1.0.planetlab.i686.rpm \ # RPMS/i686/kernel-devel-2.6.20-1.2949.fc6.vs2.2.0.1.0.planetlab.i686.rpm \ # RPMS/i686/kernel-vserver-2.6.20-1.2949.fc6.vs2.2.0.1.0.planetlab.i686.rpm \ @@ -188,16 +192,15 @@ include $(ALLMKS) # mention $(ALL) here rather than rpms # this is because the inter-package dependencies are expressed like # util-vserver: util-python -all: $(ALL) -all: srpms +all: rpms +all: repo endif endif #################### # gather build information for the 'About' page -SOURCES/myplc-release: +myplc-release: @echo 'Creating myplc-release' - mkdir -p SOURCES rm -f $@ (echo -n 'Build bdate: ' ; date '+%Y.%m.%d') >> $@ (echo -n 'Build btime: ' ; date '+%H:%M') >> $@ @@ -207,6 +210,23 @@ SOURCES/myplc-release: echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx modules versions info" >> $@ $(MAKE) --no-print-directory versions >> $@ +### yumgroups.xml +# the source +ifndef YUMGROUPS +YUMGROUPS := groups/$(PLDISTRO).xml +endif + +RPMS/yumgroups.xml: $(YUMGROUPS) + mkdir -p RPMS + install -D -m 644 $(YUMGROUPS) $@ + +createrepo = createrepo --quiet -g yumgroups.xml RPMS/ + +repo: RPMS/yumgroups.xml + $(createrepo) + +.PHONY: repo + #################### # notes: # * to make configuration easier, we always use the first module's @@ -217,7 +237,7 @@ SOURCES/myplc-release: # define stage1_variables $(1)_spec = $(notdir $($(1)-SPEC)) -$(1)_specpath = SPECS/$(notdir $($(1)-SPEC)) +$(1)_specpath = CODESPECS/$(notdir $($(1)-SPEC)) $(1)_module = $(firstword $($(1)-MODULES)) endef @@ -244,7 +264,7 @@ $(foreach package, $(ALL), $(eval $(call package_hasdate,$(package)))) # cannot use variables in such rules, we need to inline everything, sigh define target_spec $($(1)_specpath): - mkdir -p SPECS + mkdir -p CODESPECS (echo -n "# Generated by planetlab build from $($(1)-SPEC) on " ; date) > $($(1)_specpath) echo "%define distroname $(DISTRO)" >> $($(1)_specpath) echo "%define distrorelease $(RELEASE)" >> $($(1)_specpath) @@ -270,10 +290,19 @@ spec2make: spec2make.c $(CC) -g -Wall $< -o $@ -lrpm -lrpmbuild # Base rpmbuild in the current directory -export HOME := $(shell pwd) +# trying a longer topdir +# http://forums.fedoraforum.org/showthread.php?t=39625 +# and more specifically post#6 +# hard-wired for now +export HOME := /building .rpmmacros: - echo "%_topdir $(HOME)" > $@ + rm -f /building ; ln -s /build /building + rm -f $@ + echo "%_topdir $(HOME)" >> $@ echo "%_tmppath $(HOME)/tmp" >> $@ + echo "%_netsharedpath /proc:/dev/pts" >> $@ + echo "%_install_langs C:de:en:es:fr" >> $@ + echo "%_excludedocs yes" >> $@ ### run spec2make on the spec file and include the result # usage: spec2make package @@ -300,7 +329,7 @@ all: savepldistro #################### ### pack sources into tarballs -ALLTARBALLS:= $(foreach package, $(ALL), $($(package)-TARBALL)) +ALLTARBALLS:= $(foreach package, $(ALL), $($(package)-TARBALLS)) tarballs: $(ALLTARBALLS) @echo $(words $(ALLTARBALLS)) source tarballs OK .PHONY: tarballs @@ -369,72 +398,80 @@ CODEBASES/%: $(call extract_single_module,$(package))) @(echo -n "XXXXXXXXXXXXXXX -- END CODEBASE $(package) : $@ " ; date) -### rpmbuild invokation -ALLRPMS:=$(foreach package,$(ALL),$($(package)-RPM)) -# same as above, mention $(ALL) and not $(ALLRPMS) -rpms: $(ALL) - @echo $(words $(ALLRPMS)) binary rpms OK -.PHONY: rpms - -# usage: build_binary_rpm package -# xxx hacky - invoke createrepo if DEPENDFILES mentions RPMS/yumgroups.xml -define target_binary_rpm -$($(1)-RPM): $($(1)_specpath) $($(1)-TARBALL) .rpmmacros - mkdir -p BUILD RPMS tmp - @(echo -n "XXXXXXXXXXXXXXX -- BEG RPM $(1) " ; date) - $(if $(findstring RPMS/yumgroups.xml,$($(1)-DEPENDFILES)), createrepo --quiet -g yumgroups.xml RPMS/ , ) - $(if $($(1)-RPMBUILD),\ - $($(1)-RPMBUILD) $($(1)-RPMFLAGS) -bb $($(1)_specpath), \ - $(RPMBUILD) $($(1)-RPMFLAGS) -bb $($(1)_specpath)) - @(echo -n "XXXXXXXXXXXXXXX -- END RPM $(1) " ; date) -endef - -$(foreach package,$(ALL),$(eval $(call target_binary_rpm,$(package)))) - ### source rpms ALLSRPMS:=$(foreach package,$(ALL),$($(package)-SRPM)) srpms: $(ALLSRPMS) @echo $(words $(ALLSRPMS)) source rpms OK .PHONY: srpms -# usage: build_source_rpm package +# usage: target_source_rpm package +# select upon the package name, whether it contains srpm or not define target_source_rpm -$($(1)-SRPM): $($(1)_specpath) $($(1)-TARBALL) .rpmmacros +ifeq "$(subst srpm,,$(1))" "$(1)" +$($(1)-SRPM): $($(1)_specpath) .rpmmacros $($(1)-TARBALLS) mkdir -p BUILD SRPMS tmp @(echo -n "XXXXXXXXXXXXXXX -- BEG SRPM $(1) " ; date) + -$(foreach devel,$($(1)-DEPENDDEVELS), $(if $($(devel)-DEVEL-RPMS),rpm --force -Uvh $($(devel)-DEVEL-RPMS);)) + -$(foreach rpm,$($(1)-DEPENDDEVELRPMS), rpm --force -Uvh $($(rpm)-RPM-PATH);) $(if $($(1)-RPMBUILD),\ $($(1)-RPMBUILD) $($(1)-RPMFLAGS) -bs $($(1)_specpath), $(RPMBUILD) $($(1)-RPMFLAGS) -bs $($(1)_specpath)) @(echo -n "XXXXXXXXXXXXXXX -- END SRPM $(1) " ; date) +else +$($(1)-SRPM): $($(1)_specpath) .rpmmacros $($(1)-CODEBASE) + mkdir -p BUILD SRPMS tmp + @(echo -n "XXXXXXXXXXXXXXX -- BEG SRPM $(1) (using make srpm) " ; date) + -$(foreach devel,$($(1)-DEPENDDEVELS), $(if $($(devel)-DEVEL-RPMS),rpm --force -Uvh $($(devel)-DEVEL-RPMS);)) + -$(foreach rpm,$($(1)-DEPENDDEVELRPMS), rpm --force -Uvh $($(rpm)-RPM-PATH);) + make -C $($(1)-CODEBASE) srpm && \ + rm -f SRPMS/$(notdir $($(1)-SRPM)) && \ + ln $($(1)-CODEBASE)/$(notdir $($(1)-SRPM)) SRPMS/$(notdir $($(1)-SRPM)) + @(echo -n "XXXXXXXXXXXXXXX -- END SRPM $(1) " ; date) +endif endef $(foreach package,$(ALL),$(eval $(call target_source_rpm,$(package)))) -### RPMS/yumgroups.xml -ifndef YUMGROUPS -YUMGROUPS := groups/$(PLDISTRO).xml -endif -RPMS/yumgroups.xml: $(YUMGROUPS) - install -D -m 644 $(YUMGROUPS) $@ +### rpmbuild invokation +ALLRPMS:=$(foreach package,$(ALL),$($(package)-RPMS)) +# same as above, mention $(ALL) and not $(ALLRPMS) +rpms: $(ALLRPMS) + @echo $(words $(ALLRPMS)) binary rpms OK +.PHONY: rpms + +# usage: build_binary_rpm package +# xxx hacky - invoke createrepo if DEPENDFILES mentions RPMS/yumgroups.xml +define target_binary_rpm +$($(1)-RPMS): $($(1)-SRPM) + mkdir -p BUILD RPMS SPECS tmp + @(echo -n "XXXXXXXXXXXXXXX -- BEG RPM $(1) " ; date) + $(if $(findstring RPMS/yumgroups.xml,$($(1)-DEPENDFILES)), $(createrepo) , ) + $(if $($(1)-RPMBUILD),\ + $($(1)-RPMBUILD) $($(1)-RPMFLAGS) --rebuild --define "_sourcedir $(HOME)/tmp" $($(1)-SRPM), \ + $(RPMBUILD) $($(1)-RPMFLAGS) --rebuild --define "_sourcedir $(HOME)/tmp" $($(1)-SRPM)) + @(echo -n "XXXXXXXXXXXXXXX -- END RPM $(1) " ; date) +endef + +$(foreach package,$(ALL),$(eval $(call target_binary_rpm,$(package)))) ### shorthand target # e.g. make proper -> does propers rpms # usage shorthand_target package define target_shorthand -$(1): $($(package)-RPM) +$(1): $($(package)-RPMS) .PHONY: $(1) $(1)-spec: $($(package)-SPEC) .PHONY: $(1)-spec $(1)-mk: $($(package)-MK) .PHONY: $(1)-mk -$(1)-tarball: $($(package)-TARBALL) +$(1)-tarball: $($(package)-TARBALLS) .PHONY: $(1)-tarball $(1)-codebase: $($(package)-CODEBASE) .PHONY: $(1)-source $(1)-source: $($(package)-SOURCE) .PHONY: $(1)-codebase -$(1)-rpm: $($(package)-RPM) -.PHONY: $(1)-rpm +$(1)-rpms: $($(package)-RPMS) +.PHONY: $(1)-rpms $(1)-srpm: $($(package)-SRPM) .PHONY: $(1)-srpm endef @@ -444,7 +481,7 @@ $(foreach package,$(ALL),$(eval $(call target_shorthand,$(package)))) ### dependencies define package_depends_on_file $(1):$(2) -$($(1)-RPM):$(2) +$($(1)-RPMS):$(2) endef define target_dependfiles @@ -453,18 +490,17 @@ endef define package_depends_on_package $(1):$(2) -$(1):$($(2)-RPM) -$($(1)-RPM):$($(2)-RPM) +$(1):$($(2)-RPMS) +$($(1)-RPMS):$($(2)-RPMS) endef define target_depends -$(foreach package,$($(1)-DEPENDS),$(eval $(call package_depends_on_package,$(1),$(package)))) +$(foreach package,$($(1)-DEPENDS) $($(1)-DEPENDDEVELS),$(eval $(call package_depends_on_package,$(1),$(package)))) endef $(foreach package,$(ALL),$(eval $(call target_depends,$(package)))) $(foreach package,$(ALL),$(eval $(call target_dependfiles,$(package)))) - ### clean target # usage: target_clean package define target_clean @@ -477,21 +513,21 @@ $(1)-clean-source: .PHONY: $(1)-clean-source CLEANS += $(1)-clean-source $(1)-clean-tarball: - rm -rf $($(1)-TARBALL) + rm -rf $($(1)-TARBALLS) .PHONY: $(1)-clean-tarball CLEANS += $(1)-clean-tarball $(1)-clean-build: rm -rf BUILD/$(notdir $($(1)-SOURCE)) CLEANS += $(1)-clean-build -$(1)-clean-rpm: - rm -rf $($(1)-RPM) -.PHONY: $(1)-clean-rpm -CLEANS += $(1)-clean-rpm +$(1)-clean-rpms: + rm -rf $($(1)-RPMS) +.PHONY: $(1)-clean-rpms +CLEANS += $(1)-clean-rpms $(1)-clean-srpm: rm -rf $($(1)-SRPM) .PHONY: $(1)-clean-srpm CLEANS += $(1)-clean-srpm -$(1)-clean: $(1)-clean-codebase $(1)-clean-source $(1)-clean-tarball $(1)-clean-build $(1)-clean-rpm $(1)-clean-srpm +$(1)-clean: $(1)-clean-codebase $(1)-clean-source $(1)-clean-tarball $(1)-clean-build $(1)-clean-rpms $(1)-clean-srpm .PHONY: $(1)-clean endef @@ -508,9 +544,9 @@ clean-help: ### brute force clean distclean1: - rm -rf pldistro.mk .rpmmacros spec2make SPECS MAKE + rm -rf pldistro.mk .rpmmacros spec2make CODESPECS MAKE distclean2: - rm -rf CODEBASES SOURCES BUILD RPMS SRPMS tmp + rm -rf CODEBASES SOURCES BUILD RPMS SRPMS SPECS tmp distclean: distclean1 distclean2 .PHONY: distclean1 distclean2 distclean @@ -556,7 +592,7 @@ help: @echo "Run make in two stages:" @echo "" @echo "make stage1=true PLDISTRO=onelab" - @echo " -> extracts all spec files in SPECS/ and mk files in MAKE/" + @echo " -> extracts all spec files in CODESPECS/ and mk files in MAKE/" @echo " as well as save PLDISTRO for subsequent runs" @echo "" @echo "Then you can use the following targets" @@ -564,7 +600,7 @@ help: @echo " rebuilds everything" @echo '$ make util-vserver' @echo " makes the RPMS related to util-vserver" - @echo " equivalent to 'make util-vserver-rpm'" + @echo " equivalent to 'make util-vserver-rpms'" @echo "" @echo "Or, vertically - step-by-step for a given package" @echo '$ make util-vserver-codebase' @@ -573,7 +609,7 @@ help: @echo " creates source link in SOURCES/util-vserver-" @echo '$ make util-vserver-tarball' @echo " creates source tarball in SOURCES/util-vserver-." - @echo '$ make util-vserver-rpm' + @echo '$ make util-vserver-rpms' @echo " build rpm(s) in RPMS/" @echo '$ make util-vserver-srpm' @echo " build source rpm in SRPMS/"