aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authornicole mazzuca <83086508+strega-nil-ms@users.noreply.github.com>2021-07-29 11:47:35 -0500
committerGitHub <noreply@github.com>2021-07-29 09:47:35 -0700
commit5304f826b5736eea0aa4749ce49c84539badaf4a (patch)
tree7107a64743a0c1d9b58c31351bfd6da0f18d4497 /scripts
parent8dddc6c899ce6fdbeab38b525a31e7f23cb2d5bb (diff)
downloadvcpkg-5304f826b5736eea0aa4749ce49c84539badaf4a.tar.gz
vcpkg-5304f826b5736eea0aa4749ce49c84539badaf4a.zip
[rollup] 2021-07-26 (#19157)
* [rollup:2021-07-26 1/6] PR #18783 (@strega-nil) [scripts-audit] vcpkg_copy_tools and friends * [rollup:2021-07-26 2/6] PR #18898 (@dg0yt) [vcpkg] Fix toolchain compatibility with cmake < 3.15 * [rollup:2021-07-26 3/6] PR #18980 (@strega-nil) [cmake-guidelines] Minor update, for `if()` * [rollup:2021-07-26 4/6] PR #18981 (@strega-nil) [scripts-audit] vcpkg_check_linkage * [rollup:2021-07-26 5/6] PR #19158 (@Hoikas) [vcpkg.cmake] Fix variable case. * [rollup:2021-07-26 6/6] PR #18839 [scripts-audit] z_vcpkg_get_cmake_vars Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
Diffstat (limited to 'scripts')
-rw-r--r--scripts/buildsystems/vcpkg.cmake51
-rwxr-xr-xscripts/cmake/vcpkg_build_make.cmake7
-rw-r--r--scripts/cmake/vcpkg_check_linkage.cmake32
-rw-r--r--scripts/cmake/vcpkg_clean_executables_in_bin.cmake53
-rw-r--r--scripts/cmake/vcpkg_configure_cmake.cmake27
-rw-r--r--scripts/cmake/vcpkg_configure_make.cmake7
-rw-r--r--scripts/cmake/vcpkg_configure_meson.cmake7
-rw-r--r--scripts/cmake/vcpkg_copy_pdbs.cmake24
-rw-r--r--scripts/cmake/vcpkg_copy_tool_dependencies.cmake46
-rw-r--r--scripts/cmake/vcpkg_copy_tools.cmake40
-rw-r--r--scripts/cmake/vcpkg_internal_get_cmake_vars.cmake68
-rw-r--r--scripts/cmake/z_vcpkg_get_cmake_vars.cmake65
-rw-r--r--scripts/ports.cmake2
13 files changed, 217 insertions, 212 deletions
diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake
index ff0873457..e59779e4e 100644
--- a/scripts/buildsystems/vcpkg.cmake
+++ b/scripts/buildsystems/vcpkg.cmake
@@ -385,39 +385,24 @@ set(_VCPKG_INSTALLED_DIR "${VCPKG_INSTALLED_DIR}"
CACHE PATH
"The directory which contains the installed libraries for each triplet" FORCE)
-if(VCPKG_PREFER_SYSTEM_LIBS)
- set(Z_VCPKG_PATH_LIST_OP APPEND)
-else()
- set(Z_VCPKG_PATH_LIST_OP PREPEND)
-endif()
-
-if(CMAKE_BUILD_TYPE MATCHES "^[Dd][Ee][Bb][Uu][Gg]$" OR NOT DEFINED CMAKE_BUILD_TYPE) #Debug build: Put Debug paths before Release paths.
- list(${Z_VCPKG_PATH_LIST_OP} CMAKE_PREFIX_PATH
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug"
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}"
- )
- list(${Z_VCPKG_PATH_LIST_OP} CMAKE_LIBRARY_PATH
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/manual-link"
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/manual-link"
- )
- list(${Z_VCPKG_PATH_LIST_OP} CMAKE_FIND_ROOT_PATH
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug"
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}"
- )
-else() #Release build: Put Release paths before Debug paths. Debug Paths are required so that CMake generates correct info in autogenerated target files.
- list(${Z_VCPKG_PATH_LIST_OP} CMAKE_PREFIX_PATH
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}"
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug"
- )
- list(${Z_VCPKG_PATH_LIST_OP} CMAKE_LIBRARY_PATH
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/manual-link"
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/manual-link"
+function(z_vcpkg_add_vcpkg_to_cmake_path list suffix)
+ set(vcpkg_paths
+ "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}${suffix}"
+ "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug${suffix}"
)
- list(${Z_VCPKG_PATH_LIST_OP} CMAKE_FIND_ROOT_PATH
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}"
- "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug"
- )
-endif()
+ if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE MATCHES "^[Dd][Ee][Bb][Uu][Gg]$")
+ list(REVERSE vcpkg_paths) # Debug build: Put Debug paths before Release paths.
+ endif()
+ if(VCPKG_PREFER_SYSTEM_LIBS)
+ list(APPEND "${list}" "${vcpkg_paths}")
+ else()
+ list(INSERT "${list}" 0 "${vcpkg_paths}") # CMake 3.15 is required for list(PREPEND ...).
+ endif()
+ set("${list}" "${${list}}" PARENT_SCOPE)
+endfunction()
+z_vcpkg_add_vcpkg_to_cmake_path(CMAKE_PREFIX_PATH "")
+z_vcpkg_add_vcpkg_to_cmake_path(CMAKE_LIBRARY_PATH "/lib/manual-link")
+z_vcpkg_add_vcpkg_to_cmake_path(CMAKE_FIND_ROOT_PATH "")
# If one CMAKE_FIND_ROOT_PATH_MODE_* variables is set to ONLY, to make sure that ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}
# and ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug are searched, it is not sufficient to just add them to CMAKE_FIND_ROOT_PATH,
@@ -692,7 +677,7 @@ if(X_VCPKG_APPLOCAL_DEPS_INSTALL)
list(APPEND parsed_targets "${arg}")
endif()
- if(last_command STREQUAL "DESTINATION" AND (MODIFIER STREQUAL "" OR MODIFIER STREQUAL "RUNTIME"))
+ if(last_command STREQUAL "DESTINATION" AND (modifier STREQUAL "" OR modifier STREQUAL "RUNTIME"))
set(destination "${arg}")
endif()
if(last_command STREQUAL "COMPONENT")
diff --git a/scripts/cmake/vcpkg_build_make.cmake b/scripts/cmake/vcpkg_build_make.cmake
index dd845bde4..6bd84c5ad 100755
--- a/scripts/cmake/vcpkg_build_make.cmake
+++ b/scripts/cmake/vcpkg_build_make.cmake
@@ -51,11 +51,8 @@ You can use the alias [`vcpkg_install_make()`](vcpkg_install_make.md) function i
#]===]
function(vcpkg_build_make)
- if(NOT _VCPKG_CMAKE_VARS_FILE)
- # vcpkg_build_make called without using vcpkg_configure_make before
- vcpkg_internal_get_cmake_vars(OUTPUT_FILE _VCPKG_CMAKE_VARS_FILE)
- endif()
- include("${_VCPKG_CMAKE_VARS_FILE}")
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ include("${cmake_vars_file}")
# 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;SUBPATH;MAKEFILE;INSTALL_TARGET" "")
diff --git a/scripts/cmake/vcpkg_check_linkage.cmake b/scripts/cmake/vcpkg_check_linkage.cmake
index 97e29bad7..f2e9fe10a 100644
--- a/scripts/cmake/vcpkg_check_linkage.cmake
+++ b/scripts/cmake/vcpkg_check_linkage.cmake
@@ -35,24 +35,38 @@ This command will either alter the settings for `VCPKG_LIBRARY_LINKAGE` or fail,
#]===]
function(vcpkg_check_linkage)
- cmake_parse_arguments(_csc "ONLY_STATIC_LIBRARY;ONLY_DYNAMIC_LIBRARY;ONLY_DYNAMIC_CRT;ONLY_STATIC_CRT" "" "" ${ARGN})
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ONLY_STATIC_LIBRARY;ONLY_DYNAMIC_LIBRARY;ONLY_DYNAMIC_CRT;ONLY_STATIC_CRT"
+ ""
+ ""
+ )
- if(_csc_ONLY_STATIC_LIBRARY AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(arg_ONLY_STATIC_LIBRARY AND arg_ONLY_DYNAMIC_LIBRARY)
+ message(FATAL_ERROR "Requesting both ONLY_STATIC_LIBRARY and ONLY_DYNAMIC_LIBRARY; this is an error.")
+ endif()
+ if(arg_ONLY_STATIC_CRT AND arg_ONLY_DYNAMIC_CRT)
+ message(FATAL_ERROR "Requesting both ONLY_STATIC_CRT and ONLY_DYNAMIC_CRT; this is an error.")
+ endif()
+
+ if(arg_ONLY_STATIC_LIBRARY AND "${VCPKG_LIBRARY_LINKAGE}" STREQUAL "dynamic")
message(STATUS "Note: ${PORT} only supports static library linkage. Building static library.")
set(VCPKG_LIBRARY_LINKAGE static PARENT_SCOPE)
- endif()
- if(_csc_ONLY_DYNAMIC_LIBRARY AND VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ elseif(arg_ONLY_DYNAMIC_LIBRARY AND "${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static")
message(STATUS "Note: ${PORT} only supports dynamic library linkage. Building dynamic library.")
- if(VCPKG_CRT_LINKAGE STREQUAL "static")
- message(FATAL_ERROR "Refusing to build unexpected dynamic library against the static CRT. If this is desired, please configure your triplet to directly request this configuration.")
+ if("${VCPKG_CRT_LINKAGE}" STREQUAL "static")
+ message(FATAL_ERROR "Refusing to build unexpected dynamic library against the static CRT.
+ If this is desired, please configure your triplet to directly request this configuration.")
endif()
set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE)
endif()
- if(_csc_ONLY_DYNAMIC_CRT AND VCPKG_CRT_LINKAGE STREQUAL "static")
+ if(arg_ONLY_DYNAMIC_CRT AND "${VCPKG_CRT_LINKAGE}" STREQUAL "static")
message(FATAL_ERROR "${PORT} only supports dynamic crt linkage")
- endif()
- if(_csc_ONLY_STATIC_CRT AND VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ elseif(arg_ONLY_STATIC_CRT AND "${VCPKG_CRT_LINKAGE}" STREQUAL "dynamic")
message(FATAL_ERROR "${PORT} only supports static crt linkage")
endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_clean_executables_in_bin.cmake b/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
index 077e23cc3..e1cea3a95 100644
--- a/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
+++ b/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
@@ -21,15 +21,35 @@ Generally, there is no need to call this function manually. Instead, pass an ext
* [czmq](https://github.com/microsoft/vcpkg/blob/master/ports/czmq/portfile.cmake)
#]===]
+function(z_vcpkg_clean_executables_in_bin_remove_directory_if_empty directory)
+ if(NOT EXISTS "${directory}")
+ return()
+ endif()
+
+ if(NOT IS_DIRECTORY "${directory}")
+ message(FATAL_ERROR "${directory} must be a directory")
+ endif()
+
+ file(GLOB items "${directory}/*")
+ if("${items}" STREQUAL "")
+ file(REMOVE_RECURSE "${directory}")
+ endif()
+endfunction()
+
+
function(vcpkg_clean_executables_in_bin)
- # parse parameters such that semicolons in options arguments to COMMAND don't get erased
- cmake_parse_arguments(PARSE_ARGV 0 _vct "" "" "FILE_NAMES")
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "FILE_NAMES")
- if(NOT DEFINED _vct_FILE_NAMES)
+ if(NOT DEFINED arg_FILE_NAMES)
message(FATAL_ERROR "FILE_NAMES must be specified.")
endif()
- foreach(file_name IN LISTS _vct_FILE_NAMES)
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+
+ foreach(file_name IN LISTS arg_FILE_NAMES)
file(REMOVE
"${CURRENT_PACKAGES_DIR}/bin/${file_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}"
"${CURRENT_PACKAGES_DIR}/debug/bin/${file_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}"
@@ -38,27 +58,6 @@ function(vcpkg_clean_executables_in_bin)
)
endforeach()
- function(try_remove_empty_directory directory)
- if(NOT EXISTS "${directory}")
- return()
- endif()
-
- if(NOT IS_DIRECTORY "${directory}")
- message(FATAL_ERROR "${directory} is supposed to be an existing directory.")
- endif()
-
- # TODO:
- # For an empty directory,
- # file(GLOB items "${directory}" "${directory}/*")
- # will return a list with one item.
- file(GLOB items "${directory}/" "${directory}/*")
- list(LENGTH items items_count)
-
- if(${items_count} EQUAL 0)
- file(REMOVE_RECURSE "${directory}")
- endif()
- endfunction()
-
- try_remove_empty_directory("${CURRENT_PACKAGES_DIR}/bin")
- try_remove_empty_directory("${CURRENT_PACKAGES_DIR}/debug/bin")
+ z_vcpkg_clean_executables_in_bin_remove_directory_if_empty("${CURRENT_PACKAGES_DIR}/bin")
+ z_vcpkg_clean_executables_in_bin_remove_directory_if_empty("${CURRENT_PACKAGES_DIR}/debug/bin")
endfunction()
diff --git a/scripts/cmake/vcpkg_configure_cmake.cmake b/scripts/cmake/vcpkg_configure_cmake.cmake
index bce3f6af5..56bf9bd57 100644
--- a/scripts/cmake/vcpkg_configure_cmake.cmake
+++ b/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -72,16 +72,16 @@ This command supplies many common arguments to CMake. To see the full list, exam
#]===]
function(vcpkg_configure_cmake)
- if(Z_VCPKG_CMAKE_CONFIGURE_GUARD)
- message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_configure_cmake in the same port is unsupported.")
- endif()
-
cmake_parse_arguments(PARSE_ARGV 0 arg
- "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE;NO_CHARSET_FLAG;Z_VCPKG_IGNORE_UNUSED_VARIABLES"
+ "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE;NO_CHARSET_FLAG;Z_GET_CMAKE_VARS_USAGE"
"SOURCE_PATH;GENERATOR;LOGNAME"
"OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;MAYBE_UNUSED_VARIABLES"
)
+ if(NOT arg_Z_GET_CMAKE_VARS_USAGE AND Z_VCPKG_CMAKE_CONFIGURE_GUARD)
+ message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_configure_cmake in the same port is unsupported.")
+ endif()
+
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")
@@ -92,7 +92,12 @@ function(vcpkg_configure_cmake)
endif()
set(manually_specified_variables "")
- if(NOT arg_Z_VCPKG_IGNORE_UNUSED_VARIABLES)
+
+ if(arg_Z_GET_CMAKE_VARS_USAGE)
+ set(configuring_message "Getting CMake variables for ${TARGET_TRIPLET}")
+ else()
+ set(configuring_message "Configuring ${TARGET_TRIPLET}")
+
foreach(option IN LISTS arg_OPTIONS arg_OPTIONS_RELEASE arg_OPTIONS_DEBUG)
if(option MATCHES "^-D([^:=]*)[:=]")
list(APPEND manually_specified_variables "${CMAKE_MATCH_1}")
@@ -336,7 +341,7 @@ function(vcpkg_configure_cmake)
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure)
file(WRITE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure/build.ninja "${_contents}")
- message(STATUS "Configuring ${TARGET_TRIPLET}")
+ message(STATUS "${configuring_message}")
vcpkg_execute_required_process(
COMMAND ninja -v
WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure
@@ -348,7 +353,7 @@ function(vcpkg_configure_cmake)
"${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-err.log")
else()
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ message(STATUS "${configuring_message}-dbg")
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg)
vcpkg_execute_required_process(
COMMAND ${dbg_command}
@@ -361,7 +366,7 @@ function(vcpkg_configure_cmake)
endif()
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
+ message(STATUS "${configuring_message}-rel")
file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel)
vcpkg_execute_required_process(
COMMAND ${rel_command}
@@ -408,5 +413,7 @@ Please recheck them and remove the unnecessary options from the `vcpkg_configure
If these options should still be passed for whatever reason, please use the `MAYBE_UNUSED_VARIABLES` argument.")
endif()
- set(Z_VCPKG_CMAKE_GENERATOR "${GENERATOR}" PARENT_SCOPE)
+ if(NOT arg_Z_GET_CMAKE_VARS_USAGE)
+ set(Z_VCPKG_CMAKE_GENERATOR "${GENERATOR}" PARENT_SCOPE)
+ endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_configure_make.cmake b/scripts/cmake/vcpkg_configure_make.cmake
index 65d66daac..f9a042660 100644
--- a/scripts/cmake/vcpkg_configure_make.cmake
+++ b/scripts/cmake/vcpkg_configure_make.cmake
@@ -236,10 +236,9 @@ function(vcpkg_configure_make)
"SOURCE_PATH;PROJECT_SUBPATH;PRERUN_SHELL;BUILD_TRIPLET"
"OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;CONFIGURE_ENVIRONMENT_VARIABLES;CONFIG_DEPENDENT_ENVIRONMENT;ADDITIONAL_MSYS_PACKAGES"
)
- vcpkg_internal_get_cmake_vars(OUTPUT_FILE _VCPKG_CMAKE_VARS_FILE)
- set(_VCPKG_CMAKE_VARS_FILE "${_VCPKG_CMAKE_VARS_FILE}" PARENT_SCOPE)
- debug_message("Including cmake vars from: ${_VCPKG_CMAKE_VARS_FILE}")
- include("${_VCPKG_CMAKE_VARS_FILE}")
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ debug_message("Including cmake vars from: ${cmake_vars_file}")
+ include("${cmake_vars_file}")
if(DEFINED VCPKG_MAKE_BUILD_TRIPLET)
set(_csc_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling
endif()
diff --git a/scripts/cmake/vcpkg_configure_meson.cmake b/scripts/cmake/vcpkg_configure_meson.cmake
index 2ee8266b9..5bb34089c 100644
--- a/scripts/cmake/vcpkg_configure_meson.cmake
+++ b/scripts/cmake/vcpkg_configure_meson.cmake
@@ -356,10 +356,9 @@ function(vcpkg_configure_meson)
file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
- vcpkg_internal_get_cmake_vars(OUTPUT_FILE _VCPKG_CMAKE_VARS_FILE)
- set(_VCPKG_CMAKE_VARS_FILE "${_VCPKG_CMAKE_VARS_FILE}" PARENT_SCOPE)
- debug_message("Including cmake vars from: ${_VCPKG_CMAKE_VARS_FILE}")
- include("${_VCPKG_CMAKE_VARS_FILE}")
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ debug_message("Including cmake vars from: ${cmake_vars_file}")
+ include("${cmake_vars_file}")
vcpkg_find_acquire_program(PYTHON3)
get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
diff --git a/scripts/cmake/vcpkg_copy_pdbs.cmake b/scripts/cmake/vcpkg_copy_pdbs.cmake
index dd489db02..60335255a 100644
--- a/scripts/cmake/vcpkg_copy_pdbs.cmake
+++ b/scripts/cmake/vcpkg_copy_pdbs.cmake
@@ -27,15 +27,18 @@ This command should always be called by portfiles after they have finished rearr
function(vcpkg_copy_pdbs)
cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "" "BUILD_PATHS")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
if(NOT DEFINED arg_BUILD_PATHS)
- set(
- arg_BUILD_PATHS
+ set(arg_BUILD_PATHS
"${CURRENT_PACKAGES_DIR}/bin/*.dll"
"${CURRENT_PACKAGES_DIR}/debug/bin/*.dll"
)
endif()
- set(dlls_without_matching_pdbs)
+ set(dlls_without_matching_pdbs "")
if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
file(GLOB_RECURSE dlls ${arg_BUILD_PATHS})
@@ -44,17 +47,16 @@ function(vcpkg_copy_pdbs)
set(ENV{VSLANG} 1033)
foreach(dll IN LISTS dlls)
- execute_process(COMMAND dumpbin /PDBPATH ${dll}
+ execute_process(COMMAND dumpbin /PDBPATH "${dll}"
COMMAND findstr PDB
OUTPUT_VARIABLE pdb_line
ERROR_QUIET
RESULT_VARIABLE error_code
)
- if(NOT error_code AND pdb_line MATCHES "PDB file found at")
- string(REGEX MATCH [['.*']] pdb_path "${pdb_line}") # Extract the path which is in single quotes
- string(REPLACE "'" "" pdb_path "${pdb_path}") # Remove single quotes
- get_filename_component(dll_dir "${dll}" DIRECTORY)
+ if(error_code EQUAL "0" AND pdb_line MATCHES "PDB file found at.*'(.*)'")
+ set(pdb_path "${CMAKE_MATCH_1}")
+ cmake_path(GET dll PARENT_PATH dll_dir)
file(COPY "${pdb_path}" DESTINATION "${dll_dir}")
else()
list(APPEND dlls_without_matching_pdbs "${dll}")
@@ -63,10 +65,10 @@ function(vcpkg_copy_pdbs)
set(ENV{VSLANG} "${vslang_backup}")
- list(LENGTH dlls_without_matching_pdbs unmatched_dlls_length)
- if(unmatched_dlls_length GREATER 0)
+ if(NOT unmatched_dlls_length STREQUAL "")
list(JOIN dlls_without_matching_pdbs "\n " message)
- message(WARNING "Could not find a matching pdb file for:${message}\n")
+ message(WARNING "Could not find a matching pdb file for:
+ ${message}\n")
endif()
endif()
diff --git a/scripts/cmake/vcpkg_copy_tool_dependencies.cmake b/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
index 0cb0bbcef..856a2d7fe 100644
--- a/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
+++ b/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
@@ -19,29 +19,31 @@ This command should always be called by portfiles after they have finished rearr
* [fltk](https://github.com/Microsoft/vcpkg/blob/master/ports/fltk/portfile.cmake)
#]===]
-function(vcpkg_copy_tool_dependencies TOOL_DIR)
- if (VCPKG_TARGET_IS_WINDOWS)
- find_program(PWSH_EXE pwsh)
- if (NOT PWSH_EXE)
- if(UNIX AND NOT CYGWIN)
- message(FATAL_ERROR "Could not find PowerShell Core; install PowerShell Core as described here: https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux")
- endif()
+function(z_vcpkg_copy_tool_dependencies_search tool_dir path_to_search)
+ file(GLOB tools "${tool_dir}/*.exe" "${tool_dir}/*.dll" "${tool_dir}/*.pyd")
+ foreach(tool IN LISTS tools)
+ vcpkg_execute_required_process(
+ COMMAND "${Z_VCPKG_POWERSHELL_CORE}" -noprofile -executionpolicy Bypass -nologo
+ -file "${SCRIPTS}/buildsystems/msbuild/applocal.ps1"
+ -targetBinary "${tool}"
+ -installedDir "${path_to_search}"
+ WORKING_DIRECTORY "${VCPKG_ROOT_DIR}"
+ LOGNAME copy-tool-dependencies
+ )
+ endforeach()
+endfunction()
+
+function(vcpkg_copy_tool_dependencies tool_dir)
+ if(ARGC GREATER 1)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${ARGN}")
+ endif()
+
+ if(VCPKG_TARGET_IS_WINDOWS)
+ find_program(Z_VCPKG_POWERSHELL_CORE pwsh)
+ if (NOT Z_VCPKG_POWERSHELL_CORE)
message(FATAL_ERROR "Could not find PowerShell Core; please open an issue to report this.")
endif()
- macro(search_for_dependencies PATH_TO_SEARCH)
- file(GLOB TOOLS "${TOOL_DIR}/*.exe" "${TOOL_DIR}/*.dll" "${TOOL_DIR}/*.pyd")
- foreach(TOOL IN LISTS TOOLS)
- vcpkg_execute_required_process(
- COMMAND "${PWSH_EXE}" -noprofile -executionpolicy Bypass -nologo
- -file "${SCRIPTS}/buildsystems/msbuild/applocal.ps1"
- -targetBinary "${TOOL}"
- -installedDir "${PATH_TO_SEARCH}"
- WORKING_DIRECTORY "${VCPKG_ROOT_DIR}"
- LOGNAME copy-tool-dependencies
- )
- endforeach()
- endmacro()
- search_for_dependencies("${CURRENT_PACKAGES_DIR}/bin")
- search_for_dependencies("${CURRENT_INSTALLED_DIR}/bin")
+ z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_PACKAGES_DIR}/bin")
+ z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_INSTALLED_DIR}/bin")
endif()
endfunction()
diff --git a/scripts/cmake/vcpkg_copy_tools.cmake b/scripts/cmake/vcpkg_copy_tools.cmake
index 18ddc3715..ef3259840 100644
--- a/scripts/cmake/vcpkg_copy_tools.cmake
+++ b/scripts/cmake/vcpkg_copy_tools.cmake
@@ -33,39 +33,43 @@ Auto clean executables in `${CURRENT_PACKAGES_DIR}/bin` and `${CURRENT_PACKAGES_
#]===]
function(vcpkg_copy_tools)
- # 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;DESTINATION" "TOOL_NAMES")
+ cmake_parse_arguments(PARSE_ARGV 0 arg "AUTO_CLEAN" "SEARCH_DIR;DESTINATION" "TOOL_NAMES")
- if(NOT DEFINED _vct_TOOL_NAMES)
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_TOOL_NAMES)
message(FATAL_ERROR "TOOL_NAMES must be specified.")
endif()
- if(NOT DEFINED _vct_DESTINATION)
- set(_vct_DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+ if(NOT DEFINED arg_DESTINATION)
+ set(arg_DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
endif()
- if(NOT DEFINED _vct_SEARCH_DIR)
- set(_vct_SEARCH_DIR "${CURRENT_PACKAGES_DIR}/bin")
- elseif(NOT IS_DIRECTORY ${_vct_SEARCH_DIR})
- message(FATAL_ERROR "SEARCH_DIR ${_vct_SEARCH_DIR} is supposed to be a directory.")
+ if(NOT DEFINED arg_SEARCH_DIR)
+ set(arg_SEARCH_DIR "${CURRENT_PACKAGES_DIR}/bin")
+ elseif(NOT IS_DIRECTORY "${arg_SEARCH_DIR}")
+ message(FATAL_ERROR "SEARCH_DIR (${arg_SEARCH_DIR}) must be a directory")
endif()
- foreach(tool_name IN LISTS _vct_TOOL_NAMES)
- set(tool_path "${_vct_SEARCH_DIR}/${tool_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
- set(tool_pdb "${_vct_SEARCH_DIR}/${tool_name}.pdb")
+ foreach(tool_name IN LISTS arg_TOOL_NAMES)
+ set(tool_path "${arg_SEARCH_DIR}/${tool_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
+ set(tool_pdb "${arg_SEARCH_DIR}/${tool_name}.pdb")
if(EXISTS "${tool_path}")
- file(COPY "${tool_path}" DESTINATION "${_vct_DESTINATION}")
+ file(COPY "${tool_path}" DESTINATION "${arg_DESTINATION}")
else()
- message(FATAL_ERROR "Couldn't find this tool: ${tool_path}.")
+ message(FATAL_ERROR "Couldn't find tool \"${tool_name}\":
+ \"${tool_path}\" does not exist")
endif()
if(EXISTS "${tool_pdb}")
- file(COPY "${tool_pdb}" DESTINATION "${_vct_DESTINATION}")
+ file(COPY "${tool_pdb}" DESTINATION "${arg_DESTINATION}")
endif()
endforeach()
- if(_vct_AUTO_CLEAN)
- vcpkg_clean_executables_in_bin(FILE_NAMES ${_vct_TOOL_NAMES})
+ if(arg_AUTO_CLEAN)
+ vcpkg_clean_executables_in_bin(FILE_NAMES ${arg_TOOL_NAMES})
endif()
- vcpkg_copy_tool_dependencies("${_vct_DESTINATION}")
+ vcpkg_copy_tool_dependencies("${arg_DESTINATION}")
endfunction()
diff --git a/scripts/cmake/vcpkg_internal_get_cmake_vars.cmake b/scripts/cmake/vcpkg_internal_get_cmake_vars.cmake
deleted file mode 100644
index 030d74120..000000000
--- a/scripts/cmake/vcpkg_internal_get_cmake_vars.cmake
+++ /dev/null
@@ -1,68 +0,0 @@
-#[===[.md:
-# vcpkg_internal_get_cmake_vars
-
-**Only for internal use in vcpkg helpers. Behavior and arguments will change without notice.**
-Runs a cmake configure with a dummy project to extract certain cmake variables
-
-## Usage
-```cmake
-vcpkg_internal_get_cmake_vars(
- [OUTPUT_FILE <output_file_with_vars>]
- [OPTIONS <-DUSE_THIS_IN_ALL_BUILDS=1>...]
-)
-```
-
-## Parameters
-### OPTIONS
-Additional options to pass to the test configure call
-
-### OUTPUT_FILE
-Variable to return the path to the generated cmake file with the detected `CMAKE_` variables set as `VCKPG_DETECTED_`
-
-## Notes
-If possible avoid usage in portfiles.
-
-## Examples
-
-* [vcpkg_configure_make](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_configure_make.cmake)
-#]===]
-
-function(vcpkg_internal_get_cmake_vars)
- cmake_parse_arguments(PARSE_ARGV 0 _gcv "" "OUTPUT_FILE" "OPTIONS")
-
- if(_gcv_UNPARSED_ARGUMENTS)
- message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed unparsed arguments: '${_gcv_UNPARSED_ARGUMENTS}'")
- endif()
-
- if(NOT _gcv_OUTPUT_FILE)
- message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} requires parameter OUTPUT_FILE!")
- endif()
-
- if(${_gcv_OUTPUT_FILE})
- debug_message("OUTPUT_FILE ${${_gcv_OUTPUT_FILE}}")
- else()
- set(DEFAULT_OUT "${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}.cmake.log") # So that the file gets included in CI artifacts.
- set(${_gcv_OUTPUT_FILE} "${DEFAULT_OUT}" PARENT_SCOPE)
- set(${_gcv_OUTPUT_FILE} "${DEFAULT_OUT}")
- endif()
-
- vcpkg_configure_cmake(
- SOURCE_PATH "${SCRIPTS}/get_cmake_vars"
- OPTIONS ${_gcv_OPTIONS} "-DVCPKG_BUILD_TYPE=${VCPKG_BUILD_TYPE}"
- OPTIONS_DEBUG "-DVCPKG_OUTPUT_FILE:PATH=${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-dbg.cmake.log"
- OPTIONS_RELEASE "-DVCPKG_OUTPUT_FILE:PATH=${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-rel.cmake.log"
- PREFER_NINJA
- LOGNAME get-cmake-vars-${TARGET_TRIPLET}
- Z_VCPKG_IGNORE_UNUSED_VARIABLES
- )
-
- set(_include_string)
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- string(APPEND _include_string "include(\"${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-rel.cmake.log\")\n")
- endif()
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- string(APPEND _include_string "include(\"${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-dbg.cmake.log\")\n")
- endif()
- file(WRITE "${${_gcv_OUTPUT_FILE}}" "${_include_string}")
-
-endfunction()
diff --git a/scripts/cmake/z_vcpkg_get_cmake_vars.cmake b/scripts/cmake/z_vcpkg_get_cmake_vars.cmake
new file mode 100644
index 000000000..f50b1db26
--- /dev/null
+++ b/scripts/cmake/z_vcpkg_get_cmake_vars.cmake
@@ -0,0 +1,65 @@
+#[===[.md:
+# z_vcpkg_get_cmake_vars
+
+**Only for internal use in vcpkg helpers. Behavior and arguments will change without notice.**
+Runs a cmake configure with a dummy project to extract certain cmake variables
+
+## Usage
+```cmake
+z_vcpkg_get_cmake_vars(<out-var>)
+```
+
+`z_vcpkg_get_cmake_vars(cmake_vars_file)` sets `<out-var>` to
+a path to a generated CMake file, with the detected `CMAKE_*` variables
+re-exported as `VCPKG_DETECTED_*`.
+
+## Notes
+Avoid usage in portfiles.
+
+All calls to `z_vcpkg_get_cmake_vars` will result in the same output file;
+the output file is not generated multiple times.
+
+## Examples
+
+* [vcpkg_configure_make](https://github.com/Microsoft/vcpkg/blob/master/scripts/cmake/vcpkg_configure_make.cmake)
+
+### Basic Usage
+
+```cmake
+z_vcpkg_get_cmake_vars(cmake_vars_file)
+include("${cmake_vars_file}")
+message(STATUS "detected CXX flags: ${VCPKG_DETECTED_CXX_FLAGS}")
+```
+#]===]
+
+function(z_vcpkg_get_cmake_vars out_file)
+ cmake_parse_arguments(PARSE_ARGV 1 arg "" "" "")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED CACHE{Z_VCPKG_GET_CMAKE_VARS_FILE})
+ set(Z_VCPKG_GET_CMAKE_VARS_FILE "${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}.cmake.log"
+ CACHE PATH "The file to include to access the CMake variables from a generated project.")
+ vcpkg_configure_cmake(
+ SOURCE_PATH "${SCRIPTS}/get_cmake_vars"
+ OPTIONS_DEBUG "-DVCPKG_OUTPUT_FILE:PATH=${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-dbg.cmake.log"
+ OPTIONS_RELEASE "-DVCPKG_OUTPUT_FILE:PATH=${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-rel.cmake.log"
+ PREFER_NINJA
+ LOGNAME get-cmake-vars-${TARGET_TRIPLET}
+ Z_GET_CMAKE_VARS_USAGE # ignore vcpkg_cmake_configure, be quiet, don't set variables...
+ )
+
+ set(include_string "")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ string(APPEND include_string "include(\"\${CMAKE_CURRENT_LIST_DIR}/cmake-vars-${TARGET_TRIPLET}-rel.cmake.log\")\n")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ string(APPEND include_string "include(\"\${CMAKE_CURRENT_LIST_DIR}/cmake-vars-${TARGET_TRIPLET}-dbg.cmake.log\")\n")
+ endif()
+ file(WRITE "${Z_VCPKG_GET_CMAKE_VARS_FILE}" "${include_string}")
+ endif()
+
+ set("${out_file}" "${Z_VCPKG_GET_CMAKE_VARS_FILE}" PARENT_SCOPE)
+endfunction()
diff --git a/scripts/ports.cmake b/scripts/ports.cmake
index 98a6e2352..c44463411 100644
--- a/scripts/ports.cmake
+++ b/scripts/ports.cmake
@@ -129,13 +129,13 @@ if(CMD MATCHES "^BUILD$")
include("${SCRIPTS}/cmake/vcpkg_install_msbuild.cmake")
include("${SCRIPTS}/cmake/vcpkg_install_nmake.cmake")
include("${SCRIPTS}/cmake/vcpkg_install_qmake.cmake")
- include("${SCRIPTS}/cmake/vcpkg_internal_get_cmake_vars.cmake")
include("${SCRIPTS}/cmake/vcpkg_list.cmake")
include("${SCRIPTS}/cmake/vcpkg_replace_string.cmake")
include("${SCRIPTS}/cmake/vcpkg_test_cmake.cmake")
include("${SCRIPTS}/cmake/z_vcpkg_apply_patches.cmake")
include("${SCRIPTS}/cmake/z_vcpkg_forward_output_variable.cmake")
+ include("${SCRIPTS}/cmake/z_vcpkg_get_cmake_vars.cmake")
include("${SCRIPTS}/cmake/z_vcpkg_prettify_command_line.cmake")
include("${CURRENT_PORT_DIR}/portfile.cmake")