+
+clean-help:
+ @echo Available clean targets
+ @echo $(CLEANS)
+
+### brute force clean
+distclean1:
+ rm -rf savedpldistro.mk .rpmmacros spec2make header.spec SPECS MAKE $(DISTCLEANS)
+distclean2:
+ rm -rf CODEBASES SOURCES BUILD BUILDROOT RPMS SRPMS tmp
+distclean: distclean1 distclean2
+.PHONY: distclean1 distclean2 distclean
+
+develclean:
+ -$(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)"
+
+####################
+# for a given module
+VFORMAT="%30s := %s\n"
+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
+
+$(foreach module,$(ALL-MODULES), $(eval $(call svn_version_target,$(module))))
+
+version-svns: $(foreach module, $(ALL-MODULES), $(module)-version-svn)
+
+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 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" > $@)
+
+
+####################
+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 " as well as save PLDISTRO for subsequent runs"
+ @echo ""
+ @echo "********** Then you can use the following targets"
+ @echo 'make'
+ @echo " rebuilds everything"
+ @echo 'make util-vserver'
+ @echo " makes the RPMS related to util-vserver"
+ @echo " equivalent to 'make util-vserver-rpms'"
+ @echo ""
+ @echo "********** Or, vertically - step-by-step for a given package"
+ @echo 'make util-vserver-codebase'
+ @echo " performs codebase extraction in CODEBASES/util-vserver"
+ @echo 'make util-vserver-source'
+ @echo " creates source link in SOURCES/util-vserver-<version>"
+ @echo 'make util-vserver-tarball'
+ @echo " creates source tarball in SOURCES/util-vserver-<version>.<tarextension>"
+ @echo 'make util-vserver-srpm'
+ @echo " build source rpm in SRPMS/"
+ @echo 'make util-vserver-rpms'
+ @echo " build rpm(s) in RPMS/"
+ @echo ""
+ @echo "********** Or, horizontally, reach a step for all known packages"
+ @echo 'make codebases'
+ @echo 'make sources'
+ @echo 'make tarballs'
+ @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"
+ @echo "make distclean"
+ @echo " brute-force cleaning, removes entire directories - requires a new stage1"
+ @echo "make develclean"
+ @echo " rpm-uninstalls all devel packages installed during build"
+ @echo ""
+ @echo "make iptables-distclean"
+ @echo " deep clean for a given package"
+ @echo "make iptables-codeclean"
+ @echo " run this if you've made a change in the CODEBASES area for iptables"
+ @echo ""
+ @echo "make util-vserver-clean"
+ @echo " removes codebase, source, tarball, build, rpm and srpm for util-vserver"
+ @echo "make util-vserver-clean-codebase"
+ @echo " and so on for source, tarball, build, rpm and srpm"
+ @echo ""
+ @echo "********** Info examples"
+ @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)"
+
+#################### convenience, for debugging only
+# make +foo : prints the value of $(foo)
+# make ++foo : idem but verbose, i.e. foo=$(foo)
+++%: varname=$(subst +,,$@)
+++%:
+ @echo "$(varname)=$($(varname))"
++%: varname=$(subst +,,$@)
++%:
+ @echo "$($(varname))"