mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-19 21:58:04 +00:00
c1ef10c8d8
To avoid replacing host built binaries with symlinks again, a check for an appropriate stamp was added in729909c07f
("prereq-build: do not replace binaries with symlinks"). Unfortunately the stamp directory does not exist in the SDK, so the fix was ineffective there. This caused the packages builders to e.g. use the host tar again, which in turn made the tarballs created different since it may lack reproducibility fixes, or implement these differently, causing spurious hash failures on source repository based packages. Fix this by dropping the stamp dir check, and just check that the file is usable. Fixes:729909c07f
("prereq-build: do not replace binaries with symlinks") Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
132 lines
3.1 KiB
Makefile
132 lines
3.1 KiB
Makefile
# SPDX-License-Identifier: GPL-2.0-only
|
|
#
|
|
# Copyright (C) 2006-2020 OpenWrt.org
|
|
|
|
ifneq ($(__prereq_inc),1)
|
|
__prereq_inc:=1
|
|
|
|
prereq:
|
|
if [ -f $(TMP_DIR)/.prereq-error ]; then \
|
|
echo; \
|
|
cat $(TMP_DIR)/.prereq-error; \
|
|
rm -f $(TMP_DIR)/.prereq-error; \
|
|
echo; \
|
|
false; \
|
|
fi
|
|
|
|
.SILENT: prereq
|
|
endif
|
|
|
|
PREREQ_PREV=
|
|
|
|
# 1: display name
|
|
# 2: error message
|
|
define Require
|
|
export PREREQ_CHECK=1
|
|
ifeq ($$(CHECK_$(1)),)
|
|
prereq: prereq-$(1)
|
|
|
|
prereq-$(1): $(if $(PREREQ_PREV),prereq-$(PREREQ_PREV)) FORCE
|
|
printf "Checking '$(1)'... "
|
|
if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) PATH="$(ORIG_PATH)" >/dev/null 2>/dev/null; then \
|
|
echo 'ok.'; \
|
|
elif $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) PATH="$(ORIG_PATH)" >/dev/null 2>/dev/null; then \
|
|
echo 'updated.'; \
|
|
else \
|
|
echo 'failed.'; \
|
|
echo "$(PKG_NAME): $(strip $(2))" >> $(TMP_DIR)/.prereq-error; \
|
|
fi
|
|
|
|
check-$(1): FORCE
|
|
$(call Require/$(1))
|
|
CHECK_$(1):=1
|
|
|
|
.SILENT: prereq-$(1) check-$(1)
|
|
.NOTPARALLEL:
|
|
endif
|
|
|
|
PREREQ_PREV=$(1)
|
|
endef
|
|
|
|
|
|
define RequireCommand
|
|
define Require/$(1)
|
|
command -v $(1)
|
|
endef
|
|
|
|
$$(eval $$(call Require,$(1),$(2)))
|
|
endef
|
|
|
|
define RequireHeader
|
|
define Require/$(1)
|
|
[ -e "$(1)" ]
|
|
endef
|
|
|
|
$$(eval $$(call Require,$(1),$(2)))
|
|
endef
|
|
|
|
# 1: header to test
|
|
# 2: failure message
|
|
# 3: optional compile time test
|
|
# 4: optional link library test (example -lncurses)
|
|
define RequireCHeader
|
|
define Require/$(1)
|
|
echo 'int main(int argc, char **argv) { $(3); return 0; }' | gcc -include $(1) -x c -o $(TMP_DIR)/a.out - $(4)
|
|
endef
|
|
|
|
$$(eval $$(call Require,$(1),$(2)))
|
|
endef
|
|
|
|
define QuoteHostCommand
|
|
'$(subst ','"'"',$(strip $(1)))'
|
|
endef
|
|
|
|
# 1: display name
|
|
# 2: failure message
|
|
# 3: test
|
|
define TestHostCommand
|
|
define Require/$(1)
|
|
($(3)) >/dev/null 2>/dev/null
|
|
endef
|
|
|
|
$$(eval $$(call Require,$(1),$(2)))
|
|
endef
|
|
|
|
# 1: canonical name
|
|
# 2: failure message
|
|
# 3+: candidates
|
|
define SetupHostCommand
|
|
define Require/$(1)
|
|
mkdir -p "$(STAGING_DIR_HOST)/bin"; \
|
|
for cmd in $(call QuoteHostCommand,$(3)) $(call QuoteHostCommand,$(4)) \
|
|
$(call QuoteHostCommand,$(5)) $(call QuoteHostCommand,$(6)) \
|
|
$(call QuoteHostCommand,$(7)) $(call QuoteHostCommand,$(8)) \
|
|
$(call QuoteHostCommand,$(9)) $(call QuoteHostCommand,$(10)) \
|
|
$(call QuoteHostCommand,$(11)) $(call QuoteHostCommand,$(12)); do \
|
|
if [ -n "$$$$$$$$cmd" ]; then \
|
|
bin="$$$$$$$$(command -v "$$$$$$$${cmd%% *}")"; \
|
|
if [ -x "$$$$$$$$bin" ] && eval "$$$$$$$$cmd" >/dev/null 2>/dev/null; then \
|
|
case "$$$$$$$$(ls -dl -- $(STAGING_DIR_HOST)/bin/$(strip $(1)))" in \
|
|
*" -> $$$$$$$$bin"*) \
|
|
[ -x "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0 \
|
|
;; \
|
|
"-"*) \
|
|
[ -x "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0 \
|
|
;; \
|
|
*" -> /"*) \
|
|
;; \
|
|
*" -> "*) \
|
|
[ -x "$(STAGING_DIR_HOST)/bin/$(strip $(1))" ] && exit 0 \
|
|
;; \
|
|
esac; \
|
|
ln -sf "$$$$$$$$bin" "$(STAGING_DIR_HOST)/bin/$(strip $(1))"; \
|
|
exit 1; \
|
|
fi; \
|
|
fi; \
|
|
done; \
|
|
exit 1
|
|
endef
|
|
|
|
$$(eval $$(call Require,$(1),$(if $(2),$(2),Missing $(1) command)))
|
|
endef
|