On Mon, Mar 06, 2006 at 12:13:12AM +0100, Sam Ravnborg wrote:
> On Sun, Mar 05, 2006 at 05:14:10PM -0500, Paul Smith wrote:
> > The kbuild system takes advantage of an incorrect behavior in GNU make.
> > Once this behavior is fixed, all files in the kernel rebuild every time,
> > even if nothing has changed. This patch ensures kbuild works with both
> > the incorrect and correct behaviors of GNU make.
> >
> > For more details on the incorrect behavior, see:
> >
> > http://lists.gnu.org/archive/html/bug-make/2006-03/msg00003.html
> >
> >
> > Changes in this patch:
> > - Keep all targets that are to be marked .PHONY in a variable, PHONY.
> > - Add .PHONY: $(PHONY) to mark them properly.
> > - Remove any $(PHONY) files from the $? list when determining whether
> > targets are up-to-date or not.
> >
> >
> > Signed-off-by: Paul Smith <[email protected]>
>
> Thanks Paul.
> Adapted to -rc4 and applied to my kbuild tree which I have pushed out.
> For reference I added the applied patch below.
>
> The patch will be included in 2.6.17 and will see exposure in -mm when
> Andrew does next -mm.
Sam, this was merged into Linus' tree post v2.6.16 (like you intended),
but, won't the window between now and 2.6.17 be a little too big for such
a fix? Debian etch (and sid) already ships with the affected make version:
$ make -v | head -1
GNU Make 3.81rc1
Now, this patch re-based against 2.6.16 is still too big for -stable
(~830 lines plus context). I'm Cc'ing -stable team here for comments, and
also because this will continue to bite between -stable releases. Should
they decide to pick it up, I'll post re-based version as a reply.
Con also added to Cc: since he's already shipping this with 2.6.16-ck2.
Thanks.
> diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile
> index 1c95588..2c6f66d 100644
> --- a/Documentation/DocBook/Makefile
> +++ b/Documentation/DocBook/Makefile
> @@ -28,7 +28,7 @@ PS_METHOD = $(prefer-db2x)
>
> ###
> # The targets that may be used.
> -.PHONY: xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
> +PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
>
> BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
> xmldocs: $(BOOKS)
> @@ -211,3 +211,9 @@ clean-dirs := $(patsubst %.xml,%,$(DOCBO
>
> #man put files in man subdir - traverse down
> subdir- := man/
> +
> +
> +# Declare the contents of the .PHONY variable as phony. We keep that
> +# information in a variable se we can use it in if_changed and friends.
> +
> +.PHONY: $(PHONY)
> diff --git a/Makefile b/Makefile
> index 12c8d71..a59c1e2 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -95,7 +95,7 @@ ifdef O
> endif
>
> # That's our default target when none is given on the command line
> -.PHONY: _all
> +PHONY := _all
> _all:
>
> ifneq ($(KBUILD_OUTPUT),)
> @@ -106,7 +106,7 @@ KBUILD_OUTPUT := $(shell cd $(KBUILD_OUT
> $(if $(KBUILD_OUTPUT),, \
> $(error output directory "$(saved-output)" does not exist))
>
> -.PHONY: $(MAKECMDGOALS)
> +PHONY += $(MAKECMDGOALS)
>
> $(filter-out _all,$(MAKECMDGOALS)) _all:
> $(if $(KBUILD_VERBOSE:1=),@)$(MAKE) -C $(KBUILD_OUTPUT) \
> @@ -123,7 +123,7 @@ ifeq ($(skip-makefile),)
>
> # If building an external module we do not care about the all: rule
> # but instead _all depend on modules
> -.PHONY: all
> +PHONY += all
> ifeq ($(KBUILD_EXTMOD),)
> _all: all
> else
> @@ -337,14 +337,14 @@ export RCS_TAR_IGNORE := --exclude SCCS
> # Rules shared between *config targets and build targets
>
> # Basic helpers built in scripts/
> -.PHONY: scripts_basic
> +PHONY += scripts_basic
> scripts_basic:
> $(Q)$(MAKE) $(build)=scripts/basic
>
> # To avoid any implicit rule to kick in, define an empty command.
> scripts/basic/%: scripts_basic ;
>
> -.PHONY: outputmakefile
> +PHONY += outputmakefile
> # outputmakefile generate a Makefile to be placed in output directory, if
> # using a seperate output directory. This allows convinient use
> # of make in output directory
> @@ -420,7 +420,7 @@ ifeq ($(KBUILD_EXTMOD),)
> # Additional helpers built in scripts/
> # Carefully list dependencies so we do not try to build scripts twice
> # in parrallel
> -.PHONY: scripts
> +PHONY += scripts
> scripts: scripts_basic include/config/MARKER
> $(Q)$(MAKE) $(build)=$(@)
>
> @@ -720,7 +720,7 @@ $(sort $(vmlinux-init) $(vmlinux-main))
> # make menuconfig etc.
> # Error messages still appears in the original language
>
> -.PHONY: $(vmlinux-dirs)
> +PHONY += $(vmlinux-dirs)
> $(vmlinux-dirs): prepare scripts
> $(Q)$(MAKE) $(build)=$@
>
> @@ -773,10 +773,10 @@ kernelrelease = $(KERNELVERSION)$(localv
> # version.h and scripts_basic is processed / created.
>
> # Listed in dependency order
> -.PHONY: prepare archprepare prepare0 prepare1 prepare2 prepare3
> +PHONY += prepare archprepare prepare0 prepare1 prepare2 prepare3
>
> # prepare-all is deprecated, use prepare as valid replacement
> -.PHONY: prepare-all
> +PHONY += prepare-all
>
> # prepare3 is used to check if we are building in a separate output directory,
> # and if so do:
> @@ -857,7 +857,7 @@ include/linux/version.h: $(srctree)/Make
>
> # ---------------------------------------------------------------------------
>
> -.PHONY: depend dep
> +PHONY += depend dep
> depend dep:
> @echo '*** Warning: make $@ is unnecessary now.'
>
> @@ -872,21 +872,21 @@ all: modules
>
> # Build modules
>
> -.PHONY: modules
> +PHONY += modules
> modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
> @echo ' Building modules, stage 2.';
> $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
>
>
> # Target to prepare building external modules
> -.PHONY: modules_prepare
> +PHONY += modules_prepare
> modules_prepare: prepare scripts
>
> # Target to install modules
> -.PHONY: modules_install
> +PHONY += modules_install
> modules_install: _modinst_ _modinst_post
>
> -.PHONY: _modinst_
> +PHONY += _modinst_
> _modinst_:
> @if [ -z "`$(DEPMOD) -V 2>/dev/null | grep module-init-tools`" ]; then \
> echo "Warning: you may need to install module-init-tools"; \
> @@ -913,7 +913,7 @@ depmod_opts :=
> else
> depmod_opts := -b $(INSTALL_MOD_PATH) -r
> endif
> -.PHONY: _modinst_post
> +PHONY += _modinst_post
> _modinst_post: _modinst_
> if [ -r System.map -a -x $(DEPMOD) ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
>
> @@ -956,7 +956,7 @@ clean: rm-dirs := $(CLEAN_DIRS)
> clean: rm-files := $(CLEAN_FILES)
> clean-dirs := $(addprefix _clean_,$(srctree) $(vmlinux-alldirs))
>
> -.PHONY: $(clean-dirs) clean archclean
> +PHONY += $(clean-dirs) clean archclean
> $(clean-dirs):
> $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
>
> @@ -974,7 +974,7 @@ mrproper: rm-dirs := $(wildcard $(MRPRO
> mrproper: rm-files := $(wildcard $(MRPROPER_FILES))
> mrproper-dirs := $(addprefix _mrproper_,Documentation/DocBook scripts)
>
> -.PHONY: $(mrproper-dirs) mrproper archmrproper
> +PHONY += $(mrproper-dirs) mrproper archmrproper
> $(mrproper-dirs):
> $(Q)$(MAKE) $(clean)=$(patsubst _mrproper_%,%,$@)
>
> @@ -984,7 +984,7 @@ mrproper: clean archmrproper $(mrproper-
>
> # distclean
> #
> -.PHONY: distclean
> +PHONY += distclean
>
> distclean: mrproper
> @find $(srctree) $(RCS_FIND_IGNORE) \
> @@ -1000,7 +1000,7 @@ distclean: mrproper
> # rpm target kept for backward compatibility
> package-dir := $(srctree)/scripts/package
>
> -.PHONY: %-pkg rpm
> +PHONY += %-pkg rpm
>
> %pkg: FORCE
> $(Q)$(MAKE) -f $(package-dir)/Makefile $@
> @@ -1092,12 +1092,12 @@ else # KBUILD_EXTMOD
>
> # We are always building modules
> KBUILD_MODULES := 1
> -.PHONY: crmodverdir
> +PHONY += crmodverdir
> crmodverdir:
> $(Q)rm -rf $(MODVERDIR)
> $(Q)mkdir -p $(MODVERDIR)
>
> -.PHONY: $(objtree)/Module.symvers
> +PHONY += $(objtree)/Module.symvers
> $(objtree)/Module.symvers:
> @test -e $(objtree)/Module.symvers || ( \
> echo; \
> @@ -1106,7 +1106,7 @@ $(objtree)/Module.symvers:
> echo )
>
> module-dirs := $(addprefix _module_,$(KBUILD_EXTMOD))
> -.PHONY: $(module-dirs) modules
> +PHONY += $(module-dirs) modules
> $(module-dirs): crmodverdir $(objtree)/Module.symvers
> $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
>
> @@ -1114,11 +1114,11 @@ modules: $(module-dirs)
> @echo ' Building modules, stage 2.';
> $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
>
> -.PHONY: modules_install
> +PHONY += modules_install
> modules_install: _emodinst_ _emodinst_post
>
> -install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
> -.PHONY: _emodinst_
> +install-dir := $(if $(INSTALL_MOD_DIR),$(INSTALL_MOD_DIR),extra)
> +PHONY += _emodinst_
> _emodinst_:
> $(Q)rm -rf $(MODLIB)/$(install-dir)
> $(Q)mkdir -p $(MODLIB)/$(install-dir)
> @@ -1133,13 +1133,13 @@ quiet_cmd_depmod = DEPMOD $(KERNELRELEA
> $(KERNELRELEASE); \
> fi
>
> -.PHONY: _emodinst_post
> +PHONY += _emodinst_post
> _emodinst_post: _emodinst_
> $(call cmd,depmod)
>
> clean-dirs := $(addprefix _clean_,$(KBUILD_EXTMOD))
>
> -.PHONY: $(clean-dirs) clean
> +PHONY += $(clean-dirs) clean
> $(clean-dirs):
> $(Q)$(MAKE) $(clean)=$(patsubst _clean_%,%,$@)
>
> @@ -1161,7 +1161,7 @@ help:
> @echo ''
>
> # Dummies...
> -.PHONY: prepare scripts
> +PHONY += prepare scripts
> prepare: ;
> scripts: ;
> endif # KBUILD_EXTMOD
> @@ -1274,7 +1274,7 @@ namespacecheck:
> endif #ifeq ($(config-targets),1)
> endif #ifeq ($(mixed-targets),1)
>
> -.PHONY: checkstack
> +PHONY += checkstack
> checkstack:
> $(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
> $(PERL) $(src)/scripts/checkstack.pl $(ARCH)
> @@ -1357,4 +1357,10 @@ clean := -f $(if $(KBUILD_SRC),$(srctree
>
> endif # skip-makefile
>
> +PHONY += FORCE
> FORCE:
> +
> +
> +# Declare the contents of the .PHONY variable as phony. We keep that
> +# information in a variable se we can use it in if_changed and friends.
> +.PHONY: $(PHONY)
> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index fbfc14a..585d334 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -1,6 +1,9 @@
> #
> # arch/arm/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # 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.
> @@ -176,7 +179,7 @@ endif
>
> archprepare: maketools
>
> -.PHONY: maketools FORCE
> +PHONY += maketools FORCE
> maketools: include/linux/version.h include/asm-arm/.arch FORCE
> $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h
>
> diff --git a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile
> index a174d63..ec9c400 100644
> --- a/arch/arm/boot/Makefile
> +++ b/arch/arm/boot/Makefile
> @@ -1,6 +1,9 @@
> #
> # arch/arm/boot/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # 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.
> @@ -73,7 +76,7 @@ $(obj)/bootpImage: $(obj)/bootp/bootp FO
> $(call if_changed,objcopy)
> @echo ' Kernel: $@ is ready'
>
> -.PHONY: initrd FORCE
> +PHONY += initrd FORCE
> initrd:
> @test "$(INITRD_PHYS)" != "" || \
> (echo This machine does not support INITRD; exit -1)
> diff --git a/arch/arm/boot/bootp/Makefile b/arch/arm/boot/bootp/Makefile
> index 8e8879b..c394e30 100644
> --- a/arch/arm/boot/bootp/Makefile
> +++ b/arch/arm/boot/bootp/Makefile
> @@ -1,6 +1,9 @@
> #
> # linux/arch/arm/boot/bootp/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
>
> LDFLAGS_bootp :=-p --no-undefined -X \
> --defsym initrd_phys=$(INITRD_PHYS) \
> @@ -21,4 +24,4 @@ $(obj)/kernel.o: arch/arm/boot/zImage FO
>
> $(obj)/initrd.o: $(INITRD) FORCE
>
> -.PHONY: $(INITRD) FORCE
> +PHONY += $(INITRD) FORCE
> diff --git a/arch/arm26/Makefile b/arch/arm26/Makefile
> index 844a9e4..fe91eda 100644
> --- a/arch/arm26/Makefile
> +++ b/arch/arm26/Makefile
> @@ -1,6 +1,9 @@
> #
> # arch/arm26/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # 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.
> @@ -49,9 +52,9 @@ all: zImage
>
> boot := arch/arm26/boot
>
> -.PHONY: maketools FORCE
> +PHONY += maketools FORCE
> maketools: FORCE
> -
> +
>
> # Convert bzImage to zImage
> bzImage: vmlinux
> diff --git a/arch/arm26/boot/Makefile b/arch/arm26/boot/Makefile
> index b5c2277..68acb7b 100644
> --- a/arch/arm26/boot/Makefile
> +++ b/arch/arm26/boot/Makefile
> @@ -1,6 +1,9 @@
> #
> # arch/arm26/boot/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # 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.
> @@ -60,7 +63,7 @@ $(obj)/xipImage: vmlinux FORCE
> @echo ' Kernel: $@ is ready'
> endif
>
> -.PHONY: initrd
> +PHONY += initrd
> initrd:
> @test "$(INITRD_PHYS)" != "" || \
> (echo This machine does not support INITRD; exit -1)
> diff --git a/arch/i386/Makefile b/arch/i386/Makefile
> index 36bef65..ff6973a 100644
> --- a/arch/i386/Makefile
> +++ b/arch/i386/Makefile
> @@ -99,8 +99,8 @@ AFLAGS += $(mflags-y)
>
> boot := arch/i386/boot
>
> -.PHONY: zImage bzImage compressed zlilo bzlilo \
> - zdisk bzdisk fdimage fdimage144 fdimage288 install
> +PHONY += zImage bzImage compressed zlilo bzlilo \
> + zdisk bzdisk fdimage fdimage144 fdimage288 install
>
> all: bzImage
>
> diff --git a/arch/ia64/Makefile b/arch/ia64/Makefile
> index f722e1a..80ea750 100644
> --- a/arch/ia64/Makefile
> +++ b/arch/ia64/Makefile
> @@ -1,6 +1,9 @@
> #
> # ia64/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # 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.
> @@ -62,7 +65,7 @@ drivers-$(CONFIG_OPROFILE) += arch/ia64/
>
> boot := arch/ia64/hp/sim/boot
>
> -.PHONY: boot compressed check
> +PHONY += boot compressed check
>
> all: compressed unwcheck
>
> diff --git a/arch/m32r/Makefile b/arch/m32r/Makefile
> index 983d438..229f66f 100644
> --- a/arch/m32r/Makefile
> +++ b/arch/m32r/Makefile
> @@ -1,6 +1,9 @@
> #
> # m32r/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
>
> LDFLAGS :=
> OBJCOPYFLAGS := -O binary -R .note -R .comment -S
> @@ -39,7 +42,7 @@ drivers-$(CONFIG_OPROFILE) += arch/m32r/
>
> boot := arch/m32r/boot
>
> -.PHONY: zImage
> +PHONY += zImage
>
> all: zImage
>
> diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile
> index 5500ab5..5787d55 100644
> --- a/arch/powerpc/Makefile
> +++ b/arch/powerpc/Makefile
> @@ -150,7 +150,7 @@ CPPFLAGS_vmlinux.lds := -Upowerpc
>
> BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm uImage
>
> -.PHONY: $(BOOT_TARGETS)
> +PHONY += $(BOOT_TARGETS)
>
> boot := arch/$(ARCH)/boot
>
> diff --git a/arch/ppc/Makefile b/arch/ppc/Makefile
> index 98e940b..9fbdf54 100644
> --- a/arch/ppc/Makefile
> +++ b/arch/ppc/Makefile
> @@ -82,7 +82,7 @@ drivers-$(CONFIG_OPROFILE) += arch/power
>
> BOOT_TARGETS = zImage zImage.initrd znetboot znetboot.initrd vmlinux.sm
>
> -.PHONY: $(BOOT_TARGETS)
> +PHONY += $(BOOT_TARGETS)
>
> all: uImage zImage
>
> diff --git a/arch/ppc/boot/Makefile b/arch/ppc/boot/Makefile
> index efd8ce5..84eec0b 100644
> --- a/arch/ppc/boot/Makefile
> +++ b/arch/ppc/boot/Makefile
> @@ -1,6 +1,9 @@
> #
> # arch/ppc/boot/Makefile
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # 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.
> @@ -25,7 +28,7 @@ subdir- += simple openfirmware
>
> hostprogs-y := $(addprefix utils/, addnote mknote hack-coff mkprep mkbugboot mktree)
>
> -.PHONY: $(BOOT_TARGETS) $(bootdir-y)
> +PHONY += $(BOOT_TARGETS) $(bootdir-y)
>
> $(BOOT_TARGETS): $(bootdir-y)
>
> diff --git a/arch/ppc/boot/openfirmware/Makefile b/arch/ppc/boot/openfirmware/Makefile
> index 2a411ec..66b7397 100644
> --- a/arch/ppc/boot/openfirmware/Makefile
> +++ b/arch/ppc/boot/openfirmware/Makefile
> @@ -1,5 +1,8 @@
> # Makefile for making bootable images on various OpenFirmware machines.
> #
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # Paul Mackerras January 1997
> # XCOFF bootable images for PowerMacs
> # Geert Uytterhoeven September 1997
> @@ -86,7 +89,7 @@ $(images)/zImage.chrp-rs6k $(images)/zIm
>
> # The targets used on the make command-line
>
> -.PHONY: zImage zImage.initrd
> +PHONY += zImage zImage.initrd
> zImage: $(images)/zImage.chrp \
> $(images)/zImage.chrp-rs6k
> @echo ' kernel: $@ is ready ($<)'
> @@ -96,7 +99,7 @@ zImage.initrd: $(images)/zImage.initrd.
>
> TFTPIMAGE := /tftpboot/zImage
>
> -.PHONY: znetboot znetboot.initrd
> +PHONY += znetboot znetboot.initrd
> znetboot: $(images)/zImage.chrp
> cp $(images)/zImage.chrp $(TFTPIMAGE).chrp$(END)
> @echo ' kernel: $@ is ready ($<)'
> diff --git a/arch/sh/Makefile b/arch/sh/Makefile
> index 08c9515..c72e17a 100644
> --- a/arch/sh/Makefile
> +++ b/arch/sh/Makefile
> @@ -172,7 +172,7 @@ include/asm-sh/.mach: $(wildcard include
>
> archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
>
> -.PHONY: maketools FORCE
> +PHONY += maketools FORCE
> maketools: include/linux/version.h FORCE
> $(Q)$(MAKE) $(build)=arch/sh/tools include/asm-sh/machtypes.h
>
> diff --git a/arch/um/Makefile b/arch/um/Makefile
> index c58b657..8d14c7a 100644
> --- a/arch/um/Makefile
> +++ b/arch/um/Makefile
> @@ -1,4 +1,7 @@
> -#
> +#
> +# This file is included by the global makefile so that you can add your own
> +# architecture-specific flags and dependencies.
> +#
> # Copyright (C) 2002 Jeff Dike ([email protected])
> # Licensed under the GPL
> #
> @@ -88,7 +91,7 @@ CONFIG_KERNEL_HALF_GIGS ?= 0
>
> SIZE = (($(CONFIG_NEST_LEVEL) + $(CONFIG_KERNEL_HALF_GIGS)) * 0x20000000)
>
> -.PHONY: linux
> +PHONY += linux
>
> all: linux
>
> diff --git a/arch/x86_64/Makefile b/arch/x86_64/Makefile
> index d7fd464..7405dfd 100644
> --- a/arch/x86_64/Makefile
> +++ b/arch/x86_64/Makefile
> @@ -67,8 +67,8 @@ drivers-$(CONFIG_OPROFILE) += arch/x86_
>
> boot := arch/x86_64/boot
>
> -.PHONY: bzImage bzlilo install archmrproper \
> - fdimage fdimage144 fdimage288 archclean
> +PHONY += bzImage bzlilo install archmrproper \
> + fdimage fdimage144 fdimage288 archclean
>
> #Default target when executing "make"
> all: bzImage
> diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include
> index c3d2e4e..59620b1 100644
> --- a/scripts/Kbuild.include
> +++ b/scripts/Kbuild.include
> @@ -116,16 +116,18 @@ make-cmd = $(subst \#,\\\#,$(subst $$,$$
> # function to only execute the passed command if necessary
> # >'< substitution is for echo to work, >$< substitution to preserve $ when reloading .cmd file
> # note: when using inline perl scripts [perl -e '...$$t=1;...'] in $(cmd_xxx) double $$ your perl vars
> -#
> -if_changed = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
> +#
> +if_changed = $(if $(strip $(filter-out $(PHONY),$?) \
> + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
> @set -e; \
> $(echo-cmd) $(cmd_$(1)); \
> echo 'cmd_$@ := $(make-cmd)' > $(@D)/.$(@F).cmd)
>
> # execute the command and also postprocess generated .d dependencies
> # file
> -if_changed_dep = $(if $(strip $? $(filter-out FORCE $(wildcard $^),$^)\
> - $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
> +if_changed_dep = $(if $(strip $(filter-out $(PHONY),$?) \
> + $(filter-out FORCE $(wildcard $^),$^) \
> + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ), \
> @set -e; \
> $(echo-cmd) $(cmd_$(1)); \
> scripts/basic/fixdep $(depfile) $@ '$(make-cmd)' > $(@D)/.$(@F).tmp; \
> @@ -135,6 +137,7 @@ if_changed_dep = $(if $(strip $? $(filte
> # Usage: $(call if_changed_rule,foo)
> # will check if $(cmd_foo) changed, or any of the prequisites changed,
> # and if so will execute $(rule_foo)
> -if_changed_rule = $(if $(strip $? $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
> +if_changed_rule = $(if $(strip $(filter-out $(PHONY),$?) \
> + $(call arg-check, $(cmd_$(1)), $(cmd_$@)) ),\
> @set -e; \
> $(rule_$(1)))
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 6ac96ea..7afe3e7 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -4,7 +4,7 @@
>
> src := $(obj)
>
> -.PHONY: __build
> +PHONY := __build
> __build:
>
> # Read .config if it exist, otherwise ignore
> @@ -308,14 +308,14 @@ targets += $(multi-used-y) $(multi-used-
> # Descending
> # ---------------------------------------------------------------------------
>
> -.PHONY: $(subdir-ym)
> +PHONY += $(subdir-ym)
> $(subdir-ym):
> $(Q)$(MAKE) $(build)=$@
>
> # Add FORCE to the prequisites of a target to force it to be always rebuilt.
> # ---------------------------------------------------------------------------
>
> -.PHONY: FORCE
> +PHONY += FORCE
>
> FORCE:
>
> @@ -330,3 +330,9 @@ cmd_files := $(wildcard $(foreach f,$(ta
> ifneq ($(cmd_files),)
> include $(cmd_files)
> endif
> +
> +
> +# Declare the contents of the .PHONY variable as phony. We keep that
> +# information in a variable se we can use it in if_changed and friends.
> +
> +.PHONY: $(PHONY)
> diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
> index 8974ea5..cff3349 100644
> --- a/scripts/Makefile.clean
> +++ b/scripts/Makefile.clean
> @@ -4,7 +4,7 @@
>
> src := $(obj)
>
> -.PHONY: __clean
> +PHONY := __clean
> __clean:
>
> # Shorthand for $(Q)$(MAKE) scripts/Makefile.clean obj=dir
> @@ -87,10 +87,16 @@ endif
> # Descending
> # ---------------------------------------------------------------------------
>
> -.PHONY: $(subdir-ymn)
> +PHONY += $(subdir-ymn)
> $(subdir-ymn):
> $(Q)$(MAKE) $(clean)=$@
>
> # If quiet is set, only print short version of command
>
> cmd = @$(if $($(quiet)cmd_$(1)),echo ' $($(quiet)cmd_$(1))' &&) $(cmd_$(1))
> +
> +
> +# Declare the contents of the .PHONY variable as phony. We keep that
> +# information in a variable se we can use it in if_changed and friends.
> +
> +.PHONY: $(PHONY)
> diff --git a/scripts/Makefile.modinst b/scripts/Makefile.modinst
> index 23fd1bd..2686dd5 100644
> --- a/scripts/Makefile.modinst
> +++ b/scripts/Makefile.modinst
> @@ -2,7 +2,7 @@
> # Installing modules
> # ==========================================================================
>
> -.PHONY: __modinst
> +PHONY := __modinst
> __modinst:
>
> include scripts/Kbuild.include
> @@ -12,7 +12,7 @@ include scripts/Kbuild.include
> __modules := $(sort $(shell grep -h '\.ko' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
> modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
>
> -.PHONY: $(modules)
> +PHONY += $(modules)
> __modinst: $(modules)
> @:
>
> @@ -27,3 +27,9 @@ modinst_dir = $(if $(KBUILD_EXTMOD),$(ex
>
> $(modules):
> $(call cmd,modules_install,$(MODLIB)/$(modinst_dir))
> +
> +
> +# Declare the contents of the .PHONY variable as phony. We keep that
> +# information in a variable se we can use it in if_changed and friends.
> +
> +.PHONY: $(PHONY)
> diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
> index 563e3c5..0cfbe1c 100644
> --- a/scripts/Makefile.modpost
> +++ b/scripts/Makefile.modpost
> @@ -32,7 +32,7 @@
> # Step 4 is solely used to allow module versioning in external modules,
> # where the CRC of each module is retrieved from the Module.symers file.
>
> -.PHONY: _modpost
> +PHONY := _modpost
> _modpost: __modpost
>
> include .config
> @@ -60,7 +60,7 @@ quiet_cmd_modpost = MODPOST
> $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \
> $(filter-out FORCE,$^)
>
> -.PHONY: __modpost
> +PHONY += __modpost
> __modpost: $(wildcard vmlinux) $(modules:.ko=.o) FORCE
> $(call cmd,modpost)
>
> @@ -97,7 +97,7 @@ targets += $(modules)
> # Add FORCE to the prequisites of a target to force it to be always rebuilt.
> # ---------------------------------------------------------------------------
>
> -.PHONY: FORCE
> +PHONY += FORCE
>
> FORCE:
>
> @@ -112,3 +112,9 @@ cmd_files := $(wildcard $(foreach f,$(ta
> ifneq ($(cmd_files),)
> include $(cmd_files)
> endif
> +
> +
> +# Declare the contents of the .PHONY variable as phony. We keep that
> +# information in a variable se we can use it in if_changed and friends.
> +
> +.PHONY: $(PHONY)
> diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
> index 5280945..e6499db 100644
> --- a/scripts/kconfig/Makefile
> +++ b/scripts/kconfig/Makefile
> @@ -2,7 +2,7 @@
> # Kernel configuration targets
> # These targets are used from top-level makefile
>
> -.PHONY: oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
> +PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config
>
> xconfig: $(obj)/qconf
> $< arch/$(ARCH)/Kconfig
> @@ -42,7 +42,7 @@ update-po-config: $(obj)/kxgettext
> $(Q)rm -f arch/um/Kconfig_arch
> $(Q)rm -f scripts/kconfig/linux_*.pot scripts/kconfig/config.pot
>
> -.PHONY: randconfig allyesconfig allnoconfig allmodconfig defconfig
> +PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
>
> randconfig: $(obj)/conf
> $< -r arch/$(ARCH)/Kconfig
> diff --git a/scripts/kconfig/lxdialog/Makefile b/scripts/kconfig/lxdialog/Makefile
> index bbf4887..a8b0263 100644
> --- a/scripts/kconfig/lxdialog/Makefile
> +++ b/scripts/kconfig/lxdialog/Makefile
> @@ -7,10 +7,10 @@ check-lxdialog := $(srctree)/$(src)/che
> # we really need to do so. (Do not call gcc as part of make mrproper)
> HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
> HOST_LOADLIBES = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
> -
> -HOST_EXTRACFLAGS += -DLOCALE
>
> -.PHONY: dochecklxdialog
> +HOST_EXTRACFLAGS += -DLOCALE
> +
> +PHONY += dochecklxdialog
> $(obj)/dochecklxdialog:
> $(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_LOADLIBES)
>
> diff --git a/scripts/package/Makefile b/scripts/package/Makefile
> index c201ef0..d3038b7 100644
> --- a/scripts/package/Makefile
> +++ b/scripts/package/Makefile
> @@ -32,7 +32,7 @@ MKSPEC := $(srctree)/scripts/package
> PREV := set -e; cd ..;
>
> # rpm-pkg
> -.PHONY: rpm-pkg rpm
> +PHONY += rpm-pkg rpm
>
> $(objtree)/kernel.spec: $(MKSPEC) $(srctree)/Makefile
> $(CONFIG_SHELL) $(MKSPEC) > $@
> @@ -54,10 +54,10 @@ rpm-pkg rpm: $(objtree)/kernel.spec
> clean-files := $(objtree)/kernel.spec
>
> # binrpm-pkg
> -.PHONY: binrpm-pkg
> +PHONY += binrpm-pkg
> $(objtree)/binkernel.spec: $(MKSPEC) $(srctree)/Makefile
> $(CONFIG_SHELL) $(MKSPEC) prebuilt > $@
> -
> +
> binrpm-pkg: $(objtree)/binkernel.spec
> $(MAKE) KBUILD_SRC=
> set -e; \
> @@ -72,7 +72,7 @@ clean-files += $(objtree)/binkernel.spec
> # Deb target
> # ---------------------------------------------------------------------------
> #
> -.PHONY: deb-pkg
> +PHONY += deb-pkg
> deb-pkg:
> $(MAKE) KBUILD_SRC=
> $(CONFIG_SHELL) $(srctree)/scripts/package/builddeb
> @@ -82,7 +82,7 @@ clean-dirs += $(objtree)/debian/
>
> # tarball targets
> # ---------------------------------------------------------------------------
> -.PHONY: tar%pkg
> +PHONY += tar%pkg
> tar%pkg:
> $(MAKE) KBUILD_SRC=
> $(CONFIG_SHELL) $(srctree)/scripts/package/buildtar $@
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]