mirror of https://github.com/bitcoin/bitcoin
parent
e5b49a01f5
commit
7753357a7b
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
export LC_ALL=C
|
||||||
|
set -e -o pipefail
|
||||||
|
|
||||||
|
# shellcheck source=../../shell/realpath.bash
|
||||||
|
source contrib/shell/realpath.bash
|
||||||
|
|
||||||
|
# shellcheck source=../../shell/git-utils.bash
|
||||||
|
source contrib/shell/git-utils.bash
|
||||||
|
|
||||||
|
################
|
||||||
|
# Required non-builtin commands should be invokable
|
||||||
|
################
|
||||||
|
|
||||||
|
check_tools() {
|
||||||
|
for cmd in "$@"; do
|
||||||
|
if ! command -v "$cmd" > /dev/null 2>&1; then
|
||||||
|
echo "ERR: This script requires that '$cmd' is installed and available in your \$PATH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
check_tools cat env readlink dirname basename git
|
||||||
|
|
||||||
|
################
|
||||||
|
# We should be at the top directory of the repository
|
||||||
|
################
|
||||||
|
|
||||||
|
same_dir() {
|
||||||
|
local resolved1 resolved2
|
||||||
|
resolved1="$(bash_realpath "${1}")"
|
||||||
|
resolved2="$(bash_realpath "${2}")"
|
||||||
|
[ "$resolved1" = "$resolved2" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! same_dir "${PWD}" "$(git_root)"; then
|
||||||
|
cat << EOF
|
||||||
|
ERR: This script must be invoked from the top level of the git repository
|
||||||
|
|
||||||
|
Hint: This may look something like:
|
||||||
|
env FOO=BAR ./contrib/guix/guix-<blah>
|
||||||
|
|
||||||
|
EOF
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
################
|
||||||
|
# Set common variables
|
||||||
|
################
|
||||||
|
|
||||||
|
VERSION="${VERSION:-$(git_head_version)}"
|
||||||
|
DISTNAME="${DISTNAME:-bitcoin-${VERSION}}"
|
||||||
|
|
||||||
|
version_base_prefix="${PWD}/guix-build-"
|
||||||
|
VERSION_BASE="${version_base_prefix}${VERSION}" # TOP
|
||||||
|
|
||||||
|
DISTSRC_BASE="${DISTSRC_BASE:-${VERSION_BASE}}"
|
||||||
|
|
||||||
|
OUTDIR_BASE="${OUTDIR_BASE:-${VERSION_BASE}/output}"
|
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
git_root() {
|
||||||
|
git rev-parse --show-toplevel 2> /dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
git_head_version() {
|
||||||
|
local recent_tag
|
||||||
|
if recent_tag="$(git describe --exact-match HEAD 2> /dev/null)"; then
|
||||||
|
echo "${recent_tag#v}"
|
||||||
|
else
|
||||||
|
git rev-parse --short=12 HEAD
|
||||||
|
fi
|
||||||
|
}
|
@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Based on realpath.sh written by Michael Kropat
|
||||||
|
# Found at: https://github.com/mkropat/sh-realpath/blob/65512368b8155b176b67122aa395ac580d9acc5b/realpath.sh
|
||||||
|
|
||||||
|
bash_realpath() {
|
||||||
|
canonicalize_path "$(resolve_symlinks "$1")"
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve_symlinks() {
|
||||||
|
_resolve_symlinks "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
_resolve_symlinks() {
|
||||||
|
_assert_no_path_cycles "$@" || return
|
||||||
|
|
||||||
|
local dir_context path
|
||||||
|
if path=$(readlink -- "$1"); then
|
||||||
|
dir_context=$(dirname -- "$1")
|
||||||
|
_resolve_symlinks "$(_prepend_dir_context_if_necessary "$dir_context" "$path")" "$@"
|
||||||
|
else
|
||||||
|
printf '%s\n' "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_prepend_dir_context_if_necessary() {
|
||||||
|
if [ "$1" = . ]; then
|
||||||
|
printf '%s\n' "$2"
|
||||||
|
else
|
||||||
|
_prepend_path_if_relative "$1" "$2"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_prepend_path_if_relative() {
|
||||||
|
case "$2" in
|
||||||
|
/* ) printf '%s\n' "$2" ;;
|
||||||
|
* ) printf '%s\n' "$1/$2" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
_assert_no_path_cycles() {
|
||||||
|
local target path
|
||||||
|
|
||||||
|
target=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
for path in "$@"; do
|
||||||
|
if [ "$path" = "$target" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
canonicalize_path() {
|
||||||
|
if [ -d "$1" ]; then
|
||||||
|
_canonicalize_dir_path "$1"
|
||||||
|
else
|
||||||
|
_canonicalize_file_path "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_canonicalize_dir_path() {
|
||||||
|
(cd "$1" 2>/dev/null && pwd -P)
|
||||||
|
}
|
||||||
|
|
||||||
|
_canonicalize_file_path() {
|
||||||
|
local dir file
|
||||||
|
dir=$(dirname -- "$1")
|
||||||
|
file=$(basename -- "$1")
|
||||||
|
(cd "$dir" 2>/dev/null && printf '%s/%s\n' "$(pwd -P)" "$file")
|
||||||
|
}
|
Loading…
Reference in new issue