install-files.mk: Fix installation of filenames with whitespace

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2018-10-19 19:23:43 +00:00
commit 56afe21ee0

View file

@ -3,7 +3,7 @@ TARGET_DIR ?= $(PREFIX)/share
SOURCE_BASE ?= .
RELPATHS = $(foreach f,$(SOURCE_FILES),$(shell realpath -s --relative-to $(SOURCE_BASE) $f))
RELPATHS = $(foreach f,$(SOURCE_FILES),$(shell realpath -s --relative-to "$(SOURCE_BASE)" "$f"))
INSTALLED_FILES = $(addprefix $(TARGET_DIR)/,$(RELPATHS))
include $(MODDIR)/make/defs.mk
@ -28,12 +28,12 @@ done.clean:
$(RM) -f *.done
$(TARGET_DIR)/%: $(SOURCE_BASE)/%
@if [ -d $< ]; then \
echo $(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) $@ ;\
$(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) $@ ;\
@if [ -d "$<" ]; then \
echo $(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) "$@" ;\
$(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) "$@" ;\
else \
echo $(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) $< $@ ;\
$(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) $< $@ ;\
echo $(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) "$<" "$@" ;\
$(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) "$<" "$@" ;\
fi
install.done: $(INSTALLED_FILES)
@ -42,11 +42,11 @@ install.done: $(INSTALLED_FILES)
# this used to work fine until an enormous $(SOURCE_FILES) was encountered
install-old.done:
for f in $(SOURCE_FILES); do \
relpath=`realpath -s --relative-to $(SOURCE_BASE) $$f` ;\
if [ -d $$f ]; then \
$(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) $(TARGET_DIR)/$$relpath ;\
relpath=`realpath -s --relative-to "$(SOURCE_BASE)" "$$f"` ;\
if [ -d "$$f" ]; then \
$(INSTALL) -d -D -m $(TARGET_DIR_MODE) -o $(TARGET_DIR_OWNER) -g $(TARGET_DIR_GROUP) "$(TARGET_DIR)/$$relpath" ;\
else \
$(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) $$f $(TARGET_DIR)/$$relpath ;\
$(INSTALL) -p -D -m $(TARGET_MODE) -o $(TARGET_OWNER) -g $(TARGET_GROUP) "$$f" "$(TARGET_DIR)/$$relpath" ;\
fi ;\
done
touch $@