kbuild: use $(abspath ...) instead of $(shell cd ... && /bin/pwd)

Kbuild conventionally uses $(shell cd ... && /bin/pwd) idiom to get
the absolute path of the directory because GNU Make 3.80, the minimal
supported version at that time, did not support $(abspath ...) or
$(realpath ...).

Commit 37d69ee30808 ("docs: bump minimal GNU Make version to 3.81")
dropped the GNU Make 3.80 support, so we are now allowed to use those
make-builtin helpers.

This conversion will provide better portability without relying on
the pwd command or its location /bin/pwd.

I am intentionally using $(realpath ...) instead $(abspath ...) in
some places. The difference between the two is $(realpath ...)
returns an empty string if the given path does not exist. It is
convenient in places where we need to error-out if the makefile fails
to create an output directory.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Acked-by: Thierry Reding <treding@nvidia.com>

+11 -11
+6 -6
Makefile
··· 130 130 ifneq ($(KBUILD_OUTPUT),) 131 131 # check that the output directory actually exists 132 132 saved-output := $(KBUILD_OUTPUT) 133 - KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \ 134 - && /bin/pwd) 133 + $(shell [ -d $(KBUILD_OUTPUT) ] || mkdir -p $(KBUILD_OUTPUT)) 134 + KBUILD_OUTPUT := $(realpath $(KBUILD_OUTPUT)) 135 135 $(if $(KBUILD_OUTPUT),, \ 136 136 $(error failed to create output directory "$(saved-output)")) 137 137 ··· 978 978 $(Q)$(MAKE) -f $(srctree)/Makefile headers_check 979 979 endif 980 980 ifdef CONFIG_GDB_SCRIPTS 981 - $(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py 981 + $(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py) 982 982 endif 983 983 ifdef CONFIG_TRIM_UNUSED_KSYMS 984 984 $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \ ··· 1237 1237 @rm -rf $(MODLIB)/kernel 1238 1238 @rm -f $(MODLIB)/source 1239 1239 @mkdir -p $(MODLIB)/kernel 1240 - @ln -s `cd $(srctree) && /bin/pwd` $(MODLIB)/source 1240 + @ln -s $(abspath $(srctree)) $(MODLIB)/source 1241 1241 @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \ 1242 1242 rm -f $(MODLIB)/build ; \ 1243 1243 ln -s $(CURDIR) $(MODLIB)/build ; \ ··· 1629 1629 # Clear a bunch of variables before executing the submake 1630 1630 tools/: FORCE 1631 1631 $(Q)mkdir -p $(objtree)/tools 1632 - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ 1632 + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(src)/tools/ 1633 1633 1634 1634 tools/%: FORCE 1635 1635 $(Q)mkdir -p $(objtree)/tools 1636 - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $* 1636 + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(src)/tools/ $* 1637 1637 1638 1638 # Single targets 1639 1639 # ---------------------------------------------------------------------------
+1 -1
scripts/gdb/linux/Makefile
··· 1 1 always := gdb-scripts 2 2 3 - SRCTREE := $(shell cd $(srctree) && /bin/pwd) 3 + SRCTREE := $(abspath $(srctree)) 4 4 5 5 $(obj)/gdb-scripts: 6 6 ifneq ($(KBUILD_SRC),)
+1 -1
tools/power/cpupower/Makefile
··· 26 26 27 27 ifneq ($(OUTPUT),) 28 28 # check that the output directory actually exists 29 - OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd) 29 + OUTDIR := $(realpath $(OUTPUT)) 30 30 $(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist)) 31 31 endif 32 32
+3 -3
tools/scripts/Makefile.include
··· 1 1 ifneq ($(O),) 2 2 ifeq ($(origin O), command line) 3 - dummy := $(if $(shell test -d $(O) || echo $(O)),$(error O=$(O) does not exist),) 4 - ABSOLUTE_O := $(shell cd $(O) ; pwd) 3 + ABSOLUTE_O := $(realpath $(O)) 4 + dummy := $(if $(ABSOLUTE_O),,$(error O=$(O) does not exist)) 5 5 OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/) 6 6 COMMAND_O := O=$(ABSOLUTE_O) 7 7 ifeq ($(objtree),) ··· 12 12 13 13 # check that the output directory actually exists 14 14 ifneq ($(OUTPUT),) 15 - OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd) 15 + OUTDIR := $(realpath $(OUTPUT)) 16 16 $(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist)) 17 17 endif 18 18