From d51bfb7852d0e524074ad1cf04e4c3026d75d652 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Fri, 6 Jan 2006 22:35:59 +0100 Subject: [PATCH 01/13] kbuild: introduce escsq to escapre single quotes This makes things a little bit more reader friendly and gvim is less confused. Signed-off-by: Sam Ravnborg --- scripts/Kbuild.include | 13 +++++++++---- scripts/Makefile.build | 4 ++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index db3c708e546..0168d6c3707 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -3,6 +3,7 @@ # Convinient variables comma := , +squote := ' empty := space := $(empty) $(empty) @@ -11,6 +12,10 @@ space := $(empty) $(empty) # contain a comma depfile = $(subst $(comma),_,$(@D)/.$(@F).d) +### +# Escape single quote for use in echo statements +escsq = $(subst $(squote),'\$(squote)',$1) + ### # filechk is used to check if the content of a generated file is updated. # Sample usage: @@ -47,7 +52,7 @@ build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj # If quiet is set, only print short version of command cmd = @$(if $($(quiet)cmd_$(1)),\ - echo ' $(subst ','\'',$($(quiet)cmd_$(1)))' &&) $(cmd_$(1)) + echo ' $(call escsq,$($(quiet)cmd_$(1)))' &&) $(cmd_$(1)) # Add $(obj)/ for paths that is not absolute objectify = $(foreach o,$(1),$(if $(filter /%,$(o)),$(o),$(obj)/$(o))) @@ -68,7 +73,7 @@ endif # echo command. Short version is $(quiet) equals quiet, otherwise full command echo-cmd = $(if $($(quiet)cmd_$(1)), \ - echo ' $(subst ','\'',$($(quiet)cmd_$(1)))';) + echo ' $(call escsq,$($(quiet)cmd_$(1)))';) # function to only execute the passed command if necessary # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file @@ -78,7 +83,7 @@ if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \ @set -e; \ $(echo-cmd) \ $(cmd_$(1)); \ - echo 'cmd_$@ := $(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).cmd) + echo 'cmd_$@ := $(subst $$,$$$$,$(call escsq,$(cmd_$(1))))' > $(@D)/.$(@F).cmd) # execute the command and also postprocess generated .d dependencies # file @@ -87,7 +92,7 @@ if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\ @set -e; \ $(echo-cmd) \ $(cmd_$(1)); \ - scripts/basic/fixdep $(depfile) $@ '$(subst $$,$$$$,$(subst ','\'',$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \ + scripts/basic/fixdep $(depfile) $@ '$(subst $$,$$$$,$(call escsq,$(cmd_$(1))))' > $(@D)/.$(@F).tmp; \ rm -f $(depfile); \ mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd) diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 506e3f3befe..c33e62bde6b 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -179,10 +179,10 @@ endif define rule_cc_o_c $(if $($(quiet)cmd_checksrc),echo ' $($(quiet)cmd_checksrc)';) \ $(cmd_checksrc) \ - $(if $($(quiet)cmd_cc_o_c),echo ' $(subst ','\'',$($(quiet)cmd_cc_o_c))';) \ + $(if $($(quiet)cmd_cc_o_c),echo ' $(call escsq,$($(quiet)cmd_cc_o_c))';) \ $(cmd_cc_o_c); \ $(cmd_modversions) \ - scripts/basic/fixdep $(depfile) $@ '$(subst ','\'',$(cmd_cc_o_c))' > $(@D)/.$(@F).tmp; \ + scripts/basic/fixdep $(depfile) $@ '$(call escsq,$(cmd_cc_o_c))' > $(@D)/.$(@F).tmp; \ rm -f $(depfile); \ mv -f $(@D)/.$(@F).tmp $(@D)/.$(@F).cmd endef From ae215b14bdbd459afe5f371175765fae817062a8 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sun, 8 Jan 2006 18:39:44 +0100 Subject: [PATCH 02/13] kconfig: factor out ncurses check in a shell script Cleaning up the lxdialog Makefile by factoring out the ncurses compatibility checks. This made the checks much more obvious and easier to extend. Signed-off-by: Sam Ravnborg --- scripts/kconfig/lxdialog/Makefile | 48 ++++------------ scripts/kconfig/lxdialog/check-lxdialog.sh | 67 ++++++++++++++++++++++ 2 files changed, 79 insertions(+), 36 deletions(-) create mode 100644 scripts/kconfig/lxdialog/check-lxdialog.sh diff --git a/scripts/kconfig/lxdialog/Makefile b/scripts/kconfig/lxdialog/Makefile index a45a13fb26e..8f41d9a57aa 100644 --- a/scripts/kconfig/lxdialog/Makefile +++ b/scripts/kconfig/lxdialog/Makefile @@ -1,42 +1,18 @@ -HOST_EXTRACFLAGS := -DLOCALE -ifeq ($(shell uname),SunOS) -HOST_LOADLIBES := -lcurses -else -HOST_LOADLIBES := -lncurses -endif +# Makefile to build lxdialog package +# -ifeq (/usr/include/ncurses/ncurses.h, $(wildcard /usr/include/ncurses/ncurses.h)) - HOST_EXTRACFLAGS += -I/usr/include/ncurses -DCURSES_LOC="" -else -ifeq (/usr/include/ncurses/curses.h, $(wildcard /usr/include/ncurses/curses.h)) - HOST_EXTRACFLAGS += -I/usr/include/ncurses -DCURSES_LOC="" -else -ifeq (/usr/include/ncurses.h, $(wildcard /usr/include/ncurses.h)) - HOST_EXTRACFLAGS += -DCURSES_LOC="" -else - HOST_EXTRACFLAGS += -DCURSES_LOC="" -endif -endif -endif +check-lxdialog := $(srctree)/$(src)/check-lxdialog.sh +HOST_EXTRACFLAGS := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) +HOST_LOADLIBES := $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags) + +HOST_EXTRACFLAGS += -DLOCALE + +.PHONY: dochecklxdialog +$(obj)/dochecklxdialog: + $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES) hostprogs-y := lxdialog -always := ncurses $(hostprogs-y) +always := $(hostprogs-y) dochecklxdialog lxdialog-objs := checklist.o menubox.o textbox.o yesno.o inputbox.o \ util.o lxdialog.o msgbox.o - -.PHONY: $(obj)/ncurses -$(obj)/ncurses: - @echo "main() {}" > lxtemp.c - @if $(HOSTCC) lxtemp.c $(HOST_LOADLIBES); then \ - rm -f lxtemp.c a.out; \ - else \ - rm -f lxtemp.c; \ - echo -e "\007" ;\ - echo ">> Unable to find the Ncurses libraries." ;\ - echo ">>" ;\ - echo ">> You must install ncurses-devel in order" ;\ - echo ">> to use 'make menuconfig'" ;\ - echo ;\ - exit 1 ;\ - fi diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh new file mode 100644 index 00000000000..a3c141b4967 --- /dev/null +++ b/scripts/kconfig/lxdialog/check-lxdialog.sh @@ -0,0 +1,67 @@ +#!/bin/sh +# Check ncurses compatibility + +# What library to link +ldflags() +{ + if [ `uname` == SunOS ]; then + echo '-lcurses' + else + echo '-lncurses' + fi +} + +# Where is ncurses.h? +ccflags() +{ + if [ -f /usr/include/ncurses/ncurses.h ]; then + echo '-I/usr/include/ncurses -DCURSES_LOC=""' + elif [ -f /usr/include/ncurses/curses.h ]; then + echo '-I/usr/include/ncurses -DCURSES_LOC=""' + elif [ -f /usr/include/ncurses.h ]; then + echo '-DCURSES_LOC=""' + else + echo '-DCURSES_LOC=""' + fi +} + +compiler="" +# Check if we can link to ncurses +check() { + echo "main() {}" | $compiler -xc - + if [ $? != 0 ]; then + echo " *** Unable to find the ncurses libraries." 1>&2 + echo " *** make menuconfig require the ncurses libraries" 1>&2 + echo " *** " 1>&2 + echo " *** Install ncurses (ncurses-devel) and try again" 1>&2 + echo " *** " 1>&2 + exit 1 + fi +} + +usage() { + printf "Usage: $0 [-check compiler options|-header|-library]\n" +} + +if [ $# == 0 ]; then + usage + exit 1 +fi + +case "$1" in + "-check") + shift + compiler="$@" + check + ;; + "-ccflags") + ccflags + ;; + "-ldflags") + ldflags + ;; + "*") + usage + exit 1 + ;; +esac From ac448afbcdcc218fd8d177960466ecc4a523722f Mon Sep 17 00:00:00 2001 From: Brian Gerst Date: Fri, 6 Jan 2006 18:28:45 -0500 Subject: [PATCH 03/13] kbuild: clean up asm-offsets.h creation - Move mkdir out of cmd_offsets - Add input file to sed command instead of using cat Signed-off-by: Brian Gerst Signed-off-by: Sam Ravnborg --- Kbuild | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Kbuild b/Kbuild index 79003918f37..95d6a00bace 100644 --- a/Kbuild +++ b/Kbuild @@ -22,8 +22,6 @@ sed-$(CONFIG_MIPS) := "/^@@@/s///p" quiet_cmd_offsets = GEN $@ define cmd_offsets - mkdir -p $(dir $@); \ - cat $< | \ (set -e; \ echo "#ifndef __ASM_OFFSETS_H__"; \ echo "#define __ASM_OFFSETS_H__"; \ @@ -34,7 +32,7 @@ define cmd_offsets echo " *"; \ echo " */"; \ echo ""; \ - sed -ne $(sed-y); \ + sed -ne $(sed-y) $<; \ echo ""; \ echo "#endif" ) > $@ endef @@ -45,5 +43,6 @@ arch/$(ARCH)/kernel/asm-offsets.s: arch/$(ARCH)/kernel/asm-offsets.c FORCE $(call if_changed_dep,cc_s_c) $(obj)/$(offsets-file): arch/$(ARCH)/kernel/asm-offsets.s Kbuild + $(Q)mkdir -p $(dir $@) $(call cmd,offsets) From cc6fa432f5eec26c43fd06c0314cb1c2cae6d9a1 Mon Sep 17 00:00:00 2001 From: Brian Gerst Date: Sun, 8 Jan 2006 10:53:55 -0500 Subject: [PATCH 04/13] modpost/file2alias: Fix typo SND_MAX should be FF_MAX Signed-off-by: Brian Gerst Signed-off-by: Sam Ravnborg --- scripts/mod/file2alias.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c index e0eedffe565..be97caf664b 100644 --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@ -417,7 +417,7 @@ static int do_input_entry(const char *filename, struct input_device_id *id, do_input(alias, id->sndbit, 0, SND_MAX); sprintf(alias + strlen(alias), "f*"); if (id->flags&INPUT_DEVICE_ID_MATCH_FFBIT) - do_input(alias, id->ffbit, 0, SND_MAX); + do_input(alias, id->ffbit, 0, FF_MAX); sprintf(alias + strlen(alias), "w*"); if (id->flags&INPUT_DEVICE_ID_MATCH_SWBIT) do_input(alias, id->swbit, 0, SW_MAX); From 24d49756aa67322c2def5dc97344615572ac454e Mon Sep 17 00:00:00 2001 From: Ryan Anderson Date: Sun, 8 Jan 2006 04:35:36 -0500 Subject: [PATCH 05/13] kbuild: In setlocalversion change -git_dirty to just -dirty When building Debian packages directly from the git tree, the appended "git_dirty" is a problem due to the underscore. In order to cause the least problems, change that just to "dirty". Signed-off-by: Ryan Anderson Signed-off-by: Sam Ravnborg --- scripts/setlocalversion | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setlocalversion b/scripts/setlocalversion index f54dac88cfd..9a23825218f 100644 --- a/scripts/setlocalversion +++ b/scripts/setlocalversion @@ -17,6 +17,6 @@ if head=`git rev-parse --verify HEAD 2>/dev/null`; then # Are there uncommitted changes? if git diff-files | read dummy; then - printf '%s' -git_dirty + printf '%s' -dirty fi fi From 50aa88e2877f1375ba79d1be7a0ff4aa563741c7 Mon Sep 17 00:00:00 2001 From: Tore Anderson Date: Sat, 7 Jan 2006 15:34:40 +0100 Subject: [PATCH 06/13] kbuild: ensure mrproper removes .old_version If the final linking of vmlinux fails, the file .old_version are left behind. This patch ensures the mrproper target will remove it if present. Signed-off-by: Tore Anderson Signed-off-by: Sam Ravnborg --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 599e744d3e3..50b07fa665e 100644 --- a/Makefile +++ b/Makefile @@ -984,7 +984,7 @@ CLEAN_FILES += vmlinux System.map \ # Directories & files removed with 'make mrproper' MRPROPER_DIRS += include/config include2 -MRPROPER_FILES += .config .config.old include/asm .version \ +MRPROPER_FILES += .config .config.old include/asm .version .old_version \ include/linux/autoconf.h include/linux/version.h \ Module.symvers tags TAGS cscope* From 442ce844e139c1e3c23e8b4df13468041ae35721 Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Fri, 6 Jan 2006 02:40:19 -0500 Subject: [PATCH 07/13] kbuild: reference_discarded addition Error: ./fs/quota_v2.o .opd refers to 0000000000000020 R_PPC64_ADDR64 .exit.text Been carrying this for some time in Red Hat trees. Keith Ownes commented: For our future {in}sanity, add a comment that this is the ppc .opd section, not the ia64 .opd section. ia64 .opd should not point to discarded sections. Any idea why ppc .opd points to discarded sections when ia64 does not? AFAICT no ia64 object has a useful .opd section, they are all empty or (sometimes) a dummy entry which is 1 byte long. ia64 .opd data is built at link time, not compile time. Signed-off-by: Dave Jones Signed-off-by: Sam Ravnborg --- scripts/reference_discarded.pl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/reference_discarded.pl b/scripts/reference_discarded.pl index c2d54148a91..4ee6ab2135b 100644 --- a/scripts/reference_discarded.pl +++ b/scripts/reference_discarded.pl @@ -71,6 +71,11 @@ foreach $object (keys(%object)) { # printf("ignoring %d conglomerate(s)\n", $ignore); # printf("Scanning objects\n"); + +# Keith Ownes commented: +# For our future {in}sanity, add a comment that this is the ppc .opd +# section, not the ia64 .opd section. +# ia64 .opd should not point to discarded sections. $errorcount = 0; foreach $object (keys(%object)) { my $from; @@ -88,6 +93,7 @@ foreach $object (keys(%object)) { ($from !~ /\.text\.exit$/ && $from !~ /\.exit\.text$/ && $from !~ /\.data\.exit$/ && + $from !~ /\.opd$/ && $from !~ /\.exit\.data$/ && $from !~ /\.altinstructions$/ && $from !~ /\.pdr$/ && From ad14336de8e9cddae9ed29d45bd2e97abb72eaf9 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sun, 8 Jan 2006 19:58:51 +0100 Subject: [PATCH 08/13] kbuild: remove GCC_VERSION This was causing some ordering problems. Remove the up-front evaluation and just revaluate the compiler version each time we need it. (The up-front evaluation was problematic because some architectures modify the value of $(CC)). Signed-off-by: Andrew Morton Signed-off-by: Sam Ravnborg --- Documentation/kbuild/makefiles.txt | 4 ++-- arch/i386/Makefile | 4 ++-- arch/ia64/Makefile | 7 +------ arch/powerpc/Makefile | 6 ++---- arch/ppc/Makefile | 3 +-- 5 files changed, 8 insertions(+), 16 deletions(-) diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index d802ce88bed..443230b43e0 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -1033,9 +1033,9 @@ When kbuild executes the following steps are followed (roughly): Example: #arch/i386/Makefile - GCC_VERSION := $(call cc-version) cflags-y += $(shell \ - if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;) + if [ $(call cc-version) -ge 0300 ] ; then \ + echo "-mregparm=3"; fi ;) In the above example -mregparm=3 is only used for gcc version greater than or equal to gcc 3.0. diff --git a/arch/i386/Makefile b/arch/i386/Makefile index d121ea18460..8f6b90e44c9 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile @@ -39,8 +39,8 @@ include $(srctree)/arch/i386/Makefile.cpu # -mregparm=3 works ok on gcc-3.0 and later # -GCC_VERSION := $(call cc-version) -cflags-$(CONFIG_REGPARM) += $(shell if [ $(GCC_VERSION) -ge 0300 ] ; then echo "-mregparm=3"; fi ;) +cflags-$(CONFIG_REGPARM) += $(shell if [ $(call cc-version) -ge 0300 ] ; then \ + echo "-mregparm=3"; fi ;) # Disable unit-at-a-time mode, it makes gcc use a lot more stack # due to the lack of sharing of stacklots. diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile index 67932ad5308..f722e1a2594 100644 --- a/arch/ia64/Makefile +++ b/arch/ia64/Makefile @@ -25,7 +25,6 @@ cflags-y := -pipe $(EXTRA) -ffixed-r13 -mfixed-range=f12-f15,f32-f127 \ -falign-functions=32 -frename-registers -fno-optimize-sibling-calls CFLAGS_KERNEL := -mconstant-gp -GCC_VERSION := $(call cc-version) GAS_STATUS = $(shell $(srctree)/arch/ia64/scripts/check-gas "$(CC)" "$(OBJDUMP)") CPPFLAGS += $(shell $(srctree)/arch/ia64/scripts/toolchain-flags "$(CC)" "$(OBJDUMP)" "$(READELF)") @@ -37,11 +36,7 @@ $(error Sorry, you need a newer version of the assember, one that is built from ftp://ftp.hpl.hp.com/pub/linux-ia64/gas-030124.tar.gz) endif -ifneq ($(shell if [ $(GCC_VERSION) -lt 0300 ] ; then echo "bad"; fi ;),) -$(error Sorry, your compiler is too old. GCC v2.96 is known to generate bad code.) -endif - -ifeq ($(GCC_VERSION),0304) +ifeq ($(call cc-version),0304) cflags-$(CONFIG_ITANIUM) += -mtune=merced cflags-$(CONFIG_MCKINLEY) += -mtune=mckinley endif diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index a13eb575f83..b98f11b6b25 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -76,8 +76,7 @@ LINUXINCLUDE += $(LINUXINCLUDE-y) CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__ ifeq ($(CONFIG_PPC64),y) -GCC_VERSION := $(call cc-version) -GCC_BROKEN_VEC := $(shell if [ $(GCC_VERSION) -lt 0400 ] ; then echo "y"; fi) +GCC_BROKEN_VEC := $(shell if [ $(call cc-version) -lt 0400 ] ; then echo "y"; fi) ifeq ($(CONFIG_POWER4_ONLY),y) ifeq ($(CONFIG_ALTIVEC),y) @@ -189,10 +188,9 @@ TOUT := .tmp_gas_check # Ensure this is binutils 2.12.1 (or 2.12.90.0.7) or later for altivec # instructions. # gcc-3.4 and binutils-2.14 are a fatal combination. -GCC_VERSION := $(call cc-version) checkbin: - @if test "$(GCC_VERSION)" = "0304" ; then \ + @if test "$(call cc-version)" = "0304" ; then \ if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \ echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \ echo 'correctly with gcc-3.4 and your version of binutils.'; \ diff --git a/arch/ppc/Makefile b/arch/ppc/Makefile index e719a4933af..98e940beeb3 100644 --- a/arch/ppc/Makefile +++ b/arch/ppc/Makefile @@ -128,10 +128,9 @@ TOUT := .tmp_gas_check # Ensure this is binutils 2.12.1 (or 2.12.90.0.7) or later for altivec # instructions. # gcc-3.4 and binutils-2.14 are a fatal combination. -GCC_VERSION := $(call cc-version) checkbin: - @if test "$(GCC_VERSION)" = "0304" ; then \ + @if test "$(call cc-version)" = "0304" ; then \ if ! /bin/echo mftb 5 | $(AS) -v -mppc -many -o $(TOUT) >/dev/null 2>&1 ; then \ echo -n '*** ${VERSION}.${PATCHLEVEL} kernels no longer build '; \ echo 'correctly with gcc-3.4 and your version of binutils.'; \ From 63b794bfd898899cc8b6d4679d4fdc486606194b Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Sun, 8 Jan 2006 20:37:39 +0100 Subject: [PATCH 09/13] frv: Use KERNELRELEASE Signed-off-by: Sam Ravnborg --- arch/frv/boot/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/frv/boot/Makefile b/arch/frv/boot/Makefile index d75e0d77136..5dfc93fd945 100644 --- a/arch/frv/boot/Makefile +++ b/arch/frv/boot/Makefile @@ -57,10 +57,10 @@ initrd: # installation # install: $(CONFIGURE) Image - sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) Image $(TOPDIR)/System.map "$(INSTALL_PATH)" + sh ./install.sh $(KERNELRELEASE) Image $(TOPDIR)/System.map "$(INSTALL_PATH)" zinstall: $(CONFIGURE) zImage - sh ./install.sh $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)" + sh ./install.sh $(KERNELRELEASE) zImage $(TOPDIR)/System.map "$(INSTALL_PATH)" # # miscellany From 0d20babd86b40fa5ac55d9ebf31d05f6f7082161 Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Sat, 7 Jan 2006 17:38:39 -0800 Subject: [PATCH 10/13] kbuild: drop vmlinux dependency from "make install" This removes the dependency from vmlinux to install, thus avoiding the current situation where "make install" has a nasty tendency to leave root-turds in the working directory. It also updates x86-64 to be in sync with i386. Signed-off-by: H. Peter Anvin Signed-off-by: Sam Ravnborg --- arch/i386/Makefile | 5 ++--- arch/i386/boot/Makefile | 2 +- arch/i386/boot/install.sh | 14 +++++++++++++ arch/x86_64/Makefile | 5 ++++- arch/x86_64/boot/Makefile | 2 +- arch/x86_64/boot/install.sh | 40 +------------------------------------ 6 files changed, 23 insertions(+), 45 deletions(-) diff --git a/arch/i386/Makefile b/arch/i386/Makefile index 8f6b90e44c9..d3c0409d201 100644 --- a/arch/i386/Makefile +++ b/arch/i386/Makefile @@ -103,7 +103,7 @@ AFLAGS += $(mflags-y) boot := arch/i386/boot .PHONY: zImage bzImage compressed zlilo bzlilo \ - zdisk bzdisk fdimage fdimage144 fdimage288 install kernel_install + zdisk bzdisk fdimage fdimage144 fdimage288 install all: bzImage @@ -125,8 +125,7 @@ zdisk bzdisk: vmlinux fdimage fdimage144 fdimage288: vmlinux $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@ -install: vmlinux -install kernel_install: +install: $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install archclean: diff --git a/arch/i386/boot/Makefile b/arch/i386/boot/Makefile index 1e71382d413..0fea75dd4e3 100644 --- a/arch/i386/boot/Makefile +++ b/arch/i386/boot/Makefile @@ -100,5 +100,5 @@ zlilo: $(BOOTIMAGE) cp System.map $(INSTALL_PATH)/ if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi -install: $(BOOTIMAGE) +install: sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $< System.map "$(INSTALL_PATH)" diff --git a/arch/i386/boot/install.sh b/arch/i386/boot/install.sh index f17b40dfc0f..5e44c736eea 100644 --- a/arch/i386/boot/install.sh +++ b/arch/i386/boot/install.sh @@ -19,6 +19,20 @@ # $4 - default install path (blank if root directory) # +verify () { + if [ ! -f "$1" ]; then + echo "" 1>&2 + echo " *** Missing file: $1" 1>&2 + echo ' *** You need to run "make" before "make install".' 1>&2 + echo "" 1>&2 + exit 1 + fi +} + +# Make sure the files actually exist +verify "$2" +verify "$3" + # User may have a custom install script if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile index a9cd42e6182..51d83288d62 100644 --- a/arch/x86_64/Makefile +++ b/arch/x86_64/Makefile @@ -80,9 +80,12 @@ bzlilo: vmlinux bzdisk: vmlinux $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) zdisk -install fdimage fdimage144 fdimage288: vmlinux +fdimage fdimage144 fdimage288: vmlinux $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ +install: + $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(BOOTIMAGE) $@ + archclean: $(Q)$(MAKE) $(clean)=$(boot) diff --git a/arch/x86_64/boot/Makefile b/arch/x86_64/boot/Makefile index 18c6e915d69..29f8396ed15 100644 --- a/arch/x86_64/boot/Makefile +++ b/arch/x86_64/boot/Makefile @@ -98,5 +98,5 @@ zlilo: $(BOOTIMAGE) cp System.map $(INSTALL_PATH)/ if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi -install: $(BOOTIMAGE) +install: sh $(srctree)/$(src)/install.sh $(KERNELRELEASE) $(BOOTIMAGE) System.map "$(INSTALL_PATH)" diff --git a/arch/x86_64/boot/install.sh b/arch/x86_64/boot/install.sh index 198af15a775..baaa2369bdb 100644 --- a/arch/x86_64/boot/install.sh +++ b/arch/x86_64/boot/install.sh @@ -1,40 +1,2 @@ #!/bin/sh -# -# arch/x86_64/boot/install.sh -# -# This file is subject to the terms and conditions of the GNU General Public -# License. See the file "COPYING" in the main directory of this archive -# for more details. -# -# Copyright (C) 1995 by Linus Torvalds -# -# Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin -# -# "make install" script for i386 architecture -# -# Arguments: -# $1 - kernel version -# $2 - kernel image file -# $3 - kernel map file -# $4 - default install path (blank if root directory) -# - -# User may have a custom install script - -if [ -x ~/bin/${CROSS_COMPILE}installkernel ]; then exec ~/bin/${CROSS_COMPILE}installkernel "$@"; fi -if [ -x /sbin/${CROSS_COMPILE}installkernel ]; then exec /sbin/${CROSS_COMPILE}installkernel "$@"; fi - -# Default install - same as make zlilo - -if [ -f $4/vmlinuz ]; then - mv $4/vmlinuz $4/vmlinuz.old -fi - -if [ -f $4/System.map ]; then - mv $4/System.map $4/System.old -fi - -cat $2 > $4/vmlinuz -cp $3 $4/System.map - -if [ -x /sbin/lilo ]; then /sbin/lilo; else /etc/lilo/install; fi +. $srctree/arch/i386/boot/install.sh From a9aa1ffaac7c8d6f093bb8f7cdeea761a5e25f53 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Mon, 9 Jan 2006 20:48:03 +0100 Subject: [PATCH 11/13] kbuild/xfs: introduce fs/xfs/Kbuild In kbuild the file named 'Kbuild' has precedence over the file named Makefile. Utilise a file named Kbuild to include the 2.6 Makefile for xfs - since the xfs people likes to keep their arch specific Makefiles separate. With this patch xfs does no longer rely on the KERNELRELEASE components to be global. Signed-off-by: Sam Ravnborg --- fs/xfs/Kbuild | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 fs/xfs/Kbuild diff --git a/fs/xfs/Kbuild b/fs/xfs/Kbuild new file mode 100644 index 00000000000..2566e96706f --- /dev/null +++ b/fs/xfs/Kbuild @@ -0,0 +1,6 @@ +# +# The xfs people like to share Makefile with 2.6 and 2.4. +# Utilise file named Kbuild file which has precedence over Makefile. +# + +include $(srctree)/$(obj)/Makefile-linux-2.6 From cb58455c48dc43536e5548bdba4e916b2f0cf13d Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Mon, 9 Jan 2006 21:20:34 +0100 Subject: [PATCH 12/13] kbuild: KERNELRELEASE is only re-defined when buiding the kernel To avoid running setlocalversion as root no longer (re-)define KERNELRELEASE for each run. With this patch KERNELRELEASE is only re-read when we do an actual kernel build. Rationale behind this is "do as little as possible" when executing make install - as root! A new file named .kernelrelease is strored in the root of the kernel tree containing the actual version string. So when we use do a kernel build the .kernelrelease file will be updated. But in all other situations it is left as-is. To make it more visible the kernel now prints out the version being build. Sample: Building kernel 2.6.15-g63b794bf-dirty ... ... The patch also un-exports VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION LOCALVERSION since all users of these are anyway broken - and none is left in the tree. Signed-off-by: Sam Ravnborg --- Makefile | 95 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/Makefile b/Makefile index 50b07fa665e..df60aa1bfb5 100644 --- a/Makefile +++ b/Makefile @@ -141,24 +141,6 @@ VPATH := $(srctree) export srctree objtree VPATH TOPDIR -nullstring := -space := $(nullstring) # end of line - -# Take the contents of any files called localversion* and the config -# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE. Be -# careful not to include files twice if building in the source -# directory. LOCALVERSION from the command line override all of this - -localver := $(objtree)/localversion* $(srctree)/localversion* -localver := $(sort $(wildcard $(localver))) -# skip backup files (containing '~') -localver := $(foreach f, $(localver), $(if $(findstring ~, $(f)),,$(f))) - -LOCALVERSION = $(subst $(space),, \ - $(shell cat /dev/null $(localver)) \ - $(patsubst "%",%,$(CONFIG_LOCALVERSION))) - -KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(LOCALVERSION) # SUBARCH tells the usermode build what the underlying arch is. That is set # first, and if a usermode build is happening, the "ARCH=um" on the command @@ -353,7 +335,10 @@ CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \ -ffreestanding AFLAGS := -D__ASSEMBLY__ -export VERSION PATCHLEVEL SUBLEVEL EXTRAVERSION LOCALVERSION KERNELRELEASE \ +# Read KERNELRELEASE from .kernelrelease (if it exists) +KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null) + +export KERNELRELEASE \ ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \ HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS @@ -551,26 +536,6 @@ export KBUILD_IMAGE ?= vmlinux # images. Default is /boot, but you can set it to other values export INSTALL_PATH ?= /boot -# If CONFIG_LOCALVERSION_AUTO is set, we automatically perform some tests -# and try to determine if the current source tree is a release tree, of any sort, -# or if is a pure development tree. -# -# A 'release tree' is any tree with a git TAG associated -# with it. The primary goal of this is to make it safe for a native -# git/CVS/SVN user to build a release tree (i.e, 2.6.9) and also to -# continue developing against the current Linus tree, without having the Linus -# tree overwrite the 2.6.9 tree when installed. -# -# Currently, only git is supported. -# Other SCMs can edit scripts/setlocalversion and add the appropriate -# checks as needed. - - -ifdef CONFIG_LOCALVERSION_AUTO - localversion-auto := $(shell $(PERL) $(srctree)/scripts/setlocalversion $(srctree)) - LOCALVERSION := $(LOCALVERSION)$(localversion-auto) -endif - # # INSTALL_MOD_PATH specifies a prefix to MODLIB for module directory # relocations required by build roots. This is not defined in the @@ -782,6 +747,50 @@ $(sort $(vmlinux-init) $(vmlinux-main)) $(vmlinux-lds): $(vmlinux-dirs) ; $(vmlinux-dirs): prepare scripts $(Q)$(MAKE) $(build)=$@ +# Build the kernel release string +# The KERNELRELEASE is stored in a file named .kernelrelease +# to be used when executing for example make install or make modules_install +# +# Take the contents of any files called localversion* and the config +# variable CONFIG_LOCALVERSION and append them to KERNELRELEASE. +# LOCALVERSION from the command line override all of this + +nullstring := +space := $(nullstring) # end of line + +___localver = $(objtree)/localversion* $(srctree)/localversion* +__localver = $(sort $(wildcard $(___localver))) +# skip backup files (containing '~') +_localver = $(foreach f, $(__localver), $(if $(findstring ~, $(f)),,$(f))) + +localver = $(subst $(space),, \ + $(shell cat /dev/null $(_localver)) \ + $(patsubst "%",%,$(CONFIG_LOCALVERSION))) + +# If CONFIG_LOCALVERSION_AUTO is set scripts/setlocalversion is called +# and if the SCM is know a tag from the SCM is appended. +# The appended tag is determinded by the SCM used. +# +# Currently, only git is supported. +# Other SCMs can edit scripts/setlocalversion and add the appropriate +# checks as needed. +ifdef CONFIG_LOCALVERSION_AUTO + _localver-auto = $(shell $(CONFIG_SHELL) \ + $(srctree)/scripts/setlocalversion $(srctree)) + localver-auto = $(LOCALVERSION)$(_localver-auto) +endif + +localver-full = $(localver)$(localver-auto) + +# Store (new) KERNELRELASE string in .kernelrelease +kernelrelease = \ + $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)$(localver-full) +.kernelrelease: FORCE + $(Q)rm -f .kernelrelease + $(Q)echo $(kernelrelease) > .kernelrelease + $(Q)echo " Building kernel $(kernelrelease)" + + # Things we need to do before we recursively start building the kernel # or the modules are listed in "prepare". # A multi level approach is used. prepareN is processed before prepareN-1. @@ -798,8 +807,7 @@ $(vmlinux-dirs): prepare scripts # and if so do: # 1) Check that make has not been executed in the kernel src $(srctree) # 2) Create the include2 directory, used for the second asm symlink - -prepare3: +prepare3: .kernelrelease ifneq ($(KBUILD_SRC),) @echo ' Using $(srctree) as source for kernel' $(Q)if [ -f $(srctree)/.config ]; then \ @@ -986,7 +994,7 @@ CLEAN_FILES += vmlinux System.map \ MRPROPER_DIRS += include/config include2 MRPROPER_FILES += .config .config.old include/asm .version .old_version \ include/linux/autoconf.h include/linux/version.h \ - Module.symvers tags TAGS cscope* + .kernelrelease Module.symvers tags TAGS cscope* # clean - Delete most, but leave enough to build external modules # @@ -1072,6 +1080,7 @@ help: @echo ' tags/TAGS - Generate tags file for editors' @echo ' cscope - Generate cscope index' @echo ' kernelrelease - Output the release version string' + @echo ' kernelversion - Output the version stored in Makefile' @echo '' @echo 'Static analysers' @echo ' buildcheck - List dangling references to vmlinux discarded sections' @@ -1293,6 +1302,8 @@ checkstack: kernelrelease: @echo $(KERNELRELEASE) +kernelversion: + @echo $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) # FIXME Should go into a make.lib or something # =========================================================================== From 4f0210b9c4889eede9f8f379f93570c01998ccb9 Mon Sep 17 00:00:00 2001 From: Sam Ravnborg Date: Mon, 9 Jan 2006 22:48:34 +0100 Subject: [PATCH 13/13] kbuild: re-export VERSION, PATCHLEVEL, SUBLEVEL Eric Sandeen pointed out that it is usefull to have access to VERSION, PATCHLEVEL, SUBLEVEL in external modules, and gooling a litte confirmed this. So re-export them. Usage within the kernel is still discouraged but possible. Signed-off-by: Sam Ravnborg --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index df60aa1bfb5..1d1afa57329 100644 --- a/Makefile +++ b/Makefile @@ -338,7 +338,7 @@ AFLAGS := -D__ASSEMBLY__ # Read KERNELRELEASE from .kernelrelease (if it exists) KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null) -export KERNELRELEASE \ +export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE \ ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \ HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS