diff options
| author | Amaury Pouly <amaury.pouly@gmail.com> | 2017-05-12 19:50:56 +1000 |
|---|---|---|
| committer | Amaury Pouly <amaury.pouly@gmail.com> | 2017-05-12 20:28:57 +1000 |
| commit | b959655822df6c5610372c9da54ea93f93ac87e9 (patch) | |
| tree | f24104fb9da7a911ba7c9fb8a3e0137ddc7d1eac | |
| parent | 65c6a14e5fa41906176f93aa04512508e719d970 (diff) | |
| download | rockbox-b959655822df6c5610372c9da54ea93f93ac87e9.zip rockbox-b959655822df6c5610372c9da54ea93f93ac87e9.tar.gz rockbox-b959655822df6c5610372c9da54ea93f93ac87e9.tar.bz2 rockbox-b959655822df6c5610372c9da54ea93f93ac87e9.tar.xz | |
Fix unsafe substitutions in Makefile.
Strange things can happen in the (unlikely) case that ROOTDIR=/rockbox
Change-Id: I085f928fd859b307667e8fccf40b29a9c325f7ae
| -rw-r--r-- | apps/bitmaps/bitmaps.make | 2 | ||||
| -rw-r--r-- | tools/functions.make | 15 | ||||
| -rw-r--r-- | tools/root.make | 2 |
3 files changed, 17 insertions, 2 deletions
diff --git a/apps/bitmaps/bitmaps.make b/apps/bitmaps/bitmaps.make index 159c31b..a8165b9 100644 --- a/apps/bitmaps/bitmaps.make +++ b/apps/bitmaps/bitmaps.make @@ -25,7 +25,7 @@ ifneq ($(strip $(BMP2RB_REMOTENATIVE)),) BMP += $(call preprocess, $(BITMAPDIR)/remote_native/SOURCES) endif -BMPOBJ = $(BMP:$(ROOTDIR)/%.bmp=$(BUILDDIR)/%.o) +BMPOBJ = $(call full_path_subst,$(ROOTDIR)/%.bmp,$(BUILDDIR)/%.o,$(BMP)) BMPHFILES = $(BMPINCDIR)/usblogo.h $(BMPINCDIR)/remote_usblogo.h \ $(BMPINCDIR)/default_icons.h $(BMPINCDIR)/remote_default_icons.h \ diff --git a/tools/functions.make b/tools/functions.make index 2a26e48..806e1a2 100644 --- a/tools/functions.make +++ b/tools/functions.make @@ -73,3 +73,18 @@ ifeq ($(call info),old) export info=echo "$$(1)"; endif +# path substituion can be surprisingly tricky, indeed the following almost +# always work but not quite: +# BMPOBJ = $(BMP:$(ROOTDIR)/%.bmp=$(BUILDDIR)/%.o) +# indeed if +# ROOTDIR=/rockbox +# BUILDDIR=/rockbox/build-bla +# then: +# /rockbox/apps/bitmaps/rockboxlogo-bla.bmp -> /rockbox/apps/bitmaps/rockbox/build-blalogo.o +# this function ensure that this type of problems does not occur +# +# usage: $(call full_path_subst,patterm,replacement,text) +# +# example: $(call full_path_subst,$(ROOTDIR)/%.bmp,$(BUILDDIR)/%.o,$(BMP)) +NO_MATCH=this_string_will_never_match_anything +full_path_subst=$(patsubst $(NO_MATCH)/%,%, $(patsubst $(NO_MATCH)/$(1), $(2), $(addprefix $(NO_MATCH)/, $(3)))) diff --git a/tools/root.make b/tools/root.make index 2deae8c..c9f4a2e 100644 --- a/tools/root.make +++ b/tools/root.make @@ -157,7 +157,7 @@ endif # CORE_GCSECTIONS OBJ := $(SRC:.c=.o) OBJ := $(OBJ:.S=.o) OBJ += $(BMP:.bmp=.o) -OBJ := $(subst $(ROOTDIR),$(BUILDDIR),$(OBJ)) +OBJ := $(call full_path_subst,$(ROOTDIR)/%,$(BUILDDIR)/%,$(OBJ)) build: $(TOOLS) $(BUILDDIR)/$(BINARY) $(CODECS) $(ROCKS) $(ARCHOSROM) $(RBINFO) |