X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Makefile;h=b6a805109973f903c23715cfdd039bff63dcf91b;hb=a0c58b9ef5d187e9ac912da6b885d118b870a319;hp=bc72f69f083531910f66dd943580d7372b1781a6;hpb=4697ca0ae6b45097dee00a452104ad2e7762413e;p=build.git diff --git a/Makefile b/Makefile index bc72f69f..b6a80510 100644 --- a/Makefile +++ b/Makefile @@ -64,6 +64,9 @@ # (*) 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) @@ -84,7 +87,7 @@ # (*) $ 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 +# to see the list of variables attached to a given rpm # #################### @@ -94,7 +97,8 @@ PLANETLAB_RELEASE = 4.2 # # 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) @@ -208,41 +212,47 @@ define stage1_variables $(1).spec = $(notdir $($(1)-SPEC)) $(1).specpath = SPECS/$(1).spec $(1).module = $(firstword $($(1)-MODULES)) +$(1)-SVNPATH = $(strip $($(1)-SVNPATH)) endef $(foreach package, $(ALL), $(eval $(call stage1_variables,$(package)))) # -# 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).module)-SVNPATH),\ - $(if $(findstring /trunk,$($($(1).module)-SVNPATH)),yes,),\ - $(if $(findstring HEAD,$($($(1).module)-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 distrovsname $(DISTRONAME)" >> $($(1).specpath) - echo "%define pldistro $(PLDISTRO)" >> $($(1).specpath) - echo "%define plrelease $(PLANETLAB_RELEASE)" >> $($(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),\ cvs -d $($($(1).module)-CVSROOT) checkout \ @@ -557,7 +567,7 @@ clean-help: ### brute force clean distclean1: - rm -rf pldistro.mk .rpmmacros spec2make SPECS MAKE + rm -rf pldistro.mk .rpmmacros spec2make header.spec SPECS MAKE distclean2: rm -rf CODEBASES SOURCES BUILD RPMS SRPMS tmp distclean: distclean1 distclean2 @@ -587,11 +597,12 @@ version-build: @echo -n 'Build build-time: ' ; date '+%H:%M-%Z' @echo -n 'Build build-hostname: ' ; hostname @echo "Build build-base: $(NIGHTLY_BASE)" - @echo "Build planetab-distro: $(PLDISTRO)" + @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: $(NIGHTLY_PERSONALITY)" @@ -635,6 +646,39 @@ endif # only if present -include $(PLDISTROINSTALL) +#################### 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 + #################### help: @echo "********** Run make in two stages:" @@ -696,10 +740,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 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 " 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)" @@ -713,13 +762,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))";)