X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Makefile;h=2c819784b9a34245b2d814823bf8995ea3cd4c29;hb=5ae088e9129de4259b0013b95b4314ef79f462d5;hp=4b7e38a3d4e9c470eec2a517ff20a76eb4f81d51;hpb=d41236caef3a3ea643d7afee381e34bf3b88a4e5;p=build.git diff --git a/Makefile b/Makefile index 4b7e38a3..2c819784 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ # Thierry Parmentelat - INRIA Sophia Antipolis # ### $Id$ +### $URL$ # #################### # invocation: @@ -21,15 +22,7 @@ # #################### (planetlab) distributions # -# (*) the default distribution is called 'planetlab' -# (*) you may define an alternative distribution, e.g. onelab -# in this case you need to -# (*) create onelab.mk that defines your *packages* (see below) -# (*) create onelab-tags.mk that defines where to fetch your *modules* -# (*) 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 mimic what's done for planetlab +# (*) see README-pldistros.txt # (*) then you need to run # make stage1=true PLDISTRO=onelab # @@ -64,14 +57,24 @@ # a set of *packages* that this package depends on # (*) package-DEPEND-DEVEL-RPMS # a set of *rpms* that the build will rpm-install before building +# the build will attempt to uninstall those once the package is built, this is not fatal though +# this is intended to denote local rpms, i.e. ones that are results of our own build +# stock rpms should be mentioned in config.planetlab/devel.pkgs # (*) package-DEPEND-FILES # 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 # is refreshed with createrepo prior to running rpmbuild +# (*) package-EXCLUDE-DEVEL-RPMS +# a set of *rpms* that the build will rpm-uninstall before building +# this is intended to denote stock rpms, and the build will attempt to yum-install them +# back after the package is rebuilt # (*) package-RPMFLAGS: Miscellaneous RPM flags # (*) package-RPMBUILD: If not rpmbuild - mostly used for sudo'ing rpmbuild # (*) package-BUILD-FROM-SRPM: set this to any non-empty value, if your package is able to produce # a source rpms by running 'make srpm' +# (*) package-RPMDATE: set this to any non-empty value to get the rpm package's release field hold the current date +# this is useful for container packages, like e.g. bootstrapfs or vserver, that contains much more than the +# correspondng module # #################### modules # Required information about the various modules (set this in e.g. planetlab-tags.mk) @@ -89,22 +92,32 @@ # # the build defines some make variables that are extracted from spec files # see for example -# (*) $ make ulogd.pkginfo +# (*) $ make ulogd-pkginfo # to see the list f variables attached to a given package -# (*) $ make kernel-devel.rpminfo -# to see the list f variables attached to a given rpm +# (*) $ make kernel-devel-rpminfo +# to see the list of variables attached to a given rpm # #################### +# exported to spec files as plrelease +PLANETLAB_RELEASE = 5.0 + # # Default values # -HOSTARCH := $(shell uname -i) +# minimal compat with macos, just so this does not complain +HOSTARCH := $(shell uname -i 2> /dev/null || uname -m 2> /dev/null) DISTRO := $(shell ./getdistro.sh) RELEASE := $(shell ./getrelease.sh) +DISTRONAME := $(shell ./getdistroname.sh) RPM-INSTALL-DEVEL := rpm --force -Uvh -# cannot force rpm -e +# uninstall -- cannot force rpm -e +# need to ignore result, kernel-headers cannot be uninstalled as glibc depends on it RPM-UNINSTALL-DEVEL := rpm -e +YUM-INSTALL-DEVEL := yum -y install + +# see also below +REMOTE-PLDISTROS="wextoolbox" #################### Makefile # Default target @@ -116,9 +129,15 @@ PLDISTRO := planetlab RPMBUILD := rpmbuild export CVS_RSH := ssh -########## pldistro.mk holds PLDISTRO - it is generated at stage1 (see below) +########## savedpldistro.mk holds PLDISTRO - it is generated at stage1 (see below) ifeq "$(stage1)" "" -include pldistro.mk +include savedpldistro.mk +endif + +# when re-running the nightly build after failure, we need to gather the former values +# do this by running make stage1=skip +PLDISTRO +ifeq "$(stage1)" "skip" +include savedpldistro.mk endif #################### include onelab.mk @@ -128,9 +147,50 @@ include $(PLDISTROCONTENTS) #################### include -tags.mk # describes where to fetch components, and the related tags if using cvs +ifeq "$(PLDISTROTAGS)" "" PLDISTROTAGS := $(PLDISTRO)-tags.mk +endif include $(PLDISTROTAGS) +# this used to be set in the -tags.mk files, but that turned out to require +# error-prone duplicate changes +# so now the nightly build script sets this to what it is currently using +# we set a default in case we run the build manually: +# if the local directory was svn checked out, then use the corresponding URL +svn-info-url-line := $(shell svn info 2> /dev/null | grep URL:) +default-build-SVNPATH := $(lastword $(svn-info-url-line)) +# otherwise, use this hard-coded default +ifeq "$(default-build-SVNPATH)" "" +default-build-SVNPATH := http://svn.planet-lab.org/svn/build/trunk +endif +# use default if necessary +build-SVNPATH ?= $(default-build-SVNPATH) + +#################### +define remote_pldistro +$(1).mk: config.$(1)/$(1).mk + @echo 'creating $(1) from config subdir' + cp config.$(1)/$(1).mk $(1).mk + +$(2).mk: config.$(1)/$(2).mk + @echo 'creating $(1) tags from config subdir' + cp config.$(1)/$(2).mk $(2).mk + +config.$(1)/$(1).mk: config.$(1) +config.$(1)/$(2).mk: config.$(1) + +config.$(1): config.$(1).svnpath + @echo "Fetching details for pldistro $(1)" + svn export $(shell grep -v "^#" config.$(1).svnpath) config.$(1) + +DISTCLEANS += $(1).mk $(2).mk config.$(1) + +endef + +# somehow this does not work, handle manually instead +#$(foreach distro, $(REMOTE-PLDISTROS), $(eval $(call remote_pldistro,$(distro),$(distro)-tags))) +$(eval $(call remote_pldistro,wextoolbox,wextoolbox-tags)) + ########## stage1 and stage1iter # extract specs and compute .mk files by running # make stage1=true @@ -188,34 +248,10 @@ all: repo endif endif -#################### -# gather build information for the 'About' page -# uses INIT_CWD to try and guess the vserver location -myplc-release: - @echo 'Creating myplc-release' - rm -f $@ - (echo -n 'Build bdate: ' ; date '+%Y.%m.%d') >> $@ - (echo -n 'Build btime: ' ; date '+%H:%M') >> $@ - (echo -n 'Build bhostname: ' ; hostname) >> $@ - (echo "Build blocation: $(INIT_CWD)") >> $@ - (echo -n 'Build tags file: ' ; fgrep '$$''Id' $(PLDISTROTAGS)) >> $@ - (echo "Build tarch: $(HOSTARCH)") >> $@ - (echo "Build tdistro: $(DISTRO)") >> $@ - (echo "Build trelease: $(RELEASE)") >> $@ - echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx modules versions info" >> $@ - $(MAKE) --no-print-directory versions >> $@ - echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rpms list" >> $@ - $(MAKE) --no-print-directory version-rpms >> $@ - -### yumgroups.xml -# the source -ifndef YUMGROUPS -YUMGROUPS := groups/$(PLDISTRO).xml -endif - -RPMS/yumgroups.xml: $(YUMGROUPS) +### yumgroups.xml : compute from all known .pkgs files +RPMS/yumgroups.xml: mkdir -p RPMS - install -D -m 644 $(YUMGROUPS) $@ + ./yumgroups.sh $(PLDISTRO) > $@ createrepo = createrepo --quiet -g yumgroups.xml RPMS/ @@ -232,45 +268,66 @@ repo: RPMS/yumgroups.xml # $(package)-SPEC - otherwise the cvs modules have to define spec as # /.spec while svn modules just define it as .spec # -define stage1_variables -$(1).spec = $(notdir $($(1)-SPEC)) -$(1).specpath = SPECS/$(1).spec -$(1).module = $(firstword $($(1)-MODULES)) +define stage1_package_vars +$(1).spec := $(notdir $($(1)-SPEC)) +$(1).specpath := SPECS/$(1).spec +$(1).module := $(firstword $($(1)-MODULES)) endef -$(foreach package, $(ALL), $(eval $(call stage1_variables,$(package)))) +$(foreach package, $(ALL), $(eval $(call stage1_package_vars,$(package)))) + +# compute all modules +ALL-MODULES := +$(foreach package,$(ALL), $(eval ALL-MODULES+=$($(package)-MODULES))) +ALL-MODULES:=$(sort $(ALL-MODULES)) + +# extract revision from -SVNPATH +define stage1_module_vars +$(1)-SVNPATH := $(strip $($(1)-SVNPATH)) +$(1).svnpath := $(firstword $(subst @, ,$($(1)-SVNPATH))) +$(1).svnrev := $(word 2,$(subst @, @,$($(1)-SVNPATH))) +endef + +$(foreach module,$(ALL-MODULES), $(eval $(call stage1_module_vars,$(module)))) # -# for each package, compute whether we need to set date (i.e. whether we use the trunk) -# the myplc package is forced to have a date, because it is more convenient -# (we cannot bump its number everytime something changes in the system) -# myplc-native does not need this trick +# for each package, compute whether we need to set date +# the heuristic is that we mention the date as part of the rpm release flag if +# (*) the package has requested it by setting package-RPMDATE (container packages should do that) +# (*) or SVNPATH contains 'trunk' or 'branches' # define package_hasdate -$(1).has-date = $(if $(subst myplc,,$(1)), \ - $(if $($(1)-SVNPATH),\ - $(if $(findstring /trunk,$($(1)-SVNPATH)),yes,),\ - $(if $(findstring HEAD,$($(1)-TAG)),yes,)), \ - yes) +$(1).has-date = $(if $($(1)-RPMDATE),yes, \ + $(if $($($(1).module)-SVNPATH), \ + $(if $(findstring /trunk,$($($(1).module)-SVNPATH)),yes, \ + $(if $(findstring /branches,$($($(1).module)-SVNPATH)),yes,)), \ + $(if $(findstring HEAD,$($($(1).module)-TAG)),yes,))) endef $(foreach package, $(ALL), $(eval $(call package_hasdate,$(package)))) +### the common header for generated specfiles +# useful when trying new specfiles manually +header.spec: + (echo -n "# Generated by planetlab build from $($(1)-SPEC) on " ; date) > $@ + echo "%define distro $(DISTRO)" >> $@ + echo "%define distrorelease $(RELEASE)" >> $@ + echo "%define distroname $(DISTRONAME)" >> $@ + echo "%define pldistro $(PLDISTRO)" >> $@ + echo "%define plrelease $(PLANETLAB_RELEASE)" >> $@ + ### extract spec file from scm define target_spec -$($(1).specpath): +$($(1).specpath): header.spec mkdir -p SPECS - (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) - echo "%define pldistro $(PLDISTRO)" >> $($(1).specpath) + cat header.spec > $($(1).specpath) $(if $($(1).has-date),echo "%define date $(shell date +%Y.%m.%d)" >> $($(1).specpath),) $(if $($(1)-SPECVARS), \ $(foreach line,$($(1)-SPECVARS), \ echo "%define" $(word 1,$(subst =, ,$(line))) "$(word 2,$(subst =, ,$(line)))" >> $($(1).specpath) ;)) - echo "# included from codebase specfile" >> $($(1).specpath) + echo "# included from $($(1)-SPEC)" >> $($(1).specpath) $(if $($($(1).module)-SVNPATH),\ - svn cat $($($(1).module)-SVNPATH)/$($(1)-SPEC) >> $($(1).specpath) || rm $($(1).specpath),\ + svn cat $($($(1).module).svnpath)/$($(1)-SPEC)$($($(1).module).svnrev) >> $($(1).specpath) || rm $($(1).specpath),\ cvs -d $($($(1).module)-CVSROOT) checkout \ -r $($($(1).module)-TAG) \ -p $($(1).module)/$($(1)-SPEC) >> $($(1).specpath)) @@ -298,6 +355,7 @@ endif rm -f $@ echo "%_topdir $(HOME)" >> $@ echo "%_tmppath $(HOME)/tmp" >> $@ + echo "%__spec_install_pre %{___build_pre}" >> $@ ./getrpmmacros.sh >> $@ ### this utility allows to extract various info from a spec file @@ -310,23 +368,28 @@ spec2make: spec2make.c define target_mk MAKE/$(1).mk: $($(1).specpath) spec2make .rpmmacros mkdir -p MAKE - ./spec2make $($(1)-RPMFLAGS) $($(1).specpath) $(1) > MAKE/$(1).mk - @if [ -z MAKE/$(1).mk ] ; then rm MAKE/$(1).mk ; exit 1 ; fi + ./spec2make $($(1)-RPMFLAGS) $($(1).specpath) $(1) > MAKE/$(1).mk || { rm MAKE/$(1).mk; exit 1; } endef $(foreach package,$(ALL),$(eval $(call target_mk,$(package)))) # stores PLDISTRO in a file # this is done at stage1. later run wont get confused -pldistro.mk: - echo "PLDISTRO:=$(PLDISTRO)" > $@ - echo "PLDISTROTAGS:=$(PLDISTROTAGS)" >> $@ - -savepldistro: pldistro.mk -.PHONY: savepldistro +SAVED_VARS=PLDISTRO PLDISTROTAGS build-SVNPATH PERSONALITY MAILTO BASE WEBPATH TESTBUILDURL WEBROOT +savedpldistro.mk: + @echo "# do not edit" > $@ + @$(foreach var,$(SAVED_VARS),echo "$(var):=$($(var))" >> $@ ;) + @echo "# do not edit" > aliases + @echo -n "alias m=\"make " >> aliases + @$(foreach var,$(SAVED_VARS),echo -n " $(var)=$($(var))" >> aliases ;) + @echo "\"" >> aliases + @echo "alias m1=\"m stage1=true\"" >> aliases + +savedpldistro: savedpldistro.mk +.PHONY: savedpldistro # always refresh this -all: savepldistro +all: savedpldistro #################### regular make @@ -418,26 +481,37 @@ srpms: $(ALLSRPMS) @echo $(words $(ALLSRPMS)) source rpms OK .PHONY: srpms +### these macro handles the DEPEND-DEVEL-RPMS and EXCLUDE-DEVEL-RPMS tags for a hiven package +# before building : rpm-install DEPEND-DEVEL-RPMS and rpm-uninstall EXCLUDE +define handle_devel_rpms_pre + $(if $($(1).all-devel-rpm-paths), echo "Installing for $(1)-DEPEND-DEVEL-RPMS" ; $(RPM-INSTALL-DEVEL) $($(1).all-devel-rpm-paths)) + $(if $($(1)-EXCLUDE-DEVEL-RPMS), echo "Uninstalling for $(1)-EXCLUDE-DEVEL-RPMS" ; $(RPM-UNINSTALL-DEVEL) $($(1)-EXCLUDE-DEVEL-RPMS)) +endef + +define handle_devel_rpms_post + -$(if $($(1)-DEPEND-DEVEL-RPMS), echo "Unstalling for $(1)-DEPEND-DEVEL-RPMS" ; $(RPM-UNINSTALL-DEVEL) $($(1)-DEPEND-DEVEL-RPMS)) + $(if $($(1)-EXCLUDE-DEVEL-RPMS), "Reinstalling for $(1)-EXCLUDE-DEVEL-RPMS" ; $(YUM-INSTALL-DEVEL) $($(1)-EXCLUDE-DEVEL-RPMS) ) +endef + # usage: target_source_rpm package -# select upon the package name, whether it contains srpm or not define target_source_rpm ifeq "$($(1)-BUILD-FROM-SRPM)" "" $($(1).srpm): $($(1).specpath) .rpmmacros $($(1).tarballs) mkdir -p BUILD SRPMS tmp @(echo -n "XXXXXXXXXXXXXXX -- BEG SRPM $(1) (using SOURCES) " ; date) - $(if $($(1).all-devel-rpm-paths), $(RPM-INSTALL-DEVEL) $($(1).all-devel-rpm-paths)) + $(call handle_devel_rpms_pre,$(1)) $($(1).rpmbuild) -bs $($(1).specpath) - $(if $($(1)-DEPEND-DEVEL-RPMS), $(RPM-UNINSTALL-DEVEL) $($(1)-DEPEND-DEVEL-RPMS)) + $(call handle_devel_rpms_post,$(1)) @(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) - $(if $($(1).all-devel-rpm-paths), $(RPM-INSTALL-DEVEL) $($(1).all-devel-rpm-paths)) - make -C $($(1).codebase) srpm SPECFILE=$(HOME)/$($(1).specpath) && \ + $(call handle_devel_rpms_pre,$(1)) + make -C $($(1).codebase) srpm SPECFILE=$(HOME)/$($(1).specpath) EXPECTED_SRPM=$(notdir $($(1).srpm)) && \ rm -f SRPMS/$(notdir $($(1).srpm)) && \ ln $($(1).codebase)/$(notdir $($(1).srpm)) SRPMS/$(notdir $($(1).srpm)) - $(if $($(1)-DEPEND-DEVEL-RPMS), $(RPM-UNINSTALL-DEVEL) $($(1)-DEPEND-DEVEL-RPMS)) + $(call handle_devel_rpms_post,$(1)) @(echo -n "XXXXXXXXXXXXXXX -- END SRPM $(1) " ; date) endif endef @@ -454,41 +528,51 @@ rpms: $(ALLRPMS) # use tmp dirs when building binary rpm so make remains idempotent # otherwise SOURCES/ or SPEC gets touched again - which leads to rebuilding RPM-USE-TMP-DIRS = --define "_sourcedir $(HOME)/tmp" --define "_specdir $(HOME)/tmp" +RPM-USE-COMPILE-DIRS = --define "_sourcedir $(HOME)/COMPILE" --define "_specdir $(HOME)/COMPILE" # usage: build_binary_rpm package # xxx hacky - invoke createrepo if DEPEND-FILES mentions RPMS/yumgroups.xml define target_binary_rpm $($(1).rpms): $($(1).srpm) - mkdir -p BUILD RPMS tmp + mkdir -p RPMS tmp @(echo -n "XXXXXXXXXXXXXXX -- BEG RPM $(1) " ; date) $(if $(findstring RPMS/yumgroups.xml,$($(1)-DEPEND-FILES)), $(createrepo) , ) - $(if $($(1).all-devel-rpm-paths), $(RPM-INSTALL-DEVEL) $($(1).all-devel-rpm-paths)) + $(call handle_devel_rpms_pre,$(1)) $($(1).rpmbuild) --rebuild $(RPM-USE-TMP-DIRS) $($(1).srpm) - $(if $($(1)-DEPEND-DEVEL-RPMS), $(RPM-UNINSTALL-DEVEL) $($(1)-DEPEND-DEVEL-RPMS)) + $(call handle_devel_rpms_post,$(1)) @(echo -n "XXXXXXXXXXXXXXX -- END RPM $(1) " ; date) +# for manual use only - in case we need to investigate the results of an rpmbuild +$(1)-compile: $($(1).srpm) + mkdir -p COMPILE tmp + @(echo -n "XXXXXXXXXXXXXXX -- BEG compile $(1) " ; date) + $(if $(findstring RPMS/yumgroups.xml,$($(1)-DEPEND-FILES)), $(createrepo) , ) + $(call handle_devel_rpms_pre,$(1)) + $($(1).rpmbuild) --recompile $(RPM-USE-TMP-DIRS) $($(1).srpm) + $(call handle_devel_rpms_post,$(1)) + @(echo -n "XXXXXXXXXXXXXXX -- END compile $(1) " ; date) +.PHONY: $(1)-compile 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).rpms) +$(1): $($(1).rpms) .PHONY: $(1) -$(1)-spec: $($(package)-SPEC) +$(1)-spec: $($(1)-SPEC) .PHONY: $(1)-spec -$(1)-mk: $($(package)-MK) +$(1)-mk: $($(1)-MK) .PHONY: $(1)-mk -$(1)-tarball: $($(package).tarballs) +$(1)-tarball: $($(1).tarballs) .PHONY: $(1)-tarball -$(1)-codebase: $($(package).codebase) +$(1)-codebase: $($(1).codebase) .PHONY: $(1)-source -$(1)-source: $($(package).source) +$(1)-source: $($(1).source) .PHONY: $(1)-codebase -$(1)-rpms: $($(package).rpms) +$(1)-rpms: $($(1).rpms) .PHONY: $(1)-rpms -$(1)-srpm: $($(package).srpm) +$(1)-srpm: $($(1).srpm) .PHONY: $(1)-srpm endef @@ -573,51 +657,109 @@ clean-help: ### brute force clean distclean1: - rm -rf pldistro.mk .rpmmacros spec2make SPECS MAKE + rm -rf savedpldistro.mk .rpmmacros spec2make header.spec SPECS MAKE $(DISTCLEANS) distclean2: - rm -rf CODEBASES SOURCES BUILD RPMS SRPMS tmp + rm -rf CODEBASES SOURCES BUILD BUILDROOT RPMS SRPMS tmp distclean: distclean1 distclean2 .PHONY: distclean1 distclean2 distclean develclean: - $(RPM-UNINSTALL-DEVEL) $(ALL-DEVEL-RPMS) + -$(RPM-UNINSTALL-DEVEL) $(ALL-DEVEL-RPMS) + +#################### +# gather build information for the 'About' page +# when run from crontab, INIT_CWD not properly set (says /root ..) +# so, the nightly build passes BASE here +# also store BASE in .base for any post-processing purposes +myplc-release: + @echo 'Creating myplc-release' + rm -f $@ + echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build info" >> $@ + $(MAKE) --no-print-directory version-build >> $@ + echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx svn info" >> $@ + $(MAKE) --no-print-directory version-svns >> $@ + echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rpm info" >> $@ + $(MAKE) --no-print-directory version-rpms >> $@ + @echo $(BASE) > .base + +version-build: + @echo -n 'Build build-date: ' ; date '+%Y.%m.%d' + @echo -n 'Build build-time: ' ; date '+%H:%M-%Z' + @echo -n 'Build build-hostname: ' ; hostname + @echo "Build build-base: $(BASE)" + @echo "Build planetlab-distro: $(PLDISTRO)" + @echo "Build planetlab-tags: $(PLDISTROTAGS)" + @echo -n 'Build planetlab-tagsid: ' ; fgrep '$$''Id' $(PLDISTROTAGS) + @echo "Build target-arch: $(HOSTARCH)" + @echo "Build target-distro: $(DISTRO)" + @echo "Build target-distroname: $(DISTRONAME)" + @echo "Build target-release: $(RELEASE)" + @echo "Build target-personality: $(PERSONALITY)" -#################### produce reliable version information +#################### # for a given module VFORMAT="%30s := %s\n" -define print_version -$(1)-version: +define svn_version_target +$(1)-version-svn: @$(if $($(1)-SVNPATH),\ printf $(VFORMAT) $(1)-SVNPATH "$($(1)-SVNPATH)",\ printf $(VFORMAT) $(1)-CVSROOT "$($(1)-CVSROOT)" ; printf $(VFORMAT) $(1)-TAG "$($(1)-TAG)") endef -# compute all modules -ALL-MODULES := -$(foreach package,$(ALL), $(eval ALL-MODULES+=$($(package)-MODULES))) -ALL-MODULES:=$(sort $(ALL-MODULES)) +$(foreach module,$(ALL-MODULES), $(eval $(call svn_version_target,$(module)))) -$(foreach module,$(ALL-MODULES), $(eval $(call print_version,$(module)))) +version-svns: $(foreach module, $(ALL-MODULES), $(module)-version-svn) -versions: $(foreach module, $(ALL-MODULES), $(module)-version) - -RFORMAT="%20s :: %s\n" -define print_rpms -$(1)-version-rpms: - @$(foreach rpm,$($(1).rpms),printf $(RFORMAT) $(1) $(notdir $(rpm));) -version-rpms: $(1)-version-rpms +RFORMAT="%20s :: version=%s release=%s\n" +define rpm_version_target +$(1)-version-rpm: + @printf $(RFORMAT) $($(1).rpm-name) $($(1).rpm-version) $($(1).rpm-release) +version-rpms: $(1)-version-rpm endef -$(foreach package,$(sort $(ALL)), $(eval $(call print_rpms,$(package)))) +$(foreach package,$(sort $(ALL)), $(eval $(call rpm_version_target,$(package)))) + +versions: myplc-release version-build version-svns version-rpms +.PHONY: versions version-build version-rpms version-svns + +#################### package info +PKGKEYS := tarballs source codebase srpm rpms rpmnames rpm-release rpm-name rpm-version rpm-subversion +%-pkginfo: package=$(subst -pkginfo,,$@) +%-pkginfo: + @$(foreach key,$(PKGKEYS),echo "$(package).$(key)=$($(package).$(key))";) +## rpm info +RPMKEYS := rpm-path package +%-rpminfo: rpm=$(subst -rpminfo,,$@) +%-rpminfo: + @$(foreach key,$(RPMKEYS),echo "$(rpm).$(key)=$($(rpm).$(key))";) + +#################### various lists - designed to run with stage1=true +packages: + @$(foreach package,$(ALL), echo package=$(package) ref_module=$($(package).module) modules=$($(package)-MODULES) rpmnames=$($(package).rpmnames); ) + +modules: + @$(foreach module,$(ALL-MODULES), echo module=$(module) svnpath=$($(module)-SVNPATH); ) + +branches: + @$(foreach module,$(ALL-MODULES), \ + $(if $($(module)-SVNBRANCH),echo module=$(module) branch=$($(module)-SVNBRANCH);)) + +module-tools: + @$(foreach module,$(ALL-MODULES), \ + $(if $($(module)-SVNPATH), \ + $(if $($(module)-SVNBRANCH), \ + echo $(module):$($(module)-SVNBRANCH); , \ + echo $(module); ))) + +info: packages modules branches + +.PHONY: info packages modules branches module-tools + +#################### +tests_svnpath: + @$(if $(tests-SVNPATH), echo $(tests-SVNPATH) > $@, \ + echo "http://svn.planet-lab.org/svn/tests/trunk" > $@) -#################### include install Makefile -# the default is to use the distro-dependent install file -# however the main distro file can redefine PLDISTROINSTALL -ifndef PLDISTROINSTALL -PLDISTROINSTALL := $(PLDISTRO)-install.mk -endif -# only if present --include $(PLDISTROINSTALL) #################### help: @@ -653,6 +795,11 @@ help: @echo 'make srpms' @echo 'make rpms' @echo "" + @echo "********** Manual targets" + @echo "make package-compile" + @echo " The regular process uses rpmbuild --rebuild, that performs" + @echo " a compilation directory cleanup upon completion. If you need to investigate" + @echo " the intermediate compilation directory, use the -compile targets" @echo "********** Cleaning examples" @echo "make clean" @echo " removes the files made by make" @@ -675,10 +822,15 @@ help: @echo "make ++ALL" @echo " Displays the value of a given variable (here ALL)" @echo " with only a single plus sign only the value is displayed" - @echo "make ulogd.pkginfo" + @echo "make info" + @echo " is equivalent to make packages modules branches" + @echo " provides various info on these objects" + @echo "make ulogd-pkginfo" @echo " Displays know attributes of a package" - @echo "make kernel-devel.rpminfo" + @echo "make kernel-devel-rpminfo" @echo " Displays know attributes of an rpm" + @echo "make stage1=true PLDISTROTAGS=planetlab-tags-4.2.mk packages modules branches module-tools" + @echo " Lists mentioned items - module-tools is used in modules.update" @echo "" @echo "********** Known pakages are" @echo "$(ALL)" @@ -692,13 +844,3 @@ help: +%: varname=$(subst +,,$@) +%: @echo "$($(varname))" -## package info -PKGKEYS := tarballs source codebase srpm rpms rpmnames rpm-release rpm-name rpm-version rpm-subversion -%.pkginfo: package=$(subst .pkginfo,,$@) -%.pkginfo: - @$(foreach key,$(PKGKEYS),echo "$(package).$(key)=$($(package).$(key))";) -## rpm info -RPMKEYS := rpm-path package -%.rpminfo: rpm=$(subst .rpminfo,,$@) -%.rpminfo: - @$(foreach key,$(RPMKEYS),echo "$(rpm).$(key)=$($(rpm).$(key))";)