aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/boost/.gitignore3
-rw-r--r--scripts/boost/generate-ports.ps1421
-rw-r--r--scripts/boost/post-build-stubs/config.cmake7
-rw-r--r--scripts/boost/post-build-stubs/context.cmake6
-rw-r--r--scripts/boost/post-build-stubs/exception.cmake3
-rw-r--r--scripts/boost/post-build-stubs/predef.cmake2
-rw-r--r--scripts/boost/post-build-stubs/test.cmake14
-rw-r--r--scripts/boost/post-source-stubs/context.cmake5
-rw-r--r--scripts/boost/post-source-stubs/fiber.cmake5
-rw-r--r--scripts/boost/post-source-stubs/iostreams.cmake18
-rw-r--r--scripts/boost/post-source-stubs/log.cmake13
-rw-r--r--scripts/boost/post-source-stubs/python.cmake5
-rw-r--r--scripts/boost/post-source-stubs/test.cmake5
-rw-r--r--scripts/bootstrap.ps13
-rw-r--r--scripts/bootstrap.sh16
-rw-r--r--scripts/buildsystems/msbuild/applocal.ps12
-rw-r--r--scripts/buildsystems/vcpkg.cmake51
-rw-r--r--scripts/cleanEnvironmentHelper.ps12
-rw-r--r--scripts/cmake/execute_process.cmake20
-rw-r--r--scripts/cmake/vcpkg_acquire_msys.cmake8
-rw-r--r--scripts/cmake/vcpkg_add_to_path.cmake12
-rw-r--r--scripts/cmake/vcpkg_apply_patches.cmake4
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake9
-rw-r--r--scripts/cmake/vcpkg_build_make.cmake183
-rw-r--r--scripts/cmake/vcpkg_build_msbuild.cmake2
-rw-r--r--scripts/cmake/vcpkg_build_nmake.cmake222
-rw-r--r--scripts/cmake/vcpkg_build_qmake.cmake83
-rw-r--r--scripts/cmake/vcpkg_buildpath_length_warning.cmake8
-rw-r--r--scripts/cmake/vcpkg_check_features.cmake191
-rw-r--r--scripts/cmake/vcpkg_common_definitions.cmake106
-rw-r--r--scripts/cmake/vcpkg_common_functions.cmake10
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake189
-rw-r--r--scripts/cmake/vcpkg_configure_make.cmake372
-rw-r--r--scripts/cmake/vcpkg_configure_meson.cmake9
-rw-r--r--scripts/cmake/vcpkg_configure_qmake.cmake46
-rw-r--r--scripts/cmake/vcpkg_copy_tool_dependencies.cmake2
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake13
-rw-r--r--scripts/cmake/vcpkg_execute_build_process.cmake4
-rw-r--r--scripts/cmake/vcpkg_execute_required_process.cmake22
-rw-r--r--scripts/cmake/vcpkg_execute_required_process_repeat.cmake4
-rw-r--r--scripts/cmake/vcpkg_extract_source_archive.cmake1
-rw-r--r--scripts/cmake/vcpkg_extract_source_archive_ex.cmake21
-rw-r--r--scripts/cmake/vcpkg_fail_port_install.cmake92
-rw-r--r--scripts/cmake/vcpkg_find_acquire_program.cmake101
-rw-r--r--scripts/cmake/vcpkg_fixup_cmake_targets.cmake26
-rw-r--r--scripts/cmake/vcpkg_from_git.cmake64
-rw-r--r--scripts/cmake/vcpkg_from_github.cmake1
-rw-r--r--scripts/cmake/vcpkg_from_gitlab.cmake2
-rw-r--r--scripts/cmake/vcpkg_install_make.cmake25
-rw-r--r--scripts/cmake/vcpkg_install_msbuild.cmake4
-rw-r--r--scripts/cmake/vcpkg_install_nmake.cmake86
-rw-r--r--scripts/cmake/vcpkg_prettify_command.cmake26
-rw-r--r--scripts/cmake/vcpkg_test_cmake.cmake55
-rw-r--r--scripts/get_triplet_environment.cmake5
-rw-r--r--scripts/ports.cmake51
-rw-r--r--scripts/templates/CONTROL.in9
-rw-r--r--scripts/templates/portfile.in.cmake38
-rw-r--r--scripts/toolchains/windows.cmake6
-rw-r--r--scripts/vcpkgTools.xml7
59 files changed, 2350 insertions, 370 deletions
diff --git a/scripts/boost/.gitignore b/scripts/boost/.gitignore
new file mode 100644
index 000000000..f8e31288e
--- /dev/null
+++ b/scripts/boost/.gitignore
@@ -0,0 +1,3 @@
+/boost
+/downloads
+/libs \ No newline at end of file
diff --git a/scripts/boost/generate-ports.ps1 b/scripts/boost/generate-ports.ps1
new file mode 100644
index 000000000..5f5897718
--- /dev/null
+++ b/scripts/boost/generate-ports.ps1
@@ -0,0 +1,421 @@
+[CmdletBinding()]
+param (
+ $libraries = @(),
+ $version = "1.71.0"
+)
+
+$scriptsDir = split-path -parent $MyInvocation.MyCommand.Definition
+$portsDir = "$scriptsDir/../../ports"
+
+function TransformReference()
+{
+ param (
+ [string]$library
+ )
+
+ if ($library -match "fiber")
+ {
+ # these only work on windows desktop
+ "$library (windows)"
+ }
+ elseif ($library -match "type[_-]erasure|contract")
+ {
+ # These only work on x86-derived processors
+ "$library (!arm)"
+ }
+ elseif ($library -match "iostreams|filesystem|context|stacktrace|coroutine`$|locale|test|wave|log`$")
+ {
+ "$library (!uwp)"
+ }
+ else
+ {
+ "$library"
+ }
+}
+
+function Generate()
+{
+ param (
+ [string]$Name,
+ [string]$Hash,
+ [bool]$NeedsBuild,
+ $Depends = @()
+ )
+
+ $controlDeps = ($Depends | sort) -join ", "
+
+ $sanitizedName = $name -replace "_","-"
+
+ $versionsuffix = ""
+ if ($Name -eq "asio" -or $Name -eq "mpi")
+ {
+ $versionsuffix = "-1"
+ }
+
+ if ($Name -eq "python" -or $Name -eq "test")
+ {
+ $versionsuffix = "-2"
+ }
+
+ mkdir "$portsDir/boost-$sanitizedName" -erroraction SilentlyContinue | out-null
+ $controlLines = @(
+ "# Automatically generated by boost-vcpkg-helpers/generate-ports.ps1"
+ "Source: boost-$sanitizedName"
+ "Version: $version$versionsuffix"
+ "Build-Depends: $controlDeps"
+ "Homepage: https://github.com/boostorg/$name"
+ "Description: Boost $Name module"
+ )
+ if ($Name -eq "locale")
+ {
+ $controlLines += @(
+ ""
+ "Feature: icu"
+ "Description: ICU backend for Boost.Locale"
+ "Build-Depends: icu"
+ )
+ }
+ if ($Name -eq "regex")
+ {
+ $controlLines += @(
+ ""
+ "Feature: icu"
+ "Description: ICU backend for Boost.Regex"
+ "Build-Depends: icu"
+ )
+ }
+ $controlLines | out-file -enc ascii "$portsDir/boost-$sanitizedName/CONTROL"
+
+ $portfileLines = @(
+ "# Automatically generated by boost-vcpkg-helpers/generate-ports.ps1"
+ ""
+ "include(vcpkg_common_functions)"
+ ""
+ "vcpkg_from_github("
+ " OUT_SOURCE_PATH SOURCE_PATH"
+ " REPO boostorg/$Name"
+ " REF boost-$version"
+ " SHA512 $Hash"
+ " HEAD_REF master"
+ )
+ if ($Name -eq "asio")
+ {
+ $portfileLines += @(" PATCHES windows_alloca_header.patch")
+ }
+ if ($Name -eq "iostreams")
+ {
+ $portfileLines += @(" PATCHES Removeseekpos.patch")
+ }
+ $portfileLines += @(
+ ")"
+ ""
+ )
+
+ if (Test-Path "$scriptsDir/post-source-stubs/$Name.cmake")
+ {
+ $portfileLines += @(get-content "$scriptsDir/post-source-stubs/$Name.cmake")
+ }
+
+ if ($NeedsBuild)
+ {
+ if ($Name -eq "locale")
+ {
+ $portfileLines += @(
+ "if(`"icu`" IN_LIST FEATURES)"
+ " set(BOOST_LOCALE_ICU on)"
+ "else()"
+ " set(BOOST_LOCALE_ICU off)"
+ "endif()"
+ ""
+ "include(`${CURRENT_INSTALLED_DIR}/share/boost-build/boost-modular-build.cmake)"
+ "boost_modular_build("
+ " SOURCE_PATH `${SOURCE_PATH}"
+ " BOOST_CMAKE_FRAGMENT `"`${CMAKE_CURRENT_LIST_DIR}/cmake-fragment.cmake`""
+ " OPTIONS"
+ " boost.locale.iconv=off"
+ " boost.locale.posix=off"
+ " /boost/locale//boost_locale"
+ " boost.locale.icu=`${BOOST_LOCALE_ICU}"
+ ")"
+ )
+ }
+ elseif ($Name -eq "regex")
+ {
+ $portfileLines += @(
+ "if(`"icu`" IN_LIST FEATURES)"
+ " set(REQUIREMENTS `"<library>/user-config//icuuc <library>/user-config//icudt <library>/user-config//icuin <define>BOOST_HAS_ICU=1`")"
+ "else()"
+ " set(REQUIREMENTS)"
+ "endif()"
+ ""
+ "include(`${CURRENT_INSTALLED_DIR}/share/boost-build/boost-modular-build.cmake)"
+ "boost_modular_build(SOURCE_PATH `${SOURCE_PATH} REQUIREMENTS `"`${REQUIREMENTS}`")"
+ )
+ }
+ elseif ($Name -eq "thread")
+ {
+ $portfileLines += @(
+ "include(`${CURRENT_INSTALLED_DIR}/share/boost-build/boost-modular-build.cmake)"
+ "boost_modular_build("
+ " SOURCE_PATH `${SOURCE_PATH}"
+ " REQUIREMENTS `"<library>/boost/date_time//boost_date_time`""
+ " OPTIONS /boost/thread//boost_thread"
+ " BOOST_CMAKE_FRAGMENT `${CMAKE_CURRENT_LIST_DIR}/b2-options.cmake"
+ ")"
+ )
+ }
+ elseif ($Name -eq "iostreams")
+ {
+ }
+ else
+ {
+ $portfileLines += @(
+ "include(`${CURRENT_INSTALLED_DIR}/share/boost-build/boost-modular-build.cmake)"
+ "boost_modular_build(SOURCE_PATH `${SOURCE_PATH})"
+ )
+ }
+ }
+ if ($Name -ne "iostreams")
+ {
+ $portfileLines += @(
+ "include(`${CURRENT_INSTALLED_DIR}/share/boost-vcpkg-helpers/boost-modular-headers.cmake)"
+ "boost_modular_headers(SOURCE_PATH `${SOURCE_PATH})"
+ )
+ }
+
+ if (Test-Path "$scriptsDir/post-build-stubs/$Name.cmake")
+ {
+ $portfileLines += @(get-content "$scriptsDir/post-build-stubs/$Name.cmake")
+ }
+
+ $portfileLines | out-file -enc ascii "$portsDir/boost-$sanitizedName/portfile.cmake"
+}
+
+if (!(Test-Path "$scriptsDir/boost"))
+{
+ "Cloning boost..."
+ pushd $scriptsDir
+ try
+ {
+ git clone https://github.com/boostorg/boost --branch boost-$version
+ }
+ finally
+ {
+ popd
+ }
+}
+else
+{
+ pushd $scriptsDir/boost
+ try
+ {
+ git fetch
+ git checkout -f boost-$version
+ }
+ finally
+ {
+ popd
+ }
+}
+
+$libraries_found = ls $scriptsDir/boost/libs -directory | % name | % {
+ if ($_ -match "numeric")
+ {
+ "numeric_conversion"
+ "interval"
+ "odeint"
+ "ublas"
+ "safe_numerics"
+ }
+ elseif ($_ -eq "headers")
+ {
+ }
+ else
+ {
+ $_
+ }
+}
+
+mkdir $scriptsDir/downloads -erroraction SilentlyContinue | out-null
+
+if ($libraries.Length -eq 0)
+{
+ $libraries = $libraries_found
+}
+
+$libraries_in_boost_port = @()
+
+foreach ($library in $libraries)
+{
+ "Handling boost/$library..."
+ $archive = "$scriptsDir/downloads/$library-boost-$version.tar.gz"
+ if (!(Test-Path $archive))
+ {
+ "Downloading boost/$library..."
+ & @(vcpkg fetch aria2)[-1] "https://github.com/boostorg/$library/archive/boost-$version.tar.gz" -d "$scriptsDir/downloads" -o "$library-boost-$version.tar.gz"
+ }
+ $hash = vcpkg hash $archive
+ $unpacked = "$scriptsDir/libs/$library-boost-$version"
+ if (!(Test-Path $unpacked))
+ {
+ "Unpacking boost/$library..."
+ mkdir $scriptsDir/libs -erroraction SilentlyContinue | out-null
+ pushd $scriptsDir/libs
+ try
+ {
+ cmake -E tar xf $archive
+ }
+ finally
+ {
+ popd
+ }
+ }
+ pushd $unpacked
+ try
+ {
+ $groups = $(
+ findstr /si /C:"include <boost/" include/*
+ findstr /si /C:"include <boost/" src/*
+ ) |
+ % { $_ `
+ -replace "^[^:]*:","" `
+ -replace "boost/numeric/conversion/","boost/numeric_conversion/" `
+ -replace "boost/functional/hash.hpp","boost/container_hash/hash.hpp" `
+ -replace "boost/detail/([^/]+)/","boost/`$1/" `
+ -replace " *# *include *<boost/([a-zA-Z0-9\._]*)(/|>).*", "`$1" `
+ -replace "/|\.hp?p?| ","" } | group | % name | % {
+ # mappings
+ Write-Verbose "${library}: $_"
+ if ($_ -match "aligned_storage") { "type_traits" }
+ elseif ($_ -match "noncopyable|ref|swap|get_pointer|checked_delete|visit_each") { "core" }
+ elseif ($_ -eq "type") { "core" }
+ elseif ($_ -match "unordered_") { "unordered" }
+ elseif ($_ -match "cstdint") { "integer" }
+ elseif ($_ -match "call_traits|operators|current_function|cstdlib|next_prior|compressed_pair") { "utility" }
+ elseif ($_ -match "^version|^workaround") { "config" }
+ elseif ($_ -match "enable_shared_from_this|shared_ptr|make_shared|make_unique|intrusive_ptr|scoped_ptr|pointer_to_other|weak_ptr|shared_array|scoped_array") { "smart_ptr" }
+ elseif ($_ -match "iterator_adaptors|generator_iterator|pointee") { "iterator" }
+ elseif ($_ -eq "regex_fwd") { "regex" }
+ elseif ($_ -eq "make_default") { "convert" }
+ elseif ($_ -eq "foreach_fwd") { "foreach" }
+ elseif ($_ -eq "cerrno") { "system" }
+ elseif ($_ -eq "archive") { "serialization" }
+ elseif ($_ -eq "none") { "optional" }
+ elseif ($_ -eq "integer_traits") { "integer" }
+ elseif ($_ -eq "limits") { "compatibility" }
+ elseif ($_ -eq "math_fwd") { "math" }
+ elseif ($_ -match "polymorphic_cast|implicit_cast") { "conversion" }
+ elseif ($_ -eq "nondet_random") { "random" }
+ elseif ($_ -eq "memory_order") { "atomic" }
+ elseif ($_ -eq "blank") { "detail" }
+ elseif ($_ -match "is_placeholder|mem_fn") { "bind" }
+ elseif ($_ -eq "exception_ptr") { "exception" }
+ elseif ($_ -eq "multi_index_container") { "multi_index" }
+ elseif ($_ -eq "lexical_cast") { "lexical_cast"; "math" }
+ elseif ($_ -match "token_iterator|token_functions") { "tokenizer" }
+ elseif ($_ -eq "numeric" -and $library -notmatch "numeric_conversion|interval|odeint|ublas") { "numeric_conversion"; "interval"; "odeint"; "ublas" }
+ else { $_ }
+ } | group | % name | ? { $_ -ne $library }
+
+ #"`nFor ${library}:"
+ " [known] " + $($groups | ? { $libraries_found -contains $_ })
+ " [unknown] " + $($groups | ? { $libraries_found -notcontains $_ })
+
+ $deps = @($groups | ? { $libraries_found -contains $_ })
+
+ $deps = @($deps | ? {
+ # Boost contains cycles, so remove a few dependencies to break the loop.
+ (($library -notmatch "core|assert|mpl|detail|throw_exception|type_traits|^exception") -or ($_ -notmatch "utility")) `
+ -and `
+ (($library -notmatch "range") -or ($_ -notmatch "algorithm"))`
+ -and `
+ (($library -ne "config") -or ($_ -notmatch "integer"))`
+ -and `
+ (($library -notmatch "multiprecision") -or ($_ -notmatch "random|math"))`
+ -and `
+ (($library -notmatch "lexical_cast") -or ($_ -notmatch "math"))`
+ -and `
+ (($library -notmatch "functional") -or ($_ -notmatch "function"))`
+ -and `
+ (($library -notmatch "detail") -or ($_ -notmatch "static_assert|integer|mpl|type_traits"))`
+ -and `
+ ($_ -notmatch "mpi")`
+ -and `
+ (($library -notmatch "spirit") -or ($_ -notmatch "serialization"))`
+ -and `
+ (($library -notmatch "throw_exception") -or ($_ -notmatch "^exception"))`
+ -and `
+ (($library -notmatch "iostreams") -or ($_ -notmatch "random"))`
+ -and `
+ (($library -notmatch "utility|concept_check") -or ($_ -notmatch "iterator"))
+ } | % { "boost-$_" -replace "_","-" } | % {
+ TransformReference $_
+ })
+
+ $deps += @("boost-vcpkg-helpers")
+
+ $needsBuild = $false
+ if ((Test-Path $unpacked/build/Jamfile.v2) -and $library -ne "metaparse" -and $library -ne "graph_parallel")
+ {
+ $deps += @("boost-build", "boost-modular-build-helper")
+ $needsBuild = $true
+ }
+
+ if ($library -eq "python")
+ {
+ $deps += @("python3 (!osx&!linux)")
+ $needsBuild = $true
+ }
+ elseif ($library -eq "iostreams")
+ {
+ $deps += @("zlib", "bzip2", "liblzma", "zstd")
+ }
+ elseif ($library -eq "locale")
+ {
+ $deps += @("libiconv (!uwp&!windows)", "boost-system")
+ }
+ elseif ($library -eq "asio")
+ {
+ $deps += @("openssl")
+ }
+ elseif ($library -eq "mpi")
+ {
+ $deps += @("mpi")
+ }
+
+ Generate `
+ -Name $library `
+ -Hash $hash `
+ -Depends $deps `
+ -NeedsBuild $needsBuild
+
+ $libraries_in_boost_port += @(TransformReference $library)
+ }
+ finally
+ {
+ popd
+ }
+}
+
+if ($libraries_in_boost_port.length -gt 1) {
+ # Generate master boost control file which depends on each individual library
+ # mpi is excluded due to it having a dependency on msmpi
+ $boostDependsList = @($libraries_in_boost_port | % { "boost-$_" -replace "_","-" } | ? { $_ -notmatch "boost-mpi" }) -join ", "
+
+ @(
+ "# Automatically generated by boost-vcpkg-helpers/generate-ports.ps1"
+ "Source: boost"
+ "Version: $version"
+ "Homepage: https://boost.org"
+ "Description: Peer-reviewed portable C++ source libraries"
+ "Build-Depends: $boostDependsList"
+ ""
+ "Feature: mpi"
+ "Description: Build with MPI support"
+ "Build-Depends: boost-mpi"
+ ) | out-file -enc ascii $portsDir/boost/CONTROL
+
+ "set(VCPKG_POLICY_EMPTY_PACKAGE enabled)`n" | out-file -enc ascii $portsDir/boost/portfile.cmake
+}
+
+return
diff --git a/scripts/boost/post-build-stubs/config.cmake b/scripts/boost/post-build-stubs/config.cmake
new file mode 100644
index 000000000..b09ea209b
--- /dev/null
+++ b/scripts/boost/post-build-stubs/config.cmake
@@ -0,0 +1,7 @@
+file(APPEND ${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp "\n#ifndef BOOST_ALL_NO_LIB\n#define BOOST_ALL_NO_LIB\n#endif\n")
+file(APPEND ${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp "\n#undef BOOST_ALL_DYN_LINK\n")
+
+if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ file(APPEND ${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp "\n#define BOOST_ALL_DYN_LINK\n")
+endif()
+file(COPY ${SOURCE_PATH}/checks DESTINATION ${CURRENT_PACKAGES_DIR}/share/boost-config)
diff --git a/scripts/boost/post-build-stubs/context.cmake b/scripts/boost/post-build-stubs/context.cmake
new file mode 100644
index 000000000..a88f8441d
--- /dev/null
+++ b/scripts/boost/post-build-stubs/context.cmake
@@ -0,0 +1,6 @@
+
+# boost-context removed all.hpp, which is used by FindBoost to determine that context is installed
+if(NOT EXISTS ${CURRENT_PACKAGES_DIR}/include/boost/context/all.hpp)
+ file(WRITE ${CURRENT_PACKAGES_DIR}/include/boost/context/all.hpp
+ "#error \"#include <boost/context/all.hpp> is no longer supported by boost_context.\"")
+endif()
diff --git a/scripts/boost/post-build-stubs/exception.cmake b/scripts/boost/post-build-stubs/exception.cmake
new file mode 100644
index 000000000..43594a044
--- /dev/null
+++ b/scripts/boost/post-build-stubs/exception.cmake
@@ -0,0 +1,3 @@
+
+set(VCPKG_LIBRARY_LINKAGE static)
+file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin)
diff --git a/scripts/boost/post-build-stubs/predef.cmake b/scripts/boost/post-build-stubs/predef.cmake
new file mode 100644
index 000000000..b960fcd6e
--- /dev/null
+++ b/scripts/boost/post-build-stubs/predef.cmake
@@ -0,0 +1,2 @@
+
+file(COPY ${SOURCE_PATH}/tools/check DESTINATION ${CURRENT_PACKAGES_DIR}/share/boost-predef)
diff --git a/scripts/boost/post-build-stubs/test.cmake b/scripts/boost/post-build-stubs/test.cmake
new file mode 100644
index 000000000..c6d07dbc4
--- /dev/null
+++ b/scripts/boost/post-build-stubs/test.cmake
@@ -0,0 +1,14 @@
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/lib/manual-link)
+ file(GLOB MONITOR_LIBS ${CURRENT_PACKAGES_DIR}/lib/*_exec_monitor*)
+ file(COPY ${MONITOR_LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/lib/manual-link)
+ file(REMOVE ${MONITOR_LIBS})
+endif()
+
+if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link)
+ file(GLOB DEBUG_MONITOR_LIBS ${CURRENT_PACKAGES_DIR}/debug/lib/*_exec_monitor*)
+ file(COPY ${DEBUG_MONITOR_LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/manual-link)
+ file(REMOVE ${DEBUG_MONITOR_LIBS})
+endif()
+
diff --git a/scripts/boost/post-source-stubs/context.cmake b/scripts/boost/post-source-stubs/context.cmake
new file mode 100644
index 000000000..9ccf34233
--- /dev/null
+++ b/scripts/boost/post-source-stubs/context.cmake
@@ -0,0 +1,5 @@
+file(READ "${SOURCE_PATH}/build/Jamfile.v2" _contents)
+string(REPLACE "import ../../config/checks/config" "import config/checks/config" _contents "${_contents}")
+file(WRITE "${SOURCE_PATH}/build/Jamfile.v2" "${_contents}")
+file(COPY "${CURRENT_INSTALLED_DIR}/share/boost-config/checks" DESTINATION "${SOURCE_PATH}/build/config")
+
diff --git a/scripts/boost/post-source-stubs/fiber.cmake b/scripts/boost/post-source-stubs/fiber.cmake
new file mode 100644
index 000000000..9ccf34233
--- /dev/null
+++ b/scripts/boost/post-source-stubs/fiber.cmake
@@ -0,0 +1,5 @@
+file(READ "${SOURCE_PATH}/build/Jamfile.v2" _contents)
+string(REPLACE "import ../../config/checks/config" "import config/checks/config" _contents "${_contents}")
+file(WRITE "${SOURCE_PATH}/build/Jamfile.v2" "${_contents}")
+file(COPY "${CURRENT_INSTALLED_DIR}/share/boost-config/checks" DESTINATION "${SOURCE_PATH}/build/config")
+
diff --git a/scripts/boost/post-source-stubs/iostreams.cmake b/scripts/boost/post-source-stubs/iostreams.cmake
new file mode 100644
index 000000000..55841bb3f
--- /dev/null
+++ b/scripts/boost/post-source-stubs/iostreams.cmake
@@ -0,0 +1,18 @@
+vcpkg_download_distfile(LICENSE
+ URLS "https://raw.githubusercontent.com/boostorg/boost/boost-1.70.0/LICENSE_1_0.txt"
+ FILENAME "boost_LICENSE_1_0.txt"
+ SHA512 d6078467835dba8932314c1c1e945569a64b065474d7aced27c9a7acc391d52e9f234138ed9f1aa9cd576f25f12f557e0b733c14891d42c16ecdc4a7bd4d60b8
+)
+
+file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+)
+
+vcpkg_install_cmake()
+vcpkg_copy_pdbs()
+
+file(COPY ${SOURCE_PATH}/include DESTINATION ${CURRENT_PACKAGES_DIR})
+file(INSTALL ${LICENSE} DESTINATION ${CURRENT_PACKAGES_DIR}/share/boost-iostreams RENAME copyright)
diff --git a/scripts/boost/post-source-stubs/log.cmake b/scripts/boost/post-source-stubs/log.cmake
new file mode 100644
index 000000000..78500ddc3
--- /dev/null
+++ b/scripts/boost/post-source-stubs/log.cmake
@@ -0,0 +1,13 @@
+file(READ "${SOURCE_PATH}/build/Jamfile.v2" _contents)
+string(REPLACE "import ../../config/checks/config" "import config/checks/config" _contents "${_contents}")
+string(REPLACE " <conditional>@select-arch-specific-sources" "#<conditional>@select-arch-specific-sources" _contents "${_contents}")
+file(WRITE "${SOURCE_PATH}/build/Jamfile.v2" "${_contents}")
+file(COPY "${CURRENT_INSTALLED_DIR}/share/boost-config/checks" DESTINATION "${SOURCE_PATH}/build/config")
+
+file(READ ${SOURCE_PATH}/build/log-architecture.jam _contents)
+string(REPLACE
+ "\nproject.load [ path.join [ path.make $(here:D) ] ../../config/checks/architecture ] ;"
+ "\nproject.load [ path.join [ path.make $(here:D) ] config/checks/architecture ] ;"
+ _contents "${_contents}")
+file(WRITE ${SOURCE_PATH}/build/log-architecture.jam "${_contents}")
+
diff --git a/scripts/boost/post-source-stubs/python.cmake b/scripts/boost/post-source-stubs/python.cmake
new file mode 100644
index 000000000..40b8e0a0b
--- /dev/null
+++ b/scripts/boost/post-source-stubs/python.cmake
@@ -0,0 +1,5 @@
+# Find Python. Can't use find_package here, but we already know where everything is
+file(GLOB PYTHON_INCLUDE_PATH "${CURRENT_INSTALLED_DIR}/include/python[0-9.]*")
+set(PYTHONLIBS_RELEASE "${CURRENT_INSTALLED_DIR}/lib")
+set(PYTHONLIBS_DEBUG "${CURRENT_INSTALLED_DIR}/debug/lib")
+string(REGEX REPLACE ".*python([0-9\.]+)$" "\\1" PYTHON_VERSION "${PYTHON_INCLUDE_PATH}")
diff --git a/scripts/boost/post-source-stubs/test.cmake b/scripts/boost/post-source-stubs/test.cmake
new file mode 100644
index 000000000..b2872338d
--- /dev/null
+++ b/scripts/boost/post-source-stubs/test.cmake
@@ -0,0 +1,5 @@
+file(READ "${SOURCE_PATH}/build/Jamfile.v2" _contents)
+string(REPLACE "import ../../predef/check/predef" "import predef/check/predef" _contents "${_contents}")
+file(WRITE "${SOURCE_PATH}/build/Jamfile.v2" "${_contents}")
+file(COPY "${CURRENT_INSTALLED_DIR}/share/boost-predef/check" DESTINATION "${SOURCE_PATH}/build/predef")
+
diff --git a/scripts/bootstrap.ps1 b/scripts/bootstrap.ps1
index 6234efaa3..d2632e57b 100644
--- a/scripts/bootstrap.ps1
+++ b/scripts/bootstrap.ps1
@@ -226,8 +226,9 @@ function getWindowsSDK( [Parameter(Mandatory=$False)][switch]$DisableWin10SDK =
$win10sdkVersions = @(Get-ChildItem $folder | Where-Object {$_.Name -match "^10"} | Sort-Object)
[array]::Reverse($win10sdkVersions) # Newest SDK first
- foreach ($win10sdkV in $win10sdkVersions)
+ foreach ($win10sdk in $win10sdkVersions)
{
+ $win10sdkV = $win10sdk.Name
$windowsheader = "$folder\$win10sdkV\um\windows.h"
if (!(Test-Path $windowsheader))
{
diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh
index b0e4f98a5..55859d1f8 100644
--- a/scripts/bootstrap.sh
+++ b/scripts/bootstrap.sh
@@ -17,7 +17,7 @@ fi
# Argument parsing
vcpkgDisableMetrics="OFF"
vcpkgUseSystem=false
-vcpkgAllowAppleClang=OFF
+vcpkgAllowAppleClang=false
for var in "$@"
do
if [ "$var" = "-disableMetrics" -o "$var" = "--disableMetrics" ]; then
@@ -25,7 +25,7 @@ do
elif [ "$var" = "-useSystemBinaries" -o "$var" = "--useSystemBinaries" ]; then
vcpkgUseSystem=true
elif [ "$var" = "-allowAppleClang" -o "$var" = "--allowAppleClang" ]; then
- vcpkgAllowAppleClang=ON
+ vcpkgAllowAppleClang=true
elif [ "$var" = "-help" -o "$var" = "--help" ]; then
echo "Usage: ./bootstrap-vcpkg.sh [options]"
echo
@@ -242,14 +242,22 @@ else
fetchTool "cmake" "$UNAME" cmakeExe || exit 1
fetchTool "ninja" "$UNAME" ninjaExe || exit 1
fi
-selectCXX CXX || exit 1
+if [ "$os" = "osx" ]; then
+ if [ "$vcpkgAllowAppleClang" = "true" ] ; then
+ CXX=clang++
+ else
+ selectCXX CXX || exit 1
+ fi
+else
+ selectCXX CXX || exit 1
+fi
# 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" "-DDEFINE_DISABLE_METRICS=$vcpkgDisableMetrics" "-DVCPKG_ALLOW_APPLE_CLANG=$vcpkgAllowAppleClang") || exit 1
+(cd "$buildDir" && CXX=$CXX "$cmakeExe" .. -DCMAKE_BUILD_TYPE=Release -G "Ninja" "-DCMAKE_MAKE_PROGRAM=$ninjaExe" "-DBUILD_TESTING=OFF" "-DVCPKG_DEVELOPMENT_WARNINGS=Off" "-DDEFINE_DISABLE_METRICS=$vcpkgDisableMetrics" "-DVCPKG_ALLOW_APPLE_CLANG=$vcpkgAllowAppleClang") || exit 1
(cd "$buildDir" && "$cmakeExe" --build .) || exit 1
rm -rf "$vcpkgRootDir/vcpkg"
diff --git a/scripts/buildsystems/msbuild/applocal.ps1 b/scripts/buildsystems/msbuild/applocal.ps1
index 2fdd9fdb4..ab51dc9be 100644
--- a/scripts/buildsystems/msbuild/applocal.ps1
+++ b/scripts/buildsystems/msbuild/applocal.ps1
@@ -29,7 +29,7 @@ function deployBinary([string]$targetBinaryDir, [string]$SourceDir, [string]$tar
Copy-Item "$SourceDir\$targetBinaryName" $targetBinaryDir
}
if ($copiedFilesLog) { Add-Content $copiedFilesLog "$targetBinaryDir\$targetBinaryName" -Encoding UTF8 }
- if ($tlogFile) { Add-Content $tlogFile "$targetBinaryDir\$targetBinaryName" }
+ if ($tlogFile) { Add-Content $tlogFile "$targetBinaryDir\$targetBinaryName" -Encoding Unicode }
}
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index f657e2710..ed9bcbc69 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -1,10 +1,17 @@
# Mark variables as used so cmake doesn't complain about them
mark_as_advanced(CMAKE_TOOLCHAIN_FILE)
-# This is a backport of CMAKE_TRY_COMPILE_PLATFORM_VARIABLES to cmake 3.0
-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 )
+# Determine whether the toolchain is loaded during a try-compile configuration
+get_property(_CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
+
+if (${CMAKE_VERSION} VERSION_LESS "3.6.0")
+ set(_CMAKE_EMULATE_TRY_COMPILE_PLATFORM_VARIABLES ON)
+else()
+ set(_CMAKE_EMULATE_TRY_COMPILE_PLATFORM_VARIABLES OFF)
+endif()
+
+if(_CMAKE_IN_TRY_COMPILE AND _CMAKE_EMULATE_TRY_COMPILE_PLATFORM_VARIABLES)
+ include("${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg.config.cmake" OPTIONAL)
endif()
if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
@@ -38,17 +45,7 @@ else()
elseif(CMAKE_GENERATOR MATCHES "^Visual Studio 15 2017$")
set(_VCPKG_TARGET_TRIPLET_ARCH x86)
elseif(CMAKE_GENERATOR MATCHES "^Visual Studio 16 2019$")
- if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Xx]86$")
- set(_VCPKG_TARGET_TRIPLET_ARCH x86)
- elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Aa][Mm][Dd]64$")
- set(_VCPKG_TARGET_TRIPLET_ARCH x64)
- elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]$")
- set(_VCPKG_TARGET_TRIPLET_ARCH arm)
- elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^[Aa][Rr][Mm]64$")
- set(_VCPKG_TARGET_TRIPLET_ARCH arm64)
- else()
-
- endif()
+ set(_VCPKG_TARGET_TRIPLET_ARCH x86)
else()
find_program(_VCPKG_CL cl)
if(_VCPKG_CL MATCHES "amd64/cl.exe$" OR _VCPKG_CL MATCHES "x64/cl.exe$")
@@ -274,13 +271,23 @@ set(_UNUSED ${CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY})
set(_UNUSED ${CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY})
set(_UNUSED ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP})
+# Propogate these values to try-compile configurations so the triplet and toolchain load
if(NOT _CMAKE_IN_TRY_COMPILE)
- file(TO_CMAKE_PATH "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" _chainload_file)
- file(TO_CMAKE_PATH "${_VCPKG_ROOT_DIR}" _root_dir)
- file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/vcpkg.config.cmake"
- "set(VCPKG_TARGET_TRIPLET \"${VCPKG_TARGET_TRIPLET}\" CACHE STRING \"\")\n"
- "set(VCPKG_APPLOCAL_DEPS \"${VCPKG_APPLOCAL_DEPS}\" CACHE STRING \"\")\n"
- "set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE \"${_chainload_file}\" CACHE STRING \"\")\n"
- "set(_VCPKG_ROOT_DIR \"${_root_dir}\" CACHE STRING \"\")\n"
+ if(_CMAKE_EMULATE_TRY_COMPILE_PLATFORM_VARIABLES)
+ file(TO_CMAKE_PATH "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" _chainload_file)
+ file(TO_CMAKE_PATH "${_VCPKG_ROOT_DIR}" _root_dir)
+ file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/vcpkg.config.cmake"
+ "set(VCPKG_TARGET_TRIPLET \"${VCPKG_TARGET_TRIPLET}\" CACHE STRING \"\")\n"
+ "set(VCPKG_APPLOCAL_DEPS \"${VCPKG_APPLOCAL_DEPS}\" CACHE STRING \"\")\n"
+ "set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE \"${_chainload_file}\" CACHE STRING \"\")\n"
+ "set(_VCPKG_ROOT_DIR \"${_root_dir}\" CACHE STRING \"\")\n"
)
+ else()
+ set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_TARGET_TRIPLET
+ VCPKG_APPLOCAL_DEPS
+ VCPKG_CHAINLOAD_TOOLCHAIN_FILE
+ _VCPKG_ROOT_DIR
+ )
+ endif()
endif()
diff --git a/scripts/cleanEnvironmentHelper.ps1 b/scripts/cleanEnvironmentHelper.ps1
index a3792ecd3..fa5fe869d 100644
--- a/scripts/cleanEnvironmentHelper.ps1
+++ b/scripts/cleanEnvironmentHelper.ps1
@@ -1,6 +1,6 @@
# Capture environment variables for the System and User. Also add some special/built-in variables.
# These will be used to synthesize a clean environment
-$specialEnvironmentMap = @{ "SystemDrive"=$env:SystemDrive; "SystemRoot"=$env:SystemRoot; "UserProfile"=$env:UserProfile } # These are built-in and not set in the registry
+$specialEnvironmentMap = @{ "SystemDrive"=$env:SystemDrive; "SystemRoot"=$env:SystemRoot; "UserProfile"=$env:UserProfile; "TMP"=$env:TMP } # These are built-in and not set in the registry
$machineEnvironmentMap = [Environment]::GetEnvironmentVariables('Machine') # HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
$userEnvironmentMap = [Environment]::GetEnvironmentVariables('User') # HKEY_CURRENT_USER\Environment
diff --git a/scripts/cmake/execute_process.cmake b/scripts/cmake/execute_process.cmake
new file mode 100644
index 000000000..51f6ad160
--- /dev/null
+++ b/scripts/cmake/execute_process.cmake
@@ -0,0 +1,20 @@
+## # execute_process
+##
+## Intercepts all calls to execute_process() inside portfiles and fails when Download Mode
+## is enabled.
+##
+## In order to execute a process in Download Mode call `_execute_process()` instead.
+##
+if (NOT DEFINED OVERRIDEN_EXECUTE_PROCESS)
+ set(OVERRIDEN_EXECUTE_PROCESS ON)
+
+ if (DEFINED VCPKG_DOWNLOAD_MODE)
+ macro(execute_process)
+ message(FATAL_ERROR "This command cannot be executed in Download Mode.\nHalting portfile execution.\n")
+ endmacro()
+ else()
+ macro(execute_process)
+ _execute_process(${ARGV})
+ endmacro()
+ endif()
+endif() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_acquire_msys.cmake b/scripts/cmake/vcpkg_acquire_msys.cmake
index 09090db68..f1f09dc7e 100644
--- a/scripts/cmake/vcpkg_acquire_msys.cmake
+++ b/scripts/cmake/vcpkg_acquire_msys.cmake
@@ -81,15 +81,15 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
file(REMOVE_RECURSE ${TOOLPATH}/${TOOLSUBPATH})
file(MAKE_DIRECTORY ${TOOLPATH})
- execute_process(
+ _execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
WORKING_DIRECTORY ${TOOLPATH}
)
- execute_process(
+ _execute_process(
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "PATH=/usr/bin;pacman-key --init;pacman-key --populate"
WORKING_DIRECTORY ${TOOLPATH}
)
- execute_process(
+ _execute_process(
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "PATH=/usr/bin;pacman -Syu --noconfirm"
WORKING_DIRECTORY ${TOOLPATH}
)
@@ -104,6 +104,7 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
set(_ENV_ORIGINAL $ENV{PATH})
set(ENV{PATH} ${PATH_TO_ROOT}/usr/bin)
vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
COMMAND ${PATH_TO_ROOT}/usr/bin/bash.exe --noprofile --norc -c "pacman -Sy --noconfirm --needed ${_am_PACKAGES}"
WORKING_DIRECTORY ${TOOLPATH}
LOGNAME msys-pacman-${TARGET_TRIPLET}
@@ -116,6 +117,7 @@ function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
# Deal with a stale process created by MSYS
if (NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
COMMAND TASKKILL /F /IM gpg-agent.exe /fi "memusage gt 2"
WORKING_DIRECTORY ${SOURCE_PATH}
)
diff --git a/scripts/cmake/vcpkg_add_to_path.cmake b/scripts/cmake/vcpkg_add_to_path.cmake
index 7ab08c88e..05763b2ef 100644
--- a/scripts/cmake/vcpkg_add_to_path.cmake
+++ b/scripts/cmake/vcpkg_add_to_path.cmake
@@ -29,19 +29,11 @@ function(vcpkg_add_to_path)
if(NOT "${ARGC}" STREQUAL "2")
message(FATAL_ERROR "Expected second argument.")
endif()
- if(CMAKE_HOST_WIN32)
- set(ENV{PATH} "${ARGV1};$ENV{PATH}")
- else()
- set(ENV{PATH} "${ARGV1}:$ENV{PATH}")
- endif()
+ set(ENV{PATH} "${ARGV1}${VCPKG_HOST_PATH_SEPARATOR}$ENV{PATH}")
else()
if(NOT "${ARGC}" STREQUAL "1")
message(FATAL_ERROR "Unexpected second argument: ${ARGV1}")
endif()
- if(CMAKE_HOST_WIN32)
- set(ENV{PATH} "$ENV{PATH};${ARGV0}")
- else()
- set(ENV{PATH} "$ENV{PATH}:${ARGV0}")
- endif()
+ set(ENV{PATH} "$ENV{PATH}${VCPKG_HOST_PATH_SEPARATOR}${ARGV0}")
endif()
endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_apply_patches.cmake b/scripts/cmake/vcpkg_apply_patches.cmake
index ac0b78e20..8957fca27 100644
--- a/scripts/cmake/vcpkg_apply_patches.cmake
+++ b/scripts/cmake/vcpkg_apply_patches.cmake
@@ -40,7 +40,7 @@ function(vcpkg_apply_patches)
get_filename_component(ABSOLUTE_PATCH "${PATCH}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}")
message(STATUS "Applying patch ${PATCH}")
set(LOGNAME patch-${TARGET_TRIPLET}-${PATCHNUM})
- execute_process(
+ _execute_process(
COMMAND ${GIT} --work-tree=. --git-dir=.git apply "${ABSOLUTE_PATCH}" --ignore-whitespace --whitespace=nowarn --verbose
OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-out.log
ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${LOGNAME}-err.log
@@ -49,7 +49,7 @@ function(vcpkg_apply_patches)
)
if(error_code AND NOT _ap_QUIET)
- message(STATUS "Applying patch failed. This is expected if this patch was previously applied.")
+ message(FATAL_ERROR "Applying patch failed. Patch needs to be updated to work with source being used by vcpkg!")
endif()
math(EXPR PATCHNUM "${PATCHNUM}+1")
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index b110d2cc9..d049c907b 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -74,15 +74,10 @@ function(vcpkg_build_cmake)
if(_bc_ADD_BIN_TO_PATH)
set(_BACKUP_ENV_PATH "$ENV{PATH}")
- if(CMAKE_HOST_WIN32)
- set(_PATHSEP ";")
- else()
- set(_PATHSEP ":")
- endif()
if(BUILDTYPE STREQUAL "debug")
- set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin${_PATHSEP}$ENV{PATH}")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin")
else()
- set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin${_PATHSEP}$ENV{PATH}")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin")
endif()
endif()
diff --git a/scripts/cmake/vcpkg_build_make.cmake b/scripts/cmake/vcpkg_build_make.cmake
new file mode 100644
index 000000000..d928a9287
--- /dev/null
+++ b/scripts/cmake/vcpkg_build_make.cmake
@@ -0,0 +1,183 @@
+## # vcpkg_build_make
+##
+## Build a linux makefile project.
+##
+## ## Usage:
+## ```cmake
+## vcpkg_build_make([TARGET <target>])
+## ```
+##
+## ### TARGET
+## The target passed to the configure/make build command (`./configure/make/make install`). If not specified, no target will
+## be passed.
+##
+## ### ADD_BIN_TO_PATH
+## Adds the appropriate Release and Debug `bin\` directories to the path during the build such that executables can run against the in-tree DLLs.
+##
+## ## Notes:
+## This command should be preceeded by a call to [`vcpkg_configure_make()`](vcpkg_configure_make.md).
+## You can use the alias [`vcpkg_install_make()`](vcpkg_configure_make.md) function if your CMake script supports the
+## "install" target
+##
+## ## Examples
+##
+## * [x264](https://github.com/Microsoft/vcpkg/blob/master/ports/x264/portfile.cmake)
+## * [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)
+## * [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)
+## * [libosip2](https://github.com/Microsoft/vcpkg/blob/master/ports/libosip2/portfile.cmake)
+function(vcpkg_build_make)
+ cmake_parse_arguments(_bc "ADD_BIN_TO_PATH;ENABLE_INSTALL" "LOGFILE_ROOT" "" ${ARGN})
+
+ if(NOT _bc_LOGFILE_ROOT)
+ set(_bc_LOGFILE_ROOT "build")
+ endif()
+
+ if (_VCPKG_PROJECT_SUBPATH)
+ set(_VCPKG_PROJECT_SUBPATH /${_VCPKG_PROJECT_SUBPATH}/)
+ endif()
+
+ set(MAKE )
+ set(MAKE_OPTS )
+ set(INSTALL_OPTS )
+ if (_VCPKG_MAKE_GENERATOR STREQUAL "make")
+ if (CMAKE_HOST_WIN32)
+ # Compiler requriements
+ vcpkg_find_acquire_program(YASM)
+ vcpkg_find_acquire_program(PERL)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES make)
+ get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
+ get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY)
+
+ set(PATH_GLOBAL "$ENV{PATH}")
+ set(ENV{PATH} "$ENV{PATH};${YASM_EXE_PATH};${MSYS_ROOT}/usr/bin;${PERL_EXE_PATH}")
+ set(BASH ${MSYS_ROOT}/usr/bin/bash.exe)
+ # Set make command and install command
+ set(MAKE ${BASH} --noprofile --norc -c "${_VCPKG_PROJECT_SUBPATH}make")
+ # Must use absolute path to call make in windows
+ set(MAKE_OPTS -j ${VCPKG_CONCURRENCY})
+ set(INSTALL_OPTS install -j ${VCPKG_CONCURRENCY})
+ else()
+ # Compiler requriements
+ find_program(MAKE make REQUIRED)
+ set(MAKE make;)
+ # Set make command and install command
+ set(MAKE_OPTS -j;${VCPKG_CONCURRENCY})
+ set(INSTALL_OPTS install;-j;${VCPKG_CONCURRENCY})
+ endif()
+ elseif (_VCPKG_MAKE_GENERATOR STREQUAL "nmake")
+ find_program(NMAKE nmake REQUIRED)
+ get_filename_component(NMAKE_EXE_PATH ${NMAKE} DIRECTORY)
+ set(PATH_GLOBAL "$ENV{PATH}")
+ set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}")
+ set(ENV{CL} "$ENV{CL} /MP")
+ # Set make command and install command
+ set(MAKE ${NMAKE} /NOLOGO /G /U)
+ set(MAKE_OPTS -f makefile all)
+ set(INSTALL_OPTS install)
+ else()
+ message(FATAL_ERROR "${_VCPKG_MAKE_GENERATOR} not supported.")
+ endif()
+
+ set(ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include;$ENV{INCLUDE}")
+
+ foreach(BUILDTYPE "debug" "release")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL BUILDTYPE)
+ if(BUILDTYPE STREQUAL "debug")
+ # Skip debug generate
+ if (_VCPKG_NO_DEBUG)
+ continue()
+ endif()
+ set(SHORT_BUILDTYPE "-dbg")
+ else()
+ # In NO_DEBUG mode, we only use ${TARGET_TRIPLET} directory.
+ if (_VCPKG_NO_DEBUG)
+ set(SHORT_BUILDTYPE "")
+ else()
+ set(SHORT_BUILDTYPE "-rel")
+ endif()
+ endif()
+
+ if (CMAKE_HOST_WIN32)
+ # In windows we can remotely call make
+ set(WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}${SHORT_BUILDTYPE})
+ else()
+ set(WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}${SHORT_BUILDTYPE}${_VCPKG_PROJECT_SUBPATH})
+ endif()
+
+ message(STATUS "Building ${TARGET_TRIPLET}${SHORT_BUILDTYPE}")
+
+ if(_bc_ADD_BIN_TO_PATH)
+ set(_BACKUP_ENV_PATH "$ENV{PATH}")
+ if(CMAKE_HOST_WIN32)
+ set(_PATHSEP ";")
+ else()
+ set(_PATHSEP ":")
+ endif()
+ if(BUILDTYPE STREQUAL "debug")
+ set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin${_PATHSEP}$ENV{PATH}")
+ else()
+ set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin${_PATHSEP}$ENV{PATH}")
+ endif()
+ endif()
+
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_build_process(
+ COMMAND "${MAKE} ${MAKE_OPTS}"
+ WORKING_DIRECTORY ${WORKING_DIRECTORY}
+ LOGNAME "${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}${SHORT_BUILDTYPE}"
+ )
+ else()
+ vcpkg_execute_build_process(
+ COMMAND "${MAKE};${MAKE_OPTS}"
+ WORKING_DIRECTORY ${WORKING_DIRECTORY}
+ LOGNAME "${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}${SHORT_BUILDTYPE}"
+ )
+ endif()
+
+ if(_bc_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${_BACKUP_ENV_PATH}")
+ endif()
+ endif()
+ endforeach()
+
+ if (_bc_ENABLE_INSTALL)
+ foreach(BUILDTYPE "debug" "release")
+ if(BUILDTYPE STREQUAL "debug")
+ # Skip debug generate
+ if (_VCPKG_NO_DEBUG)
+ continue()
+ endif()
+ set(SHORT_BUILDTYPE "-dbg")
+ else()
+ # In NO_DEBUG mode, we only use ${TARGET_TRIPLET} directory.
+ if (_VCPKG_NO_DEBUG)
+ set(SHORT_BUILDTYPE "")
+ else()
+ set(SHORT_BUILDTYPE "-rel")
+ endif()
+ endif()
+
+ message(STATUS "Installing ${TARGET_TRIPLET}${SHORT_BUILDTYPE}")
+ if (CMAKE_HOST_WIN32)
+ # In windows we can remotely call make
+ set(WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}${SHORT_BUILDTYPE})
+ vcpkg_execute_build_process(
+ COMMAND "${MAKE} ${INSTALL_OPTS}"
+ WORKING_DIRECTORY ${WORKING_DIRECTORY}
+ LOGNAME "install-${TARGET_TRIPLET}${SHORT_BUILDTYPE}"
+ )
+ else()
+ set(WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}${SHORT_BUILDTYPE}${_VCPKG_PROJECT_SUBPATH})
+ vcpkg_execute_build_process(
+ COMMAND "${MAKE};${INSTALL_OPTS}"
+ WORKING_DIRECTORY ${WORKING_DIRECTORY}
+ LOGNAME "install-${TARGET_TRIPLET}${SHORT_BUILDTYPE}"
+ )
+ endif()
+ endforeach()
+ endif()
+
+ if (CMAKE_HOST_WIN32)
+ set(ENV{PATH} "${PATH_GLOBAL}")
+ endif()
+endfunction()
diff --git a/scripts/cmake/vcpkg_build_msbuild.cmake b/scripts/cmake/vcpkg_build_msbuild.cmake
index 50432f8fa..cfd429da2 100644
--- a/scripts/cmake/vcpkg_build_msbuild.cmake
+++ b/scripts/cmake/vcpkg_build_msbuild.cmake
@@ -108,7 +108,7 @@ function(vcpkg_build_msbuild)
if(_csc_USE_VCPKG_INTEGRATION)
list(
APPEND _csc_OPTIONS
- /p:ForceImportBeforeCppTargets=${VCPKG_ROOT_DIR}/scripts/buildsystems/msbuild/vcpkg.targets
+ /p:ForceImportBeforeCppTargets=${SCRIPTS}/buildsystems/msbuild/vcpkg.targets
"/p:VcpkgTriplet=${TARGET_TRIPLET}"
)
endif()
diff --git a/scripts/cmake/vcpkg_build_nmake.cmake b/scripts/cmake/vcpkg_build_nmake.cmake
new file mode 100644
index 000000000..33f1e9d1e
--- /dev/null
+++ b/scripts/cmake/vcpkg_build_nmake.cmake
@@ -0,0 +1,222 @@
+## # vcpkg_build_nmake
+##
+## Build a msvc makefile project.
+##
+## ## Usage:
+## ```cmake
+## vcpkg_build_nmake(
+## SOURCE_PATH <${SOURCE_PATH}>
+## [NO_DEBUG]
+## [PROJECT_SUBPATH <${SUBPATH}>]
+## [PROJECT_NAME <${MAKEFILE_NAME}>]
+## [PRERUN_SHELL <${SHELL_PATH}>]
+## [PRERUN_SHELL_DEBUG <${SHELL_PATH}>]
+## [PRERUN_SHELL_RELEASE <${SHELL_PATH}>]
+## [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
+## [OPTIONS_RELEASE <-DOPTIMIZE=1>...]
+## [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]
+## [TARGET <target>])
+## ```
+##
+## ## Parameters
+## ### SOURCE_PATH
+## Specifies the directory containing the source files.
+## By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
+##
+## ### PROJECT_SUBPATH
+## Specifies the sub directory containing the `makefile.vc`/`makefile.mak`/`makefile.msvc` or other msvc makefile.
+##
+## ### PROJECT_NAME
+## Specifies the name of msvc makefile name.
+## Default is `makefile.vc`
+##
+## ### NO_DEBUG
+## This port doesn't support debug mode.
+##
+## ### ENABLE_INSTALL
+## Install binaries after build.
+##
+## ### PRERUN_SHELL
+## Script that needs to be called before build
+##
+## ### PRERUN_SHELL_DEBUG
+## Script that needs to be called before debug build
+##
+## ### PRERUN_SHELL_RELEASE
+## Script that needs to be called before release build
+##
+## ### OPTIONS
+## Additional options passed to generate during the generation.
+##
+## ### OPTIONS_RELEASE
+## Additional options passed to generate during the Release generation. These are in addition to `OPTIONS`.
+##
+## ### OPTIONS_DEBUG
+## Additional options passed to generate during the Debug generation. These are in addition to `OPTIONS`.
+##
+## ### TARGET
+## The target passed to the nmake build command (`nmake/nmake install`). If not specified, no target will
+## be passed.
+##
+## ### ADD_BIN_TO_PATH
+## Adds the appropriate Release and Debug `bin\` directories to the path during the build such that executables can run against the in-tree DLLs.
+##
+## ## Notes:
+## This command should be preceeded by a call to [`vcpkg_configure_nmake()`](vcpkg_configure_nmake.md).
+## You can use the alias [`vcpkg_install_nmake()`](vcpkg_configure_nmake.md) function if your CMake script supports the
+## "install" target
+##
+## ## Examples
+##
+## * [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)
+## * [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)
+function(vcpkg_build_nmake)
+ cmake_parse_arguments(_bn
+ "ADD_BIN_TO_PATH;ENABLE_INSTALL;NO_DEBUG"
+ "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME;LOGFILE_ROOT"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;PRERUN_SHELL;PRERUN_SHELL_DEBUG;PRERUN_SHELL_RELEASE"
+ ${ARGN}
+ )
+
+ if (NOT CMAKE_HOST_WIN32)
+ message(FATAL_ERROR "vcpkg_build_nmake only support windows.")
+ endif()
+
+ if (_bn_OPTIONS_DEBUG STREQUAL _bn_OPTIONS_RELEASE)
+ message(FATAL_ERROR "Detected debug configuration is equal to release configuration, please use NO_DEBUG for vcpkg_build_nmake/vcpkg_install_nmake")
+ endif()
+
+ if(NOT _bn_LOGFILE_ROOT)
+ set(_bn_LOGFILE_ROOT "build")
+ endif()
+
+ if (NOT _bn_PROJECT_NAME)
+ set(MAKEFILE_NAME makefile.vc)
+ else()
+ set(MAKEFILE_NAME ${_bn_PROJECT_NAME})
+ endif()
+
+ set(MAKE )
+ set(MAKE_OPTS_BASE )
+ set(INSTALL_OPTS_BASE )
+
+ find_program(NMAKE nmake REQUIRED)
+ get_filename_component(NMAKE_EXE_PATH ${NMAKE} DIRECTORY)
+ # Load toolchains
+ if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
+ endif()
+ include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
+ # Set needed env
+ set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}")
+ set(ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include;$ENV{INCLUDE}")
+ # Set make command and install command
+ set(MAKE ${NMAKE} /NOLOGO /G /U)
+ set(MAKE_OPTS_BASE -f ${MAKEFILE_NAME} all)
+ set(INSTALL_OPTS_BASE install)
+ # Add subpath to work directory
+ if (_bn_PROJECT_SUBPATH)
+ set(_bn_PROJECT_SUBPATH /${_bn_PROJECT_SUBPATH})
+ else()
+ set(_bn_PROJECT_SUBPATH )
+ endif()
+
+ foreach(BUILDTYPE "debug" "release")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL BUILDTYPE)
+ if(BUILDTYPE STREQUAL "debug")
+ # Skip debug generate
+ if (_bn_NO_DEBUG)
+ continue()
+ endif()
+ # Generate obj dir suffix
+ set(SHORT_BUILDTYPE "-dbg")
+ set(CONFIG "Debug")
+ # Add install command and arguments
+ set(MAKE_OPTS ${MAKE_OPTS_BASE})
+ if (_bn_ENABLE_INSTALL)
+ set(INSTALL_OPTS ${INSTALL_OPTS_BASE} INSTALLDIR=${CURRENT_PACKAGES_DIR}/debug)
+ set(MAKE_OPTS ${MAKE_OPTS} ${INSTALL_OPTS})
+ endif()
+ set(MAKE_OPTS ${MAKE_OPTS} ${_bn_OPTIONS} ${_bn_OPTIONS_DEBUG})
+
+ unset(ENV{CL})
+ set(TMP_CL_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "/" "-" TMP_CL_FLAGS "${TMP_CL_FLAGS}")
+ set(ENV{CL} "$ENV{CL} ${TMP_CL_FLAGS}")
+ else()
+ # In NO_DEBUG mode, we only use ${TARGET_TRIPLET} directory.
+ if (_bn_NO_DEBUG)
+ set(SHORT_BUILDTYPE "")
+ else()
+ set(SHORT_BUILDTYPE "-rel")
+ endif()
+ set(CONFIG "Release")
+ # Add install command and arguments
+ set(MAKE_OPTS ${MAKE_OPTS_BASE})
+ if (_bn_ENABLE_INSTALL)
+ set(INSTALL_OPTS ${INSTALL_OPTS_BASE} INSTALLDIR=${CURRENT_PACKAGES_DIR})
+ set(MAKE_OPTS ${MAKE_OPTS} ${INSTALL_OPTS})
+ endif()
+ set(MAKE_OPTS ${MAKE_OPTS} ${_bn_OPTIONS} ${_bn_OPTIONS_RELEASE})
+
+ unset(ENV{CL})
+ set(TMP_CL_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
+ string(REPLACE "/" "-" TMP_CL_FLAGS "${TMP_CL_FLAGS}")
+ set(ENV{CL} "$ENV{CL} ${TMP_CL_FLAGS}")
+ endif()
+
+ set(CURRENT_TRIPLET_NAME ${TARGET_TRIPLET}${SHORT_BUILDTYPE})
+ set(OBJ_DIR ${CURRENT_BUILDTREES_DIR}/${CURRENT_TRIPLET_NAME})
+
+ file(REMOVE_RECURSE ${OBJ_DIR})
+ file(MAKE_DIRECTORY ${OBJ_DIR})
+ file(GLOB_RECURSE SOURCE_FILES ${_bn_SOURCE_PATH}/*)
+ foreach(ONE_SOUCRCE_FILE ${SOURCE_FILES})
+ get_filename_component(DST_DIR ${ONE_SOUCRCE_FILE} PATH)
+ string(REPLACE "${_bn_SOURCE_PATH}" "${OBJ_DIR}" DST_DIR "${DST_DIR}")
+ file(COPY ${ONE_SOUCRCE_FILE} DESTINATION ${DST_DIR})
+ endforeach()
+
+ if (_bn_PRERUN_SHELL)
+ message("Prerunning ${CURRENT_TRIPLET_NAME}")
+ vcpkg_execute_required_process(
+ COMMAND ${_bn_PRERUN_SHELL}
+ WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}
+ LOGNAME "$prerun-${CURRENT_TRIPLET_NAME}"
+ )
+ endif()
+ if (BUILDTYPE STREQUAL "debug" AND _bn_PRERUN_SHELL_DEBUG)
+ message("Prerunning ${CURRENT_TRIPLET_NAME}")
+ vcpkg_execute_required_process(
+ COMMAND "${_bn_PRERUN_SHELL_DEBUG}"
+ WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}
+ LOGNAME "prerun-${CURRENT_TRIPLET_NAME}-dbg"
+ )
+ endif()
+ if (BUILDTYPE STREQUAL "release" AND _bn_PRERUN_SHELL_RELEASE)
+ message("Prerunning ${CURRENT_TRIPLET_NAME}")
+ vcpkg_execute_required_process(
+ COMMAND ${_bn_PRERUN_SHELL_RELEASE}
+ WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}
+ LOGNAME "prerun-${CURRENT_TRIPLET_NAME}-dbg"
+ )
+ endif()
+
+ if (NOT _bn_ENABLE_INSTALL)
+ message(STATUS "Building ${CURRENT_TRIPLET_NAME}")
+ else()
+ message(STATUS "Building and installing ${CURRENT_TRIPLET_NAME}")
+ endif()
+
+ vcpkg_execute_build_process(
+ COMMAND ${MAKE} ${MAKE_OPTS}
+ WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}
+ LOGNAME "${_bn_LOGFILE_ROOT}-${CURRENT_TRIPLET_NAME}"
+ )
+
+ if(_bn_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${_BACKUP_ENV_PATH}")
+ endif()
+ endif()
+ endforeach()
+endfunction()
diff --git a/scripts/cmake/vcpkg_build_qmake.cmake b/scripts/cmake/vcpkg_build_qmake.cmake
index cf79fe8fc..ef6fb30f3 100644
--- a/scripts/cmake/vcpkg_build_qmake.cmake
+++ b/scripts/cmake/vcpkg_build_qmake.cmake
@@ -11,11 +11,9 @@ function(vcpkg_build_qmake)
cmake_parse_arguments(_csc "SKIP_MAKEFILES" "BUILD_LOGNAME" "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS" ${ARGN})
if(CMAKE_HOST_WIN32)
- set(_PATHSEP ";")
vcpkg_find_acquire_program(JOM)
set(INVOKE "${JOM}")
else()
- set(_PATHSEP ":")
find_program(MAKE make)
set(INVOKE "${MAKE}")
endif()
@@ -23,22 +21,8 @@ function(vcpkg_build_qmake)
# Make sure that the linker finds the libraries used
set(ENV_PATH_BACKUP "$ENV{PATH}")
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- set(DEBUG_DIR ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
- endif()
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- set(RELEASE_DIR ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
- endif()
-
file(TO_NATIVE_PATH "${CURRENT_INSTALLED_DIR}" NATIVE_INSTALLED_DIR)
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- list(APPEND _csc_RELEASE_TARGETS ${_csc_TARGETS})
- endif()
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- list(APPEND _csc_DEBUG_TARGETS ${_csc_TARGETS})
- endif()
-
if(NOT _csc_BUILD_LOGNAME)
set(_csc_BUILD_LOGNAME build)
endif()
@@ -56,55 +40,34 @@ function(vcpkg_build_qmake)
set(ENV_CL_BACKUP "$ENV{_CL_}")
set(ENV{_CL_} "/utf-8")
- #First generate the makefiles so we can modify them
+ #Replace with VCPKG variables if PR #7733 is merged
+ unset(BUILDTYPES)
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/debug/lib${_PATHSEP}${CURRENT_INSTALLED_DIR}/debug/bin${_PATHSEP}${CURRENT_INSTALLED_DIR}/tools/qt5${_PATHSEP}${ENV_PATH_BACKUP}")
- if(NOT _csc_SKIP_MAKEFILES)
- run_jom(qmake_all makefiles dbg)
-
- #Store debug makefiles path
- file(GLOB_RECURSE DEBUG_MAKEFILES ${DEBUG_DIR}/*Makefile*)
-
- foreach(DEBUG_MAKEFILE ${DEBUG_MAKEFILES})
- file(READ "${DEBUG_MAKEFILE}" _contents)
- string(REPLACE "zlib.lib" "zlibd.lib" _contents "${_contents}")
- string(REPLACE "installed\\${TARGET_TRIPLET}\\lib" "installed\\${TARGET_TRIPLET}\\debug\\lib" _contents "${_contents}")
- string(REPLACE "/LIBPATH:${NATIVE_INSTALLED_DIR}\\debug\\lib" "/LIBPATH:${NATIVE_INSTALLED_DIR}\\debug\\lib\\manual-link /LIBPATH:${NATIVE_INSTALLED_DIR}\\debug\\lib shell32.lib" _contents "${_contents}")
- string(REPLACE "tools\\qt5\\qmlcachegen.exe" "tools\\qt5-declarative\\qmlcachegen.exe" _contents "${_contents}")
- string(REPLACE "tools/qt5/qmlcachegen" "tools/qt5-declarative/qmlcachegen" _contents "${_contents}")
- string(REPLACE "debug\\lib\\Qt5Bootstrap.lib" "tools\\qt5\\Qt5Bootstrap.lib" _contents "${_contents}")
- string(REPLACE "lib\\Qt5Bootstrap.lib" "tools\\qt5\\Qt5Bootstrap.lib" _contents "${_contents}")
- string(REPLACE " Qt5Bootstrap.lib " " ${NATIVE_INSTALLED_DIR}\\tools\\qt5\\Qt5Bootstrap.lib Ole32.lib Netapi32.lib Advapi32.lib ${NATIVE_INSTALLED_DIR}\\lib\\zlib.lib Shell32.lib " _contents "${_contents}")
- file(WRITE "${DEBUG_MAKEFILE}" "${_contents}")
- endforeach()
- endif()
-
- run_jom("${_csc_DEBUG_TARGETS}" ${_csc_BUILD_LOGNAME} dbg)
+ set(_buildname "DEBUG")
+ list(APPEND BUILDTYPES ${_buildname})
+ set(_short_name_${_buildname} "dbg")
+ set(_path_suffix_${_buildname} "/debug")
endif()
-
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/lib${_PATHSEP}${CURRENT_INSTALLED_DIR}/bin${_PATHSEP}${CURRENT_INSTALLED_DIR}/tools/qt5${_PATHSEP}${ENV_PATH_BACKUP}")
- if(NOT _csc_SKIP_MAKEFILES)
- run_jom(qmake_all makefiles rel)
-
- #Store release makefile path
- file(GLOB_RECURSE RELEASE_MAKEFILES ${RELEASE_DIR}/*Makefile*)
-
- foreach(RELEASE_MAKEFILE ${RELEASE_MAKEFILES})
- file(READ "${RELEASE_MAKEFILE}" _contents)
- string(REPLACE "/LIBPATH:${NATIVE_INSTALLED_DIR}\\lib" "/LIBPATH:${NATIVE_INSTALLED_DIR}\\lib\\manual-link /LIBPATH:${NATIVE_INSTALLED_DIR}\\lib shell32.lib" _contents "${_contents}")
- string(REPLACE "tools\\qt5\\qmlcachegen.exe" "tools\\qt5-declarative\\qmlcachegen.exe" _contents "${_contents}")
- string(REPLACE "tools/qt5/qmlcachegen" "tools/qt5-declarative/qmlcachegen" _contents "${_contents}")
- string(REPLACE "debug\\lib\\Qt5Bootstrap.lib" "tools\\qt5\\Qt5Bootstrap.lib" _contents "${_contents}")
- string(REPLACE "lib\\Qt5Bootstrap.lib" "tools\\qt5\\Qt5Bootstrap.lib" _contents "${_contents}")
- string(REPLACE " Qt5Bootstrap.lib " " ${NATIVE_INSTALLED_DIR}\\tools\\qt5\\Qt5Bootstrap.lib Ole32.lib Netapi32.lib Advapi32.lib ${NATIVE_INSTALLED_DIR}\\lib\\zlib.lib Shell32.lib " _contents "${_contents}")
- file(WRITE "${RELEASE_MAKEFILE}" "${_contents}")
- endforeach()
- endif()
-
- run_jom("${_csc_RELEASE_TARGETS}" ${_csc_BUILD_LOGNAME} rel)
+ set(_buildname "RELEASE")
+ list(APPEND BUILDTYPES ${_buildname})
+ set(_short_name_${_buildname} "rel")
+ set(_path_suffix_${_buildname} "")
endif()
+ unset(_buildname)
+ foreach(_buildname ${BUILDTYPES})
+ set(_BUILD_PREFIX "${_path_suffix_${_buildname}}")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}${_BUILD_PREFIX}/bin")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}${_BUILD_PREFIX}/lib")
+ list(APPEND _csc_${_buildname}_TARGETS ${_csc_TARGETS})
+ if(NOT _csc_SKIP_MAKEFILES)
+ run_jom(qmake_all makefiles ${_short_name_${_buildname}})
+ endif()
+ run_jom("${_csc_${_buildname}_TARGETS}" ${_csc_BUILD_LOGNAME} ${_short_name_${_buildname}})
+ unset(_BUILD_PREFIX)
+ endforeach()
+
# Restore the original value of ENV{PATH}
set(ENV{PATH} "${ENV_PATH_BACKUP}")
set(ENV{_CL_} "${ENV_CL_BACKUP}")
diff --git a/scripts/cmake/vcpkg_buildpath_length_warning.cmake b/scripts/cmake/vcpkg_buildpath_length_warning.cmake
new file mode 100644
index 000000000..b7ef10bb8
--- /dev/null
+++ b/scripts/cmake/vcpkg_buildpath_length_warning.cmake
@@ -0,0 +1,8 @@
+function(vcpkg_buildpath_length_warning WARNING_LENGTH)
+ string(LENGTH "${CURRENT_BUILDTREES_DIR}" BUILDTREES_PATH_LENGTH)
+ if(BUILDTREES_PATH_LENGTH GREATER ${WARNING_LENGTH} AND CMAKE_HOST_WIN32)
+ message(WARNING "${PORT}'s buildsystem uses very long paths and may fail on your system.\n"
+ "We recommend moving vcpkg to a short path such as 'C:\\src\\vcpkg' or using the subst command."
+ )
+ endif()
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_check_features.cmake b/scripts/cmake/vcpkg_check_features.cmake
new file mode 100644
index 000000000..81ebc234d
--- /dev/null
+++ b/scripts/cmake/vcpkg_check_features.cmake
@@ -0,0 +1,191 @@
+## # vcpkg_check_features
+## Check if one or more features are a part of a package installation.
+##
+## ## Usage
+## ```cmake
+## vcpkg_check_features(
+## OUT_FEATURE_OPTIONS <FEATURE_OPTIONS>
+## [FEATURES
+## <cuda> <WITH_CUDA>
+## [<opencv> <WITH_OPENCV>]
+## ...]
+## [INVERTED_FEATURES
+## <cuda> <IGNORE_PACKAGE_CUDA>
+## [<opencv> <IGNORE_PACKAGE_OPENCV>]
+## ...]
+## )
+## ```
+## `vcpkg_check_features()` accepts these parameters:
+##
+## * `OUT_FEATURE_OPTIONS`:
+## An output variable, the function will clear the variable passed to `OUT_FEATURE_OPTIONS`
+## and then set it to contain a list of option definitions (`-D<OPTION_NAME>=ON|OFF`).
+##
+## This should be set to `FEATURE_OPTIONS` by convention.
+##
+## * `FEATURES`:
+## A list of (`FEATURE_NAME`, `OPTION_NAME`) pairs.
+## For each `FEATURE_NAME` a definition is added to `OUT_FEATURE_OPTIONS` in the form of:
+##
+## * `-D<OPTION_NAME>=ON`, if a feature is specified for installation,
+## * `-D<OPTION_NAME>=OFF`, otherwise.
+##
+## * `INVERTED_FEATURES`:
+## A list of (`FEATURE_NAME`, `OPTION_NAME`) pairs, uses reversed logic from `FEATURES`.
+## For each `FEATURE_NAME` a definition is added to `OUT_FEATURE_OPTIONS` in the form of:
+##
+## * `-D<OPTION_NAME>=OFF`, if a feature is specified for installation,
+## * `-D<OPTION_NAME>=ON`, otherwise.
+##
+##
+## ## Notes
+##
+## The `FEATURES` name parameter can be omitted if no `INVERTED_FEATURES` are used.
+##
+## At least one (`FEATURE_NAME`, `OPTION_NAME`) pair must be passed to the function call.
+##
+## Arguments passed to `FEATURES` and `INVERTED_FEATURES` are not validated to prevent duplication.
+## If the same (`FEATURE_NAME`, `OPTION_NAME`) pair is passed to both lists,
+## two conflicting definitions are added to `OUT_FEATURE_OPTIONS`.
+##
+##
+## ## Examples
+##
+## ### Example 1: Regular features
+##
+## ```cmake
+## $ ./vcpkg install mimalloc[asm,secure]
+##
+## # ports/mimalloc/portfile.cmake
+## vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+## # Keyword FEATURES is optional if INVERTED_FEATURES are not used
+## asm MI_SEE_ASM
+## override MI_OVERRIDE
+## secure MI_SECURE
+## )
+##
+## vcpkg_configure_cmake(
+## SOURCE_PATH ${SOURCE_PATH}
+## PREFER_NINJA
+## OPTIONS
+## # Expands to "-DMI_SEE_ASM=ON; -DMI_OVERRIDE=OFF; -DMI_SECURE=ON"
+## ${FEATURE_OPTIONS}
+## )
+## ```
+##
+## ### Example 2: Inverted features
+##
+## ```cmake
+## $ ./vcpkg install cpprestsdk[websockets]
+##
+## # ports/cpprestsdk/portfile.cmake
+## vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+## INVERTED_FEATURES # <- Keyword INVERTED_FEATURES required
+## brotli CPPREST_EXCLUDE_BROTLI
+## websockets CPPREST_EXCLUDE_WEBSOCKETS
+## )
+##
+## vcpkg_configure_cmake(
+## SOURCE_PATH ${SOURCE_PATH}
+## PREFER_NINJA
+## OPTIONS
+## # Expands to "-DCPPREST_EXCLUDE_BROTLI=ON; -DCPPREST_EXCLUDE_WEBSOCKETS=OFF"
+## ${FEATURE_OPTIONS}
+## )
+## ```
+##
+## ### Example 3: Set multiple options for same feature
+##
+## ```cmake
+## $ ./vcpkg install pcl[cuda]
+##
+## # ports/pcl/portfile.cmake
+## vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+## cuda WITH_CUDA
+## cuda BUILD_CUDA
+## cuda BUILD_GPU
+## )
+##
+## vcpkg_configure_cmake(
+## SOURCE_PATH ${SOURCE_PATH}
+## PREFER_NINJA
+## OPTIONS
+## # Expands to "-DWITH_CUDA=ON; -DBUILD_CUDA=ON; -DBUILD_GPU=ON"
+## ${FEATURE_OPTIONS}
+## )
+## ```
+##
+## ### Example 4: Use regular and inverted features
+##
+## ```cmake
+## $ ./vcpkg install rocksdb[tbb]
+##
+## # ports/rocksdb/portfile.cmake
+## vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+## FEATURES # <- Keyword FEATURES is required because INVERTED_FEATURES are being used
+## tbb WITH_TBB
+## INVERTED_FEATURES
+## tbb ROCKSDB_IGNORE_PACKAGE_TBB
+## )
+##
+## vcpkg_configure_cmake(
+## SOURCE_PATH ${SOURCE_PATH}
+## PREFER_NINJA
+## OPTIONS
+## # Expands to "-DWITH_TBB=ON; -DROCKSDB_IGNORE_PACKAGE_TBB=OFF"
+## ${FEATURE_OPTIONS}
+## )
+## ```
+##
+## ## Examples in portfiles
+##
+## * [cpprestsdk](https://github.com/microsoft/vcpkg/blob/master/ports/cpprestsdk/portfile.cmake)
+## * [pcl](https://github.com/microsoft/vcpkg/blob/master/ports/pcl/portfile.cmake)
+## * [rocksdb](https://github.com/microsoft/vcpkg/blob/master/ports/rocksdb/portfile.cmake)
+##
+function(vcpkg_check_features)
+ cmake_parse_arguments(_vcf "" "OUT_FEATURE_OPTIONS" "FEATURES;INVERTED_FEATURES" ${ARGN})
+
+ if (NOT DEFINED _vcf_OUT_FEATURE_OPTIONS)
+ message(FATAL_ERROR "OUT_FEATURE_OPTIONS must be specified.")
+ endif()
+
+ macro(_check_features _vcf_ARGUMENT _set_if _set_else)
+ list(LENGTH ${_vcf_ARGUMENT} FEATURES_SET_LEN)
+ math(EXPR _vcf_INCORRECT_ARGN "${FEATURES_SET_LEN} % 2")
+ if(_vcf_INCORRECT_ARGN)
+ message(FATAL_ERROR "Called with incorrect number of arguments.")
+ endif()
+
+ set(_vcf_IS_FEATURE_NAME_ARG ON)
+ foreach(_vcf_ARG ${${_vcf_ARGUMENT}})
+ if(_vcf_IS_FEATURE_NAME_ARG)
+ set(_vcf_FEATURE_NAME ${_vcf_ARG})
+ if(NOT ${_vcf_FEATURE_NAME} IN_LIST ALL_FEATURES)
+ message(FATAL_ERROR "Unknown feature: ${_vcf_FEATURE_NAME}")
+ endif()
+ set(_vcf_IS_FEATURE_NAME_ARG OFF)
+ else()
+ set(_vcf_FEATURE_VARIABLE ${_vcf_ARG})
+ if(${_vcf_FEATURE_NAME} IN_LIST FEATURES)
+ list(APPEND _vcf_FEATURE_OPTIONS "-D${_vcf_FEATURE_VARIABLE}=${_set_if}")
+ else()
+ list(APPEND _vcf_FEATURE_OPTIONS "-D${_vcf_FEATURE_VARIABLE}=${_set_else}")
+ endif()
+ set(_vcf_IS_FEATURE_NAME_ARG ON)
+ endif()
+ endforeach()
+ endmacro()
+
+ set(_vcf_FEATURE_OPTIONS)
+
+ if (DEFINED _vcf_FEATURES OR DEFINED _vcf_INVERTED_FEATURES)
+ _check_features(_vcf_FEATURES ON OFF)
+ _check_features(_vcf_INVERTED_FEATURES OFF ON)
+ else()
+ # Skip arguments that correspond to OUT_FEATURE_OPTIONS and its value.
+ list(SUBLIST ARGN 2 -1 _vcf_ARGN)
+ _check_features(_vcf_ARGN ON OFF)
+ endif()
+ set(${_vcf_OUT_FEATURE_OPTIONS} "${_vcf_FEATURE_OPTIONS}" PARENT_SCOPE)
+endfunction()
diff --git a/scripts/cmake/vcpkg_common_definitions.cmake b/scripts/cmake/vcpkg_common_definitions.cmake
new file mode 100644
index 000000000..14cf460af
--- /dev/null
+++ b/scripts/cmake/vcpkg_common_definitions.cmake
@@ -0,0 +1,106 @@
+## # vcpkg_common_definitions
+##
+## File contains helpful variabls for portfiles which are commonly needed or used.
+##
+## ## The following variables are available:
+## ```cmake
+## VCPKG_TARGET_IS_<target> with <target> being one of the following: WINDOWS, UWP, LINUX, OSX, ANDROID, FREEBSD. only defined if <target>
+## VCPKG_HOST_PATH_SEPARATOR Host specific path separator (USAGE: "<something>${VCPKG_HOST_PATH_SEPARATOR}<something>"; only use and pass variables with VCPKG_HOST_PATH_SEPARATOR within "")
+## VCPKG_HOST_EXECUTABLE_SUFFIX executable suffix of the host
+## VCPKG_TARGET_EXECUTABLE_SUFFIX executable suffix of the target
+## VCPKG_TARGET_STATIC_LIBRARY_PREFIX static library prefix for target (same as CMAKE_STATIC_LIBRARY_PREFIX)
+## VCPKG_TARGET_STATIC_LIBRARY_SUFFIX static library suffix for target (same as CMAKE_STATIC_LIBRARY_SUFFIX)
+## VCPKG_TARGET_SHARED_LIBRARY_PREFIX shared library prefix for target (same as CMAKE_SHARED_LIBRARY_PREFIX)
+## VCPKG_TARGET_SHARED_LIBRARY_SUFFIX shared library suffix for target (same as CMAKE_SHARED_LIBRARY_SUFFIX)
+## VCPKG_TARGET_IMPORT_LIBRARY_PREFIX import library prefix for target (same as CMAKE_IMPORT_LIBRARY_PREFIX)
+## VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX import library suffix for target (same as CMAKE_IMPORT_LIBRARY_SUFFIX)
+## VCPKG_FIND_LIBRARY_PREFIXES target dependent prefixes used for find_library calls in portfiles
+## VCPKG_FIND_LIBRARY_SUFFIXES target dependent suffixes used for find_library calls in portfiles
+## ```
+##
+## CMAKE_STATIC_LIBRARY_(PREFIX|SUFFIX), CMAKE_SHARED_LIBRARY_(PREFIX|SUFFIX) and CMAKE_IMPORT_LIBRARY_(PREFIX|SUFFIX) are defined for the target
+## Furthermore the variables CMAKE_FIND_LIBRARY_(PREFIXES|SUFFIXES) are also defined for the target so that
+## portfiles are able to use find_library calls to discover dependent libraries within the current triplet for ports.
+##
+
+#Helper variable to identify the Target system. VCPKG_TARGET_IS_<targetname>
+if (NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(VCPKG_TARGET_IS_WINDOWS 1)
+ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(VCPKG_TARGET_IS_UWP 1)
+ endif()
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(VCPKG_TARGET_IS_OSX 1)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(VCPKG_TARGET_IS_LINUX 1)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
+ set(VCPKG_TARGET_IS_ANDROID 1)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(VCPKG_TARGET_IS_FREEBSD 1)
+endif()
+
+#Helper variable to identify the host path separator.
+if(CMAKE_HOST_WIN32)
+ set(VCPKG_HOST_PATH_SEPARATOR ";")
+elseif(CMAKE_HOST_UNIX)
+ set(VCPKG_HOST_PATH_SEPARATOR ":")
+endif()
+
+#Helper variables to identify executables on host/target
+if(CMAKE_HOST_WIN32)
+ set(VCPKG_HOST_EXECUTABLE_SUFFIX ".exe")
+else()
+ set(VCPKG_HOST_EXECUTABLE_SUFFIX "")
+endif()
+#set(CMAKE_EXECUTABLE_SUFFIX ${VCPKG_HOST_EXECUTABLE_SUFFIX}) not required by find_program
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ set(VCPKG_TARGET_EXECUTABLE_SUFFIX ".exe")
+else()
+ set(VCPKG_TARGET_EXECUTABLE_SUFFIX "")
+endif()
+
+#Helper variables for libraries
+if(VCPKG_TARGET_IS_WINDOWS)
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".lib")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dll")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".lib")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_PREFIX "")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".lib" ".dll") #This is a slight modification to CMakes value which does not include ".dll".
+ set(VCPKG_FIND_LIBRARY_PREFIXES "" "lib") #This is a slight modification to CMakes value which does not include "lib".
+ ## For CYGWIN and Windows GNU, maybe VCPKG will support that in the future?
+ #set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".dll.a")
+ #set(VCPKG_TARGET_IMPORT_LIBRARY_PREFIX "lib")
+ #set(VCPKG_FIND_LIBRARY_SUFFIXES ".dll" ".dll.a" ".a" ".lib")
+ #set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "")
+elseif(VCPKG_TARGET_IS_OSX)
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX "")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dylib")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
+ set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "")
+else()
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX "")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".so")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".so" ".a")
+ set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "")
+endif()
+#Setting these variables allows find_library to work in script mode and thus in portfiles!
+#This allows us scale down on hardcoded target dependent paths in portfiles
+set(CMAKE_STATIC_LIBRARY_SUFFIX "${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}")
+set(CMAKE_SHARED_LIBRARY_SUFFIX "${VCPKG_TARGET_SHARED_LIBRARY_SUFFIX}")
+set(CMAKE_IMPORT_LIBRARY_SUFFIX "${VCPKG_TARGET_IMPORT_LIBRARY_PREFIX}")
+set(CMAKE_STATIC_LIBRARY_PREFIX "${VCPKG_TARGET_STATIC_LIBRARY_PREFIX}")
+set(CMAKE_SHARED_LIBRARY_PREFIX "${VCPKG_TARGET_SHARED_LIBRARY_PREFIX}")
+set(CMAKE_IMPORT_LIBRARY_PREFIX "${VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX}")
+
+set(CMAKE_FIND_LIBRARY_SUFFIXES "${VCPKG_FIND_LIBRARY_SUFFIXES}" CACHE INTERNAL "") # Required by find_library
+set(CMAKE_FIND_LIBRARY_PREFIXES "${VCPKG_FIND_LIBRARY_PREFIXES}" CACHE INTERNAL "") # Required by find_library
diff --git a/scripts/cmake/vcpkg_common_functions.cmake b/scripts/cmake/vcpkg_common_functions.cmake
index b99f8bee8..4aa115f47 100644
--- a/scripts/cmake/vcpkg_common_functions.cmake
+++ b/scripts/cmake/vcpkg_common_functions.cmake
@@ -1,5 +1,7 @@
+include(execute_process)
include(vcpkg_acquire_msys)
include(vcpkg_add_to_path)
+include(vcpkg_check_features)
include(vcpkg_check_linkage)
include(vcpkg_clean_msbuild)
include(vcpkg_download_distfile)
@@ -8,6 +10,7 @@ include(vcpkg_extract_source_archive_ex)
include(vcpkg_execute_required_process)
include(vcpkg_execute_required_process_repeat)
include(vcpkg_execute_build_process)
+include(vcpkg_fail_port_install)
include(vcpkg_find_acquire_program)
include(vcpkg_fixup_cmake_targets)
include(vcpkg_from_github)
@@ -16,12 +19,17 @@ include(vcpkg_from_bitbucket)
include(vcpkg_build_cmake)
include(vcpkg_build_msbuild)
include(vcpkg_build_qmake)
+include(vcpkg_build_make)
+include(vcpkg_build_nmake)
include(vcpkg_install_cmake)
include(vcpkg_install_meson)
include(vcpkg_install_msbuild)
+include(vcpkg_install_make)
+include(vcpkg_install_nmake)
include(vcpkg_configure_cmake)
include(vcpkg_configure_meson)
include(vcpkg_configure_qmake)
+include(vcpkg_configure_make)
include(vcpkg_apply_patches)
include(vcpkg_copy_pdbs)
include(vcpkg_copy_tool_dependencies)
@@ -31,3 +39,5 @@ include(vcpkg_get_windows_sdk)
include(vcpkg_replace_string)
include(vcpkg_from_git)
include(vcpkg_test_cmake)
+include(vcpkg_prettify_command)
+include(vcpkg_buildpath_length_warning)
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index 8f3aa6425..c31955fb2 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -7,6 +7,8 @@
## vcpkg_configure_cmake(
## SOURCE_PATH <${SOURCE_PATH}>
## [PREFER_NINJA]
+## [DISABLE_PARALLEL_CONFIGURE]
+## [NO_CHARSET_FLAG]
## [GENERATOR <"NMake Makefiles">]
## [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
## [OPTIONS_RELEASE <-DOPTIMIZE=1>...]
@@ -16,20 +18,27 @@
##
## ## Parameters
## ### SOURCE_PATH
-## Specifies the directory containing the `CMakeLists.txt`. By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
+## Specifies the directory containing the `CMakeLists.txt`.
+## By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
##
## ### PREFER_NINJA
-## Indicates that, when available, Vcpkg should use Ninja to perform the build. This should be specified unless the port is known to not work under Ninja.
+## Indicates that, when available, Vcpkg should use Ninja to perform the build.
+## This should be specified unless the port is known to not work under Ninja.
##
## ### DISABLE_PARALLEL_CONFIGURE
## Disables running the CMake configure step in parallel.
-##
## This is needed for libraries which write back into their source directory during configure.
##
+## ### NO_CHARSET_FLAG
+## Disables passing `utf-8` as the default character set to `CMAKE_C_FLAGS` and `CMAKE_CXX_FLAGS`.
+##
+## This is needed for libraries that set their own source code's character set.
+##
## ### GENERATOR
## Specifies the precise generator to use.
##
-## This is useful if some project-specific buildsystem has been wrapped in a cmake script that won't perform an actual build. If used for this purpose, it should be set to "NMake Makefiles".
+## This is useful if some project-specific buildsystem has been wrapped in a cmake script that won't perform an actual build.
+## If used for this purpose, it should be set to "NMake Makefiles".
##
## ### OPTIONS
## Additional options passed to CMake during the configuration.
@@ -50,31 +59,38 @@
## * [poco](https://github.com/Microsoft/vcpkg/blob/master/ports/poco/portfile.cmake)
## * [opencv](https://github.com/Microsoft/vcpkg/blob/master/ports/opencv/portfile.cmake)
function(vcpkg_configure_cmake)
- cmake_parse_arguments(_csc "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE" "SOURCE_PATH;GENERATOR" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
+ cmake_parse_arguments(_csc
+ "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE;NO_CHARSET_FLAG"
+ "SOURCE_PATH;GENERATOR"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE"
+ ${ARGN}
+ )
if(NOT VCPKG_PLATFORM_TOOLSET)
- message(FATAL_ERROR "Vcpkg has been updated with VS2017 support, however you need to rebuild vcpkg.exe by re-running bootstrap-vcpkg.bat\n")
- endif()
-
- if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
- set(_csc_HOST_ARCHITECTURE $ENV{PROCESSOR_ARCHITEW6432})
- else()
- set(_csc_HOST_ARCHITECTURE $ENV{PROCESSOR_ARCHITECTURE})
+ message(FATAL_ERROR "Vcpkg has been updated with VS2017 support; "
+ "however, vcpkg.exe must be rebuilt by re-running bootstrap-vcpkg.bat\n")
endif()
if(CMAKE_HOST_WIN32)
- set(_PATHSEP ";")
- else()
- set(_PATHSEP ":")
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(_csc_HOST_ARCHITECTURE $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(_csc_HOST_ARCHITECTURE $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
endif()
set(NINJA_CAN_BE_USED ON) # Ninja as generator
set(NINJA_HOST ON) # Ninja as parallel configurator
+
+ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(_TARGETTING_UWP 1)
+ endif()
+
if(_csc_HOST_ARCHITECTURE STREQUAL "x86")
# Prebuilt ninja binaries are only provided for x64 hosts
set(NINJA_CAN_BE_USED OFF)
set(NINJA_HOST OFF)
- elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ elseif(_TARGETTING_UWP)
# Ninja and MSBuild have many differences when targetting UWP, so use MSBuild to maximize existing compatibility
set(NINJA_CAN_BE_USED OFF)
endif()
@@ -83,43 +99,43 @@ function(vcpkg_configure_cmake)
set(GENERATOR ${_csc_GENERATOR})
elseif(_csc_PREFER_NINJA AND NINJA_CAN_BE_USED)
set(GENERATOR "Ninja")
- elseif(VCPKG_CHAINLOAD_TOOLCHAIN_FILE OR (VCPKG_CMAKE_SYSTEM_NAME AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore"))
+ elseif(VCPKG_CHAINLOAD_TOOLCHAIN_FILE OR (VCPKG_CMAKE_SYSTEM_NAME AND NOT _TARGETTING_UWP))
set(GENERATOR "Ninja")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v120")
set(GENERATOR "Visual Studio 12 2013")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v120")
set(GENERATOR "Visual Studio 12 2013 Win64")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v120")
set(GENERATOR "Visual Studio 12 2013 ARM")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
set(GENERATOR "Visual Studio 14 2015")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
set(GENERATOR "Visual Studio 14 2015 Win64")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v140")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v140")
set(GENERATOR "Visual Studio 14 2015 ARM")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
set(GENERATOR "Visual Studio 15 2017")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
set(GENERATOR "Visual Studio 15 2017 Win64")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
set(GENERATOR "Visual Studio 15 2017 ARM")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v141")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v141")
set(GENERATOR "Visual Studio 15 2017")
set(ARCH "ARM64")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86" AND VCPKG_PLATFORM_TOOLSET MATCHES "v142")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
set(GENERATOR "Visual Studio 16 2019")
set(ARCH "Win32")
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v142")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
set(GENERATOR "Visual Studio 16 2019")
set(ARCH "x64")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET MATCHES "v142")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
set(GENERATOR "Visual Studio 16 2019")
set(ARCH "ARM")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64" AND VCPKG_PLATFORM_TOOLSET MATCHES "v142")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64" AND VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
set(GENERATOR "Visual Studio 16 2019")
set(ARCH "ARM64")
@@ -127,14 +143,15 @@ function(vcpkg_configure_cmake)
if(NOT VCPKG_CMAKE_SYSTEM_NAME)
set(VCPKG_CMAKE_SYSTEM_NAME Windows)
endif()
- message(FATAL_ERROR "Unable to determine appropriate generator for: ${VCPKG_CMAKE_SYSTEM_NAME}-${VCPKG_TARGET_ARCHITECTURE}-${VCPKG_PLATFORM_TOOLSET}")
+ message(FATAL_ERROR "Unable to determine appropriate generator for: "
+ "${VCPKG_CMAKE_SYSTEM_NAME}-${VCPKG_TARGET_ARCHITECTURE}-${VCPKG_PLATFORM_TOOLSET}")
endif()
# If we use Ninja, make sure it's on PATH
if(GENERATOR STREQUAL "Ninja")
vcpkg_find_acquire_program(NINJA)
get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
- set(ENV{PATH} "$ENV{PATH}${_PATHSEP}${NINJA_PATH}")
+ vcpkg_add_to_path("${NINJA_PATH}")
list(APPEND _csc_OPTIONS "-DCMAKE_MAKE_PROGRAM=${NINJA}")
endif()
@@ -142,10 +159,11 @@ function(vcpkg_configure_cmake)
if(DEFINED VCPKG_CMAKE_SYSTEM_NAME)
list(APPEND _csc_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
- if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ if(_TARGETTING_UWP AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
set(VCPKG_CMAKE_SYSTEM_VERSION 10.0)
endif()
endif()
+
if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
list(APPEND _csc_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
endif()
@@ -155,41 +173,45 @@ function(vcpkg_configure_cmake)
elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
list(APPEND _csc_OPTIONS -DBUILD_SHARED_LIBS=OFF)
else()
- message(FATAL_ERROR "Invalid setting for VCPKG_LIBRARY_LINKAGE: \"${VCPKG_LIBRARY_LINKAGE}\". It must be \"static\" or \"dynamic\"")
+ message(FATAL_ERROR
+ "Invalid setting for VCPKG_LIBRARY_LINKAGE: \"${VCPKG_LIBRARY_LINKAGE}\". "
+ "It must be \"static\" or \"dynamic\"")
endif()
+
+ macro(check_both_vars_are_set var1 var2)
+ if((NOT DEFINED ${var1} OR NOT DEFINED ${var2}) AND (DEFINED ${var1} OR DEFINED ${var2}))
+ message(FATAL_ERROR "Both ${var1} and ${var2} must be set.")
+ endif()
+ endmacro()
+
+ check_both_vars_are_set(VCPKG_CXX_FLAGS_DEBUG VCPKG_C_FLAGS_DEBUG)
+ check_both_vars_are_set(VCPKG_CXX_FLAGS_RELEASE VCPKG_C_FLAGS_RELEASE)
+ check_both_vars_are_set(VCPKG_CXX_FLAGS VCPKG_C_FLAGS)
- if((NOT DEFINED VCPKG_CXX_FLAGS_DEBUG AND NOT DEFINED VCPKG_C_FLAGS_DEBUG) OR
- (DEFINED VCPKG_CXX_FLAGS_DEBUG AND DEFINED VCPKG_C_FLAGS_DEBUG))
- else()
- message(FATAL_ERROR "You must set both the VCPKG_CXX_FLAGS_DEBUG and VCPKG_C_FLAGS_DEBUG")
- endif()
- if((NOT DEFINED VCPKG_CXX_FLAGS_RELEASE AND NOT DEFINED VCPKG_C_FLAGS_RELEASE) OR
- (DEFINED VCPKG_CXX_FLAGS_RELEASE AND DEFINED VCPKG_C_FLAGS_RELEASE))
- else()
- message(FATAL_ERROR "You must set both the VCPKG_CXX_FLAGS_RELEASE and VCPKG_C_FLAGS_RELEASE")
- endif()
- if((NOT DEFINED VCPKG_CXX_FLAGS AND NOT DEFINED VCPKG_C_FLAGS) OR
- (DEFINED VCPKG_CXX_FLAGS AND DEFINED VCPKG_C_FLAGS))
- else()
- message(FATAL_ERROR "You must set both the VCPKG_CXX_FLAGS and VCPKG_C_FLAGS")
+ set(VCPKG_SET_CHARSET_FLAG ON)
+ if(_csc_NO_CHARSET_FLAG)
+ set(VCPKG_SET_CHARSET_FLAG OFF)
endif()
- if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
- list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
- elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR NOT DEFINED VCPKG_CMAKE_SYSTEM_NAME)
- list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/windows.cmake")
- elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
- list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/linux.cmake")
- elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
- list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/android.cmake")
- elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
- list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/osx.cmake")
- elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
- list(APPEND _csc_OPTIONS "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/toolchains/freebsd.cmake")
+ if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ if(NOT DEFINED VCPKG_CMAKE_SYSTEM_NAME OR _TARGETTING_UWP)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/linux.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/android.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/osx.cmake")
+ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/freebsd.cmake")
+ endif()
endif()
+
list(APPEND _csc_OPTIONS
+ "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}"
"-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}"
+ "-DVCPKG_SET_CHARSET_FLAG=${VCPKG_SET_CHARSET_FLAG}"
"-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}"
"-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON"
"-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
@@ -197,7 +219,7 @@ function(vcpkg_configure_cmake)
"-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE"
"-DCMAKE_VERBOSE_MAKEFILE=ON"
"-DVCPKG_APPLOCAL_DEPS=OFF"
- "-DCMAKE_TOOLCHAIN_FILE=${VCPKG_ROOT_DIR}/scripts/buildsystems/vcpkg.cmake"
+ "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake"
"-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON"
"-DVCPKG_CXX_FLAGS=${VCPKG_CXX_FLAGS}"
"-DVCPKG_CXX_FLAGS_RELEASE=${VCPKG_CXX_FLAGS_RELEASE}"
@@ -219,15 +241,11 @@ function(vcpkg_configure_cmake)
endif()
# Sets configuration variables for macOS builds
- if(DEFINED VCPKG_INSTALL_NAME_DIR)
- list(APPEND _csc_OPTIONS "-DCMAKE_INSTALL_NAME_DIR=${VCPKG_INSTALL_NAME_DIR}")
- endif()
- if(DEFINED VCPKG_OSX_DEPLOYMENT_TARGET)
- list(APPEND _csc_OPTIONS "-DCMAKE_OSX_DEPLOYMENT_TARGET=${VCPKG_OSX_DEPLOYMENT_TARGET}")
- endif()
- if(DEFINED VCPKG_OSX_SYSROOT)
- list(APPEND _csc_OPTIONS "-DCMAKE_OSX_SYSROOT=${VCPKG_OSX_SYSROOT}")
- endif()
+ foreach(config_var INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT)
+ if(DEFINED VCPKG_${config_var})
+ list(APPEND _csc_OPTIONS "-DCMAKE_${config_var}=${VCPKG_${config_var}}")
+ endif()
+ endforeach()
set(rel_command
${CMAKE_COMMAND} ${_csc_SOURCE_PATH} "${_csc_OPTIONS}" "${_csc_OPTIONS_RELEASE}"
@@ -240,31 +258,32 @@ function(vcpkg_configure_cmake)
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug)
- if(NINJA_HOST AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows" AND NOT _csc_DISABLE_PARALLEL_CONFIGURE)
+ if(NINJA_HOST AND CMAKE_HOST_WIN32 AND NOT _csc_DISABLE_PARALLEL_CONFIGURE)
vcpkg_find_acquire_program(NINJA)
get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
- set(ENV{PATH} "$ENV{PATH}${_PATHSEP}${NINJA_PATH}")
+ vcpkg_add_to_path("${NINJA_PATH}")
#parallelize the configure step
set(_contents
"rule CreateProcess\n command = $process\n\n"
)
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- set(rel_line "build ../CMakeCache.txt: CreateProcess\n process = cmd /c \"cd .. &&")
- foreach(arg ${rel_command})
- set(rel_line "${rel_line} \"${arg}\"")
+ macro(_build_cmakecache whereat build_type)
+ set(${build_type}_line "build ${whereat}/CMakeCache.txt: CreateProcess\n process = cmd /c \"cd ${whereat} &&")
+ foreach(arg ${${build_type}_command})
+ set(${build_type}_line "${${build_type}_line} \"${arg}\"")
endforeach()
- set(_contents "${_contents}${rel_line}\"\n\n")
- endif()
+ set(_contents "${_contents}${${build_type}_line}\"\n\n")
+ endmacro()
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- set(dbg_line "build ../../${TARGET_TRIPLET}-dbg/CMakeCache.txt: CreateProcess\n process = cmd /c \"cd ../../${TARGET_TRIPLET}-dbg &&")
- foreach(arg ${dbg_command})
- set(dbg_line "${dbg_line} \"${arg}\"")
- endforeach()
- set(_contents "${_contents}${dbg_line}\"\n\n")
+ if(NOT DEFINED VCPKG_BUILD_TYPE)
+ _build_cmakecache(".." "rel")
+ _build_cmakecache("../../${TARGET_TRIPLET}-dbg" "dbg")
+ elseif(VCPKG_BUILD_TYPE STREQUAL "release")
+ _build_cmakecache(".." "rel")
+ elseif(VCPKG_BUILD_TYPE STREQUAL "debug")
+ _build_cmakecache("../../${TARGET_TRIPLET}-dbg" "dbg")
endif()
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure)
diff --git a/scripts/cmake/vcpkg_configure_make.cmake b/scripts/cmake/vcpkg_configure_make.cmake
new file mode 100644
index 000000000..1a691a945
--- /dev/null
+++ b/scripts/cmake/vcpkg_configure_make.cmake
@@ -0,0 +1,372 @@
+## # vcpkg_configure_make
+##
+## Configure configure for Debug and Release builds of a project.
+##
+## ## Usage
+## ```cmake
+## vcpkg_configure_make(
+## SOURCE_PATH <${SOURCE_PATH}>
+## [AUTOCONFIG]
+## [DISABLE_AUTO_HOST]
+## [DISABLE_AUTO_DST]
+## [GENERATOR]
+## [NO_DEBUG]
+## [SKIP_CONFIGURE]
+## [PROJECT_SUBPATH <${PROJ_SUBPATH}>]
+## [PRERUN_SHELL <${SHELL_PATH}>]
+## [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
+## [OPTIONS_RELEASE <-DOPTIMIZE=1>...]
+## [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]
+## )
+## ```
+##
+## ## Parameters
+## ### SOURCE_PATH
+## Specifies the directory containing the `configure`/`configure.ac`.
+## By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
+##
+## ### PROJECT_SUBPATH
+## Specifies the directory containing the ``configure`/`configure.ac`.
+## By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
+## Should use `GENERATOR NMake` first.
+##
+## ### NO_DEBUG
+## This port doesn't support debug mode.
+##
+## ### SKIP_CONFIGURE
+## Skip configure process
+##
+## ### AUTOCONFIG
+## Need to use autoconfig to generate configure file.
+##
+## ### DISABLE_AUTO_HOST
+## Don't set host automatically, the default value is `i686`.
+## If use this option, you will need to set host manually.
+##
+## ### DISABLE_AUTO_DST
+## Don't set installation path automatically, the default value is `${CURRENT_PACKAGES_DIR}` and `${CURRENT_PACKAGES_DIR}/debug`
+## If use this option, you will need to set dst path manually.
+##
+## ### GENERATOR
+## Specifies the precise generator to use.
+## NMake: nmake(windows) make(unix)
+## MAKE: make(windows) make(unix)
+##
+## ### PRERUN_SHELL
+## Script that needs to be called before configuration
+##
+## ### OPTIONS
+## Additional options passed to configure during the configuration.
+##
+## ### OPTIONS_RELEASE
+## Additional options passed to configure during the Release configuration. These are in addition to `OPTIONS`.
+##
+## ### OPTIONS_DEBUG
+## Additional options passed to configure during the Debug configuration. These are in addition to `OPTIONS`.
+##
+## ## Notes
+## This command supplies many common arguments to configure. To see the full list, examine the source.
+##
+## ## Examples
+##
+## * [x264](https://github.com/Microsoft/vcpkg/blob/master/ports/x264/portfile.cmake)
+## * [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)
+## * [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)
+## * [libosip2](https://github.com/Microsoft/vcpkg/blob/master/ports/libosip2/portfile.cmake)
+function(vcpkg_configure_make)
+ cmake_parse_arguments(_csc
+ "AUTOCONFIG;DISABLE_AUTO_HOST;DISABLE_AUTO_DST;NO_DEBUG;SKIP_CONFIGURE"
+ "SOURCE_PATH;PROJECT_SUBPATH;GENERATOR;PRERUN_SHELL"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE"
+ ${ARGN}
+ )
+
+ if(NOT VCPKG_PLATFORM_TOOLSET)
+ message(FATAL_ERROR "Vcpkg has been updated with VS2017 support; "
+ "however, vcpkg.exe must be rebuilt by re-running bootstrap-vcpkg.bat\n")
+ endif()
+
+ if (_csc_OPTIONS_DEBUG STREQUAL _csc_OPTIONS_RELEASE OR NMAKE_OPTION_RELEASE STREQUAL NMAKE_OPTION_DEBUG)
+ message(FATAL_ERROR "Detected debug configuration is equal to release configuration, please use NO_DEBUG for vcpkg_configure_make")
+ endif()
+ # Select compiler
+ if(_csc_GENERATOR MATCHES "NMake")
+ message(FATAL_ERROR "Sorry, NMake does not supported currently.")
+ if (CMAKE_HOST_WIN32)
+ set(GENERATOR "nmake")
+ else()
+ set(GENERATOR "make")
+ endif()
+ elseif(NOT _csc_GENERATOR OR _csc_GENERATOR MATCHES "MAKE")
+ if (CMAKE_HOST_WIN32)
+ set(GENERATOR "make")
+ else()
+ set(GENERATOR "make")
+ endif()
+ else()
+ message(FATAL_ERROR "${_csc_GENERATOR} not supported.")
+ endif()
+
+ set(WIN_TARGET_ARCH )
+ set(WIN_TARGET_COMPILER )
+ # Detect compiler
+ if (GENERATOR STREQUAL "nmake")
+ message(STATUS "Using generator NMAKE")
+ find_program(NMAKE nmake REQUIRED)
+ elseif (GENERATOR STREQUAL "make")
+ message(STATUS "Using generator make")
+ find_program(MAKE make REQUIRED)
+ else()
+ message(FATAL_ERROR "${GENERATOR} not supported.")
+ endif()
+ # Pre-processing windows configure requirements
+ if (CMAKE_HOST_WIN32)
+ vcpkg_find_acquire_program(YASM)
+ vcpkg_find_acquire_program(PERL)
+ set(MSYS_REQUIRE_PACKAGES diffutils)
+ if (_csc_AUTOCONFIG)
+ set(MSYS_REQUIRE_PACKAGES ${MSYS_REQUIRE_PACKAGES} autoconf automake m4 libtool perl)
+ endif()
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${MSYS_REQUIRE_PACKAGES})
+ get_filename_component(YASM_EXE_PATH ${YASM} DIRECTORY)
+ get_filename_component(PERL_EXE_PATH ${PERL} DIRECTORY)
+
+ if (NOT _csc_DISABLE_AUTO_HOST)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
+ set(WIN_TARGET_ARCH --host=i686-pc-mingw32)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x64)
+ set(WIN_TARGET_ARCH --host=i686-pc-mingw64)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL arm)
+ set(WIN_TARGET_ARCH --host=arm-pc-mingw32)
+ endif()
+ endif()
+ set(WIN_TARGET_COMPILER CC=cl)
+ set(ENV{PATH} "$ENV{PATH};${YASM_EXE_PATH};${MSYS_ROOT}/usr/bin;${PERL_EXE_PATH}")
+ set(BASH ${MSYS_ROOT}/usr/bin/bash.exe)
+ elseif (_csc_AUTOCONFIG)
+ find_program(autoreconf autoreconf REQUIRED)
+ endif()
+
+ if (NOT _csc_NO_DEBUG)
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ else()
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
+ endif()
+
+ if (NOT _csc_DISABLE_AUTO_DST)
+ set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE}
+ --prefix=${CURRENT_PACKAGES_DIR}
+ --bindir=${CURRENT_PACKAGES_DIR}/bin
+ --sbindir=${CURRENT_PACKAGES_DIR}/bin
+ --libdir=${CURRENT_PACKAGES_DIR}/lib
+ --includedir=${CURRENT_PACKAGES_DIR}/include)
+
+ set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG}
+ --prefix=${CURRENT_PACKAGES_DIR}/debug
+ --bindir=${CURRENT_PACKAGES_DIR}/debug/bin
+ --sbindir=${CURRENT_PACKAGES_DIR}/debug/bin
+ --libdir=${CURRENT_PACKAGES_DIR}/debug/lib
+ --includedir=${CURRENT_PACKAGES_DIR}/debug/include)
+ endif()
+
+ set(base_cmd )
+ if(CMAKE_HOST_WIN32)
+ set(base_cmd ${BASH} --noprofile --norc -c)
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ set(_csc_OPTIONS ${_csc_OPTIONS} --enable-shared)
+ if (VCPKG_TARGET_IS_UWP)
+ set(_csc_OPTIONS ${_csc_OPTIONS} --extra-ldflags=-APPCONTAINER --extra-ldflags=WindowsApp.lib)
+ endif()
+ else()
+ set(_csc_OPTIONS ${_csc_OPTIONS} --enable-static)
+ endif()
+ # Load toolchains
+ if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
+ endif()
+ include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
+
+ set(C_FLAGS_GLOBAL "$ENV{CFLAGS} ${VCPKG_C_FLAGS}")
+ set(CXX_FLAGS_GLOBAL "$ENV{CXXFLAGS} ${VCPKG_CXX_FLAGS}")
+ set(LD_FLAGS_GLOBAL "$ENV{LDFLAGS}")
+
+ if(VCPKG_TARGET_IS_UWP)
+ set(ENV{LIBPATH} "$ENV{LIBPATH};$ENV{_WKITS10}references\\windows.foundation.foundationcontract\\2.0.0.0\\;$ENV{_WKITS10}references\\windows.foundation.universalapicontract\\3.0.0.0\\")
+ set(_csc_OPTIONS ${_csc_OPTIONS} --extra-cflags=-DWINAPI_FAMILY=WINAPI_FAMILY_APP --extra-cflags=-D_WIN32_WINNT=0x0A00)
+ endif()
+
+ list(JOIN _csc_OPTIONS " " _csc_OPTIONS)
+ list(JOIN _csc_OPTIONS_RELEASE " " _csc_OPTIONS_RELEASE)
+ list(JOIN _csc_OPTIONS_DEBUG " " _csc_OPTIONS_DEBUG)
+
+ set(rel_command
+ ${base_cmd} "${WIN_TARGET_COMPILER} ${_csc_SOURCE_PATH}/configure ${WIN_TARGET_ARCH} ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE}"
+ )
+ set(dbg_command
+ ${base_cmd} "${WIN_TARGET_COMPILER} ${_csc_SOURCE_PATH}/configure ${WIN_TARGET_ARCH} ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG}"
+ )
+ else()
+ set(base_cmd ./)
+ set(rel_command
+ ${base_cmd}configure "${_csc_OPTIONS}" "${_csc_OPTIONS_RELEASE}"
+ )
+ set(dbg_command
+ ${base_cmd}configure "${_csc_OPTIONS}" "${_csc_OPTIONS_DEBUG}"
+ )
+ endif()
+
+ # Configure debug
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT _csc_NO_DEBUG)
+ if (CMAKE_HOST_WIN32)
+ unset(ENV{CFLAGS})
+ unset(ENV{CXXFLAGS})
+ unset(ENV{LDFLAGS})
+ set(TMP_CFLAGS "${C_FLAGS_GLOBAL} ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}")
+ string(REPLACE "/" "-" TMP_CFLAGS "${TMP_CFLAGS}")
+ set(ENV{CFLAGS} ${TMP_CFLAGS})
+ set(TMP_CXXFLAGS "${CXX_FLAGS_GLOBAL} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "/" "-" TMP_CXXFLAGS "${TMP_CXXFLAGS}")
+ set(ENV{CXXFLAGS} ${TMP_CXXFLAGS})
+ set(TMP_LDFLAGS "${LD_FLAGS_GLOBAL}")
+ string(REPLACE "/" "-" TMP_LDFLAGS "${TMP_LDFLAGS}")
+ set(ENV{LDFLAGS} ${TMP_LDFLAGS})
+ endif()
+
+ set(OBJ_DIR ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ set(PRJ_DIR ${OBJ_DIR}/${_csc_PROJECT_SUBPATH})
+
+ file(MAKE_DIRECTORY ${OBJ_DIR})
+
+ if (NOT CMAKE_HOST_WIN32)
+ file(GLOB_RECURSE SOURCE_FILES ${_csc_SOURCE_PATH}/*)
+ foreach(ONE_SOUCRCE_FILE ${SOURCE_FILES})
+ get_filename_component(DST_DIR ${ONE_SOUCRCE_FILE} PATH)
+ string(REPLACE "${_csc_SOURCE_PATH}" "${OBJ_DIR}" DST_DIR "${DST_DIR}")
+ file(COPY ${ONE_SOUCRCE_FILE} DESTINATION ${DST_DIR})
+ endforeach()
+ endif()
+
+ if (_csc_PRERUN_SHELL)
+ message(STATUS "Prerun shell with ${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd}${_csc_PRERUN_SHELL}
+ WORKING_DIRECTORY ${PRJ_DIR}
+ LOGNAME prerun-${TARGET_TRIPLET}-dbg
+ )
+ endif()
+
+ if (_csc_AUTOCONFIG)
+ message(STATUS "Generating configure with ${TARGET_TRIPLET}-dbg")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} autoreconf -vfi
+ WORKING_DIRECTORY ${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}
+ LOGNAME prerun-${TAR_TRIPLET_DIR}
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND autoreconf -vfi
+ WORKING_DIRECTORY ${PRJ_DIR}
+ LOGNAME prerun-${TAR_TRIPLET_DIR}
+ )
+ endif()
+ endif()
+
+ if (NOT _csc_SKIP_CONFIGURE)
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${dbg_command}
+ WORKING_DIRECTORY ${PRJ_DIR}
+ LOGNAME config-${TARGET_TRIPLET}-dbg
+ )
+ endif()
+ endif()
+
+ # Configure release
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ if (CMAKE_HOST_WIN32)
+ unset(ENV{CFLAGS})
+ unset(ENV{CXXFLAGS})
+ unset(ENV{LDFLAGS})
+ set(TMP_CFLAGS "${C_FLAGS_GLOBAL} ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}")
+ string(REPLACE "/" "-" TMP_CFLAGS "${TMP_CFLAGS}")
+ set(ENV{CFLAGS} ${TMP_CFLAGS})
+
+ set(TMP_CXXFLAGS "${CXX_FLAGS_GLOBAL} ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}")
+ string(REPLACE "/" "-" TMP_CXXFLAGS "${TMP_CXXFLAGS}")
+ set(ENV{CXXFLAGS} ${TMP_CXXFLAGS})
+
+ set(TMP_LDFLAGS "${LD_FLAGS_GLOBAL} ${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+ string(REPLACE "/" "-" TMP_LDFLAGS "${TMP_LDFLAGS}")
+ set(ENV{LDFLAGS} ${TMP_LDFLAGS})
+ endif()
+
+ if (_csc_NO_DEBUG)
+ set(TAR_TRIPLET_DIR ${TARGET_TRIPLET})
+ set(OBJ_DIR ${CURRENT_BUILDTREES_DIR}/${TAR_TRIPLET_DIR})
+ else()
+ set(TAR_TRIPLET_DIR ${TARGET_TRIPLET}-rel)
+ set(OBJ_DIR ${CURRENT_BUILDTREES_DIR}/${TAR_TRIPLET_DIR})
+ endif()
+ set(PRJ_DIR ${OBJ_DIR}/${_csc_PROJECT_SUBPATH})
+
+ file(MAKE_DIRECTORY ${OBJ_DIR})
+
+ if (NOT CMAKE_HOST_WIN32)
+ file(GLOB_RECURSE SOURCE_FILES ${_csc_SOURCE_PATH}/*)
+ foreach(ONE_SOUCRCE_FILE ${SOURCE_FILES})
+ get_filename_component(DST_DIR ${ONE_SOUCRCE_FILE} PATH)
+ string(REPLACE "${_csc_SOURCE_PATH}" "${OBJ_DIR}" DST_DIR "${DST_DIR}")
+ file(COPY ${ONE_SOUCRCE_FILE} DESTINATION ${DST_DIR})
+ endforeach()
+ endif()
+
+ if (_csc_PRERUN_SHELL)
+ message(STATUS "Prerun shell with ${TAR_TRIPLET_DIR}")
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd}${_csc_PRERUN_SHELL}
+ WORKING_DIRECTORY ${PRJ_DIR}
+ LOGNAME prerun-${TAR_TRIPLET_DIR}
+ )
+ endif()
+
+ if (_csc_AUTOCONFIG)
+ message(STATUS "Generating configure with ${TAR_TRIPLET_DIR}")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} autoreconf -vfi
+ WORKING_DIRECTORY ${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}
+ LOGNAME prerun-${TAR_TRIPLET_DIR}
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND autoreconf -vfi
+ WORKING_DIRECTORY ${PRJ_DIR}
+ LOGNAME prerun-${TAR_TRIPLET_DIR}
+ )
+ endif()
+ endif()
+
+ if (NOT _csc_SKIP_CONFIGURE)
+ message(STATUS "Configuring ${TAR_TRIPLET_DIR}")
+ vcpkg_execute_required_process(
+ COMMAND ${rel_command}
+ WORKING_DIRECTORY ${PRJ_DIR}
+ LOGNAME config-${TAR_TRIPLET_DIR}
+ )
+ endif()
+ endif()
+
+ # Restore envs
+ if (CMAKE_HOST_WIN32)
+ set(ENV{CFLAGS} "${C_FLAGS_GLOBAL}")
+ set(ENV{CXXFLAGS} "${CXX_FLAGS_GLOBAL}")
+ set(ENV{LDFLAGS} "${LD_FLAGS_GLOBAL}")
+ endif()
+
+ set(_VCPKG_MAKE_GENERATOR "${GENERATOR}" PARENT_SCOPE)
+ set(_VCPKG_NO_DEBUG ${_csc_NO_DEBUG} PARENT_SCOPE)
+ SET(_VCPKG_PROJECT_SOURCE_PATH ${_csc_SOURCE_PATH} PARENT_SCOPE)
+ set(_VCPKG_PROJECT_SUBPATH ${_csc_PROJECT_SUBPATH} PARENT_SCOPE)
+endfunction()
diff --git a/scripts/cmake/vcpkg_configure_meson.cmake b/scripts/cmake/vcpkg_configure_meson.cmake
index f1ae0e65f..6dfb266cf 100644
--- a/scripts/cmake/vcpkg_configure_meson.cmake
+++ b/scripts/cmake/vcpkg_configure_meson.cmake
@@ -12,20 +12,21 @@ function(vcpkg_configure_meson)
set(MESON_DEBUG_CFLAGS "${MESON_DEBUG_CFLAGS} /D_DEBUG /MDd /Z7 /Ob0 /Od /RTC1")
set(MESON_DEBUG_CXXFLAGS "${MESON_DEBUG_CXXFLAGS} /D_DEBUG /MDd /Z7 /Ob0 /Od /RTC1")
- set(MESON_RELEASE_CFLAGS "${MESON_RELEASE_CFLAGS} /MD /O2 /Oi /Gy /DNDEBUG /Z7")
- set(MESON_RELEASE_CXXFLAGS "${MESON_RELEASE_CXXFLAGS} /MD /O2 /Oi /Gy /DNDEBUG /Z7")
+ set(MESON_RELEASE_CFLAGS "${MESON_RELEASE_CFLAGS} /MD /O2 /Gy /DNDEBUG /Z7")
+ set(MESON_RELEASE_CXXFLAGS "${MESON_RELEASE_CXXFLAGS} /MD /O2 /Gy /DNDEBUG /Z7")
elseif(DEFINED VCPKG_CRT_LINKAGE AND VCPKG_CRT_LINKAGE STREQUAL static)
set(MESON_DEBUG_CFLAGS "${MESON_DEBUG_CFLAGS} /D_DEBUG /MTd /Z7 /Ob0 /Od /RTC1")
set(MESON_DEBUG_CXXFLAGS "${MESON_DEBUG_CXXFLAGS} /D_DEBUG /MTd /Z7 /Ob0 /Od /RTC1")
- set(MESON_RELEASE_CFLAGS "${MESON_RELEASE_CFLAGS} /MT /O2 /Oi /Gy /DNDEBUG /Z7")
- set(MESON_RELEASE_CXXFLAGS "${MESON_RELEASE_CXXFLAGS} /MT /O2 /Oi /Gy /DNDEBUG /Z7")
+ set(MESON_RELEASE_CFLAGS "${MESON_RELEASE_CFLAGS} /MT /O2 /Gy /DNDEBUG /Z7")
+ set(MESON_RELEASE_CXXFLAGS "${MESON_RELEASE_CXXFLAGS} /MT /O2 /Gy /DNDEBUG /Z7")
endif()
set(MESON_COMMON_LDFLAGS "${MESON_COMMON_LDFLAGS} /DEBUG")
set(MESON_RELEASE_LDFLAGS "${MESON_RELEASE_LDFLAGS} /INCREMENTAL:NO /OPT:REF /OPT:ICF")
# select meson cmd-line options
+ list(APPEND _vcm_OPTIONS -Dcmake_prefix_path=${CURRENT_INSTALLED_DIR})
list(APPEND _vcm_OPTIONS --buildtype plain --backend ninja --wrap-mode nodownload)
if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
list(APPEND _vcm_OPTIONS --default-library shared)
diff --git a/scripts/cmake/vcpkg_configure_qmake.cmake b/scripts/cmake/vcpkg_configure_qmake.cmake
index d660fedd7..a04a4c8f6 100644
--- a/scripts/cmake/vcpkg_configure_qmake.cmake
+++ b/scripts/cmake/vcpkg_configure_qmake.cmake
@@ -6,37 +6,59 @@
# ::
# vcpkg_configure_qmake(SOURCE_PATH <pro_file_path>
# [OPTIONS arg1 [arg2 ...]]
+# [OPTIONS_RELEASE arg1 [arg2 ...]]
+# [OPTIONS_DEBUG arg1 [arg2 ...]]
# )
#
# ``SOURCE_PATH``
# The path to the *.pro qmake project file.
-# ``OPTIONS``
+# ``OPTIONS[_RELEASE|_DEBUG]``
# The options passed to qmake.
function(vcpkg_configure_qmake)
- cmake_parse_arguments(_csc "" "SOURCE_PATH" "OPTIONS" ${ARGN})
-
+ cmake_parse_arguments(_csc "" "SOURCE_PATH" "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;BUILD_OPTIONS;BUILD_OPTIONS_RELEASE;BUILD_OPTIONS_DEBUG" ${ARGN})
+
# Find qmake executable
- find_program(QMAKE_COMMAND NAMES qmake PATHS ${CURRENT_INSTALLED_DIR}/tools/qt5)
+ set(_triplet_hostbindir ${CURRENT_INSTALLED_DIR}/tools/qt5/bin)
+ find_program(QMAKE_COMMAND NAMES qmake PATHS ${VCPKG_QT_HOST_TOOLS_ROOT_DIR}/bin ${_triplet_hostbindir})
if(NOT QMAKE_COMMAND)
message(FATAL_ERROR "vcpkg_configure_qmake: unable to find qmake.")
endif()
- if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
- list(APPEND _csc_OPTIONS CONFIG+=staticlib)
+ if(${VCPKG_LIBRARY_LINKAGE} STREQUAL "static")
+ list(APPEND _csc_OPTIONS "CONFIG-=shared")
+ list(APPEND _csc_OPTIONS "CONFIG*=static")
+ else()
+ list(APPEND _csc_OPTIONS "CONFIG-=static")
+ list(APPEND _csc_OPTIONS "CONFIG*=shared")
+ list(APPEND _csc_OPTIONS_DEBUG "CONFIG*=separate_debug_info")
endif()
-
+
+ if(VCPKG_TARGET_IS_WINDOWS AND ${VCPKG_CRT_LINKAGE} STREQUAL "static")
+ list(APPEND _csc_OPTIONS "CONFIG*=static-runtime")
+ endif()
+
# Cleanup build directories
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ if(DEFINED VCPKG_OSX_DEPLOYMENT_TARGET)
+ set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} ${VCPKG_OSX_DEPLOYMENT_TARGET})
+ endif()
+
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
configure_file(${CURRENT_INSTALLED_DIR}/tools/qt5/qt_release.conf ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/qt.conf)
message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
+ if(DEFINED _csc_BUILD_OPTIONS OR DEFINED _csc_BUILD_OPTIONS_RELEASE)
+ set(BUILD_OPT -- ${_csc_BUILD_OPTIONS} ${_csc_BUILD_OPTIONS_RELEASE})
+ endif()
vcpkg_execute_required_process(
- COMMAND ${QMAKE_COMMAND} CONFIG-=debug CONFIG+=release ${_csc_OPTIONS} ${_csc_SOURCE_PATH} -qtconf "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/qt.conf"
+ COMMAND ${QMAKE_COMMAND} CONFIG-=debug CONFIG+=release
+ ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE} ${_csc_SOURCE_PATH}
+ -qtconf "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/qt.conf"
+ ${BUILD_OPT}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel
LOGNAME config-${TARGET_TRIPLET}-rel
)
@@ -48,8 +70,14 @@ function(vcpkg_configure_qmake)
message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
+ if(DEFINED _csc_BUILD_OPTIONS OR DEFINED _csc_BUILD_OPTIONS_DEBUG)
+ set(BUILD_OPT -- ${_csc_BUILD_OPTIONS} ${_csc_BUILD_OPTIONS_DEBUG})
+ endif()
vcpkg_execute_required_process(
- COMMAND ${QMAKE_COMMAND} CONFIG-=release CONFIG+=debug ${_csc_OPTIONS} ${_csc_SOURCE_PATH} -qtconf "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/qt.conf"
+ COMMAND ${QMAKE_COMMAND} CONFIG-=release CONFIG+=debug
+ ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG} ${_csc_SOURCE_PATH}
+ -qtconf "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/qt.conf"
+ ${BUILD_OPT}
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg
LOGNAME config-${TARGET_TRIPLET}-dbg
)
diff --git a/scripts/cmake/vcpkg_copy_tool_dependencies.cmake b/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
index 165f19ed1..396d20b41 100644
--- a/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
+++ b/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
@@ -21,7 +21,7 @@ function(vcpkg_copy_tool_dependencies TOOL_DIR)
file(GLOB TOOLS ${TOOL_DIR}/*.exe ${TOOL_DIR}/*.dll)
foreach(TOOL ${TOOLS})
execute_process(COMMAND powershell -noprofile -executionpolicy Bypass -nologo
- -file ${VCPKG_ROOT_DIR}/scripts/buildsystems/msbuild/applocal.ps1
+ -file ${SCRIPTS}/buildsystems/msbuild/applocal.ps1
-targetBinary ${TOOL}
-installedDir ${PATH_TO_SEARCH}
OUTPUT_VARIABLE OUT)
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index 72016b8c9..8a8efd205 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -45,7 +45,7 @@
##
## * [apr](https://github.com/Microsoft/vcpkg/blob/master/ports/apr/portfile.cmake)
## * [fontconfig](https://github.com/Microsoft/vcpkg/blob/master/ports/fontconfig/portfile.cmake)
-## * [openssl](https://github.com/Microsoft/vcpkg/blob/master/ports/openssl/portfile.cmake)
+## * [freetype](https://github.com/Microsoft/vcpkg/blob/master/ports/freetype/portfile.cmake)
function(vcpkg_download_distfile VAR)
set(options SKIP_SHA512)
set(oneValueArgs FILENAME SHA512)
@@ -75,11 +75,14 @@ function(vcpkg_download_distfile VAR)
# Works around issue #3399
if(IS_DIRECTORY "${DOWNLOADS}/temp")
+ # Delete "temp0" directory created by the old version of vcpkg
file(REMOVE_RECURSE "${DOWNLOADS}/temp0")
- file(RENAME "${DOWNLOADS}/temp" "${DOWNLOADS}/temp0")
- file(REMOVE_RECURSE "${DOWNLOADS}/temp0")
+
+ file(GLOB temp_files "${DOWNLOADS}/temp")
+ file(REMOVE_RECURSE ${temp_files})
+ else()
+ file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
endif()
- file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
function(test_hash FILE_PATH FILE_KIND CUSTOM_ERROR_ADVICE)
if(_VCPKG_INTERNAL_NO_HASH_CHECK)
@@ -120,7 +123,7 @@ function(vcpkg_download_distfile VAR)
list(APPEND request_headers "--header=${header}")
endforeach()
endif()
- execute_process(
+ _execute_process(
COMMAND ${ARIA2} ${vcpkg_download_distfile_URLS}
-o temp/${vcpkg_download_distfile_FILENAME}
-l download-${vcpkg_download_distfile_FILENAME}-detailed.log
diff --git a/scripts/cmake/vcpkg_execute_build_process.cmake b/scripts/cmake/vcpkg_execute_build_process.cmake
index d440ba2f6..9da6cec9f 100644
--- a/scripts/cmake/vcpkg_execute_build_process.cmake
+++ b/scripts/cmake/vcpkg_execute_build_process.cmake
@@ -31,6 +31,7 @@
## ## Examples
##
## * [icu](https://github.com/Microsoft/vcpkg/blob/master/ports/icu/portfile.cmake)
+include(vcpkg_prettify_command)
function(vcpkg_execute_build_process)
cmake_parse_arguments(_ebp "" "WORKING_DIRECTORY;LOGNAME" "COMMAND;NO_PARALLEL_COMMAND" ${ARGN})
@@ -131,8 +132,9 @@ function(vcpkg_execute_build_process)
file(TO_NATIVE_PATH "${LOG}" NATIVE_LOG)
list(APPEND STRINGIFIED_LOGS " ${NATIVE_LOG}\n")
endforeach()
+ vcpkg_prettify_command(_ebp_COMMAND _ebp_COMMAND_PRETTY)
message(FATAL_ERROR
- " Command failed: ${_ebp_COMMAND}\n"
+ " Command failed: ${_ebp_COMMAND_PRETTY}\n"
" Working Directory: ${_ebp_WORKING_DIRECTORY}\n"
" See logs for more information:\n"
${STRINGIFIED_LOGS})
diff --git a/scripts/cmake/vcpkg_execute_required_process.cmake b/scripts/cmake/vcpkg_execute_required_process.cmake
index 2e9ba7058..f25a5b55e 100644
--- a/scripts/cmake/vcpkg_execute_required_process.cmake
+++ b/scripts/cmake/vcpkg_execute_required_process.cmake
@@ -11,6 +11,10 @@
## )
## ```
## ## Parameters
+## ### ALLOW_IN_DOWNLOAD_MODE
+## Allows the command to execute in Download Mode.
+## [See execute_process() override](../../scripts/cmake/execute_process.cmake).
+##
## ### COMMAND
## The command to be executed, along with its arguments.
##
@@ -28,11 +32,22 @@
## * [openssl](https://github.com/Microsoft/vcpkg/blob/master/ports/openssl/portfile.cmake)
## * [boost](https://github.com/Microsoft/vcpkg/blob/master/ports/boost/portfile.cmake)
## * [qt5](https://github.com/Microsoft/vcpkg/blob/master/ports/qt5/portfile.cmake)
+include(vcpkg_prettify_command)
function(vcpkg_execute_required_process)
- cmake_parse_arguments(vcpkg_execute_required_process "" "WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
+ cmake_parse_arguments(vcpkg_execute_required_process "ALLOW_IN_DOWNLOAD_MODE" "WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
set(LOG_OUT "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-out.log")
set(LOG_ERR "${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_LOGNAME}-err.log")
- execute_process(
+
+ set(execute_process_function execute_process)
+ if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT vcpkg_execute_required_process_ALLOW_IN_DOWNLOAD_MODE)
+ message(FATAL_ERROR
+[[
+This command cannot be executed in Download Mode.
+Halting portfile execution.
+]])
+ endif()
+
+ _execute_process(
COMMAND ${vcpkg_execute_required_process_COMMAND}
OUTPUT_FILE ${LOG_OUT}
ERROR_FILE ${LOG_ERR}
@@ -53,8 +68,9 @@ function(vcpkg_execute_required_process)
file(TO_NATIVE_PATH "${LOG}" NATIVE_LOG)
list(APPEND STRINGIFIED_LOGS " ${NATIVE_LOG}\n")
endforeach()
+ vcpkg_prettify_command(vcpkg_execute_required_process_COMMAND vcpkg_execute_required_process_COMMAND_PRETTY)
message(FATAL_ERROR
- " Command failed: ${vcpkg_execute_required_process_COMMAND}\n"
+ " Command failed: ${vcpkg_execute_required_process_COMMAND_PRETTY}\n"
" Working Directory: ${vcpkg_execute_required_process_WORKING_DIRECTORY}\n"
" Error code: ${error_code}\n"
" See logs for more information:\n"
diff --git a/scripts/cmake/vcpkg_execute_required_process_repeat.cmake b/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
index 0c77c3913..ca11e8ea4 100644
--- a/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
+++ b/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
@@ -1,4 +1,5 @@
# Usage: vcpkg_execute_required_process_repeat(COUNT <num> COMMAND <cmd> [<args>...] WORKING_DIRECTORY </path/to/dir> LOGNAME <my_log_name>)
+include(vcpkg_prettify_command)
function(vcpkg_execute_required_process_repeat)
cmake_parse_arguments(vcpkg_execute_required_process_repeat "" "COUNT;WORKING_DIRECTORY;LOGNAME" "COMMAND" ${ARGN})
#debug_message("vcpkg_execute_required_process_repeat(${vcpkg_execute_required_process_repeat_COMMAND})")
@@ -18,8 +19,9 @@ function(vcpkg_execute_required_process_repeat)
endif()
endforeach(loop_count)
if (NOT SUCCESSFUL_EXECUTION)
+ vcpkg_prettify_command(vcpkg_execute_required_process_repeat_COMMAND vcpkg_execute_required_process_repeat_COMMAND_PRETTY)
message(FATAL_ERROR
- " Command failed: ${vcpkg_execute_required_process_repeat_COMMAND}\n"
+ " Command failed: ${vcpkg_execute_required_process_repeat_COMMAND_PRETTY}\n"
" Working Directory: ${vcpkg_execute_required_process_repeat_WORKING_DIRECTORY}\n"
" See logs for more information:\n"
" ${NATIVE_BUILDTREES_DIR}\\${vcpkg_execute_required_process_repeat_LOGNAME}-out.log\n"
diff --git a/scripts/cmake/vcpkg_extract_source_archive.cmake b/scripts/cmake/vcpkg_extract_source_archive.cmake
index a55419b19..fbae94b55 100644
--- a/scripts/cmake/vcpkg_extract_source_archive.cmake
+++ b/scripts/cmake/vcpkg_extract_source_archive.cmake
@@ -41,6 +41,7 @@ function(vcpkg_extract_source_archive ARCHIVE)
message(STATUS "Extracting source ${ARCHIVE}")
file(MAKE_DIRECTORY ${WORKING_DIRECTORY})
vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
COMMAND ${CMAKE_COMMAND} -E tar xjf ${ARCHIVE}
WORKING_DIRECTORY ${WORKING_DIRECTORY}
LOGNAME extract
diff --git a/scripts/cmake/vcpkg_extract_source_archive_ex.cmake b/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
index a70a5e4a3..67916d09d 100644
--- a/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
+++ b/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
@@ -5,6 +5,7 @@
## ## Usage
## ```cmake
## vcpkg_extract_source_archive_ex(
+## SKIP_PATCH_CHECK
## OUT_SOURCE_PATH <SOURCE_PATH>
## ARCHIVE <${ARCHIVE}>
## [REF <1.0.0>]
@@ -14,6 +15,9 @@
## )
## ```
## ## Parameters
+## ### SKIP_PATCH_CHECK
+## If this option is set the failure to apply a patch is ignored.
+##
## ### OUT_SOURCE_PATH
## Specifies the out-variable that will contain the extracted location.
##
@@ -25,7 +29,7 @@
## This is usually obtained from calling [`vcpkg_download_distfile`](vcpkg_download_distfile.md).
##
## ### REF
-## A friendly name that will be used instead of the filename of the archive.
+## A friendly name that will be used instead of the filename of the archive. If more than 10 characters it will be truncated.
##
## By convention, this is set to the version number or tag fetched
##
@@ -51,7 +55,13 @@ include(vcpkg_apply_patches)
include(vcpkg_extract_source_archive)
function(vcpkg_extract_source_archive_ex)
- cmake_parse_arguments(_vesae "NO_REMOVE_ONE_LEVEL" "OUT_SOURCE_PATH;ARCHIVE;REF;WORKING_DIRECTORY" "PATCHES" ${ARGN})
+ cmake_parse_arguments(
+ _vesae
+ "NO_REMOVE_ONE_LEVEL;SKIP_PATCH_CHECK"
+ "OUT_SOURCE_PATH;ARCHIVE;REF;WORKING_DIRECTORY"
+ "PATCHES"
+ ${ARGN}
+ )
if(NOT _vesae_ARCHIVE)
message(FATAL_ERROR "Must specify ARCHIVE parameter to vcpkg_extract_source_archive_ex()")
@@ -115,7 +125,14 @@ function(vcpkg_extract_source_archive_ex)
endif()
endif()
+ if (_vesae_SKIP_PATCH_CHECK)
+ set (QUIET QUIET)
+ else()
+ set (QUIET)
+ endif()
+
vcpkg_apply_patches(
+ ${QUIET}
SOURCE_PATH ${TEMP_SOURCE_PATH}
PATCHES ${_vesae_PATCHES}
)
diff --git a/scripts/cmake/vcpkg_fail_port_install.cmake b/scripts/cmake/vcpkg_fail_port_install.cmake
new file mode 100644
index 000000000..0fdacb639
--- /dev/null
+++ b/scripts/cmake/vcpkg_fail_port_install.cmake
@@ -0,0 +1,92 @@
+## # vcpkg_fail_port_install
+##
+## Fails the current portfile with a (default) error message
+##
+## ## Usage
+## ```cmake
+## vcpkg_fail_port_install([MESSAGE <message>] [ON_TARGET <target1> [<target2> ...]]
+## [ON_ARCH <arch1> [<arch2> ...]]
+## [ON_CRT_LINKAGE <link1> [<link2> ...]])
+## [ON_LIBRARY_LINKAGE <linklib1> [<linklib2> ...]])
+## ```
+##
+## ## Parameters
+## ### MESSAGE
+## Additional failure message. If non is given a default message will be displayed depending on the failure condition
+##
+## ### ALWAYS
+## will always fail early
+##
+## ### ON_TARGET
+## targets for which the build should fail early. Valid targets are <target> from VCPKG_IS_TARGET_<target> (see vcpkg_common_definitions.cmake)
+##
+## ### ON_ARCH
+## architecture for which the build should fail early.
+##
+## ### ON_CRT_LINKAGE
+## CRT linkage for which the build should fail early.
+##
+## ### ON_LIBRARY_LINKAGE
+## library linkage for which the build should fail early.
+##
+## ## Examples
+##
+## * [aws-lambda-cpp](https://github.com/Microsoft/vcpkg/blob/master/ports/aws-lambda-cpp/portfile.cmake)
+function(vcpkg_fail_port_install)
+ cmake_parse_arguments(PARSE_ARGV 0 _csc "ALWAYS" "MESSAGE" "ON_TARGET;ON_ARCH;ON_CRT_LINKAGE;ON_LIBRARY_LINKAGE")
+ if(DEFINED _csc_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown arguments passed to vcpkg_fail_port_install. Please correct the portfile!")
+ endif()
+ if(DEFINED _csc_MESSAGE)
+ set(_csc_MESSAGE "${_csc_MESSAGE}\n")
+ else()
+ set(_csc_MESSAGE "")
+ endif()
+
+ unset(_fail_port)
+ #Target fail check
+ if(DEFINED _csc_ON_TARGET)
+ foreach(_target ${_csc_ON_TARGET})
+ string(TOUPPER ${_target} _target_upper)
+ if(VCPKG_TARGET_IS_${_target_upper})
+ set(_fail_port TRUE)
+ set(_csc_MESSAGE "${_csc_MESSAGE}Target '${_target}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ #Architecture fail check
+ if(DEFINED _csc_ON_ARCH)
+ foreach(_arch ${_csc_ON_ARCH})
+ if(${VCPKG_TARGET_ARCHITECTURE} MATCHES ${_arch})
+ set(_fail_port TRUE)
+ set(_csc_MESSAGE "${_csc_MESSAGE}Architecture '${_arch}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ #CRT linkage fail check
+ if(DEFINED _csc_ON_CRT_LINKAGE)
+ foreach(_crt_link ${_csc_ON_CRT_LINKAGE})
+ if("${VCPKG_CRT_LINKAGE}" MATCHES "${_crt_link}")
+ set(_fail_port TRUE)
+ set(_csc_MESSAGE "${_csc_MESSAGE}CRT linkage '${VCPKG_CRT_LINKAGE}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ #Library linkage fail check
+ if(DEFINED _csc_ON_LIBRARY_LINKAGE)
+ foreach(_lib_link ${_csc_ON_LIBRARY_LINKAGE})
+ if("${VCPKG_LIBRARY_LINKAGE}" MATCHES "${_lib_link}")
+ set(_fail_port TRUE)
+ set(_csc_MESSAGE "${_csc_MESSAGE}Library linkage '${VCPKG_LIBRARY_LINKAGE}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ if(_fail_port OR _csc_ALWAYS)
+ message(FATAL_ERROR ${_csc_MESSAGE})
+ endif()
+
+endfunction() \ No newline at end of file
diff --git a/scripts/cmake/vcpkg_find_acquire_program.cmake b/scripts/cmake/vcpkg_find_acquire_program.cmake
index 451f4bcd3..b4672a245 100644
--- a/scripts/cmake/vcpkg_find_acquire_program.cmake
+++ b/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -20,6 +20,7 @@
## - PERL
## - PYTHON2
## - PYTHON3
+## - GO
## - JOM
## - MESON
## - NASM
@@ -45,6 +46,8 @@ function(vcpkg_find_acquire_program VAR)
unset(_vfa_RENAME)
unset(SUBDIR)
unset(REQUIRED_INTERPRETER)
+ unset(_vfa_SUPPORTED)
+ unset(POST_INSTALL_COMMAND)
vcpkg_get_program_files_platform_bitness(PROGRAM_FILES_PLATFORM_BITNESS)
vcpkg_get_program_files_32_bit(PROGRAM_FILES_32_BIT)
@@ -54,17 +57,20 @@ function(vcpkg_find_acquire_program VAR)
set(PATHS ${DOWNLOADS}/tools/perl/perl/bin)
set(BREW_PACKAGE_NAME "perl")
set(APT_PACKAGE_NAME "perl")
- set(URL "http://strawberryperl.com/download/5.24.1.1/strawberry-perl-5.24.1.1-32bit-portable.zip")
- set(ARCHIVE "strawberry-perl-5.24.1.1-32bit-portable.zip")
- set(HASH a6e685ea24376f50db5f06c5b46075f1d3be25168fa1f27fa9b02e2ac017826cee62a2b43562f9b6c989337a231ba914416c110075457764de2d11f99d5e0f26)
+ set(URL "http://strawberryperl.com/download/5.30.0.1/strawberry-perl-5.30.0.1-32bit.zip")
+ set(ARCHIVE "strawberry-perl-5.30.0.1-32bit.zip")
+ set(HASH d353d3dc743ebdc6d1e9f6f2b7a6db3c387c1ce6c890bae8adc8ae5deae8404f4c5e3cf249d1e151e7256d4c5ee9cd317e6c41f3b6f244340de18a24b938e0c4)
elseif(VAR MATCHES "NASM")
set(PROGNAME nasm)
- set(PATHS ${DOWNLOADS}/tools/nasm/nasm-2.14)
+ set(PATHS ${DOWNLOADS}/tools/nasm/nasm-2.14.02)
set(BREW_PACKAGE_NAME "nasm")
set(APT_PACKAGE_NAME "nasm")
- set(URL "http://www.nasm.us/pub/nasm/releasebuilds/2.14/win32/nasm-2.14-win32.zip")
- set(ARCHIVE "nasm-2.14-win32.zip")
- set(HASH 64481b0346b83de8c9568f04a54f68e0f4c71724afa0b414f12e4080951d8c49e489bfc32117f9a489e3e49477b1cadc583c672311316d27c543af304c4b7f2a)
+ set(URL
+ "http://www.nasm.us/pub/nasm/releasebuilds/2.14.02/win32/nasm-2.14.02-win32.zip"
+ "http://fossies.org/windows/misc/nasm-2.14.02-win32.zip"
+ )
+ set(ARCHIVE "nasm-2.14.02-win32.zip")
+ set(HASH a0f16a9f3b668b086e3c4e23a33ff725998e120f2e3ccac8c28293fd4faeae6fc59398919e1b89eed7461685d2730de02f2eb83e321f73609f35bf6b17a23d1e)
elseif(VAR MATCHES "YASM")
set(PROGNAME yasm)
set(SUBDIR 1.3.0.6)
@@ -74,14 +80,23 @@ function(vcpkg_find_acquire_program VAR)
set(_vfa_RENAME "yasm.exe")
set(NOEXTRACT ON)
set(HASH c1945669d983b632a10c5ff31e86d6ecbff143c3d8b2c433c0d3d18f84356d2b351f71ac05fd44e5403651b00c31db0d14615d7f9a6ecce5750438d37105c55b)
+ elseif(VAR MATCHES "GO")
+ set(PROGNAME go)
+ set(PATHS ${DOWNLOADS}/tools/go/go/bin)
+ set(BREW_PACKAGE_NAME "go")
+ set(APT_PACKAGE_NAME "golang-go")
+ set(URL "https://dl.google.com/go/go1.13.1.windows-386.zip")
+ set(ARCHIVE "go1.13.1.windows-386.zip")
+ set(HASH 2ab0f07e876ad98d592351a8808c2de42351ab387217e088bc4c5fa51d6a835694c501e2350802323b55a27dc0157f8b70045597f789f9e50f5ceae50dea3027)
elseif(VAR MATCHES "PYTHON3")
if(CMAKE_HOST_WIN32)
set(PROGNAME python)
- set(SUBDIR "python3")
+ set(SUBDIR "python-3.7.3")
set(PATHS ${DOWNLOADS}/tools/python/${SUBDIR})
set(URL "https://www.python.org/ftp/python/3.7.3/python-3.7.3-embed-win32.zip")
set(ARCHIVE "python-3.7.3-embed-win32.zip")
set(HASH 2c1b1f0a29d40a91771ae21a5f733eedc10984cd182cb10c2793bbd24191a89f20612a3f23c34047f37fb06369016bfd4a52915ed1b4a56f8bd2b4ca6994eb31)
+ set(POST_INSTALL_COMMAND ${CMAKE_COMMAND} -E remove python37._pth)
else()
set(PROGNAME python3)
set(BREW_PACKAGE_NAME "python")
@@ -92,9 +107,9 @@ function(vcpkg_find_acquire_program VAR)
set(PROGNAME python)
set(SUBDIR "python2")
set(PATHS ${DOWNLOADS}/tools/python/${SUBDIR})
- set(URL "https://www.python.org/ftp/python/2.7.14/python-2.7.14.msi")
+ set(URL "https://www.python.org/ftp/python/2.7.16/python-2.7.16.msi")
set(ARCHIVE "python2.msi")
- set(HASH 8c3ad6e527742d99ba96dcfd1098861b14e7207b80d51a54e9b410ab2f36e44e05561ea1527d8e92b3e10808311536260bd9e82db0da3b513fb1be18e108510e)
+ set(HASH c34a6fa2438682104dccb53650a2bdb79eac7996deff075201a0f71bb835d60d3ed866652a1931f15a29510fe8e1009ac04e423b285122d2e5747fefc4c10254)
else()
set(PROGNAME python2)
set(BREW_PACKAGE_NAME "python2")
@@ -102,10 +117,10 @@ function(vcpkg_find_acquire_program VAR)
endif()
elseif(VAR MATCHES "RUBY")
set(PROGNAME "ruby")
- set(PATHS ${DOWNLOADS}/tools/ruby/rubyinstaller-2.4.1-1-x86/bin)
- set(URL https://github.com/oneclick/rubyinstaller2/releases/download/2.4.1-1/rubyinstaller-2.4.1-1-x86.7z)
- set(ARCHIVE rubyinstaller-2.4.1-1-x86.7z)
- set(HASH b51112e9b58cfcbe8cec0607e8a16fff6a943d9b4e31b2a7fbf5df5f83f050bf0a4812d3dd6000ff21a3d5fd219cd0a309c58ac1c1db950a9b0072405e4b70f5)
+ set(PATHS ${DOWNLOADS}/tools/ruby/rubyinstaller-2.6.3-1-x86/bin)
+ set(URL https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x86.7z)
+ set(ARCHIVE rubyinstaller-2.6.3-1-x86.7z)
+ set(HASH 4322317dd02ce13527bf09d6e6a7787ca3814ea04337107d28af1ac360bd272504b32e20ed3ea84eb5b21dae7b23bfe5eb0e529b6b0aa21a1a2bbb0a542d7aec)
elseif(VAR MATCHES "JOM")
set(PROGNAME jom)
set(SUBDIR "jom-1.1.3")
@@ -116,9 +131,9 @@ function(vcpkg_find_acquire_program VAR)
elseif(VAR MATCHES "7Z")
set(PROGNAME 7z)
set(PATHS "${PROGRAM_FILES_PLATFORM_BITNESS}/7-Zip" "${PROGRAM_FILES_32_BIT}/7-Zip" "${DOWNLOADS}/tools/7z/Files/7-Zip")
- set(URL "http://7-zip.org/a/7z1604.msi")
- set(ARCHIVE "7z1604.msi")
- set(HASH 556f95f7566fe23704d136239e4cf5e2a26f939ab43b44145c91b70d031a088d553e5c21301f1242a2295dcde3143b356211f0108c68e65eef8572407618326d)
+ set(URL "https://7-zip.org/a/7z1900.msi")
+ set(ARCHIVE "7z1900.msi")
+ set(HASH f73b04e2d9f29d4393fde572dcf3c3f0f6fa27e747e5df292294ab7536ae24c239bf917689d71eb10cc49f6b9a4ace26d7c122ee887d93cc935f268c404e9067)
elseif(VAR MATCHES "NINJA")
set(PROGNAME ninja)
set(SUBDIR "ninja-1.8.2")
@@ -154,10 +169,10 @@ function(vcpkg_find_acquire_program VAR)
else()
set(SCRIPTNAME meson)
endif()
- set(PATHS ${DOWNLOADS}/tools/meson/meson-0.50.0)
- set(URL "https://github.com/mesonbuild/meson/archive/0.50.0.zip")
- set(ARCHIVE "meson-0.50.0.zip")
- set(HASH 587cafe0cd551e3fb3507ecab904912dc3e053aa95c864b435526a20d52406536ba970a50be6c9f20d83314c5853aaefa102c5ca14623d0928b091a43e7b6d64)
+ set(PATHS ${DOWNLOADS}/tools/meson/meson-0.52.0)
+ set(URL "https://github.com/mesonbuild/meson/archive/0.52.0.zip")
+ set(ARCHIVE "meson-0.52.0.zip")
+ set(HASH 2f2657599f19933c02be2a1faa508d5b2d137fba1ccc9d68a6b6d04b8d21163c33220c673643fa444fa86e94ba010cf8a851b9e6abc096559a7c735f5099a180)
elseif(VAR MATCHES "FLEX")
if(CMAKE_HOST_WIN32)
set(PROGNAME win_flex)
@@ -226,13 +241,30 @@ function(vcpkg_find_acquire_program VAR)
set(URL "http://doxygen.nl/files/doxygen-1.8.15.windows.bin.zip")
set(ARCHIVE "doxygen-1.8.15.windows.bin.zip")
set(HASH 89482dcb1863d381d47812c985593e736d703931d49994e09c7c03ef67e064115d0222b8de1563a7930404c9bc2d3be323f3d13a01ef18861be584db3d5a953c)
+ elseif(VAR MATCHES "BAZEL")
+ set(PROGNAME bazel)
+ set(BAZEL_VERSION 0.25.2)
+ set(SUBDIR ${BAZEL_VERSION})
+ set(PATHS ${DOWNLOADS}/tools/bazel/${SUBDIR})
+ set(_vfa_RENAME "bazel")
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(_vfa_SUPPORTED ON)
+ set(URL "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-linux-x86_64")
+ set(ARCHIVE "bazel-${BAZEL_VERSION}-linux-x86_64")
+ set(NOEXTRACT ON)
+ set(HASH db4a583cf2996aeb29fd008261b12fe39a4a5faf0fbf96f7124e6d3ffeccf6d9655d391378e68dd0915bc91c9e146a51fd9661963743857ca25179547feceab1)
+ else()
+ set(URL "https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-windows-x86_64.zip")
+ set(ARCHIVE "bazel-${BAZEL_VERSION}-windows-x86_64.zip")
+ set(HASH 6482f99a0896f55ef65739e7b53452fd9c0adf597b599d0022a5e0c5fa4374f4a958d46f98e8ba25af4b065adacc578bfedced483d8c169ea5cb1777a99eea53)
+ endif()
# Download Tools
elseif(VAR MATCHES "ARIA2")
set(PROGNAME aria2c)
- set(PATHS ${DOWNLOADS}/tools/aria2c/aria2-1.33.1-win-32bit-build1)
- set(URL "https://github.com/aria2/aria2/releases/download/release-1.33.1/aria2-1.33.1-win-32bit-build1.zip")
- set(ARCHIVE "aria2-1.33.1-win-32bit-build1.zip")
- set(HASH 2456176ba3d506a07cf0cc4f61f080e1ff8cb4106426d66f354c5bb67a9a8720b5ddb26904275e61b1f623c932355f7dcde4cd17556cc895f11293c23c3a9bf3)
+ set(PATHS ${DOWNLOADS}/tools/aria2c/aria2-1.34.0-win-32bit-build1)
+ set(URL "https://github.com/aria2/aria2/releases/download/release-1.34.0/aria2-1.34.0-win-32bit-build1.zip")
+ set(ARCHIVE "aria2-1.34.0-win-32bit-build1.zip")
+ set(HASH 2a5480d503ac6e8203040c7e516a3395028520da05d0ebf3a2d56d5d24ba5d17630e8f318dd4e3cc2094cc4668b90108fb58e8b986b1ffebd429995058063c27)
else()
message(FATAL "unknown tool ${VAR} -- unable to acquire.")
endif()
@@ -249,7 +281,7 @@ function(vcpkg_find_acquire_program VAR)
do_find()
if("${${VAR}}" MATCHES "-NOTFOUND")
- if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ if(NOT CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows" AND NOT _vfa_SUPPORTED)
set(EXAMPLE ".")
if(DEFINED BREW_PACKAGE_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
set(EXAMPLE ":\n brew install ${BREW_PACKAGE_NAME}")
@@ -269,9 +301,9 @@ function(vcpkg_find_acquire_program VAR)
file(MAKE_DIRECTORY ${PROG_PATH_SUBDIR})
if(DEFINED NOEXTRACT)
if(DEFINED _vfa_RENAME)
- file(INSTALL ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} RENAME ${_vfa_RENAME})
+ file(INSTALL ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} RENAME ${_vfa_RENAME} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
else()
- file(COPY ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR})
+ file(COPY ${ARCHIVE_PATH} DESTINATION ${PROG_PATH_SUBDIR} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
endif()
else()
get_filename_component(ARCHIVE_EXTENSION ${ARCHIVE} EXT)
@@ -279,18 +311,27 @@ function(vcpkg_find_acquire_program VAR)
if(ARCHIVE_EXTENSION STREQUAL ".msi")
file(TO_NATIVE_PATH "${ARCHIVE_PATH}" ARCHIVE_NATIVE_PATH)
file(TO_NATIVE_PATH "${PROG_PATH_SUBDIR}" DESTINATION_NATIVE_PATH)
- execute_process(
+ _execute_process(
COMMAND msiexec /a ${ARCHIVE_NATIVE_PATH} /qn TARGETDIR=${DESTINATION_NATIVE_PATH}
WORKING_DIRECTORY ${DOWNLOADS}
)
else()
- execute_process(
+ _execute_process(
COMMAND ${CMAKE_COMMAND} -E tar xzf ${ARCHIVE_PATH}
WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
)
endif()
endif()
+ if(DEFINED POST_INSTALL_COMMAND)
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND ${POST_INSTALL_COMMAND}
+ WORKING_DIRECTORY ${PROG_PATH_SUBDIR}
+ LOGNAME ${VAR}-tool-post-install
+ )
+ endif()
+
do_find()
endif()
diff --git a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
index 982f414b6..c383fcb56 100644
--- a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
+++ b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
@@ -1,20 +1,23 @@
#.rst:
# .. command:: vcpkg_fixup_cmake_targets
#
-# Transform all /debug/share/<port>/*targets-debug.cmake files and move them to /share/<port>.
+# Transforms all /debug/share/<port>/*targets-debug.cmake files and move them to /share/<port>.
# Removes all /debug/share/<port>/*targets.cmake and /debug/share/<port>/*config.cmake
#
-# Transform all references matching /bin/*.exe to /tools/<port>/*.exe
+# Transforms all references matching /bin/*.exe to /tools/<port>/*.exe on Windows
+# Transforms all references matching /bin/* to /tools/<port>/* on other platforms
#
-# Fix ${_IMPORT_PREFIX} in auto generated targets to be one folder deeper.
-# Replace ${CURRENT_INSTALLED_DIR} with ${_IMPORT_PREFIX} in configs/targets.
+# Fixes ${_IMPORT_PREFIX} in auto generated targets to be one folder deeper.
+# Replaces ${CURRENT_INSTALLED_DIR} with ${_IMPORT_PREFIX} in configs/targets.
#
# ::
# vcpkg_fixup_cmake_targets([CONFIG_PATH <config_path>])
#
# ``CONFIG_PATH``
# *.cmake files subdirectory (like "lib/cmake/${PORT}").
-#
+#
+# Example usage:
+# vcpkg_fixup_cmake_targets(CONFIG_PATH "lib/cmake/myPort")
function(vcpkg_fixup_cmake_targets)
cmake_parse_arguments(_vfct "" "CONFIG_PATH;TARGET_PATH" "" ${ARGN})
@@ -27,6 +30,13 @@ function(vcpkg_fixup_cmake_targets)
set(_vfct_TARGET_PATH share/${PORT})
endif()
+
+ if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(EXECUTABLE_SUFFIX "\\.exe")
+ else()
+ set(EXECUTABLE_SUFFIX)
+ endif()
+
set(DEBUG_SHARE ${CURRENT_PACKAGES_DIR}/debug/${_vfct_TARGET_PATH})
set(RELEASE_SHARE ${CURRENT_PACKAGES_DIR}/${_vfct_TARGET_PATH})
@@ -107,7 +117,7 @@ function(vcpkg_fixup_cmake_targets)
foreach(RELEASE_TARGET IN LISTS RELEASE_TARGETS)
file(READ ${RELEASE_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(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \"]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/tools/${PORT}/\\1" _contents "${_contents}")
file(WRITE ${RELEASE_TARGET} "${_contents}")
endforeach()
@@ -120,7 +130,7 @@ function(vcpkg_fixup_cmake_targets)
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(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \";]+${EXECUTABLE_SUFFIX})" "\${_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 ${RELEASE_SHARE}/${DEBUG_TARGET_REL} "${_contents}")
@@ -168,3 +178,5 @@ function(vcpkg_fixup_cmake_targets)
file(WRITE ${CMAKE_FILE} "${_contents}")
endforeach()
endfunction()
+
+
diff --git a/scripts/cmake/vcpkg_from_git.cmake b/scripts/cmake/vcpkg_from_git.cmake
index 2fc66b279..bad5384ca 100644
--- a/scripts/cmake/vcpkg_from_git.cmake
+++ b/scripts/cmake/vcpkg_from_git.cmake
@@ -8,7 +8,6 @@
## OUT_SOURCE_PATH <SOURCE_PATH>
## URL <https://android.googlesource.com/platform/external/fdlibm>
## REF <59f7335e4d...>
-## SHA512 <abcdef123...>
## [PATCHES <patch1.patch> <patch2.patch>...]
## )
## ```
@@ -20,17 +19,10 @@
## This should be set to `SOURCE_PATH` by convention.
##
## ### URL
-## The url of the git repository.
-##
-## ### SHA512
-## The SHA512 hash that should match the archive form of the commit.
-##
-## This is most easily determined by first setting it to `0`, then trying to build the port. The error message will contain the full hash, which can be copied back into the portfile.
+## The url of the git repository. Must start with `https`.
##
## ### REF
-## A stable git commit-ish (ideally a tag or commit) that will not change contents. **This should not be a branch.**
-##
-## For repositories without official releases, this can be set to the full commit id of the current latest master.
+## The git sha of the commit to download.
##
## ### PATCHES
## A list of patches to be applied to the extracted sources.
@@ -38,14 +30,14 @@
## Relative paths are based on the port directory.
##
## ## Notes:
-## `OUT_SOURCE_PATH`, `REF`, `SHA512`, and `URL` must be specified.
+## `OUT_SOURCE_PATH`, `REF`, and `URL` must be specified.
##
## ## Examples:
##
## * [fdlibm](https://github.com/Microsoft/vcpkg/blob/master/ports/fdlibm/portfile.cmake)
function(vcpkg_from_git)
- set(oneValueArgs OUT_SOURCE_PATH URL REF SHA512)
+ set(oneValueArgs OUT_SOURCE_PATH URL REF)
set(multipleValuesArgs PATCHES)
cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
@@ -57,12 +49,15 @@ function(vcpkg_from_git)
message(FATAL_ERROR "The git url must be specified")
endif()
- if(NOT DEFINED _vdud_REF)
- message(FATAL_ERROR "The git ref must be specified.")
+ if( NOT _vdud_URL MATCHES "^https:")
+ # vcpkg_from_git does not support a SHA256 parameter because hashing the git archive is
+ # not stable across all supported platforms. The tradeoff is to require https to download
+ # and the ref to be the git sha (i.e. not things that can change like a label)
+ message(FATAL_ERROR "The git url must be https")
endif()
- if(NOT DEFINED _vdud_SHA512)
- message(FATAL_ERROR "vcpkg_from_git requires a SHA512 argument. If you do not know the SHA512, add it as 'SHA512 0' and re-run this command.")
+ if(NOT DEFINED _vdud_REF)
+ message(FATAL_ERROR "The git ref must be specified.")
endif()
# using .tar.gz instead of .zip because the hash of the latter is affected by timezone.
@@ -71,18 +66,6 @@ function(vcpkg_from_git)
set(ARCHIVE "${DOWNLOADS}/${PORT}-${SANITIZED_REF}.tar.gz")
set(TEMP_SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/src/${SANITIZED_REF}")
- function(test_hash FILE_PATH FILE_KIND CUSTOM_ERROR_ADVICE)
- file(SHA512 ${FILE_PATH} FILE_HASH)
- if(NOT FILE_HASH STREQUAL _vdud_SHA512)
- message(FATAL_ERROR
- "\nFile does not have expected hash:\n"
- " File path: [ ${FILE_PATH} ]\n"
- " Expected hash: [ ${_vdud_SHA512} ]\n"
- " Actual hash: [ ${FILE_HASH} ]\n"
- "${CUSTOM_ERROR_ADVICE}\n")
- endif()
- endfunction()
-
if(NOT EXISTS "${ARCHIVE}")
if(_VCPKG_NO_DOWNLOADS)
message(FATAL_ERROR "Downloads are disabled, but '${ARCHIVE}' does not exist.")
@@ -91,28 +74,45 @@ function(vcpkg_from_git)
find_program(GIT NAMES git git.cmd)
# Note: git init is safe to run multiple times
vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
COMMAND ${GIT} init git-tmp
WORKING_DIRECTORY ${DOWNLOADS}
- LOGNAME git-init
+ LOGNAME git-init-${TARGET_TRIPLET}
)
vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
COMMAND ${GIT} fetch ${_vdud_URL} ${_vdud_REF} --depth 1 -n
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
- LOGNAME git-fetch
+ LOGNAME git-fetch-${TARGET_TRIPLET}
+ )
+ _execute_process(
+ COMMAND ${GIT} rev-parse FETCH_HEAD
+ OUTPUT_VARIABLE REV_PARSE_HEAD
+ ERROR_VARIABLE REV_PARSE_HEAD
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
)
+ if(error_code)
+ message(FATAL_ERROR "unable to determine FETCH_HEAD after fetching git repository")
+ endif()
+ string(REGEX REPLACE "\n$" "" REV_PARSE_HEAD "${REV_PARSE_HEAD}")
+ if(NOT REV_PARSE_HEAD STREQUAL _vdud_REF)
+ message(FATAL_ERROR "REF (${_vdud_REF}) does not match FETCH_HEAD (${REV_PARSE_HEAD})")
+ endif()
+
file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
COMMAND ${GIT} archive FETCH_HEAD -o "${TEMP_ARCHIVE}"
WORKING_DIRECTORY ${DOWNLOADS}/git-tmp
LOGNAME git-archive
)
- test_hash("${TEMP_ARCHIVE}" "downloaded repo" "")
+
get_filename_component(downloaded_file_dir "${ARCHIVE}" DIRECTORY)
file(MAKE_DIRECTORY "${downloaded_file_dir}")
file(RENAME "${TEMP_ARCHIVE}" "${ARCHIVE}")
else()
message(STATUS "Using cached ${ARCHIVE}")
- test_hash("${ARCHIVE}" "cached file" "Please delete the file and retry if this file should be downloaded again.")
endif()
vcpkg_extract_source_archive_ex(
diff --git a/scripts/cmake/vcpkg_from_github.cmake b/scripts/cmake/vcpkg_from_github.cmake
index c0d657bbc..a822ee40e 100644
--- a/scripts/cmake/vcpkg_from_github.cmake
+++ b/scripts/cmake/vcpkg_from_github.cmake
@@ -172,6 +172,7 @@ function(vcpkg_from_github)
endif()
vcpkg_extract_source_archive_ex(
+ SKIP_PATCH_CHECK
OUT_SOURCE_PATH SOURCE_PATH
ARCHIVE "${downloaded_file_path}"
REF "${SANITIZED_HEAD_REF}"
diff --git a/scripts/cmake/vcpkg_from_gitlab.cmake b/scripts/cmake/vcpkg_from_gitlab.cmake
index 6bbe81ed6..05253289e 100644
--- a/scripts/cmake/vcpkg_from_gitlab.cmake
+++ b/scripts/cmake/vcpkg_from_gitlab.cmake
@@ -150,7 +150,7 @@ function(vcpkg_from_gitlab)
endif()
# There are issues with the Gitlab API project paths being URL-escaped, so we use git here to get the head revision
- execute_process(COMMAND ${GIT} ls-remote
+ _execute_process(COMMAND ${GIT} ls-remote
"${_vdud_GITLAB_URL}/${ORG_NAME}/${REPO_NAME}.git" "${_vdud_HEAD_REF}"
RESULT_VARIABLE _git_result
OUTPUT_VARIABLE _git_output
diff --git a/scripts/cmake/vcpkg_install_make.cmake b/scripts/cmake/vcpkg_install_make.cmake
new file mode 100644
index 000000000..1672d7c5a
--- /dev/null
+++ b/scripts/cmake/vcpkg_install_make.cmake
@@ -0,0 +1,25 @@
+## # vcpkg_install_make
+##
+## Build and install a make project.
+##
+## ## Usage:
+## ```cmake
+## vcpkg_install_make(...)
+## ```
+##
+## ## Parameters:
+## See [`vcpkg_build_make()`](vcpkg_build_make.md).
+##
+## ## Notes:
+## This command transparently forwards to [`vcpkg_build_make()`](vcpkg_build_make.md), adding `ENABLE_INSTALL`
+##
+## ## Examples
+##
+## * [x264](https://github.com/Microsoft/vcpkg/blob/master/ports/x264/portfile.cmake)
+## * [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)
+## * [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)
+## * [libosip2](https://github.com/Microsoft/vcpkg/blob/master/ports/libosip2/portfile.cmake)
+
+function(vcpkg_install_make)
+ vcpkg_build_make(LOGFILE_ROOT ENABLE_INSTALL)
+endfunction()
diff --git a/scripts/cmake/vcpkg_install_msbuild.cmake b/scripts/cmake/vcpkg_install_msbuild.cmake
index 92c84bf0b..db2874a9f 100644
--- a/scripts/cmake/vcpkg_install_msbuild.cmake
+++ b/scripts/cmake/vcpkg_install_msbuild.cmake
@@ -113,6 +113,8 @@ function(vcpkg_install_msbuild)
set(_csc_PLATFORM Win32)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL ARM)
set(_csc_PLATFORM ARM)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL arm64)
+ set(_csc_PLATFORM arm64)
else()
message(FATAL_ERROR "Unsupported target architecture")
endif()
@@ -144,7 +146,7 @@ function(vcpkg_install_msbuild)
endif()
if(_csc_USE_VCPKG_INTEGRATION)
- list(APPEND _csc_OPTIONS /p:ForceImportBeforeCppTargets=${VCPKG_ROOT_DIR}/scripts/buildsystems/msbuild/vcpkg.targets /p:VcpkgApplocalDeps=false)
+ list(APPEND _csc_OPTIONS /p:ForceImportBeforeCppTargets=${SCRIPTS}/buildsystems/msbuild/vcpkg.targets /p:VcpkgApplocalDeps=false)
endif()
get_filename_component(SOURCE_PATH_SUFFIX "${_csc_SOURCE_PATH}" NAME)
diff --git a/scripts/cmake/vcpkg_install_nmake.cmake b/scripts/cmake/vcpkg_install_nmake.cmake
new file mode 100644
index 000000000..a8197751c
--- /dev/null
+++ b/scripts/cmake/vcpkg_install_nmake.cmake
@@ -0,0 +1,86 @@
+## # vcpkg_install_nmake
+##
+## Build and install a msvc makefile project.
+##
+## ## Usage:
+## ```cmake
+## vcpkg_install_nmake(
+## SOURCE_PATH <${SOURCE_PATH}>
+## [NO_DEBUG]
+## PROJECT_SUBPATH <${SUBPATH}>
+## PROJECT_NAME <${MAKEFILE_NAME}>
+## [PRERUN_SHELL <${SHELL_PATH}>]
+## [PRERUN_SHELL_DEBUG <${SHELL_PATH}>]
+## [PRERUN_SHELL_RELEASE <${SHELL_PATH}>]
+## [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
+## [OPTIONS_RELEASE <-DOPTIMIZE=1>...]
+## [OPTIONS_DEBUG <-DDEBUGGABLE=1>...]
+## ```
+##
+## ## Parameters
+## ### SOURCE_PATH
+## Specifies the directory containing the source files.
+## By convention, this is usually set in the portfile as the variable `SOURCE_PATH`.
+##
+## ### PROJECT_SUBPATH
+## Specifies the sub directory containing the `makefile.vc`/`makefile.mak`/`makefile.msvc` or other msvc makefile.
+##
+## ### PROJECT_NAME
+## Specifies the name of msvc makefile name.
+## Default is makefile.vc
+##
+## ### NO_DEBUG
+## This port doesn't support debug mode.
+##
+## ### PRERUN_SHELL
+## Script that needs to be called before build
+##
+## ### PRERUN_SHELL_DEBUG
+## Script that needs to be called before debug build
+##
+## ### PRERUN_SHELL_RELEASE
+## Script that needs to be called before release build
+##
+## ### OPTIONS
+## Additional options passed to generate during the generation.
+##
+## ### OPTIONS_RELEASE
+## Additional options passed to generate during the Release generation. These are in addition to `OPTIONS`.
+##
+## ### OPTIONS_DEBUG
+## Additional options passed to generate during the Debug generation. These are in addition to `OPTIONS`.
+##
+## ## Parameters:
+## See [`vcpkg_build_nmake()`](vcpkg_build_nmake.md).
+##
+## ## Notes:
+## This command transparently forwards to [`vcpkg_build_nmake()`](vcpkg_build_nmake.md), adding `ENABLE_INSTALL`
+##
+## ## Examples
+##
+## * [tcl](https://github.com/Microsoft/vcpkg/blob/master/ports/tcl/portfile.cmake)
+## * [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)
+
+function(vcpkg_install_nmake)
+ cmake_parse_arguments(_in
+ "NO_DEBUG"
+ "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;PRERUN_SHELL;PRERUN_SHELL_DEBUG;PRERUN_SHELL_RELEASE"
+ ${ARGN}
+ )
+
+ if (NOT CMAKE_HOST_WIN32)
+ message(FATAL_ERROR "vcpkg_install_nmake only support windows.")
+ endif()
+
+ if (_in_NO_DEBUG)
+ set(NO_DEBUG NO_DEBUG)
+ endif()
+
+ vcpkg_build_nmake(LOGFILE_ROOT ENABLE_INSTALL
+ ${NO_DEBUG}
+ SOURCE_PATH ${_in_SOURCE_PATH} PROJECT_SUBPATH ${_in_PROJECT_SUBPATH} PROJECT_NAME ${_in_PROJECT_NAME}
+ PRERUN_SHELL ${_in_PRERUN_SHELL} PRERUN_SHELL_DEBUG ${_in_PRERUN_SHELL_DEBUG} PRERUN_SHELL_RELEASE ${_in_PRERUN_SHELL_RELEASE}
+ OPTIONS ${_in_OPTIONS} OPTIONS_RELEASE ${_in_OPTIONS_RELEASE} OPTIONS_DEBUG ${_in_OPTIONS_DEBUG}
+ )
+endfunction()
diff --git a/scripts/cmake/vcpkg_prettify_command.cmake b/scripts/cmake/vcpkg_prettify_command.cmake
new file mode 100644
index 000000000..9d9a2b798
--- /dev/null
+++ b/scripts/cmake/vcpkg_prettify_command.cmake
@@ -0,0 +1,26 @@
+## # vcpkg_prettify_command
+##
+## Turns list of command arguments into a formatted string.
+##
+## ## Usage
+## ```cmake
+## vcpkg_prettify_command()
+## ```
+##
+## ## Examples
+##
+## * `scripts/cmake/vcpkg_execute_build_process.cmake`
+## * `scripts/cmake/vcpkg_execute_required_process.cmake`
+## * `scripts/cmake/vcpkg_execute_required_process_repeat.cmake`
+
+macro(vcpkg_prettify_command INPUT_VAR OUTPUT_VAR)
+ set(${OUTPUT_VAR} "")
+ foreach(v ${${INPUT_VAR}})
+ if(${v} MATCHES "( )")
+ list(APPEND ${OUTPUT_VAR} \"${v}\")
+ else()
+ list(APPEND ${OUTPUT_VAR} ${v})
+ endif()
+ endforeach()
+ list(JOIN ${OUTPUT_VAR} " " ${OUTPUT_VAR})
+endmacro()
diff --git a/scripts/cmake/vcpkg_test_cmake.cmake b/scripts/cmake/vcpkg_test_cmake.cmake
index 20343bf64..eeb27867c 100644
--- a/scripts/cmake/vcpkg_test_cmake.cmake
+++ b/scripts/cmake/vcpkg_test_cmake.cmake
@@ -21,59 +21,4 @@ function(vcpkg_test_cmake)
# 2. Select a generator in the same method as vcpkg_configure_cmake() as though the PREFER_NINJA flag was always passed.
# 3. Fully emulate the toolchain file for the just-built package (just adding it to CMAKE_PREFIX_PATH is not enough).
return()
-
- cmake_parse_arguments(_tc "MODULE" "PACKAGE_NAME" "" ${ARGN})
-
- if(NOT DEFINED _tc_PACKAGE_NAME)
- message(FATAL_ERROR "PACKAGE_NAME must be specified")
- endif()
- if(_tc_MODULE)
- set(PACKAGE_TYPE MODULE)
- else()
- set(PACKAGE_TYPE CONFIG)
- endif()
-
- if(VCPKG_PLATFORM_TOOLSET STREQUAL "v142")
- message(STATUS "Skipping CMake integration test due to v142 / CMake interaction issues")
- return()
- endif()
-
- message(STATUS "Performing CMake integration test")
- file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test)
- file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test)
-
- #Generate Dummy source
-# set(VCPKG_TEST_SOURCE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test/CMakeIntegration.cpp)
-# file(WRITE ${VCPKG_TEST_SOURCE} "int main() \{\n")
-# file(APPEND ${VCPKG_TEST_SOURCE} "return 0;}")
- # Generate test source CMakeLists.txt
- set(VCPKG_TEST_CMAKELIST ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test/CMakeLists.txt)
- file(WRITE ${VCPKG_TEST_CMAKELIST} "cmake_minimum_required(VERSION 3.10)\n")
- file(APPEND ${VCPKG_TEST_CMAKELIST} "set(CMAKE_PREFIX_PATH \"${CURRENT_PACKAGES_DIR};${CURRENT_INSTALLED_DIR}\")\n")
- file(APPEND ${VCPKG_TEST_CMAKELIST} "\n")
- file(APPEND ${VCPKG_TEST_CMAKELIST} "find_package(${_tc_PACKAGE_NAME} ${PACKAGE_TYPE} REQUIRED)\n")
- #To properly test if the package is actually working haveway correctly we have to link all targets of a package to
- #a test executable and than actually build it. This will not discover if every symbol exported by the library is available/linked
- #but it will doscover if all files which are linked by a target actual exist. Problem is: How to discover all targets?
-# file(APPEND ${VCPKG_TEST_CMAKELIST} "add_executable(${_tc_PACKAGE_NAME}_exe ${VCPKG_TEST_SOURCE})\n")
-# file(APPEND ${VCPKG_TEST_CMAKELIST} "target_link_libraries(${_tc_PACKAGE_NAME}_exe PRIVATE ${_tc_PACKAGE_NAME})\n")
-
- if(DEFINED _VCPKG_CMAKE_GENERATOR)
- set(VCPKG_CMAKE_TEST_GENERATOR "${_VCPKG_CMAKE_GENERATOR}")
- else()
- set(VCPKG_CMAKE_TEST_GENERATOR Ninja)
- endif()
-
- # Run cmake config with a generated CMakeLists.txt
- set(LOGPREFIX "${CURRENT_BUILDTREES_DIR}/test-cmake-${TARGET_TRIPLET}")
- execute_process(
- COMMAND ${CMAKE_COMMAND} -G ${VCPKG_CMAKE_TEST_GENERATOR} .
- OUTPUT_FILE "${LOGPREFIX}-out.log"
- ERROR_FILE "${LOGPREFIX}-err.log"
- RESULT_VARIABLE error_code
- WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-test
- )
- if(error_code)
- message(FATAL_ERROR "CMake integration test failed; unable to find_package(${_tc_PACKAGE_NAME} ${PACKAGE_TYPE} REQUIRED)")
- endif()
endfunction()
diff --git a/scripts/get_triplet_environment.cmake b/scripts/get_triplet_environment.cmake
index bc79b16ce..3b0b9fbef 100644
--- a/scripts/get_triplet_environment.cmake
+++ b/scripts/get_triplet_environment.cmake
@@ -1,4 +1,7 @@
include(${CMAKE_TRIPLET_FILE})
+if (DEFINED VCPKG_ENV_OVERRIDES_FILE)
+ include(${VCPKG_ENV_OVERRIDES_FILE})
+endif()
# GUID used as a flag - "cut here line"
message("c35112b6-d1ba-415b-aa5d-81de856ef8eb")
@@ -9,3 +12,5 @@ message("VCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}")
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}")
+message("VCPKG_ENV_PASSTHROUGH=${VCPKG_ENV_PASSTHROUGH}")
+message("VCPKG_PUBLIC_ABI_OVERRIDE=${VCPKG_PUBLIC_ABI_OVERRIDE}")
diff --git a/scripts/ports.cmake b/scripts/ports.cmake
index 7a5f2749f..cdc0bdd99 100644
--- a/scripts/ports.cmake
+++ b/scripts/ports.cmake
@@ -6,22 +6,32 @@ macro(debug_message)
endif()
endmacro()
-#Detect .vcpkg-root to figure VCPKG_ROOT_DIR
-SET(VCPKG_ROOT_DIR_CANDIDATE ${CMAKE_CURRENT_LIST_DIR})
-while(IS_DIRECTORY ${VCPKG_ROOT_DIR_CANDIDATE} AND NOT EXISTS "${VCPKG_ROOT_DIR_CANDIDATE}/.vcpkg-root")
- get_filename_component(VCPKG_ROOT_DIR_TEMP ${VCPKG_ROOT_DIR_CANDIDATE} DIRECTORY)
- if (VCPKG_ROOT_DIR_TEMP STREQUAL VCPKG_ROOT_DIR_CANDIDATE) # If unchanged, we have reached the root of the drive
- message(FATAL_ERROR "Could not find .vcpkg-root")
- else()
- SET(VCPKG_ROOT_DIR_CANDIDATE ${VCPKG_ROOT_DIR_TEMP})
- endif()
-endwhile()
+#Detect .vcpkg-root to figure VCPKG_ROOT_DIR, starting from triplet folder.
+set(VCPKG_ROOT_DIR_CANDIDATE ${CMAKE_CURRENT_LIST_DIR})
+
+if(DEFINED VCPKG_ROOT_PATH)
+ set(VCPKG_ROOT_DIR_CANDIDATE ${VCPKG_ROOT_PATH})
+else()
+ message(FATAL_ERROR [[
+ Your vcpkg executable is outdated and is not compatible with the current CMake scripts.
+ Please re-build vcpkg by running bootstrap-vcpkg.
+ ]])
+endif()
+
+# fixup Windows drive letter to uppercase.
+get_filename_component(VCPKG_ROOT_DIR_CANDIDATE ${VCPKG_ROOT_DIR_CANDIDATE} ABSOLUTE)
+
+# Validate VCPKG_ROOT_DIR_CANDIDATE
+if (NOT EXISTS "${VCPKG_ROOT_DIR_CANDIDATE}/.vcpkg-root")
+ message(FATAL_ERROR "Could not find .vcpkg-root")
+endif()
set(VCPKG_ROOT_DIR ${VCPKG_ROOT_DIR_CANDIDATE})
-list(APPEND CMAKE_MODULE_PATH ${VCPKG_ROOT_DIR}/scripts/cmake)
+list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
set(CURRENT_INSTALLED_DIR ${VCPKG_ROOT_DIR}/installed/${TARGET_TRIPLET} CACHE PATH "Location to install final packages")
set(DOWNLOADS ${VCPKG_ROOT_DIR}/downloads CACHE PATH "Location to download sources and tools")
+set(SCRIPTS ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Location to stored scripts")
set(PACKAGES_DIR ${VCPKG_ROOT_DIR}/packages CACHE PATH "Location to store package images")
set(BUILDTREES_DIR ${VCPKG_ROOT_DIR}/buildtrees CACHE PATH "Location to perform actual extract+config+build")
@@ -32,7 +42,7 @@ endif()
if(CMD MATCHES "^BUILD$")
- set(CMAKE_TRIPLET_FILE ${VCPKG_ROOT_DIR}/triplets/${TARGET_TRIPLET}.cmake)
+ set(CMAKE_TRIPLET_FILE ${TARGET_TRIPLET_FILE})
if(NOT EXISTS ${CMAKE_TRIPLET_FILE})
message(FATAL_ERROR "Unsupported target triplet. Triplet file does not exist: ${CMAKE_TRIPLET_FILE}")
endif()
@@ -67,7 +77,20 @@ if(CMD MATCHES "^BUILD$")
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR} ${CURRENT_PACKAGES_DIR})
include(${CMAKE_TRIPLET_FILE})
+
+ if (DEFINED VCPKG_ENV_OVERRIDES_FILE)
+ include(${VCPKG_ENV_OVERRIDES_FILE})
+ endif()
+
+ if (DEFINED VCPKG_PORT_TOOLCHAINS)
+ foreach(VCPKG_PORT_TOOLCHAIN ${VCPKG_PORT_TOOLCHAINS})
+ include(${VCPKG_PORT_TOOLCHAIN})
+ endforeach()
+ endif()
+
set(TRIPLET_SYSTEM_ARCH ${VCPKG_TARGET_ARCHITECTURE})
+ include(${SCRIPTS}/cmake/vcpkg_common_definitions.cmake)
+ include(${SCRIPTS}/cmake/vcpkg_common_functions.cmake)
include(${CURRENT_PORT_DIR}/portfile.cmake)
set(BUILD_INFO_FILE_PATH ${CURRENT_PACKAGES_DIR}/BUILD_INFO)
@@ -117,8 +140,8 @@ elseif(CMD MATCHES "^CREATE$")
file(SHA512 ${DOWNLOADS}/${FILENAME} SHA512)
file(MAKE_DIRECTORY ports/${PORT})
- configure_file(scripts/templates/portfile.in.cmake ports/${PORT}/portfile.cmake @ONLY)
- configure_file(scripts/templates/CONTROL.in ports/${PORT}/CONTROL @ONLY)
+ configure_file(${SCRIPTS}/templates/portfile.in.cmake ports/${PORT}/portfile.cmake @ONLY)
+ configure_file(${SCRIPTS}/templates/CONTROL.in ports/${PORT}/CONTROL @ONLY)
message(STATUS "Generated portfile: ${NATIVE_VCPKG_ROOT_DIR}\\ports\\${PORT}\\portfile.cmake")
message(STATUS "Generated CONTROL: ${NATIVE_VCPKG_ROOT_DIR}\\ports\\${PORT}\\CONTROL")
diff --git a/scripts/templates/CONTROL.in b/scripts/templates/CONTROL.in
index c5b706861..77f287e0a 100644
--- a/scripts/templates/CONTROL.in
+++ b/scripts/templates/CONTROL.in
@@ -1,3 +1,10 @@
Source: @PORT@
Version:
-Description: \ No newline at end of file
+Homepage:
+Description:
+Build-Depends:
+Default-Features:
+
+Feature:
+Description:
+Build-Depends: \ No newline at end of file
diff --git a/scripts/templates/portfile.in.cmake b/scripts/templates/portfile.in.cmake
index 33f8a4853..62c53a6db 100644
--- a/scripts/templates/portfile.in.cmake
+++ b/scripts/templates/portfile.in.cmake
@@ -2,15 +2,34 @@
# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT}
# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET}
# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT}
+# CURRENT_INSTALLED_DIR = ${VCPKG_ROOT_DIR}\installed\${TRIPLET}
+# DOWNLOADS = ${VCPKG_ROOT_DIR}\downloads
# PORT = current port name (zlib, etc)
# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc)
# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic)
# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic)
# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg>
# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm)
+# VCPKG_TOOLCHAIN = ON OFF
+# TRIPLET_SYSTEM_ARCH = arm x86 x64
+# BUILD_ARCH = "Win32" "x64" "ARM"
+# MSBUILD_PLATFORM = "Win32"/"x64"/${TRIPLET_SYSTEM_ARCH}
+# DEBUG_CONFIG = "Debug Static" "Debug Dll"
+# RELEASE_CONFIG = "Release Static"" "Release DLL"
+# VCPKG_TARGET_IS_WINDOWS
+# VCPKG_TARGET_IS_UWP
+# VCPKG_TARGET_IS_LINUX
+# VCPKG_TARGET_IS_OSX
+# VCPKG_TARGET_IS_FREEBSD
+# VCPKG_TARGET_IS_ANDROID
+# VCPKG_TARGET_EXECUTABLE_SUFFIX
+# VCPKG_TARGET_STATIC_LIBRARY_SUFFIX
+# VCPKG_TARGET_SHARED_LIBRARY_SUFFIX
#
+# See additional helpful variables in /docs/maintainers/vcpkg_common_definitions.md
-include(vcpkg_common_functions)
+# # Specifies if the port install should fail immediately given a condition
+# vcpkg_fail_port_install(MESSAGE "@PORT@ currently only supports Linux and Mac platforms" ON_TARGET "Windows")
vcpkg_download_distfile(ARCHIVE
URLS "@URL@"
@@ -30,6 +49,15 @@ vcpkg_extract_source_archive_ex(
# 002_more_port_fixes.patch
)
+# # Check if one or more features are a part of a package installation.
+# # See /docs/maintainers/vcpkg_check_features.md for more details
+# vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
+# FEATURES # <- Keyword FEATURES is required because INVERTED_FEATURES are being used
+# tbb WITH_TBB
+# INVERTED_FEATURES
+# tbb ROCKSDB_IGNORE_PACKAGE_TBB
+# )
+
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA # Disable this option if project cannot be built with Ninja
@@ -40,8 +68,12 @@ vcpkg_configure_cmake(
vcpkg_install_cmake()
-# Handle copyright
+# # Moves all .cmake files from /debug/share/@PORT@/ to /share/@PORT@/
+# # See /docs/maintainers/vcpkg_fixup_cmake_targets.md for more details
+# vcpkg_fixup_cmake_targets(CONFIG_PATH cmake TARGET_PATH share/@PORT@)
+
+# # Handle copyright
# file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/@PORT@ RENAME copyright)
-# Post-build test for cmake libraries
+# # Post-build test for cmake libraries
# vcpkg_test_cmake(PACKAGE_NAME @PORT@)
diff --git a/scripts/toolchains/windows.cmake b/scripts/toolchains/windows.cmake
index 12b1ae7f9..d5d7f8db5 100644
--- a/scripts/toolchains/windows.cmake
+++ b/scripts/toolchains/windows.cmake
@@ -9,7 +9,8 @@ if(NOT _CMAKE_IN_TRY_COMPILE)
message(FATAL_ERROR "Invalid setting for VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\". It must be \"static\" or \"dynamic\"")
endif()
- if(VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ set(CHARSET_FLAG "/utf-8")
+ if (NOT VCPKG_SET_CHARSET_FLAG OR VCPKG_PLATFORM_TOOLSET MATCHES "v120")
# VS 2013 does not support /utf-8
set(CHARSET_FLAG)
endif()
@@ -17,7 +18,7 @@ if(NOT _CMAKE_IN_TRY_COMPILE)
set(CMAKE_CXX_FLAGS " /DWIN32 /D_WINDOWS /W3 ${CHARSET_FLAG} /GR /EHsc /MP ${VCPKG_CXX_FLAGS}" CACHE STRING "")
set(CMAKE_C_FLAGS " /DWIN32 /D_WINDOWS /W3 ${CHARSET_FLAG} /MP ${VCPKG_C_FLAGS}" CACHE STRING "")
set(CMAKE_RC_FLAGS "-c65001 /DWIN32" CACHE STRING "")
-
+
unset(CHARSET_FLAG)
set(CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG ${VCPKG_CRT_LINK_FLAG_PREFIX}d /Z7 /Ob0 /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "")
@@ -27,5 +28,4 @@ if(NOT _CMAKE_IN_TRY_COMPILE)
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS}" CACHE STRING "")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS}" CACHE STRING "")
-
endif()
diff --git a/scripts/vcpkgTools.xml b/scripts/vcpkgTools.xml
index c7d5c218a..8f90ce8dc 100644
--- a/scripts/vcpkgTools.xml
+++ b/scripts/vcpkgTools.xml
@@ -114,4 +114,11 @@
<sha512>56a55ae9a6b5dfad4f28f9fe9b8114f1475c999d2f07fff7efa7375f987e74b498e9b63c41fc6c577756f15f3a1459c6d5d367902de3bedebdf9a9fd49089a86</sha512>
<archiveName>ninja-freebsd-1.8.2.zip</archiveName>
</tool>
+ <tool name="powershell-core" os="windows">
+ <version>6.2.1</version>
+ <exeRelativePath>pwsh.exe</exeRelativePath>
+ <url>https://github.com/PowerShell/PowerShell/releases/download/v6.2.1/PowerShell-6.2.1-win-x86.zip</url>
+ <sha512>ab1effc926b000a6adc12198a1886514ec203621a53b0cd7ec1cd9a8225dccda7e857feaabcfba4004bea73129b986abaad777c4573f44e0af70411226ce08b0</sha512>
+ <archiveName>PowerShell-6.2.1-win-x86.zip</archiveName>
+ </tool>
</tools>