aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authoreao197 <eao197@gmail.com>2018-04-24 11:46:00 +0300
committereao197 <eao197@gmail.com>2018-04-24 11:46:00 +0300
commit34257a50ceda0bfa05e59b532f71223b70f39d52 (patch)
tree6dfff9ccf2dc8f26ed4c96e13c4afdd7a33f0767 /scripts
parent4550e44e7a451ffec9160f74ea9856db40bfa47e (diff)
parentf703f60bd0064c3aeb116982812a3745817d30fe (diff)
downloadvcpkg-34257a50ceda0bfa05e59b532f71223b70f39d52.tar.gz
vcpkg-34257a50ceda0bfa05e59b532f71223b70f39d52.zip
Merge https://github.com/Microsoft/vcpkg
Diffstat (limited to 'scripts')
-rw-r--r--scripts/bootstrap.sh188
-rw-r--r--scripts/buildsystems/msbuild/applocal.ps117
-rw-r--r--scripts/buildsystems/vcpkg.cmake2
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake42
-rw-r--r--scripts/cmake/vcpkg_fixup_cmake_targets.cmake9
5 files changed, 238 insertions, 20 deletions
diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh
new file mode 100644
index 000000000..66efb1d62
--- /dev/null
+++ b/scripts/bootstrap.sh
@@ -0,0 +1,188 @@
+#!/bin/sh
+
+# Find vcpkg-root
+vcpkgRootDir=$(X= cd -- "$(dirname -- "$0")" && pwd -P)
+while [ "$vcpkgRootDir" != "/" ] && ! [ -e "$vcpkgRootDir/.vcpkg-root" ]; do
+ vcpkgRootDir="$(dirname "$vcpkgRootDir")"
+done
+
+downloadsDir="$vcpkgRootDir/downloads"
+
+extractStringBetweenDelimiters()
+{
+ input=$1;leftDelim=$2;rightDelim=$3
+ output="${input##*$leftDelim}"
+ output="${output%%$rightDelim*}"
+ echo "$output"
+}
+
+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 "sudo apt-get install curl unzip tar"
+ exit 1
+ fi
+}
+
+vcpkgCheckEqualFileHash()
+{
+ url=$1; filePath=$2; expectedHash=$3
+
+ actualHash=$(shasum -a 512 "$filePath") # sha512sum not available on osx
+ 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
+ fi
+}
+
+vcpkgDownloadFile()
+{
+ url=$1; downloadPath=$2 sha512=$3
+ vcpkgCheckRepoTool "curl"
+ rm -rf "$downloadPath.part"
+ curl -L $url --create-dirs --output "$downloadPath.part" || exit 1
+
+ vcpkgCheckEqualFileHash $url "$downloadPath.part" $sha512
+ mv "$downloadPath.part" "$downloadPath"
+}
+
+vcpkgExtractArchive()
+{
+ archive=$1; toPath=$2
+ rm -rf "$toPath" "$toPath.partial"
+ mkdir -p "$toPath.partial"
+
+ archiveType="${archive##*.}"
+ if [ "$archiveType" = "zip" ]; then
+ vcpkgCheckRepoTool "unzip"
+ $(cd "$toPath.partial" && unzip -qqo "$archive")
+ else
+ vcpkgCheckRepoTool "tar"
+ $(cd "$toPath.partial" && tar xzf "$archive")
+ fi
+ mv "$toPath.partial" "$toPath"
+}
+
+fetchTool()
+{
+ tool=$1; UNAME=$2; __output=$3
+
+ if [ "$tool" = "" ]; then
+ echo "No tool name provided"
+ return 1
+ fi
+
+ if [ "$UNAME" = "Linux" ]; then
+ os="linux"
+ elif [ "$UNAME" = "Darwin" ]; then
+ os="osx"
+ else
+ echo "Unknown uname: $UNAME"
+ return 1
+ fi
+
+ xmlFileAsString=`cat $vcpkgRootDir/scripts/vcpkgTools.xml`
+ toolRegexStart="<tool name=\"$tool\" os=\"$os\">"
+ toolData="$(extractStringBetweenDelimiters "$xmlFileAsString" "$toolRegexStart" "</tool>")"
+ if [ "$toolData" = "" ]; then
+ echo "Unknown tool: $tool"
+ return 1
+ fi
+
+ version="$(extractStringBetweenDelimiters "$toolData" "<version>" "</version>")"
+
+ toolPath="$downloadsDir/tools/$tool-$version-$os"
+
+ exeRelativePath="$(extractStringBetweenDelimiters "$toolData" "<exeRelativePath>" "</exeRelativePath>")"
+ exePath="$toolPath/$exeRelativePath"
+
+ if [ -e "$exePath" ]; then
+ eval $__output="'$exePath'"
+ return 0
+ fi
+
+ isArchive=true
+ if [ $isArchive = true ]; then
+ archiveName="$(extractStringBetweenDelimiters "$toolData" "<archiveName>" "</archiveName>")"
+ downloadPath="$downloadsDir/$archiveName"
+ else
+ echo "Non-archives not supported yet"
+ return 1
+ fi
+
+ url="$(extractStringBetweenDelimiters "$toolData" "<url>" "</url>")"
+ sha512="$(extractStringBetweenDelimiters "$toolData" "<sha512>" "</sha512>")"
+ if ! [ -e "$downloadPath" ]; then
+ echo "Downloading $tool..."
+ vcpkgDownloadFile $url "$downloadPath" $sha512
+ echo "Downloading $tool... done."
+ else
+ vcpkgCheckEqualFileHash $url "$downloadPath" $sha512
+ fi
+
+ if [ $isArchive = true ]; then
+ echo "Extracting $tool..."
+ vcpkgExtractArchive "$downloadPath" "$toolPath"
+ echo "Extracting $tool... done."
+ fi
+
+ if ! [ -e "$exePath" ]; then
+ echo "Could not detect or download $tool"
+ return 1
+ fi
+
+ eval $__output="'$exePath'"
+ return 0
+}
+
+selectCXX()
+{
+ __output=$1
+
+ if [ "x$CXX" = "x" ]; then
+ CXX=g++
+ if which g++-7 >/dev/null 2>&1; then
+ CXX=g++-7
+ elif which g++-6 >/dev/null 2>&1; then
+ CXX=g++-6
+ fi
+ fi
+
+ gccversion="$("$CXX" -v 2>&1)"
+ gccversion="$(extractStringBetweenDelimiters "$gccversion" "gcc version " ".")"
+ if [ "$gccversion" = "5" ]; then
+ echo "CXX ($CXX) is too old; please install a newer compiler such as g++-7."
+ echo "sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y"
+ echo "sudo apt-get update -y"
+ echo "sudo apt-get install g++-7 -y"
+ return 1
+ fi
+
+ eval $__output="'$CXX'"
+}
+
+# Preparation
+UNAME="$(uname)"
+fetchTool "cmake" "$UNAME" cmakeExe || exit 1
+fetchTool "ninja" "$UNAME" ninjaExe || exit 1
+selectCXX CXX || exit 1
+
+# Do the build
+buildDir="$vcpkgRootDir/toolsrc/build.rel"
+rm -rf "$buildDir"
+mkdir -p "$buildDir"
+
+(cd "$buildDir" && CXX=$CXX "$cmakeExe" .. -DCMAKE_BUILD_TYPE=Release -G "Ninja" "-DCMAKE_MAKE_PROGRAM=$ninjaExe")
+(cd "$buildDir" && "$cmakeExe" --build .)
+
+rm -rf "$vcpkgRootDir/vcpkg"
+cp "$buildDir/vcpkg" "$vcpkgRootDir/" \ No newline at end of file
diff --git a/scripts/buildsystems/msbuild/applocal.ps1 b/scripts/buildsystems/msbuild/applocal.ps1
index 3f0f2ef37..e5f3c3dd0 100644
--- a/scripts/buildsystems/msbuild/applocal.ps1
+++ b/scripts/buildsystems/msbuild/applocal.ps1
@@ -4,6 +4,7 @@ param([string]$targetBinary, [string]$installedDir, [string]$tlogFile, [string]$
$g_searched = @{}
# Note: installedDir is actually the bin\ directory.
$g_install_root = Split-Path $installedDir -parent
+$g_is_debug = $g_install_root -match '(.*\\)?debug(\\)?$'
# Ensure we create the copied files log, even if we don't end up copying any files
if ($copiedFilesLog)
@@ -63,6 +64,13 @@ function resolve([string]$targetBinary) {
deployBinary $baseTargetBinaryDir $installedDir "$_"
if (Test-Path function:\deployPluginsIfQt) { deployPluginsIfQt $targetBinaryDir "$g_install_root\plugins" "$_" }
if (Test-Path function:\deployOpenNI2) { deployOpenNI2 $targetBinaryDir "$g_install_root" "$_" }
+ if (Test-Path function:\deployPluginsIfMagnum) {
+ if ($g_is_debug) {
+ deployPluginsIfMagnum $targetBinaryDir "$g_install_root\bin\magnum-d" "$_"
+ } else {
+ deployPluginsIfMagnum $targetBinaryDir "$g_install_root\bin\magnum" "$_"
+ }
+ }
resolve "$baseTargetBinaryDir\$_"
} elseif (Test-Path "$targetBinaryDir\$_") {
Write-Verbose " ${_}: $_ not found in vcpkg; locally deployed"
@@ -85,5 +93,12 @@ if (Test-Path "$g_install_root\bin\OpenNI2\openni2deploy.ps1") {
. "$g_install_root\bin\OpenNI2\openni2deploy.ps1"
}
+# Note: This is a hack to make Magnum work.
+if (Test-Path "$g_install_root\bin\magnum\magnumdeploy.ps1") {
+ . "$g_install_root\bin\magnum\magnumdeploy.ps1"
+} elseif (Test-Path "$g_install_root\bin\magnum-d\magnumdeploy.ps1") {
+ . "$g_install_root\bin\magnum-d\magnumdeploy.ps1"
+}
+
resolve($targetBinary)
-Write-Verbose $($g_searched | out-string) \ No newline at end of file
+Write-Verbose $($g_searched | out-string)
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index a9f8190f7..91c196fb9 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -241,6 +241,8 @@ macro(find_package name)
"optimized" "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/nghttp2.lib")
endif()
endif()
+ elseif("${_vcpkg_lowercase_name}" STREQUAL "grpc" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/grpc")
+ _find_package(gRPC ${ARGN})
else()
_find_package(${ARGV})
endif()
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index 41415d9a8..983ac9221 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -131,25 +131,31 @@ function(vcpkg_build_cmake)
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_STRIP_TRAILING_WHITESPACE)
if (UNAME_R MATCHES "Microsoft")
- message(STATUS "Restarting Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE} because of (potential) wsl subsystem issue.")
- execute_process(
- COMMAND ${CMAKE_COMMAND} --build . --config ${CONFIG} ${TARGET_PARAM} -- ${BUILD_ARGS}
- OUTPUT_FILE "${LOGPREFIX}-out-1.log"
- ERROR_FILE "${LOGPREFIX}-err-1.log"
- RESULT_VARIABLE error_code
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${SHORT_BUILDTYPE})
-
- if(error_code)
- file(READ "${LOGPREFIX}-out-1.log" out_contents)
- file(READ "${LOGPREFIX}-err-1.log" err_contents)
-
- if(out_contents)
- list(APPEND LOGS "${LOGPREFIX}-out-1.log")
+ set(ITERATION 0)
+ while (ITERATION LESS 10 AND out_contents MATCHES ": No such file or directory")
+ MATH(EXPR ITERATION "${ITERATION}+1")
+ message(STATUS "Restarting Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE} because of wsl subsystem issue. Iteration: ${ITERATION}")
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config ${CONFIG} ${TARGET_PARAM} -- ${BUILD_ARGS}
+ OUTPUT_FILE "${LOGPREFIX}-out-${ITERATION}.log"
+ ERROR_FILE "${LOGPREFIX}-err-${ITERATION}.log"
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${SHORT_BUILDTYPE})
+
+ if(error_code)
+ file(READ "${LOGPREFIX}-out-${ITERATION}.log" out_contents)
+ file(READ "${LOGPREFIX}-err-${ITERATION}.log" err_contents)
+
+ if(out_contents)
+ list(APPEND LOGS "${LOGPREFIX}-out-${ITERATION}.log")
+ endif()
+ if(err_contents)
+ list(APPEND LOGS "${LOGPREFIX}-err-${ITERATION}.log")
+ endif()
+ else()
+ break()
endif()
- if(err_contents)
- list(APPEND LOGS "${LOGPREFIX}-err-1.log")
- endif()
- endif()
+ endwhile()
endif()
endif()
diff --git a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
index 475047737..47c91f83c 100644
--- a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
+++ b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
@@ -28,6 +28,12 @@ function(vcpkg_fixup_cmake_targets)
set(RELEASE_SHARE ${CURRENT_PACKAGES_DIR}/${_vfct_TARGET_PATH})
if(_vfct_CONFIG_PATH AND NOT RELEASE_SHARE STREQUAL "${CURRENT_PACKAGES_DIR}/${_vfct_CONFIG_PATH}")
+ if(_vfct_CONFIG_PATH STREQUAL "share")
+ file(RENAME ${CURRENT_PACKAGES_DIR}/debug/share ${CURRENT_PACKAGES_DIR}/debug/share2)
+ file(RENAME ${CURRENT_PACKAGES_DIR}/share ${CURRENT_PACKAGES_DIR}/share2)
+ set(_vfct_CONFIG_PATH share2)
+ endif()
+
set(DEBUG_CONFIG ${CURRENT_PACKAGES_DIR}/debug/${_vfct_CONFIG_PATH})
set(RELEASE_CONFIG ${CURRENT_PACKAGES_DIR}/${_vfct_CONFIG_PATH})
@@ -36,6 +42,7 @@ function(vcpkg_fixup_cmake_targets)
message(FATAL_ERROR "'${DEBUG_CONFIG}' does not exist.")
endif()
+ # This roundabout handling enables CONFIG_PATH share
file(MAKE_DIRECTORY ${DEBUG_SHARE})
file(GLOB FILES ${DEBUG_CONFIG}/*)
file(COPY ${FILES} DESTINATION ${DEBUG_SHARE})
@@ -76,7 +83,7 @@ function(vcpkg_fixup_cmake_targets)
endif()
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- if(NOT EXISTS ${DEBUG_SHARE})
+ if(NOT EXISTS "${DEBUG_SHARE}")
message(FATAL_ERROR "'${DEBUG_SHARE}' does not exist.")
endif()
endif()