aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorJoachim Gehweiler <44170764+jgehw@users.noreply.github.com>2020-10-27 03:30:27 +0100
committerGitHub <noreply@github.com>2020-10-26 19:30:27 -0700
commit0ff75ac80b9a3770afb3d2971c572628d80a631e (patch)
tree0d47d24d70e283449e8b16eef790c727d8a8deb5 /scripts
parent839f53338202245c8756747011c40ed4926d20f4 (diff)
downloadvcpkg-0ff75ac80b9a3770afb3d2971c572628d80a631e.tar.gz
vcpkg-0ff75ac80b9a3770afb3d2971c572628d80a631e.zip
[vcpkg] Fix more cases of semicolon mishandling in "scripts" - follow-up to PR #12926 (#13968)
Diffstat (limited to 'scripts')
-rw-r--r--scripts/cmake/vcpkg_acquire_msys.cmake3
-rw-r--r--scripts/cmake/vcpkg_apply_patches.cmake3
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake3
-rw-r--r--scripts/cmake/vcpkg_build_make.cmake3
-rw-r--r--scripts/cmake/vcpkg_build_msbuild.cmake3
-rw-r--r--scripts/cmake/vcpkg_build_ninja.cmake3
-rw-r--r--scripts/cmake/vcpkg_build_nmake.cmake6
-rw-r--r--scripts/cmake/vcpkg_build_qmake.cmake3
-rw-r--r--scripts/cmake/vcpkg_check_features.cmake3
-rw-r--r--scripts/cmake/vcpkg_clean_executables_in_bin.cmake3
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake4
-rw-r--r--scripts/cmake/vcpkg_configure_gn.cmake5
-rw-r--r--scripts/cmake/vcpkg_configure_make.cmake1182
-rw-r--r--scripts/cmake/vcpkg_configure_meson.cmake3
-rw-r--r--scripts/cmake/vcpkg_configure_qmake.cmake3
-rw-r--r--scripts/cmake/vcpkg_copy_pdbs.cmake3
-rw-r--r--scripts/cmake/vcpkg_copy_tools.cmake3
-rw-r--r--scripts/cmake/vcpkg_download_distfile.cmake1
-rw-r--r--scripts/cmake/vcpkg_execute_build_process.cmake3
-rw-r--r--scripts/cmake/vcpkg_execute_required_process.cmake35
-rw-r--r--scripts/cmake/vcpkg_execute_required_process_repeat.cmake12
-rw-r--r--scripts/cmake/vcpkg_extract_source_archive_ex.cmake3
-rw-r--r--scripts/cmake/vcpkg_fail_port_install.cmake1
-rw-r--r--scripts/cmake/vcpkg_fixup_cmake_targets.cmake3
-rw-r--r--scripts/cmake/vcpkg_fixup_pkgconfig.cmake3
-rw-r--r--scripts/cmake/vcpkg_from_bitbucket.cmake3
-rw-r--r--scripts/cmake/vcpkg_from_git.cmake3
-rw-r--r--scripts/cmake/vcpkg_from_github.cmake3
-rw-r--r--scripts/cmake/vcpkg_from_gitlab.cmake3
-rw-r--r--scripts/cmake/vcpkg_from_sourceforge.cmake3
-rw-r--r--scripts/cmake/vcpkg_install_gn.cmake3
-rw-r--r--scripts/cmake/vcpkg_install_msbuild.cmake3
-rw-r--r--scripts/cmake/vcpkg_install_nmake.cmake4
33 files changed, 692 insertions, 630 deletions
diff --git a/scripts/cmake/vcpkg_acquire_msys.cmake b/scripts/cmake/vcpkg_acquire_msys.cmake
index 6c56d205b..f0a8b7e0e 100644
--- a/scripts/cmake/vcpkg_acquire_msys.cmake
+++ b/scripts/cmake/vcpkg_acquire_msys.cmake
@@ -55,7 +55,8 @@
## * [libvpx](https://github.com/Microsoft/vcpkg/blob/master/ports/libvpx/portfile.cmake)
function(vcpkg_acquire_msys PATH_TO_ROOT_OUT)
- cmake_parse_arguments(_am "NO_DEFAULT_PACKAGES" "" "PACKAGES;DIRECT_PACKAGES" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _am "NO_DEFAULT_PACKAGES" "" "PACKAGES;DIRECT_PACKAGES")
set(TOTAL_HASH 0)
set(ARCHIVES)
diff --git a/scripts/cmake/vcpkg_apply_patches.cmake b/scripts/cmake/vcpkg_apply_patches.cmake
index 8ad54697b..0ca33bc0d 100644
--- a/scripts/cmake/vcpkg_apply_patches.cmake
+++ b/scripts/cmake/vcpkg_apply_patches.cmake
@@ -33,7 +33,8 @@
include(vcpkg_execute_in_download_mode)
function(vcpkg_apply_patches)
- cmake_parse_arguments(_ap "QUIET" "SOURCE_PATH" "PATCHES" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _ap "QUIET" "SOURCE_PATH" "PATCHES")
find_program(GIT NAMES git git.cmd)
set(PATCHNUM 0)
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index f5867a1b5..a429ebf4b 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -30,7 +30,8 @@
## * [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_build_cmake)
- cmake_parse_arguments(_bc "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "TARGET;LOGFILE_ROOT" "" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _bc "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "TARGET;LOGFILE_ROOT" "")
if(NOT _bc_LOGFILE_ROOT)
set(_bc_LOGFILE_ROOT "build")
diff --git a/scripts/cmake/vcpkg_build_make.cmake b/scripts/cmake/vcpkg_build_make.cmake
index 7a3c21117..a77701ae7 100644
--- a/scripts/cmake/vcpkg_build_make.cmake
+++ b/scripts/cmake/vcpkg_build_make.cmake
@@ -39,7 +39,8 @@
## * [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;DISABLE_PARALLEL" "LOGFILE_ROOT;BUILD_TARGET" "" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _bc "ADD_BIN_TO_PATH;ENABLE_INSTALL;DISABLE_PARALLEL" "LOGFILE_ROOT;BUILD_TARGET" "")
if(NOT _bc_LOGFILE_ROOT)
set(_bc_LOGFILE_ROOT "build")
diff --git a/scripts/cmake/vcpkg_build_msbuild.cmake b/scripts/cmake/vcpkg_build_msbuild.cmake
index bc118b4c0..19b136cd2 100644
--- a/scripts/cmake/vcpkg_build_msbuild.cmake
+++ b/scripts/cmake/vcpkg_build_msbuild.cmake
@@ -62,12 +62,13 @@
## * [cppunit](https://github.com/Microsoft/vcpkg/blob/master/ports/cppunit/portfile.cmake)
function(vcpkg_build_msbuild)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
cmake_parse_arguments(
+ PARSE_ARGV 0
_csc
"USE_VCPKG_INTEGRATION"
"PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET"
"OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG"
- ${ARGN}
)
if(NOT DEFINED _csc_RELEASE_CONFIGURATION)
diff --git a/scripts/cmake/vcpkg_build_ninja.cmake b/scripts/cmake/vcpkg_build_ninja.cmake
index 3eb05c98b..d49cc5c1f 100644
--- a/scripts/cmake/vcpkg_build_ninja.cmake
+++ b/scripts/cmake/vcpkg_build_ninja.cmake
@@ -14,7 +14,8 @@
## Only build the specified targets.
function(vcpkg_build_ninja)
- cmake_parse_arguments(_vbn "" "" "TARGETS" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vbn "" "" "TARGETS")
vcpkg_find_acquire_program(NINJA)
diff --git a/scripts/cmake/vcpkg_build_nmake.cmake b/scripts/cmake/vcpkg_build_nmake.cmake
index 8cf074739..371dea0ee 100644
--- a/scripts/cmake/vcpkg_build_nmake.cmake
+++ b/scripts/cmake/vcpkg_build_nmake.cmake
@@ -71,11 +71,11 @@
## * [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
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _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)
@@ -188,7 +188,7 @@ function(vcpkg_build_nmake)
if (BUILDTYPE STREQUAL "debug" AND _bn_PRERUN_SHELL_DEBUG)
message(STATUS "Prerunning ${CURRENT_TRIPLET_NAME}")
vcpkg_execute_required_process(
- COMMAND "${_bn_PRERUN_SHELL_DEBUG}"
+ COMMAND ${_bn_PRERUN_SHELL_DEBUG}
WORKING_DIRECTORY ${OBJ_DIR}${_bn_PROJECT_SUBPATH}
LOGNAME "prerun-${CURRENT_TRIPLET_NAME}-dbg"
)
diff --git a/scripts/cmake/vcpkg_build_qmake.cmake b/scripts/cmake/vcpkg_build_qmake.cmake
index deecf4f06..d4c435a0d 100644
--- a/scripts/cmake/vcpkg_build_qmake.cmake
+++ b/scripts/cmake/vcpkg_build_qmake.cmake
@@ -7,7 +7,8 @@
# vcpkg_build_qmake()
#
function(vcpkg_build_qmake)
- cmake_parse_arguments(_csc "SKIP_MAKEFILES" "BUILD_LOGNAME" "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _csc "SKIP_MAKEFILES" "BUILD_LOGNAME" "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS")
if(CMAKE_HOST_WIN32)
vcpkg_find_acquire_program(JOM)
diff --git a/scripts/cmake/vcpkg_check_features.cmake b/scripts/cmake/vcpkg_check_features.cmake
index 81ebc234d..404a1b61d 100644
--- a/scripts/cmake/vcpkg_check_features.cmake
+++ b/scripts/cmake/vcpkg_check_features.cmake
@@ -144,7 +144,8 @@
## * [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})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vcf "" "OUT_FEATURE_OPTIONS" "FEATURES;INVERTED_FEATURES")
if (NOT DEFINED _vcf_OUT_FEATURE_OPTIONS)
message(FATAL_ERROR "OUT_FEATURE_OPTIONS must be specified.")
diff --git a/scripts/cmake/vcpkg_clean_executables_in_bin.cmake b/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
index 5321e05b6..da8594daf 100644
--- a/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
+++ b/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
@@ -19,7 +19,8 @@
## ## Examples
## * [czmq](https://github.com/microsoft/vcpkg/blob/master/ports/czmq/portfile.cmake)
function(vcpkg_clean_executables_in_bin)
- cmake_parse_arguments(_vct "" "" "FILE_NAMES" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vct "" "" "FILE_NAMES")
if(NOT DEFINED _vct_FILE_NAMES)
message(FATAL_ERROR "FILE_NAMES must be specified.")
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index 1a8915942..f41747f8a 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -266,12 +266,12 @@ function(vcpkg_configure_cmake)
endforeach()
set(rel_command
- ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} "${_csc_OPTIONS}" "${_csc_OPTIONS_RELEASE}"
+ ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_RELEASE}
-G ${GENERATOR}
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR})
set(dbg_command
- ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} "${_csc_OPTIONS}" "${_csc_OPTIONS_DEBUG}"
+ ${CMAKE_COMMAND} ${_csc_SOURCE_PATH} ${_csc_OPTIONS} ${_csc_OPTIONS_DEBUG}
-G ${GENERATOR}
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug)
diff --git a/scripts/cmake/vcpkg_configure_gn.cmake b/scripts/cmake/vcpkg_configure_gn.cmake
index 3ae14b8be..5d083aed8 100644
--- a/scripts/cmake/vcpkg_configure_gn.cmake
+++ b/scripts/cmake/vcpkg_configure_gn.cmake
@@ -27,7 +27,8 @@
## Options to be passed to the release target.
function(vcpkg_configure_gn)
- cmake_parse_arguments(_vcg "" "SOURCE_PATH;OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" "" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vcg "" "SOURCE_PATH;OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" "")
if(NOT DEFINED _vcg_SOURCE_PATH)
message(FATAL_ERROR "SOURCE_PATH must be specified.")
@@ -42,7 +43,7 @@ function(vcpkg_configure_gn)
function(generate CONFIG ARGS)
message(STATUS "Generating build (${CONFIG})...")
vcpkg_execute_required_process(
- COMMAND "${GN}" gen "${CURRENT_BUILDTREES_DIR}/${CONFIG}" "${ARGS}"
+ COMMAND "${GN}" gen "${CURRENT_BUILDTREES_DIR}/${CONFIG}" ${ARGS}
WORKING_DIRECTORY "${SOURCE_PATH}"
LOGNAME generate-${CONFIG}
)
diff --git a/scripts/cmake/vcpkg_configure_make.cmake b/scripts/cmake/vcpkg_configure_make.cmake
index 4882a295d..bf1f93b9d 100644
--- a/scripts/cmake/vcpkg_configure_make.cmake
+++ b/scripts/cmake/vcpkg_configure_make.cmake
@@ -1,591 +1,591 @@
-## # vcpkg_configure_make
-##
-## Configure configure for Debug and Release builds of a project.
-##
-## ## Usage
-## ```cmake
-## vcpkg_configure_make(
-## SOURCE_PATH <${SOURCE_PATH}>
-## [AUTOCONFIG]
-## [USE_WRAPPERS]
-## [BUILD_TRIPLET "--host=x64 --build=i686-unknown-pc"]
-## [NO_ADDITIONAL_PATHS]
-## [CONFIG_DEPENDENT_ENVIRONMENT <SOME_VAR>...]
-## [CONFIGURE_ENVIRONMENT_VARIABLES <SOME_ENVVAR>...]
-## [ADD_BIN_TO_PATH]
-## [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`.
-##
-## ### SKIP_CONFIGURE
-## Skip configure process
-##
-## ### USE_WRAPPERS
-## Use autotools ar-lib and compile wrappers (only applies to windows cl and lib)
-##
-## ### BUILD_TRIPLET
-## Used to pass custom --build/--target/--host to configure. Can be globally overwritten by VCPKG_MAKE_BUILD_TRIPLET
-##
-## ### DETERMINE_BUILD_TRIPLET
-## For ports having a configure script following the autotools rules for selecting the triplet
-##
-## ### NO_ADDITIONAL_PATHS
-## Don't pass any additional paths except for --prefix to the configure call
-##
-## ### AUTOCONFIG
-## Need to use autoconfig to generate configure file.
-##
-## ### PRERUN_SHELL
-## Script that needs to be called before configuration (do not use for batch files which simply call autoconf or configure)
-##
-## ### ADD_BIN_TO_PATH
-## Adds the appropriate Release and Debug `bin\` directories to the path during configure such that executables can run against the in-tree DLLs.
-##
-## ## DISABLE_VERBOSE_FLAGS
-## do not pass '--disable-silent-rules --verbose' to configure
-##
-## ### 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`.
-##
-## ### CONFIG_DEPENDENT_ENVIRONMENT
-## List of additional configuration dependent environment variables to set.
-## Pass SOMEVAR to set the environment and have SOMEVAR_(DEBUG|RELEASE) set in the portfile to the appropriate values
-## General environment variables can be set from within the portfile itself.
-##
-## ### CONFIGURE_ENVIRONMENT_VARIABLES
-## List of additional environment variables to pass via the configure call.
-##
-## ## 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)
-macro(_vcpkg_determine_host_mingw out_var)
- if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
- set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432})
- else()
- set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE})
- endif()
- if(HOST_ARCH MATCHES "(amd|AMD)64")
- set(${out_var} mingw64)
- elseif(HOST_ARCH MATCHES "(x|X)86")
- set(${out_var} mingw32)
- else()
- message(FATAL_ERROR "Unsupported mingw architecture ${HOST_ARCH} in _vcpkg_determine_autotools_host_cpu!" )
- endif()
- unset(HOST_ARCH)
-endmacro()
-
-macro(_vcpkg_determine_autotools_host_cpu out_var)
- if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
- set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432})
- else()
- set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE})
- endif()
- if(HOST_ARCH MATCHES "(amd|AMD)64")
- set(${out_var} x86_64)
- elseif(HOST_ARCH MATCHES "(x|X)86")
- set(${out_var} i686)
- elseif(HOST_ARCH MATCHES "^(ARM|arm)64$")
- set(${out_var} aarch64)
- elseif(HOST_ARCH MATCHES "^(ARM|arm)$")
- set(${out_var} arm)
- else()
- message(FATAL_ERROR "Unsupported host architecture ${HOST_ARCH} in _vcpkg_determine_autotools_host_cpu!" )
- endif()
- unset(HOST_ARCH)
-endmacro()
-
-macro(_vcpkg_determine_autotools_target_cpu out_var)
- if(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)64")
- set(${out_var} x86_64)
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86")
- set(${out_var} i686)
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)64$")
- set(${out_var} aarch64)
- elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)$")
- set(${out_var} arm)
- else()
- message(FATAL_ERROR "Unsupported VCPKG_TARGET_ARCHITECTURE architecture ${VCPKG_TARGET_ARCHITECTURE} in _vcpkg_determine_autotools_target_cpu!" )
- endif()
-endmacro()
-
-macro(_vcpkg_backup_env_variable envvar)
- if(DEFINED ENV{${envvar}})
- set(${envvar}_BACKUP "$ENV{${envvar}}")
- set(${envvar}_PATHLIKE_CONCAT "${VCPKG_HOST_PATH_SEPARATOR}$ENV{${envvar}}")
- else()
- set(${envvar}_BACKUP)
- set(${envvar}_PATHLIKE_CONCAT)
- endif()
-endmacro()
-
-macro(_vcpkg_backup_env_variables)
- foreach(_var ${ARGV})
- _vcpkg_backup_env_variable(${_var})
- endforeach()
-endmacro()
-
-macro(_vcpkg_restore_env_variable envvar)
- if(${envvar}_BACKUP)
- set(ENV{${envvar}} "${${envvar}_BACKUP}")
- else()
- unset(ENV{${envvar}})
- endif()
-endmacro()
-
-macro(_vcpkg_restore_env_variables)
- foreach(_var ${ARGV})
- _vcpkg_restore_env_variable(${_var})
- endforeach()
-endmacro()
-
-function(vcpkg_configure_make)
- cmake_parse_arguments(_csc
- "AUTOCONFIG;SKIP_CONFIGURE;COPY_SOURCE;DISABLE_VERBOSE_FLAGS;NO_ADDITIONAL_PATHS;ADD_BIN_TO_PATH;USE_WRAPPERS;DETERMINE_BUILD_TRIPLET"
- "SOURCE_PATH;PROJECT_SUBPATH;PRERUN_SHELL;BUILD_TRIPLET"
- "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;CONFIGURE_ENVIRONMENT_VARIABLES;CONFIG_DEPENDENT_ENVIRONMENT"
- ${ARGN}
- )
- if(DEFINED VCPKG_MAKE_BUILD_TRIPLET)
- set(_csc_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling
- endif()
-
- set(SRC_DIR "${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}")
-
- set(REQUIRES_AUTOGEN FALSE) # use autogen.sh
- set(REQUIRES_AUTOCONFIG FALSE) # use autotools and configure.ac
- if(EXISTS "${SRC_DIR}/configure" AND "${SRC_DIR}/configure.ac") # remove configure; rerun autoconf
- if(NOT VCPKG_MAINTAINER_SKIP_AUTOCONFIG) # If fixing bugs skipping autoconfig saves a lot of time
- set(REQUIRES_AUTOCONFIG TRUE)
- file(REMOVE "${SRC_DIR}/configure") # remove possible autodated configure scripts
- set(_csc_AUTOCONFIG ON)
- endif()
- elseif(EXISTS "${SRC_DIR}/configure" AND NOT _csc_SKIP_CONFIGURE) # run normally; no autoconf or autgen required
- elseif(EXISTS "${SRC_DIR}/configure.ac") # Run autoconfig
- set(REQUIRES_AUTOCONFIG TRUE)
- set(_csc_AUTOCONFIG ON)
- elseif(EXISTS "${SRC_DIR}/autogen.sh") # Run autogen
- set(REQUIRES_AUTOGEN TRUE)
- else()
- message(FATAL_ERROR "Could not determine method to configure make")
- endif()
-
- debug_message("REQUIRES_AUTOGEN:${REQUIRES_AUTOGEN}")
- debug_message("REQUIRES_AUTOCONFIG:${REQUIRES_AUTOCONFIG}")
- # Backup environment variables
- # CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJCXX R UPC Y
- set(FLAGPREFIXES CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJXX R UPC Y)
- foreach(_prefix IN LISTS FLAGPREFIXES)
- _vcpkg_backup_env_variable(${prefix}FLAGS)
- endforeach()
-
- # FC fotran compiler | FF Fortran 77 compiler
- # LDFLAGS -> pass -L flags
- # LIBS -> pass -l flags
-
- #Used by gcc/linux
- _vcpkg_backup_env_variables(C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH LD_LIBRARY_PATH)
-
- #Used by cl
- _vcpkg_backup_env_variables(INCLUDE LIB LIBPATH)
-
- if(CURRENT_PACKAGES_DIR MATCHES " " OR CURRENT_INSTALLED_DIR MATCHES " ")
- # Don't bother with whitespace. The tools will probably fail and I tried very hard trying to make it work (no success so far)!
- message(WARNING "Detected whitespace in root directory. Please move the path to one without whitespaces! The required tools do not handle whitespaces correctly and the build will most likely fail")
- endif()
-
- # Pre-processing windows configure requirements
- if (CMAKE_HOST_WIN32)
- list(APPEND MSYS_REQUIRE_PACKAGES binutils libtool autoconf automake-wrapper automake1.16 m4)
- vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${MSYS_REQUIRE_PACKAGES})
-
- if (_csc_AUTOCONFIG AND NOT _csc_BUILD_TRIPLET OR _csc_DETERMINE_BUILD_TRIPLET)
- _vcpkg_determine_autotools_host_cpu(BUILD_ARCH) # VCPKG_HOST => machine you are building on => --build=
- _vcpkg_determine_autotools_target_cpu(TARGET_ARCH)
- # --build: the machine you are building on
- # --host: the machine you are building for
- # --target: the machine that CC will produce binaries for
- # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler
- # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host
- set(_csc_BUILD_TRIPLET "--build=${BUILD_ARCH}-pc-mingw32") # This is required since we are running in a msys
- # shell which will be otherwise identified as ${BUILD_ARCH}-pc-msys
- if(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}") # we don't need to specify the additional flags if we build nativly.
- string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-pc-mingw32") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
- endif()
- if(VCPKG_TARGET_IS_UWP AND NOT _csc_BUILD_TRIPLET MATCHES "--host")
- # Needs to be different from --build to enable cross builds.
- string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-unknown-mingw32")
- endif()
- debug_message("Using make triplet: ${_csc_BUILD_TRIPLET}")
- endif()
- set(APPEND_ENV)
- if(_csc_AUTOCONFIG OR _csc_USE_WRAPPERS)
- set(APPEND_ENV ";${MSYS_ROOT}/usr/share/automake-1.16")
- endif()
- # This inserts msys before system32 (which masks sort.exe and find.exe) but after MSVC (which avoids masking link.exe)
- string(REPLACE ";$ENV{SystemRoot}\\System32;" "${APPEND_ENV};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\System32;" NEWPATH "$ENV{PATH}")
- string(REPLACE ";$ENV{SystemRoot}\\system32;" "${APPEND_ENV};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\system32;" NEWPATH "$ENV{PATH}")
- set(ENV{PATH} "${NEWPATH}")
- set(BASH "${MSYS_ROOT}/usr/bin/bash.exe")
-
- macro(_vcpkg_append_to_configure_environment inoutstring var defaultval)
- # Allows to overwrite settings in custom triplets via the environment
- if(DEFINED ENV{${var}})
- string(APPEND ${inoutstring} " ${var}='$ENV{${var}}'")
- else()
- string(APPEND ${inoutstring} " ${var}='${defaultval}'")
- endif()
- endmacro()
-
- set(CONFIGURE_ENV "V=1")
- if (_csc_AUTOCONFIG OR _csc_USE_WRAPPERS)
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "compile cl.exe -nologo -E")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "compile cl.exe -nologo")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "compile cl.exe -nologo")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "ar-lib lib.exe -verbose")
- else()
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "cl.exe -nologo -E")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "cl.exe -nologo")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "cl.exe -nologo")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "lib.exe -verbose")
- endif()
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV LD "link.exe -verbose")
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV RANLIB ":") # Trick to ignore the RANLIB call
- #_vcpkg_append_to_configure_environment(CONFIGURE_ENV OBJDUMP ":") ' Objdump is required to make shared libraries. Otherwise define lt_cv_deplibs_check_method=pass_all
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV CCAS ":") # If required set the ENV variable CCAS in the portfile correctly
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV STRIP ":") # If required set the ENV variable STRIP in the portfile correctly
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV NM "dumpbin.exe -symbols -headers")
- # Would be better to have a true nm here! Some symbols (mainly exported variables) get not properly imported with dumpbin as nm
- # and require __declspec(dllimport) for some reason (same problem CMake has with WINDOWS_EXPORT_ALL_SYMBOLS)
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV DLLTOOL "link.exe -verbose -dll")
-
- foreach(_env IN LISTS _csc_CONFIGURE_ENVIRONMENT_VARIABLES)
- _vcpkg_append_to_configure_environment(CONFIGURE_ENV ${_env} "${${_env}}")
- endforeach()
- # Other maybe interesting variables to control
- # COMPILE This is the command used to actually compile a C source file. The file name is appended to form the complete command line.
- # LINK This is the command used to actually link a C program.
- # CXXCOMPILE The command used to actually compile a C++ source file. The file name is appended to form the complete command line.
- # CXXLINK The command used to actually link a C++ program.
-
- #Some PATH handling for dealing with spaces....some tools will still fail with that!
- string(REPLACE " " "\\\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR})
- string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_PREFIX "${_VCPKG_PREFIX}")
- set(_VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR})
- string(REPLACE " " "\ " _VCPKG_INSTALLED_PKGCONF ${CURRENT_INSTALLED_DIR})
- string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_INSTALLED_PKGCONF ${_VCPKG_INSTALLED_PKGCONF})
- string(REPLACE "\\" "/" _VCPKG_INSTALLED_PKGCONF ${_VCPKG_INSTALLED_PKGCONF})
- set(prefix_var "'\${prefix}'") # Windows needs extra quotes or else the variable gets expanded in the makefile!
- else()
- string(REPLACE " " "\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR})
- string(REPLACE " " "\ " _VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR})
- set(_VCPKG_INSTALLED_PKGCONF ${CURRENT_INSTALLED_DIR})
- set(EXTRA_QUOTES)
- set(prefix_var "\${prefix}")
- endif()
-
- # Cleanup previous build dirs
- file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
- "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"
- "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
-
- # Set configure paths
- set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}${EXTRA_QUOTES}")
- set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}/debug${EXTRA_QUOTES}")
- if(NOT _csc_NO_ADDITIONAL_PATHS)
- set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE}
- # Important: These should all be relative to prefix!
- "--bindir=${prefix_var}/tools/${PORT}/bin"
- "--sbindir=${prefix_var}/tools/${PORT}/sbin"
- #"--libdir='\${prefix}'/lib" # already the default!
- #"--includedir='\${prefix}'/include" # already the default!
- "--mandir=${prefix_var}/share/${PORT}"
- "--docdir=${prefix_var}/share/${PORT}"
- "--datarootdir=${prefix_var}/share/${PORT}")
- set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG}
- # Important: These should all be relative to prefix!
- "--bindir=${prefix_var}/../tools/${PORT}/debug/bin"
- "--sbindir=${prefix_var}/../tools/${PORT}/debug/sbin"
- #"--libdir='\${prefix}'/lib" # already the default!
- "--includedir=${prefix_var}/../include"
- "--datarootdir=${prefix_var}/share/${PORT}")
- endif()
- # Setup common options
- if(NOT DISABLE_VERBOSE_FLAGS)
- list(APPEND _csc_OPTIONS --disable-silent-rules --verbose)
- endif()
-
- if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
- list(APPEND _csc_OPTIONS --enable-shared --disable-static)
- else()
- list(APPEND _csc_OPTIONS --disable-shared --enable-static)
- endif()
-
- file(RELATIVE_PATH RELATIVE_BUILD_PATH "${CURRENT_BUILDTREES_DIR}" "${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}")
-
- set(base_cmd)
- if(CMAKE_HOST_WIN32)
- set(base_cmd ${BASH} --noprofile --norc --debug)
- # Load toolchains
- if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
- set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
- endif()
- include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
- #Join the options list as a string with spaces between options
- list(JOIN _csc_OPTIONS " " _csc_OPTIONS)
- list(JOIN _csc_OPTIONS_RELEASE " " _csc_OPTIONS_RELEASE)
- list(JOIN _csc_OPTIONS_DEBUG " " _csc_OPTIONS_DEBUG)
- endif()
-
- # Setup include environment (since these are buildtype independent restoring them is unnecessary)
- # Used by CL
- set(ENV{INCLUDE} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${INCLUDE_BACKUP}")
- # Used by GCC
- set(ENV{C_INCLUDE_PATH} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${C_INCLUDE_PATH_BACKUP}")
- set(ENV{CPLUS_INCLUDE_PATH} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${CPLUS_INCLUDE_PATH_BACKUP}")
-
- # Setup global flags -> TODO: Further improve with toolchain file in mind!
- set(CPP_FLAGS_GLOBAL "$ENV{CPPFLAGS} -I${_VCPKG_INSTALLED}/include")
- set(C_FLAGS_GLOBAL "$ENV{CFLAGS} ${VCPKG_C_FLAGS}")
- set(CXX_FLAGS_GLOBAL "$ENV{CXXFLAGS} ${VCPKG_CXX_FLAGS}")
- set(LD_FLAGS_GLOBAL "$ENV{LDFLAGS} ${VCPKG_LINKER_FLAGS}")
- # Flags should be set in the toolchain instead (Setting this up correctly requires a function named vcpkg_determined_cmake_compiler_flags which can also be used to setup CC and CXX etc.)
- if(NOT VCPKG_TARGET_IS_WINDOWS)
- string(APPEND C_FLAGS_GLOBAL " -fPIC")
- string(APPEND CXX_FLAGS_GLOBAL " -fPIC")
- else()
- # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined
- string(APPEND CPP_FLAGS_GLOBAL " /D_WIN32_WINNT=0x0601 /DWIN32_LEAN_AND_MEAN /DWIN32 /D_WINDOWS")
- if(VCPKG_TARGET_IS_UWP)
- # Be aware that configure thinks it is crosscompiling due to:
- # error while loading shared libraries: VCRUNTIME140D_APP.dll:
- # cannot open shared object file: No such file or directory
- # IMPORTANT: The only way to pass linker flags through libtool AND the compile wrapper
- # is to use the CL and LINK environment variables !!!
- # (This is due to libtool and compiler wrapper using the same set of options to pass those variables around)
- string(REPLACE "\\" "/" VCToolsInstallDir "$ENV{VCToolsInstallDir}")
- set(ENV{_CL_} "$ENV{_CL_} /DWINAPI_FAMILY=WINAPI_FAMILY_APP /D__WRL_NO_DEFAULT_LIB_ -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"")
- set(ENV{_LINK_} "$ENV{_LINK_} /MANIFEST /DYNAMICBASE WindowsApp.lib /WINMD:NO /APPCONTAINER")
- endif()
- if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64)
- set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:x64")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
- set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:x86")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL arm)
- set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:ARM")
- elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL arm64)
- set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:ARM64")
- endif()
- endif()
-
- vcpkg_find_acquire_program(PKGCONFIG)
- if(VCPKG_LIBRARY_LINKAGE STREQUAL "static" AND NOT PKGCONFIG STREQUAL "--static")
- set(PKGCONFIG "${PKGCONFIG} --static")
- endif()
- # Run autoconf if necessary
- set(_GENERATED_CONFIGURE FALSE)
- if (_csc_AUTOCONFIG OR REQUIRES_AUTOCONFIG)
- find_program(AUTORECONF autoreconf)
- if(NOT AUTORECONF)
- message(FATAL_ERROR "${PORT} requires autoconf from the system package manager (example: \"sudo apt-get install autoconf\")")
- endif()
- message(STATUS "Generating configure for ${TARGET_TRIPLET}")
- if (CMAKE_HOST_WIN32)
- vcpkg_execute_required_process(
- COMMAND ${base_cmd} -c "autoreconf -vfi"
- WORKING_DIRECTORY "${SRC_DIR}"
- LOGNAME autoconf-${TARGET_TRIPLET}
- )
- else()
- vcpkg_execute_required_process(
- COMMAND ${AUTORECONF} -vfi
- WORKING_DIRECTORY "${SRC_DIR}"
- LOGNAME autoconf-${TARGET_TRIPLET}
- )
- endif()
- message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")
- endif()
- if(REQUIRES_AUTOGEN)
- message(STATUS "Generating configure for ${TARGET_TRIPLET} via autogen.sh")
- if (CMAKE_HOST_WIN32)
- vcpkg_execute_required_process(
- COMMAND ${base_cmd} -c "./autogen.sh"
- WORKING_DIRECTORY "${SRC_DIR}"
- LOGNAME autoconf-${TARGET_TRIPLET}
- )
- else()
- vcpkg_execute_required_process(
- COMMAND "./autogen.sh"
- WORKING_DIRECTORY "${SRC_DIR}"
- LOGNAME autoconf-${TARGET_TRIPLET}
- )
- endif()
- message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")
- endif()
-
- if (_csc_PRERUN_SHELL)
- message(STATUS "Prerun shell with ${TARGET_TRIPLET}")
- vcpkg_execute_required_process(
- COMMAND ${base_cmd} -c "${_csc_PRERUN_SHELL}"
- WORKING_DIRECTORY "${SRC_DIR}"
- LOGNAME prerun-${TARGET_TRIPLET}
- )
- endif()
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT _csc_NO_DEBUG)
- set(_VAR_SUFFIX DEBUG)
- set(PATH_SUFFIX_${_VAR_SUFFIX} "/debug")
- set(SHORT_NAME_${_VAR_SUFFIX} "dbg")
- list(APPEND _buildtypes ${_VAR_SUFFIX})
- if (CMAKE_HOST_WIN32) # Flags should be set in the toolchain instead
- string(REGEX REPLACE "[ \t]+/" " -" CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
- string(REGEX REPLACE "[ \t]+/" " -" CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX}d /D_DEBUG /Ob0 /Od ${VCPKG_C_FLAGS_${_VAR_SUFFIX}}")
- string(REGEX REPLACE "[ \t]+/" " -" CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX}d /D_DEBUG /Ob0 /Od ${VCPKG_CXX_FLAGS_${_VAR_SUFFIX}}")
- string(REGEX REPLACE "[ \t]+/" " -" LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
- else()
- set(CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
- set(CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_C_FLAGS_DEBUG}")
- set(CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CXX_FLAGS_DEBUG}")
- set(LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/ -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link/ ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
- endif()
- unset(_VAR_SUFFIX)
- endif()
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- set(_VAR_SUFFIX RELEASE)
- set(PATH_SUFFIX_${_VAR_SUFFIX} "")
- set(SHORT_NAME_${_VAR_SUFFIX} "rel")
- list(APPEND _buildtypes ${_VAR_SUFFIX})
- if (CMAKE_HOST_WIN32) # Flags should be set in the toolchain
- string(REGEX REPLACE "[ \t]+/" " -" CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
- string(REGEX REPLACE "[ \t]+/" " -" CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_C_FLAGS_${_VAR_SUFFIX}}")
- string(REGEX REPLACE "[ \t]+/" " -" CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_CXX_FLAGS_${_VAR_SUFFIX}}")
- string(REGEX REPLACE "[ \t]+/" " -" LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
- else()
- set(CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
- set(CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_C_FLAGS_DEBUG}")
- set(CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CXX_FLAGS_DEBUG}")
- set(LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/ -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link/ ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
- endif()
- unset(_VAR_SUFFIX)
- endif()
-
- foreach(_buildtype IN LISTS _buildtypes)
- foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT})
- if(DEFINED ENV{${ENV_VAR}})
- set(BACKUP_CONFIG_${ENV_VAR} "$ENV{${ENV_VAR}}")
- endif()
- set(ENV{${ENV_VAR}} "${${ENV_VAR}_${_buildtype}}")
- endforeach()
-
- set(TAR_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}")
- file(MAKE_DIRECTORY "${TAR_DIR}")
- file(RELATIVE_PATH RELATIVE_BUILD_PATH "${TAR_DIR}" "${SRC_DIR}")
-
- if(_csc_COPY_SOURCE)
- file(COPY "${SRC_DIR}/" DESTINATION "${TAR_DIR}")
- set(RELATIVE_BUILD_PATH .)
- endif()
-
- set(PKGCONFIG_INSTALLED_DIR "${_VCPKG_INSTALLED_PKGCONF}${PATH_SUFFIX_${_buildtype}}/lib/pkgconfig")
- set(PKGCONFIG_INSTALLED_SHARE_DIR "${_VCPKG_INSTALLED_PKGCONF}/share/pkgconfig")
-
- if(ENV{PKG_CONFIG_PATH})
- set(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype} $ENV{PKG_CONFIG_PATH})
- set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}:${PKGCONFIG_INSTALLED_SHARE_DIR}:$ENV{PKG_CONFIG_PATH}")
- else()
- set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}:${PKGCONFIG_INSTALLED_SHARE_DIR}")
- endif()
-
- # Setup environment
- set(ENV{CPPFLAGS} ${CPPFLAGS_${_buildtype}})
- set(ENV{CFLAGS} ${CFLAGS_${_buildtype}})
- set(ENV{CXXFLAGS} ${CXXFLAGS_${_buildtype}})
- set(ENV{LDFLAGS} ${LDFLAGS_${_buildtype}})
- set(ENV{PKG_CONFIG} "${PKGCONFIG} --define-variable=prefix=${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}")
-
- set(ENV{LIB} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LIB_PATHLIKE_CONCAT}")
- set(ENV{LIBPATH} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LIBPATH_PATHLIKE_CONCAT}")
- set(ENV{LIBRARY_PATH} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LIBRARY_PATH_PATHLIKE_CONCAT}")
- set(ENV{LD_LIBRARY_PATH} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LD_LIBRARY_PATH_PATHLIKE_CONCAT}")
-
- if (CMAKE_HOST_WIN32)
- set(command ${base_cmd} -c "${CONFIGURE_ENV} ./${RELATIVE_BUILD_PATH}/configure ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}")
- else()
- set(command /bin/bash "./${RELATIVE_BUILD_PATH}/configure" ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}})
- endif()
- if(_csc_ADD_BIN_TO_PATH)
- set(PATH_BACKUP $ENV{PATH})
- vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/bin")
- endif()
- debug_message("Configure command:'${command}'")
- if (NOT _csc_SKIP_CONFIGURE)
- message(STATUS "Configuring ${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}")
- vcpkg_execute_required_process(
- COMMAND ${command}
- WORKING_DIRECTORY "${TAR_DIR}"
- LOGNAME config-${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}
- )
- if(EXISTS "${TAR_DIR}/libtool" AND VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
- set(_file "${TAR_DIR}/libtool")
- file(READ "${_file}" _contents)
- string(REPLACE ".dll.lib" ".lib" _contents "${_contents}")
- file(WRITE "${_file}" "${_contents}")
- endif()
- endif()
-
- if(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype})
- set(ENV{PKG_CONFIG_PATH} "${BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype}}")
- else()
- unset(ENV{PKG_CONFIG_PATH})
- endif()
- unset(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype})
-
- if(_csc_ADD_BIN_TO_PATH)
- set(ENV{PATH} "${PATH_BACKUP}")
- endif()
- # Restore environment (config dependent)
- foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT})
- if(BACKUP_CONFIG_${ENV_VAR})
- set(ENV{${ENV_VAR}} "${BACKUP_CONFIG_${ENV_VAR}}")
- else()
- unset(ENV{${ENV_VAR}})
- endif()
- endforeach()
- endforeach()
-
- # Restore environment
- foreach(_prefix IN LISTS FLAGPREFIXES)
- _vcpkg_restore_env_variable(${prefix}FLAGS)
- endforeach()
-
- _vcpkg_restore_env_variables(LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)
-
- SET(_VCPKG_PROJECT_SOURCE_PATH ${_csc_SOURCE_PATH} PARENT_SCOPE)
- set(_VCPKG_PROJECT_SUBPATH ${_csc_PROJECT_SUBPATH} PARENT_SCOPE)
-endfunction()
+## # vcpkg_configure_make
+##
+## Configure configure for Debug and Release builds of a project.
+##
+## ## Usage
+## ```cmake
+## vcpkg_configure_make(
+## SOURCE_PATH <${SOURCE_PATH}>
+## [AUTOCONFIG]
+## [USE_WRAPPERS]
+## [BUILD_TRIPLET "--host=x64 --build=i686-unknown-pc"]
+## [NO_ADDITIONAL_PATHS]
+## [CONFIG_DEPENDENT_ENVIRONMENT <SOME_VAR>...]
+## [CONFIGURE_ENVIRONMENT_VARIABLES <SOME_ENVVAR>...]
+## [ADD_BIN_TO_PATH]
+## [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`.
+##
+## ### SKIP_CONFIGURE
+## Skip configure process
+##
+## ### USE_WRAPPERS
+## Use autotools ar-lib and compile wrappers (only applies to windows cl and lib)
+##
+## ### BUILD_TRIPLET
+## Used to pass custom --build/--target/--host to configure. Can be globally overwritten by VCPKG_MAKE_BUILD_TRIPLET
+##
+## ### DETERMINE_BUILD_TRIPLET
+## For ports having a configure script following the autotools rules for selecting the triplet
+##
+## ### NO_ADDITIONAL_PATHS
+## Don't pass any additional paths except for --prefix to the configure call
+##
+## ### AUTOCONFIG
+## Need to use autoconfig to generate configure file.
+##
+## ### PRERUN_SHELL
+## Script that needs to be called before configuration (do not use for batch files which simply call autoconf or configure)
+##
+## ### ADD_BIN_TO_PATH
+## Adds the appropriate Release and Debug `bin\` directories to the path during configure such that executables can run against the in-tree DLLs.
+##
+## ## DISABLE_VERBOSE_FLAGS
+## do not pass '--disable-silent-rules --verbose' to configure
+##
+## ### 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`.
+##
+## ### CONFIG_DEPENDENT_ENVIRONMENT
+## List of additional configuration dependent environment variables to set.
+## Pass SOMEVAR to set the environment and have SOMEVAR_(DEBUG|RELEASE) set in the portfile to the appropriate values
+## General environment variables can be set from within the portfile itself.
+##
+## ### CONFIGURE_ENVIRONMENT_VARIABLES
+## List of additional environment variables to pass via the configure call.
+##
+## ## 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)
+macro(_vcpkg_determine_host_mingw out_var)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
+ if(HOST_ARCH MATCHES "(amd|AMD)64")
+ set(${out_var} mingw64)
+ elseif(HOST_ARCH MATCHES "(x|X)86")
+ set(${out_var} mingw32)
+ else()
+ message(FATAL_ERROR "Unsupported mingw architecture ${HOST_ARCH} in _vcpkg_determine_autotools_host_cpu!" )
+ endif()
+ unset(HOST_ARCH)
+endmacro()
+
+macro(_vcpkg_determine_autotools_host_cpu out_var)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(HOST_ARCH $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(HOST_ARCH $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
+ if(HOST_ARCH MATCHES "(amd|AMD)64")
+ set(${out_var} x86_64)
+ elseif(HOST_ARCH MATCHES "(x|X)86")
+ set(${out_var} i686)
+ elseif(HOST_ARCH MATCHES "^(ARM|arm)64$")
+ set(${out_var} aarch64)
+ elseif(HOST_ARCH MATCHES "^(ARM|arm)$")
+ set(${out_var} arm)
+ else()
+ message(FATAL_ERROR "Unsupported host architecture ${HOST_ARCH} in _vcpkg_determine_autotools_host_cpu!" )
+ endif()
+ unset(HOST_ARCH)
+endmacro()
+
+macro(_vcpkg_determine_autotools_target_cpu out_var)
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)64")
+ set(${out_var} x86_64)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86")
+ set(${out_var} i686)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)64$")
+ set(${out_var} aarch64)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)$")
+ set(${out_var} arm)
+ else()
+ message(FATAL_ERROR "Unsupported VCPKG_TARGET_ARCHITECTURE architecture ${VCPKG_TARGET_ARCHITECTURE} in _vcpkg_determine_autotools_target_cpu!" )
+ endif()
+endmacro()
+
+macro(_vcpkg_backup_env_variable envvar)
+ if(DEFINED ENV{${envvar}})
+ set(${envvar}_BACKUP "$ENV{${envvar}}")
+ set(${envvar}_PATHLIKE_CONCAT "${VCPKG_HOST_PATH_SEPARATOR}$ENV{${envvar}}")
+ else()
+ set(${envvar}_BACKUP)
+ set(${envvar}_PATHLIKE_CONCAT)
+ endif()
+endmacro()
+
+macro(_vcpkg_backup_env_variables)
+ foreach(_var ${ARGV})
+ _vcpkg_backup_env_variable(${_var})
+ endforeach()
+endmacro()
+
+macro(_vcpkg_restore_env_variable envvar)
+ if(${envvar}_BACKUP)
+ set(ENV{${envvar}} "${${envvar}_BACKUP}")
+ else()
+ unset(ENV{${envvar}})
+ endif()
+endmacro()
+
+macro(_vcpkg_restore_env_variables)
+ foreach(_var ${ARGV})
+ _vcpkg_restore_env_variable(${_var})
+ endforeach()
+endmacro()
+
+function(vcpkg_configure_make)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _csc
+ "AUTOCONFIG;SKIP_CONFIGURE;COPY_SOURCE;DISABLE_VERBOSE_FLAGS;NO_ADDITIONAL_PATHS;ADD_BIN_TO_PATH;USE_WRAPPERS;DETERMINE_BUILD_TRIPLET"
+ "SOURCE_PATH;PROJECT_SUBPATH;PRERUN_SHELL;BUILD_TRIPLET"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;CONFIGURE_ENVIRONMENT_VARIABLES;CONFIG_DEPENDENT_ENVIRONMENT"
+ )
+ if(DEFINED VCPKG_MAKE_BUILD_TRIPLET)
+ set(_csc_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling
+ endif()
+
+ set(SRC_DIR "${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}")
+
+ set(REQUIRES_AUTOGEN FALSE) # use autogen.sh
+ set(REQUIRES_AUTOCONFIG FALSE) # use autotools and configure.ac
+ if(EXISTS "${SRC_DIR}/configure" AND "${SRC_DIR}/configure.ac") # remove configure; rerun autoconf
+ if(NOT VCPKG_MAINTAINER_SKIP_AUTOCONFIG) # If fixing bugs skipping autoconfig saves a lot of time
+ set(REQUIRES_AUTOCONFIG TRUE)
+ file(REMOVE "${SRC_DIR}/configure") # remove possible autodated configure scripts
+ set(_csc_AUTOCONFIG ON)
+ endif()
+ elseif(EXISTS "${SRC_DIR}/configure" AND NOT _csc_SKIP_CONFIGURE) # run normally; no autoconf or autgen required
+ elseif(EXISTS "${SRC_DIR}/configure.ac") # Run autoconfig
+ set(REQUIRES_AUTOCONFIG TRUE)
+ set(_csc_AUTOCONFIG ON)
+ elseif(EXISTS "${SRC_DIR}/autogen.sh") # Run autogen
+ set(REQUIRES_AUTOGEN TRUE)
+ else()
+ message(FATAL_ERROR "Could not determine method to configure make")
+ endif()
+
+ debug_message("REQUIRES_AUTOGEN:${REQUIRES_AUTOGEN}")
+ debug_message("REQUIRES_AUTOCONFIG:${REQUIRES_AUTOCONFIG}")
+ # Backup environment variables
+ # CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJCXX R UPC Y
+ set(FLAGPREFIXES CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJXX R UPC Y)
+ foreach(_prefix IN LISTS FLAGPREFIXES)
+ _vcpkg_backup_env_variable(${prefix}FLAGS)
+ endforeach()
+
+ # FC fotran compiler | FF Fortran 77 compiler
+ # LDFLAGS -> pass -L flags
+ # LIBS -> pass -l flags
+
+ #Used by gcc/linux
+ _vcpkg_backup_env_variables(C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH LD_LIBRARY_PATH)
+
+ #Used by cl
+ _vcpkg_backup_env_variables(INCLUDE LIB LIBPATH)
+
+ if(CURRENT_PACKAGES_DIR MATCHES " " OR CURRENT_INSTALLED_DIR MATCHES " ")
+ # Don't bother with whitespace. The tools will probably fail and I tried very hard trying to make it work (no success so far)!
+ message(WARNING "Detected whitespace in root directory. Please move the path to one without whitespaces! The required tools do not handle whitespaces correctly and the build will most likely fail")
+ endif()
+
+ # Pre-processing windows configure requirements
+ if (CMAKE_HOST_WIN32)
+ list(APPEND MSYS_REQUIRE_PACKAGES binutils libtool autoconf automake-wrapper automake1.16 m4)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${MSYS_REQUIRE_PACKAGES})
+
+ if (_csc_AUTOCONFIG AND NOT _csc_BUILD_TRIPLET OR _csc_DETERMINE_BUILD_TRIPLET)
+ _vcpkg_determine_autotools_host_cpu(BUILD_ARCH) # VCPKG_HOST => machine you are building on => --build=
+ _vcpkg_determine_autotools_target_cpu(TARGET_ARCH)
+ # --build: the machine you are building on
+ # --host: the machine you are building for
+ # --target: the machine that CC will produce binaries for
+ # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler
+ # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host
+ set(_csc_BUILD_TRIPLET "--build=${BUILD_ARCH}-pc-mingw32") # This is required since we are running in a msys
+ # shell which will be otherwise identified as ${BUILD_ARCH}-pc-msys
+ if(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}") # we don't need to specify the additional flags if we build nativly.
+ string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-pc-mingw32") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
+ endif()
+ if(VCPKG_TARGET_IS_UWP AND NOT _csc_BUILD_TRIPLET MATCHES "--host")
+ # Needs to be different from --build to enable cross builds.
+ string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-unknown-mingw32")
+ endif()
+ debug_message("Using make triplet: ${_csc_BUILD_TRIPLET}")
+ endif()
+ set(APPEND_ENV)
+ if(_csc_AUTOCONFIG OR _csc_USE_WRAPPERS)
+ set(APPEND_ENV ";${MSYS_ROOT}/usr/share/automake-1.16")
+ endif()
+ # This inserts msys before system32 (which masks sort.exe and find.exe) but after MSVC (which avoids masking link.exe)
+ string(REPLACE ";$ENV{SystemRoot}\\System32;" "${APPEND_ENV};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\System32;" NEWPATH "$ENV{PATH}")
+ string(REPLACE ";$ENV{SystemRoot}\\system32;" "${APPEND_ENV};${MSYS_ROOT}/usr/bin;$ENV{SystemRoot}\\system32;" NEWPATH "$ENV{PATH}")
+ set(ENV{PATH} "${NEWPATH}")
+ set(BASH "${MSYS_ROOT}/usr/bin/bash.exe")
+
+ macro(_vcpkg_append_to_configure_environment inoutstring var defaultval)
+ # Allows to overwrite settings in custom triplets via the environment
+ if(DEFINED ENV{${var}})
+ string(APPEND ${inoutstring} " ${var}='$ENV{${var}}'")
+ else()
+ string(APPEND ${inoutstring} " ${var}='${defaultval}'")
+ endif()
+ endmacro()
+
+ set(CONFIGURE_ENV "V=1")
+ if (_csc_AUTOCONFIG OR _csc_USE_WRAPPERS)
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "compile cl.exe -nologo -E")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "compile cl.exe -nologo")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "compile cl.exe -nologo")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "ar-lib lib.exe -verbose")
+ else()
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "cl.exe -nologo -E")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "cl.exe -nologo")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "cl.exe -nologo")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "lib.exe -verbose")
+ endif()
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV LD "link.exe -verbose")
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV RANLIB ":") # Trick to ignore the RANLIB call
+ #_vcpkg_append_to_configure_environment(CONFIGURE_ENV OBJDUMP ":") ' Objdump is required to make shared libraries. Otherwise define lt_cv_deplibs_check_method=pass_all
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV CCAS ":") # If required set the ENV variable CCAS in the portfile correctly
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV STRIP ":") # If required set the ENV variable STRIP in the portfile correctly
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV NM "dumpbin.exe -symbols -headers")
+ # Would be better to have a true nm here! Some symbols (mainly exported variables) get not properly imported with dumpbin as nm
+ # and require __declspec(dllimport) for some reason (same problem CMake has with WINDOWS_EXPORT_ALL_SYMBOLS)
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV DLLTOOL "link.exe -verbose -dll")
+
+ foreach(_env IN LISTS _csc_CONFIGURE_ENVIRONMENT_VARIABLES)
+ _vcpkg_append_to_configure_environment(CONFIGURE_ENV ${_env} "${${_env}}")
+ endforeach()
+ # Other maybe interesting variables to control
+ # COMPILE This is the command used to actually compile a C source file. The file name is appended to form the complete command line.
+ # LINK This is the command used to actually link a C program.
+ # CXXCOMPILE The command used to actually compile a C++ source file. The file name is appended to form the complete command line.
+ # CXXLINK The command used to actually link a C++ program.
+
+ #Some PATH handling for dealing with spaces....some tools will still fail with that!
+ string(REPLACE " " "\\\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR})
+ string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_PREFIX "${_VCPKG_PREFIX}")
+ set(_VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR})
+ string(REPLACE " " "\ " _VCPKG_INSTALLED_PKGCONF ${CURRENT_INSTALLED_DIR})
+ string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_INSTALLED_PKGCONF ${_VCPKG_INSTALLED_PKGCONF})
+ string(REPLACE "\\" "/" _VCPKG_INSTALLED_PKGCONF ${_VCPKG_INSTALLED_PKGCONF})
+ set(prefix_var "'\${prefix}'") # Windows needs extra quotes or else the variable gets expanded in the makefile!
+ else()
+ string(REPLACE " " "\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR})
+ string(REPLACE " " "\ " _VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR})
+ set(_VCPKG_INSTALLED_PKGCONF ${CURRENT_INSTALLED_DIR})
+ set(EXTRA_QUOTES)
+ set(prefix_var "\${prefix}")
+ endif()
+
+ # Cleanup previous build dirs
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
+
+ # Set configure paths
+ set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}${EXTRA_QUOTES}")
+ set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}/debug${EXTRA_QUOTES}")
+ if(NOT _csc_NO_ADDITIONAL_PATHS)
+ set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE}
+ # Important: These should all be relative to prefix!
+ "--bindir=${prefix_var}/tools/${PORT}/bin"
+ "--sbindir=${prefix_var}/tools/${PORT}/sbin"
+ #"--libdir='\${prefix}'/lib" # already the default!
+ #"--includedir='\${prefix}'/include" # already the default!
+ "--mandir=${prefix_var}/share/${PORT}"
+ "--docdir=${prefix_var}/share/${PORT}"
+ "--datarootdir=${prefix_var}/share/${PORT}")
+ set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG}
+ # Important: These should all be relative to prefix!
+ "--bindir=${prefix_var}/../tools/${PORT}/debug/bin"
+ "--sbindir=${prefix_var}/../tools/${PORT}/debug/sbin"
+ #"--libdir='\${prefix}'/lib" # already the default!
+ "--includedir=${prefix_var}/../include"
+ "--datarootdir=${prefix_var}/share/${PORT}")
+ endif()
+ # Setup common options
+ if(NOT DISABLE_VERBOSE_FLAGS)
+ list(APPEND _csc_OPTIONS --disable-silent-rules --verbose)
+ endif()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ list(APPEND _csc_OPTIONS --enable-shared --disable-static)
+ else()
+ list(APPEND _csc_OPTIONS --disable-shared --enable-static)
+ endif()
+
+ file(RELATIVE_PATH RELATIVE_BUILD_PATH "${CURRENT_BUILDTREES_DIR}" "${_csc_SOURCE_PATH}/${_csc_PROJECT_SUBPATH}")
+
+ set(base_cmd)
+ if(CMAKE_HOST_WIN32)
+ set(base_cmd ${BASH} --noprofile --norc --debug)
+ # Load toolchains
+ if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/windows.cmake")
+ endif()
+ include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}")
+ #Join the options list as a string with spaces between options
+ list(JOIN _csc_OPTIONS " " _csc_OPTIONS)
+ list(JOIN _csc_OPTIONS_RELEASE " " _csc_OPTIONS_RELEASE)
+ list(JOIN _csc_OPTIONS_DEBUG " " _csc_OPTIONS_DEBUG)
+ endif()
+
+ # Setup include environment (since these are buildtype independent restoring them is unnecessary)
+ # Used by CL
+ set(ENV{INCLUDE} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${INCLUDE_BACKUP}")
+ # Used by GCC
+ set(ENV{C_INCLUDE_PATH} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${C_INCLUDE_PATH_BACKUP}")
+ set(ENV{CPLUS_INCLUDE_PATH} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${CPLUS_INCLUDE_PATH_BACKUP}")
+
+ # Setup global flags -> TODO: Further improve with toolchain file in mind!
+ set(CPP_FLAGS_GLOBAL "$ENV{CPPFLAGS} -I${_VCPKG_INSTALLED}/include")
+ set(C_FLAGS_GLOBAL "$ENV{CFLAGS} ${VCPKG_C_FLAGS}")
+ set(CXX_FLAGS_GLOBAL "$ENV{CXXFLAGS} ${VCPKG_CXX_FLAGS}")
+ set(LD_FLAGS_GLOBAL "$ENV{LDFLAGS} ${VCPKG_LINKER_FLAGS}")
+ # Flags should be set in the toolchain instead (Setting this up correctly requires a function named vcpkg_determined_cmake_compiler_flags which can also be used to setup CC and CXX etc.)
+ if(NOT VCPKG_TARGET_IS_WINDOWS)
+ string(APPEND C_FLAGS_GLOBAL " -fPIC")
+ string(APPEND CXX_FLAGS_GLOBAL " -fPIC")
+ else()
+ # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined
+ string(APPEND CPP_FLAGS_GLOBAL " /D_WIN32_WINNT=0x0601 /DWIN32_LEAN_AND_MEAN /DWIN32 /D_WINDOWS")
+ if(VCPKG_TARGET_IS_UWP)
+ # Be aware that configure thinks it is crosscompiling due to:
+ # error while loading shared libraries: VCRUNTIME140D_APP.dll:
+ # cannot open shared object file: No such file or directory
+ # IMPORTANT: The only way to pass linker flags through libtool AND the compile wrapper
+ # is to use the CL and LINK environment variables !!!
+ # (This is due to libtool and compiler wrapper using the same set of options to pass those variables around)
+ string(REPLACE "\\" "/" VCToolsInstallDir "$ENV{VCToolsInstallDir}")
+ set(ENV{_CL_} "$ENV{_CL_} /DWINAPI_FAMILY=WINAPI_FAMILY_APP /D__WRL_NO_DEFAULT_LIB_ -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"")
+ set(ENV{_LINK_} "$ENV{_LINK_} /MANIFEST /DYNAMICBASE WindowsApp.lib /WINMD:NO /APPCONTAINER")
+ endif()
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64)
+ set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:x64")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
+ set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:x86")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL arm)
+ set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:ARM")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL arm64)
+ set(ENV{_LINK_} "$ENV{_LINK_} -MACHINE:ARM64")
+ endif()
+ endif()
+
+ vcpkg_find_acquire_program(PKGCONFIG)
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static" AND NOT PKGCONFIG STREQUAL "--static")
+ set(PKGCONFIG "${PKGCONFIG} --static")
+ endif()
+ # Run autoconf if necessary
+ set(_GENERATED_CONFIGURE FALSE)
+ if (_csc_AUTOCONFIG OR REQUIRES_AUTOCONFIG)
+ find_program(AUTORECONF autoreconf)
+ if(NOT AUTORECONF)
+ message(FATAL_ERROR "${PORT} requires autoconf from the system package manager (example: \"sudo apt-get install autoconf\")")
+ endif()
+ message(STATUS "Generating configure for ${TARGET_TRIPLET}")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "autoreconf -vfi"
+ WORKING_DIRECTORY "${SRC_DIR}"
+ LOGNAME autoconf-${TARGET_TRIPLET}
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND ${AUTORECONF} -vfi
+ WORKING_DIRECTORY "${SRC_DIR}"
+ LOGNAME autoconf-${TARGET_TRIPLET}
+ )
+ endif()
+ message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")
+ endif()
+ if(REQUIRES_AUTOGEN)
+ message(STATUS "Generating configure for ${TARGET_TRIPLET} via autogen.sh")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "./autogen.sh"
+ WORKING_DIRECTORY "${SRC_DIR}"
+ LOGNAME autoconf-${TARGET_TRIPLET}
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND "./autogen.sh"
+ WORKING_DIRECTORY "${SRC_DIR}"
+ LOGNAME autoconf-${TARGET_TRIPLET}
+ )
+ endif()
+ message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")
+ endif()
+
+ if (_csc_PRERUN_SHELL)
+ message(STATUS "Prerun shell with ${TARGET_TRIPLET}")
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "${_csc_PRERUN_SHELL}"
+ WORKING_DIRECTORY "${SRC_DIR}"
+ LOGNAME prerun-${TARGET_TRIPLET}
+ )
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT _csc_NO_DEBUG)
+ set(_VAR_SUFFIX DEBUG)
+ set(PATH_SUFFIX_${_VAR_SUFFIX} "/debug")
+ set(SHORT_NAME_${_VAR_SUFFIX} "dbg")
+ list(APPEND _buildtypes ${_VAR_SUFFIX})
+ if (CMAKE_HOST_WIN32) # Flags should be set in the toolchain instead
+ string(REGEX REPLACE "[ \t]+/" " -" CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
+ string(REGEX REPLACE "[ \t]+/" " -" CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX}d /D_DEBUG /Ob0 /Od ${VCPKG_C_FLAGS_${_VAR_SUFFIX}}")
+ string(REGEX REPLACE "[ \t]+/" " -" CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX}d /D_DEBUG /Ob0 /Od ${VCPKG_CXX_FLAGS_${_VAR_SUFFIX}}")
+ string(REGEX REPLACE "[ \t]+/" " -" LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
+ else()
+ set(CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
+ set(CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_C_FLAGS_DEBUG}")
+ set(CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CXX_FLAGS_DEBUG}")
+ set(LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/ -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link/ ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
+ endif()
+ unset(_VAR_SUFFIX)
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ set(_VAR_SUFFIX RELEASE)
+ set(PATH_SUFFIX_${_VAR_SUFFIX} "")
+ set(SHORT_NAME_${_VAR_SUFFIX} "rel")
+ list(APPEND _buildtypes ${_VAR_SUFFIX})
+ if (CMAKE_HOST_WIN32) # Flags should be set in the toolchain
+ string(REGEX REPLACE "[ \t]+/" " -" CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
+ string(REGEX REPLACE "[ \t]+/" " -" CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_C_FLAGS_${_VAR_SUFFIX}}")
+ string(REGEX REPLACE "[ \t]+/" " -" CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_CXX_FLAGS_${_VAR_SUFFIX}}")
+ string(REGEX REPLACE "[ \t]+/" " -" LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
+ else()
+ set(CPPFLAGS_${_VAR_SUFFIX} "${CPP_FLAGS_GLOBAL}")
+ set(CFLAGS_${_VAR_SUFFIX} "${C_FLAGS_GLOBAL} ${VCPKG_C_FLAGS_DEBUG}")
+ set(CXXFLAGS_${_VAR_SUFFIX} "${CXX_FLAGS_GLOBAL} ${VCPKG_CXX_FLAGS_DEBUG}")
+ set(LDFLAGS_${_VAR_SUFFIX} "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/ -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link/ ${LD_FLAGS_GLOBAL} ${VCPKG_LINKER_FLAGS_${_VAR_SUFFIX}}")
+ endif()
+ unset(_VAR_SUFFIX)
+ endif()
+
+ foreach(_buildtype IN LISTS _buildtypes)
+ foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT})
+ if(DEFINED ENV{${ENV_VAR}})
+ set(BACKUP_CONFIG_${ENV_VAR} "$ENV{${ENV_VAR}}")
+ endif()
+ set(ENV{${ENV_VAR}} "${${ENV_VAR}_${_buildtype}}")
+ endforeach()
+
+ set(TAR_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}")
+ file(MAKE_DIRECTORY "${TAR_DIR}")
+ file(RELATIVE_PATH RELATIVE_BUILD_PATH "${TAR_DIR}" "${SRC_DIR}")
+
+ if(_csc_COPY_SOURCE)
+ file(COPY "${SRC_DIR}/" DESTINATION "${TAR_DIR}")
+ set(RELATIVE_BUILD_PATH .)
+ endif()
+
+ set(PKGCONFIG_INSTALLED_DIR "${_VCPKG_INSTALLED_PKGCONF}${PATH_SUFFIX_${_buildtype}}/lib/pkgconfig")
+ set(PKGCONFIG_INSTALLED_SHARE_DIR "${_VCPKG_INSTALLED_PKGCONF}/share/pkgconfig")
+
+ if(ENV{PKG_CONFIG_PATH})
+ set(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype} $ENV{PKG_CONFIG_PATH})
+ set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}:${PKGCONFIG_INSTALLED_SHARE_DIR}:$ENV{PKG_CONFIG_PATH}")
+ else()
+ set(ENV{PKG_CONFIG_PATH} "${PKGCONFIG_INSTALLED_DIR}:${PKGCONFIG_INSTALLED_SHARE_DIR}")
+ endif()
+
+ # Setup environment
+ set(ENV{CPPFLAGS} ${CPPFLAGS_${_buildtype}})
+ set(ENV{CFLAGS} ${CFLAGS_${_buildtype}})
+ set(ENV{CXXFLAGS} ${CXXFLAGS_${_buildtype}})
+ set(ENV{LDFLAGS} ${LDFLAGS_${_buildtype}})
+ set(ENV{PKG_CONFIG} "${PKGCONFIG} --define-variable=prefix=${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}")
+
+ set(ENV{LIB} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LIB_PATHLIKE_CONCAT}")
+ set(ENV{LIBPATH} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LIBPATH_PATHLIKE_CONCAT}")
+ set(ENV{LIBRARY_PATH} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LIBRARY_PATH_PATHLIKE_CONCAT}")
+ set(ENV{LD_LIBRARY_PATH} "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/${VCPKG_HOST_PATH_SEPARATOR}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link/${LD_LIBRARY_PATH_PATHLIKE_CONCAT}")
+
+ if (CMAKE_HOST_WIN32)
+ set(command ${base_cmd} -c "${CONFIGURE_ENV} ./${RELATIVE_BUILD_PATH}/configure ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}")
+ else()
+ set(command /bin/bash "./${RELATIVE_BUILD_PATH}/configure" ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}})
+ endif()
+ if(_csc_ADD_BIN_TO_PATH)
+ set(PATH_BACKUP $ENV{PATH})
+ vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/bin")
+ endif()
+ debug_message("Configure command:'${command}'")
+ if (NOT _csc_SKIP_CONFIGURE)
+ message(STATUS "Configuring ${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}")
+ vcpkg_execute_required_process(
+ COMMAND ${command}
+ WORKING_DIRECTORY "${TAR_DIR}"
+ LOGNAME config-${TARGET_TRIPLET}-${SHORT_NAME_${_buildtype}}
+ )
+ if(EXISTS "${TAR_DIR}/libtool" AND VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ set(_file "${TAR_DIR}/libtool")
+ file(READ "${_file}" _contents)
+ string(REPLACE ".dll.lib" ".lib" _contents "${_contents}")
+ file(WRITE "${_file}" "${_contents}")
+ endif()
+ endif()
+
+ if(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype})
+ set(ENV{PKG_CONFIG_PATH} "${BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype}}")
+ else()
+ unset(ENV{PKG_CONFIG_PATH})
+ endif()
+ unset(BACKUP_ENV_PKG_CONFIG_PATH_${_buildtype})
+
+ if(_csc_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${PATH_BACKUP}")
+ endif()
+ # Restore environment (config dependent)
+ foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT})
+ if(BACKUP_CONFIG_${ENV_VAR})
+ set(ENV{${ENV_VAR}} "${BACKUP_CONFIG_${ENV_VAR}}")
+ else()
+ unset(ENV{${ENV_VAR}})
+ endif()
+ endforeach()
+ endforeach()
+
+ # Restore environment
+ foreach(_prefix IN LISTS FLAGPREFIXES)
+ _vcpkg_restore_env_variable(${prefix}FLAGS)
+ endforeach()
+
+ _vcpkg_restore_env_variables(LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)
+
+ 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 86a6e5586..71d9267db 100644
--- a/scripts/cmake/vcpkg_configure_meson.cmake
+++ b/scripts/cmake/vcpkg_configure_meson.cmake
@@ -34,7 +34,8 @@
## * [fribidi](https://github.com/Microsoft/vcpkg/blob/master/ports/fribidi/portfile.cmake)
## * [libepoxy](https://github.com/Microsoft/vcpkg/blob/master/ports/libepoxy/portfile.cmake)
function(vcpkg_configure_meson)
- cmake_parse_arguments(_vcm "" "SOURCE_PATH" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vcm "" "SOURCE_PATH" "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE")
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
diff --git a/scripts/cmake/vcpkg_configure_qmake.cmake b/scripts/cmake/vcpkg_configure_qmake.cmake
index 7bb205742..f0baabb6a 100644
--- a/scripts/cmake/vcpkg_configure_qmake.cmake
+++ b/scripts/cmake/vcpkg_configure_qmake.cmake
@@ -16,7 +16,8 @@
# The options passed to qmake.
function(vcpkg_configure_qmake)
- cmake_parse_arguments(_csc "" "SOURCE_PATH" "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;BUILD_OPTIONS;BUILD_OPTIONS_RELEASE;BUILD_OPTIONS_DEBUG" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _csc "" "SOURCE_PATH" "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;BUILD_OPTIONS;BUILD_OPTIONS_RELEASE;BUILD_OPTIONS_DEBUG")
# Find qmake executable
set(_triplet_hostbindir ${CURRENT_INSTALLED_DIR}/tools/qt5/bin)
diff --git a/scripts/cmake/vcpkg_copy_pdbs.cmake b/scripts/cmake/vcpkg_copy_pdbs.cmake
index 12154d91c..d3cb7e6ec 100644
--- a/scripts/cmake/vcpkg_copy_pdbs.cmake
+++ b/scripts/cmake/vcpkg_copy_pdbs.cmake
@@ -21,7 +21,8 @@
## * [zlib](https://github.com/Microsoft/vcpkg/blob/master/ports/zlib/portfile.cmake)
## * [cpprestsdk](https://github.com/Microsoft/vcpkg/blob/master/ports/cpprestsdk/portfile.cmake)
function(vcpkg_copy_pdbs)
- cmake_parse_arguments(_vcp "" "" "BUILD_PATHS" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vcp "" "" "BUILD_PATHS")
if(NOT _vcp_BUILD_PATHS)
set(
diff --git a/scripts/cmake/vcpkg_copy_tools.cmake b/scripts/cmake/vcpkg_copy_tools.cmake
index 9651b5357..147a42696 100644
--- a/scripts/cmake/vcpkg_copy_tools.cmake
+++ b/scripts/cmake/vcpkg_copy_tools.cmake
@@ -26,7 +26,8 @@
## * [nanomsg](https://github.com/microsoft/vcpkg/blob/master/ports/nanomsg/portfile.cmake)
## * [uriparser](https://github.com/microsoft/vcpkg/blob/master/ports/uriparser/portfile.cmake)
function(vcpkg_copy_tools)
- cmake_parse_arguments(_vct "AUTO_CLEAN" "SEARCH_DIR" "TOOL_NAMES" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vct "AUTO_CLEAN" "SEARCH_DIR" "TOOL_NAMES")
if(NOT DEFINED _vct_TOOL_NAMES)
message(FATAL_ERROR "TOOL_NAMES must be specified.")
diff --git a/scripts/cmake/vcpkg_download_distfile.cmake b/scripts/cmake/vcpkg_download_distfile.cmake
index a767bff83..ff42fd64e 100644
--- a/scripts/cmake/vcpkg_download_distfile.cmake
+++ b/scripts/cmake/vcpkg_download_distfile.cmake
@@ -56,6 +56,7 @@ function(vcpkg_download_distfile VAR)
set(options SKIP_SHA512 SILENT_EXIT QUIET)
set(oneValueArgs FILENAME SHA512)
set(multipleValuesArgs URLS HEADERS)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
cmake_parse_arguments(PARSE_ARGV 1 vcpkg_download_distfile "${options}" "${oneValueArgs}" "${multipleValuesArgs}")
if(NOT DEFINED vcpkg_download_distfile_URLS)
diff --git a/scripts/cmake/vcpkg_execute_build_process.cmake b/scripts/cmake/vcpkg_execute_build_process.cmake
index 98e3648d5..9f9374184 100644
--- a/scripts/cmake/vcpkg_execute_build_process.cmake
+++ b/scripts/cmake/vcpkg_execute_build_process.cmake
@@ -33,7 +33,8 @@
## * [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})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _ebp "" "WORKING_DIRECTORY;LOGNAME" "COMMAND;NO_PARALLEL_COMMAND")
set(LOG_OUT "${CURRENT_BUILDTREES_DIR}/${_ebp_LOGNAME}-out.log")
set(LOG_ERR "${CURRENT_BUILDTREES_DIR}/${_ebp_LOGNAME}-err.log")
diff --git a/scripts/cmake/vcpkg_execute_required_process.cmake b/scripts/cmake/vcpkg_execute_required_process.cmake
index b59675c35..454d97b80 100644
--- a/scripts/cmake/vcpkg_execute_required_process.cmake
+++ b/scripts/cmake/vcpkg_execute_required_process.cmake
@@ -9,6 +9,8 @@
## WORKING_DIRECTORY <${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg>
## LOGNAME <build-${TARGET_TRIPLET}-dbg>
## [TIMEOUT <seconds>]
+## [OUTPUT_VARIABLE <var>]
+## [ERROR_VARIABLE <var>]
## )
## ```
## ## Parameters
@@ -28,6 +30,12 @@
## ### TIMEOUT
## Optional timeout after which to terminate the command.
##
+## ### OUTPUT_VARIABLE
+## Optional variable to receive stdout of the command.
+##
+## ### ERROR_VARIABLE
+## Optional variable to receive stderr of the command.
+##
## This should be a unique name for different triplets so that the logs don't conflict when building multiple at once.
##
## ## Examples
@@ -41,14 +49,25 @@ include(vcpkg_prettify_command)
include(vcpkg_execute_in_download_mode)
function(vcpkg_execute_required_process)
- cmake_parse_arguments(vcpkg_execute_required_process "ALLOW_IN_DOWNLOAD_MODE" "WORKING_DIRECTORY;LOGNAME;TIMEOUT" "COMMAND" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 vcpkg_execute_required_process "ALLOW_IN_DOWNLOAD_MODE" "WORKING_DIRECTORY;LOGNAME;TIMEOUT;OUTPUT_VARIABLE;ERROR_VARIABLE" "COMMAND")
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")
if(vcpkg_execute_required_process_TIMEOUT)
- set(TIMEOUT_PARAM "TIMEOUT;${vcpkg_execute_required_process_TIMEOUT}")
+ set(TIMEOUT_PARAM "TIMEOUT;${vcpkg_execute_required_process_TIMEOUT}")
+ else()
+ set(TIMEOUT_PARAM "")
+ endif()
+ if(vcpkg_execute_required_process_OUTPUT_VARIABLE)
+ set(OUTPUT_VARIABLE_PARAM "OUTPUT_VARIABLE;${vcpkg_execute_required_process_OUTPUT_VARIABLE}")
else()
- set(TIMEOUT_PARAM "")
+ set(OUTPUT_VARIABLE_PARAM "")
+ endif()
+ if(vcpkg_execute_required_process_ERROR_VARIABLE)
+ set(ERROR_VARIABLE_PARAM "ERROR_VARIABLE;${vcpkg_execute_required_process_ERROR_VARIABLE}")
+ else()
+ set(ERROR_VARIABLE_PARAM "")
endif()
if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT vcpkg_execute_required_process_ALLOW_IN_DOWNLOAD_MODE)
@@ -65,7 +84,9 @@ Halting portfile execution.
ERROR_FILE ${LOG_ERR}
RESULT_VARIABLE error_code
WORKING_DIRECTORY ${vcpkg_execute_required_process_WORKING_DIRECTORY}
- ${TIMEOUT_PARAM})
+ ${TIMEOUT_PARAM}
+ ${OUTPUT_VARIABLE_PARAM}
+ ${ERROR_VARIABLE_PARAM})
if(error_code)
set(LOGS)
file(READ "${LOG_OUT}" out_contents)
@@ -90,4 +111,10 @@ Halting portfile execution.
${STRINGIFIED_LOGS}
)
endif()
+ # pass output parameters back to caller's scope
+ foreach(arg OUTPUT_VARIABLE ERROR_VARIABLE)
+ if(vcpkg_execute_required_process_${arg})
+ set(${vcpkg_execute_required_process_${arg}} ${${vcpkg_execute_required_process_${arg}}} PARENT_SCOPE)
+ endif()
+ endforeach()
endfunction()
diff --git a/scripts/cmake/vcpkg_execute_required_process_repeat.cmake b/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
index ca11e8ea4..91b847dc5 100644
--- a/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
+++ b/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
@@ -1,11 +1,19 @@
# 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})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 vcpkg_execute_required_process_repeat "ALLOW_IN_DOWNLOAD_MODE" "COUNT;WORKING_DIRECTORY;LOGNAME" "COMMAND")
#debug_message("vcpkg_execute_required_process_repeat(${vcpkg_execute_required_process_repeat_COMMAND})")
+ if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT vcpkg_execute_required_process_repeat_ALLOW_IN_DOWNLOAD_MODE)
+ message(FATAL_ERROR
+[[
+This command cannot be executed in Download Mode.
+Halting portfile execution.
+]])
+ endif()
set(SUCCESSFUL_EXECUTION FALSE)
foreach(loop_count RANGE ${vcpkg_execute_required_process_repeat_COUNT})
- execute_process(
+ vcpkg_execute_in_download_mode(
COMMAND ${vcpkg_execute_required_process_repeat_COMMAND}
OUTPUT_FILE ${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_repeat_LOGNAME}-out-${loop_count}.log
ERROR_FILE ${CURRENT_BUILDTREES_DIR}/${vcpkg_execute_required_process_repeat_LOGNAME}-err-${loop_count}.log
diff --git a/scripts/cmake/vcpkg_extract_source_archive_ex.cmake b/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
index 9ce5047a2..d1a7febee 100644
--- a/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
+++ b/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
@@ -55,12 +55,13 @@ include(vcpkg_apply_patches)
include(vcpkg_extract_source_archive)
function(vcpkg_extract_source_archive_ex)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
cmake_parse_arguments(
+ PARSE_ARGV 0
_vesae
"NO_REMOVE_ONE_LEVEL;SKIP_PATCH_CHECK"
"OUT_SOURCE_PATH;ARCHIVE;REF;WORKING_DIRECTORY"
"PATCHES"
- ${ARGN}
)
if(NOT _vesae_ARCHIVE)
diff --git a/scripts/cmake/vcpkg_fail_port_install.cmake b/scripts/cmake/vcpkg_fail_port_install.cmake
index cf8777506..5288226eb 100644
--- a/scripts/cmake/vcpkg_fail_port_install.cmake
+++ b/scripts/cmake/vcpkg_fail_port_install.cmake
@@ -37,6 +37,7 @@
##
## * [aws-lambda-cpp](https://github.com/Microsoft/vcpkg/blob/master/ports/aws-lambda-cpp/portfile.cmake)
function(vcpkg_fail_port_install)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
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!")
diff --git a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
index 0be2dfc54..7e4432e84 100644
--- a/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
+++ b/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
@@ -43,7 +43,8 @@
## * [curl](https://github.com/Microsoft/vcpkg/blob/master/ports/curl/portfile.cmake)
## * [nlohmann-json](https://github.com/Microsoft/vcpkg/blob/master/ports/nlohmann-json/portfile.cmake)
function(vcpkg_fixup_cmake_targets)
- cmake_parse_arguments(_vfct "DO_NOT_DELETE_PARENT_CONFIG_PATH" "CONFIG_PATH;TARGET_PATH" "" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vfct "DO_NOT_DELETE_PARENT_CONFIG_PATH" "CONFIG_PATH;TARGET_PATH" "")
if(_vfct_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "vcpkg_fixup_cmake_targets was passed extra arguments: ${_vfct_UNPARSED_ARGUMENTS}")
diff --git a/scripts/cmake/vcpkg_fixup_pkgconfig.cmake b/scripts/cmake/vcpkg_fixup_pkgconfig.cmake
index c39b1fbe9..3b7a104ec 100644
--- a/scripts/cmake/vcpkg_fixup_pkgconfig.cmake
+++ b/scripts/cmake/vcpkg_fixup_pkgconfig.cmake
@@ -239,7 +239,8 @@ function(vcpkg_fixup_pkgconfig_check_files pkg_cfg_cmd _file _config _system_lib
endfunction()
function(vcpkg_fixup_pkgconfig)
- cmake_parse_arguments(_vfpkg "SKIP_CHECK;NOT_STATIC_PKGCONFIG" "" "RELEASE_FILES;DEBUG_FILES;SYSTEM_LIBRARIES;SYSTEM_PACKAGES;IGNORE_FLAGS" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vfpkg "SKIP_CHECK;NOT_STATIC_PKGCONFIG" "" "RELEASE_FILES;DEBUG_FILES;SYSTEM_LIBRARIES;SYSTEM_PACKAGES;IGNORE_FLAGS")
# Note about SYSTEM_PACKAGES: pkg-config requires all packages mentioned in pc files to exists. Otherwise pkg-config will fail to find the pkg.
# As such naming any SYSTEM_PACKAGES is damned to fail which is why it is not mentioned in the docs at the beginning.
diff --git a/scripts/cmake/vcpkg_from_bitbucket.cmake b/scripts/cmake/vcpkg_from_bitbucket.cmake
index 5f23714ea..bd4c67ed9 100644
--- a/scripts/cmake/vcpkg_from_bitbucket.cmake
+++ b/scripts/cmake/vcpkg_from_bitbucket.cmake
@@ -57,7 +57,8 @@
function(vcpkg_from_bitbucket)
set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 HEAD_REF)
set(multipleValuesArgs PATCHES)
- cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vdud "" "${oneValueArgs}" "${multipleValuesArgs}")
if(NOT _vdud_OUT_SOURCE_PATH)
message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
diff --git a/scripts/cmake/vcpkg_from_git.cmake b/scripts/cmake/vcpkg_from_git.cmake
index 860e314c4..39469064f 100644
--- a/scripts/cmake/vcpkg_from_git.cmake
+++ b/scripts/cmake/vcpkg_from_git.cmake
@@ -41,7 +41,8 @@ include(vcpkg_execute_in_download_mode)
function(vcpkg_from_git)
set(oneValueArgs OUT_SOURCE_PATH URL REF)
set(multipleValuesArgs PATCHES)
- cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vdud "" "${oneValueArgs}" "${multipleValuesArgs}")
if(NOT DEFINED _vdud_OUT_SOURCE_PATH)
message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
diff --git a/scripts/cmake/vcpkg_from_github.cmake b/scripts/cmake/vcpkg_from_github.cmake
index c8710998b..514151bbd 100644
--- a/scripts/cmake/vcpkg_from_github.cmake
+++ b/scripts/cmake/vcpkg_from_github.cmake
@@ -68,7 +68,8 @@
function(vcpkg_from_github)
set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 HEAD_REF GITHUB_HOST AUTHORIZATION_TOKEN)
set(multipleValuesArgs PATCHES)
- cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vdud "" "${oneValueArgs}" "${multipleValuesArgs}")
if(NOT DEFINED _vdud_OUT_SOURCE_PATH)
message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
diff --git a/scripts/cmake/vcpkg_from_gitlab.cmake b/scripts/cmake/vcpkg_from_gitlab.cmake
index bb908e48a..c42269661 100644
--- a/scripts/cmake/vcpkg_from_gitlab.cmake
+++ b/scripts/cmake/vcpkg_from_gitlab.cmake
@@ -67,7 +67,8 @@ include(vcpkg_execute_in_download_mode)
function(vcpkg_from_gitlab)
set(oneValueArgs OUT_SOURCE_PATH GITLAB_URL USER REPO REF SHA512 HEAD_REF)
set(multipleValuesArgs PATCHES)
- cmake_parse_arguments(_vdud "" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vdud "" "${oneValueArgs}" "${multipleValuesArgs}")
if(NOT DEFINED _vdud_GITLAB_URL)
message(FATAL_ERROR "GITLAB_URL must be specified.")
diff --git a/scripts/cmake/vcpkg_from_sourceforge.cmake b/scripts/cmake/vcpkg_from_sourceforge.cmake
index 10dc8b623..280ad93f8 100644
--- a/scripts/cmake/vcpkg_from_sourceforge.cmake
+++ b/scripts/cmake/vcpkg_from_sourceforge.cmake
@@ -96,7 +96,8 @@ function(vcpkg_from_sourceforge)
set(booleanValueArgs DISABLE_SSL NO_REMOVE_ONE_LEVEL)
set(oneValueArgs OUT_SOURCE_PATH REPO REF SHA512 FILENAME WORKING_DIRECTORY)
set(multipleValuesArgs PATCHES)
- cmake_parse_arguments(_vdus "${booleanValueArgs}" "${oneValueArgs}" "${multipleValuesArgs}" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vdus "${booleanValueArgs}" "${oneValueArgs}" "${multipleValuesArgs}")
if(NOT DEFINED _vdus_OUT_SOURCE_PATH)
message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
diff --git a/scripts/cmake/vcpkg_install_gn.cmake b/scripts/cmake/vcpkg_install_gn.cmake
index 29a87a6cd..e71c8c173 100644
--- a/scripts/cmake/vcpkg_install_gn.cmake
+++ b/scripts/cmake/vcpkg_install_gn.cmake
@@ -20,7 +20,8 @@
## Note: includes must be handled separately
function(vcpkg_install_gn)
- cmake_parse_arguments(_vig "" "SOURCE_PATH" "TARGETS" ${ARGN})
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _vig "" "SOURCE_PATH" "TARGETS")
if(NOT DEFINED _vig_SOURCE_PATH)
message(FATAL_ERROR "SOURCE_PATH must be specified.")
diff --git a/scripts/cmake/vcpkg_install_msbuild.cmake b/scripts/cmake/vcpkg_install_msbuild.cmake
index 1a0d9513d..ee3247cfa 100644
--- a/scripts/cmake/vcpkg_install_msbuild.cmake
+++ b/scripts/cmake/vcpkg_install_msbuild.cmake
@@ -92,12 +92,13 @@
include(vcpkg_clean_msbuild)
function(vcpkg_install_msbuild)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
cmake_parse_arguments(
+ PARSE_ARGV 0
_csc
"USE_VCPKG_INTEGRATION;ALLOW_ROOT_INCLUDES;REMOVE_ROOT_INCLUDES;SKIP_CLEAN"
"SOURCE_PATH;PROJECT_SUBPATH;INCLUDES_SUBPATH;LICENSE_SUBPATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET"
"OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG"
- ${ARGN}
)
if(NOT DEFINED _csc_RELEASE_CONFIGURATION)
diff --git a/scripts/cmake/vcpkg_install_nmake.cmake b/scripts/cmake/vcpkg_install_nmake.cmake
index a8197751c..c4d600cc6 100644
--- a/scripts/cmake/vcpkg_install_nmake.cmake
+++ b/scripts/cmake/vcpkg_install_nmake.cmake
@@ -62,11 +62,11 @@
## * [freexl](https://github.com/Microsoft/vcpkg/blob/master/ports/freexl/portfile.cmake)
function(vcpkg_install_nmake)
- cmake_parse_arguments(_in
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 _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)