# mention $(ALL) here rather than rpms
# this is because the inter-package dependencies are expressed like
# util-vserver: util-python
-all: $(ALL)
-all: srpms
+all: rpms
endif
endif
#
define stage1_variables
$(1)_spec = $(notdir $($(1)-SPEC))
-$(1)_specpath = SPECS/$(notdir $($(1)-SPEC))
+$(1)_specpath = CODESPECS/$(notdir $($(1)-SPEC))
$(1)_module = $(firstword $($(1)-MODULES))
endef
# cannot use variables in such rules, we need to inline everything, sigh
define target_spec
$($(1)_specpath):
- mkdir -p SPECS
+ mkdir -p CODESPECS
(echo -n "# Generated by planetlab build from $($(1)-SPEC) on " ; date) > $($(1)_specpath)
echo "%define distroname $(DISTRO)" >> $($(1)_specpath)
echo "%define distrorelease $(RELEASE)" >> $($(1)_specpath)
# Base rpmbuild in the current directory
export HOME := $(shell pwd)
.rpmmacros:
- echo "%_topdir $(HOME)" > $@
+ rm -f $@
+ echo "%_topdir $(HOME)" >> $@
echo "%_tmppath $(HOME)/tmp" >> $@
### run spec2make on the spec file and include the result
$(call extract_single_module,$(package)))
@(echo -n "XXXXXXXXXXXXXXX -- END CODEBASE $(package) : $@ " ; date)
-### rpmbuild invokation
-ALLRPMS:=$(foreach package,$(ALL),$($(package)-RPM))
-# same as above, mention $(ALL) and not $(ALLRPMS)
-rpms: $(ALL)
- @echo $(words $(ALLRPMS)) binary rpms OK
-.PHONY: rpms
-
-# usage: build_binary_rpm package
-# xxx hacky - invoke createrepo if DEPENDFILES mentions RPMS/yumgroups.xml
-define target_binary_rpm
-$($(1)-RPM): $($(1)_specpath) $($(1)-TARBALL) .rpmmacros
- mkdir -p BUILD RPMS tmp
- @(echo -n "XXXXXXXXXXXXXXX -- BEG RPM $(1) " ; date)
- $(if $(findstring RPMS/yumgroups.xml,$($(1)-DEPENDFILES)), createrepo --quiet -g yumgroups.xml RPMS/ , )
- $(if $($(1)-RPMBUILD),\
- $($(1)-RPMBUILD) $($(1)-RPMFLAGS) -bb $($(1)_specpath), \
- $(RPMBUILD) $($(1)-RPMFLAGS) -bb $($(1)_specpath))
- @(echo -n "XXXXXXXXXXXXXXX -- END RPM $(1) " ; date)
-endef
-
-$(foreach package,$(ALL),$(eval $(call target_binary_rpm,$(package))))
-
### source rpms
ALLSRPMS:=$(foreach package,$(ALL),$($(package)-SRPM))
srpms: $(ALLSRPMS)
@echo $(words $(ALLSRPMS)) source rpms OK
.PHONY: srpms
-# usage: build_source_rpm package
+# usage: target_source_rpm package
+# select upon the package name, whether it contains srpm or not
define target_source_rpm
-$($(1)-SRPM): $($(1)_specpath) $($(1)-TARBALL) .rpmmacros
+ifeq "$(subst srpm,,$(1))" "$(1)"
+$($(1)-SRPM): $($(1)_specpath) .rpmmacros $($(1)-TARBALL)
mkdir -p BUILD SRPMS tmp
@(echo -n "XXXXXXXXXXXXXXX -- BEG SRPM $(1) " ; date)
$(if $($(1)-RPMBUILD),\
$($(1)-RPMBUILD) $($(1)-RPMFLAGS) -bs $($(1)_specpath),
$(RPMBUILD) $($(1)-RPMFLAGS) -bs $($(1)_specpath))
@(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) " ; date)
+ make -C $($(1)-CODEBASE) srpm && \
+ rm -f SRPMS/$(notdir $($(1)-SRPM)) && \
+ ln $($(1)-CODEBASE)/$(notdir $($(1)-SRPM)) SRPMS/$(notdir $($(1)-SRPM))
+ @(echo -n "XXXXXXXXXXXXXXX -- END SRPM $(1) " ; date)
+endif
endef
$(foreach package,$(ALL),$(eval $(call target_source_rpm,$(package))))
+### rpmbuild invokation
+ALLRPMS:=$(foreach package,$(ALL),$($(package)-RPM))
+# same as above, mention $(ALL) and not $(ALLRPMS)
+rpms: $(ALLRPMS)
+ @echo $(words $(ALLRPMS)) binary rpms OK
+.PHONY: rpms
+
+# usage: build_binary_rpm package
+# xxx hacky - invoke createrepo if DEPENDFILES mentions RPMS/yumgroups.xml
+define target_binary_rpm
+$($(1)-RPM): $($(1)-SRPM)
+ mkdir -p BUILD RPMS SPECS tmp
+ @(echo -n "XXXXXXXXXXXXXXX -- BEG RPM $(1) " ; date)
+ $(if $(findstring RPMS/yumgroups.xml,$($(1)-DEPENDFILES)), createrepo --quiet -g yumgroups.xml RPMS/ , )
+ $(if $($(1)-RPMBUILD),\
+ $($(1)-RPMBUILD) $($(1)-RPMFLAGS) --rebuild $($(1)-SRPM), \
+ $(RPMBUILD) $($(1)-RPMFLAGS) --rebuild $($(1)-SRPM))
+ @(echo -n "XXXXXXXXXXXXXXX -- END RPM $(1) " ; date)
+endef
+
+$(foreach package,$(ALL),$(eval $(call target_binary_rpm,$(package))))
+
### RPMS/yumgroups.xml
ifndef YUMGROUPS
YUMGROUPS := groups/$(PLDISTRO).xml
### brute force clean
distclean1:
- rm -rf pldistro.mk .rpmmacros spec2make SPECS MAKE
+ rm -rf pldistro.mk .rpmmacros spec2make CODESPECS MAKE
distclean2:
- rm -rf CODEBASES SOURCES BUILD RPMS SRPMS tmp
+ rm -rf CODEBASES SOURCES BUILD RPMS SRPMS SPECS tmp
distclean: distclean1 distclean2
.PHONY: distclean1 distclean2 distclean
@echo "Run make in two stages:"
@echo ""
@echo "make stage1=true PLDISTRO=onelab"
- @echo " -> extracts all spec files in SPECS/ and mk files in MAKE/"
+ @echo " -> extracts all spec files in CODESPECS/ and mk files in MAKE/"
@echo " as well as save PLDISTRO for subsequent runs"
@echo ""
@echo "Then you can use the following targets"
# until we are able to build the new kernel layout:
# use the old exploded-tree, 2.6.20-based, version on fc4, 6 & 7
# and the new one on f8 - that requires the build-id patch
+
+#
+# use a package name with srpm in it:
+# in this case the srpm is created by running make srpm in the codebase
#
+
ifeq "$(RELEASE)" "8"
-kernel-$(HOSTARCH)-MODULES := linux-patches
-kernel-$(HOSTARCH)-SPEC := kernel-2.6-planetlab.spec
+srpm-kernel-$(HOSTARCH)-MODULES := linux-patches
+srpm-kernel-$(HOSTARCH)-SPEC := kernel-2.6-planetlab.spec
+ifeq ($(HOSTARCH),i386)
+srpm-kernel-$(HOSTARCH)-RPMFLAGS:= --target i686
+else
+srpm-kernel-$(HOSTARCH)-RPMFLAGS:= --target $(HOSTARCH)
+endif
+KERNELS += srpm-kernel-$(HOSTARCH)
+
else
kernel-$(HOSTARCH)-MODULES := linux-tree
kernel-$(HOSTARCH)-SPEC := scripts/kernel-2.6-planetlab.spec
-endif
ifeq ($(HOSTARCH),i386)
kernel-$(HOSTARCH)-RPMFLAGS:= --target i686
else
kernel-$(HOSTARCH)-RPMFLAGS:= --target $(HOSTARCH)
endif
-
KERNELS += kernel-$(HOSTARCH)
+endif
kernel: $(KERNELS)
kernel-clean: $(foreach package,$(KERNELS),$(package)-clean)