mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-02 09:15:04 +02:00
Merge bitcoin/bitcoin#35131: guix, refactor: Minor script cleanups and improvements
53388773afguix: Remove redundant ShellCheck `source` directives (Hennadii Stepanov)62cf7bc53fguix, refactor: Add `BASE` argument to `*_for_host` functions (Hennadii Stepanov)5d46429e32guix, refactor: Move `distsrc_for_host()` to `prelude.bash` (Hennadii Stepanov)cab65ea9c6guix, refactor: Move duplicated `profiledir_for_host()` to `prelude.bash` (Hennadii Stepanov)faa9d4345fguix, refactor: Move duplicated `outdir_for_host()` to `prelude.bash` (Hennadii Stepanov)6b59fd6b8cguix, refactor: Remove `contains()` function (Hennadii Stepanov)d4c69a7224guix, refactor: Remove unused `out_name()` function (Hennadii Stepanov) Pull request description: While working on https://github.com/bitcoin/bitcoin/pull/35098, I reviewed my notes regarding a few minor Guix script flaws and decided to address them here. This PR: 1. Removes unused code. 2. Reduces code duplication. 3. Improves consistency across function usage. 4. Minimizes ShellCheck directive usage. ACKs for top commit: fanquake: ACK53388773af- the move-only deduplication, and dead code removal seem fine. The other (refactoring) changes seem less well motived Tree-SHA512: d565e31ba49300f3001b04d3143721aced305f41bca6d04c33dc479d568efb2c06d91758619378199f174a40f1306c9418ae80d5478013a65ad96341bea122b1
This commit is contained in:
@@ -139,14 +139,6 @@ fi
|
||||
## Attest ##
|
||||
##############
|
||||
|
||||
# Usage: out_name $outdir
|
||||
#
|
||||
# HOST: The output directory being attested
|
||||
#
|
||||
out_name() {
|
||||
basename "$(dirname "$1")"
|
||||
}
|
||||
|
||||
shasum_already_exists() {
|
||||
cat <<EOF
|
||||
--
|
||||
|
||||
@@ -85,14 +85,6 @@ export HOSTS="${HOSTS:-x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu ri
|
||||
x86_64-w64-mingw32
|
||||
x86_64-apple-darwin arm64-apple-darwin}"
|
||||
|
||||
# Usage: distsrc_for_host HOST
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
#
|
||||
distsrc_for_host() {
|
||||
echo "${DISTSRC_BASE}/distsrc-${VERSION}-${1}"
|
||||
}
|
||||
|
||||
# Accumulate a list of build directories that already exist...
|
||||
hosts_distsrc_exists=""
|
||||
for host in $HOSTS; do
|
||||
@@ -244,18 +236,9 @@ SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git -c log.showSignature=false log --f
|
||||
|
||||
# Precious directories are those which should not be cleaned between successive
|
||||
# guix builds
|
||||
depends_precious_dir_names='SOURCES_PATH BASE_CACHE SDK_PATH'
|
||||
precious_dir_names="${depends_precious_dir_names} OUTDIR_BASE PROFILES_BASE"
|
||||
|
||||
# Usage: contains IFS-SEPARATED-LIST ITEM
|
||||
contains() {
|
||||
for i in ${1}; do
|
||||
if [ "$i" = "${2}" ]; then
|
||||
return 0 # Found!
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
depends_precious_dir_names="SOURCES_PATH BASE_CACHE SDK_PATH"
|
||||
base_dir_names="OUTDIR_BASE PROFILES_BASE"
|
||||
precious_dir_names="${depends_precious_dir_names} ${base_dir_names}"
|
||||
|
||||
# If the user explicitly specified a precious directory, create it so we
|
||||
# can map it into the container
|
||||
@@ -287,11 +270,9 @@ mkdir -p "$VAR_BASE"
|
||||
-- $(printf "print-%s\n" $depends_precious_dir_names)
|
||||
|
||||
# Get remaining precious dir definitions from the environment
|
||||
for precious_dir_name in $precious_dir_names; do
|
||||
for precious_dir_name in $base_dir_names; do
|
||||
precious_dir_path="${!precious_dir_name}"
|
||||
if ! contains "$depends_precious_dir_names" "$precious_dir_name"; then
|
||||
echo "${precious_dir_name}=${precious_dir_path}"
|
||||
fi
|
||||
echo "${precious_dir_name}=${precious_dir_path}"
|
||||
done
|
||||
} > "${VAR_BASE}/precious_dirs"
|
||||
|
||||
@@ -305,22 +286,6 @@ for host in $HOSTS; do
|
||||
make -C "${PWD}/depends" -j"$JOBS" download-"$(host_to_commonname "$host")" ${V:+V=1} ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"}
|
||||
done
|
||||
|
||||
# Usage: outdir_for_host HOST SUFFIX
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
#
|
||||
outdir_for_host() {
|
||||
echo "${OUTDIR_BASE}/${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
# Usage: profiledir_for_host HOST SUFFIX
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
#
|
||||
profiledir_for_host() {
|
||||
echo "${PROFILES_BASE}/${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
|
||||
#########
|
||||
# BUILD #
|
||||
@@ -356,7 +321,6 @@ for host in $HOSTS; do
|
||||
# for the particular $HOST we're building for
|
||||
export HOST="$host"
|
||||
|
||||
# shellcheck disable=SC2030
|
||||
cat << EOF
|
||||
INFO: Building ${VERSION:?not set} for platform triple ${HOST:?not set}:
|
||||
...using reference timestamp: ${SOURCE_DATE_EPOCH:?not set}
|
||||
@@ -364,9 +328,9 @@ INFO: Building ${VERSION:?not set} for platform triple ${HOST:?not set}:
|
||||
...from worktree directory: '${PWD}'
|
||||
...bind-mounted in container to: '/bitcoin'
|
||||
...in build directory: '$(distsrc_for_host "$HOST")'
|
||||
...bind-mounted in container to: '$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")'
|
||||
...bind-mounted in container to: '$(distsrc_for_host "$HOST" "" /distsrc-base)'
|
||||
...outputting in: '$(outdir_for_host "$HOST")'
|
||||
...bind-mounted in container to: '$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST")'
|
||||
...bind-mounted in container to: '$(outdir_for_host "$HOST" "" /outdir-base)'
|
||||
ADDITIONAL FLAGS (if set)
|
||||
ADDITIONAL_GUIX_COMMON_FLAGS: ${ADDITIONAL_GUIX_COMMON_FLAGS}
|
||||
ADDITIONAL_GUIX_ENVIRONMENT_FLAGS: ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS}
|
||||
@@ -440,7 +404,7 @@ EOF
|
||||
# Please read the README.md in the same directory as this file for
|
||||
# more information.
|
||||
#
|
||||
# shellcheck disable=SC2086,SC2031
|
||||
# shellcheck disable=SC2086
|
||||
time-machine shell --manifest="${PWD}/contrib/guix/manifest_build.scm" \
|
||||
--container \
|
||||
--writable-root \
|
||||
@@ -468,8 +432,8 @@ EOF
|
||||
${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} \
|
||||
${BASE_CACHE:+BASE_CACHE="$BASE_CACHE"} \
|
||||
${SDK_PATH:+SDK_PATH="$SDK_PATH"} \
|
||||
DISTSRC="$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")" \
|
||||
OUTDIR="$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST")" \
|
||||
DISTSRC="$(distsrc_for_host "$HOST" "" /distsrc-base)" \
|
||||
OUTDIR="$(outdir_for_host "$HOST" "" /outdir-base)" \
|
||||
DIST_ARCHIVE_BASE=/outdir-base/dist-archive \
|
||||
bash -c "cd /bitcoin && bash contrib/guix/libexec/build.sh"
|
||||
)
|
||||
|
||||
@@ -99,18 +99,10 @@ fi
|
||||
# Default to building for all supported HOSTs (overridable by environment)
|
||||
export HOSTS="${HOSTS:-x86_64-w64-mingw32 x86_64-apple-darwin arm64-apple-darwin}"
|
||||
|
||||
# Usage: distsrc_for_host HOST
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
#
|
||||
distsrc_for_host() {
|
||||
echo "${DISTSRC_BASE}/distsrc-${VERSION}-${1}-codesigned"
|
||||
}
|
||||
|
||||
# Accumulate a list of build directories that already exist...
|
||||
hosts_distsrc_exists=""
|
||||
for host in $HOSTS; do
|
||||
if [ -e "$(distsrc_for_host "$host")" ]; then
|
||||
if [ -e "$(distsrc_for_host "$host" codesigned)" ]; then
|
||||
hosts_distsrc_exists+=" ${host}"
|
||||
fi
|
||||
done
|
||||
@@ -134,7 +126,7 @@ packages cache, the garbage collector roots for Guix environments, and the
|
||||
output directory.
|
||||
EOF
|
||||
for host in $hosts_distsrc_exists; do
|
||||
echo " ${host} '$(distsrc_for_host "$host")'"
|
||||
echo " ${host} '$(distsrc_for_host "$host" codesigned)'"
|
||||
done
|
||||
exit 1
|
||||
else
|
||||
@@ -146,22 +138,18 @@ fi
|
||||
# Codesigning tarballs SHOULD exist
|
||||
################
|
||||
|
||||
# Usage: outdir_for_host HOST SUFFIX
|
||||
# Usage: codesigning_tarball_for_host HOST [BASE]
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
# BASE: Optional. If provided, replaces ${OUTDIR_BASE}
|
||||
#
|
||||
outdir_for_host() {
|
||||
echo "${OUTDIR_BASE}/${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
|
||||
codesigning_tarball_for_host() {
|
||||
case "$1" in
|
||||
*mingw*)
|
||||
echo "$(outdir_for_host "$1")/${DISTNAME}-win64-codesigning.tar.gz"
|
||||
echo "$(outdir_for_host "$1" "" "$2")/${DISTNAME}-win64-codesigning.tar.gz"
|
||||
;;
|
||||
*darwin*)
|
||||
echo "$(outdir_for_host "$1")/${DISTNAME}-${1}-codesigning.tar.gz"
|
||||
echo "$(outdir_for_host "$1" "" "$2")/${DISTNAME}-${1}-codesigning.tar.gz"
|
||||
;;
|
||||
*)
|
||||
exit 1
|
||||
@@ -232,14 +220,6 @@ SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git -c log.showSignature=false log --f
|
||||
OUTDIR_BASE="${OUTDIR_BASE:-${VERSION_BASE}/output}"
|
||||
mkdir -p "$OUTDIR_BASE"
|
||||
|
||||
# Usage: profiledir_for_host HOST SUFFIX
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
#
|
||||
profiledir_for_host() {
|
||||
echo "${PROFILES_BASE}/${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
#########
|
||||
# BUILD #
|
||||
#########
|
||||
@@ -274,16 +254,15 @@ for host in $HOSTS; do
|
||||
# for the particular $HOST we're building for
|
||||
export HOST="$host"
|
||||
|
||||
# shellcheck disable=SC2030
|
||||
cat << EOF
|
||||
INFO: Codesigning ${VERSION:?not set} for platform triple ${HOST:?not set}:
|
||||
...using reference timestamp: ${SOURCE_DATE_EPOCH:?not set}
|
||||
...from worktree directory: '${PWD}'
|
||||
...bind-mounted in container to: '/bitcoin'
|
||||
...in build directory: '$(distsrc_for_host "$HOST")'
|
||||
...bind-mounted in container to: '$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")'
|
||||
...in build directory: '$(distsrc_for_host "$HOST" codesigned)'
|
||||
...bind-mounted in container to: '$(distsrc_for_host "$HOST" codesigned /distsrc-base)'
|
||||
...outputting in: '$(outdir_for_host "$HOST" codesigned)'
|
||||
...bind-mounted in container to: '$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST" codesigned)'
|
||||
...bind-mounted in container to: '$(outdir_for_host "$HOST" codesigned /outdir-base)'
|
||||
...using detached signatures in: '${DETACHED_SIGS_REPO:?not set}'
|
||||
...bind-mounted in container to: '/detached-sigs'
|
||||
EOF
|
||||
@@ -340,7 +319,7 @@ EOF
|
||||
# Please read the README.md in the same directory as this file for
|
||||
# more information.
|
||||
#
|
||||
# shellcheck disable=SC2086,SC2031
|
||||
# shellcheck disable=SC2086
|
||||
time-machine shell --manifest="${PWD}/contrib/guix/manifest_codesign.scm" \
|
||||
--container \
|
||||
--writable-root \
|
||||
@@ -364,11 +343,11 @@ EOF
|
||||
JOBS="$JOBS" \
|
||||
SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \
|
||||
${V:+V=1} \
|
||||
DISTSRC="$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")" \
|
||||
OUTDIR="$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST" codesigned)" \
|
||||
DISTSRC="$(distsrc_for_host "$HOST" codesigned /distsrc-base)" \
|
||||
OUTDIR="$(outdir_for_host "$HOST" codesigned /outdir-base)" \
|
||||
DIST_ARCHIVE_BASE=/outdir-base/dist-archive \
|
||||
DETACHED_SIGS_REPO=/detached-sigs \
|
||||
CODESIGNING_TARBALL="$(OUTDIR_BASE=/outdir-base && codesigning_tarball_for_host "$HOST")" \
|
||||
CODESIGNING_TARBALL="$(codesigning_tarball_for_host "$HOST" /outdir-base)" \
|
||||
bash -c "cd /bitcoin && bash contrib/guix/libexec/codesign.sh"
|
||||
)
|
||||
|
||||
|
||||
@@ -2,10 +2,7 @@
|
||||
export LC_ALL=C
|
||||
set -e -o pipefail
|
||||
|
||||
# shellcheck source=contrib/shell/realpath.bash
|
||||
source contrib/shell/realpath.bash
|
||||
|
||||
# shellcheck source=contrib/shell/git-utils.bash
|
||||
source contrib/shell/git-utils.bash
|
||||
|
||||
################
|
||||
@@ -80,6 +77,34 @@ time-machine() {
|
||||
-- "$@"
|
||||
}
|
||||
|
||||
# Usage: distsrc_for_host HOST [SUFFIX] [BASE]
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
# SUFFIX: Optional. If provided, appended to the directory name as "-SUFFIX"
|
||||
# BASE: Optional. If provided, replaces ${DISTSRC_BASE}
|
||||
#
|
||||
distsrc_for_host() {
|
||||
echo "${3:-${DISTSRC_BASE}}/distsrc-${VERSION}-${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
# Usage: outdir_for_host HOST [SUFFIX] [BASE]
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
# SUFFIX: Optional. If provided, appended to the directory name as "-SUFFIX"
|
||||
# BASE: Optional. If provided, replaces ${OUTDIR_BASE}
|
||||
#
|
||||
outdir_for_host() {
|
||||
echo "${3:-${OUTDIR_BASE}}/${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
# Usage: profiledir_for_host HOST [SUFFIX]
|
||||
#
|
||||
# HOST: The current platform triple we're building for
|
||||
# SUFFIX: Optional. If provided, appended to the directory name as "-SUFFIX"
|
||||
#
|
||||
profiledir_for_host() {
|
||||
echo "${PROFILES_BASE}/${1}${2:+-${2}}"
|
||||
}
|
||||
|
||||
################
|
||||
# Set common variables
|
||||
|
||||
Reference in New Issue
Block a user