mark 4.2 to follow the 4.2 branch of MyPLC
[build.git] / Makefile
index f506605..b6a8051 100644 (file)
--- 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,9 +97,11 @@ 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)
 RPM-INSTALL-DEVEL := rpm --force -Uvh
 # cannot force rpm -e
 RPM-UNINSTALL-DEVEL := rpm -e
@@ -207,40 +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)-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)
-       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 \
@@ -555,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
@@ -582,14 +594,15 @@ myplc-release:
 
 version-build:
        @echo -n 'Build build-date: ' ; date '+%Y.%m.%d'
-       @echo -n 'Build build-time: ' ; date '+%H:%M'
+       @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)"     
 
@@ -633,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:"
@@ -694,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)"
@@ -711,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))";)