distclean to wipe BUILDROOT
[build.git] / Makefile
index a9fa618..cea39aa 100644 (file)
--- a/Makefile
+++ b/Makefile
 #     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>
+#     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 <package>
+#     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 
@@ -108,8 +113,10 @@ RPM-INSTALL-DEVEL := rpm --force -Uvh
 # 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
 
-REMOTE-PLDISTROS="gnuradio"
+# see also below
+REMOTE-PLDISTROS="wextoolbox"
 
 #################### Makefile
 # Default target
@@ -177,7 +184,9 @@ DISTCLEANS += $(1).mk $(2).mk config.$(1)
 
 endef
 
-$(eval $(call remote_pldistro,gnuradio,gnuradio-tags))
+# 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 
@@ -256,14 +265,27 @@ repo: RPMS/yumgroups.xml
 # $(package)-SPEC - otherwise the cvs modules have to define spec as 
 # <module>/<module>.spec while svn modules just define it as <module>.spec
 #
-define stage1_variables
-$(1).spec = $(notdir $($(1)-SPEC))
-$(1).specpath = SPECS/$(1).spec
-$(1).module = $(firstword $($(1)-MODULES))
-$(1)-SVNPATH = $(strip $($(1)-SVNPATH))
+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 
@@ -302,7 +324,7 @@ $($(1).specpath): header.spec
            echo "%define" $(word 1,$(subst =, ,$(line))) "$(word 2,$(subst =, ,$(line)))" >> $($(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))
@@ -330,6 +352,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
@@ -356,6 +379,9 @@ savedpldistro.mk:
        echo "PERSONALITY:=$(PERSONALITY)" >> $@
        echo "MAILTO:=$(MAILTO)" >> $@
        echo "BASE:=$(BASE)" >> $@
+       echo "WEBPATH:=$(WEBPATH)" >> $@
+       echo "TESTBUILDURL:=$(TESTBUILDURL)" >> $@
+       echo "WEBROOT:=$(WEBROOT)" >> $@
 
 savedpldistro: savedpldistro.mk
 .PHONY: savedpldistro
@@ -453,25 +479,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
 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
@@ -497,18 +535,18 @@ $($(1).rpms): $($(1).srpm)
        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) , )
-       $(if $($(1).all-devel-rpm-paths), $(RPM-INSTALL-DEVEL) $($(1).all-devel-rpm-paths))
+       $(call handle_devel_rpms_pre,$(1))
        $($(1).rpmbuild) --recompile $(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 compile $(1) " ; date)
 .PHONY: $(1)-compile
 endef
@@ -619,7 +657,7 @@ clean-help:
 distclean1:
        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
 
@@ -666,11 +704,6 @@ $(1)-version-svn:
           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))))
 
 version-svns: $(foreach module, $(ALL-MODULES), $(module)-version-svn)
@@ -722,7 +755,7 @@ info: packages modules branches
 
 ####################
 tests_svnpath:
-       @$(if $(TESTS_SVNPATH), echo $(TESTS_SVNPATH) > $@, \
+       @$(if $(tests-SVNPATH), echo $(tests-SVNPATH) > $@, \
        echo "http://svn.planet-lab.org/svn/tests/trunk" > $@)