early-access version 2853
This commit is contained in:
267
externals/vcpkg/scripts/bootstrap.sh
vendored
Executable file
267
externals/vcpkg/scripts/bootstrap.sh
vendored
Executable file
@@ -0,0 +1,267 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Find .vcpkg-root.
|
||||
vcpkgRootDir=$(X= cd -- "$(dirname -- "$0")" && pwd -P)
|
||||
while [ "$vcpkgRootDir" != "/" ] && ! [ -e "$vcpkgRootDir/.vcpkg-root" ]; do
|
||||
vcpkgRootDir="$(dirname "$vcpkgRootDir")"
|
||||
done
|
||||
|
||||
# Parse arguments.
|
||||
vcpkgDisableMetrics="OFF"
|
||||
vcpkgUseSystem=false
|
||||
vcpkgUseMuslC="OFF"
|
||||
for var in "$@"
|
||||
do
|
||||
if [ "$var" = "-disableMetrics" -o "$var" = "--disableMetrics" ]; then
|
||||
vcpkgDisableMetrics="ON"
|
||||
elif [ "$var" = "-useSystemBinaries" -o "$var" = "--useSystemBinaries" ]; then
|
||||
echo "Warning: -useSystemBinaries no longer has any effect; ignored. Note that the VCPKG_USE_SYSTEM_BINARIES environment variable behavior is not changed."
|
||||
elif [ "$var" = "-allowAppleClang" -o "$var" = "--allowAppleClang" ]; then
|
||||
echo "Warning: -allowAppleClang no longer has any effect; ignored."
|
||||
elif [ "$var" = "-buildTests" ]; then
|
||||
echo "Warning: -buildTests no longer has any effect; ignored."
|
||||
elif [ "$var" = "-musl" ]; then
|
||||
vcpkgUseMuslC="ON"
|
||||
elif [ "$var" = "-help" -o "$var" = "--help" ]; then
|
||||
echo "Usage: ./bootstrap-vcpkg.sh [options]"
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -help Display usage help"
|
||||
echo " -disableMetrics Mark this vcpkg root to disable metrics."
|
||||
echo " -musl Use the musl binary rather than the glibc binary on Linux."
|
||||
exit 1
|
||||
else
|
||||
echo "Unknown argument $var. Use '-help' for help."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Enable using this entry point on windows from git bash by redirecting to the .bat file.
|
||||
unixName=$(uname -s | sed 's/MINGW.*_NT.*/MINGW_NT/')
|
||||
if [ "$unixName" = "MINGW_NT" ]; then
|
||||
if [ "$vcpkgDisableMetrics" = "ON" ]; then
|
||||
args="-disableMetrics"
|
||||
else
|
||||
args=""
|
||||
fi
|
||||
|
||||
vcpkgRootDir=$(cygpath -aw "$vcpkgRootDir")
|
||||
cmd "/C $vcpkgRootDir\\bootstrap-vcpkg.bat $args" || exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Determine the downloads directory.
|
||||
if [ -z ${VCPKG_DOWNLOADS+x} ]; then
|
||||
downloadsDir="$vcpkgRootDir/downloads"
|
||||
else
|
||||
downloadsDir="$VCPKG_DOWNLOADS"
|
||||
if [ ! -d "$VCPKG_DOWNLOADS" ]; then
|
||||
echo "VCPKG_DOWNLOADS was set to '$VCPKG_DOWNLOADS', but that was not a directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
# Check for minimal prerequisites.
|
||||
vcpkgCheckRepoTool()
|
||||
{
|
||||
__tool=$1
|
||||
if ! command -v "$__tool" >/dev/null 2>&1 ; then
|
||||
echo "Could not find $__tool. Please install it (and other dependencies) with:"
|
||||
echo "On Debian and Ubuntu derivatives:"
|
||||
echo " sudo apt-get install curl zip unzip tar"
|
||||
echo "On recent Red Hat and Fedora derivatives:"
|
||||
echo " sudo dnf install curl zip unzip tar"
|
||||
echo "On older Red Hat and Fedora derivatives:"
|
||||
echo " sudo yum install curl zip unzip tar"
|
||||
echo "On SUSE Linux and derivatives:"
|
||||
echo " sudo zypper install curl zip unzip tar"
|
||||
echo "On Arch Linux and derivatives:"
|
||||
echo " sudo pacman -S curl zip unzip tar cmake ninja"
|
||||
echo "On Alpine:"
|
||||
echo " apk add build-base cmake ninja zip unzip curl git"
|
||||
echo " (and export VCPKG_FORCE_SYSTEM_BINARIES=1)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
vcpkgCheckRepoTool curl
|
||||
vcpkgCheckRepoTool zip
|
||||
vcpkgCheckRepoTool unzip
|
||||
vcpkgCheckRepoTool tar
|
||||
|
||||
UNAME="$(uname)"
|
||||
ARCH="$(uname -m)"
|
||||
|
||||
if [ -e /etc/alpine-release ]; then
|
||||
vcpkgUseSystem="ON"
|
||||
vcpkgUseMuslC="ON"
|
||||
fi
|
||||
|
||||
if [ "$UNAME" = "OpenBSD" ]; then
|
||||
vcpkgUseSystem="ON"
|
||||
|
||||
if [ -z "$CXX" ]; then
|
||||
CXX=/usr/bin/clang++
|
||||
fi
|
||||
if [ -z "$CC" ]; then
|
||||
CC=/usr/bin/clang
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$vcpkgUseSystem" = "ON" ]; then
|
||||
vcpkgCheckRepoTool cmake
|
||||
vcpkgCheckRepoTool ninja
|
||||
vcpkgCheckRepoTool git
|
||||
vcpkgCheckRepoTool gcc
|
||||
fi
|
||||
|
||||
# Determine what we are going to do to bootstrap:
|
||||
# MacOS -> Download vcpkg-macos
|
||||
# Linux
|
||||
# useMuslC -> download vcpkg-muslc
|
||||
# amd64 -> download vcpkg-glibc
|
||||
# Otherwise
|
||||
# Download and build from source
|
||||
|
||||
# Choose the vcpkg binary to download
|
||||
vcpkgDownloadTool="ON"
|
||||
vcpkgToolReleaseTag="2022-06-17"
|
||||
if [ "$UNAME" = "Darwin" ]; then
|
||||
echo "Downloading vcpkg-macos..."
|
||||
vcpkgToolReleaseSha="66ef24562d0a165d9462a3b3cc2e6ff728e26ab529aa4406dffb107492c1e91277fee4b187e776ae7a7730c5ff8cfb1063822852493b156e03151c730b509b2b"
|
||||
vcpkgToolName="vcpkg-macos"
|
||||
elif [ "$vcpkgUseMuslC" = "ON" ]; then
|
||||
echo "Downloading vcpkg-muslc..."
|
||||
vcpkgToolReleaseSha="28533a64c0d876fdf78f7ed301847063b3ff0c2593cac6df3b0d38a5e09174cd8770caf985476523dab6f740b54c7400c8542e8df63fd094b5956a35d8579989"
|
||||
vcpkgToolName="vcpkg-muslc"
|
||||
elif [ "$ARCH" = "x86_64" ]; then
|
||||
echo "Downloading vcpkg-glibc..."
|
||||
vcpkgToolReleaseSha="c85ec50df0de9648e1c5bdb690aa38d6c2ad2d9e5f92cd77648966f44f9b45418374925aacf5bbff0c608145f58dc9cd3391368e441e8254145c39ab1ae1fd33"
|
||||
vcpkgToolName="vcpkg-glibc"
|
||||
else
|
||||
echo "Unable to determine a binary release of vcpkg; attempting to build from source."
|
||||
vcpkgDownloadTool="OFF"
|
||||
vcpkgToolReleaseSha="e52a359617c283932b4e4a33f4fa288fbe06edd676e4248b5543b83573a378dbf30c021395045e0726e69d4b5d41b012fd61af5eb4d586a1fb793c16bd64b77c"
|
||||
fi
|
||||
|
||||
# Do the download or build.
|
||||
vcpkgCheckEqualFileHash()
|
||||
{
|
||||
url=$1; filePath=$2; expectedHash=$3
|
||||
|
||||
if command -v "sha512sum" >/dev/null 2>&1 ; then
|
||||
actualHash=$(sha512sum "$filePath")
|
||||
else
|
||||
# sha512sum is not available by default on osx
|
||||
# shasum is not available by default on Fedora
|
||||
actualHash=$(shasum -a 512 "$filePath")
|
||||
fi
|
||||
|
||||
actualHash="${actualHash%% *}" # shasum returns [hash filename], so get the first word
|
||||
|
||||
if ! [ "$expectedHash" = "$actualHash" ]; then
|
||||
echo ""
|
||||
echo "File does not have expected hash:"
|
||||
echo " url: [ $url ]"
|
||||
echo " File path: [ $downloadPath ]"
|
||||
echo " Expected hash: [ $sha512 ]"
|
||||
echo " Actual hash: [ $actualHash ]"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
vcpkgDownloadFile()
|
||||
{
|
||||
url=$1; downloadPath=$2 sha512=$3
|
||||
rm -rf "$downloadPath.part"
|
||||
curl -L $url --tlsv1.2 --create-dirs --retry 3 --output "$downloadPath.part" --silent --show-error --fail || exit 1
|
||||
|
||||
vcpkgCheckEqualFileHash $url "$downloadPath.part" $sha512
|
||||
chmod +x "$downloadPath.part"
|
||||
mv "$downloadPath.part" "$downloadPath"
|
||||
}
|
||||
|
||||
vcpkgExtractTar()
|
||||
{
|
||||
archive=$1; toPath=$2
|
||||
rm -rf "$toPath" "$toPath.partial"
|
||||
mkdir -p "$toPath.partial"
|
||||
$(cd "$toPath.partial" && tar xzf "$archive")
|
||||
mv "$toPath.partial" "$toPath"
|
||||
}
|
||||
|
||||
if [ "$vcpkgDownloadTool" = "ON" ]; then
|
||||
vcpkgDownloadFile "https://github.com/microsoft/vcpkg-tool/releases/download/$vcpkgToolReleaseTag/$vcpkgToolName" "$vcpkgRootDir/vcpkg" $vcpkgToolReleaseSha
|
||||
else
|
||||
if [ "x$CXX" = "x" ]; then
|
||||
if which g++-12 >/dev/null 2>&1; then
|
||||
CXX=g++-12
|
||||
elif which g++-11 >/dev/null 2>&1; then
|
||||
CXX=g++-11
|
||||
elif which g++-10 >/dev/null 2>&1; then
|
||||
CXX=g++-10
|
||||
elif which g++-9 >/dev/null 2>&1; then
|
||||
CXX=g++-9
|
||||
elif which g++-8 >/dev/null 2>&1; then
|
||||
CXX=g++-8
|
||||
elif which g++-7 >/dev/null 2>&1; then
|
||||
CXX=g++-7
|
||||
elif which g++-6 >/dev/null 2>&1; then
|
||||
CXX=g++-6
|
||||
elif which g++ >/dev/null 2>&1; then
|
||||
CXX=g++
|
||||
fi
|
||||
# If we can't find g++, allow CMake to do the look-up
|
||||
fi
|
||||
|
||||
vcpkgToolReleaseTarball="$vcpkgToolReleaseTag.tar.gz"
|
||||
vcpkgToolUrl="https://github.com/microsoft/vcpkg-tool/archive/$vcpkgToolReleaseTarball"
|
||||
baseBuildDir="$vcpkgRootDir/buildtrees/_vcpkg"
|
||||
buildDir="$baseBuildDir/build"
|
||||
tarballPath="$downloadsDir/$vcpkgToolReleaseTarball"
|
||||
srcBaseDir="$baseBuildDir/src"
|
||||
srcDir="$srcBaseDir/vcpkg-tool-$vcpkgToolReleaseTag"
|
||||
|
||||
if [ -e "$tarballPath" ]; then
|
||||
vcpkgCheckEqualFileHash "$vcpkgToolUrl" "$tarballPath" "$vcpkgToolReleaseSha"
|
||||
else
|
||||
echo "Downloading vcpkg tool sources"
|
||||
vcpkgDownloadFile "$vcpkgToolUrl" "$tarballPath" "$vcpkgToolReleaseSha"
|
||||
fi
|
||||
|
||||
echo "Building vcpkg-tool..."
|
||||
rm -rf "$baseBuildDir"
|
||||
mkdir -p "$buildDir"
|
||||
vcpkgExtractTar "$tarballPath" "$srcBaseDir"
|
||||
cmakeConfigOptions="-DCMAKE_BUILD_TYPE=Release -G 'Ninja' -DVCPKG_DEVELOPMENT_WARNINGS=OFF"
|
||||
|
||||
if [ "${VCPKG_MAX_CONCURRENCY}" != "" ] ; then
|
||||
cmakeConfigOptions=" $cmakeConfigOptions '-DCMAKE_JOB_POOL_COMPILE:STRING=compile' '-DCMAKE_JOB_POOL_LINK:STRING=link' '-DCMAKE_JOB_POOLS:STRING=compile=$VCPKG_MAX_CONCURRENCY;link=$VCPKG_MAX_CONCURRENCY' "
|
||||
fi
|
||||
|
||||
(cd "$buildDir" && CXX="$CXX" eval cmake "$srcDir" $cmakeConfigOptions) || exit 1
|
||||
(cd "$buildDir" && cmake --build .) || exit 1
|
||||
|
||||
rm -rf "$vcpkgRootDir/vcpkg"
|
||||
cp "$buildDir/vcpkg" "$vcpkgRootDir/"
|
||||
fi
|
||||
|
||||
# Apply the disable-metrics marker file.
|
||||
if [ "$vcpkgDisableMetrics" = "ON" ]; then
|
||||
touch "$vcpkgRootDir/vcpkg.disable-metrics"
|
||||
elif ! [ -f "$vcpkgRootDir/vcpkg.disable-metrics" ]; then
|
||||
# Note that we intentionally leave any existing vcpkg.disable-metrics; once a user has
|
||||
# opted out they should stay opted out.
|
||||
cat <<EOF
|
||||
Telemetry
|
||||
---------
|
||||
vcpkg collects usage data in order to help us improve your experience.
|
||||
The data collected by Microsoft is anonymous.
|
||||
You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics,
|
||||
passing --disable-metrics to vcpkg on the command line,
|
||||
or by setting the VCPKG_DISABLE_METRICS environment variable.
|
||||
|
||||
Read more about vcpkg telemetry at docs/about/privacy.md
|
||||
EOF
|
||||
fi
|
||||
Reference in New Issue
Block a user