Merge #20629: depends: Improve id string robustness

5200929bfe depends: Include GUIX_ENVIRONMENT in id string (Carl Dong)
4c7d418588 depends: Improve id string robustness (Carl Dong)
b3bdff42b5 build: Proper quoting for var printing targets (Carl Dong)

Pull request description:

  ```
  Environment variables and search paths can drastically effect the
  operation of build tools.

  Include these in our id string to mitigate against false cache hits.
  ```

  Note to builders: This will invalidate all depends output caches in `BASE_CACHE`

ACKs for top commit:
  laanwj:
    re-ACK 5200929bfe

Tree-SHA512: e70c98da89cde90dc54bc3be89b925787cf94bbf246e27cc9345816b312073d78a02215448f731f21d8cf033c455234a2377ff1d66c00e1f3db69c9c9687d027
This commit is contained in:
Wladimir J. van der Laan 2021-02-15 11:42:32 +01:00
commit 51397c0ff7
No known key found for this signature in database
GPG Key ID: 1E4AED62986CD25D
3 changed files with 24 additions and 13 deletions

View File

@ -4,7 +4,7 @@
# Pattern rule to print variables, e.g. make print-top_srcdir # Pattern rule to print variables, e.g. make print-top_srcdir
print-%: print-%:
@echo $* = $($*) @echo '$*' = '$($*)'
ACLOCAL_AMFLAGS = -I build-aux/m4 ACLOCAL_AMFLAGS = -I build-aux/m4
SUBDIRS = src SUBDIRS = src

View File

@ -2,7 +2,7 @@
# Pattern rule to print variables, e.g. make print-top_srcdir # Pattern rule to print variables, e.g. make print-top_srcdir
print-%: print-%:
@echo $* = $($*) @echo '$*' = '$($*)'
# When invoking a sub-make, keep only the command line variable definitions # When invoking a sub-make, keep only the command line variable definitions
# matching the pattern in the filter function. # matching the pattern in the filter function.
@ -112,19 +112,27 @@ include builders/$(build_os).mk
include builders/default.mk include builders/default.mk
include packages/packages.mk include packages/packages.mk
full_env=$(shell printenv)
build_id_string:=$(BUILD_ID_SALT) build_id_string:=$(BUILD_ID_SALT)
build_id_string+=$(shell $(build_CC) --version 2>/dev/null)
build_id_string+=$(shell $(build_AR) --version 2>/dev/null) # GCC only prints COLLECT_LTO_WRAPPER when invoked with just "-v", but we want
build_id_string+=$(shell $(build_CXX) --version 2>/dev/null) # the information from "-v -E -" as well, so just include both.
build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null) #
build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null) # '3>&1 1>&2 2>&3 > /dev/null' is supposed to swap stdin and stdout and silence
# stdin, since we only want the stderr output
build_id_string+=$(shell $(build_CC) -v < /dev/null 3>&1 1>&2 2>&3 > /dev/null) $(shell $(build_CC) -v -E - < /dev/null 3>&1 1>&2 2>&3 > /dev/null)
build_id_string+=$(shell $(build_AR) --version 2>/dev/null) $(filter AR_%,$(full_env)) ZERO_AR_DATE=$(ZERO_AR_DATE)
build_id_string+=$(shell $(build_CXX) -v < /dev/null 3>&1 1>&2 2>&3 > /dev/null) $(shell $(build_CXX) -v -E - < /dev/null 3>&1 1>&2 2>&3 > /dev/null)
build_id_string+=$(shell $(build_RANLIB) --version 2>/dev/null) $(filter RANLIB_%,$(full_env))
build_id_string+=$(shell $(build_STRIP) --version 2>/dev/null) $(filter STRIP_%,$(full_env))
$(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT) $(host_arch)_$(host_os)_id_string:=$(HOST_ID_SALT)
$(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_CC) -v < /dev/null 3>&1 1>&2 2>&3 > /dev/null) $(shell $(host_CC) -v -E - < /dev/null 3>&1 1>&2 2>&3 > /dev/null)
$(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_AR) --version 2>/dev/null) $(filter AR_%,$(full_env)) ZERO_AR_DATE=$(ZERO_AR_DATE)
$(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) -v < /dev/null 3>&1 1>&2 2>&3 > /dev/null) $(shell $(host_CXX) -v -E - < /dev/null 3>&1 1>&2 2>&3 > /dev/null)
$(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) $(filter RANLIB_%,$(full_env))
$(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) $(filter STRIP_%,$(full_env))
ifneq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) ifneq ($(strip $(FORCE_USE_SYSTEM_CLANG)),)
# Make sure that cache is invalidated when switching between system and # Make sure that cache is invalidated when switching between system and
@ -133,6 +141,9 @@ build_id_string+=system_clang
$(host_arch)_$(host_os)_id_string+=system_clang $(host_arch)_$(host_os)_id_string+=system_clang
endif endif
build_id_string+=GUIX_ENVIRONMENT=$(GUIX_ENVIRONMENT)
$(host_arch)_$(host_os)_id_string+=GUIX_ENVIRONMENT=$(GUIX_ENVIRONMENT)
qrencode_packages_$(NO_QR) = $(qrencode_packages) qrencode_packages_$(NO_QR) = $(qrencode_packages)
qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) $(qrencode_packages_) qt_packages_$(NO_QT) = $(qt_packages) $(qt_$(host_os)_packages) $(qt_$(host_arch)_$(host_os)_packages) $(qrencode_packages_)

View File

@ -4,7 +4,7 @@
# Pattern rule to print variables, e.g. make print-top_srcdir # Pattern rule to print variables, e.g. make print-top_srcdir
print-%: print-%:
@echo $* = $($*) @echo '$*' = '$($*)'
DIST_SUBDIRS = secp256k1 univalue DIST_SUBDIRS = secp256k1 univalue