aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/SHA256Hash.ps19
-rw-r--r--scripts/VcpkgPowershellUtils.ps1214
-rw-r--r--scripts/bootstrap.ps120
-rw-r--r--scripts/buildsystems/msbuild/vcpkg.targets11
-rw-r--r--scripts/buildsystems/vcpkg.cmake54
-rw-r--r--scripts/cmake/vcpkg_acquire_depot_tools.cmake48
-rw-r--r--scripts/cmake/vcpkg_acquire_msys.cmake10
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake32
-rw-r--r--scripts/cmake/vcpkg_build_msbuild.cmake48
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake1
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake56
-rw-r--r--scripts/cmake/vcpkg_configure_meson.cmake56
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake13
-rw-r--r--scripts/cmake/vcpkg_execute_required_process.cmake7
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake22
-rw-r--r--scripts/cmake/vcpkg_fixup_cmake_targets.cmake85
-rw-r--r--scripts/cmake/vcpkg_from_bitbucket.cmake38
-rw-r--r--scripts/cmake/vcpkg_from_github.cmake53
-rw-r--r--scripts/cmake/vcpkg_get_windows_sdk.cmake4
-rw-r--r--scripts/fetchDependency.ps1189
-rw-r--r--scripts/findAnyMSBuildWithCppPlatformToolset.ps113
-rw-r--r--scripts/findVisualStudioInstallationInstances.ps16
-rw-r--r--scripts/get_triplet_environment.cmake4
-rw-r--r--scripts/internalCI.ps120
-rw-r--r--scripts/ports.cmake10
25 files changed, 586 insertions, 437 deletions
diff --git a/scripts/SHA256Hash.ps1 b/scripts/SHA256Hash.ps1
new file mode 100644
index 000000000..348d461b7
--- /dev/null
+++ b/scripts/SHA256Hash.ps1
@@ -0,0 +1,9 @@
+[CmdletBinding()]
+Param(
+ [Parameter(Mandatory=$True)]
+ [String]$Value
+)
+
+$sha256 = New-Object -TypeName System.Security.Cryptography.SHA256CryptoServiceProvider
+$utf8 = New-Object -TypeName System.Text.UTF8Encoding
+[System.BitConverter]::ToString($sha256.ComputeHash($utf8.GetBytes($Value)))
diff --git a/scripts/VcpkgPowershellUtils.ps1 b/scripts/VcpkgPowershellUtils.ps1
new file mode 100644
index 000000000..28e818437
--- /dev/null
+++ b/scripts/VcpkgPowershellUtils.ps1
@@ -0,0 +1,214 @@
+function vcpkgHasModule([Parameter(Mandatory=$true)][string]$moduleName)
+{
+ return [bool](Get-Module -ListAvailable -Name $moduleName)
+}
+
+function vcpkgCreateDirectoryIfNotExists([Parameter(Mandatory=$true)][string]$dirPath)
+{
+ if (!(Test-Path $dirPath))
+ {
+ New-Item -ItemType Directory -Path $dirPath | Out-Null
+ }
+}
+
+function vcpkgCreateParentDirectoryIfNotExists([Parameter(Mandatory=$true)][string]$path)
+{
+ $parentDir = split-path -parent $path
+ if ([string]::IsNullOrEmpty($parentDir))
+ {
+ return
+ }
+
+ if (!(Test-Path $parentDir))
+ {
+ New-Item -ItemType Directory -Path $parentDir | Out-Null
+ }
+}
+
+function vcpkgRemoveDirectory([Parameter(Mandatory=$true)][string]$dirPath)
+{
+ if (Test-Path $dirPath)
+ {
+ Remove-Item $dirPath -Recurse -Force
+ }
+}
+
+function vcpkgRemoveFile([Parameter(Mandatory=$true)][string]$filePath)
+{
+ if (Test-Path $filePath)
+ {
+ Remove-Item $filePath -Force
+ }
+}
+
+function vcpkgHasCommand([Parameter(Mandatory=$true)][string]$commandName)
+{
+ return [bool](Get-Command -Name $commandName -ErrorAction SilentlyContinue)
+}
+
+function vcpkgHasCommandParameter([Parameter(Mandatory=$true)][string]$commandName, [Parameter(Mandatory=$true)][string]$parameterName)
+{
+ return (Get-Command $commandName).Parameters.Keys -contains $parameterName
+}
+
+function vcpkgGetCredentials()
+{
+ if (vcpkgHasCommandParameter -commandName 'Get-Credential' -parameterName 'Message')
+ {
+ return Get-Credential -Message "Enter credentials for Proxy Authentication"
+ }
+ else
+ {
+ Write-Host "Enter credentials for Proxy Authentication"
+ return Get-Credential
+ }
+}
+
+function vcpkgGetSHA256([Parameter(Mandatory=$true)][string]$filePath)
+{
+ if (vcpkgHasCommand -commandName 'Microsoft.PowerShell.Utility\Get-FileHash')
+ {
+ Write-Verbose("Hashing with Microsoft.PowerShell.Utility\Get-FileHash")
+ $hash = (Microsoft.PowerShell.Utility\Get-FileHash -Path $filePath -Algorithm SHA256).Hash
+ }
+ elseif(vcpkgHasCommand -commandName 'Pscx\Get-Hash')
+ {
+ Write-Verbose("Hashing with Pscx\Get-Hash")
+ $hash = (Pscx\Get-Hash -Path $filePath -Algorithm SHA256).HashString
+ }
+ else
+ {
+ Write-Verbose("Hashing with .NET")
+ $hashAlgorithm = [Security.Cryptography.HashAlgorithm]::Create("SHA256")
+ $fileAsByteArray = [io.File]::ReadAllBytes($filePath)
+ $hashByteArray = $hashAlgorithm.ComputeHash($fileAsByteArray)
+ $hash = -Join ($hashByteArray | ForEach-Object {"{0:x2}" -f $_})
+ }
+
+ return $hash.ToLower()
+}
+
+function vcpkgCheckEqualFileHash( [Parameter(Mandatory=$true)][string]$filePath,
+ [Parameter(Mandatory=$true)][string]$expectedHash,
+ [Parameter(Mandatory=$true)][string]$actualHash )
+{
+ if ($expectedDownloadedFileHash -ne $downloadedFileHash)
+ {
+ Write-Host ("`nFile does not have expected hash:`n" +
+ " File path: [ $filePath ]`n" +
+ " Expected hash: [ $expectedHash ]`n" +
+ " Actual hash: [ $actualHash ]`n")
+ throw "Invalid Hash for file $filePath"
+ }
+}
+
+if (vcpkgHasModule -moduleName 'BitsTransfer')
+{
+ Import-Module BitsTransfer -Verbose:$false
+}
+
+function vcpkgDownloadFile( [Parameter(Mandatory=$true)][string]$url,
+ [Parameter(Mandatory=$true)][string]$downloadPath)
+{
+ if (Test-Path $downloadPath)
+ {
+ return
+ }
+
+ vcpkgCreateParentDirectoryIfNotExists $downloadPath
+
+ $downloadPartPath = "$downloadPath.part"
+ vcpkgRemoveFile $downloadPartPath
+
+ $wc = New-Object System.Net.WebClient
+ $proxyAuth = !$wc.Proxy.IsBypassed($url)
+ if ($proxyAuth)
+ {
+ $wc.Proxy.Credentials = vcpkgGetCredentials
+ }
+
+ # Some download (e.g. git from github)fail with Start-BitsTransfer
+ if (vcpkgHasCommand -commandName 'Start-BitsTransfer')
+ {
+ try
+ {
+ if ($proxyAuth)
+ {
+ $PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyAuthentication","Basic")
+ $PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyCredential", $wc.Proxy.Credentials)
+ }
+ Start-BitsTransfer -Source $url -Destination $downloadPartPath -ErrorAction Stop
+ Move-Item -Path $downloadPartPath -Destination $downloadPath
+ return
+ }
+ catch [System.Exception]
+ {
+ # If BITS fails for any reason, delete any potentially partially downloaded files and continue
+ vcpkgRemoveFile $downloadPartPath
+ }
+ }
+
+ Write-Verbose("Downloading $Dependency...")
+ $wc.DownloadFile($url, $downloadPartPath)
+ Move-Item -Path $downloadPartPath -Destination $downloadPath
+}
+
+function vcpkgExtractFile( [Parameter(Mandatory=$true)][string]$file,
+ [Parameter(Mandatory=$true)][string]$destinationDir)
+{
+ vcpkgCreateParentDirectoryIfNotExists $destinationDir
+ $destinationPartial = "$destinationDir-partially_extracted"
+
+ vcpkgRemoveDirectory $destinationPartial
+ vcpkgCreateDirectoryIfNotExists $destinationPartial
+
+ if (vcpkgHasCommand -commandName 'Microsoft.PowerShell.Archive\Expand-Archive')
+ {
+ Write-Verbose("Extracting with Microsoft.PowerShell.Archive\Expand-Archive")
+ Microsoft.PowerShell.Archive\Expand-Archive -path $file -destinationpath $destinationPartial
+ }
+ elseif (vcpkgHasCommand -commandName 'Pscx\Expand-Archive')
+ {
+ Write-Verbose("Extracting with Pscx\Expand-Archive")
+ Pscx\Expand-Archive -path $file -OutputPath $destinationPartial
+ }
+ else
+ {
+ Write-Verbose("Extracting via shell")
+ $shell = new-object -com shell.application
+ $zip = $shell.NameSpace($file)
+ foreach($item in $zip.items())
+ {
+ # Piping to Out-Null is used to block until finished
+ $shell.Namespace($destinationPartial).copyhere($item) | Out-Null
+ }
+ }
+
+ $hasASingleItem = (Get-ChildItem $destinationPartial | Measure-Object).Count -eq 1;
+
+ if ($hasASingleItem)
+ {
+ Move-Item -Path "$destinationPartial\*" -Destination $destinationDir
+ vcpkgRemoveDirectory $destinationPartial
+ }
+ else
+ {
+ Move-Item -Path $destinationPartial -Destination $destinationDir
+ }
+}
+
+function vcpkgInvokeCommand()
+{
+ param ( [Parameter(Mandatory=$true)][string]$executable,
+ [string]$arguments = "",
+ [switch]$wait)
+
+ Write-Verbose "Executing: ${executable} ${arguments}"
+ $process = Start-Process -FilePath $executable -ArgumentList $arguments -PassThru
+ if ($wait)
+ {
+ Wait-Process -InputObject $process
+ $ec = $process.ExitCode
+ Write-Verbose "Execution terminated with exit code $ec."
+ }
+} \ No newline at end of file
diff --git a/scripts/bootstrap.ps1 b/scripts/bootstrap.ps1
index b874afd8c..3f40a2ead 100644
--- a/scripts/bootstrap.ps1
+++ b/scripts/bootstrap.ps1
@@ -1,7 +1,7 @@
[CmdletBinding()]
param(
- [ValidateNotNullOrEmpty()]
- [string]$disableMetrics = "0"
+ [ValidateNotNullOrEmpty()][string]$disableMetrics = "0",
+ [Parameter(Mandatory=$False)][string]$withVSPath = ""
)
$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
@@ -13,7 +13,7 @@ $gitHash = "unknownhash"
$oldpath = $env:path
try
{
- $env:path += ";$vcpkgRootDir\downloads\MinGit-2.14.1-32-bit\cmd"
+ $env:path += ";$vcpkgRootDir\downloads\MinGit-2.15.0-32-bit\cmd"
if (Get-Command "git" -ErrorAction SilentlyContinue)
{
$gitHash = git log HEAD -n 1 --format="%cd-%H" --date=short
@@ -32,17 +32,23 @@ $vcpkgSourcesPath = "$vcpkgRootDir\toolsrc"
if (!(Test-Path $vcpkgSourcesPath))
{
- New-Item -ItemType directory -Path $vcpkgSourcesPath -force | Out-Null
+ Write-Error "Unable to determine vcpkg sources directory. '$vcpkgSourcesPath' does not exist."
+ return
}
try
{
- pushd $vcpkgSourcesPath
- $msbuildExeWithPlatformToolset = & $scriptsDir\findAnyMSBuildWithCppPlatformToolset.ps1
+ Push-Location $vcpkgSourcesPath
+ $msbuildExeWithPlatformToolset = & $scriptsDir\findAnyMSBuildWithCppPlatformToolset.ps1 $withVSPath
$msbuildExe = $msbuildExeWithPlatformToolset[0]
$platformToolset = $msbuildExeWithPlatformToolset[1]
$windowsSDK = & $scriptsDir\getWindowsSDK.ps1
& $msbuildExe "/p:VCPKG_VERSION=-$gitHash" "/p:DISABLE_METRICS=$disableMetrics" /p:Configuration=Release /p:Platform=x86 /p:PlatformToolset=$platformToolset /p:TargetPlatformVersion=$windowsSDK /m dirs.proj
+ if ($LASTEXITCODE -ne 0)
+ {
+ Write-Error "Building vcpkg.exe failed. Please ensure you have installed Visual Studio with the Desktop C++ workload and the Windows SDK for Desktop C++."
+ return
+ }
Write-Verbose("Placing vcpkg.exe in the correct location")
@@ -51,5 +57,5 @@ try
}
finally
{
- popd
+ Pop-Location
}
diff --git a/scripts/buildsystems/msbuild/vcpkg.targets b/scripts/buildsystems/msbuild/vcpkg.targets
index 1cb338237..ad1dde89b 100644
--- a/scripts/buildsystems/msbuild/vcpkg.targets
+++ b/scripts/buildsystems/msbuild/vcpkg.targets
@@ -36,15 +36,17 @@
<PropertyGroup Condition="'$(VcpkgEnabled)' == 'true'">
<VcpkgConfiguration Condition="'$(VcpkgConfiguration)' == ''">$(Configuration)</VcpkgConfiguration>
+ <VcpkgNormalizedConfiguration Condition="$(VcpkgConfiguration.StartsWith('Debug'))">Debug</VcpkgNormalizedConfiguration>
+ <VcpkgNormalizedConfiguration Condition="$(VcpkgConfiguration.StartsWith('Release')) or '$(VcpkgConfiguration)' == 'RelWithDebInfo' or '$(VcpkgConfiguration)' == 'MinSizeRel'">Release</VcpkgNormalizedConfiguration>
<VcpkgRoot Condition="'$(VcpkgRoot)' == ''">$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), .vcpkg-root))\installed\$(VcpkgTriplet)\</VcpkgRoot>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(VcpkgEnabled)' == 'true'">
<Link>
- <AdditionalDependencies Condition="$(VcpkgConfiguration.StartsWith('Debug')) and '$(VcpkgAutoLink)' != 'false'">%(AdditionalDependencies);$(VcpkgRoot)debug\lib\*.lib</AdditionalDependencies>
- <AdditionalDependencies Condition="$(VcpkgConfiguration.StartsWith('Release')) and '$(VcpkgAutoLink)' != 'false'">%(AdditionalDependencies);$(VcpkgRoot)lib\*.lib</AdditionalDependencies>
- <AdditionalLibraryDirectories Condition="$(VcpkgConfiguration.StartsWith('Release'))">%(AdditionalLibraryDirectories);$(VcpkgRoot)lib;$(VcpkgRoot)lib\manual-link</AdditionalLibraryDirectories>
- <AdditionalLibraryDirectories Condition="$(VcpkgConfiguration.StartsWith('Debug'))">%(AdditionalLibraryDirectories);$(VcpkgRoot)debug\lib;$(VcpkgRoot)debug\lib\manual-link</AdditionalLibraryDirectories>
+ <AdditionalDependencies Condition="'$(VcpkgNormalizedConfiguration)' == 'Debug' and '$(VcpkgAutoLink)' != 'false'">%(AdditionalDependencies);$(VcpkgRoot)debug\lib\*.lib</AdditionalDependencies>
+ <AdditionalDependencies Condition="'$(VcpkgNormalizedConfiguration)' == 'Release' and '$(VcpkgAutoLink)' != 'false'">%(AdditionalDependencies);$(VcpkgRoot)lib\*.lib</AdditionalDependencies>
+ <AdditionalLibraryDirectories Condition="'$(VcpkgNormalizedConfiguration)' == 'Release'">%(AdditionalLibraryDirectories);$(VcpkgRoot)lib;$(VcpkgRoot)lib\manual-link</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories Condition="'$(VcpkgNormalizedConfiguration)' == 'Debug'">%(AdditionalLibraryDirectories);$(VcpkgRoot)debug\lib;$(VcpkgRoot)debug\lib\manual-link</AdditionalLibraryDirectories>
</Link>
<ClCompile>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(VcpkgRoot)include</AdditionalIncludeDirectories>
@@ -57,6 +59,7 @@
<Target Name="VcpkgTripletSelection" BeforeTargets="ClCompile">
<Message Text="Using triplet &quot;$(VcpkgTriplet)&quot; from &quot;$(VcpkgRoot)&quot;" Importance="Normal" Condition="'$(VcpkgEnabled)' == 'true'"/>
<Message Text="Not using Vcpkg because VcpkgEnabled is &quot;$(VcpkgEnabled)&quot;" Importance="Normal" Condition="'$(VcpkgEnabled)' != 'true'"/>
+ <Message Text="Vcpkg is unable to link because we cannot decide between Release and Debug libraries. Please define the property VcpkgConfiguration to be 'Release' or 'Debug' (currently '$(VcpkgConfiguration)')." Importance="High" Condition="'$(VcpkgEnabled)' == 'true' and '$(VcpkgNormalizedConfiguration)' == ''"/>
</Target>
<Target Name="AppLocalFromInstalled" AfterTargets="CopyFilesToOutputDirectory" BeforeTargets="CopyLocalFilesOutputGroup;RegisterOutput" Condition="'$(VcpkgEnabled)' == 'true'">
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index 19fc99af7..24f6d855e 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -1,6 +1,11 @@
# Mark variables as used so cmake doesn't complain about them
mark_as_advanced(CMAKE_TOOLCHAIN_FILE)
+get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
+if( _CMAKE_IN_TRY_COMPILE )
+ include( "${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg.config.cmake" OPTIONAL )
+endif()
+
if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
endif()
@@ -9,11 +14,6 @@ if(VCPKG_TOOLCHAIN)
return()
endif()
-get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE )
-if( _CMAKE_IN_TRY_COMPILE )
- include( "${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg.config.cmake" OPTIONAL )
-endif()
-
if(VCPKG_TARGET_TRIPLET)
elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$")
set(_VCPKG_TARGET_TRIPLET_ARCH x86)
@@ -42,6 +42,8 @@ else()
set(_VCPKG_TARGET_TRIPLET_ARCH arm)
elseif(_VCPKG_CL MATCHES "bin/cl.exe$" OR _VCPKG_CL MATCHES "x86/cl.exe$")
set(_VCPKG_TARGET_TRIPLET_ARCH x86)
+ elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64")
+ set(_VCPKG_TARGET_TRIPLET_ARCH x64)
else()
message(FATAL_ERROR "Unable to determine target architecture.")
endif()
@@ -50,7 +52,9 @@ endif()
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone")
set(_VCPKG_TARGET_TRIPLET_PLAT uwp)
-else()
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(_VCPKG_TARGET_TRIPLET_PLAT linux)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
set(_VCPKG_TARGET_TRIPLET_PLAT windows)
endif()
@@ -77,17 +81,23 @@ if(CMAKE_BUILD_TYPE MATCHES "^Debug$" OR NOT DEFINED CMAKE_BUILD_TYPE)
list(APPEND CMAKE_LIBRARY_PATH
${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/manual-link
)
+ list(APPEND CMAKE_FIND_ROOT_PATH
+ ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug
+ )
endif()
list(APPEND CMAKE_PREFIX_PATH
${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}
)
+list(APPEND CMAKE_FIND_ROOT_PATH
+ ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}
+)
list(APPEND CMAKE_LIBRARY_PATH
${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/manual-link
)
set(Boost_COMPILER "-vc140")
-if (NOT DEFINED CMAKE_SYSTEM_VERSION)
+if (NOT DEFINED CMAKE_SYSTEM_VERSION AND _VCPKG_TARGET_TRIPLET_PLAT MATCHES "windows|uwp")
include(${_VCPKG_ROOT_DIR}/scripts/cmake/vcpkg_get_windows_sdk.cmake)
# This is used as an implicit parameter for vcpkg_get_windows_sdk
set(VCPKG_ROOT_DIR ${_VCPKG_ROOT_DIR})
@@ -128,7 +138,7 @@ function(add_executable name)
list(FIND ARGV "IMPORTED" IMPORTED_IDX)
list(FIND ARGV "ALIAS" ALIAS_IDX)
if(IMPORTED_IDX EQUAL -1 AND ALIAS_IDX EQUAL -1)
- if(VCPKG_APPLOCAL_DEPS)
+ if(VCPKG_APPLOCAL_DEPS AND _VCPKG_TARGET_TRIPLET_PLAT MATCHES "windows|uwp")
add_custom_command(TARGET ${name} POST_BUILD
COMMAND powershell -noprofile -executionpolicy Bypass -file ${_VCPKG_TOOLCHAIN_DIR}/msbuild/applocal.ps1
-targetBinary $<TARGET_FILE:${name}>
@@ -153,10 +163,34 @@ function(add_library name)
endfunction()
macro(find_package name)
- if(name STREQUAL "Boost")
+ if("${name}" STREQUAL "Boost")
unset(Boost_USE_STATIC_LIBS)
+ unset(Boost_USE_MULTITHREADED)
+ unset(Boost_USE_STATIC_RUNTIME)
+ _find_package(${ARGV})
+ elseif("${name}" STREQUAL "ICU")
+ function(_vcpkg_find_in_list)
+ list(FIND ARGV "COMPONENTS" COMPONENTS_IDX)
+ set(COMPONENTS_IDX ${COMPONENTS_IDX} PARENT_SCOPE)
+ endfunction()
+ _vcpkg_find_in_list(${ARGV})
+ if(NOT COMPONENTS_IDX EQUAL -1)
+ _find_package(${ARGV} COMPONENTS data)
+ else()
+ _find_package(${ARGV})
+ endif()
+ elseif("${name}" STREQUAL "TIFF")
+ _find_package(${ARGV})
+ find_package(LibLZMA)
+ if(TARGET TIFF::TIFF)
+ set_property(TARGET TIFF::TIFF APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${LIBLZMA_LIBRARIES})
+ endif()
+ if(TIFF_LIBRARIES)
+ list(APPEND TIFF_LIBRARIES ${LIBLZMA_LIBRARIES})
+ endif()
+ else()
+ _find_package(${ARGV})
endif()
- _find_package(${ARGV})
endmacro()
set(VCPKG_TOOLCHAIN ON)
diff --git a/scripts/cmake/vcpkg_acquire_depot_tools.cmake b/scripts/cmake/vcpkg_acquire_depot_tools.cmake
deleted file mode 100644
index 009ba40f1..000000000
--- a/scripts/cmake/vcpkg_acquire_depot_tools.cmake
+++ /dev/null
@@ -1,48 +0,0 @@
-function(vcpkg_acquire_depot_tools PATH_TO_ROOT_OUT)
- set(TOOLPATH ${DOWNLOADS}/tools/depot_tools)
- set(URL "https://storage.googleapis.com/chrome-infra/depot_tools.zip")
- set(ARCHIVE "depot_tools.zip")
- set(STAMP "initialized-depot-tools.stamp")
- set(downloaded_file_path ${DOWNLOADS}/${ARCHIVE})
-
- if(NOT EXISTS "${TOOLPATH}/${STAMP}")
-
- message(STATUS "Acquiring Depot Tools...")
-
- if(EXISTS ${downloaded_file_path})
- message(STATUS "Using cached ${downloaded_file_path}")
- else()
- if(_VCPKG_NO_DOWNLOADS)
- message(FATAL_ERROR "Downloads are disabled, but '${downloaded_file_path}' does not exist.")
- endif()
- file(DOWNLOAD ${URL} ${downloaded_file_path} STATUS download_status)
- list(GET download_status 0 status_code)
- if (NOT "${status_code}" STREQUAL "0")
- message(STATUS "Downloading ${URL}... Failed. Status: ${download_status}")
- file(REMOVE ${downloaded_file_path})
- set(download_success 0)
- else()
- message(STATUS "Downloading ${URL}... OK")
- set(download_success 1)
- endif()
-
- if (NOT download_success)
- message(FATAL_ERROR
- "\n"
- " Failed to download file.\n"
- " Add mirrors or submit an issue at https://github.com/Microsoft/vcpkg/issues\n")
- endif()
- endif()
-
-
- file(REMOVE_RECURSE ${TOOLPATH})
- file(MAKE_DIRECTORY ${TOOLPATH})
- execute_process(
- COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
- WORKING_DIRECTORY ${TOOLPATH}
- )
- file(WRITE "${TOOLPATH}/${STAMP}" "0")
- message(STATUS "Acquiring Depot Tools... OK")
- endif()
- set(${PATH_TO_ROOT_OUT} ${TOOLPATH} PARENT_SCOPE)
-endfunction()
diff --git a/scripts/cmake/vcpkg_acquire_msys.cmake b/scripts/cmake/vcpkg_acquire_msys.cmake
index 830022906..80a30bf2b 100644
--- a/scripts/cmake/vcpkg_acquire_msys.cmake
+++ b/scripts/cmake/vcpkg_acquire_msys.cmake
@@ -70,14 +70,18 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
set(PATH_TO_ROOT ${TOOLPATH}/${TOOLSUBPATH})
if(NOT EXISTS "${TOOLPATH}/${STAMP}")
+
message(STATUS "Acquiring MSYS2...")
- file(DOWNLOAD ${URL} ${DOWNLOADS}/${ARCHIVE}
- EXPECTED_HASH SHA512=${HASH}
+ vcpkg_download_distfile(ARCHIVE_PATH
+ URLS ${URL}
+ FILENAME ${ARCHIVE}
+ SHA512 ${HASH}
)
+
file(REMOVE_RECURSE ${TOOLPATH}/${TOOLSUBPATH})
file(MAKE_DIRECTORY ${TOOLPATH})
execute_process(
- COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
+ COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
WORKING_DIRECTORY ${TOOLPATH}
)
execute_process(
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index 5dc81ec09..0b4bbd211 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -58,19 +58,23 @@ function(vcpkg_build_cmake)
set(TARGET_PARAM)
endif()
- message(STATUS "Build ${TARGET_TRIPLET}-rel")
- vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Release ${TARGET_PARAM} -- ${BUILD_ARGS}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
- LOGNAME ${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-rel
- )
- message(STATUS "Build ${TARGET_TRIPLET}-rel done")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Build ${TARGET_TRIPLET}-rel")
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config Release ${TARGET_PARAM} -- ${BUILD_ARGS}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME ${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Build ${TARGET_TRIPLET}-rel done")
+ endif()
- message(STATUS "Build ${TARGET_TRIPLET}-dbg")
- vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} --build . --config Debug ${TARGET_PARAM} -- ${BUILD_ARGS}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
- LOGNAME ${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-dbg
- )
- message(STATUS "Build ${TARGET_TRIPLET}-dbg done")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} --build . --config Debug ${TARGET_PARAM} -- ${BUILD_ARGS}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME ${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Build ${TARGET_TRIPLET}-dbg done")
+ endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_build_msbuild.cmake b/scripts/cmake/vcpkg_build_msbuild.cmake
index 1e3c85ba2..b8403d277 100644
--- a/scripts/cmake/vcpkg_build_msbuild.cmake
+++ b/scripts/cmake/vcpkg_build_msbuild.cmake
@@ -52,8 +52,8 @@
##
## ## Examples
##
-## * [libuv](https://github.com/Microsoft/vcpkg/blob/master/ports/libuv/portfile.cmake)
-## * [zeromq](https://github.com/Microsoft/vcpkg/blob/master/ports/zeromq/portfile.cmake)
+## * [chakracore](https://github.com/Microsoft/vcpkg/blob/master/ports/chakracore/portfile.cmake)
+## * [cppunit](https://github.com/Microsoft/vcpkg/blob/master/ports/cppunit/portfile.cmake)
function(vcpkg_build_msbuild)
cmake_parse_arguments(_csc "" "PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET" "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG" ${ARGN})
@@ -87,25 +87,29 @@ function(vcpkg_build_msbuild)
/m
)
- message(STATUS "Building ${_csc_PROJECT_PATH} for Release")
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
- vcpkg_execute_required_process(
- COMMAND msbuild ${_csc_PROJECT_PATH}
- /p:Configuration=${_csc_RELEASE_CONFIGURATION}
- ${_csc_OPTIONS}
- ${_csc_OPTIONS_RELEASE}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
- LOGNAME build-${TARGET_TRIPLET}-rel
- )
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Building ${_csc_PROJECT_PATH} for Release")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ vcpkg_execute_required_process(
+ COMMAND msbuild ${_csc_PROJECT_PATH}
+ /p:Configuration=${_csc_RELEASE_CONFIGURATION}
+ ${_csc_OPTIONS}
+ ${_csc_OPTIONS_RELEASE}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME build-${TARGET_TRIPLET}-rel
+ )
+ endif()
- message(STATUS "Building ${_csc_PROJECT_PATH} for Debug")
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
- vcpkg_execute_required_process(
- COMMAND msbuild ${_csc_PROJECT_PATH}
- /p:Configuration=${_csc_DEBUG_CONFIGURATION}
- ${_csc_OPTIONS}
- ${_csc_OPTIONS_DEBUG}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
- LOGNAME build-${TARGET_TRIPLET}-dbg
- )
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Building ${_csc_PROJECT_PATH} for Debug")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ vcpkg_execute_required_process(
+ COMMAND msbuild ${_csc_PROJECT_PATH}
+ /p:Configuration=${_csc_DEBUG_CONFIGURATION}
+ ${_csc_OPTIONS}
+ ${_csc_OPTIONS_DEBUG}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME build-${TARGET_TRIPLET}-dbg
+ )
+ endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
index 81e8e5813..7ef87f2ea 100644
--- a/scripts/cmake/vcpkg_common_functions.cmake
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -21,4 +21,3 @@ include(vcpkg_copy_tool_dependencies)
include(vcpkg_get_program_files_32_bit)
include(vcpkg_get_program_files_platform_bitness)
include(vcpkg_get_windows_sdk)
-include(vcpkg_acquire_depot_tools)
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index b979245aa..4bcf3d2c9 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -61,6 +61,14 @@ function(vcpkg_configure_cmake)
set(GENERATOR ${_csc_GENERATOR})
elseif(_csc_PREFER_NINJA AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND NOT _csc_HOST_ARCHITECTURE STREQUAL "x86")
set(GENERATOR "Ninja")
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ set(GENERATOR "Visual Studio 12 2013")
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ set(GENERATOR "Visual Studio 12 2013 Win64")
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ set(GENERATOR "Visual Studio 12 2013 ARM")
+ elseif(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ set(GENERATOR "Ninja")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
set(GENERATOR "Visual Studio 14 2015")
elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
@@ -191,29 +199,33 @@ function(vcpkg_configure_cmake)
)
endif()
- message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
- vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE}
- -G ${GENERATOR}
- -DCMAKE_BUILD_TYPE=Release
- -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
- LOGNAME config-${TARGET_TRIPLET}-rel
- )
- message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE}
+ -G ${GENERATOR}
+ -DCMAKE_BUILD_TYPE=Release
+ -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME config-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
+ endif()
- message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
- vcpkg_execute_required_process(
- COMMAND ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG}
- -G ${GENERATOR}
- -DCMAKE_BUILD_TYPE=Debug
- -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
- LOGNAME config-${TARGET_TRIPLET}-dbg
- )
- message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ vcpkg_execute_required_process(
+ COMMAND ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG}
+ -G ${GENERATOR}
+ -DCMAKE_BUILD_TYPE=Debug
+ -DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME config-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+ endif()
set(_VCPKG_CMAKE_GENERATOR "${GENERATOR}" PARENT_SCOPE)
endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_configure_meson.cmake b/scripts/cmake/vcpkg_configure_meson.cmake
index 143bb74de..9b87261d5 100644
--- a/scripts/cmake/vcpkg_configure_meson.cmake
+++ b/scripts/cmake/vcpkg_configure_meson.cmake
@@ -42,31 +42,35 @@ function(vcpkg_configure_meson)
set(ENV{PATH} "$ENV{PATH};${NINJA_PATH}")
# configure release
- message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
- set(ENV{CFLAGS} "${MESON_COMMON_CFLAGS} ${MESON_RELEASE_CFLAGS}")
- set(ENV{CXXFLAGS} "${MESON_COMMON_CXXFLAGS} ${MESON_RELEASE_CXXFLAGS}")
- set(ENV{LDFLAGS} "${MESON_COMMON_LDFLAGS} ${MESON_RELEASE_LDFLAGS}")
- set(ENV{CPPFLAGS} "${MESON_COMMON_CPPFLAGS} ${MESON_RELEASE_CPPFLAGS}")
- vcpkg_execute_required_process(
- COMMAND ${MESON} ${_vcm_OPTIONS} ${_vcm_OPTIONS_RELEASE} ${_vcm_SOURCE_PATH}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
- LOGNAME config-${TARGET_TRIPLET}-rel
- )
- message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
-
- # configure debug
- message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
- set(ENV{CFLAGS} "${MESON_COMMON_CFLAGS} ${MESON_DEBUG_CFLAGS}")
- set(ENV{CXXFLAGS} "${MESON_COMMON_CXXFLAGS} ${MESON_DEBUG_CXXFLAGS}")
- set(ENV{LDFLAGS} "${MESON_COMMON_LDFLAGS} ${MESON_DEBUG_LDFLAGS}")
- set(ENV{CPPFLAGS} "${MESON_COMMON_CPPFLAGS} ${MESON_DEBUG_CPPFLAGS}")
- vcpkg_execute_required_process(
- COMMAND ${MESON} ${_vcm_OPTIONS} ${_vcm_OPTIONS_DEBUG} ${_vcm_SOURCE_PATH}
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
- LOGNAME config-${TARGET_TRIPLET}-dbg
- )
- message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ set(ENV{CFLAGS} "${MESON_COMMON_CFLAGS} ${MESON_RELEASE_CFLAGS}")
+ set(ENV{CXXFLAGS} "${MESON_COMMON_CXXFLAGS} ${MESON_RELEASE_CXXFLAGS}")
+ set(ENV{LDFLAGS} "${MESON_COMMON_LDFLAGS} ${MESON_RELEASE_LDFLAGS}")
+ set(ENV{CPPFLAGS} "${MESON_COMMON_CPPFLAGS} ${MESON_RELEASE_CPPFLAGS}")
+ vcpkg_execute_required_process(
+ COMMAND ${MESON} ${_vcm_OPTIONS} ${_vcm_OPTIONS_RELEASE} ${_vcm_SOURCE_PATH}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
+ LOGNAME config-${TARGET_TRIPLET}-rel
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ # configure debug
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ set(ENV{CFLAGS} "${MESON_COMMON_CFLAGS} ${MESON_DEBUG_CFLAGS}")
+ set(ENV{CXXFLAGS} "${MESON_COMMON_CXXFLAGS} ${MESON_DEBUG_CXXFLAGS}")
+ set(ENV{LDFLAGS} "${MESON_COMMON_LDFLAGS} ${MESON_DEBUG_LDFLAGS}")
+ set(ENV{CPPFLAGS} "${MESON_COMMON_CPPFLAGS} ${MESON_DEBUG_CPPFLAGS}")
+ vcpkg_execute_required_process(
+ COMMAND ${MESON} ${_vcm_OPTIONS} ${_vcm_OPTIONS_DEBUG} ${_vcm_SOURCE_PATH}
+ WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
+ LOGNAME config-${TARGET_TRIPLET}-dbg
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+ endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index b8acfc823..b22d82a16 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -38,9 +38,18 @@ function(vcpkg_download_distfile VAR)
set(oneValueArgs FILENAME SHA512)
set(multipleValuesArgs URLS)
cmake_parse_arguments(vcpkg_download_distfile "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+
set(downloaded_file_path ${DOWNLOADS}/${vcpkg_download_distfile_FILENAME})
+ set(download_file_path_part "${DOWNLOADS}/temp/${vcpkg_download_distfile_FILENAME}")
+
+ file(REMOVE_RECURSE "${DOWNLOADS}/temp")
+ file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
function(test_hash FILE_KIND CUSTOM_ERROR_ADVICE)
+ if (_VCPKG_INTERNAL_NO_HASH_CHECK)
+ return()
+ endif()
+
message(STATUS "Testing integrity of ${FILE_KIND}...")
file(SHA512 ${downloaded_file_path} FILE_HASH)
if(NOT "${FILE_HASH}" STREQUAL "${vcpkg_download_distfile_SHA512}")
@@ -65,13 +74,13 @@ function(vcpkg_download_distfile VAR)
# Tries to download the file.
foreach(url IN LISTS vcpkg_download_distfile_URLS)
message(STATUS "Downloading ${url}...")
- file(DOWNLOAD ${url} ${downloaded_file_path} STATUS download_status)
+ file(DOWNLOAD ${url} "${download_file_path_part}" STATUS download_status)
list(GET download_status 0 status_code)
if (NOT "${status_code}" STREQUAL "0")
message(STATUS "Downloading ${url}... Failed. Status: ${download_status}")
- file(REMOVE ${downloaded_file_path})
set(download_success 0)
else()
+ file(RENAME ${download_file_path_part} ${downloaded_file_path})
message(STATUS "Downloading ${url}... OK")
set(download_success 1)
break()
diff --git a/scripts/cmake/vcpkg_execute_required_process.cmake b/scripts/cmake/vcpkg_execute_required_process.cmake
index 173bca6e9..7c4907016 100644
--- a/scripts/cmake/vcpkg_execute_required_process.cmake
+++ b/scripts/cmake/vcpkg_execute_required_process.cmake
@@ -38,13 +38,14 @@ function(vcpkg_execute_required_process)
RESULT_VARIABLE error_code
WORKING_DIRECTORY ${vcpkg_execute_required_process_WORKING_DIRECTORY})
#debug_message("error_code=${error_code}")
- file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}" NATIVE_BUILDTREES_DIR)
if(error_code)
+ file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-out.log" NATIVE_LOG_OUT)
+ file(TO_NATIVE_PATH "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-err.log" NATIVE_LOG_ERR)
message(FATAL_ERROR
" Command failed: ${vcpkg_execute_required_process_COMMAND}\n"
" Working Directory: ${vcpkg_execute_required_process_WORKING_DIRECTORY}\n"
" See logs for more information:\n"
- " ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_LOGNAME}-out.log\n"
- " ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_LOGNAME}-err.log\n")
+ " ${NATIVE_LOG_OUT}\n"
+ " ${NATIVE_LOG_ERR}\n")
endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index fdee0cb1f..066126e6c 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -148,6 +148,14 @@ function(vcpkg_find_acquire_program VAR)
set(URL "https://github.com/wixtoolset/wix3/releases/download/wix311rtm/wix311-binaries.zip")
set(ARCHIVE "wix311-binaries.zip")
set(HASH 74f0fa29b5991ca655e34a9d1000d47d4272e071113fada86727ee943d913177ae96dc3d435eaf494d2158f37560cd4c2c5274176946ebdb17bf2354ced1c516)
+ elseif(VAR MATCHES "SCONS")
+ set(PROGNAME scons)
+ set(REQUIRED_INTERPRETER PYTHON2)
+ set(SCRIPTNAME "scons.py")
+ set(PATHS ${DOWNLOADS}/tools/scons)
+ set(URL "https://sourceforge.net/projects/scons/files/scons-local-3.0.1.zip/download")
+ set(ARCHIVE "scons-local-3.0.1.zip")
+ set(HASH fe121b67b979a4e9580c7f62cfdbe0c243eba62a05b560d6d513ac7f35816d439b26d92fc2d7b7d7241c9ce2a49ea7949455a17587ef53c04a5f5125ac635727)
else()
message(FATAL "unknown tool ${VAR} -- unable to acquire.")
endif()
@@ -164,18 +172,20 @@ function(vcpkg_find_acquire_program VAR)
do_find()
if("${${VAR}}" MATCHES "-NOTFOUND")
- file(DOWNLOAD ${URL} ${DOWNLOADS}/${ARCHIVE}
- EXPECTED_HASH SHA512=${HASH}
- SHOW_PROGRESS
+ vcpkg_download_distfile(ARCHIVE_PATH
+ URLS ${URL}
+ SHA512 ${HASH}
+ FILENAME ${ARCHIVE}
)
+
file(MAKE_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR})
if(DEFINED NOEXTRACT)
- file(COPY ${DOWNLOADS}/${ARCHIVE} DESTINATION ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR})
+ file(COPY ${ARCHIVE_PATH} DESTINATION ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR})
else()
get_filename_component(ARCHIVE_EXTENSION ${ARCHIVE} EXT)
string(TOLOWER "${ARCHIVE_EXTENSION}" ARCHIVE_EXTENSION)
if(ARCHIVE_EXTENSION STREQUAL ".msi")
- file(TO_NATIVE_PATH "${DOWNLOADS}/${ARCHIVE}" ARCHIVE_NATIVE_PATH)
+ file(TO_NATIVE_PATH "${ARCHIVE_PATH}" ARCHIVE_NATIVE_PATH)
file(TO_NATIVE_PATH "${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR}" DESTINATION_NATIVE_PATH)
execute_process(
COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH}
@@ -183,7 +193,7 @@ function(vcpkg_find_acquire_program VAR)
)
else()
execute_process(
- COMMAND ${CMAKE_COMMAND} -E tar xzf ${DOWNLOADS}/${ARCHIVE}
+ COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
WORKING_DIRECTORY ${DOWNLOADS}/tools/${PROGNAME}/${SUBDIR}
)
endif()
diff --git a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
index 40ed0225f..f86ad0661 100644
--- a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
+++ b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
@@ -23,29 +23,37 @@ function(vcpkg_fixup_cmake_targets)
set(DEBUG_SHARE ${CURRENT_PACKAGES_DIR}/debug/share/${PORT})
set(RELEASE_SHARE ${CURRENT_PACKAGES_DIR}/share/${PORT})
- if(_vfct_CONFIG_PATH)
+ if(_vfct_CONFIG_PATH AND NOT RELEASE_SHARE STREQUAL "${CURRENT_PACKAGES_DIR}/${_vfct_CONFIG_PATH}")
set(DEBUG_CONFIG ${CURRENT_PACKAGES_DIR}/debug/${_vfct_CONFIG_PATH})
set(RELEASE_CONFIG ${CURRENT_PACKAGES_DIR}/${_vfct_CONFIG_PATH})
- if(NOT EXISTS ${DEBUG_CONFIG})
- message(FATAL_ERROR "'${DEBUG_CONFIG}' does not exist.")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if(NOT EXISTS ${DEBUG_CONFIG})
+ message(FATAL_ERROR "'${DEBUG_CONFIG}' does not exist.")
+ endif()
+
+ file(MAKE_DIRECTORY ${DEBUG_SHARE})
+ file(GLOB FILES ${DEBUG_CONFIG}/*)
+ file(COPY ${FILES} DESTINATION ${DEBUG_SHARE})
+ file(REMOVE_RECURSE ${DEBUG_CONFIG})
endif()
- file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/share)
- file(RENAME ${DEBUG_CONFIG} ${DEBUG_SHARE})
- file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/share)
- file(RENAME ${RELEASE_CONFIG} ${RELEASE_SHARE})
+ file(GLOB FILES ${RELEASE_CONFIG}/*)
+ file(COPY ${FILES} DESTINATION ${RELEASE_SHARE})
+ file(REMOVE_RECURSE ${RELEASE_CONFIG})
- get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG} NAME)
- string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME)
- if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake")
- file(REMOVE_RECURSE ${DEBUG_CONFIG})
- else()
- get_filename_component(DEBUG_CONFIG_PARENT_DIR ${DEBUG_CONFIG} DIRECTORY)
- get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG_PARENT_DIR} NAME)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG} NAME)
string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME)
if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake")
- file(REMOVE_RECURSE ${DEBUG_CONFIG_PARENT_DIR})
+ file(REMOVE_RECURSE ${DEBUG_CONFIG})
+ else()
+ get_filename_component(DEBUG_CONFIG_PARENT_DIR ${DEBUG_CONFIG} DIRECTORY)
+ get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG_PARENT_DIR} NAME)
+ string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME)
+ if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake")
+ file(REMOVE_RECURSE ${DEBUG_CONFIG_PARENT_DIR})
+ endif()
endif()
endif()
@@ -63,8 +71,10 @@ function(vcpkg_fixup_cmake_targets)
endif()
endif()
- if(NOT EXISTS ${DEBUG_SHARE})
- message(FATAL_ERROR "'${DEBUG_SHARE}' does not exist.")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if(NOT EXISTS ${DEBUG_SHARE})
+ message(FATAL_ERROR "'${DEBUG_SHARE}' does not exist.")
+ endif()
endif()
file(GLOB UNUSED_FILES
@@ -77,9 +87,11 @@ function(vcpkg_fixup_cmake_targets)
file(REMOVE ${UNUSED_FILES})
endif()
+ # LLVM uses "LLVMExports-release.cmake"
file(GLOB RELEASE_TARGETS
"${RELEASE_SHARE}/*[Tt]argets-release.cmake"
"${RELEASE_SHARE}/*[Cc]onfig-release.cmake"
+ "${RELEASE_SHARE}/*[Ee]xports-release.cmake"
)
foreach(RELEASE_TARGET ${RELEASE_TARGETS})
file(READ ${RELEASE_TARGET} _contents)
@@ -88,22 +100,25 @@ function(vcpkg_fixup_cmake_targets)
file(WRITE ${RELEASE_TARGET} "${_contents}")
endforeach()
- file(GLOB DEBUG_TARGETS
- "${DEBUG_SHARE}/*[Tt]argets-debug.cmake"
- "${DEBUG_SHARE}/*[Cc]onfig-debug.cmake"
- )
- foreach(DEBUG_TARGET ${DEBUG_TARGETS})
- get_filename_component(DEBUG_TARGET_NAME ${DEBUG_TARGET} NAME)
-
- file(READ ${DEBUG_TARGET} _contents)
- string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" _contents "${_contents}")
- string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \"]+\\.exe)" "\${_IMPORT_PREFIX}/tools/${PORT}/\\1" _contents "${_contents}")
- string(REPLACE "\${_IMPORT_PREFIX}/lib" "\${_IMPORT_PREFIX}/debug/lib" _contents "${_contents}")
- string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/debug/bin" _contents "${_contents}")
- file(WRITE ${CURRENT_PACKAGES_DIR}/share/${PORT}/${DEBUG_TARGET_NAME} "${_contents}")
-
- file(REMOVE ${DEBUG_TARGET})
- endforeach()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ file(GLOB DEBUG_TARGETS
+ "${DEBUG_SHARE}/*[Tt]argets-debug.cmake"
+ "${DEBUG_SHARE}/*[Cc]onfig-debug.cmake"
+ "${DEBUG_SHARE}/*[Ee]xports-debug.cmake"
+ )
+ foreach(DEBUG_TARGET ${DEBUG_TARGETS})
+ get_filename_component(DEBUG_TARGET_NAME ${DEBUG_TARGET} NAME)
+
+ file(READ ${DEBUG_TARGET} _contents)
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" _contents "${_contents}")
+ string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \"]+\\.exe)" "\${_IMPORT_PREFIX}/tools/${PORT}/\\1" _contents "${_contents}")
+ string(REPLACE "\${_IMPORT_PREFIX}/lib" "\${_IMPORT_PREFIX}/debug/lib" _contents "${_contents}")
+ string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/debug/bin" _contents "${_contents}")
+ file(WRITE ${CURRENT_PACKAGES_DIR}/share/${PORT}/${DEBUG_TARGET_NAME} "${_contents}")
+
+ file(REMOVE ${DEBUG_TARGET})
+ endforeach()
+ endif()
file(GLOB MAIN_TARGETS "${RELEASE_SHARE}/*[Tt]argets.cmake")
foreach(MAIN_TARGET ${MAIN_TARGETS})
@@ -112,6 +127,10 @@ function(vcpkg_fixup_cmake_targets)
"get_filename_component\\(_IMPORT_PREFIX \"\\\${CMAKE_CURRENT_LIST_FILE}\" PATH\\)(\nget_filename_component\\(_IMPORT_PREFIX \"\\\${_IMPORT_PREFIX}\" PATH\\))*"
"get_filename_component(_IMPORT_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_IMPORT_PREFIX \"\${_IMPORT_PREFIX}\" PATH)\nget_filename_component(_IMPORT_PREFIX \"\${_IMPORT_PREFIX}\" PATH)"
_contents "${_contents}")
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" "_INVALID_ROOT_" _contents "${_contents}")
+ string(REGEX REPLACE ";_INVALID_ROOT_/[^\";]*" "" _contents "${_contents}")
+ string(REGEX REPLACE "_INVALID_ROOT_/[^\";]*;" "" _contents "${_contents}")
+ string(REGEX REPLACE "\"_INVALID_ROOT_/[^\";]*\"" "\"\"" _contents "${_contents}")
file(WRITE ${MAIN_TARGET} "${_contents}")
endforeach()
diff --git a/scripts/cmake/vcpkg_from_bitbucket.cmake b/scripts/cmake/vcpkg_from_bitbucket.cmake
index 227de5141..26600f013 100644
--- a/scripts/cmake/vcpkg_from_bitbucket.cmake
+++ b/scripts/cmake/vcpkg_from_bitbucket.cmake
@@ -92,13 +92,13 @@ function(vcpkg_from_bitbucket)
message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
set(VCPKG_USE_HEAD_VERSION OFF)
endif()
-
+
# Handle --no-head scenarios
if(NOT VCPKG_USE_HEAD_VERSION)
if(NOT _vdud_REF)
message(FATAL_ERROR "Package does not specify REF. It must built using --head.")
endif()
-
+
set(URL "https://bitbucket.com/${ORG_NAME}/${REPO_NAME}/get/${_vdud_REF}.tar.gz")
set(downloaded_file_path "${DOWNLOADS}/${ORG_NAME}-${REPO_NAME}-${_vdud_REF}.tar.gz")
@@ -117,7 +117,7 @@ function(vcpkg_from_bitbucket)
else()
set(_version ${_vdud_REF})
endif()
-
+
vcpkg_download_distfile(ARCHIVE
URLS "https://bitbucket.com/${ORG_NAME}/${REPO_NAME}/get/${_vdud_REF}.tar.gz"
SHA512 "${_vdud_SHA512}"
@@ -150,39 +150,31 @@ function(vcpkg_from_bitbucket)
endif()
# Try to download the file and version information from bitbucket.
- message(STATUS "Downloading ${URL}...")
- file(DOWNLOAD "https://api.bitbucket.com/2.0/repositories/${ORG_NAME}/${REPO_NAME}/refs/branches/${_vdud_HEAD_REF}"
- ${downloaded_file_path}.version
- STATUS download_status
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK "TRUE")
+ vcpkg_download_distfile(ARCHIVE_VERSION
+ URLS "https://api.bitbucket.com/2.0/repositories/${ORG_NAME}/${REPO_NAME}/refs/branches/${_vdud_HEAD_REF}"
+ FILENAME ${downloaded_file_name}.version
)
- list(GET download_status 0 status_code)
- if (NOT "${status_code}" STREQUAL "0")
- file(REMOVE ${downloaded_file_path}.version)
- message(FATAL_ERROR "Downloading version info for ${URL}... Failed. Status: ${download_status}")
- endif()
- file(DOWNLOAD ${URL} ${downloaded_file_path} STATUS download_status)
- list(GET download_status 0 status_code)
- if (NOT "${status_code}" STREQUAL "0")
- file(REMOVE ${downloaded_file_path})
- message(FATAL_ERROR "Downloading ${URL}... Failed. Status: ${download_status}")
- else()
- message(STATUS "Downloading ${URL}... OK")
- endif()
+ vcpkg_download_distfile(ARCHIVE
+ URLS ${URL}
+ FILENAME ${downloaded_file_name}
+ )
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK "FALSE")
endif()
vcpkg_extract_source_archive_ex(
- ARCHIVE "${downloaded_file_path}"
+ ARCHIVE "${ARCHIVE}"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head"
)
# Parse the github refs response with regex.
# TODO: use some JSON swiss-army-knife utility instead.
- file(READ "${downloaded_file_path}.version" _contents)
+ file(READ "${ARCHIVE_VERSION}" _contents)
string(REGEX MATCH "\"hash\": \"[a-f0-9]+\"" x "${_contents}")
string(REGEX REPLACE "\"hash\": \"([a-f0-9]+)\"" "\\1" _version ${x})
string(SUBSTRING ${_version} 0 12 _vdud_HEAD_REF) # Get the 12 first numbers from commit hash
-
+
# exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build.
set(VCPKG_HEAD_VERSION ${_version} PARENT_SCOPE)
diff --git a/scripts/cmake/vcpkg_from_github.cmake b/scripts/cmake/vcpkg_from_github.cmake
index 645690353..b71ab3838 100644
--- a/scripts/cmake/vcpkg_from_github.cmake
+++ b/scripts/cmake/vcpkg_from_github.cmake
@@ -54,19 +54,19 @@ function(vcpkg_from_github)
set(multipleValuesArgs)
cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
- if(NOT _vdud_OUT_SOURCE_PATH)
+ if(NOT DEFINED _vdud_OUT_SOURCE_PATH)
message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
endif()
- if((_vdud_REF AND NOT _vdud_SHA512) OR (NOT _vdud_REF AND _vdud_SHA512))
+ if((DEFINED _vdud_REF AND NOT DEFINED _vdud_SHA512) OR (NOT DEFINED _vdud_REF AND DEFINED _vdud_SHA512))
message(FATAL_ERROR "SHA512 must be specified if REF is specified.")
endif()
- if(NOT _vdud_REPO)
+ if(NOT DEFINED _vdud_REPO)
message(FATAL_ERROR "The GitHub repository must be specified.")
endif()
- if(NOT _vdud_REF AND NOT _vdud_HEAD_REF)
+ if(NOT DEFINED _vdud_REF AND NOT DEFINED _vdud_HEAD_REF)
message(FATAL_ERROR "At least one of REF and HEAD_REF must be specified.")
endif()
@@ -80,6 +80,7 @@ function(vcpkg_from_github)
else()
# Sometimes GitHub strips a leading 'v' off the REF.
string(REGEX REPLACE "^v" "" REF ${BASEREF})
+ string(REPLACE "/" "-" REF ${REF})
set(SOURCE_PATH "${BASE}/${REPO_NAME}-${REF}")
if(EXISTS ${SOURCE_PATH})
set(${_vdud_OUT_SOURCE_PATH} "${SOURCE_PATH}" PARENT_SCOPE)
@@ -89,7 +90,7 @@ function(vcpkg_from_github)
endif()
endmacro()
- if(VCPKG_USE_HEAD_VERSION AND NOT _vdud_HEAD_REF)
+ if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED _vdud_HEAD_REF)
message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
set(VCPKG_USE_HEAD_VERSION OFF)
endif()
@@ -100,19 +101,23 @@ function(vcpkg_from_github)
message(FATAL_ERROR "Package does not specify REF. It must built using --head.")
endif()
+ string(REPLACE "/" "-" SANITIZED_REF "${_vdud_REF}")
+
vcpkg_download_distfile(ARCHIVE
URLS "https://github.com/${ORG_NAME}/${REPO_NAME}/archive/${_vdud_REF}.tar.gz"
SHA512 "${_vdud_SHA512}"
- FILENAME "${ORG_NAME}-${REPO_NAME}-${_vdud_REF}.tar.gz"
+ FILENAME "${ORG_NAME}-${REPO_NAME}-${SANITIZED_REF}.tar.gz"
)
vcpkg_extract_source_archive_ex(ARCHIVE "${ARCHIVE}")
- set_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src ${_vdud_REF})
+ set_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src ${SANITIZED_REF})
return()
endif()
# The following is for --head scenarios
set(URL "https://github.com/${ORG_NAME}/${REPO_NAME}/archive/${_vdud_HEAD_REF}.tar.gz")
- set(downloaded_file_path "${DOWNLOADS}/${ORG_NAME}-${REPO_NAME}-${_vdud_HEAD_REF}.tar.gz")
+ string(REPLACE "/" "-" SANITIZED_HEAD_REF "${_vdud_HEAD_REF}")
+ set(downloaded_file_name "${ORG_NAME}-${REPO_NAME}-${SANITIZED_HEAD_REF}.tar.gz")
+ set(downloaded_file_path "${DOWNLOADS}/${downloaded_file_name}")
if(_VCPKG_NO_DOWNLOADS)
if(NOT EXISTS ${downloaded_file_path} OR NOT EXISTS ${downloaded_file_path}.version)
@@ -132,40 +137,32 @@ function(vcpkg_from_github)
endif()
# Try to download the file and version information from github.
- message(STATUS "Downloading ${URL}...")
- file(DOWNLOAD "https://api.github.com/repos/${ORG_NAME}/${REPO_NAME}/git/refs/heads/${_vdud_HEAD_REF}"
- ${downloaded_file_path}.version
- STATUS download_status
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK "TRUE")
+ vcpkg_download_distfile(ARCHIVE_VERSION
+ URLS "https://api.github.com/repos/${ORG_NAME}/${REPO_NAME}/git/refs/heads/${_vdud_HEAD_REF}"
+ FILENAME ${downloaded_file_name}.version
)
- list(GET download_status 0 status_code)
- if (NOT "${status_code}" STREQUAL "0")
- file(REMOVE ${downloaded_file_path}.version)
- message(FATAL_ERROR "Downloading version info for ${URL}... Failed. Status: ${download_status}")
- endif()
- file(DOWNLOAD ${URL} ${downloaded_file_path} STATUS download_status)
- list(GET download_status 0 status_code)
- if (NOT "${status_code}" STREQUAL "0")
- file(REMOVE ${downloaded_file_path})
- message(FATAL_ERROR "Downloading ${URL}... Failed. Status: ${download_status}")
- else()
- message(STATUS "Downloading ${URL}... OK")
- endif()
+ vcpkg_download_distfile(ARCHIVE
+ URLS ${URL}
+ FILENAME ${downloaded_file_name}
+ )
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK "FALSE")
endif()
vcpkg_extract_source_archive_ex(
- ARCHIVE "${downloaded_file_path}"
+ ARCHIVE "${ARCHIVE}"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head"
)
# Parse the github refs response with regex.
# TODO: use some JSON swiss-army-knife utility instead.
- file(READ "${downloaded_file_path}.version" _contents)
+ file(READ "${ARCHIVE_VERSION}" _contents)
string(REGEX MATCH "\"sha\": \"[a-f0-9]+\"" x "${_contents}")
string(REGEX REPLACE "\"sha\": \"([a-f0-9]+)\"" "\\1" _version ${x})
# exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build.
set(VCPKG_HEAD_VERSION ${_version} PARENT_SCOPE)
- set_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/head ${_vdud_HEAD_REF})
+ set_SOURCE_PATH(${CURRENT_BUILDTREES_DIR}/src/head ${SANITIZED_HEAD_REF})
endfunction()
diff --git a/scripts/cmake/vcpkg_get_windows_sdk.cmake b/scripts/cmake/vcpkg_get_windows_sdk.cmake
index 64d8838e7..a8aad64a9 100644
--- a/scripts/cmake/vcpkg_get_windows_sdk.cmake
+++ b/scripts/cmake/vcpkg_get_windows_sdk.cmake
@@ -10,7 +10,7 @@ function(vcpkg_get_windows_sdk ret)
message(FATAL_ERROR "Could not find Windows SDK")
endif()
- # Remove trailing newline
- string(REGEX REPLACE "\n$" "" WINDOWS_SDK "${WINDOWS_SDK}")
+ # Remove trailing newline and non-numeric characters
+ string(REGEX REPLACE "[^0-9.]" "" WINDOWS_SDK "${WINDOWS_SDK}")
set(${ret} ${WINDOWS_SDK} PARENT_SCOPE)
endfunction() \ No newline at end of file
diff --git a/scripts/fetchDependency.ps1 b/scripts/fetchDependency.ps1
index df03878eb..830ec7064 100644
--- a/scripts/fetchDependency.ps1
+++ b/scripts/fetchDependency.ps1
@@ -1,140 +1,32 @@
[CmdletBinding()]
param(
- [string]$Dependency
+ [Parameter(Mandatory=$true)][string]$Dependency
)
-function Test-Command($commandName)
-{
- return [bool](Get-Command -Name $commandName -ErrorAction SilentlyContinue)
-}
-
-function Test-Module($moduleName)
-{
- return [bool](Get-Module -ListAvailable -Name $moduleName)
-}
-
-if (Test-Module -moduleName 'BitsTransfer')
-{
- Import-Module BitsTransfer -Verbose:$false
-}
+$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
+. "$scriptsDir\VcpkgPowershellUtils.ps1"
Write-Verbose "Fetching dependency: $Dependency"
-
-$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
$vcpkgRootDir = & $scriptsDir\findFileRecursivelyUp.ps1 $scriptsDir .vcpkg-root
$downloadsDir = "$vcpkgRootDir\downloads"
function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
{
- function performDownload( [Parameter(Mandatory=$true)][string]$Dependency,
- [Parameter(Mandatory=$true)][string]$url,
- [Parameter(Mandatory=$true)][string]$downloadDir,
- [Parameter(Mandatory=$true)][string]$downloadPath,
- [Parameter(Mandatory=$true)][string]$downloadVersion,
- [Parameter(Mandatory=$true)][string]$requiredVersion)
- {
- if (Test-Path $downloadPath)
- {
- return
- }
-
- # Can't print because vcpkg captures the output and expects only the path that is returned at the end of this script file
- # Write-Host "A suitable version of $Dependency was not found (required v$requiredVersion). Downloading portable $Dependency v$downloadVersion..."
-
- if (!(Test-Path $downloadDir))
- {
- New-Item -ItemType directory -Path $downloadDir | Out-Null
- }
-
- $WC = New-Object System.Net.WebClient
- $ProxyAuth = !$WC.Proxy.IsBypassed($url)
- if ($ProxyAuth)
- {
- $ProxyCred = Get-Credential -Message "Enter credentials for Proxy Authentication"
- $PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyAuthentication","Basic")
- $PSDefaultParameterValues.Add("Start-BitsTransfer:ProxyCredential",$ProxyCred)
- $WC.Proxy.Credentials=$ProxyCred
- }
-
- # git and installerbase fail with Start-BitsTransfer
- if ((Test-Command -commandName 'Start-BitsTransfer') -and ($Dependency -ne "git")-and ($Dependency -ne "installerbase"))
- {
- try
- {
- Start-BitsTransfer -Source $url -Destination $downloadPath -ErrorAction Stop
- return
- }
- catch [System.Exception]
- {
- # If BITS fails for any reason, delete any potentially partially downloaded files and continue
- if (Test-Path $downloadPath)
- {
- Remove-Item $downloadPath
- }
- }
- }
-
- Write-Verbose("Downloading $Dependency...")
- $WC.DownloadFile($url, $downloadPath)
- }
-
# Enums (without resorting to C#) are only available on powershell 5+.
$ExtractionType_NO_EXTRACTION_REQUIRED = 0
$ExtractionType_ZIP = 1
$ExtractionType_SELF_EXTRACTING_7Z = 2
-
- # Using this to wait for the execution to finish
- function Invoke-Command()
- {
- param ( [string]$program = $(throw "Please specify a program" ),
- [string]$argumentString = "",
- [switch]$waitForExit )
-
- $psi = new-object "Diagnostics.ProcessStartInfo"
- $psi.FileName = $program
- $psi.Arguments = $argumentString
- $proc = [Diagnostics.Process]::Start($psi)
- if ( $waitForExit )
- {
- $proc.WaitForExit();
- }
- }
-
- function Expand-ZIPFile($file, $destination)
- {
- if (!(Test-Path $destination))
- {
- New-Item -ItemType Directory -Path $destination | Out-Null
- }
-
- if (Test-Command -commandName 'Expand-Archive')
- {
- Expand-Archive -path $file -destinationpath $destination
- }
- else
- {
- $shell = new-object -com shell.application
- $zip = $shell.NameSpace($file)
- foreach($item in $zip.items())
- {
- # Piping to Out-Null is used to block until finished
- $shell.Namespace($destination).copyhere($item) | Out-Null
- }
- }
- }
-
if($Dependency -eq "cmake")
{
- $requiredVersion = "3.9.4"
- $downloadVersion = "3.9.4"
- $url = "https://cmake.org/files/v3.9/cmake-3.9.4-win32-x86.zip"
- $downloadPath = "$downloadsDir\cmake-3.9.4-win32-x86.zip"
- $expectedDownloadedFileHash = "8214df1ff51f9a6a1f0e27f9bd18f402b1749c5b645fbf6e401bcb00047171cd"
- $executableFromDownload = "$downloadsDir\cmake-3.9.4-win32-x86\bin\cmake.exe"
+ $requiredVersion = "3.10.0"
+ $downloadVersion = "3.10.0"
+ $url = "https://cmake.org/files/v3.10/cmake-3.10.0-win32-x86.zip"
+ $downloadPath = "$downloadsDir\cmake-3.10.0-win32-x86.zip"
+ $expectedDownloadedFileHash = "dce666e897f95a88d3eed6cddd1faa3f44179d519b33ca6065b385bbc7072419"
+ $executableFromDownload = "$downloadsDir\cmake-3.10.0-win32-x86\bin\cmake.exe"
$extractionType = $ExtractionType_ZIP
- $extractionFolder = $downloadsDir
}
elseif($Dependency -eq "nuget")
{
@@ -148,26 +40,25 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
}
elseif($Dependency -eq "vswhere")
{
- $requiredVersion = "2.2.7"
- $downloadVersion = "2.2.7"
- $url = "https://github.com/Microsoft/vswhere/releases/download/2.2.7/vswhere.exe"
+ $requiredVersion = "2.2.11"
+ $downloadVersion = "2.2.11"
+ $url = "https://github.com/Microsoft/vswhere/releases/download/2.2.11/vswhere.exe"
$downloadPath = "$downloadsDir\vswhere-$downloadVersion\vswhere.exe"
- $expectedDownloadedFileHash = "f50303881da706132516d9decfd5314d524a0044daf49c0cfd21dc39c1261ec3"
+ $expectedDownloadedFileHash = "0235c2cb6341978abdf32e27fcf1d7af5cb5514c035e529c4cd9283e6f1a261f"
$executableFromDownload = $downloadPath
$extractionType = $ExtractionType_NO_EXTRACTION_REQUIRED
}
elseif($Dependency -eq "git")
{
- $requiredVersion = "2.14.2"
- $downloadVersion = "2.14.2"
- $url = "https://github.com/git-for-windows/git/releases/download/v2.14.2.windows.3/MinGit-2.14.2.3-32-bit.zip" # We choose the 32-bit version
- $downloadPath = "$downloadsDir\MinGit-2.14.2.3-32-bit.zip"
- $expectedDownloadedFileHash = "7cc1f27e1cfe79381e1a504a5fc7bc33951ac9031cd14c3bf478769d21a26cce"
+ $requiredVersion = "2.15.0"
+ $downloadVersion = "2.15.0"
+ $url = "https://github.com/git-for-windows/git/releases/download/v2.15.0.windows.1/MinGit-2.15.0-32-bit.zip"
+ $downloadPath = "$downloadsDir\MinGit-2.15.0-32-bit.zip"
+ $expectedDownloadedFileHash = "69c035ab7b75c42ce5dd99e8927d2624ab618fab73c5ad84c9412bd74c343537"
# There is another copy of git.exe in MinGit\bin. However, an installed version of git add the cmd dir to the PATH.
# Therefore, choosing the cmd dir here as well.
- $executableFromDownload = "$downloadsDir\MinGit-2.14.2.3-32-bit\cmd\git.exe"
+ $executableFromDownload = "$downloadsDir\MinGit-2.15.0-32-bit\cmd\git.exe"
$extractionType = $ExtractionType_ZIP
- $extractionFolder = "$downloadsDir\MinGit-2.14.2.3-32-bit"
}
elseif($Dependency -eq "installerbase")
{
@@ -178,38 +69,16 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
$expectedDownloadedFileHash = "f2ce23cf5cf9fc7ce409bdca49328e09a070c0026d3c8a04e4dfde7b05b83fe8"
$executableFromDownload = "$downloadsDir\QtInstallerFramework-win-x86\bin\installerbase.exe"
$extractionType = $ExtractionType_ZIP
- $extractionFolder = $downloadsDir
}
else
{
throw "Unknown program requested"
}
- $downloadSubdir = Split-path $downloadPath -Parent
- if (!(Test-Path $downloadSubdir))
- {
- New-Item -ItemType Directory -Path $downloadSubdir | Out-Null
- }
-
- performDownload $Dependency $url $downloadsDir $downloadPath $downloadVersion $requiredVersion
-
- #calculating the hash
- if (Test-Command -commandName 'Get-FileHash')
- {
- $downloadedFileHash = (Get-FileHash -Path $downloadPath -Algorithm SHA256).Hash
- }
- else
- {
- $hashAlgorithm = [Security.Cryptography.HashAlgorithm]::Create("SHA256")
- $fileAsByteArray = [io.File]::ReadAllBytes($downloadPath)
- $hashByteArray = $hashAlgorithm.ComputeHash($fileAsByteArray)
- $downloadedFileHash = -Join ($hashByteArray | ForEach-Object {"{0:x2}" -f $_})
- }
+ vcpkgDownloadFile $url $downloadPath
- if ($expectedDownloadedFileHash -ne $downloadedFileHash)
- {
- throw [System.IO.FileNotFoundException] ("Mismatching hash of the downloaded " + $Dependency)
- }
+ $downloadedFileHash = vcpkgGetSHA256 $downloadPath
+ vcpkgCheckEqualFileHash -filePath $downloadPath -expectedHash $expectedDownloadedFileHash -actualHash $downloadedFileHash
if ($extractionType -eq $ExtractionType_NO_EXTRACTION_REQUIRED)
{
@@ -217,17 +86,17 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
}
elseif($extractionType -eq $ExtractionType_ZIP)
{
- if (-not (Test-Path $executableFromDownload)) # consider renaming the extraction folder to make sure the extraction finished
+ if (-not (Test-Path $executableFromDownload))
{
- # Expand-Archive $downloadPath -dest "$extractionFolder" -Force # Requires powershell 5+
- Expand-ZIPFile -File $downloadPath -Destination $extractionFolder
+ $extractFolderName = (Get-ChildItem $downloadPath).BaseName
+ vcpkgExtractFile -File $downloadPath -DestinationDir "$downloadsDir\$extractFolderName"
}
}
elseif($extractionType -eq $ExtractionType_SELF_EXTRACTING_7Z)
{
if (-not (Test-Path $executableFromDownload))
{
- Invoke-Command $downloadPath "-y" -waitForExit:$true
+ vcpkgInvokeCommand $downloadPath "-y" -wait:$true
}
}
else
@@ -237,12 +106,12 @@ function SelectProgram([Parameter(Mandatory=$true)][string]$Dependency)
if (-not (Test-Path $executableFromDownload))
{
- throw [System.IO.FileNotFoundException] ("Could not detect or download " + $Dependency)
+ throw ("Could not detect or download " + $Dependency)
}
return $executableFromDownload
}
-SelectProgram $Dependency
-
+$path = SelectProgram $Dependency
Write-Verbose "Fetching dependency: $Dependency. Done."
+return "<sol>::$path::<eol>"
diff --git a/scripts/findAnyMSBuildWithCppPlatformToolset.ps1 b/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
index 3269562dc..46ba767b9 100644
--- a/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
+++ b/scripts/findAnyMSBuildWithCppPlatformToolset.ps1
@@ -1,17 +1,22 @@
[CmdletBinding()]
param(
[Parameter(Mandatory=$False)]
- [string]$explicitlyRequestedVSPath = ""
+ [string]$withVSPath = ""
)
-$explicitlyRequestedVSPath = $explicitlyRequestedVSPath -replace "\\$" # Remove potential trailing backslash
+$withVSPath = $withVSPath -replace "\\$" # Remove potential trailing backslash
$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
$VisualStudioInstallationInstances = & $scriptsDir\findVisualStudioInstallationInstances.ps1
+if ($VisualStudioInstallationInstances -eq $null)
+{
+ throw "Could not find Visual Studio. VS2015 or VS2017 (with C++) needs to be installed."
+}
+
Write-Verbose "VS Candidates:`n`r$([system.String]::Join([Environment]::NewLine, $VisualStudioInstallationInstances))"
foreach ($instanceCandidateWithEOL in $VisualStudioInstallationInstances)
{
- $instanceCandidate = $instanceCandidateWithEOL -replace "::<eol>"
+ $instanceCandidate = $instanceCandidateWithEOL -replace "<sol>::" -replace "::<eol>"
Write-Verbose "Inspecting: $instanceCandidate"
$split = $instanceCandidate -split "::"
# $preferenceWeight = $split[0]
@@ -19,7 +24,7 @@ foreach ($instanceCandidateWithEOL in $VisualStudioInstallationInstances)
$version = $split[2]
$path = $split[3]
- if ($explicitlyRequestedVSPath -ne "" -and $explicitlyRequestedVSPath -ne $path)
+ if ($withVSPath -ne "" -and $withVSPath -ne $path)
{
Write-Verbose "Skipping: $instanceCandidate"
continue
diff --git a/scripts/findVisualStudioInstallationInstances.ps1 b/scripts/findVisualStudioInstallationInstances.ps1
index 566560cdb..e3bc67ff6 100644
--- a/scripts/findVisualStudioInstallationInstances.ps1
+++ b/scripts/findVisualStudioInstallationInstances.ps1
@@ -4,7 +4,7 @@ param(
)
$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
-$vswhereExe = & $scriptsDir\fetchDependency.ps1 "vswhere"
+$vswhereExe = (& $scriptsDir\fetchDependency.ps1 "vswhere") -replace "<sol>::" -replace "::<eol>"
$output = & $vswhereExe -prerelease -legacy -products * -format xml
[xml]$asXml = $output
@@ -29,7 +29,7 @@ foreach ($instance in $asXml.instances.instance)
}
# Placed like that for easy sorting according to preference
- $results.Add("${releaseType}::${installationVersion}::${installationPath}::<eol>") > $null
+ $results.Add("<sol>::${releaseType}::${installationVersion}::${installationPath}::<eol>") > $null
}
# If nothing is found, attempt to find VS2015 Build Tools (not detected by vswhere.exe)
@@ -42,7 +42,7 @@ if ($results.Count -eq 0)
if ((Test-Path $clExe) -And (Test-Path $vcvarsallbat))
{
- return "PreferenceWeight1::Legacy::14.0::$installationPath::<eol>"
+ return "<sol>::PreferenceWeight1::Legacy::14.0::$installationPath::<eol>"
}
}
diff --git a/scripts/get_triplet_environment.cmake b/scripts/get_triplet_environment.cmake
index b32f840d2..bc79b16ce 100644
--- a/scripts/get_triplet_environment.cmake
+++ b/scripts/get_triplet_environment.cmake
@@ -6,4 +6,6 @@ message("VCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}")
message("VCPKG_CMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
message("VCPKG_CMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
message("VCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}")
-message("VCPKG_VISUAL_STUDIO_PATH=${VCPKG_VISUAL_STUDIO_PATH}") \ No newline at end of file
+message("VCPKG_VISUAL_STUDIO_PATH=${VCPKG_VISUAL_STUDIO_PATH}")
+message("VCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
+message("VCPKG_BUILD_TYPE=${VCPKG_BUILD_TYPE}")
diff --git a/scripts/internalCI.ps1 b/scripts/internalCI.ps1
index 887eb7bea..37f4f35a4 100644
--- a/scripts/internalCI.ps1
+++ b/scripts/internalCI.ps1
@@ -1,24 +1,22 @@
$ErrorActionPreference = "Stop"
+rm TEST-internal-ci.xml -errorAction SilentlyContinue
+
New-Item -type directory downloads -errorAction SilentlyContinue | Out-Null
./scripts/bootstrap.ps1
if (-not $?) { throw $? }
# Clear out any intermediate files from the previous build
-Get-ChildItem buildtrees/*/* | ? { $_.Name -ne "src" -and $_.Extension -ne ".log"} | Remove-Item -Recurse -Force
+if (Test-Path buildtrees)
+{
+ Get-ChildItem buildtrees/*/* | ? { $_.Name -ne "src" } | Remove-Item -Recurse -Force
+}
# Purge any outdated packages
./vcpkg remove --outdated --recurse
if (-not $?) { throw $? }
-./vcpkg.exe install azure-storage-cpp cpprestsdk:x64-windows-static cpprestsdk:x86-uwp
-if (-not $?) { throw $? }
-
-./vcpkg.exe install bond cryptopp zlib expat sdl2 curl sqlite3 libuv protobuf:x64-windows sfml opencv:x64-windows uwebsockets uwebsockets:x64-windows-static
+./vcpkg.exe install azure-storage-cpp cpprestsdk:x64-windows-static cpprestsdk:x86-uwp `
+bond cryptopp zlib expat sdl2 curl sqlite3 libuv protobuf:x64-windows sfml opencv:x64-windows uwebsockets uwebsockets:x64-windows-static `
+opencv:x86-uwp boost:x86-uwp --keep-going "--x-xunit=TEST-internal-ci.xml"
if (-not $?) { throw $? }
-
-./vcpkg.exe install opencv:x86-uwp boost:x86-uwp
-if (-not $?) { throw $? }
-
-# ./vcpkg.exe install folly:x64-windows
-# if (-not $?) { throw $? }
diff --git a/scripts/ports.cmake b/scripts/ports.cmake
index 8b4d17d80..ef06a4d65 100644
--- a/scripts/ports.cmake
+++ b/scripts/ports.cmake
@@ -108,10 +108,12 @@ elseif(CMD MATCHES "^CREATE$")
message(STATUS "If this is not desired, delete the file and ${NATIVE_VCPKG_ROOT_DIR}\\ports\\${PORT}")
else()
include(vcpkg_download_distfile)
- file(DOWNLOAD ${URL} ${DOWNLOADS}/${FILENAME} STATUS error_code)
- if(NOT error_code MATCHES "0;")
- message(FATAL_ERROR "Error downloading file: ${error_code}")
- endif()
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK "TRUE")
+ vcpkg_download_distfile(ARCHIVE
+ URLS ${URL}
+ FILENAME ${FILENAME}
+ )
+ set(_VCPKG_INTERNAL_NO_HASH_CHECK "FALSE")
endif()
file(SHA512 ${DOWNLOADS}/${FILENAME} SHA512)