# 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 <package>
+# 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
# (*) 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)
# (*) $ 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
#
####################
#
# 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)
PLDISTROTAGS := $(PLDISTRO)-tags.mk
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)
+
########## stage1 and stage1iter
# extract specs and compute .mk files by running
# make stage1=true
$(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 \
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))))
pldistro.mk:
echo "PLDISTRO:=$(PLDISTRO)" > $@
echo "PLDISTROTAGS:=$(PLDISTROTAGS)" >> $@
+ echo "build-SVNPATH:=$(build-SVNPATH)" >> $@
+ echo "PERSONALITY:=$(PERSONALITY)" >> $@
+ echo "MAILTO:=$(MAILTO)" >> $@
+ echo "BASE:=$(BASE)" >> $@
savepldistro: pldistro.mk
.PHONY: savepldistro
### 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
####################
# gather build information for the 'About' page
# when run from crontab, INIT_CWD not properly set (says /root ..)
-# so, the nightly build passes NIGHTLY_BASE here
-# also store the nightly_base in .base for any post-processing purposes
+# 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 $@
$(MAKE) --no-print-directory version-svns >> $@
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rpm info" >> $@
$(MAKE) --no-print-directory version-rpms >> $@
- @echo $(NIGHTLY_BASE) > .base
+ @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: $(NIGHTLY_BASE)"
- @echo "Build planetab-distro: $(PLDISTRO)"
+ @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: $(NIGHTLY_PERSONALITY)"
+ @echo "Build target-personality: $(PERSONALITY)"
####################
# for a given module
versions: myplc-release version-build version-svns version-rpms
.PHONY: versions version-build version-rpms version-svns
-#################### 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)
+#################### 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" > $@)
####################
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)"
+%: 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))";)