$(foreach package,$(ALL),$(eval $(call target_spec,$(package))))
+####################
+# fetch modules
+# expected input:
+# $(1) is the name of a git module
+# $($(1).gitrepo) and $(($1).gittag) are used to determine branch or tag name
+# expected result
+# $(1)/ in the cwd will hold the result
+
+# fetch svn module
+define fetch_svn_module
+ svn export $($(1)-SVNPATH) $(1)
+endef
+
+# git_fetch_module
+# as far as possible we use git-archive to fetch a git module
+# however if that fails we fallback to a git-clone strategy,
+# for when git-archive is not supported, e.g. for github
+# side effect
+# $(1)/ gets cleaned up if job cannot be done
+define fetch_git_module
+ mkdir $(1) ; \
+ (git archive --remote=$($(1).gitrepo) $($(1).gittag) | tar -C $(1) -xf - ) || \
+ (echo "==================== git archive FAILED, trying git clone instead" ; \
+ git clone $($(1).gitrepo) $(1); cd $(1) ; git checkout $($(1).gittag) ; rm -rf .git ) || \
+ { rm -rf $(1); false; }
+endef
+
### module extraction
define target_extract_module
MODULES/$(1):
@(echo -n "XXXXXXXXXXXXXXX -- BEG MODULE $(1) : $@ " ; date)
mkdir -p MODULES
cd MODULES && \
- $(if $($(1)-SVNPATH),\
- svn export $($(1)-SVNPATH) $(1),\
- mkdir $(1) ; (git archive --remote=$($(1).gitrepo) $($(1).gittag) | tar -C $(1) -xf - ) \
- || { rm -rf $(1); false; } )
+ $(if $($(1)-SVNPATH),$(call fetch_svn_module,$(1)),$(call fetch_git_module,$(1)) )
@(echo -n "XXXXXXXXXXXXXXX -- END MODULE $(1) : $@ " ; date)
$(1)-module: MODULES/$(1)
$(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
$(foreach package,$(ALL),$(eval $(call target_mk,$(package))))
# stores env variables in a file
-# this is done at stage1. later run wont get confused
-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)),))
+# this is done at stage1. later run won't get confused
+STATIC_VARS=PLDISTRO PLDISTROTAGS build-GITPATH PERSONALITY MAILTO BASE WEBPATH TESTBUILDURL WEBROOT
+# find out names for variables set on the command line
+define assigned_varname
+$(if $(findstring =,$(1)),$(firstword $(subst =, ,$(1))) )
+endef
+ASSIGNED=$(filter-out stage1 stage1iter,$(foreach flag,$(MAKEFLAGS),$(call assigned_varname,$(flag))))
+SAVED_VARS=$(sort $(STATIC_VARS) $(ASSIGNED))
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
define stage2_variables
### devel dependencies
$(1).rpmbuild = $(RPMBUILD) $($(1)-RPMFLAGS)
-$(1).all-devel-rpm-paths := $(foreach rpm,$($(1)-LOCAL-DEVEL-RPMS) $($(1)-LOCAL-DEVEL-RPMS-CRUCIAL),$($(rpm).rpm-path))
+$(1).all-local-devel-rpm-paths := $(foreach rpm,$($(1)-LOCAL-DEVEL-RPMS) $($(1)-LOCAL-DEVEL-RPMS-CRUCIAL),$($(rpm).rpm-path))
$(1).depend-devel-packages := $(sort $(foreach rpm,$($(1)-LOCAL-DEVEL-RPMS),$($(rpm).package)))
ALL-STOCK-DEVEL-RPMS += $($(1)-LOCAL-DEVEL-RPMS)
endef
#################### manage build requirements
# default values
RPMYUM-INSTALL-LOCAL := rpm --force -Uvh
+RPMYUM-INSTALL-STOCK := yum -y install
# uninstall -- cannot force rpm -e
# need to ignore result, kernel-headers cannot be uninstalled as glibc depends on it
RPMYUM-UNINSTALL-STOCK := rpm -e
-RPMYUM-INSTALL-STOCK := yum -y install
### these macro handles the LOCAL-DEVEL-RPMS and LOCAL-DEVEL-RPMS-CRUCIAL tags for a given package
# before building : rpm-install LOCAL-DEVEL-RPMS
define rpmyum_install_local_rpms
- $(if $($(1).all-devel-rpm-paths), echo "Installing for $(1)-LOCAL-DEVEL-RPMS" ; $(RPMYUM-INSTALL-LOCAL) $($(1).all-devel-rpm-paths))
+ $(if $($(1).all-local-devel-rpm-paths), echo "Installing for $(1)-LOCAL-DEVEL-RPMS" ; $(RPMYUM-INSTALL-LOCAL) $($(1).all-local-devel-rpm-paths))
endef
# install stock rpms if defined
endef
define rpmyum_uninstall_stock_rpms
- -$(if $($(1)-LOCAL-DEVEL-RPMS), echo "Unstalling for $(1)-LOCAL-DEVEL-RPMS" ; $(RPMYUM-UNINSTALL-STOCK) $($(1)-LOCAL-DEVEL-RPMS))
+ -$(if $($(1)-STOCK-DEVEL-RPMS), echo "Unstalling for $(1)-STOCK-DEVEL-RPMS" ; $(RPMYUM-UNINSTALL-STOCK) $($(1)-STOCK-DEVEL-RPMS))
+endef
+
+# similar for debians
+# gdebi acts like yum localinstall; gdebi-core should be mentioned in develdeb.pkgs
+DPKGAPT-INSTALL-LOCAL := gdebi
+DPKGAPT-INSTALL-STOCK := apt-get -y install
+DPKGAPT-UNINSTALL-STOCK := echo WARNING uninstalling stock debs not implemented
+
+define dpkgapt_install_local_debs
+ $(if $($(1)-LOCAL-DEVEL-DEBS), echo "Installing for $(1)-LOCAL-DEVEL-DEBS" ; $(foreach debname,$($(1)-LOCAL-DEVEL-DEBS),$(DPKGAPT-INSTALL-LOCAL) $(wildcard DEBIAN/$(debname)_*.deb);))
endef
+define dpkgapt_install_stock_debs
+ $(if $($(1)-STOCK-DEVEL-DEBS), echo "Installing for $(1)-STOCK-DEVEL-DEBS" ; $(DPKGAPT-INSTALL-STOCK) $($(1)-STOCK-DEVEL-DEBS))
+endef
+
+define dpkgapt_uninstall_stock_debs
+ -$(if $($(1)-STOCK-DEVEL-DEBS), echo "Unstalling for $(1)-STOCK-DEVEL-DEBS" ; $(DPKGAPT-UNINSTALL-STOCK) $($(1)-STOCK-DEVEL-DEBS))
+endef
+
+
####################
# usage: target_source_rpm package
define target_source_rpm
$(foreach package,$(ALL),$(eval $(call target_depends,$(package))))
+####################
+# debian meta-target
+ALL-DEBIAN := $(foreach target,$(ALL),$(target)-debian)
+debian: $(ALL-DEBIAN)
+
####################
# 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
# so I'm reverting to simplicity
define target_debian
$(1)-debian: $(1)-tarball
+ $(call dpkgapt_install_local_debs,$(1))
+ $(call dpkgapt_install_stock_debs,$(1))
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
+ $(call dpkgapt_uninstall_stock_debs,$(1))
endef
$(foreach package,$(ALL),$(eval $(call target_debian,$(package))))
distclean1:
rm -rf envfrompreviousrun.mk .rpmmacros spec2make header.spec SPECS MAKE $(DISTCLEANS)
distclean2:
- rm -rf MODULES SOURCES BUILD BUILDROOT RPMS SRPMS tmp
+ rm -rf MODULES SOURCES BUILD BUILDROOT RPMS SRPMS DEBIAN tmp
distclean: distclean1 distclean2
.PHONY: distclean1 distclean2 distclean