diff --git a/make/linux-rpm.mk b/make/linux-rpm.mk index 7b469bb6..b7f5c918 100644 --- a/make/linux-rpm.mk +++ b/make/linux-rpm.mk @@ -1,96 +1,37 @@ -# generic utility modules -# (c) 2004 jannet it services -# contact@jannet.de -# $Id$ - -# config -#KERNEL_VERSION = 2.4.24 -#HOST = zwischenhuber -#CUSTOMER = jannet -#KERNEL_PKG = /home/samba/dat/share/exe/linux/os/$(basename $(KERNEL_VERSION))/linux-$(KERNEL_VERSION).tar.gz -#KERNEL_BASE = linux-$(CUSTOMER)-$(HOST) -#UPLOAD_HOST = ftp.jannet.de -#UPLOAD_PATH = /home/ftp/dat/pub/packages/$(CUSTOMER)/linux/$(HOST) -#UPLOAD_OWNER = $(shell whoami) - -# abbreviations define EXTRAVERSION -$(shell sed '/^ *EXTRAVERSION *=/ !d; s/^ *EXTRAVERSION *= *-*//; s/ *$$//' linux-$(KERNEL_VERSION)/Makefile 2>/dev/null) +$(shell cat EXTRAVERSION) +endef + +define COMPLETE_VERSION +$(shell cat COMPLETE_VERSION) endef KERNEL_MAJOR = $(shell echo $(KERNEL_VERSION) | cut -d\. -f1) KERNEL_MINOR = $(shell echo $(KERNEL_VERSION) | cut -d\. -f2) KERNEL_RELEASE = $(shell echo $(KERNEL_VERSION) | cut -d\. -f3) KERNEL_PKG_BASE = /home/samba/dat/share/exe/linux/os/$(KERNEL_MAJOR).$(KERNEL_MINOR)/linux-$(KERNEL_VERSION).tar -ifneq ($(wildcard $(KERNEL_PKG_BASE).gz),) -KERNEL_PKG = $(KERNEL_PKG_BASE).gz -KERNEL_SRC_DIR = $(shell tar -tzf $(KERNEL_DIR)/$(KERNEL_PKG) | head -1) -endif -ifneq ($(wildcard $(KERNEL_PKG_BASE).bz2),) -KERNEL_PKG = $(KERNEL_PKG_BASE).bz2 -KERNEL_SRC_DIR = $(shell tar -tjf $(KERNEL_DIR)/$(KERNEL_PKG) | head -1) -endif -#HOST = $(shell cd ../..; pwd | xargs basename) -WD := $(shell pwd) -ifeq ($(shell echo $(KERNEL_VERSION) | sed '/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/ !d'),) -COMPLETE_VERSION = $(KERNEL_VERSION)-$(EXTRAVERSION) + +ifneq ($(wildcard $(KERNEL_PKG_BASE).*),) + ifneq ($(wildcard $(KERNEL_PKG_BASE).gz),) + KERNEL_PKG = $(KERNEL_PKG_BASE).gz + KERNEL_SRC_DIR = $(shell tar -tzf $(KERNEL_DIR)/$(KERNEL_PKG) | head -1) + endif + ifneq ($(wildcard $(KERNEL_PKG_BASE).bz2),) + KERNEL_PKG = $(KERNEL_PKG_BASE).bz2 + KERNEL_SRC_DIR = $(shell tar -tjf $(KERNEL_DIR)/$(KERNEL_PKG) | head -1) + endif else -COMPLETE_VERSION = $(KERNEL_MAJOR).$(KERNEL_MINOR).$(KERNEL_RELEASE)$(EXTRAVERSION) + KERNEL_PKG = $(KERNEL_PKG_BASE).bz2 + KERNEL_SRC_DIR = linux-$(KERNEL_VERSION) endif +WD := $(shell pwd) TAG = $(shell echo V_$(KERNEL_VERSION)_$(RPM_RELEASE) | sed 's/\./_/g') ARCH = $(shell $(RPMBUILD) --showrc | sed '/build arch / !d; s/.*build arch *://; s/ //g') -RPMBUILD = $(shell which rpmbuild 2>/dev/null) -ifeq ($(RPMBUILD),) -RPMBUILD = $(shell which rpm 2>/dev/null) -endif - -#ifeq ($(wildcard RELEASE-$(KERNEL_VERSION)),) -#RPM_RELEASE := $(shell make newrelease; exit 1) -#else -#RPM_RELEASE_NUM := $(strip $(shell grep Id: RELEASE-$(KERNEL_VERSION) | sed "s/.*RELEASE-$(KERNEL_VERSION),v[ ]*[0-9]*\.\([0-9]*\)[^0-9]*.*/\1/")) -#ifeq ($(UNAME_SUFFIX),) -#RPM_RELEASE = $(RPM_RELEASE_NUM) -#else -#RPM_RELEASE = $(UNAME_SUFFIX)$(RPM_RELEASE_NUM) -#endif -#endif -BASE = $(KERNEL_BASE)-$(COMPLETE_VERSION) -TMP_INSTALL = $(KERNEL_BASE)-$(COMPLETE_VERSION) -BASE_RUN = $(KERNEL_BASE)-run-$(COMPLETE_VERSION) -BASE_DEVEL = $(KERNEL_BASE)-devel-$(COMPLETE_VERSION) - -ifeq ($(BOOT_LABEL),) -BOOT_LABEL = lx-$(COMPLETE_VERSION) -endif - -KERNEL_TGZ = $(notdir $(KERNEL_PKG)) -F_SPEC = $(BASE).spec -F_TGZ = $(BASE).tar.gz -F_SPM = $(BASE).src.rpm -F_RPM_RUN = $(BASE_RUN).$(ARCH).rpm -F_RPM_DEVEL = $(BASE_DEVEL).$(ARCH).rpm -F_RPMS = $(F_RPM_RUN) $(F_RPM_DEVEL) -F_BOOTFILES = $(addsuffix -$(COMPLETE_VERSION),$(addprefix $(TMP_INSTALL)/boot/,vmlinuz config System.map)) -F_CURRENT = $(addprefix CURRENT_, SRC RPM_SRC RPM_RUN_I386 RPM_DEVEL_I386) -F_ULDONE = $(addsuffix .uldone,$(F_RPMS) $(F_TGZ) $(F_SPM) current) -# note that order matters for F_ULDONE and F_RPMS (remote directory attributes) -KERNEL_INSTALL_PREFIX= $(shell pwd)/$(TMP_INSTALL) - -BUILD = build_linux.sh \ - -c config-$(KERNEL_VERSION) \ - -t $(HOST) \ - -b $(WD) \ - -a i386 \ - -s $(KERNEL_SRC_DIR) \ - -i $(TMP_INSTALL) -MKSPEC := $(shell which mkspec-linux.sh) - PATCHES += $(wildcard $(LINUX_KERNEL_PATCH_DIR)/*-$(KERNEL_VERSION).patch) \ $(wildcard $(LINUX_KERNEL_PATCH_DIR)/*-$(KERNEL_VERSION).diff) LOCAL_PATCHES = $(notdir $(PATCHES)) - -LOCAL_PRE_BUILD += patches.done +SUBMAKEFILE = $(MODDIR)/make/linux-rpm-build.mk # exports export KERNEL_VERSION @@ -98,6 +39,7 @@ export KERNEL_INSTALL_PREFIX # first target all: rpm +clean: thisclean # file rules $(KERNEL_PKG): @@ -105,14 +47,22 @@ $(KERNEL_PKG): ftp -a ftp.kernel.org:/pub/linux/kernel/v$(basename $(KERNEL_VERSION))/$(KERNEL_TGZ) install -m 664 $(KERNEL_TGZ) $@ +EXTRAVERSION: linux-$(KERNEL_VERSION)/Makefile + sed '/^ *EXTRAVERSION *=/ !d; s/^ *EXTRAVERSION *= *-*//; s/ *$$//' $< >$@ + +COMPLETE_VERSION: EXTRAVERSION +ifeq ($(shell echo $(KERNEL_VERSION) | sed '/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/ !d'),) + echo -n $(KERNEL_VERSION)-$(EXTRAVERSION) | sed 's/- *$$//' > $@ +else + echo -n $(KERNEL_MAJOR).$(KERNEL_MINOR).$(KERNEL_RELEASE)$(EXTRAVERSION) > $@ +endif + config-$(KERNEL_VERSION): cp $(shell ls config-$(KERNEL_MAJOR).$(KERNEL_MINOR).* | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]\)[.$$]./\1.\2.0\3/; s/\.\([0-9]\)$$/.0\1/' | sort -g | sed 's/\.0/./g; $$ !d') $@ cvs add $@ cvs commit $@ -# if ($$0 ~ "^ *EXTRAVERSION *= [0-9]*.[0-9]*.[0-9]") { \ - -toplevel-makefile: patches.done +toplevel-makefile: unpack.done patches.done awk -v release=$(RPM_RELEASE) '{ \ if ($$0 ~ /EXTRAVERSION *= *-/) { \ oldextra=$$3; \ @@ -123,14 +73,16 @@ toplevel-makefile: patches.done gsub(/-/,_,oldextra); \ printf "EXTRAVERSION = %s-%s\n",oldextra, release \ } else if ($$0 ~ /EXTRAVERSION *= *$$/) { \ - printf "EXTRAVERSION = -%s\n",release \ + if (release ~ "^ *$$") { \ + printf "EXTRAVERSION =\n" \ + } else { \ + printf "EXTRAVERSION = -%s\n",release \ + } \ } else { \ print $$0 \ } \ }' linux-$(KERNEL_VERSION)/Makefile >$@ -# sed "s/\(^ *EXTRAVERSION *= *[^ ]*\) *$$/\\1$(shell echo _$(RPM_RELEASE) | sed 's/^_/-/')/" \ - linux-$(KERNEL_VERSION)/Makefile: toplevel-makefile cp $< $@ @@ -142,99 +94,19 @@ endif ifeq ($(suffix $(KERNEL_PKG)),.bz2) tar -xjf $(KERNEL_PKG) endif + ln -s linux-$(KERNEL_VERSION) linux touch $@ -%.lxdone: unpack.done config-$(KERNEL_VERSION) $(LOCAL_PRE_BUILD) linux-$(KERNEL_VERSION)/Makefile - $(BUILD) $(basename $@) - touch $@ - -$(TMP_INSTALL)/$(F_SPEC): linux-$(KERNEL_VERSION)/Makefile $(MKSPEC) Makefile - $(MKSPEC) -d $(TMP_INSTALL) -b $(KERNEL_BASE) -v $(KERNEL_VERSION) -r $(RPM_RELEASE) -a $(ARCH) -l $(BOOT_LABEL) > $@ - -$(TMP_INSTALL)/boot/%-$(KERNEL_VERSION)-$(RPM_RELEASE): build.lxdone $(LOCAL_AFTER_KERNEL_BUILD) - @echo -n - -.PRECIOUS: $(TMP_INSTALL)/boot/%-$(KERNEL_VERSION) - -$(TMP_INSTALL)/boot/%-$(KERNEL_VERSION)-$(RPM_RELEASE): $(TMP_INSTALL)/boot/%-$(KERNEL_VERSION) - cp $< $@ - -$(F_TGZ): Makefile build.lxdone $(F_BOOTFILES) $(TMP_INSTALL)/$(F_SPEC) - tar -czf $@ \ - $(F_BOOTFILES) \ - $(addprefix $(TMP_INSTALL)/, \ - lib \ - $(F_SPEC) \ - ) - -%.src.rpm: %.tar.gz - $(RPMBUILD) -ts $< - cp /usr/src/packages/SRPMS/$@ . - -rpm.done: $(F_SPM) - $(RPMBUILD) --rebuild $(F_SPM) - touch $@ - -%.$(ARCH).rpm: rpm.done - cp /usr/src/packages/RPMS/$(ARCH)/$@ . - -CURRENT_RPM_RUN_I386: $(F_RPM_RUN) - echo $(UPLOAD_PATH)/rpm/run/$(F_RPM_RUN) > $@ - -CURRENT_RPM_DEVEL_I386: $(F_RPM_RUN) - echo $(UPLOAD_PATH)/rpm/devel/$(F_RPM_DEVEL) > $@ - -CURRENT_RPM_SRC: $(F_RPM_RUN) - echo $(UPLOAD_PATH)/rpm/src/$(F_RPM_SRC) > $@ - -CURRENT_SRC: $(F_RPM_RUN) - echo $(UPLOAD_PATH)/src/$(F_TGZ) > $@ - update.done: cvs update -dP make rpm touch $@ -upload.done: $(F_RPMS) - touch $@ - -%.tar.gz.uldone: %.tar.gz - upload.sh $< rsync_ssh://$(UPLOAD_HOST):$(UPLOAD_PATH)/src/$<:640:750:$(UPLOAD_OWNER).$(CUSTOMER) - touch $@ - -%.src.rpm.uldone: %.src.rpm - upload.sh $< rsync_ssh://$(UPLOAD_HOST):$(UPLOAD_PATH)/rpm/src/$<:640:750:$(UPLOAD_OWNER).$(CUSTOMER) - touch $@ - -%.rpm.uldone: %.rpm - upload.sh $< rsync_ssh://$(UPLOAD_HOST):$(UPLOAD_PATH)/rpm/$(shell echo $@ | sed 's/.*\(run\|devel\).*/\1/')/$<:640:750:$(UPLOAD_OWNER).$(CUSTOMER) - touch $@ - -current.uldone: $(F_CURRENT) - upload.sh $^ rsync_ssh://$(UPLOAD_HOST):$(UPLOAD_PATH)/:640:750:$(UPLOAD_OWNER).$(CUSTOMER) - touch $@ - -tag.done: - cvs tag $(TAG) - touch $@ - version: date >> RELEASE-$(KERNEL_VERSION) cvs commit -m "$(KERNEL_VERSION)" RELEASE-$(KERNEL_VERSION) exit 1 -copy-run.done: $(F_RPM_RUN) - scp $< root@$(HOST):/root/rpm/ - touch $@ -copy-devel.done: $(F_RPM_DEVEL) - scp $< root@$(HOST):/root/rpm/ - touch $@ - -ping: - ping $(HOST) -ssh: - ssh -l root $(HOST) - patches.done: unpack.done $(addsuffix .done,$(notdir $(PATCHES))) touch $@ @@ -245,40 +117,23 @@ patches.done: unpack.done $(addsuffix .done,$(notdir $(PATCHES))) %.patch: cp $(filter %/$@,$(PATCHES)) $@ -# user targets unpack: unpack.done -build: build.lxdone -driver: driver.done -tgz: $(F_TGZ) -spm: $(F_SPM) -rpm: $(F_RPMS) -upload: update.done rpm $(F_ULDONE) -tag: tag.done -install: build.lxdone driver.done install.lxdone -copy-run: copy-run.done -copy-devel: copy-devel.done -copy: copy-run copy-devel patch: patches.done -shutdown: - ssh -l root $(HOST) "shutdown -h now" -reboot: - ssh -l root $(HOST) "reboot" -update-rpm: copy - ssh -l root $(HOST) rpm -U $(addprefix rpm/,$(F_RPMS)) -erase-rpm: - ssh -l root $(HOST) rpm -e $(KERNEL_BASE)-run $(KERNEL_BASE)-devel -dist: clean - cd ..;\ - tar -czf kernel.tar.gz `find kernel -type f -maxdepth 1 | grep -ve "setup\|trash\|CVS"` - mv ../kernel.tar.gz . -clean: - rm -rf $(TMP_INSTALL) - rm -rf install/* reiser.patch *~ *.done *.lxdone *.uldone *.patch *.rpm *.tar.gz *.tar $(SCOPE_DRIVER_BASE) - rm -rf linux linux-$(KERNEL_VERSION) CURRENT_* - rm -f toplevel-makefile +prepare: unpack patch EXTRAVERSION COMPLETE_VERSION -#newrelease: -# echo '# $$Id$$' > RELEASE-$(KERNEL_VERSION); \ -# cvs add RELEASE-$(KERNEL_VERSION); \ -# cvs commit -m "initial checkin" RELEASE-$(KERNEL_VERSION) +DEFERRED_TARGETS = \ + all current.uldone ping ssh build \ + tgz spm rpm upload tag install copy-run copy-devel copy \ + shutdown reboot update-rpm erase-rpm +$(DEFERRED_TARGETS): prepare + make -f $(MODDIR)/make/linux-rpm-build.mk $@ +thisclean: + touch EXTRAVERSION COMPLETE_VERSION + make -f $(SUBMAKEFILE) clean + +export \ + TOPDIR MODDIR KERNEL_VERSION RPM_RELEASE HOST KERNEL_PKG_SUFFIX CUSTOMER \ + KERNEL_BASE_DIR KERNEL_PKG KERNEL_BASE UPLOAD_HOST UPLOAD_PATH \ + UPLOAD_OWNER BOOT_LABEL BOOT_LABEL PATCHES KERNEL_MAJOR KERNEL_MINOR \ + KERNEL_RELEASE WD