• Masahiro Yamada's avatar
    kbuild: revive "Entering directory" for Make >= 4.4.1 · 5fc10e76
    Masahiro Yamada authored
    With commit 9da0763b ("kbuild: Use relative path when building in
    a subdir of the source tree"), compiler messages in out-of-tree builds
    include relative paths, which are relative to the build directory, not
    the directory where make was started.
    
    To help IDEs/editors find the source files, Kbuild lets GNU Make print
    "Entering directory ..." when it changes the working directory. It has
    been working fine for a long time, but David reported it is broken with
    the latest GNU Make.
    
    The behavior was changed by GNU Make commit 8f9e7722ff0f ("[SV 63537]
    Fix setting -w in makefiles"). Previously, setting --no-print-directory
    to MAKEFLAGS only affected child makes, but it is now interpreted in
    the current make as soon as it is set.
    
    [test code]
    
      $ cat /tmp/Makefile
      ifneq ($(SUBMAKE),1)
      MAKEFLAGS += --no-print-directory
      all: ; $(MAKE) SUBMAKE=1
      else
      all: ; :
      endif
    
    [before 8f9e7722ff0f]
    
      $ make -C /tmp
      make: Entering directory '/tmp'
      make SUBMAKE=1
      :
      make: Leaving directory '/tmp'
    
    [after 8f9e7722ff0f]
    
      $ make -C /tmp
      make SUBMAKE=1
      :
    
    Previously, the effect of --no-print-directory was delayed until Kbuild
    started the directory descending, but it is no longer true with GNU Make
    4.4.1.
    
    This commit adds one more recursion to cater to GNU Make >= 4.4.1.
    
    When Kbuild needs to change the working directory, __submake will be
    executed twice.
    
      __submake without --no-print-directory  --> show "Entering directory ..."
      __submake with    --no-print-directory  --> parse the rest of Makefile
    
    We end up with one more recursion than needed for GNU Make < 4.4.1, but
    I do not want to complicate the version check.
    Reported-by: default avatarDavid Howells <dhowells@redhat.com>
    Closes: https://lore.kernel.org/all/2427604.1686237298@warthog.procyon.org.uk/Signed-off-by: default avatarMasahiro Yamada <masahiroy@kernel.org>
    Tested-by: default avatarNicolas Schier <n.schier@avm.de>
    5fc10e76
Makefile 69.6 KB