prereq-build: do not replace binaries with symlinks
authorMichael Pratt <mcpratt@pm.me>
Sat, 27 May 2023 21:11:47 +0000 (17:11 -0400)
committerPetr Štetiar <ynezz@true.cz>
Mon, 12 Jun 2023 20:10:22 +0000 (22:10 +0200)
Some programs, like bash and patch, are checked by prereq stage
and have a symlink installed, but then is later built from source.

Now that the prereq-build checks are not successful
just by finding the file alone, it is possible for
a new symlink to overwrite the installed binary.

If a normal file is found in staging_dir/host/bin,
let the check look for the associated stampfile, and if found,
skip creation of a symlink and exit successfully.

Suggested-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
Signed-off-by: Michael Pratt <mcpratt@pm.me>
(cherry picked from commit 729909c07fae4201591e51895833112cb88485e1)

include/prereq.mk

index 45c84e984c6f2942ac34b7b2a5153bcfcf8969ac..ada11a87019920a759b85eeee120ec7f6d2df34a 100644 (file)
@@ -110,6 +110,10 @@ define SetupHostCommand
                                        *" -> $$$$$$$$bin"*) \
                                                [ -x "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0 \
                                                ;; \
+                                       "-"*) \
+                                               find "$(STAGING_DIR_HOST)/stamp" | grep $(strip $(1)) && \
+                                               [ -x "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0 \
+                                               ;; \
                                esac; \
                                ln -sf "$$$$$$$$bin" "$(STAGING_DIR_HOST)/bin/$(strip $(1))"; \
                                exit 0; \