kbuild: revert $(realpath ...) to $(shell cd ... && /bin/pwd)
I thought commit8e9b466799
("kbuild: use $(abspath ...) instead of $(shell cd ... && /bin/pwd)") was a safe conversion, but it changed the behavior. $(abspath ...) / $(realpath ...) does not expand shell special characters, such as '~'. Here is a simple Makefile example: ---------------->8---------------- $(info /bin/pwd: $(shell cd ~/; /bin/pwd)) $(info abspath: $(abspath ~/)) $(info realpath: $(realpath ~/)) all: @: ---------------->8---------------- $ make /bin/pwd: /home/masahiro abspath: /home/masahiro/workspace/~ realpath: This can be a real problem if 'make O=~/foo' is invoked from another Makefile or primitive shell like dash. This commit partially reverts8e9b466799
. Fixes:8e9b466799
("kbuild: use $(abspath ...) instead of $(shell cd ... && /bin/pwd)") Reported-by: Julien Grall <julien.grall@arm.com> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Tested-by: Julien Grall <julien.grall@arm.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
ifneq ($(O),)
|
||||
ifeq ($(origin O), command line)
|
||||
ABSOLUTE_O := $(realpath $(O))
|
||||
dummy := $(if $(ABSOLUTE_O),,$(error O=$(O) does not exist))
|
||||
dummy := $(if $(shell test -d $(O) || echo $(O)),$(error O=$(O) does not exist),)
|
||||
ABSOLUTE_O := $(shell cd $(O) ; pwd)
|
||||
OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/)
|
||||
COMMAND_O := O=$(ABSOLUTE_O)
|
||||
ifeq ($(objtree),)
|
||||
@@ -12,7 +12,7 @@ endif
|
||||
|
||||
# check that the output directory actually exists
|
||||
ifneq ($(OUTPUT),)
|
||||
OUTDIR := $(realpath $(OUTPUT))
|
||||
OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd)
|
||||
$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
|
||||
endif
|
||||
|
||||
|
Reference in New Issue
Block a user