X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=Makefile;h=1c601a9480fc430505aaaa9684cc1ce259464103;hb=c2cf3c8ffae823d4c2fca6f4b242f6b61eed910f;hp=c2d237b1cd78cc0672bd0c71e809c8a86436b259;hpb=9c7264eccc43683a0dc53f1882069b95f9007cb6;p=build.git diff --git a/Makefile b/Makefile index c2d237b1..1c601a94 100644 --- a/Makefile +++ b/Makefile @@ -330,6 +330,15 @@ $(foreach package, $(ALL), $(eval $(call package_hasdate,$(package)))) ### the common header for generated specfiles # useful when trying new specfiles manually +### +# note for fedora23 (and onwards, probably) +# many rpms wouldn't build as-is and issue an weird error +## +# Processing files: pl_sshd-debuginfo-1.0-11.lxc.x86_64 +# error: Empty %files file /longbuildroot/BUILD/pl_sshd-1.0/debugfiles.list +## +# so to work around that we define debug_package as being nil +# only for f23 for now, let's see what this gives us.. header.spec: (echo -n "# Generated by planetlab build on " ; date) > $@ echo "%define distro $(DISTRO)" >> $@ @@ -342,6 +351,9 @@ header.spec: echo "%global _source_filedigest_algorithm 1" >> $@ echo "%global _source_payload w9.gzdio" >> $@ echo "%global _binary_payload w9.gzdio" >> $@ +ifeq "$(DISTRONAME)""$(filter $(DISTRONAME),f25 f27)" + echo "%define debug_package %{nil}" >> $@ +endif ### make up spec file - extract module first define target_spec @@ -426,6 +438,10 @@ export HOME := $(FAKEROOT) else export HOME := $(PWD) endif + +# rpm macros +# build.common (getrpmmacros.sh) defines some utilities we want in place on our images +# in addition to these we set a few others for the build .rpmmacros: ifeq "$(shell pwd)" "/build" rm -f $(FAKEROOT) ; ln -s $(REALROOT) $(FAKEROOT) @@ -439,8 +455,8 @@ 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.py - ln -s spec2make.py $@ +spec2make: spec2make.c + $(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 @@ -455,19 +471,20 @@ endef $(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 @@ -482,7 +499,7 @@ all: envfrompreviousrun 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 @@ -559,28 +576,34 @@ RPMYUM-UNINSTALL-STOCK := rpm -e ### 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 define rpmyum_install_stock_rpms - $(if $($(1)-STOCK-DEVEL-RPMS), echo "Installing for $(1)-STOCK-DEVEL-RPMS" ; $(RPMYUM-INSTALL-STOCK) $($(1)-STOCK-DEVEL-RPMS)) + $(if $($(1)-STOCK-DEVEL-RPMS), echo "Installing for $(1)-STOCK-DEVEL-RPMS" ; $(RPMYUM-INSTALL-STOCK) $($(1)-STOCK-DEVEL-RPMS) || true) 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) || true) endef -# similar for debian +# 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)) + $(if $($(1)-STOCK-DEVEL-DEBS), echo "Installing for $(1)-STOCK-DEVEL-DEBS" ; $(DPKGAPT-INSTALL-STOCK) $($(1)-STOCK-DEVEL-DEBS) || true) endef define dpkgapt_uninstall_stock_debs - -$(if $($(1)-LOCAL-DEVEL-DEBS), echo "Unstalling for $(1)-LOCAL-DEVEL-DEBS" ; $(DPKGAPT-UNINSTALL-STOCK) $($(1)-LOCAL-DEVEL-DEBS)) + -$(if $($(1)-STOCK-DEVEL-DEBS), echo "Unstalling for $(1)-STOCK-DEVEL-DEBS" ; $(DPKGAPT-UNINSTALL-STOCK) $($(1)-STOCK-DEVEL-DEBS) || true) endef @@ -697,6 +720,11 @@ endef $(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 @@ -706,9 +734,10 @@ $(foreach package,$(ALL),$(eval $(call target_depends,$(package)))) # 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)/ + rsync -a MODULES/$($(1).module)/ 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 @@ -775,7 +804,7 @@ clean-help: 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