X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Makefile;h=385a61b4158fb10b0626e1f238de820a2639dfcc;hb=1a936dbada7f69835ee253448bc0c78af1a88894;hp=a843b22f1103a5f5a8dea58a8f2c50065f9369c6;hpb=ba2675daef27f76604b31f2ced77d7fa83214f70;p=build.git diff --git a/Makefile b/Makefile index a843b22f..385a61b4 100644 --- a/Makefile +++ b/Makefile @@ -55,16 +55,14 @@ # (*) package-DEVEL-RPMS # a set of stock rpms that this package needs at build-time # this can also be set in config./devel.pkgs or config.planetlab/devel.pkgs as appropriate -# (*) package-EXCLUDE-DEVEL-RPMS -# a set of stock *rpms* that the build will rpm-uninstall before building -# this is intended to denote stock rpms, and the build will attempt to yum-install them -# back after the package is rebuilt -# This feature is not used at the moment and kept only just in case # (*) package-DEPEND-DEVEL-RPMS # a set of local *rpms* that the build will rpm-install before building # 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 DEVEL-RPMS or in devel.pkgs as described above +# (*) package-DEPEND-DEVEL-RPMS-UPDATES +# like package-DEPEND-DEVEL-RPMS but for crucial packages (like autoconf) that only need an update from our build +# rpms in this area will *not* be uninstalled after the target is made, because that would ruin the build vm for good # (*) 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 @@ -112,7 +110,7 @@ #################### # exported to spec files as plrelease -PLANETLAB_RELEASE = 5.0 +PLANETLAB_RELEASE = 5.2 # # Default values @@ -137,15 +135,15 @@ all: PLDISTRO := planetlab RPMBUILD := rpmbuild -########## savedpldistro.mk holds PLDISTRO - it is generated at stage1 (see below) +########## envfrompreviousrun.mk holds PLDISTRO and others - it is generated at stage1 (see below) ifeq "$(stage1)" "" -include savedpldistro.mk +include envfrompreviousrun.mk endif # when re-running the nightly build after failure, we need to gather the former values # do this by running make stage1=skip +PLDISTRO ifeq "$(stage1)" "skip" -include savedpldistro.mk +include envfrompreviousrun.mk endif #################### include onelab.mk @@ -163,14 +161,9 @@ 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 -# in case we run this manually, i.e. if neither build-SVNPATH nor build-GITPATH is set -ifeq "$(build-SVNPATH)$(build-GITPATH)" "" -build-GITPATH-local := $(shell git config remote.origin.url) -ifneq "$(build-GITPATH-local)" "" -build-GITPATH := $(build-GITPATH-local) -else -build-SVNPATH := $(lastword $(shell svn info 2> /dev/null | grep URL:)) -endif +# in case we run this manually, i.e. if build-GITPATH is not set +ifeq "$(build-GITPATH)" "" +build-GITPATH := $(shell git config remote.origin.url) endif #################### pldistros that are defined remotely @@ -182,7 +175,6 @@ config.$(1): config.$(1).svnpath svn export $$($(1).config.SVNPATH) config.$(1) endef -FOO=@ # fetching with git define remote_pldistro_fetch_git $(1).config.GITPATH := $(shell grep -v "^#" config.$(1).gitpath) @@ -215,6 +207,7 @@ $(eval $(call remote_pldistro_fetch_$(3),$(1))) endef $(eval $(call remote_pldistro,wextoolbox,wextoolbox-tags,git)) +$(eval $(call remote_pldistro,wexlxc,wexlxc-tags,git)) ########## stage1 and stage1iter # extract specs and compute .mk files by running @@ -295,6 +288,7 @@ $(1).module := $(firstword $($(1)-MODULES)) $(1).specpath := SPECS/$(notdir $($(1)-SPEC)) $(1).moduledir := MODULES/$$($(1).module) $(1).codespec := MODULES/$$($(1).module)/$($(1)-SPEC) +$(1).spec2makeflags := $(if $($(1)-WHITELIST-RPMS),--whitelist-rpms $($(1)-WHITELIST-RPMS),) endef $(foreach package, $(ALL), $(eval $(call stage1_package_vars,$(package)))) @@ -342,7 +336,7 @@ $(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 -n "# Generated by planetlab build on " ; date) > $@ echo "%define distro $(DISTRO)" >> $@ echo "%define distrorelease $(RELEASE)" >> $@ echo "%define distroname $(DISTRONAME)" >> $@ @@ -393,6 +387,10 @@ $(foreach module,$(ALL.modules),$(eval $(call target_extract_module,$(module)))) ### the tests area # use this makefile to extract tests rather than extracting manually in vbuild-nightly +build-clean: + rm -rf MODULES/build +.PHONY: build-clean + tests-clean: rm -rf MODULES/tests .PHONY: tests-clean @@ -422,43 +420,51 @@ endif ### this utility allows to extract various info from a spec file ### and to define them in makefiles +# use the C code where it works as it's the original one, use the python code otherwise spec2make: spec2make.c - $(CC) -g -Wall $< -o $@ -lrpm -lrpmbuild -lrpmio -lpopt + $(CC) -g -Wall $< -o $@ -lrpm -lrpmbuild -lrpmio -lpopt || ln -s spec2make.py $@ ### run spec2make on the spec file and include the result # usage: spec2make package +# with old rpms (f8&c5) and too recent specfiles (the kernel), we need a patch to spec2make +# so when MAKE/$(1).mk || { rm MAKE/$(1).mk; exit 1; } + ./spec2make $($(1).spec2makeflags) $($(1)-RPMFLAGS) $($(1).specpath) $(1) > MAKE/$(1).mk || { rm MAKE/$(1).mk; exit 1; } endef $(foreach package,$(ALL),$(eval $(call target_mk,$(package)))) -# stores PLDISTRO in a file +# stores env variables in a file # this is done at stage1. later run wont get confused -SAVED_VARS=PLDISTRO PLDISTROTAGS build-SVNPATH PERSONALITY MAILTO BASE WEBPATH TESTBUILDURL WEBROOT -savedpldistro.mk: +SAVED_VARS=PLDISTRO PLDISTROTAGS build-GITPATH PERSONALITY MAILTO BASE WEBPATH TESTBUILDURL WEBROOT +# also remember variable settings in alias, like sfa-GITPATH=git://git.f-lab.fr/sfa.git@generic +# but don't save stage1 +ASSIGNS=$(foreach chunk,$(MAKEFLAGS),$(if $(findstring =,$(chunk)),$(if $(findstring stage1,$(chunk)),,$(chunk)),)) +envfrompreviousrun.mk: @echo "# do not edit" > $@ @$(foreach var,$(SAVED_VARS),echo "$(var):=$($(var))" >> $@ ;) + @$(foreach chunk,$(ASSIGNS),echo "override $(chunk)" | sed -e s,=,:=, >> $@;) @echo "# do not edit" > aliases @echo -n "alias m=\"make " >> aliases @$(foreach var,$(SAVED_VARS),echo -n " $(var)=$($(var))" >> aliases ;) + @echo -n $(ASSIGNS) >> aliases @echo "\"" >> aliases @echo "alias m1=\"m stage1=true\"" >> aliases -savedpldistro: savedpldistro.mk -.PHONY: savedpldistro +envfrompreviousrun: envfrompreviousrun.mk +.PHONY: envfrompreviousrun # always refresh this -all: savedpldistro +all: envfrompreviousrun #################### regular make define stage2_variables ### devel dependencies $(1).rpmbuild = $(RPMBUILD) $($(1)-RPMFLAGS) -$(1).all-devel-rpm-paths := $(foreach rpm,$($(1)-DEPEND-DEVEL-RPMS),$($(rpm).rpm-path)) +$(1).all-devel-rpm-paths := $(foreach rpm,$($(1)-DEPEND-DEVEL-RPMS) $($(1)-DEPEND-DEVEL-RPMS-UPDATES),$($(rpm).rpm-path)) $(1).depend-devel-packages := $(sort $(foreach rpm,$($(1)-DEPEND-DEVEL-RPMS),$($(rpm).package))) ALL-DEVEL-RPMS += $($(1)-DEPEND-DEVEL-RPMS) endef @@ -530,16 +536,14 @@ define handle_stock_devel_rpms_pre $(if $($(1)-DEVEL-RPMS), echo "Installing for $(1)-DEVEL-RPMS" ; $(YUM-INSTALL-DEVEL) $($(1)-DEVEL-RPMS)) endef -### 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 +### these macro handles the DEPEND-DEVEL-RPMS and DEPEND-DEVEL-RPMS-UPDATES tags for a given package +# before building : rpm-install DEPEND-DEVEL-RPMS define handle_local_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_local_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 @@ -654,6 +658,22 @@ endef $(foreach package,$(ALL),$(eval $(call target_depends,$(package)))) +#################### +# very rough for now (one module per package), targets only sfa for now +# the general idea here is, changing the specfile (for version number and all) is enough, and this +# gets passed to "make debian" in the module +# PREFIX: at one point we had passed PREFIX=/usr to this 'make debian' +# however it turned out we could manage this some other way (see manifold) +# so I'm reverting to simplicity +define target_debian +$(1)-debian: $(1)-tarball + mkdir -p DEBIAN/$(1) + rsync -a MODULES/$(1)/ DEBIAN/$(1)/ + make -C DEBIAN/$(1) "RPMTARBALL=$(HOME)/$($(1).tarballs)" "RPMVERSION=$($(1).rpm-version)" "RPMRELEASE=$($(1).rpm-release)" "RPMNAME=$($(1).rpm-name)" debian +endef + +$(foreach package,$(ALL),$(eval $(call target_debian,$(package)))) + ### clean target # usage: target_clean package define target_clean @@ -680,7 +700,11 @@ $(1)-clean-srpm: rm -rf $($(1).srpm) .PHONY: $(1)-clean-srpm CLEANS += $(1)-clean-srpm -$(1)-codeclean: $(1)-clean-source $(1)-clean-tarball $(1)-clean-build $(1)-clean-rpms $(1)-clean-srpm +$(1)-clean-debian: + rm -rf DEBIAN/$(1) +.PHONY: $(1)-clean-srpm +CLEANS += $(1)-clean-srpm +$(1)-codeclean: $(1)-clean-source $(1)-clean-tarball $(1)-clean-build $(1)-clean-rpms $(1)-clean-srpm $(1)-clean-debian $(1)-clean: $(1)-clean-modules $(1)-codeclean .PHONY: $(1)-codeclean $(1)-clean $(1)-clean-spec: @@ -708,7 +732,7 @@ clean-help: ### brute force clean distclean1: - rm -rf savedpldistro.mk .rpmmacros spec2make header.spec SPECS MAKE $(DISTCLEANS) + rm -rf envfrompreviousrun.mk .rpmmacros spec2make header.spec SPECS MAKE $(DISTCLEANS) distclean2: rm -rf MODULES SOURCES BUILD BUILDROOT RPMS SRPMS tmp distclean: distclean1 distclean2