X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Makefile;h=788205cd7543baf5fa507884a0e3dc18435b6f6e;hb=f8e3eb11df685336f4b1b1e1f23f1cb6b1186b71;hp=17473fd1dc11ce80d7a0b1f6067997741c573ab6;hpb=338106480fd7a529f93cc2f973840258c6d8f29f;p=build.git diff --git a/Makefile b/Makefile index 17473fd1..788205cd 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,6 @@ # # Thierry Parmentelat - INRIA Sophia Antipolis # -### $Id$ -### $URL$ -# #################### # invocation: # @@ -116,9 +113,6 @@ RPM-INSTALL-DEVEL := rpm --force -Uvh RPM-UNINSTALL-DEVEL := rpm -e YUM-INSTALL-DEVEL := yum -y install -# see also below -REMOTE-PLDISTROS="wextoolbox" - #################### Makefile # Default target all: @@ -154,41 +148,58 @@ 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 +# 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 endif -# use default if necessary -build-SVNPATH ?= $(default-build-SVNPATH) -#################### +#################### pldistros that are defined remotely +# fetching with svn +define remote_pldistro_fetch_svn +$(1).config.SVNPATH := $(shell grep -v "^#" config.$(1).svnpath) +config.$(1): config.$(1).svnpath + @echo "Fetching (svn) details for remote pldistro $(1)" + 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) +$(1).config.gitrepo := $$(firstword $$(subst @, ,$$($(1).config.GITPATH))) +$(1).config.gittag := $$(word 2,$$(subst @, ,$$($(1).config.GITPATH))) +$(1).config.gittag := $$(if $$($(1).config.gittag),$$($(1).config.gittag),master) +config.$(1): GITPATH=$(shell grep -v "^#" config.$(1).gitpath) +config.$(1): config.$(1).gitpath + @echo "Fetching (git) details for remote pldistro $(1)" + mkdir -p config.$(1) + git $(GITTAG) archive --remote=$$($(1).config.gitrepo) $$($(1).config.gittag) | tar -C config.$(1) -xf - +endef + + +# put it together define remote_pldistro $(1).mk: config.$(1)/$(1).mk - @echo 'creating $(1) from config subdir' + @echo 'creating $(1) from config.$(1)' cp config.$(1)/$(1).mk $(1).mk $(2).mk: config.$(1)/$(2).mk - @echo 'creating $(1) tags from config subdir' + @echo 'creating $(2) tags from config.$(1)' cp config.$(1)/$(2).mk $(2).mk config.$(1)/$(1).mk: config.$(1) config.$(1)/$(2).mk: config.$(1) -config.$(1): config.$(1).svnpath - @echo "Fetching details for pldistro $(1)" - svn export $(shell grep -v "^#" config.$(1).svnpath) config.$(1) - DISTCLEANS += $(1).mk $(2).mk config.$(1) - +$(eval $(call remote_pldistro_fetch_$(3),$(1))) endef -# 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)) +$(eval $(call remote_pldistro,wextoolbox,wextoolbox-tags,git)) ########## stage1 and stage1iter # extract specs and compute .mk files by running @@ -267,14 +278,14 @@ repo: RPMS/yumgroups.xml define stage1_package_vars $(1).module := $(firstword $($(1)-MODULES)) $(1).specpath := SPECS/$(notdir $($(1)-SPEC)) -$(1).moduledir := MODULES/$(firstword $($(1)-MODULES)) -$(1).codespec := MODULES/$(firstword $($(1)-MODULES))/$($(1)-SPEC) +$(1).moduledir := MODULES/$$($(1).module) +$(1).codespec := MODULES/$$($(1).module)/$($(1)-SPEC) endef $(foreach package, $(ALL), $(eval $(call stage1_package_vars,$(package)))) # compute all modules -ALL.modules := +ALL.modules := build tests $(foreach package,$(ALL), $(eval ALL.modules+=$($(package)-MODULES))) ALL.modules:=$(sort $(ALL.modules)) @@ -282,10 +293,13 @@ ALL.modules:=$(sort $(ALL.modules)) define stage1_module_vars ifneq "$($(1)-SVNPATH)" "" $(1)-SVNPATH := $(strip $($(1)-SVNPATH)) +$(1)-SCMPATH := $(strip $($(1)-SVNPATH)) else -$(1)-GITPATH := $(strip $($(1)-GITPATH)) -$(1).gitrepo := $(firstword $(subst @, ,$($(1)-GITPATH))) -$(1).gittag := $(word 2,$(subst @, ,$($(1)-GITPATH))) +$(1)-GITPATH := $$(strip $$($(1)-GITPATH)) +$(1)-SCMPATH := $$(strip $$($(1)-GITPATH)) +$(1).gitrepo := $$(firstword $$(subst @, ,$$($(1)-GITPATH))) +$(1).gittag := $$(word 2,$$(subst @, ,$$($(1)-GITPATH))) +$(1).gittag := $$(if $$($(1).gittag),$$($(1).gittag),master) endif endef @@ -330,6 +344,7 @@ define target_spec $($(1).specpath): header.spec $($(1).codespec) mkdir -p SPECS cat header.spec > $($(1).specpath) + echo "%define SCMURL $($($(1).module)-SCMPATH)" >> $($(1).specpath) $(if $($(1).has-date),echo "%define date $(shell date +%Y.%m.%d)" >> $($(1).specpath),) $(if $($(1)-SPECVARS), \ $(foreach line,$($(1)-SPECVARS), \ @@ -346,15 +361,14 @@ $(foreach package,$(ALL),$(eval $(call target_spec,$(package)))) ### module extraction define target_extract_module MODULES/$(1): - @(echo -n "XXXXXXXXXXXXXXX -- BEG MODULE $(module) : $@ " ; date) + @(echo -n "XXXXXXXXXXXXXXX -- BEG MODULE $(1) : $@ " ; date) mkdir -p MODULES cd MODULES && \ $(if $($(1)-SVNPATH),\ svn export $($(1)-SVNPATH) $(1),\ - git clone $($(1).gitrepo) $(1); \ - $(if $($(1).gittag), cd $(1); git checkout "$($(1).gittag)"; cd -; ,) \ - rm -rf $(1)/.git ) - @(echo -n "XXXXXXXXXXXXXXX -- END MODULE $(module) : $@ " ; date) + mkdir $(1) ; (git archive --remote=$($(1).gitrepo) $($(1).gittag) | tar -C $(1) -xf - ) \ + || { rm -rf $(1); false; } ) + @(echo -n "XXXXXXXXXXXXXXX -- END MODULE $(1) : $@ " ; date) $(1)-module: MODULES/$(1) .PHONY: $(1)-module @@ -362,6 +376,11 @@ endef $(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 +tests-clean: + rm -rf MODULES/tests +.PHONY: tests-clean ### # Base rpmbuild in the current directory @@ -389,7 +408,7 @@ endif ### this utility allows to extract various info from a spec file ### and to define them in makefiles spec2make: spec2make.c - $(CC) -g -Wall $< -o $@ -lrpm -lrpmbuild + $(CC) -g -Wall $< -o $@ -lrpm -lrpmbuild -lrpmio -lpopt ### run spec2make on the spec file and include the result # usage: spec2make package @@ -684,7 +703,7 @@ myplc-release: echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build info" >> $@ $(MAKE) --no-print-directory version-build >> $@ echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx svn info" >> $@ - $(MAKE) --no-print-directory version-svns >> $@ + $(MAKE) --no-print-directory version-tags >> $@ echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx rpm info" >> $@ $(MAKE) --no-print-directory version-rpms >> $@ @echo $(BASE) > .base @@ -696,7 +715,6 @@ version-build: @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)" @@ -754,10 +772,10 @@ info-branches: module-tools: @$(foreach module,$(ALL.modules), \ - $(if $($(module)-GITPATH), \ + $(if $($(module)-GITPATH), \ $(if $($(module)-BRANCH), \ - echo git:$(module):$($(module)-BRANCH); , \ - echo git:$(module); ), \ + echo $(module):$($(module)-BRANCH); , \ + echo $(module); ), \ $(if $($(module)-BRANCH), \ echo $(module):$($(module)-BRANCH); , \ echo $(module); ))) @@ -766,12 +784,9 @@ info: info-packages info-modules info-branches .PHONY: info info-packages info-modules info-branches module-tools -#################### -tests_gitpath: - @$(if $(tests-GITPATH), echo $(tests-GITPATH) > $@, \ - echo "http://git.onelab.eu/tests.git" > $@) - - +show-multi-modules: + @$(foreach package,$(ALL),$(if $(subst x1,,x$(words $($(package)-MODULES))), echo p=$(package) mods=$($(package)-MODULES) ;)) +.PHONY: show-multi-modules #################### help: @echo "********** Run make in two stages:"