aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/scripts/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/scripts/cmake')
-rw-r--r--vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch12
-rw-r--r--vcpkg/scripts/cmake/execute_process.cmake12
-rw-r--r--vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake662
-rw-r--r--vcpkg/scripts/cmake/vcpkg_add_to_path.cmake10
-rw-r--r--vcpkg/scripts/cmake/vcpkg_apply_patches.cmake17
-rw-r--r--vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake35
-rw-r--r--vcpkg/scripts/cmake/vcpkg_build_cmake.cmake95
-rw-r--r--vcpkg/scripts/cmake/vcpkg_build_make.cmake193
-rw-r--r--vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake87
-rw-r--r--vcpkg/scripts/cmake/vcpkg_build_ninja.cmake30
-rwxr-xr-xvcpkg/scripts/cmake/vcpkg_build_nmake.cmake166
-rw-r--r--vcpkg/scripts/cmake/vcpkg_build_qmake.cmake82
-rw-r--r--vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake8
-rw-r--r--vcpkg/scripts/cmake/vcpkg_check_features.cmake96
-rw-r--r--vcpkg/scripts/cmake/vcpkg_check_linkage.cmake47
-rw-r--r--vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake46
-rw-r--r--vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake9
-rw-r--r--vcpkg/scripts/cmake/vcpkg_common_definitions.cmake220
-rw-r--r--vcpkg/scripts/cmake/vcpkg_common_functions.cmake3
-rw-r--r--vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake372
-rw-r--r--vcpkg/scripts/cmake/vcpkg_configure_gn.cmake52
-rw-r--r--vcpkg/scripts/cmake/vcpkg_configure_make.cmake917
-rw-r--r--vcpkg/scripts/cmake/vcpkg_configure_meson.cmake462
-rw-r--r--vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake167
-rw-r--r--vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake49
-rw-r--r--vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake45
-rw-r--r--vcpkg/scripts/cmake/vcpkg_copy_tools.cmake49
-rw-r--r--vcpkg/scripts/cmake/vcpkg_download_distfile.cmake140
-rw-r--r--vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake83
-rw-r--r--vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake141
-rw-r--r--vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake46
-rw-r--r--vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake144
-rw-r--r--vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake71
-rw-r--r--vcpkg/scripts/cmake/vcpkg_extract_archive.cmake45
-rw-r--r--vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake158
-rw-r--r--vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake11
-rw-r--r--vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake78
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake9
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake21
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake23
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake31
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake8
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake11
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake20
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake11
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake15
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake49
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake55
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake8
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake13
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake18
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake13
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake52
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake11
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake44
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake13
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake66
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake27
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake41
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake8
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake9
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake14
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake12
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake236
-rw-r--r--vcpkg/scripts/cmake/vcpkg_find_fortran.cmake212
-rw-r--r--vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake186
-rw-r--r--vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake207
-rw-r--r--vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake93
-rw-r--r--vcpkg/scripts/cmake/vcpkg_from_git.cmake189
-rw-r--r--vcpkg/scripts/cmake/vcpkg_from_github.cmake136
-rw-r--r--vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake128
-rw-r--r--vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake46
-rw-r--r--vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake7
-rw-r--r--vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake7
-rw-r--r--vcpkg/scripts/cmake/vcpkg_host_path_list.cmake64
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_cmake.cmake23
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_copyright.cmake42
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_gn.cmake118
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_make.cmake6
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_meson.cmake71
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake163
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_nmake.cmake57
-rw-r--r--vcpkg/scripts/cmake/vcpkg_install_qmake.cmake45
-rw-r--r--vcpkg/scripts/cmake/vcpkg_list.cmake165
-rw-r--r--vcpkg/scripts/cmake/vcpkg_minimum_required.cmake35
-rw-r--r--vcpkg/scripts/cmake/vcpkg_replace_string.cmake20
-rw-r--r--vcpkg/scripts/cmake/vcpkg_test_cmake.cmake4
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake45
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake8
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake131
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake243
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake12
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake36
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake38
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake20
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake15
-rw-r--r--vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake59
97 files changed, 8329 insertions, 0 deletions
diff --git a/vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch b/vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch
new file mode 100644
index 0000000..c3666ec
--- /dev/null
+++ b/vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch
@@ -0,0 +1,12 @@
+diff --git a/usr/share/automake-1.16/compile b/usr/share/automake-1.16/compile
+index 2078fc833..dfc946593 100755
+--- a/usr/share/automake-1.16/compile
++++ b/usr/share/automake-1.16/compile
+@@ -256,6 +256,7 @@ EOF
+ exit $?
+ ;;
+ cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
++ clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-cl.exe | \
+ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+ func_cl_wrapper "$@" # Doesn't return...
+ ;;
diff --git a/vcpkg/scripts/cmake/execute_process.cmake b/vcpkg/scripts/cmake/execute_process.cmake
new file mode 100644
index 0000000..a338dda
--- /dev/null
+++ b/vcpkg/scripts/cmake/execute_process.cmake
@@ -0,0 +1,12 @@
+if (NOT DEFINED Z_VCPKG_OVERRIDEN_EXECUTE_PROCESS)
+ set(Z_VCPKG_OVERRIDEN_EXECUTE_PROCESS ON)
+
+ if (DEFINED VCPKG_DOWNLOAD_MODE)
+ function(execute_process)
+ message(FATAL_ERROR "This command cannot be executed in Download Mode.\nHalting portfile execution.\n")
+ endfunction()
+ set(Z_VCPKG_EXECUTE_PROCESS_NAME "_execute_process")
+ else()
+ set(Z_VCPKG_EXECUTE_PROCESS_NAME "execute_process")
+ endif()
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake b/vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake
new file mode 100644
index 0000000..95684bf
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake
@@ -0,0 +1,662 @@
+# Full mirror list: https://github.com/msys2/MSYS2-packages/blob/master/pacman-mirrors/mirrorlist.msys
+set(Z_VCPKG_ACQUIRE_MSYS_MIRRORS
+ # Alternative primary
+ "https://repo.msys2.org/"
+ # Tier 1
+ "https://mirror.yandex.ru/mirrors/msys2/"
+ "https://mirrors.tuna.tsinghua.edu.cn/msys2/"
+ "https://mirrors.ustc.edu.cn/msys2/"
+ "https://mirror.selfnet.de/msys2/"
+)
+
+# Downloads the given package
+function(z_vcpkg_acquire_msys_download_package out_archive)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "URL;SHA512;FILENAME" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_download_package passed extra args: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ string(REPLACE "https://repo.msys2.org/" "https://mirror.msys2.org/" all_urls "${arg_URL}")
+ foreach(mirror IN LISTS Z_VCPKG_ACQUIRE_MSYS_MIRRORS)
+ string(REPLACE "https://mirror.msys2.org/" "${mirror}" mirror_url "${arg_URL}")
+ list(APPEND all_urls "${mirror_url}")
+ endforeach()
+
+ vcpkg_download_distfile(msys_archive
+ URLS ${all_urls}
+ SHA512 "${arg_SHA512}"
+ FILENAME "${arg_FILENAME}"
+ QUIET
+ )
+ set("${out_archive}" "${msys_archive}" PARENT_SCOPE)
+endfunction()
+
+# Declares a package
+# Writes to the following cache variables:
+# - Z_VCPKG_MSYS_PACKAGES_AVAILABLE
+# - Z_VCPKG_MSYS_${arg_NAME}_URL
+# - Z_VCPKG_MSYS_${arg_NAME}_SHA512
+# - Z_VCPKG_MSYS_${arg_NAME}_FILENAME
+# - Z_VCPKG_MSYS_${arg_NAME}_DEPS
+# - Z_VCPKG_MSYS_${arg_NAME}_PATCHES
+# - Z_VCPKG_MSYS_${arg_NAME}_DIRECT
+# - Z_VCPKG_MSYS_${arg_NAME}_PROVIDES
+# - Z_VCPKG_MSYS_${alias}_PROVIDED_BY
+function(z_vcpkg_acquire_msys_declare_package)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "DIRECT" "NAME;URL;SHA512" "DEPS;PATCHES;PROVIDES")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_declare_package passed extra args: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ foreach(required_arg IN ITEMS URL SHA512)
+ if(NOT DEFINED arg_${required_arg})
+ message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_declare_package requires argument: ${required_arg}")
+ endif()
+ endforeach()
+
+ if(arg_DIRECT)
+ if(NOT arg_NAME)
+ message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_declare_package requires argument: NAME")
+ endif()
+ get_filename_component(filename "${arg_URL}" NAME)
+ else()
+ if(NOT arg_URL MATCHES [[^https://mirror\.msys2\.org/.*/(([^/]*)-[^-/]+-[^-/]+-[^-/]+\.pkg\.tar\.(xz|zst))$]])
+ message(FATAL_ERROR "internal error: regex does not match supplied URL to vcpkg_acquire_msys: ${arg_URL}")
+ endif()
+ set(filename "msys2-${CMAKE_MATCH_1}")
+ if(NOT DEFINED arg_NAME)
+ set(arg_NAME "${CMAKE_MATCH_2}")
+ endif()
+ if(Z_VCPKG_MSYS_${arg_NAME}_DIRECT)
+ return()
+ endif()
+ if(arg_NAME IN_LIST Z_VCPKG_MSYS_PACKAGES_AVAILABLE)
+ message(FATAL_ERROR "Redeclaration of package '${arg_NAME}'")
+ endif()
+ endif()
+
+ list(APPEND Z_VCPKG_MSYS_PACKAGES_AVAILABLE "${arg_NAME}")
+ set(Z_VCPKG_MSYS_PACKAGES_AVAILABLE "${Z_VCPKG_MSYS_PACKAGES_AVAILABLE}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_URL "${arg_URL}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_SHA512 "${arg_SHA512}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_FILENAME "${filename}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_DEPS "${arg_DEPS}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_PATCHES "${arg_PATCHES}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_DIRECT "${arg_DIRECT}" CACHE INTERNAL "")
+ set(Z_VCPKG_MSYS_${arg_NAME}_PROVIDES "${arg_PROVIDES}" CACHE INTERNAL "")
+ foreach(name IN LISTS arg_PROVIDES)
+ set(Z_VCPKG_MSYS_${name}_PROVIDED_BY "${arg_NAME}" CACHE INTERNAL "")
+ endforeach()
+endfunction()
+
+# Collects all required packages to satisfy the given input set
+# Writes to the following cache variables:
+# - Z_VCPKG_MSYS_<name>_ARCHIVE
+function(z_vcpkg_acquire_msys_download_packages)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "OUT_UNKNOWN;OUT_RESOLVED" "PACKAGES")
+ set(backlog "${arg_PACKAGES}")
+ list(REMOVE_DUPLICATES backlog)
+
+ list(FILTER arg_PACKAGES EXCLUDE REGEX "^mingw64")
+ if(NOT arg_PACKAGES STREQUAL "" AND NOT "msys2-runtime" IN_LIST arg_PACKAGES)
+ list(APPEND backlog "msys2-runtime")
+ endif()
+
+ set(unknown "")
+ set(resolved "")
+ set(need_msys_runtime 0)
+ while(NOT backlog STREQUAL "")
+ list(POP_FRONT backlog name)
+ if(DEFINED Z_VCPKG_MSYS_${name}_PROVIDED_BY AND NOT name IN_LIST Z_VCPKG_MSYS_PACKAGES_AVAILABLE)
+ set(name "${Z_VCPKG_MSYS_${name}_PROVIDED_BY}")
+ if(name IN_LIST resolved)
+ continue()
+ endif()
+ endif()
+ if(NOT name IN_LIST Z_VCPKG_MSYS_PACKAGES_AVAILABLE)
+ list(APPEND unknown "${name}")
+ continue()
+ endif()
+ list(APPEND resolved "${name}")
+ list(REMOVE_ITEM Z_VCPKG_MSYS_${name}_DEPS ${resolved} ${backlog})
+ list(APPEND backlog ${Z_VCPKG_MSYS_${name}_DEPS})
+
+ z_vcpkg_acquire_msys_download_package(archive
+ URL "${Z_VCPKG_MSYS_${name}_URL}"
+ SHA512 "${Z_VCPKG_MSYS_${name}_SHA512}"
+ FILENAME "${Z_VCPKG_MSYS_${name}_FILENAME}"
+ )
+ set(Z_VCPKG_MSYS_${name}_ARCHIVE "${archive}" CACHE INTERNAL "")
+ endwhile()
+ if(DEFINED arg_OUT_UNKNOWN)
+ set("${arg_OUT_UNKNOWN}" "${unknown}" PARENT_SCOPE)
+ endif()
+ if(DEFINED arg_OUT_RESOLVED)
+ set("${arg_OUT_RESOLVED}" "${resolved}" PARENT_SCOPE)
+ endif()
+endfunction()
+
+# Returns a stable collection of hashes, regardless of package order
+function(z_vcpkg_acquire_msys_collect_hashes out_hash)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "" "PACKAGES")
+ list(SORT arg_PACKAGES)
+ set(result "")
+ foreach(name IN LISTS arg_PACKAGES)
+ if(NOT DEFINED Z_VCPKG_MSYS_${name}_SHA512)
+ message(FATAL_ERROR "SHA512 unknown for '${name}'.")
+ endif()
+ string(APPEND result "${Z_VCPKG_MSYS_${name}_SHA512}")
+ foreach(patch IN LISTS Z_VCPKG_MSYS_${name}_PATCHES)
+ file(SHA512 "${patch}" patch_sha)
+ string(APPEND result "${patch_sha}")
+ endforeach()
+ endforeach()
+ set(${out_hash} "${result}" PARENT_SCOPE)
+endfunction()
+
+function(vcpkg_acquire_msys out_msys_root)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg"
+ "NO_DEFAULT_PACKAGES;Z_ALL_PACKAGES"
+ "Z_DECLARE_EXTRA_PACKAGES_COMMAND"
+ "PACKAGES;DIRECT_PACKAGES"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_acquire_msys was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ z_vcpkg_acquire_msys_declare_all_packages()
+ if(NOT "${arg_Z_DECLARE_EXTRA_PACKAGES_COMMAND}" STREQUAL "")
+ cmake_language(CALL "${arg_Z_DECLARE_EXTRA_PACKAGES_COMMAND}")
+ endif()
+ set(requested "${arg_PACKAGES}")
+ if(arg_Z_ALL_PACKAGES)
+ set(requested "${Z_VCPKG_MSYS_PACKAGES_AVAILABLE}")
+ elseif(NOT arg_NO_DEFAULT_PACKAGES)
+ list(APPEND requested bash coreutils file gawk grep gzip diffutils make pkgconf sed)
+ endif()
+
+ if(DEFINED arg_DIRECT_PACKAGES AND NOT arg_DIRECT_PACKAGES STREQUAL "")
+ list(LENGTH arg_DIRECT_PACKAGES direct_packages_length)
+ math(EXPR direct_packages_parity "${direct_packages_length} % 2")
+ math(EXPR direct_packages_number "${direct_packages_length} / 2")
+ math(EXPR direct_packages_last "${direct_packages_number} - 1")
+
+ if(direct_packages_parity EQUAL 1)
+ message(FATAL_ERROR "vcpkg_acquire_msys(... DIRECT_PACKAGES ...) requires exactly pairs of URL/SHA512")
+ endif()
+
+ set(direct_packages "")
+ # direct_packages_last > direct_packages_number - 1 > 0 - 1 >= 0, so this is fine
+ foreach(index RANGE "${direct_packages_last}")
+ math(EXPR url_index "${index} * 2")
+ math(EXPR sha512_index "${url_index} + 1")
+ list(GET arg_DIRECT_PACKAGES "${url_index}" url)
+ list(GET arg_DIRECT_PACKAGES "${sha512_index}" sha512)
+ get_filename_component(filename "${url}" NAME)
+ if(NOT filename MATCHES "^(.*)-[^-]+-[^-]+-[^-]+\.pkg\.tar\..*$")
+ message(FATAL_ERROR "Cannot determine package name for '${filename}'")
+ endif()
+ set(pkg_name "${CMAKE_MATCH_1}")
+ z_vcpkg_acquire_msys_declare_package(
+ NAME "${pkg_name}"
+ URL "${url}"
+ SHA512 "${sha512}"
+ DIRECT
+ )
+ list(APPEND direct_packages "${pkg_name}")
+ endforeach()
+ list(INSERT requested 0 ${direct_packages})
+ endif()
+
+ z_vcpkg_acquire_msys_download_packages(
+ PACKAGES ${requested}
+ OUT_RESOLVED resolved
+ OUT_UNKNOWN unknown
+ )
+ if(NOT unknown STREQUAL "")
+ message(FATAL_ERROR "Unknown packages were required for vcpkg_acquire_msys(${requested}): ${unknown}
+This can be resolved by explicitly passing URL/SHA pairs to DIRECT_PACKAGES.")
+ endif()
+ set(Z_VCPKG_MSYS_PACKAGES_RESOLVED "${resolved}" CACHE INTERNAL "Export for CI")
+
+ z_vcpkg_acquire_msys_collect_hashes(hashes PACKAGES ${resolved})
+ string(SHA512 total_hash "${hashes}")
+ string(SUBSTRING "${total_hash}" 0 16 total_hash)
+ set(path_to_root "${DOWNLOADS}/tools/msys2/${total_hash}")
+
+ if(NOT EXISTS "${path_to_root}")
+ file(REMOVE_RECURSE "${path_to_root}.tmp")
+ file(MAKE_DIRECTORY "${path_to_root}.tmp/tmp")
+ foreach(name IN LISTS resolved)
+ file(ARCHIVE_EXTRACT
+ INPUT "${Z_VCPKG_MSYS_${name}_ARCHIVE}"
+ DESTINATION "${path_to_root}.tmp"
+ )
+ if(Z_VCPKG_MSYS_${name}_PATCHES)
+ z_vcpkg_apply_patches(
+ SOURCE_PATH "${path_to_root}.tmp"
+ PATCHES ${Z_VCPKG_MSYS_${name}_PATCHES}
+ )
+ endif()
+ endforeach()
+ file(RENAME "${path_to_root}.tmp" "${path_to_root}")
+ endif()
+ # Due to skipping the regular MSYS2 installer,
+ # some config files need to be established explicitly.
+ if(NOT EXISTS "${path_to_root}/etc/fstab")
+ # This fstab entry removes the cygdrive prefix from paths.
+ file(WRITE "${path_to_root}/etc/fstab" "none / cygdrive binary,posix=0,noacl,user 0 0")
+ endif()
+ # No pkgconfig hints from msys2 installation
+ file(REMOVE_RECURSE
+ "${path_to_root}/clangarm64/lib/pkgconfig"
+ "${path_to_root}/clang64/lib/pkgconfig"
+ "${path_to_root}/mingw32/lib/pkgconfig"
+ "${path_to_root}/mingw64/lib/pkgconfig"
+ "${path_to_root}/ucrt64/lib/pkgconfig"
+ "${path_to_root}/usr/lib/pkgconfig"
+ )
+ message(STATUS "Using msys root at ${path_to_root}")
+ set("${out_msys_root}" "${path_to_root}" PARENT_SCOPE)
+endfunction()
+
+# Expand this while CMAKE_CURRENT_LIST_DIR is for this file.
+set(Z_VCPKG_AUTOMAKE_CLANG_CL_PATCH "${CMAKE_CURRENT_LIST_DIR}/compile_wrapper_consider_clang-cl.patch")
+
+macro(z_vcpkg_acquire_msys_declare_all_packages)
+ set(Z_VCPKG_MSYS_PACKAGES_AVAILABLE "" CACHE INTERNAL "")
+
+ # The following list can be updated via test port vcpkg-ci-msys2[update-all].
+ # Upstream binary package information is available via
+ # https://packages.msys2.org/search?t=binpkg&q=<Pkg>
+
+ # msys subsystem
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/autoconf-wrapper-20240607-1-any.pkg.tar.zst"
+ SHA512 e91768eaa3e9ad849c8ab2177593503fb85cda623adfe2e21eb5a34dd58c2c6686bee42cb1d1a6cfe8ae5727fb10edc5e1229e56f96091c25cae4eecc03f191a
+ PROVIDES autoconf
+ DEPS autoconf2.72 bash sed
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/autoconf2.72-2.72-3-any.pkg.tar.zst"
+ SHA512 307751b00b6a9729673d0af35ccf327041880f20498143100053a9d914927e86dd20a4aa4cd9e83e3d4e7e27c2d068cfc0313c6cab4f103955e4dafede22f4d0
+ DEPS awk bash diffutils m4 perl sed
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/autoconf-archive-2023.02.20-1-any.pkg.tar.zst"
+ SHA512 0dbdba67934402eeb974e6738eb9857d013342b4e3a11200710b87fbf085d5bebf49b29b6a14b6ff2511b126549919a375b68f19cc22aa18f6ba23c57290ac72
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/automake-wrapper-20240607-1-any.pkg.tar.zst"
+ SHA512 59c219019a776d36cf37a755fdb1c60b0bfd4ef8ec4dc55d2ba5de00e85686cc480d05689d8fa23532615000f3371702c2b2fe31a0f18f92df9f4353202a6e23
+ PROVIDES automake
+ DEPS automake1.16 automake1.17 bash gawk
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/automake1.16-1.16.5-1-any.pkg.tar.zst"
+ SHA512 62c9dfe28d6f1d60310f49319723862d29fc1a49f7be82513a4bf1e2187ecd4023086faf9914ddb6701c7c1e066ac852c0209db2c058f3865910035372a4840a
+ DEPS bash perl
+ PATCHES "${Z_VCPKG_AUTOMAKE_CLANG_CL_PATCH}"
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/automake1.17-1.17-1-any.pkg.tar.zst"
+ SHA512 cb935efc2e303e6f88eee3ab12ca1311c32d3c92e73e04b00b6b9269ce512649efa09af03d22a733f9cc4ebbb99fc64d8dcc123bf68fb914a20bf3cc651375f5
+ DEPS bash perl
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/bash-5.2.037-2-x86_64.pkg.tar.zst"
+ SHA512 dda8e37b5d7185c1cf935eb8d8a7eec7b6a065c44984486725b27d842a793228cd9586a3b68cef4a4e6bf6f8685aa416628cd8da18184f427e3403d73186bc6f
+ PROVIDES sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/binutils-2.44-1-x86_64.pkg.tar.zst"
+ SHA512 4bddf315ad028841144c2e1f38a08437f8acde2652f6a32e4ce2dfa59b6c8eb6fec25c3383e944324e16f40c02b88b17c1c5d41b219b4ed0f413c6815f1a1012
+ DEPS libiconv libintl zlib
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/bzip2-1.0.8-4-x86_64.pkg.tar.zst"
+ SHA512 1d2ce42c6775c0cb0fe9c2863c975fd076579131d0a5bce907355315f357df4ee66869c9c58325f5b698f3aba2413b2823deda86dd27fdb6e2e5e5d4de045259
+ DEPS libbz2
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/coreutils-8.32-5-x86_64.pkg.tar.zst"
+ SHA512 63f99348e654440458f26e9f52ae3289759a5a03428cf2fcf5ac7b47fdf7bf7f51d08e3346f074a21102bee6fa0aeaf88b8ebeba1e1f02a45c8f98f69c8db59c
+ DEPS libiconv libintl gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/diffutils-3.12-1-x86_64.pkg.tar.zst"
+ SHA512 9b486fa45e827392eda39cff268530b0f3bdc5cc80881b55ae610828f861e6a63b790f395976277085b469423264ade705e5a0ecdf7b22fc8c017fc3d90acc78
+ DEPS libiconv libintl sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/file-5.46-2-x86_64.pkg.tar.zst"
+ SHA512 1225311082642b094991c7467ba88eaca3b16e680d736979b6b7f750468b05f5a410e88f7d211e2159e1e80b6aa84c882b26e68296a27f5ee9c3998b61f73fb5
+ DEPS gcc-libs libbz2 liblzma libzstd zlib
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/findutils-4.10.0-2-x86_64.pkg.tar.zst"
+ SHA512 d817f31b1130f73ababf004585e540c2adc14b2517ae350c73ef3f9b6c25b92ee377b24f6695980fd815c91fa8c870e574633092bd9436b7dbfb30b9d782b5fc
+ DEPS libintl libiconv
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/gawk-5.3.2-1-x86_64.pkg.tar.zst"
+ SHA512 8d33ff3772fcfd666ebf2211b92942f9ee4af6cd80d4f69762cdac0afb8522aad85244a1701df80a9980c8dba58e7b70d757146945e28cb77e80160b27f2a49f
+ PROVIDES awk
+ DEPS libintl libreadline mpfr sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/gcc-libs-13.3.0-1-x86_64.pkg.tar.zst"
+ SHA512 f38b33ecc56923bff2e43d7c0fc8a79c752feeb6af9d49ff4bdd919e04ca54e7c6a0710e9c55fc700ad53eba6c4670973d7cc867971a40bcbe3c82932a7d3f38
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/gettext-0.22.5-1-x86_64.pkg.tar.zst"
+ SHA512 50e1969179c6b33376396f200f6c25f709a6104d253121a8148bc5591b140c6f1729dc703374315a96137fa7cfec2abe427ea63bce243d5c0729cee8964ffbd3
+ DEPS libasprintf libgettextpo libintl
+ )
+ # This package shouldn't be a here
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/gettext-devel-0.22.5-1-x86_64.pkg.tar.zst"
+ SHA512 6de3e04ba238353df65111120ec4850b49f5797f27626ebc27c561390f75b4b1b25c84ac377f6ab15d586ca3ee3940eaf3aba074db1a50d8b8930c1135eae7cf
+ DEPS gettext # libiconv-devel
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/gmp-6.3.0-1-x86_64.pkg.tar.zst"
+ SHA512 d4e8549e55d4088eca30753f867bf82d9287955209766f488f2a07ecc71bc63ef2c50fcc9d47470ea3b0d2f149f1648d9c2453e366e3eb2c2e2d60939f311a40
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/grep-1~3.0-7-x86_64.pkg.tar.zst"
+ SHA512 8a5248d0aa7c8d9e57a810f0b03b76db31ebc3c64158886804fdc82095709d496fee433d3aa744484c6cdcb5877ebe95d03b15486cc7bdb13ba33cfbf71e4e14
+ DEPS libiconv libintl libpcre sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/gzip-1.14-1-x86_64.pkg.tar.zst"
+ SHA512 cc316915d1dc0090b5acb385ce392a3ac2c37e1df4f72198a976f9b0f7c4b42d15cf14229bc06c19c22ce39dca79389e426cff592437e05df77f453ecc6f42c5
+ DEPS bash
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libasprintf-0.22.5-1-x86_64.pkg.tar.zst"
+ SHA512 26ad060897f86cfa8257657d9ca3f64302c3bf949369ef29edd1d2f1525cbd462351d3177ba036ae91e8dec0c8501afdd5a666c1e51d7693d7f16f05406d35dd
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libbz2-1.0.8-4-x86_64.pkg.tar.zst"
+ SHA512 5a7be6d04e55e6fb1dc0770a8c020ca24a317807c8c8a4813146cd5d559c12a6c61040797b062e441645bc2257b390e12dd6df42519e56278a1fe849fe76a1c4
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libgettextpo-0.22.5-1-x86_64.pkg.tar.zst"
+ SHA512 a4ea2c576de4dca804d013e257e99a185eacafa558bd3793ece3216a21884c0ff23b5369cd8954bf7258e8cea9ffe9197d8a752baa67b5e895daac83de93d2f0
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libiconv-1.18-1-x86_64.pkg.tar.zst"
+ SHA512 77979ed35af45aa5bb7fb6b07d649e8eafa69ebdc8e421c2a7bf69ee567f814b38623a12be0736fb56c17c0aeff69ba769bc52110f62f8e5fdc5bcf334d88d44
+ DEPS gcc-libs libintl
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libintl-0.22.5-1-x86_64.pkg.tar.zst"
+ SHA512 1f1826763bcc252f15a0a5a27fbf596a2b5fad5e092bdff17af8231c373c0de17be7411938068aac0f0a617edbb32533de6619f6c58ebcdec7480c210673af45
+ DEPS gcc-libs libiconv
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/liblzma-5.8.1-1-x86_64.pkg.tar.zst"
+ SHA512 4bace8254eb63c9fd6354beea92c65d34a0ba9258bbd99a1a061adc4c0c33891b83ad10503042984fbb40560dd5f92a6ac4913a269dae00e9d3f850c79d92e71
+ # This package installs only a DLL. No extra deps.
+ DEPS # gettext libiconv sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libpcre-8.45-5-x86_64.pkg.tar.zst"
+ SHA512 3a0fffaf4d24bac07847220bac70b0e3f15645ea04171c5f4079966cbec01cee9138e36e5100b989af2dcce67660756c060fb3298c86fa120779c15d083231eb
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libreadline-8.2.013-1-x86_64.pkg.tar.zst"
+ SHA512 31a649a3b694434ce6a1c70ff5fa208a99acf323a6a1b521e1ce8b1cc0cdb9b63df3200ab497ba0e477d6ab61721bdfb133a90156fd88295b4ff9ff2551866cd
+ DEPS ncurses
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libtool-2.5.4-1-x86_64.pkg.tar.zst"
+ SHA512 65bdd278c19a6f32094d9944ac87418f38966e453f5fca60b2e00966731af88b119b94ef3cb6a68a9fd9a183f846d08a6524b9f273d311987acc308e84e3cf00
+ DEPS sh
+ # extra deps which are really needed
+ awk findutils grep sed tar
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libxcrypt-4.4.38-1-x86_64.pkg.tar.zst"
+ SHA512 a23b90d67773a4846cf0aa0a37132f65ca5244a16d04c903ac3807e146a41a4cab033ac12572c95df6f6ad3272ac97097dfc678b1c2da25092ce9ed1e9dddc01
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/libzstd-1.5.7-1-x86_64.pkg.tar.zst"
+ SHA512 02cf577567773f7f93f4df404d3b0a62d0cab4b2b63c76d572ef3af591e9fe6571b3d7e79e868ae5d7967b8f540941489a4004367c64113e1688f392827fc6cd
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/m4-1.4.19-2-x86_64.pkg.tar.zst"
+ SHA512 7471099ba7e3b47e5b019dc0e563165a8660722f2bbd337fb579e6d1832c0e7dcab0ca9297c4692b18add92c4ad49e94391c621cf38874e2ff63d4f926bac38c
+ DEPS bash gcc-libs libiconv
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/make-4.4.1-2-x86_64.pkg.tar.zst"
+ SHA512 b55caaf0d54b784b5dffcbb75a1862fc7359b91caa1e60234e208de03c74159fd003d68f5dddd387adef752bb13805e654f17ec5cb6add51546b9e30a1091b61
+ DEPS libintl sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/mpfr-4.2.2-1-x86_64.pkg.tar.zst"
+ SHA512 80fa09c637c4ff3943b20a5b74e945c7084e1f7d571d7124a5b45926533a24125a0027167f99eb9c1e9f96fc3d61344e23c0b4471815846d90367bcfb8f89eba
+ DEPS gmp
+ )
+ if(X_VCPKG_USE_MSYS2_RUNTIME_3.4) # temporary option, for Windows 7.0 and 8.0, or in case of regressions
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.4-3.4.10-2-x86_64.pkg.tar.zst"
+ SHA512 3fa087d4eb4e260785b81d5b6f4400ec128a83ff940da732bf147dfde457224573fa467e735b63c9a138872f5c9830f3684f824b2aa5d344fb95dfb91632f832
+ PROVIDES msys2-runtime
+ )
+ else()
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst"
+ SHA512 2a81a6c10347b59bb5de237c07c61ca2468ee9b9c0907d35e8ece4389d6cd18cd24ba1f96655a052c9c8b3d52fe1c62288c96873202e0036b89e500e8beb8d8a
+ )
+ endif()
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/ncurses-6.5.20240831-2-x86_64.pkg.tar.zst"
+ SHA512 ff84849e3857e31fd4f3acc48e8a9bc2fa6ff226f848636c206fb322e7c49de9677c24784575ad5d13620f31d6203739b0f7ab068081bef0d8ab873c4473ee4d
+ DEPS gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/patch-2.7.6-3-x86_64.pkg.tar.zst"
+ SHA512 dd5069cab243c8367152b1b8799a199103a7a86be2d478a9f4f84406591ad892284859531ec29ca09de8f278e6c97492896a08b6a08bcbc3ac09ac297e653ec0
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/perl-5.38.4-2-x86_64.pkg.tar.zst"
+ SHA512 e49ac4b917a3eb9aa354ea88f8b6eb708c3339de6d7fa0fc638314a00e97f4353525bb500ee21a0167c37efcd22f52499daedf8daf296cbfbcaa9f9a852fb080
+ DEPS coreutils libxcrypt sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/pkgconf-2.4.3-1-x86_64.pkg.tar.zst"
+ SHA512 df86ba01d336f1ca0aef5fa1af49f0e6ef1ccd8625729f31edde01013dd303512c915be04cb72964913140dcbcaa92806013c2d6a8c5d9f1539b2e646c09d669
+ PROVIDES pkg-config
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/sed-4.9-1-x86_64.pkg.tar.zst"
+ SHA512 8006a83f0cc6417e3f23ffd15d0cbca2cd332f2d2690232a872ae59795ac63e8919eb361111b78f6f2675c843758cc4782d816ca472fe841f7be8a42c36e8237
+ DEPS libintl sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/tar-1.35-2-x86_64.pkg.tar.zst"
+ SHA512 86269fe17729e5381f8236a0251088110725c3eb930215b8378b6673e5ee136847997bb6a667fe0398b65b85e3f3a7e4679a0fd4bb2ebcb9429a5d7273a02d54
+ DEPS libiconv libintl sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/texinfo-7.2-1-x86_64.pkg.tar.zst"
+ SHA512 3f8ff7b399defee89ba6add61d23ba6ab87ea059ecd63ffaae05d8e01bd36b5cba3cb0fe177da83857135c03655120a1fca388e6b11cb0f8296c43ccafcab679
+ DEPS perl sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/unzip-6.0-3-x86_64.pkg.tar.zst"
+ SHA512 1d6df49e826617ef3d3976be33361e189d8a5aee3a33ae79474fd08ca44ebd113981e6ba25c968b3cf5fb9826edd42dee21a97261cbc86fd8b143c950ba1f357
+ DEPS bash libbz2
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/which-2.23-4-x86_64.pkg.tar.zst"
+ SHA512 ad8ad602b76719b13cf8e650ca493fe9433cfd35d48bda33ce38d0523e9ade5702f89a62508ec0e2a453639a78ed54fc212f76ce8861ac58ac81e6eed476397a
+ DEPS sh
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/xz-5.8.1-1-x86_64.pkg.tar.zst"
+ SHA512 2f5e01663d21bd4e36cee60e7fc897391a6592052ef8f44a472340883c5ee7b31fe06a8a603828f93c3350cba85db16debcef13a9253f1762938bb5d327e6f08
+ DEPS libiconv libintl liblzma
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/msys/x86_64/zlib-1.3.1-1-x86_64.pkg.tar.zst"
+ SHA512 a432b0f927d342b678df706487595eff1b780371548933f956adcf697eea11ddbca2863d9d9fb88675a7040dcfddab56f8f71a8ae4d0cd4969e715545c77e87c
+ DEPS gcc-libs
+ )
+
+ # mingw64 subsystem
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-bzip2-1.0.8-3-any.pkg.tar.zst"
+ SHA512 fb1ae524d7b04e1f35c3101c318136dbe08da8093bda98f6aea7e6c2564fec5f8533fb61cac5001b6425105cd982511964ec04099c6651f990dc3b8baf7f7057
+ DEPS mingw-w64-x86_64-gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-ca-certificates-20241223-1-any.pkg.tar.zst"
+ SHA512 7ccb46991cb7f0d128ec188639c0d783a9c5c2d83dee7caf1d3a3c7e87b878d626cf91b56ad0023343dee2b1f3867c0d325dae58d0b8c690b9fc8af8543c145e
+ DEPS mingw-w64-x86_64-p11-kit
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-expat-2.7.1-2-any.pkg.tar.zst"
+ SHA512 dda4607ec07a793b0fa0cc5f93fde1d8842b9f98d5cc826e7f23758486422723fc656c94c79eba263fbfde5ac0ef0f3a13c8725857644b1c428b8da5dfa367f2
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-libgfortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 65dfeb735c99d2e112363f5135be14eecb1e56bf88ecd359f40e557f6714ecd1d721e3a8b875ac04c9b53c7e829375501ad8e9c927b484006798e867a9a97d34
+ PROVIDES mingw-w64-x86_64-fc-libs
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-libs-15.1.0-5-any.pkg.tar.zst"
+ SHA512 cfbfc2fa0029ae9dda628cdaea476579a6cdfafeec716986b4e0761f02b755c338e57e1b96c457881109343d1bd8b55be349c2df05bb57ba4449e56f1acb569f
+ PROVIDES mingw-w64-x86_64-omp
+ DEPS mingw-w64-x86_64-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gettext-runtime-0.25-1-any.pkg.tar.zst"
+ SHA512 c452759c0e10c68540a91f8a29a1600aef164c4fe12f1e7089858304d80e3071e3a953d7506a0f845476df3a30dd8d270a00a3a55d6e9b14dfe69b0d635ea608
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libiconv
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gmp-6.3.0-2-any.pkg.tar.zst"
+ SHA512 38ab150051d787e44f1c75b3703d6c8deb429d244acb2a973ee232043b708e6c9e29a1f9e28f12e242c136d433e8eb5a5133a4d9ac7b87157a9749a8d215d2f0
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libffi-3.4.8-1-any.pkg.tar.zst"
+ SHA512 2747a6c44b159a8df4ca141273ab13e5348ac273bc8643b6179c0d803d53710f0b807e985531a39c3e5b74be640feeafd57c9adc98e02c0a429ba9bfb5dd2d21
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libiconv-1.18-1-any.pkg.tar.zst"
+ SHA512 7aed58286d279699dede96c74e649cea7b78942e51350d277aca9272351d3b645ecfd129b5bbafd40f7e95bfc0187c9df118eca47f2cb795811752a18bcb3745
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libsystre-1.0.2-1-any.pkg.tar.zst"
+ SHA512 e5ce0ff1dbf778f8437a33362c4cd517313425944cfc7362cd0bbfd097de835d3ae8aea6696345d9d054517b8146ac564580a33d56a519dbba042ca79cb46317
+ PROVIDES mingw-w64-x86_64-libgnurx
+ DEPS mingw-w64-x86_64-libtre
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libtasn1-4.20.0-1-any.pkg.tar.zst"
+ SHA512 989beaec97ff400127cafb8202f8e181eecb4ca429ac5b90a3a54cde64e030ce29a259e680ebf7dae223c7374c72632f5f33628e0855387a324f46686cfd8a9b
+ DEPS mingw-w64-x86_64-gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libtre-0.9.0-1-any.pkg.tar.zst"
+ SHA512 5f1797850ab2da94c213cca8663413419b737a17e6856e1d05bcd8d9397d6e0bdb195798b01cb315c1fcf0cffc22a712f13c10e0b5d4103aecef7cd4518c80fb
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gettext-runtime
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libwinpthread-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 011f2719ca60437adf8ea653d78592a407eea67f515135164f7437248dca07b11aa5a6bc4769f507ef1b1a1dd0c5c5144fa99613e3eeb6d44dac4a5b48de73bd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpc-1.3.1-2-any.pkg.tar.zst"
+ SHA512 3fe183d4af3b3935a4394502eab75a8f7b7692f551fd44e54c67935a4691388d23a021ee1147f0345ed27ffe8a8db3e9e7e37caf2348df3413e0acd519c12a0c
+ DEPS mingw-w64-x86_64-gmp mingw-w64-x86_64-mpfr
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpdecimal-4.0.1-1-any.pkg.tar.zst"
+ SHA512 5a2d1b31cb5029e65c95b00f0614123855774b398335491b1bcf81636d55ff7ad4c5e46199f5b23549dd06c47c04edf19e0be65162f3a54034817e30e9834639
+ DEPS mingw-w64-x86_64-gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpfr-4.2.2-1-any.pkg.tar.zst"
+ SHA512 4795debd7e47a1c539d35e3aa3a6948831a7be77ca8b915273eba7f6dc1f951d2c500f988f78321cf96dea40e4ec8c2a463c12fccdb408f424040f61e7395de7
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-ncurses-6.5.20241228-3-any.pkg.tar.zst"
+ SHA512 f2930f1eb441686c0403953dd51c664e0ea77f29bcce6c88514ba9510b802e4be4e5ade7da58a989e79d13cc20736e32bf609fb1f297f8949c02326d9800996a
+ DEPS mingw-w64-x86_64-libsystre
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-openblas-0.3.29-3-any.pkg.tar.zst"
+ SHA512 040b10db2964a2c94eacdbb2d80b8c42f5ad45113d8b6516a12158b51e80d218d7d67d9c19c193bd24e61c819587679329e093342bff393b2d3c107e899feb09
+ DEPS mingw-w64-x86_64-gcc-libgfortran mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libwinpthread mingw-w64-x86_64-omp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-openssl-3.5.0-1-any.pkg.tar.zst"
+ SHA512 ede791eba3b6c82184f9649fcb663c72715e7c5f0fcbda87a1226520439c472458f5a3a0a78d4c0e45fb8de2a091cae741341d13404c3ee1995e183ba2efa825
+ #DEPS mingw-w64-x86_64-ca-certificates mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-zlib
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-p11-kit-0.25.5-1-any.pkg.tar.zst"
+ SHA512 3ecf6cf3f2c774022ed0ae58a1ee63dca84aeabf226b39a69459370d84d13c4ce4e9776be05880ffa7be2da84f504fe051624e1c9378cb49a71e5c0c4d5110e0
+ DEPS mingw-w64-x86_64-gettext-runtime mingw-w64-x86_64-libffi mingw-w64-x86_64-libtasn1
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst"
+ SHA512 c156c6e74297a5fdd9c299a361acac47b4a9b32859d1d5373e1cb10a29fa91c26a013674ebaad267e434b5de3e31c1649f0701e8ba12bd4688cea34d63b40488
+ PROVIDES mingw-w64-x86_64-python3 mingw-w64-x86_64-python3.12
+ DEPS mingw-w64-x86_64-bzip2 mingw-w64-x86_64-expat mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libffi mingw-w64-x86_64-mpdecimal mingw-w64-x86_64-ncurses mingw-w64-x86_64-openssl mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-tcl mingw-w64-x86_64-tk mingw-w64-x86_64-xz mingw-w64-x86_64-zlib
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-numpy-2.2.6-1-any.pkg.tar.zst"
+ SHA512 f8bfeffdf095e6e0d7e487229cc5475f8a2929902c7cfc4f7c67b7d428adcf80ea88deb6205e84775835d08f7fae53f0b91e4bea816b8dad20f09ad3456bf998
+ DEPS mingw-w64-x86_64-openblas mingw-w64-x86_64-python
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-readline-8.2.013-1-any.pkg.tar.zst"
+ SHA512 282c8eb6d7241cedbce6d352489b75fc352d154ecd0a259b772f45acc29c2a47a610a8043c7635475bed39b2cca9a45c09845c77c655881dbc7403aa12c65c35
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-termcap
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-sqlite3-3.50.0-1-any.pkg.tar.zst"
+ SHA512 799bb830dcf74e832fb3840efdee3afe85f11538eeb78cb66a63f29092b1817718508b67f414581dda0fd470947e6a122bfda0f579c62a33731ba65a4f0be6f9
+ PROVIDES mingw-w64-x86_64-sqlite mingw-w64-x86_64-sqlite-analyzer
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-readline mingw-w64-x86_64-tcl mingw-w64-x86_64-zlib
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-termcap-1.3.1-7-any.pkg.tar.zst"
+ SHA512 2610355be441fd933f660f8181a5ad074057361a9aadeaad85961230dcf6df5d5165b94ccf9887144c91812485be57c2d79f39e8191ff525889bdff042d34ce6
+ DEPS mingw-w64-x86_64-gcc-libs
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-tcl-8.6.16-1-any.pkg.tar.zst"
+ SHA512 b36251ad9e5061d332bf9bac80d25ec2b1e7a2ed80a0b88609f7a62b9503b60092ce23ca7ecd39d7a28c44b3e725acb88bb66cfd4e9dec4789d95f3982cba283
+ DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-zlib
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-tk-8.6.16-1-any.pkg.tar.zst"
+ SHA512 be8a235fc1f1b8ec5a75ece9314c2c02f0d92302837573b9f651cf57ed1e6387b592699429e48a520073f2077c528d3641cae1f9072a9ec568c21196c708af91
+ DEPS mingw-w64-x86_64-tcl
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-xz-5.8.1-2-any.pkg.tar.zst"
+ SHA512 3309afb4e96cab9406753618abd2851c7b9134ad89d52d0379a45763fa245c4e9265f4cb27c34dcccde785c1e2c728e32344caaf14c62575f0269acdc048f6e0
+ DEPS mingw-w64-x86_64-gettext-runtime
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-zlib-1.3.1-1-any.pkg.tar.zst"
+ SHA512 1336cd0db102af495d8bbfc6a1956f365750b19d2377fe809e9b26f61a8a6600394e7343677645c5743f4974161535dad5c0503ff50f6126d27bb927754e7320
+ )
+endmacro()
diff --git a/vcpkg/scripts/cmake/vcpkg_add_to_path.cmake b/vcpkg/scripts/cmake/vcpkg_add_to_path.cmake
new file mode 100644
index 0000000..1ea11a6
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_add_to_path.cmake
@@ -0,0 +1,10 @@
+function(vcpkg_add_to_path)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "PREPEND" "" "")
+ if(arg_PREPEND)
+ set(operation PREPEND)
+ else()
+ set(operation APPEND)
+ endif()
+
+ vcpkg_host_path_list("${operation}" ENV{PATH} ${arg_UNPARSED_ARGUMENTS})
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_apply_patches.cmake b/vcpkg/scripts/cmake/vcpkg_apply_patches.cmake
new file mode 100644
index 0000000..1a3756e
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_apply_patches.cmake
@@ -0,0 +1,17 @@
+function(vcpkg_apply_patches)
+ z_vcpkg_deprecation_message("vcpkg_apply_patches has been deprecated in favor of the `PATCHES` argument to `vcpkg_from_*`.")
+
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "QUIET" "SOURCE_PATH" "PATCHES")
+
+ if(arg_QUIET)
+ set(quiet "QUIET")
+ else()
+ set(quiet)
+ endif()
+
+ z_vcpkg_apply_patches(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ ${quiet}
+ PATCHES ${arg_PATCHES}
+ )
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake b/vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake
new file mode 100644
index 0000000..63220f4
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake
@@ -0,0 +1,35 @@
+function(vcpkg_backup_env_variables)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "VARS")
+ if(NOT DEFINED arg_VARS)
+ message(FATAL_ERROR "VARS must be defined.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN LISTS arg_VARS)
+ if(DEFINED ENV{${envvar}})
+ set("z_vcpkg_env_backup_${envvar}" "$ENV{${envvar}}" PARENT_SCOPE)
+ else()
+ unset("z_vcpkg_env_backup_${envvar}" PARENT_SCOPE)
+ endif()
+ endforeach()
+endfunction()
+
+function(vcpkg_restore_env_variables)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "VARS")
+ if(NOT DEFINED arg_VARS)
+ message(FATAL_ERROR "VARS must be defined.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN LISTS arg_VARS)
+ if(DEFINED z_vcpkg_env_backup_${envvar})
+ set("ENV{${envvar}}" "${z_vcpkg_env_backup_${envvar}}")
+ else()
+ unset("ENV{${envvar}}")
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_cmake.cmake
new file mode 100644
index 0000000..8a8c25e
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_build_cmake.cmake
@@ -0,0 +1,95 @@
+function(vcpkg_build_cmake)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ "DISABLE_PARALLEL;ADD_BIN_TO_PATH"
+ "TARGET;LOGFILE_ROOT"
+ ""
+ )
+
+ if(Z_VCPKG_CMAKE_BUILD_GUARD)
+ message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_build_cmake in the same port is unsupported.")
+ endif()
+
+ if(NOT DEFINED arg_LOGFILE_ROOT)
+ set(arg_LOGFILE_ROOT "build")
+ endif()
+
+ vcpkg_list(SET build_param)
+ vcpkg_list(SET parallel_param)
+ vcpkg_list(SET no_parallel_param)
+
+ if("${Z_VCPKG_CMAKE_GENERATOR}" STREQUAL "Ninja")
+ vcpkg_list(SET build_param "-v") # verbose output
+ vcpkg_list(SET parallel_param "-j${VCPKG_CONCURRENCY}")
+ vcpkg_list(SET no_parallel_param "-j1")
+ elseif("${Z_VCPKG_CMAKE_GENERATOR}" MATCHES "^Visual Studio")
+ vcpkg_list(SET build_param
+ "/p:VCPkgLocalAppDataDisabled=true"
+ "/p:UseIntelMKL=No"
+ )
+ vcpkg_list(SET parallel_param "/m")
+ elseif("${Z_VCPKG_CMAKE_GENERATOR}" STREQUAL "NMake Makefiles")
+ # No options are currently added for nmake builds
+ elseif(Z_VCPKG_CMAKE_GENERATOR STREQUAL "Unix Makefiles")
+ vcpkg_list(SET build_param "VERBOSE=1")
+ vcpkg_list(SET parallel_param "-j${VCPKG_CONCURRENCY}")
+ vcpkg_list(SET no_parallel_param "")
+ elseif(Z_VCPKG_CMAKE_GENERATOR STREQUAL "Xcode")
+ vcpkg_list(SET parallel_param -jobs "${VCPKG_CONCURRENCY}")
+ vcpkg_list(SET no_parallel_param -jobs 1)
+ else()
+ message(FATAL_ERROR "Unrecognized GENERATOR setting from vcpkg_configure_cmake(). Valid generators are: Ninja, Visual Studio, and NMake Makefiles")
+ endif()
+
+ vcpkg_list(SET target_param)
+ if(arg_TARGET)
+ vcpkg_list(SET target_param "--target" "${arg_TARGET}")
+ endif()
+
+ foreach(build_type IN ITEMS debug release)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "${build_type}")
+ if("${build_type}" STREQUAL "debug")
+ set(short_build_type "dbg")
+ set(config "Debug")
+ else()
+ set(short_build_type "rel")
+ set(config "Release")
+ endif()
+
+ message(STATUS "Building ${TARGET_TRIPLET}-${short_build_type}")
+
+ if(arg_ADD_BIN_TO_PATH)
+ vcpkg_backup_env_variables(VARS PATH)
+ if("${build_type}" STREQUAL "debug")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin")
+ else()
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin")
+ endif()
+ endif()
+
+ if(arg_DISABLE_PARALLEL)
+ vcpkg_execute_build_process(
+ COMMAND
+ "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param}
+ -- ${build_param} ${no_parallel_param}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_build_type}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_build_type}"
+ )
+ else()
+ vcpkg_execute_build_process(
+ COMMAND
+ "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param}
+ -- ${build_param} ${parallel_param}
+ NO_PARALLEL_COMMAND
+ "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param}
+ -- ${build_param} ${no_parallel_param}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_build_type}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_build_type}"
+ )
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ vcpkg_restore_env_variables(VARS PATH)
+ endif()
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_make.cmake b/vcpkg/scripts/cmake/vcpkg_build_make.cmake
new file mode 100644
index 0000000..7e54ced
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_build_make.cmake
@@ -0,0 +1,193 @@
+function(vcpkg_build_make)
+ 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 arg
+ "ADD_BIN_TO_PATH;ENABLE_INSTALL;DISABLE_PARALLEL"
+ "LOGFILE_ROOT;BUILD_TARGET;SUBPATH;MAKEFILE;INSTALL_TARGET"
+ "OPTIONS"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_make_build was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_LOGFILE_ROOT)
+ set(arg_LOGFILE_ROOT "build")
+ endif()
+
+ if(NOT DEFINED arg_BUILD_TARGET)
+ set(arg_BUILD_TARGET "all")
+ endif()
+
+ if (NOT DEFINED arg_MAKEFILE)
+ set(arg_MAKEFILE Makefile)
+ endif()
+
+ if(NOT DEFINED arg_INSTALL_TARGET)
+ set(arg_INSTALL_TARGET "install")
+ endif()
+
+ if(CMAKE_HOST_WIN32)
+ set(Z_VCPKG_INSTALLED "${CURRENT_INSTALLED_DIR}")
+ else()
+ string(REPLACE " " "\ " Z_VCPKG_INSTALLED "${CURRENT_INSTALLED_DIR}")
+ endif()
+
+ vcpkg_list(SET make_opts)
+ vcpkg_list(SET install_opts)
+ if (CMAKE_HOST_WIN32)
+ set(path_backup "$ENV{PATH}")
+ vcpkg_add_to_path(PREPEND "${SCRIPTS}/buildsystems/make_wrapper")
+ if(NOT DEFINED Z_VCPKG_MAKE)
+ vcpkg_acquire_msys(MSYS_ROOT)
+ find_program(Z_VCPKG_MAKE make PATHS "${MSYS_ROOT}/usr/bin" NO_DEFAULT_PATH REQUIRED)
+ endif()
+ set(make_command "${Z_VCPKG_MAKE}")
+ vcpkg_list(SET make_opts ${arg_OPTIONS} -j ${VCPKG_CONCURRENCY} --trace -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+ vcpkg_list(SET no_parallel_make_opts ${arg_OPTIONS} -j 1 --trace -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+
+ string(REPLACE " " [[\ ]] vcpkg_package_prefix "${CURRENT_PACKAGES_DIR}")
+ string(REGEX REPLACE [[([a-zA-Z]):/]] [[/\1/]] vcpkg_package_prefix "${vcpkg_package_prefix}")
+ vcpkg_list(SET install_opts -j ${VCPKG_CONCURRENCY} --trace -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${vcpkg_package_prefix})
+ vcpkg_list(SET no_parallel_install_opts -j 1 --trace -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${vcpkg_package_prefix})
+ #TODO: optimize for install-data (release) and install-exec (release/debug)
+
+ else()
+ if(VCPKG_HOST_IS_FREEBSD OR VCPKG_HOST_IS_OPENBSD)
+ find_program(Z_VCPKG_MAKE gmake REQUIRED)
+ else()
+ find_program(Z_VCPKG_MAKE make REQUIRED)
+ endif()
+ set(make_command "${Z_VCPKG_MAKE}")
+ vcpkg_list(SET make_opts ${arg_OPTIONS} V=1 -j ${VCPKG_CONCURRENCY} -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+ vcpkg_list(SET no_parallel_make_opts ${arg_OPTIONS} V=1 -j 1 -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+ vcpkg_list(SET install_opts -j ${VCPKG_CONCURRENCY} -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${CURRENT_PACKAGES_DIR})
+ vcpkg_list(SET no_parallel_install_opts -j 1 -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${CURRENT_PACKAGES_DIR})
+ endif()
+
+ # Since includes are buildtype independent those are setup by vcpkg_configure_make
+ vcpkg_backup_env_variables(VARS LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH CPPFLAGS CFLAGS CXXFLAGS RCFLAGS)
+
+ z_vcpkg_configure_make_common_definitions()
+
+ foreach(buildtype IN ITEMS "debug" "release")
+ if (buildtype STREQUAL "debug" AND _VCPKG_MAKE_NO_DEBUG)
+ continue()
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "${buildtype}")
+ string(TOUPPER "${buildtype}" cmake_buildtype)
+ set(short_buildtype "${short_name_${cmake_buildtype}}")
+ set(path_suffix "${path_suffix_${cmake_buildtype}}")
+
+ set(working_directory "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_buildtype}/${arg_SUBPATH}")
+ message(STATUS "Building ${TARGET_TRIPLET}-${short_buildtype}")
+
+ if("libtool-link-pass-target" IN_LIST VCPKG_BUILD_MAKE_FIXUP)
+ # Pass --target to the linker, e.g. for Android
+ file(GLOB_RECURSE libtool_files "${working_directory}/libtool")
+ foreach(file IN LISTS libtool_files)
+ vcpkg_replace_string("${file}" [[-xtarget=*|]] [[-xtarget=*|--target=*|]])
+ endforeach()
+ endif()
+
+ z_vcpkg_configure_make_process_flags("${cmake_buildtype}")
+
+ # Setup environment
+ set(ENV{CPPFLAGS} "${CPPFLAGS_${cmake_buildtype}}")
+ set(ENV{CFLAGS} "${CFLAGS_${cmake_buildtype}}")
+ set(ENV{CXXFLAGS} "${CXXFLAGS_${cmake_buildtype}}")
+ set(ENV{RCFLAGS} "${VCPKG_DETECTED_CMAKE_RC_FLAGS_${cmake_buildtype}}")
+ set(ENV{LDFLAGS} "${LDFLAGS_${cmake_buildtype}}")
+ vcpkg_list(APPEND lib_env_vars LIB LIBPATH LIBRARY_PATH) # LD_LIBRARY_PATH)
+ foreach(lib_env_var IN LISTS lib_env_vars)
+ if(EXISTS "${Z_VCPKG_INSTALLED}${path_suffix}/lib")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${Z_VCPKG_INSTALLED}${path_suffix}/lib")
+ endif()
+ if(EXISTS "${Z_VCPKG_INSTALLED}${path_suffix}/lib/manual-link")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${Z_VCPKG_INSTALLED}${path_suffix}/lib/manual-link")
+ endif()
+ endforeach()
+ unset(lib_env_vars)
+
+ if(LINK_ENV_${cmake_buildtype})
+ set(config_link_backup "$ENV{_LINK_}")
+ set(ENV{_LINK_} "${LINK_ENV_${cmake_buildtype}}")
+ else()
+ unset(config_link_backup)
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(env_backup_path "$ENV{PATH}")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}${path_suffix}/bin")
+ endif()
+
+ vcpkg_list(SET make_cmd_line ${make_command} ${make_opts})
+ vcpkg_list(SET no_parallel_make_cmd_line ${make_command} ${no_parallel_make_opts})
+
+ if (arg_DISABLE_PARALLEL)
+ vcpkg_execute_build_process(
+ COMMAND ${no_parallel_make_cmd_line}
+ WORKING_DIRECTORY "${working_directory}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_buildtype}"
+ )
+ else()
+ vcpkg_execute_build_process(
+ COMMAND ${make_cmd_line}
+ NO_PARALLEL_COMMAND ${no_parallel_make_cmd_line}
+ WORKING_DIRECTORY "${working_directory}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_buildtype}"
+ )
+ endif()
+
+ file(READ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_buildtype}-out.log" logdata)
+ if(logdata MATCHES "Warning: linker path does not have real file for library")
+ message(FATAL_ERROR "libtool could not find a file being linked against!")
+ endif()
+
+ if (arg_ENABLE_INSTALL)
+ message(STATUS "Installing ${TARGET_TRIPLET}-${short_buildtype}")
+ vcpkg_list(SET make_cmd_line ${make_command} ${install_opts})
+ vcpkg_list(SET no_parallel_make_cmd_line ${make_command} ${no_parallel_install_opts})
+ vcpkg_execute_build_process(
+ COMMAND ${make_cmd_line}
+ NO_PARALLEL_COMMAND ${no_parallel_make_cmd_line}
+ WORKING_DIRECTORY "${working_directory}"
+ LOGNAME "install-${TARGET_TRIPLET}-${short_buildtype}"
+ )
+ endif()
+
+ if(DEFINED config_link_backup)
+ set(ENV{_LINK_} "${config_link_backup}")
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${env_backup_path}")
+ endif()
+ endif()
+
+ vcpkg_restore_env_variables(VARS LIB LIBPATH LIBRARY_PATH)
+ endforeach()
+
+ if (arg_ENABLE_INSTALL)
+ string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" Z_VCPKG_INSTALL_PREFIX "${CURRENT_INSTALLED_DIR}")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}_tmp")
+ file(RENAME "${CURRENT_PACKAGES_DIR}" "${CURRENT_PACKAGES_DIR}_tmp")
+ file(RENAME "${CURRENT_PACKAGES_DIR}_tmp${Z_VCPKG_INSTALL_PREFIX}" "${CURRENT_PACKAGES_DIR}")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}_tmp")
+ endif()
+
+ # Remove libtool files since they contain absolute paths and are not necessary.
+ file(GLOB_RECURSE libtool_files "${CURRENT_PACKAGES_DIR}/**/*.la")
+ if(libtool_files)
+ file(REMOVE ${libtool_files})
+ endif()
+
+ if (CMAKE_HOST_WIN32)
+ set(ENV{PATH} "${path_backup}")
+ endif()
+
+ vcpkg_restore_env_variables(VARS LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH CPPFLAGS CFLAGS CXXFLAGS RCFLAGS)
+ unset(_VCPKG_MAKE_NO_DEBUG PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake b/vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake
new file mode 100644
index 0000000..90fb313
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake
@@ -0,0 +1,87 @@
+function(vcpkg_build_msbuild)
+ cmake_parse_arguments(
+ PARSE_ARGV 0
+ arg
+ "USE_VCPKG_INTEGRATION"
+ "PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_build_msbuild was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_RELEASE_CONFIGURATION)
+ set(arg_RELEASE_CONFIGURATION Release)
+ endif()
+ if(NOT DEFINED arg_DEBUG_CONFIGURATION)
+ set(arg_DEBUG_CONFIGURATION Debug)
+ endif()
+ if(NOT DEFINED arg_PLATFORM)
+ set(arg_PLATFORM "${TRIPLET_SYSTEM_ARCH}")
+ endif()
+ if(NOT DEFINED arg_PLATFORM_TOOLSET)
+ set(arg_PLATFORM_TOOLSET "${VCPKG_PLATFORM_TOOLSET}")
+ endif()
+ if(NOT DEFINED arg_TARGET_PLATFORM_VERSION)
+ vcpkg_get_windows_sdk(arg_TARGET_PLATFORM_VERSION)
+ endif()
+ if(NOT DEFINED arg_TARGET)
+ set(arg_TARGET Rebuild)
+ endif()
+
+ list(APPEND arg_OPTIONS
+ "/t:${arg_TARGET}"
+ "/p:Platform=${arg_PLATFORM}"
+ "/p:PlatformToolset=${arg_PLATFORM_TOOLSET}"
+ "/p:VCPkgLocalAppDataDisabled=true"
+ "/p:UseIntelMKL=No"
+ "/p:WindowsTargetPlatformVersion=${arg_TARGET_PLATFORM_VERSION}"
+ "/p:VcpkgManifestInstall=false"
+ "/p:VcpkgManifestEnabled=false"
+ "/m"
+ )
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ # Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions
+ # TODO: Add a way for the user to override this if they want to opt-in to incompatibility
+ list(APPEND arg_OPTIONS "/p:WholeProgramOptimization=false")
+ endif()
+
+ if(arg_USE_VCPKG_INTEGRATION)
+ list(
+ APPEND arg_OPTIONS
+ "/p:ForceImportBeforeCppTargets=${SCRIPTS}/buildsystems/msbuild/vcpkg.targets"
+ "/p:VcpkgTriplet=${TARGET_TRIPLET}"
+ "/p:VcpkgInstalledDir=${_VCPKG_INSTALLED_DIR}"
+ )
+ else()
+ list(APPEND arg_OPTIONS "/p:VcpkgEnabled=false")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Building ${arg_PROJECT_PATH} for Release")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ vcpkg_execute_required_process(
+ COMMAND msbuild "${arg_PROJECT_PATH}"
+ "/p:Configuration=${arg_RELEASE_CONFIGURATION}"
+ ${arg_OPTIONS}
+ ${arg_OPTIONS_RELEASE}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
+ LOGNAME "build-${TARGET_TRIPLET}-rel"
+ )
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Building ${arg_PROJECT_PATH} for Debug")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND msbuild "${arg_PROJECT_PATH}"
+ "/p:Configuration=${arg_DEBUG_CONFIGURATION}"
+ ${arg_OPTIONS}
+ ${arg_OPTIONS_DEBUG}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"
+ LOGNAME "build-${TARGET_TRIPLET}-dbg"
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_ninja.cmake b/vcpkg/scripts/cmake/vcpkg_build_ninja.cmake
new file mode 100644
index 0000000..a06f350
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_build_ninja.cmake
@@ -0,0 +1,30 @@
+function(z_vcpkg_build_ninja_build config targets)
+ message(STATUS "Building (${config})...")
+ vcpkg_execute_build_process(
+ COMMAND "${NINJA}" -C "${CURRENT_BUILDTREES_DIR}/${config}" ${targets}
+ WORKING_DIRECTORY "${SOURCE_PATH}"
+ LOGNAME "build-${config}"
+ )
+endfunction()
+
+
+function(vcpkg_build_ninja)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "TARGETS")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_TARGETS)
+ set(arg_TARGETS "")
+ endif()
+
+ vcpkg_find_acquire_program(NINJA)
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ z_vcpkg_build_ninja_build("${TARGET_TRIPLET}-dbg" "${arg_TARGETS}")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ z_vcpkg_build_ninja_build("${TARGET_TRIPLET}-rel" "${arg_TARGETS}")
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake
new file mode 100755
index 0000000..ffc68d8
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake
@@ -0,0 +1,166 @@
+function(vcpkg_build_nmake)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ADD_BIN_TO_PATH;ENABLE_INSTALL;NO_DEBUG;PREFER_JOM"
+ "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME;LOGFILE_ROOT;CL_LANGUAGE"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;PRERUN_SHELL;PRERUN_SHELL_DEBUG;PRERUN_SHELL_RELEASE;TARGET"
+ )
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified")
+ endif()
+
+ if(arg_NO_DEBUG)
+ message(WARNING "NO_DEBUG argument to ${CMAKE_CURRENT_FUNCTION} is deprecated")
+ endif()
+ if(arg_ADD_BIN_TO_PATH)
+ message(WARNING "ADD_BIN_TO_PATH argument to ${CMAKE_CURRENT_FUNCTION} is deprecated - it never did anything")
+ endif()
+
+ if(NOT VCPKG_HOST_IS_WINDOWS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} only support windows.")
+ endif()
+
+ if(NOT DEFINED arg_LOGFILE_ROOT)
+ set(arg_LOGFILE_ROOT "build")
+ endif()
+ if(NOT DEFINED arg_PROJECT_NAME)
+ set(arg_PROJECT_NAME makefile.vc)
+ endif()
+
+ if(NOT DEFINED arg_TARGET)
+ vcpkg_list(SET arg_TARGET all)
+ endif()
+ if(arg_ENABLE_INSTALL)
+ vcpkg_list(APPEND arg_TARGET install)
+ endif()
+
+ if(NOT DEFINED arg_CL_LANGUAGE)
+ set(arg_CL_LANGUAGE CXX)
+ endif()
+
+ find_program(NMAKE nmake REQUIRED)
+ get_filename_component(NMAKE_EXE_PATH "${NMAKE}" DIRECTORY)
+ # Load toolchains
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ debug_message("Including cmake vars from: ${cmake_vars_file}")
+ include("${cmake_vars_file}")
+ # Set needed env
+ set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}")
+ set(ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include;$ENV{INCLUDE}")
+ # Set make options
+ vcpkg_list(SET make_opts_base /NOLOGO /G /U /F "${arg_PROJECT_NAME}" ${arg_TARGET})
+
+ if(arg_PREFER_JOM AND VCPKG_CONCURRENCY GREATER "1")
+ vcpkg_find_acquire_program(JOM)
+ get_filename_component(JOM_EXE_PATH "${JOM}" DIRECTORY)
+ vcpkg_add_to_path("${JOM_EXE_PATH}")
+ if(arg_CL_LANGUAGE AND "${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_COMPILER_ID}" STREQUAL "MSVC")
+ string(REGEX REPLACE " [/-]MP[0-9]* " " " VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_DEBUG " ${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_DEBUG} /FS")
+ string(REGEX REPLACE " [/-]MP[0-9]* " " " VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_RELEASE " ${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_RELEASE} /FS")
+ endif()
+ else()
+ set(arg_PREFER_JOM FALSE)
+ endif()
+
+ # Add subpath to work directory
+ if(DEFINED arg_PROJECT_SUBPATH)
+ set(project_subpath "/${arg_PROJECT_SUBPATH}")
+ else()
+ set(project_subpath "")
+ endif()
+
+ vcpkg_backup_env_variables(VARS _CL_ LINK)
+ cmake_path(NATIVE_PATH CURRENT_PACKAGES_DIR NORMALIZE install_dir_native)
+ foreach(build_type IN ITEMS debug release)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL build_type)
+ if(build_type STREQUAL "debug")
+ # Generate obj dir suffix
+ set(short_build_type "-dbg")
+ # Add install command and arguments
+ set(make_opts "${make_opts_base}")
+ if (arg_ENABLE_INSTALL)
+ vcpkg_list(APPEND make_opts "INSTALLDIR=${install_dir_native}\\debug")
+ endif()
+ vcpkg_list(APPEND make_opts ${arg_OPTIONS} ${arg_OPTIONS_DEBUG})
+ if(NOT arg_CL_LANGUAGE STREQUAL "NONE")
+ set(ENV{_CL_} "${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_DEBUG}")
+ endif()
+ set(ENV{_LINK_} "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
+
+ set(prerun_variable_name arg_PRERUN_SHELL_DEBUG)
+ else()
+ set(short_build_type "-rel")
+ # Add install command and arguments
+ set(make_opts "${make_opts_base}")
+ if (arg_ENABLE_INSTALL)
+ vcpkg_list(APPEND make_opts "INSTALLDIR=${install_dir_native}")
+ endif()
+ vcpkg_list(APPEND make_opts ${arg_OPTIONS} ${arg_OPTIONS_RELEASE})
+
+ if(NOT arg_CL_LANGUAGE STREQUAL "NONE")
+ set(ENV{_CL_} "${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_RELEASE}")
+ endif()
+ set(ENV{_LINK_} "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+ set(prerun_variable_name arg_PRERUN_SHELL_RELEASE)
+ endif()
+
+ set(triplet_and_build_type "${TARGET_TRIPLET}${short_build_type}")
+ set(object_dir "${CURRENT_BUILDTREES_DIR}/${triplet_and_build_type}")
+
+ file(REMOVE_RECURSE "${object_dir}")
+ file(COPY "${arg_SOURCE_PATH}/" DESTINATION "${object_dir}")
+
+ if(DEFINED arg_PRERUN_SHELL)
+ message(STATUS "Prerunning ${triplet_and_build_type}")
+ vcpkg_execute_required_process(
+ COMMAND ${arg_PRERUN_SHELL}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ LOGNAME "prerun-${triplet_and_build_type}"
+ )
+ endif()
+ if(DEFINED "${prerun_variable_name}")
+ message(STATUS "Prerunning ${triplet_and_build_type}")
+ vcpkg_execute_required_process(
+ COMMAND ${${prerun_variable_name}}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ LOGNAME "prerun-specific-${triplet_and_build_type}"
+ )
+ endif()
+
+ if (NOT arg_ENABLE_INSTALL)
+ message(STATUS "Building ${triplet_and_build_type}")
+ else()
+ message(STATUS "Building and installing ${triplet_and_build_type}")
+ endif()
+
+ set(run_nmake TRUE)
+ set(tool_suffix "")
+ if(arg_PREFER_JOM)
+ execute_process(
+ COMMAND "${JOM}" /K /J ${VCPKG_CONCURRENCY} ${make_opts}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ OUTPUT_FILE "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_ROOT}-${triplet_and_build_type}-jom-out.log"
+ ERROR_FILE "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_ROOT}-${triplet_and_build_type}-jom-err.log"
+ RESULT_VARIABLE error_code
+ )
+ if(error_code EQUAL "0")
+ set(run_nmake FALSE)
+ else()
+ message(STATUS "Restarting build without parallelism")
+ set(tool_suffix "-nmake")
+ endif()
+ endif()
+ if(run_nmake)
+ vcpkg_execute_build_process(
+ COMMAND "${NMAKE}" ${make_opts}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${triplet_and_build_type}${tool_suffix}"
+ )
+ endif()
+
+ vcpkg_restore_env_variables(VARS _CL_ LINK)
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake
new file mode 100644
index 0000000..248af60
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake
@@ -0,0 +1,82 @@
+function(z_run_jom_build invoke_command targets log_prefix log_suffix)
+ message(STATUS "Package ${log_prefix}-${TARGET_TRIPLET}-${log_suffix}")
+ vcpkg_execute_build_process(
+ COMMAND "${invoke_command}" -j ${VCPKG_CONCURRENCY} ${targets}
+ NO_PARALLEL_COMMAND "${invoke_command}" -j 1 ${targets}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${log_suffix}"
+ LOGNAME "package-${log_prefix}-${TARGET_TRIPLET}-${log_suffix}"
+ )
+endfunction()
+
+function(vcpkg_build_qmake)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "SKIP_MAKEFILES"
+ "BUILD_LOGNAME"
+ "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS"
+ )
+
+ # Make sure that the linker finds the libraries used
+ vcpkg_backup_env_variables(VARS PATH LD_LIBRARY_PATH CL _CL_)
+
+ # This fixes issues on machines with default codepages that are not ASCII compatible, such as some CJK encodings
+ set(ENV{_CL_} "/utf-8")
+
+ if(CMAKE_HOST_WIN32)
+ if(VCPKG_TARGET_IS_MINGW)
+ find_program(MINGW32_MAKE mingw32-make REQUIRED)
+ set(invoke_command "${MINGW32_MAKE}")
+ elseif (VCPKG_QMAKE_USE_NMAKE)
+ find_program(NMAKE nmake)
+ set(invoke_command "${NMAKE}")
+ get_filename_component(nmake_exe_path "${NMAKE}" DIRECTORY)
+ vcpkg_host_path_list(APPEND ENV{PATH} "${nmake_exe_path}")
+ set(ENV{CL} "$ENV{CL} /MP${VCPKG_CONCURRENCY}")
+ else()
+ vcpkg_find_acquire_program(JOM)
+ set(invoke_command "${JOM}")
+ endif()
+ else()
+ find_program(MAKE make)
+ set(invoke_command "${MAKE}")
+ endif()
+
+ if(NOT DEFINED arg_BUILD_LOGNAME)
+ set(arg_BUILD_LOGNAME build)
+ endif()
+
+ set(short_name_debug "dbg")
+ set(path_suffix_debug "/debug")
+ set(targets_debug "${arg_DEBUG_TARGETS}")
+
+ set(short_name_release "rel")
+ set(path_suffix_release "")
+ set(targets_release "${arg_RELEASE_TARGETS}")
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE)
+ set(items debug release)
+ else()
+ set(items release)
+ endif()
+ foreach(build_type IN ITEMS ${items})
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}${path_suffix_${build_type}}")
+
+ vcpkg_add_to_path(PREPEND "${current_installed_prefix}/lib" "${current_installed_prefix}/bin")
+
+ # We set LD_LIBRARY_PATH ENV variable to allow executing Qt tools (rcc,...) even with dynamic linking
+ if(CMAKE_HOST_UNIX)
+ set(ENV{LD_LIBRARY_PATH} "")
+ vcpkg_host_path_list(APPEND ENV{LD_LIBRARY_PATH} "${current_installed_prefix}/lib" "${current_installed_prefix}/lib/manual-link")
+ endif()
+
+ vcpkg_list(SET targets ${targets_${build_type}} ${arg_TARGETS})
+ if(NOT arg_SKIP_MAKEFILES)
+ z_run_jom_build("${invoke_command}" qmake_all makefiles "${short_name_${build_type}}")
+ endif()
+ z_run_jom_build("${invoke_command}" "${targets}" "${arg_BUILD_LOGNAME}" "${short_name_${build_type}}")
+
+ vcpkg_restore_env_variables(VARS PATH LD_LIBRARY_PATH)
+ endforeach()
+
+ vcpkg_restore_env_variables(VARS CL _CL_)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake b/vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake
new file mode 100644
index 0000000..bb7d684
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake
@@ -0,0 +1,8 @@
+function(vcpkg_buildpath_length_warning warning_length)
+ string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtrees_path_length)
+ if(buildtrees_path_length GREATER warning_length AND CMAKE_HOST_WIN32)
+ message(WARNING "${PORT}'s buildsystem uses very long paths and may fail on your system.\n"
+ "We recommend moving vcpkg to a short path such as 'C:\\src\\vcpkg' or using the subst command."
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_check_features.cmake b/vcpkg/scripts/cmake/vcpkg_check_features.cmake
new file mode 100644
index 0000000..c6bec1f
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_check_features.cmake
@@ -0,0 +1,96 @@
+function(z_vcpkg_check_features_last_feature out_var features_name features_list)
+ list(LENGTH features_list features_length)
+ math(EXPR features_length_mod_2 "${features_length} % 2")
+ if(NOT features_length_mod_2 EQUAL 0)
+ message(FATAL_ERROR "vcpkg_check_features has an incorrect number of arguments to ${features_name}")
+ endif()
+
+ math(EXPR last_feature "${features_length} / 2 - 1")
+ set("${out_var}" "${last_feature}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_check_features_get_feature idx features_list out_feature_name out_feature_var)
+ math(EXPR feature_name_idx "${idx} * 2")
+ math(EXPR feature_var_idx "${feature_name_idx} + 1")
+
+ list(GET features_list "${feature_name_idx}" feature_name)
+ list(GET features_list "${feature_var_idx}" feature_var)
+
+ set("${out_feature_name}" "${feature_name}" PARENT_SCOPE)
+ set("${out_feature_var}" "${feature_var}" PARENT_SCOPE)
+endfunction()
+
+function(vcpkg_check_features)
+ cmake_parse_arguments(
+ PARSE_ARGV 0 "arg"
+ ""
+ "OUT_FEATURE_OPTIONS;PREFIX"
+ "FEATURES;INVERTED_FEATURES"
+ )
+
+ if(NOT DEFINED arg_OUT_FEATURE_OPTIONS)
+ message(FATAL_ERROR "OUT_FEATURE_OPTIONS must be defined.")
+ endif()
+ if(NOT DEFINED arg_PREFIX)
+ set(prefix "")
+ else()
+ set(prefix "${arg_PREFIX}_")
+ endif()
+
+ set(feature_options)
+ set(feature_variables)
+
+ if(NOT DEFINED arg_FEATURES AND NOT DEFINED arg_INVERTED_FEATURES)
+ message(DEPRECATION
+"calling `vcpkg_check_features` without the `FEATURES` keyword has been deprecated.
+ Please add the `FEATURES` keyword to the call.")
+ set(arg_FEATURES "${arg_UNPARSED_ARGUMENTS}")
+ elseif(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_check_features called with unknown arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+
+
+ z_vcpkg_check_features_last_feature(last_feature "FEATURES" "${arg_FEATURES}")
+ if(last_feature GREATER_EQUAL 0)
+ foreach(feature_pair_idx RANGE "${last_feature}")
+ z_vcpkg_check_features_get_feature("${feature_pair_idx}" "${arg_FEATURES}" feature_name feature_var)
+
+ list(APPEND feature_variables "${feature_var}")
+ if(feature_name IN_LIST FEATURES)
+ list(APPEND feature_options "-D${feature_var}=ON")
+ set("${prefix}${feature_var}" ON PARENT_SCOPE)
+ else()
+ list(APPEND feature_options "-D${feature_var}=OFF")
+ set("${prefix}${feature_var}" OFF PARENT_SCOPE)
+ endif()
+ endforeach()
+ endif()
+
+ z_vcpkg_check_features_last_feature(last_inverted_feature "INVERTED_FEATURES" "${arg_INVERTED_FEATURES}")
+ if(last_inverted_feature GREATER_EQUAL 0)
+ foreach(feature_pair_idx RANGE "${last_inverted_feature}")
+ z_vcpkg_check_features_get_feature("${feature_pair_idx}" "${arg_INVERTED_FEATURES}" feature_name feature_var)
+
+ list(APPEND feature_variables "${feature_var}")
+ if(feature_name IN_LIST FEATURES)
+ list(APPEND feature_options "-D${feature_var}=OFF")
+ set("${prefix}${feature_var}" OFF PARENT_SCOPE)
+ else()
+ list(APPEND feature_options "-D${feature_var}=ON")
+ set("${prefix}${feature_var}" ON PARENT_SCOPE)
+ endif()
+ endforeach()
+ endif()
+
+ list(SORT feature_variables)
+ set(last_variable)
+ foreach(variable IN LISTS feature_variables)
+ if(variable STREQUAL last_variable)
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_check_features passed the same feature variable multiple times: '${variable}'")
+ endif()
+ set(last_variable ${variable})
+ endforeach()
+
+ set("${arg_OUT_FEATURE_OPTIONS}" "${feature_options}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_check_linkage.cmake b/vcpkg/scripts/cmake/vcpkg_check_linkage.cmake
new file mode 100644
index 0000000..80070ca
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_check_linkage.cmake
@@ -0,0 +1,47 @@
+function(vcpkg_check_linkage)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ONLY_STATIC_LIBRARY;ONLY_DYNAMIC_LIBRARY;ONLY_DYNAMIC_CRT;ONLY_STATIC_CRT"
+ ""
+ ""
+ )
+
+ 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)
+ elseif(arg_ONLY_DYNAMIC_LIBRARY AND "${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static")
+ if("${VCPKG_CRT_LINKAGE}" STREQUAL "static")
+ message(FATAL_ERROR "This port can only build as a dynamic library, but the triplet \
+selects a static library and a static CRT. Building a dynamic library with a static CRT creates \
+conditions many developers find surprising, and for which most ports are unprepared. Therefore, \
+vcpkg fails rather than changing VCPKG_LIBRARY_LINKAGE to dynamic.\
+
+Consider choosing a triplet that sets VCPKG_CRT_LINKAGE to dynamic. For more information, \
+explicitly requesting this configuration in a custom triplet, please see \
+https://learn.microsoft.com/vcpkg/maintainers/functions/vcpkg_check_linkage?WT.mc_id=vcpkg_inproduct_cli#notes \
+
+If you can edit the port calling vcpkg_check_linkage that emits this message, consider adding \
+!(static & staticcrt) to the \"supports\" expression so that this combination can fail early.")
+ else()
+ message(STATUS "Note: ${PORT} only supports dynamic library linkage. Building dynamic library.")
+ endif()
+
+ set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE)
+ endif()
+
+ if(arg_ONLY_DYNAMIC_CRT AND "${VCPKG_CRT_LINKAGE}" STREQUAL "static")
+ message(FATAL_ERROR "${PORT} only supports dynamic crt linkage")
+ 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/vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake b/vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
new file mode 100644
index 0000000..f3c7a75
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake
@@ -0,0 +1,46 @@
+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)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "FILE_NAMES")
+
+ if(NOT DEFINED arg_FILE_NAMES)
+ message(FATAL_ERROR "FILE_NAMES must be specified.")
+ endif()
+
+ 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}"
+ "${CURRENT_PACKAGES_DIR}/bin/${file_name}.pdb"
+ "${CURRENT_PACKAGES_DIR}/debug/bin/${file_name}.pdb"
+ )
+ if(NOT VCPKG_TARGET_BUNDLE_SUFFIX STREQUAL "")
+ file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/bin/${file_name}${VCPKG_TARGET_BUNDLE_SUFFIX}"
+ "${CURRENT_PACKAGES_DIR}/debug/bin/${file_name}${VCPKG_TARGET_BUNDLE_SUFFIX}"
+ )
+ endif()
+ endforeach()
+
+ 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/vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake b/vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake
new file mode 100644
index 0000000..904f40a
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake
@@ -0,0 +1,9 @@
+function(vcpkg_clean_msbuild)
+ if(NOT ARGC EQUAL 0)
+ message(WARNING "vcpkg_clean_msbuild was passed extra arguments: ${ARGV}")
+ endif()
+ file(REMOVE_RECURSE
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
+ )
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_common_definitions.cmake b/vcpkg/scripts/cmake/vcpkg_common_definitions.cmake
new file mode 100644
index 0000000..d5da867
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_common_definitions.cmake
@@ -0,0 +1,220 @@
+string(COMPARE NOTEQUAL "${TARGET_TRIPLET}" "${HOST_TRIPLET}" VCPKG_CROSSCOMPILING)
+#Helper variable to identify the Target system. VCPKG_TARGET_IS_<targetname>
+if (NOT DEFINED VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "")
+ set(VCPKG_TARGET_IS_WINDOWS ON)
+
+ if(DEFINED VCPKG_XBOX_CONSOLE_TARGET AND NOT "${VCPKG_XBOX_CONSOLE_TARGET}" STREQUAL "")
+ set(VCPKG_TARGET_IS_XBOX ON)
+ endif()
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ set(VCPKG_TARGET_IS_WINDOWS ON)
+ set(VCPKG_TARGET_IS_UWP ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+ set(VCPKG_TARGET_IS_OSX ON)
+ set(VCPKG_TARGET_IS_APPLE ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "iOS")
+ set(VCPKG_TARGET_IS_IOS ON)
+ set(VCPKG_TARGET_IS_APPLE ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "watchOS")
+ set(VCPKG_TARGET_IS_WATCHOS ON)
+ set(VCPKG_TARGET_IS_APPLE ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "tvOS")
+ set(VCPKG_TARGET_IS_TVOS ON)
+ set(VCPKG_TARGET_IS_APPLE ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "visionOS")
+ set(VCPKG_TARGET_IS_VISIONOS ON)
+ set(VCPKG_TARGET_IS_APPLE ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ set(VCPKG_TARGET_IS_LINUX ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android")
+ set(VCPKG_TARGET_IS_ANDROID ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(VCPKG_TARGET_IS_FREEBSD ON)
+ set(VCPKG_TARGET_IS_BSD ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
+ set(VCPKG_TARGET_IS_OPENBSD ON)
+ set(VCPKG_TARGET_IS_BSD ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
+ set(VCPKG_TARGET_IS_NETBSD ON)
+ set(VCPKG_TARGET_IS_BSD ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "SunOS")
+ set(VCPKG_TARGET_IS_SOLARIS ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
+ set(VCPKG_TARGET_IS_WINDOWS ON)
+ set(VCPKG_TARGET_IS_MINGW ON)
+elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Emscripten")
+ set(VCPKG_TARGET_IS_EMSCRIPTEN ON)
+endif()
+
+#Helper variables to identify the host system name
+if (CMAKE_HOST_WIN32)
+ set(VCPKG_HOST_IS_WINDOWS ON)
+elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ set(VCPKG_HOST_IS_OSX ON)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(VCPKG_HOST_IS_LINUX ON)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(VCPKG_HOST_IS_FREEBSD ON)
+ set(VCPKG_HOST_IS_BSD ON)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")
+ set(VCPKG_HOST_IS_OPENBSD ON)
+ set(VCPKG_HOST_IS_BSD ON)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "NetBSD")
+ set(VCPKG_HOST_IS_NETBSD ON)
+ set(VCPKG_HOST_IS_BSD ON)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")
+ set(VCPKG_HOST_IS_SOLARIS ON)
+endif()
+
+#Helper variable to identify the host path separator.
+if(CMAKE_HOST_WIN32)
+ set(VCPKG_HOST_PATH_SEPARATOR ";")
+elseif(CMAKE_HOST_UNIX)
+ set(VCPKG_HOST_PATH_SEPARATOR ":")
+endif()
+
+#Helper variables to identify executables on host/target
+if(CMAKE_HOST_WIN32)
+ set(VCPKG_HOST_EXECUTABLE_SUFFIX ".exe")
+else()
+ set(VCPKG_HOST_EXECUTABLE_SUFFIX "")
+endif()
+#set(CMAKE_EXECUTABLE_SUFFIX ${VCPKG_HOST_EXECUTABLE_SUFFIX}) not required by find_program
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ set(VCPKG_TARGET_EXECUTABLE_SUFFIX ".exe")
+else()
+ set(VCPKG_TARGET_EXECUTABLE_SUFFIX "")
+endif()
+
+#Helper variables to identify bundles on host/target
+if(VCPKG_HOST_IS_OSX)
+ set(VCPKG_HOST_BUNDLE_SUFFIX ".app")
+else()
+ set(VCPKG_HOST_BUNDLE_SUFFIX "")
+endif()
+
+if(VCPKG_TARGET_IS_APPLE)
+ set(VCPKG_TARGET_BUNDLE_SUFFIX ".app")
+else()
+ set(VCPKG_TARGET_BUNDLE_SUFFIX "")
+endif()
+
+#Helper variables for libraries
+if(VCPKG_TARGET_IS_MINGW)
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".dll.a")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dll")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_PREFIX "lib")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".dll" ".dll.a" ".a" ".lib")
+ set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "")
+elseif(VCPKG_TARGET_IS_WINDOWS)
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".lib")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dll")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".lib")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_PREFIX "")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".lib" ".dll") #This is a slight modification to CMakes value which does not include ".dll".
+ set(VCPKG_FIND_LIBRARY_PREFIXES "" "lib") #This is a slight modification to CMakes value which does not include "lib".
+elseif(VCPKG_TARGET_IS_APPLE)
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX "")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dylib")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
+ set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "")
+else()
+ set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a")
+ set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX "")
+ set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".so")
+ set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib")
+ set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib")
+ set(VCPKG_FIND_LIBRARY_SUFFIXES ".so" ".a")
+ set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "")
+endif()
+#Setting these variables allows find_library to work in script mode and thus in portfiles!
+#This allows us scale down on hardcoded target dependent paths in portfiles
+set(CMAKE_STATIC_LIBRARY_SUFFIX "${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}")
+set(CMAKE_SHARED_LIBRARY_SUFFIX "${VCPKG_TARGET_SHARED_LIBRARY_SUFFIX}")
+set(CMAKE_IMPORT_LIBRARY_SUFFIX "${VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX}")
+set(CMAKE_STATIC_LIBRARY_PREFIX "${VCPKG_TARGET_STATIC_LIBRARY_PREFIX}")
+set(CMAKE_SHARED_LIBRARY_PREFIX "${VCPKG_TARGET_SHARED_LIBRARY_PREFIX}")
+set(CMAKE_IMPORT_LIBRARY_PREFIX "${VCPKG_TARGET_IMPORT_LIBRARY_PREFIX}")
+
+set(CMAKE_FIND_LIBRARY_SUFFIXES "${VCPKG_FIND_LIBRARY_SUFFIXES}" CACHE INTERNAL "") # Required by find_library
+set(CMAKE_FIND_LIBRARY_PREFIXES "${VCPKG_FIND_LIBRARY_PREFIXES}" CACHE INTERNAL "") # Required by find_library
+
+# Append platform libraries to VCPKG_SYSTEM_LIBRARIES
+# The variable are just appended to permit to custom triplets define the variable
+
+# Platforms with libdl
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES dl)
+endif()
+
+# Platforms with libm
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_MINGW)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES m)
+endif()
+
+# Platforms with pthread
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES pthread)
+endif()
+
+# Platforms with libstdc++
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES [[stdc\+\+]])
+endif()
+
+# Platforms with libc++
+if(VCPKG_TARGET_IS_OSX)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES [[c\+\+]])
+endif()
+
+# Platforms with librt
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_MINGW)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES rt)
+endif()
+
+# Platforms with GCC libs
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES gcc)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES gcc_s)
+endif()
+
+# Platforms with system iconv
+if(VCPKG_TARGET_IS_OSX)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES iconv)
+endif()
+
+# Windows system libs
+if(VCPKG_TARGET_IS_WINDOWS)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES advapi32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES bcrypt)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES dinput8)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES gdi32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES imm32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES oleaut32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES ole32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES psapi)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES secur32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES setupapi)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES shell32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES shlwapi)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES strmiids)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES user32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES uuid)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES version)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES vfw32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES winmm)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES wsock32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES Ws2_32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES wldap32)
+ list(APPEND VCPKG_SYSTEM_LIBRARIES crypt32)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_common_functions.cmake b/vcpkg/scripts/cmake/vcpkg_common_functions.cmake
new file mode 100644
index 0000000..5151647
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_common_functions.cmake
@@ -0,0 +1,3 @@
+# DEPRECATED
+
+message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_common_functions has been removed and all values are automatically provided in all portfile.cmake invocations. Please remove `include(vcpkg_common_functions)`.")
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake
new file mode 100644
index 0000000..94b4f03
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake
@@ -0,0 +1,372 @@
+function(z_vcpkg_configure_cmake_both_or_neither_set var1 var2)
+ if(DEFINED "${var1}" AND NOT DEFINED "${var2}")
+ message(FATAL_ERROR "If ${var1} is set, ${var2} must be set.")
+ endif()
+ if(NOT DEFINED "${var1}" AND DEFINED "${var2}")
+ message(FATAL_ERROR "If ${var2} is set, ${var1} must be set.")
+ endif()
+endfunction()
+function(z_vcpkg_configure_cmake_build_cmakecache out_var whereat build_type)
+ set(line "build ${whereat}/CMakeCache.txt: CreateProcess\n")
+ string(APPEND line " process = \"${CMAKE_COMMAND}\" -E chdir \"${whereat}\"")
+ foreach(arg IN LISTS "${build_type}_command")
+ string(APPEND line " \"${arg}\"")
+ endforeach()
+ set("${out_var}" "${${out_var}}${line}\n\n" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_get_visual_studio_generator)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "OUT_GENERATOR;OUT_ARCH" "")
+
+ if (NOT DEFINED arg_OUT_GENERATOR)
+ message(FATAL_ERROR "OUT_GENERATOR must be defined.")
+ endif()
+ if(NOT DEFINED arg_OUT_ARCH)
+ message(FATAL_ERROR "OUT_ARCH must be defined.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(DEFINED ENV{VisualStudioVersion})
+ if("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "12.99" AND
+ "$ENV{VisualStudioVersion}" VERSION_GREATER_EQUAL "12.0" AND
+ NOT "${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64")
+ set(generator "Visual Studio 12 2013")
+ elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "14.99" AND
+ NOT "${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64")
+ set(generator "Visual Studio 14 2015")
+ elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "15.99")
+ set(generator "Visual Studio 15 2017")
+ elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "16.99")
+ set(generator "Visual Studio 16 2019")
+ elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "17.99")
+ set(generator "Visual Studio 17 2022")
+ endif()
+ endif()
+
+ if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x86")
+ set(generator_arch "Win32")
+ elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64")
+ set(generator_arch "x64")
+ elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm")
+ set(generator_arch "ARM")
+ elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64")
+ set(generator_arch "ARM64")
+ endif()
+ set(${arg_OUT_GENERATOR} "${generator}" PARENT_SCOPE)
+ set(${arg_OUT_ARCH} "${generator_arch}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_select_default_vcpkg_chainload_toolchain)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${Z_VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" PARENT_SCOPE)
+endfunction()
+
+
+function(vcpkg_configure_cmake)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "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(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified")
+ endif()
+ if(NOT DEFINED arg_LOGNAME)
+ set(arg_LOGNAME "config-${TARGET_TRIPLET}")
+ endif()
+
+ vcpkg_list(SET manually_specified_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([^:=]*)[:=]")
+ vcpkg_list(APPEND manually_specified_variables "${CMAKE_MATCH_1}")
+ endif()
+ endforeach()
+ vcpkg_list(REMOVE_DUPLICATES manually_specified_variables)
+ foreach(maybe_unused_var IN LISTS arg_MAYBE_UNUSED_VARIABLES)
+ vcpkg_list(REMOVE_ITEM manually_specified_variables "${maybe_unused_var}")
+ endforeach()
+ debug_message("manually specified variables: ${manually_specified_variables}")
+ endif()
+
+ set(ninja_can_be_used ON) # Ninja as generator
+ set(ninja_host ON) # Ninja as parallel configurator
+
+ if(NOT arg_PREFER_NINJA AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ set(ninja_can_be_used OFF)
+ endif()
+
+ if(VCPKG_HOST_IS_WINDOWS)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(host_arch "$ENV{PROCESSOR_ARCHITEW6432}")
+ else()
+ set(host_arch "$ENV{PROCESSOR_ARCHITECTURE}")
+ endif()
+
+ if("${host_arch}" STREQUAL "x86")
+ # Prebuilt ninja binaries are only provided for x64 hosts
+ set(ninja_can_be_used OFF)
+ set(ninja_host OFF)
+ endif()
+ endif()
+
+ set(generator "Ninja") # the default generator is always ninja!
+ set(generator_arch "")
+ if(DEFINED arg_GENERATOR)
+ set(generator "${arg_GENERATOR}")
+ elseif(NOT ninja_can_be_used)
+ set(generator "")
+ z_vcpkg_get_visual_studio_generator(OUT_GENERATOR generator OUT_ARCH generator_arch)
+ if("${generator}" STREQUAL "" OR "${generator_arch}" STREQUAL "")
+ message(FATAL_ERROR
+ "Unable to determine appropriate generator for triplet ${TARGET_TRIPLET}:
+ ENV{VisualStudioVersion} : $ENV{VisualStudioVersion}
+ platform toolset: ${VCPKG_PLATFORM_TOOLSET}
+ architecture : ${VCPKG_TARGET_ARCHITECTURE}")
+ endif()
+ if(DEFINED VCPKG_PLATFORM_TOOLSET)
+ vcpkg_list(APPEND arg_OPTIONS "-T${VCPKG_PLATFORM_TOOLSET}")
+ endif()
+ endif()
+
+ # If we use Ninja, make sure it's on PATH
+ if("${generator}" STREQUAL "Ninja" AND NOT DEFINED ENV{VCPKG_FORCE_SYSTEM_BINARIES})
+ vcpkg_find_acquire_program(NINJA)
+ get_filename_component(ninja_path "${NINJA}" DIRECTORY)
+ vcpkg_add_to_path("${ninja_path}")
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_MAKE_PROGRAM=${NINJA}")
+ endif()
+
+ file(REMOVE_RECURSE
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_NAME)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
+ if(VCPKG_TARGET_IS_UWP AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(VCPKG_CMAKE_SYSTEM_VERSION 10.0)
+ elseif(VCPKG_TARGET_IS_ANDROID AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(VCPKG_CMAKE_SYSTEM_VERSION 21)
+ endif()
+ endif()
+
+ if(DEFINED VCPKG_XBOX_CONSOLE_TARGET)
+ vcpkg_list(APPEND arg_OPTIONS "-DXBOX_CONSOLE_TARGET=${VCPKG_XBOX_CONSOLE_TARGET}")
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
+ endif()
+
+ if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "dynamic")
+ vcpkg_list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=ON)
+ elseif("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static")
+ vcpkg_list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=OFF)
+ else()
+ message(FATAL_ERROR
+ "Invalid setting for VCPKG_LIBRARY_LINKAGE: \"${VCPKG_LIBRARY_LINKAGE}\".
+ It must be \"static\" or \"dynamic\"")
+ endif()
+
+ z_vcpkg_configure_cmake_both_or_neither_set(VCPKG_CXX_FLAGS_DEBUG VCPKG_C_FLAGS_DEBUG)
+ z_vcpkg_configure_cmake_both_or_neither_set(VCPKG_CXX_FLAGS_RELEASE VCPKG_C_FLAGS_RELEASE)
+ z_vcpkg_configure_cmake_both_or_neither_set(VCPKG_CXX_FLAGS VCPKG_C_FLAGS)
+
+ set(vcpkg_set_charset_flag ON)
+ if(arg_NO_CHARSET_FLAG)
+ set(vcpkg_set_charset_flag OFF)
+ endif()
+
+ if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ z_vcpkg_select_default_vcpkg_chainload_toolchain()
+ endif()
+
+ vcpkg_list(APPEND arg_OPTIONS
+ "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}"
+ "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}"
+ "-DVCPKG_SET_CHARSET_FLAG=${vcpkg_set_charset_flag}"
+ "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}"
+ "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON"
+ "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON"
+ "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON"
+ "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE"
+ "-DCMAKE_VERBOSE_MAKEFILE=ON"
+ "-DVCPKG_APPLOCAL_DEPS=OFF"
+ "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake"
+ "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON"
+ "-DVCPKG_CXX_FLAGS=${VCPKG_CXX_FLAGS}"
+ "-DVCPKG_CXX_FLAGS_RELEASE=${VCPKG_CXX_FLAGS_RELEASE}"
+ "-DVCPKG_CXX_FLAGS_DEBUG=${VCPKG_CXX_FLAGS_DEBUG}"
+ "-DVCPKG_C_FLAGS=${VCPKG_C_FLAGS}"
+ "-DVCPKG_C_FLAGS_RELEASE=${VCPKG_C_FLAGS_RELEASE}"
+ "-DVCPKG_C_FLAGS_DEBUG=${VCPKG_C_FLAGS_DEBUG}"
+ "-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}"
+ "-DVCPKG_LINKER_FLAGS=${VCPKG_LINKER_FLAGS}"
+ "-DVCPKG_LINKER_FLAGS_RELEASE=${VCPKG_LINKER_FLAGS_RELEASE}"
+ "-DVCPKG_LINKER_FLAGS_DEBUG=${VCPKG_LINKER_FLAGS_DEBUG}"
+ "-DVCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}"
+ "-DCMAKE_INSTALL_LIBDIR:STRING=lib"
+ "-DCMAKE_INSTALL_BINDIR:STRING=bin"
+ "-D_VCPKG_ROOT_DIR=${VCPKG_ROOT_DIR}"
+ "-DZ_VCPKG_ROOT_DIR=${VCPKG_ROOT_DIR}"
+ "-D_VCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}"
+ "-DVCPKG_MANIFEST_INSTALL=OFF"
+ )
+
+ if(NOT "${generator_arch}" STREQUAL "")
+ vcpkg_list(APPEND arg_OPTIONS "-A${generator_arch}")
+ endif()
+
+ # Sets configuration variables for macOS builds
+ foreach(config_var IN ITEMS INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT OSX_ARCHITECTURES)
+ if(DEFINED "VCPKG_${config_var}")
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_${config_var}=${VCPKG_${config_var}}")
+ endif()
+ endforeach()
+
+ # Allow overrides / additional configuration variables from triplets
+ if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS)
+ vcpkg_list(APPEND arg_OPTIONS ${VCPKG_CMAKE_CONFIGURE_OPTIONS})
+ endif()
+ if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE ${VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE})
+ endif()
+ if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG)
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG ${VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG})
+ endif()
+
+ vcpkg_list(SET rel_command
+ "${CMAKE_COMMAND}" "${arg_SOURCE_PATH}"
+ -G "${generator}"
+ "-DCMAKE_BUILD_TYPE=Release"
+ "-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}"
+ ${arg_OPTIONS} ${arg_OPTIONS_RELEASE})
+ vcpkg_list(SET dbg_command
+ "${CMAKE_COMMAND}" "${arg_SOURCE_PATH}"
+ -G "${generator}"
+ "-DCMAKE_BUILD_TYPE=Debug"
+ "-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug"
+ ${arg_OPTIONS} ${arg_OPTIONS_DEBUG})
+
+ if(ninja_host AND CMAKE_HOST_WIN32 AND NOT arg_DISABLE_PARALLEL_CONFIGURE)
+ vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_DISABLE_SOURCE_CHANGES=ON")
+
+ vcpkg_find_acquire_program(NINJA)
+ if(NOT DEFINED ninja_path)
+ # if ninja_path was defined above, we've already done this
+ get_filename_component(ninja_path "${NINJA}" DIRECTORY)
+ vcpkg_add_to_path("${ninja_path}")
+ endif()
+
+ #parallelize the configure step
+ set(ninja_configure_contents
+ "rule CreateProcess\n command = \$process\n\n"
+ )
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release")
+ z_vcpkg_configure_cmake_build_cmakecache(ninja_configure_contents ".." "rel")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug")
+ z_vcpkg_configure_cmake_build_cmakecache(ninja_configure_contents "../../${TARGET_TRIPLET}-dbg" "dbg")
+ endif()
+
+ 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"
+ "${ninja_configure_contents}")
+
+ message(STATUS "${configuring_message}")
+ vcpkg_execute_required_process(
+ COMMAND "${NINJA}" -v
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure"
+ LOGNAME "${arg_LOGNAME}"
+ SAVE_LOG_FILES
+ "../../${TARGET_TRIPLET}-dbg/CMakeCache.txt" ALIAS "dbg-CMakeCache.txt.log"
+ "../CMakeCache.txt" ALIAS "rel-CMakeCache.txt.log"
+ )
+
+ vcpkg_list(APPEND config_logs
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out.log"
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-err.log")
+ else()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug")
+ message(STATUS "${configuring_message}-dbg")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ vcpkg_execute_required_process(
+ COMMAND ${dbg_command}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"
+ LOGNAME "${arg_LOGNAME}-dbg"
+ SAVE_LOG_FILES CMakeCache.txt
+ )
+ vcpkg_list(APPEND config_logs
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-dbg-out.log"
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-dbg-err.log")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release")
+ message(STATUS "${configuring_message}-rel")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ vcpkg_execute_required_process(
+ COMMAND ${rel_command}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
+ LOGNAME "${arg_LOGNAME}-rel"
+ SAVE_LOG_FILES CMakeCache.txt
+ )
+ vcpkg_list(APPEND config_logs
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-rel-out.log"
+ "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-rel-err.log")
+ endif()
+ endif()
+
+ # Check unused variables
+ vcpkg_list(SET all_unused_variables)
+ foreach(config_log IN LISTS config_logs)
+ if(NOT EXISTS "${config_log}")
+ continue()
+ endif()
+ file(READ "${config_log}" log_contents)
+ debug_message("Reading configure log ${config_log}...")
+ if(NOT "${log_contents}" MATCHES "Manually-specified variables were not used by the project:\n\n(( [^\n]*\n)*)")
+ continue()
+ endif()
+ string(STRIP "${CMAKE_MATCH_1}" unused_variables) # remove leading ` ` and trailing `\n`
+ string(REPLACE "\n " ";" unused_variables "${unused_variables}")
+ debug_message("unused variables: ${unused_variables}")
+
+ foreach(unused_variable IN LISTS unused_variables)
+ if("${unused_variable}" IN_LIST manually_specified_variables)
+ debug_message("manually specified unused variable: ${unused_variable}")
+ vcpkg_list(APPEND all_unused_variables "${unused_variable}")
+ else()
+ debug_message("unused variable (not manually specified): ${unused_variable}")
+ endif()
+ endforeach()
+ endforeach()
+
+ if(NOT "${all_unused_variables}" STREQUAL "")
+ vcpkg_list(REMOVE_DUPLICATES all_unused_variables)
+ vcpkg_list(JOIN all_unused_variables "\n " all_unused_variables)
+ message(WARNING "The following variables are not used in CMakeLists.txt:
+ ${all_unused_variables}
+Please recheck them and remove the unnecessary options from the `vcpkg_configure_cmake` call.
+If these options should still be passed for whatever reason, please use the `MAYBE_UNUSED_VARIABLES` argument.")
+ endif()
+
+ if(NOT arg_Z_GET_CMAKE_VARS_USAGE)
+ set(Z_VCPKG_CMAKE_GENERATOR "${generator}" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_gn.cmake b/vcpkg/scripts/cmake/vcpkg_configure_gn.cmake
new file mode 100644
index 0000000..9fbcd4c
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_configure_gn.cmake
@@ -0,0 +1,52 @@
+function(z_vcpkg_configure_gn_generate)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "SOURCE_PATH;CONFIG;ARGS" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Internal error: generate was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ message(STATUS "Generating build (${arg_CONFIG})...")
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${arg_CONFIG}")
+ vcpkg_execute_required_process(
+ COMMAND "${GN}" gen "${CURRENT_BUILDTREES_DIR}/${arg_CONFIG}" "${arg_ARGS}"
+ WORKING_DIRECTORY "${arg_SOURCE_PATH}"
+ LOGNAME "generate-${arg_CONFIG}"
+ )
+endfunction()
+
+function(vcpkg_configure_gn)
+ if(Z_VCPKG_GN_CONFIGURE_GUARD)
+ message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-gn; using both vcpkg-gn and vcpkg_configure_gn in the same port is unsupported.")
+ else()
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "This function 'vcpkg_configure_gn' is obsolete. Use 'vcpkg_gn_configure' in port 'vcpkg-gn'.")
+ endif()
+
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "SOURCE_PATH;OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_configure_gn was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified.")
+ endif()
+
+ vcpkg_find_acquire_program(PYTHON3)
+ get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
+ vcpkg_add_to_path(PREPEND "${PYTHON3_DIR}")
+
+ vcpkg_find_acquire_program(GN)
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ z_vcpkg_configure_gn_generate(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ CONFIG "${TARGET_TRIPLET}-dbg"
+ ARGS "--args=${arg_OPTIONS} ${arg_OPTIONS_DEBUG}"
+ )
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ z_vcpkg_configure_gn_generate(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ CONFIG "${TARGET_TRIPLET}-rel"
+ ARGS "--args=${arg_OPTIONS} ${arg_OPTIONS_RELEASE}"
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_make.cmake b/vcpkg/scripts/cmake/vcpkg_configure_make.cmake
new file mode 100644
index 0000000..a54abf9
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_configure_make.cmake
@@ -0,0 +1,917 @@
+macro(z_vcpkg_determine_autotools_host_cpu out_var)
+ # TODO: the host system processor architecture can differ from the host triplet target architecture
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(host_arch $ENV{PROCESSOR_ARCHITEW6432})
+ elseif(DEFINED ENV{PROCESSOR_ARCHITECTURE})
+ set(host_arch $ENV{PROCESSOR_ARCHITECTURE})
+ else()
+ set(host_arch "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")
+ 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 z_vcpkg_determine_autotools_host_cpu!" )
+ endif()
+ unset(host_arch)
+endmacro()
+
+macro(z_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 z_vcpkg_determine_autotools_target_cpu!" )
+ endif()
+endmacro()
+
+macro(z_vcpkg_set_arch_mac out_var value)
+ # Better match the arch behavior of config.guess
+ # See: https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+ if("${value}" MATCHES "^(ARM|arm)64$")
+ set(${out_var} "aarch64")
+ else()
+ set(${out_var} "${value}")
+ endif()
+endmacro()
+
+macro(z_vcpkg_determine_autotools_host_arch_mac out_var)
+ z_vcpkg_set_arch_mac(${out_var} "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")
+endmacro()
+
+macro(z_vcpkg_determine_autotools_target_arch_mac out_var)
+ list(LENGTH VCPKG_OSX_ARCHITECTURES osx_archs_num)
+ if(osx_archs_num EQUAL 0)
+ z_vcpkg_set_arch_mac(${out_var} "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")
+ elseif(osx_archs_num GREATER_EQUAL 2)
+ set(${out_var} "universal")
+ else()
+ z_vcpkg_set_arch_mac(${out_var} "${VCPKG_OSX_ARCHITECTURES}")
+ endif()
+ unset(osx_archs_num)
+endmacro()
+
+# Define variables used in both vcpkg_configure_make and vcpkg_build_make:
+# short_name_<CONFIG>: unique abbreviation for the given build type (rel, dbg)
+# path_suffix_<CONFIG>: installation path suffix for the given build type ('', /debug)
+# current_installed_dir_escaped: CURRENT_INSTALLED_DIR with escaped space characters
+# current_installed_dir_msys: CURRENT_INSTALLED_DIR with unprotected spaces, but drive letters transformed for msys
+macro(z_vcpkg_configure_make_common_definitions)
+ set(short_name_RELEASE "rel")
+ set(short_name_DEBUG "dbg")
+
+ set(path_suffix_RELEASE "")
+ set(path_suffix_DEBUG "/debug")
+
+ # Some PATH handling for dealing with spaces....some tools will still fail with that!
+ # In particular, the libtool install command is unable to install correctly to paths with spaces.
+ string(REPLACE " " "\\ " current_installed_dir_escaped "${CURRENT_INSTALLED_DIR}")
+ set(current_installed_dir_msys "${CURRENT_INSTALLED_DIR}")
+ if(CMAKE_HOST_WIN32)
+ string(REGEX REPLACE "^([a-zA-Z]):/" "/\\1/" current_installed_dir_msys "${current_installed_dir_msys}")
+ endif()
+endmacro()
+
+# Initializes well-known and auxiliary variables for flags
+# - CPPFLAGS_<CONFIG>: preprocessor flags common to C and CXX
+# - CFLAGS_<CONFIG>
+# - CXXFLAGS_<CONFIG>
+# - LDFLAGS_<CONFIG>
+# - ARFLAGS_<CONFIG>
+# - LINK_ENV_${var_suffix}
+# Prerequisite: VCPKG_DETECTED_CMAKE_... vars loaded
+function(z_vcpkg_configure_make_process_flags var_suffix)
+ # separate_arguments is needed to remove outer quotes from detected cmake variables.
+ # (e.g. Android NDK has "--sysroot=...")
+ separate_arguments(CFLAGS NATIVE_COMMAND "Z_VCM_WRAP ${VCPKG_DETECTED_CMAKE_C_FLAGS_${var_suffix}} Z_VCM_WRAP")
+ separate_arguments(CXXFLAGS NATIVE_COMMAND "Z_VCM_WRAP ${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${var_suffix}} Z_VCM_WRAP")
+ separate_arguments(LDFLAGS NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${var_suffix}}")
+ separate_arguments(ARFLAGS NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${var_suffix}}")
+ foreach(var IN ITEMS CFLAGS CXXFLAGS LDFLAGS ARFLAGS)
+ vcpkg_list(APPEND z_vcm_all_flags ${${var}})
+ endforeach()
+ set(z_vcm_all_flags "${z_vcm_all_flags}" PARENT_SCOPE)
+
+ # Filter common CPPFLAGS out of CFLAGS and CXXFLAGS
+ vcpkg_list(SET CPPFLAGS)
+ vcpkg_list(SET pattern)
+ foreach(arg IN LISTS CXXFLAGS)
+ if(arg STREQUAL "Z_VCM_WRAP")
+ continue()
+ elseif(NOT pattern STREQUAL "")
+ vcpkg_list(APPEND pattern "${arg}")
+ elseif(arg MATCHES "^-(D|isystem).")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(D|isystem)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ elseif(arg MATCHES "^-(-sysroot|-target|m?[Aa][Rr][Cc][Hh])=.")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(isysroot|m32|m64|m?[Aa][Rr][Cc][Hh]|target)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ else()
+ continue()
+ endif()
+ string(FIND "${CFLAGS}" ";${pattern};" index)
+ if(NOT index STREQUAL "-1")
+ vcpkg_list(APPEND CPPFLAGS ${pattern})
+ string(REPLACE ";${pattern};" ";" CFLAGS "${CFLAGS}")
+ string(REPLACE ";${pattern};" ";" CXXFLAGS "${CXXFLAGS}")
+ endif()
+ vcpkg_list(SET pattern)
+ endforeach()
+ vcpkg_list(SET pattern)
+ foreach(arg IN LISTS CFLAGS)
+ if(arg STREQUAL "Z_VCM_WRAP")
+ continue()
+ elseif(NOT pattern STREQUAL "")
+ vcpkg_list(APPEND pattern "${arg}")
+ elseif(arg MATCHES "^-(D|isystem)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ elseif(arg MATCHES "^-(D|isystem).")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(-sysroot|-target|m?[Aa][Rr][Cc][Hh])=.")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(isysroot|m32|m64|m?[Aa][Rr][Cc][Hh]|target)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ else()
+ continue()
+ endif()
+ string(FIND "${CXXFLAGS}" ";${pattern};" index)
+ if(NOT index STREQUAL "-1")
+ vcpkg_list(APPEND CPPFLAGS ${pattern})
+ string(REPLACE ";${pattern};" ";" CFLAGS "${CFLAGS}")
+ string(REPLACE ";${pattern};" ";" CXXFLAGS "${CXXFLAGS}")
+ endif()
+ vcpkg_list(SET pattern)
+ endforeach()
+
+ # Remove start/end placeholders
+ foreach(list IN ITEMS CFLAGS CXXFLAGS)
+ vcpkg_list(REMOVE_ITEM ${list} "Z_VCM_WRAP")
+ endforeach()
+
+ # libtool tries to filter CFLAGS passed to the link stage via an allow-list.
+ # This approach is flawed since it fails to pass flags unknown to libtool
+ # but required for linking to the link stage (e.g. -fsanitize=<x>).
+ # libtool has an -R option so we need to guard against -RTC by using -Xcompiler.
+ # While configuring there might be a lot of unknown compiler option warnings
+ # due to that; just ignore them.
+ set(compiler_flag_escape "")
+ if(VCPKG_DETECTED_CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" OR VCPKG_DETECTED_CMAKE_C_COMPILER_ID STREQUAL "MSVC")
+ set(compiler_flag_escape "-Xcompiler ")
+ endif()
+ if(compiler_flag_escape)
+ list(TRANSFORM CFLAGS PREPEND "${compiler_flag_escape}")
+ list(TRANSFORM CXXFLAGS PREPEND "${compiler_flag_escape}")
+ endif()
+
+ # Could use a future VCPKG_DETECTED_CMAKE_LIBRARY_PATH_FLAG
+ set(library_path_flag "-L")
+ # Could use a future VCPKG_DETECTED_MSVC
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_DETECTED_CMAKE_LINKER MATCHES [[link\.exe$]])
+ set(library_path_flag "-LIBPATH:")
+ endif()
+ set(linker_flag_escape "")
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES [[cl\.exe$]])
+ # Removed by libtool
+ set(linker_flag_escape "-Xlinker ")
+ if(arg_USE_WRAPPERS)
+ # 1st and 3rd are removed by libtool, 2nd by wrapper
+ set(linker_flag_escape "-Xlinker -Xlinker -Xlinker ")
+ endif()
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ string(STRIP "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${var_suffix}}" LINK_ENV)
+ else()
+ string(STRIP "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${var_suffix}}" LINK_ENV)
+ endif()
+ endif()
+ if(linker_flag_escape)
+ list(TRANSFORM LDFLAGS PREPEND "${linker_flag_escape}")
+ endif()
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${var_suffix}}/lib/manual-link")
+ vcpkg_list(PREPEND LDFLAGS "${linker_flag_escape}${library_path_flag}${current_installed_dir_escaped}${path_suffix_${var_suffix}}/lib/manual-link")
+ endif()
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${var_suffix}}/lib")
+ vcpkg_list(PREPEND LDFLAGS "${linker_flag_escape}${library_path_flag}${current_installed_dir_escaped}${path_suffix_${var_suffix}}/lib")
+ endif()
+
+ if(ARFLAGS)
+ # ARFLAGS need to know the command for creating an archive (Maybe needs user customization?)
+ # or extract it from CMake via CMAKE_${lang}_ARCHIVE_CREATE ?
+ # or from CMAKE_${lang}_${rule} with rule being one of CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE
+ vcpkg_list(PREPEND ARFLAGS "cr")
+ endif()
+
+ foreach(var IN ITEMS CPPFLAGS CFLAGS CXXFLAGS LDFLAGS ARFLAGS)
+ list(JOIN ${var} " " string)
+ set(${var}_${var_suffix} "${string}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+macro(z_vcpkg_append_to_configure_environment inoutstring var defaultval)
+ # Allows to overwrite settings in custom triplets via the environment on windows
+ if(CMAKE_HOST_WIN32 AND DEFINED ENV{${var}})
+ string(APPEND ${inoutstring} " ${var}='$ENV{${var}}'")
+ else()
+ string(APPEND ${inoutstring} " ${var}='${defaultval}'")
+ endif()
+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 arg
+ "AUTOCONFIG;SKIP_CONFIGURE;COPY_SOURCE;DISABLE_VERBOSE_FLAGS;NO_ADDITIONAL_PATHS;ADD_BIN_TO_PATH;NO_DEBUG;USE_WRAPPERS;NO_WRAPPERS;DETERMINE_BUILD_TRIPLET"
+ "SOURCE_PATH;PROJECT_SUBPATH;PRERUN_SHELL;BUILD_TRIPLET"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;CONFIGURE_ENVIRONMENT_VARIABLES;CONFIG_DEPENDENT_ENVIRONMENT;ADDITIONAL_MSYS_PACKAGES"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(arg_USE_WRAPPERS AND arg_NO_WRAPPERS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed conflicting options USE_WRAPPERS and NO_WRAPPERS. Please remove one of them!")
+ endif()
+
+ 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(arg_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling
+ endif()
+
+ set(src_dir "${arg_SOURCE_PATH}/${arg_PROJECT_SUBPATH}")
+
+ set(requires_autogen OFF) # use autogen.sh
+ set(requires_autoconfig OFF) # use autotools and configure.ac
+ if(EXISTS "${src_dir}/configure" AND EXISTS "${src_dir}/configure.ac" AND arg_AUTOCONFIG) # remove configure; rerun autoconf
+ set(requires_autoconfig ON)
+ file(REMOVE "${SRC_DIR}/configure") # remove possible outdated configure scripts
+ elseif(arg_SKIP_CONFIGURE)
+ # no action requested
+ elseif(EXISTS "${src_dir}/configure")
+ # run normally; no autoconf or autogen required
+ elseif(EXISTS "${src_dir}/configure.ac") # Run autoconfig
+ set(requires_autoconfig ON)
+ set(arg_AUTOCONFIG ON)
+ elseif(EXISTS "${src_dir}/autogen.sh") # Run autogen
+ set(requires_autogen ON)
+ else()
+ message(FATAL_ERROR "Could not determine method to configure make")
+ endif()
+
+ debug_message("requires_autogen:${requires_autogen}")
+ debug_message("requires_autoconfig:${requires_autoconfig}")
+
+ if(CMAKE_HOST_WIN32 AND VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "cl.exe") #only applies to windows (clang-)cl and lib
+ if(arg_AUTOCONFIG)
+ set(arg_USE_WRAPPERS ON)
+ else()
+ # Keep the setting from portfiles.
+ # Without autotools we assume a custom configure script which correctly handles cl and lib.
+ # Otherwise the port needs to set CC|CXX|AR and probably CPP.
+ endif()
+ else()
+ set(arg_USE_WRAPPERS OFF)
+ endif()
+ if(arg_NO_WRAPPERS)
+ set(arg_USE_WRAPPERS OFF)
+ endif()
+
+ # Backup environment variables
+ # CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJCXX R UPC Y
+ set(cm_FLAGS AR AS CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJXX R UPC Y RC)
+ list(TRANSFORM cm_FLAGS APPEND "FLAGS")
+ vcpkg_backup_env_variables(VARS ${cm_FLAGS})
+
+
+ # FC fotran compiler | FF Fortran 77 compiler
+ # LDFLAGS -> pass -L flags
+ # LIBS -> pass -l flags
+
+ # Used by gcc/linux
+ vcpkg_backup_env_variables(VARS C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH LD_LIBRARY_PATH)
+
+ # Used by cl
+ vcpkg_backup_env_variables(VARS INCLUDE LIB LIBPATH)
+
+ vcpkg_list(SET z_vcm_paths_with_spaces)
+ if(CURRENT_PACKAGES_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_PACKAGES_DIR}")
+ endif()
+ if(CURRENT_INSTALLED_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_INSTALLED_DIR}")
+ endif()
+ if(z_vcm_paths_with_spaces)
+ # Don't bother with whitespace. The tools will probably fail and I tried very hard trying to make it work (no success so far)!
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "Please move the path to one without whitespaces!")
+ list(JOIN z_vcm_paths_with_spaces "\n " z_vcm_paths_with_spaces)
+ message(STATUS "Warning: Paths with embedded space may be handled incorrectly by configure:\n ${z_vcm_paths_with_spaces}")
+ endif()
+
+ set(configure_env "V=1")
+
+ # Establish a bash environment as expected by autotools.
+ if(CMAKE_HOST_WIN32)
+ list(APPEND msys_require_packages autoconf-wrapper automake-wrapper binutils libtool make pkgconf which)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${msys_require_packages} ${arg_ADDITIONAL_MSYS_PACKAGES})
+ set(base_cmd "${MSYS_ROOT}/usr/bin/bash.exe" --noprofile --norc --debug)
+ vcpkg_list(SET add_to_env)
+ if(arg_USE_WRAPPERS AND VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_list(APPEND add_to_env "${SCRIPTS}/buildsystems/make_wrapper") # Other required wrappers are also located there
+ vcpkg_list(APPEND add_to_env "${MSYS_ROOT}/usr/share/automake-1.16")
+ endif()
+ cmake_path(CONVERT "$ENV{PATH}" TO_CMAKE_PATH_LIST path_list NORMALIZE)
+ cmake_path(CONVERT "$ENV{SystemRoot}" TO_CMAKE_PATH_LIST system_root NORMALIZE)
+ cmake_path(CONVERT "$ENV{LOCALAPPDATA}" TO_CMAKE_PATH_LIST local_app_data NORMALIZE)
+ file(REAL_PATH "${system_root}" system_root)
+
+ message(DEBUG "path_list:${path_list}") # Just to have --trace-expand output
+
+ vcpkg_list(SET find_system_dirs
+ "${system_root}/System32"
+ "${system_root}/System32/"
+ "${local_app_data}/Microsoft/WindowsApps"
+ "${local_app_data}/Microsoft/WindowsApps/"
+ )
+
+ string(TOUPPER "${find_system_dirs}" find_system_dirs_upper)
+
+ set(index 0)
+ set(appending TRUE)
+ foreach(item IN LISTS path_list)
+ string(TOUPPER "${item}" item_upper)
+ if(item_upper IN_LIST find_system_dirs_upper)
+ set(appending FALSE)
+ break()
+ endif()
+ math(EXPR index "${index} + 1")
+ endforeach()
+
+ if(appending)
+ message(WARNING "Unable to find system dir in the PATH variable! Appending required msys paths!")
+ endif()
+ vcpkg_list(INSERT path_list "${index}" ${add_to_env} "${MSYS_ROOT}/usr/bin")
+
+ cmake_path(CONVERT "${path_list}" TO_NATIVE_PATH_LIST native_path_list)
+ set(ENV{PATH} "${native_path_list}")
+ else()
+ find_program(base_cmd bash REQUIRED)
+ endif()
+
+ # Apple platforms - cross-compiling support
+ if(VCPKG_TARGET_IS_APPLE)
+ if (requires_autoconfig AND NOT arg_BUILD_TRIPLET OR arg_DETERMINE_BUILD_TRIPLET)
+ z_vcpkg_determine_autotools_host_arch_mac(BUILD_ARCH) # machine you are building on => --build=
+ z_vcpkg_determine_autotools_target_arch_mac(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
+ if(NOT "${TARGET_ARCH}" STREQUAL "${BUILD_ARCH}" OR NOT VCPKG_TARGET_IS_OSX) # we don't need to specify the additional flags if we build natively.
+ set(arg_BUILD_TRIPLET "--host=${TARGET_ARCH}-apple-darwin") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
+ endif()
+ debug_message("Using make triplet: ${arg_BUILD_TRIPLET}")
+ endif()
+ endif()
+
+ # Linux - cross-compiling support
+ if(VCPKG_TARGET_IS_LINUX)
+ if (requires_autoconfig AND NOT arg_BUILD_TRIPLET OR arg_DETERMINE_BUILD_TRIPLET)
+ # The regex below takes the prefix from the resulting CMAKE_C_COMPILER variable eg. arm-linux-gnueabihf-gcc
+ # set in the common toolchains/linux.cmake
+ # This is used via --host as a prefix for all other bin tools as well.
+ # Setting the compiler directly via CC=arm-linux-gnueabihf-gcc does not work acording to:
+ # https://www.gnu.org/software/autoconf/manual/autoconf-2.65/html_node/Specifying-Target-Triplets.html
+ if(VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "([^\/]*)-gcc$" AND CMAKE_MATCH_1)
+ set(arg_BUILD_TRIPLET "--host=${CMAKE_MATCH_1}") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
+ endif()
+ debug_message("Using make triplet: ${arg_BUILD_TRIPLET}")
+ endif()
+ endif()
+
+ # Pre-processing windows configure requirements
+ if (VCPKG_TARGET_IS_WINDOWS)
+ if (arg_DETERMINE_BUILD_TRIPLET OR NOT arg_BUILD_TRIPLET)
+ z_vcpkg_determine_autotools_host_cpu(BUILD_ARCH) # VCPKG_HOST => machine you are building on => --build=
+ z_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
+ if(CMAKE_HOST_WIN32)
+ # Respect host triplet when determining --build
+ if(NOT VCPKG_CROSSCOMPILING)
+ set(_win32_build_arch "${TARGET_ARCH}")
+ else()
+ set(_win32_build_arch "${BUILD_ARCH}")
+ endif()
+
+ # This is required since we are running in a msys
+ # shell which will be otherwise identified as ${BUILD_ARCH}-pc-msys
+ set(arg_BUILD_TRIPLET "--build=${_win32_build_arch}-pc-mingw32")
+ endif()
+ if(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}" OR NOT CMAKE_HOST_WIN32) # we don't need to specify the additional flags if we build nativly, this does not hold when we are not on windows
+ string(APPEND arg_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 arg_BUILD_TRIPLET MATCHES "--host")
+ # Needs to be different from --build to enable cross builds.
+ string(APPEND arg_BUILD_TRIPLET " --host=${TARGET_ARCH}-unknown-mingw32")
+ endif()
+ debug_message("Using make triplet: ${arg_BUILD_TRIPLET}")
+ endif()
+
+ # Remove full filepaths due to spaces and prepend filepaths to PATH (cross-compiling tools are unlikely on path by default)
+ set(progs VCPKG_DETECTED_CMAKE_C_COMPILER VCPKG_DETECTED_CMAKE_CXX_COMPILER VCPKG_DETECTED_CMAKE_AR
+ VCPKG_DETECTED_CMAKE_LINKER VCPKG_DETECTED_CMAKE_RANLIB VCPKG_DETECTED_CMAKE_OBJDUMP
+ VCPKG_DETECTED_CMAKE_STRIP VCPKG_DETECTED_CMAKE_NM VCPKG_DETECTED_CMAKE_DLLTOOL VCPKG_DETECTED_CMAKE_RC_COMPILER)
+ foreach(prog IN LISTS progs)
+ set(filepath "${${prog}}")
+ if(filepath MATCHES " ")
+ cmake_path(GET filepath FILENAME ${prog})
+ find_program(z_vcm_prog_found NAMES "${${prog}}" PATHS ENV PATH NO_DEFAULT_PATH NO_CACHE)
+ if(NOT z_vcm_prog_found STREQUAL filepath)
+ cmake_path(GET filepath PARENT_PATH dir)
+ vcpkg_add_to_path(PREPEND "${dir}")
+ endif()
+ endif()
+ endforeach()
+ if (arg_USE_WRAPPERS)
+ z_vcpkg_append_to_configure_environment(configure_env CPP "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+
+ z_vcpkg_append_to_configure_environment(configure_env CC "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ if(NOT arg_BUILD_TRIPLET MATCHES "--host")
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ else()
+ # Silly trick to make configure accept CC_FOR_BUILD but in reallity CC_FOR_BUILD is deactivated.
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env CXX "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env RC "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env WINDRES "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ if(VCPKG_DETECTED_CMAKE_AR)
+ z_vcpkg_append_to_configure_environment(configure_env AR "ar-lib ${VCPKG_DETECTED_CMAKE_AR}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env AR "ar-lib lib.exe -verbose")
+ endif()
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env CPP "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+ z_vcpkg_append_to_configure_environment(configure_env CC "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ if(NOT arg_BUILD_TRIPLET MATCHES "--host")
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env CXX "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env RC "${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env WINDRES "${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ if(VCPKG_DETECTED_CMAKE_AR)
+ z_vcpkg_append_to_configure_environment(configure_env AR "${VCPKG_DETECTED_CMAKE_AR}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env AR "lib.exe -verbose")
+ endif()
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env LD "${VCPKG_DETECTED_CMAKE_LINKER} -verbose")
+ if(VCPKG_DETECTED_CMAKE_RANLIB)
+ z_vcpkg_append_to_configure_environment(configure_env RANLIB "${VCPKG_DETECTED_CMAKE_RANLIB}") # Trick to ignore the RANLIB call
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env RANLIB ":")
+ endif()
+ if(VCPKG_DETECTED_CMAKE_OBJDUMP) #Objdump is required to make shared libraries. Otherwise define lt_cv_deplibs_check_method=pass_all
+ z_vcpkg_append_to_configure_environment(configure_env OBJDUMP "${VCPKG_DETECTED_CMAKE_OBJDUMP}") # Trick to ignore the RANLIB call
+ endif()
+ if(VCPKG_DETECTED_CMAKE_STRIP) # If required set the ENV variable STRIP in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env STRIP "${VCPKG_DETECTED_CMAKE_STRIP}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env STRIP ":")
+ list(APPEND arg_OPTIONS ac_cv_prog_ac_ct_STRIP=:)
+ endif()
+ if(VCPKG_DETECTED_CMAKE_NM) # If required set the ENV variable NM in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env NM "${VCPKG_DETECTED_CMAKE_NM}")
+ else()
+ # 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)
+ z_vcpkg_append_to_configure_environment(configure_env NM "dumpbin.exe -symbols -headers")
+ endif()
+ if(VCPKG_DETECTED_CMAKE_DLLTOOL) # If required set the ENV variable DLLTOOL in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env DLLTOOL "${VCPKG_DETECTED_CMAKE_DLLTOOL}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env DLLTOOL "link.exe -verbose -dll")
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env CCAS ":") # If required set the ENV variable CCAS in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env AS ":") # If required set the ENV variable AS in the portfile correctly
+
+ foreach(_env IN LISTS arg_CONFIGURE_ENVIRONMENT_VARIABLES)
+ z_vcpkg_append_to_configure_environment(configure_env ${_env} "${${_env}}")
+ endforeach()
+ debug_message("configure_env: '${configure_env}'")
+ # 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.
+
+ # Variables not correctly detected by configure. In release builds.
+ list(APPEND arg_OPTIONS gl_cv_double_slash_root=yes
+ ac_cv_func_memmove=yes)
+ #list(APPEND arg_OPTIONS lt_cv_deplibs_check_method=pass_all) # Just ignore libtool checks
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]64$")
+ list(APPEND arg_OPTIONS gl_cv_host_cpu_c_abi=no)
+ # Currently needed for arm64 because objdump yields: "unrecognised machine type (0xaa64) in Import Library Format archive"
+ list(APPEND arg_OPTIONS lt_cv_deplibs_check_method=pass_all)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]$")
+ # Currently needed for arm because objdump yields: "unrecognised machine type (0x1c4) in Import Library Format archive"
+ list(APPEND arg_OPTIONS lt_cv_deplibs_check_method=pass_all)
+ endif()
+ else()
+ # OSX dosn't like CMAKE_C(XX)_COMPILER (cc) in CC/CXX and rather wants to have gcc/g++
+ vcpkg_list(SET z_vcm_all_tools)
+ function(z_vcpkg_make_set_env envvar cmakevar)
+ if(NOT VCPKG_DETECTED_CMAKE_${cmakevar})
+ return()
+ endif()
+ set(prog "${VCPKG_DETECTED_CMAKE_${cmakevar}}")
+ if(NOT DEFINED ENV{${envvar}} AND NOT prog STREQUAL "")
+ vcpkg_list(APPEND z_vcm_all_tools "${prog}")
+ if(ARGN)
+ string(APPEND prog " ${ARGN}")
+ endif()
+ set(z_vcm_all_tools "${z_vcm_all_tools}" PARENT_SCOPE)
+ set(ENV{${envvar}} "${prog}")
+ endif()
+ endfunction()
+ z_vcpkg_make_set_env(CC C_COMPILER)
+ if(NOT arg_BUILD_TRIPLET MATCHES "--host")
+ z_vcpkg_make_set_env(CC_FOR_BUILD C_COMPILER)
+ z_vcpkg_make_set_env(CPP_FOR_BUILD C_COMPILER "-E")
+ z_vcpkg_make_set_env(CXX_FOR_BUILD C_COMPILER)
+ else()
+ set(ENV{CC_FOR_BUILD} "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ set(ENV{CPP_FOR_BUILD} "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ set(ENV{CXX_FOR_BUILD} "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ endif()
+ z_vcpkg_make_set_env(CXX CXX_COMPILER)
+ z_vcpkg_make_set_env(NM NM)
+ z_vcpkg_make_set_env(RC RC)
+ z_vcpkg_make_set_env(WINDRES RC)
+ z_vcpkg_make_set_env(DLLTOOL DLLTOOL)
+ z_vcpkg_make_set_env(STRIP STRIP)
+ z_vcpkg_make_set_env(OBJDUMP OBJDUMP)
+ z_vcpkg_make_set_env(RANLIB RANLIB)
+ z_vcpkg_make_set_env(AR AR)
+ z_vcpkg_make_set_env(LD LINKER)
+ unset(z_vcpkg_make_set_env)
+ endif()
+
+ list(FILTER z_vcm_all_tools INCLUDE REGEX " ")
+ if(z_vcm_all_tools)
+ list(REMOVE_DUPLICATES z_vcm_all_tools)
+ list(JOIN z_vcm_all_tools "\n " tools)
+ message(STATUS "Warning: Tools with embedded space may be handled incorrectly by configure:\n ${tools}")
+ endif()
+
+ z_vcpkg_configure_make_common_definitions()
+
+ # Cleanup previous build dirs
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_name_RELEASE}"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_name_DEBUG}"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
+
+ # Set configure paths
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE "--prefix=${current_installed_dir_msys}")
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG "--prefix=${current_installed_dir_msys}${path_suffix_DEBUG}")
+ if(NOT arg_NO_ADDITIONAL_PATHS)
+ # ${prefix} has an extra backslash to prevent early expansion when calling `bash -c configure "..."`.
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE
+ # Important: These should all be relative to prefix!
+ "--bindir=\\\${prefix}/tools/${PORT}/bin"
+ "--sbindir=\\\${prefix}/tools/${PORT}/sbin"
+ "--libdir=\\\${prefix}/lib" # On some Linux distributions lib64 is the default
+ #"--includedir='\${prefix}'/include" # already the default!
+ "--mandir=\\\${prefix}/share/${PORT}"
+ "--docdir=\\\${prefix}/share/${PORT}"
+ "--datarootdir=\\\${prefix}/share/${PORT}")
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG
+ # Important: These should all be relative to prefix!
+ "--bindir=\\\${prefix}/../tools/${PORT}${path_suffix_DEBUG}/bin"
+ "--sbindir=\\\${prefix}/../tools/${PORT}${path_suffix_DEBUG}/sbin"
+ "--libdir=\\\${prefix}/lib" # On some Linux distributions lib64 is the default
+ "--includedir=\\\${prefix}/../include"
+ "--datarootdir=\\\${prefix}/share/${PORT}")
+ endif()
+ # Setup common options
+ if(NOT arg_DISABLE_VERBOSE_FLAGS)
+ list(APPEND arg_OPTIONS --disable-silent-rules --verbose)
+ endif()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ list(APPEND arg_OPTIONS --enable-shared --disable-static)
+ else()
+ list(APPEND arg_OPTIONS --disable-shared --enable-static)
+ endif()
+
+ # Can be set in the triplet to append options for configure
+ if(DEFINED VCPKG_CONFIGURE_MAKE_OPTIONS)
+ list(APPEND arg_OPTIONS ${VCPKG_CONFIGURE_MAKE_OPTIONS})
+ endif()
+ if(DEFINED VCPKG_CONFIGURE_MAKE_OPTIONS_RELEASE)
+ list(APPEND arg_OPTIONS_RELEASE ${VCPKG_CONFIGURE_MAKE_OPTIONS_RELEASE})
+ endif()
+ if(DEFINED VCPKG_CONFIGURE_MAKE_OPTIONS_DEBUG)
+ list(APPEND arg_OPTIONS_DEBUG ${VCPKG_CONFIGURE_MAKE_OPTIONS_DEBUG})
+ endif()
+
+ file(RELATIVE_PATH relative_build_path "${CURRENT_BUILDTREES_DIR}" "${arg_SOURCE_PATH}/${arg_PROJECT_SUBPATH}")
+
+ # Used by CL
+ vcpkg_host_path_list(PREPEND ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include")
+ # Used by GCC
+ vcpkg_host_path_list(PREPEND ENV{C_INCLUDE_PATH} "${CURRENT_INSTALLED_DIR}/include")
+ vcpkg_host_path_list(PREPEND ENV{CPLUS_INCLUDE_PATH} "${CURRENT_INSTALLED_DIR}/include")
+
+ # 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(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_backup_env_variables(VARS _CL_ _LINK_)
+ # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined
+ 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)
+ file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}" VCToolsInstallDir)
+ set(_replacement -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG "${VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG}")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE}")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE "${VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE}")
+ # Can somebody please check if CMake's compiler flags for UWP are correct?
+ set(ENV{_CL_} "$ENV{_CL_} -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"")
+ set(ENV{_LINK_} "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ endif()
+ endif()
+
+ # Remove outer quotes from cmake variables which will be forwarded via makefile/shell variables
+ # substituted into makefile commands (e.g. Android NDK has "--sysroot=...")
+ separate_arguments(c_libs_list NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}")
+ separate_arguments(cxx_libs_list NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ list(REMOVE_ITEM cxx_libs_list ${c_libs_list})
+ set(all_libs_list ${cxx_libs_list} ${c_libs_list})
+ #Do lib list transformation from name.lib to -lname if necessary
+ set(x_vcpkg_transform_libs ON)
+ if(VCPKG_TARGET_IS_UWP)
+ set(x_vcpkg_transform_libs OFF)
+ # Avoid libtool choke: "Warning: linker path does not have real file for library -lWindowsApp."
+ # The problem with the choke is that libtool always falls back to built a static library even if a dynamic was requested.
+ # Note: Env LIBPATH;LIB are on the search path for libtool by default on windows.
+ # It even does unix/dos-short/unix transformation with the path to get rid of spaces.
+ endif()
+ if(x_vcpkg_transform_libs)
+ list(TRANSFORM all_libs_list REPLACE "[.](dll[.]lib|lib|a|so)$" "")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ list(REMOVE_ITEM all_libs_list "uuid")
+ endif()
+ list(TRANSFORM all_libs_list REPLACE "^([^-].*)" "-l\\1")
+ if(VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ # libtool must be told explicitly that there is no dynamic linkage for uuid.
+ # The "-Wl,..." syntax is understood by libtool and gcc, but no by ld.
+ list(TRANSFORM all_libs_list REPLACE "^-luuid\$" "-Wl,-Bstatic,-luuid,-Bdynamic")
+ endif()
+ endif()
+ if(all_libs_list)
+ list(JOIN all_libs_list " " all_libs_string)
+ if(DEFINED ENV{LIBS})
+ set(ENV{LIBS} "$ENV{LIBS} ${all_libs_string}")
+ else()
+ set(ENV{LIBS} "${all_libs_string}")
+ endif()
+ endif()
+ debug_message("ENV{LIBS}:$ENV{LIBS}")
+
+ # Run autoconf if necessary
+ if (arg_AUTOCONFIG OR requires_autoconfig AND NOT arg_NO_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 (arg_PRERUN_SHELL)
+ message(STATUS "Prerun shell with ${TARGET_TRIPLET}")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "${arg_PRERUN_SHELL}"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "prerun-${TARGET_TRIPLET}"
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND "${base_cmd}" -c "${arg_PRERUN_SHELL}"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "prerun-${TARGET_TRIPLET}"
+ )
+ endif()
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT arg_NO_DEBUG)
+ list(APPEND all_buildtypes DEBUG)
+ z_vcpkg_configure_make_process_flags(DEBUG)
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ list(APPEND all_buildtypes RELEASE)
+ z_vcpkg_configure_make_process_flags(RELEASE)
+ endif()
+ list(FILTER z_vcm_all_flags INCLUDE REGEX " ")
+ if(z_vcm_all_flags)
+ list(REMOVE_DUPLICATES z_vcm_all_flags)
+ list(JOIN z_vcm_all_flags "\n " flags)
+ message(STATUS "Warning: Arguments with embedded space may be handled incorrectly by configure:\n ${flags}")
+ endif()
+
+ foreach(var IN ITEMS arg_OPTIONS arg_OPTIONS_RELEASE arg_OPTIONS_DEBUG)
+ vcpkg_list(SET tmp)
+ foreach(element IN LISTS "${var}")
+ string(REPLACE [["]] [[\"]] element "${element}")
+ vcpkg_list(APPEND tmp "\"${element}\"")
+ endforeach()
+ vcpkg_list(JOIN tmp " " "${var}")
+ endforeach()
+
+ foreach(current_buildtype IN LISTS all_buildtypes)
+ foreach(ENV_VAR ${arg_CONFIG_DEPENDENT_ENVIRONMENT})
+ if(DEFINED ENV{${ENV_VAR}})
+ set(backup_config_${ENV_VAR} "$ENV{${ENV_VAR}}")
+ endif()
+ set(ENV{${ENV_VAR}} "${${ENV_VAR}_${current_buildtype}}")
+ endforeach()
+
+ set(target_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_name_${current_buildtype}}")
+ file(MAKE_DIRECTORY "${target_dir}")
+ file(RELATIVE_PATH relative_build_path "${target_dir}" "${src_dir}")
+
+ if(arg_COPY_SOURCE)
+ file(COPY "${src_dir}/" DESTINATION "${target_dir}")
+ set(relative_build_path .)
+ endif()
+
+ # Setup PKG_CONFIG_PATH
+ z_vcpkg_setup_pkgconfig_path(CONFIG "${current_buildtype}")
+
+ # Setup environment
+ set(ENV{CPPFLAGS} "${CPPFLAGS_${current_buildtype}}")
+ set(ENV{CPPFLAGS_FOR_BUILD} "${CPPFLAGS_${current_buildtype}}")
+ set(ENV{CFLAGS} "${CFLAGS_${current_buildtype}}")
+ set(ENV{CFLAGS_FOR_BUILD} "${CFLAGS_${current_buildtype}}")
+ set(ENV{CXXFLAGS} "${CXXFLAGS_${current_buildtype}}")
+ #set(ENV{CXXFLAGS_FOR_BUILD} "${CXXFLAGS_${current_buildtype}}") -> doesn't exist officially
+ set(ENV{RCFLAGS} "${VCPKG_DETECTED_CMAKE_RC_FLAGS_${current_buildtype}}")
+ set(ENV{LDFLAGS} "${LDFLAGS_${current_buildtype}}")
+ set(ENV{LDFLAGS_FOR_BUILD} "${LDFLAGS_${current_buildtype}}")
+ if(ARFLAGS_${current_buildtype} AND NOT (arg_USE_WRAPPERS AND VCPKG_TARGET_IS_WINDOWS))
+ # Target windows with wrappers enabled cannot forward ARFLAGS since it breaks the wrapper
+ set(ENV{ARFLAGS} "${ARFLAGS_${current_buildtype}}")
+ endif()
+
+ if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS)
+ # configure not using all flags to check if compiler works ...
+ set(ENV{CC} "$ENV{CC} $ENV{CPPFLAGS} $ENV{CFLAGS}")
+ set(ENV{CC_FOR_BUILD} "$ENV{CC_FOR_BUILD} $ENV{CPPFLAGS} $ENV{CFLAGS}")
+ endif()
+
+ if(LINK_ENV_${current_buildtype})
+ set(link_config_backup "$ENV{_LINK_}")
+ set(ENV{_LINK_} "${LINK_ENV_${current_buildtype}}")
+ else()
+ unset(link_config_backup)
+ endif()
+
+ vcpkg_list(APPEND lib_env_vars LIB LIBPATH LIBRARY_PATH) # LD_LIBRARY_PATH)
+ foreach(lib_env_var IN LISTS lib_env_vars)
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib")
+ endif()
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib/manual-link")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib/manual-link")
+ endif()
+ endforeach()
+ unset(lib_env_vars)
+
+ set(command "${base_cmd}" -c "${configure_env} ./${relative_build_path}/configure ${arg_BUILD_TRIPLET} ${arg_OPTIONS} ${arg_OPTIONS_${current_buildtype}}")
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(path_backup $ENV{PATH})
+ vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/bin")
+ endif()
+ debug_message("Configure command:'${command}'")
+ if (NOT arg_SKIP_CONFIGURE)
+ message(STATUS "Configuring ${TARGET_TRIPLET}-${short_name_${current_buildtype}}")
+ vcpkg_execute_required_process(
+ COMMAND ${command}
+ WORKING_DIRECTORY "${target_dir}"
+ LOGNAME "config-${TARGET_TRIPLET}-${short_name_${current_buildtype}}"
+ SAVE_LOG_FILES config.log
+ )
+ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ file(GLOB_RECURSE libtool_files "${target_dir}*/libtool")
+ foreach(lt_file IN LISTS libtool_files)
+ file(READ "${lt_file}" _contents)
+ string(REPLACE ".dll.lib" ".lib" _contents "${_contents}")
+ file(WRITE "${lt_file}" "${_contents}")
+ endforeach()
+ endif()
+ endif()
+ z_vcpkg_restore_pkgconfig_path()
+
+ if(DEFINED link_config_backup)
+ set(ENV{_LINK_} "${link_config_backup}")
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${path_backup}")
+ endif()
+ # Restore environment (config dependent)
+ foreach(ENV_VAR IN LISTS ${arg_CONFIG_DEPENDENT_ENVIRONMENT})
+ if(backup_config_${ENV_VAR})
+ set(ENV{${ENV_VAR}} "${backup_config_${ENV_VAR}}")
+ else()
+ unset(ENV{${ENV_VAR}})
+ endif()
+ endforeach()
+ endforeach()
+
+ # Export matching make program for vcpkg_build_make (cache variable)
+ if(CMAKE_HOST_WIN32 AND MSYS_ROOT)
+ find_program(Z_VCPKG_MAKE make PATHS "${MSYS_ROOT}/usr/bin" NO_DEFAULT_PATH REQUIRED)
+ elseif(VCPKG_HOST_IS_BSD)
+ find_program(Z_VCPKG_MAKE gmake REQUIRED)
+ elseif(VCPKG_HOST_IS_SOLARIS)
+ find_program(Z_VCPKG_MAKE NAMES gmake make REQUIRED)
+ else()
+ find_program(Z_VCPKG_MAKE make REQUIRED)
+ endif()
+
+ # Restore environment
+ vcpkg_restore_env_variables(VARS ${cm_FLAGS} LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)
+
+ set(_VCPKG_PROJECT_SOURCE_PATH ${arg_SOURCE_PATH} PARENT_SCOPE)
+ set(_VCPKG_PROJECT_SUBPATH ${arg_PROJECT_SUBPATH} PARENT_SCOPE)
+ set(_VCPKG_MAKE_NO_DEBUG ${arg_NO_DEBUG} PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_meson.cmake b/vcpkg/scripts/cmake/vcpkg_configure_meson.cmake
new file mode 100644
index 0000000..ac20f52
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_configure_meson.cmake
@@ -0,0 +1,462 @@
+function(z_vcpkg_meson_set_proglist_variables config_type)
+ if(VCPKG_TARGET_IS_WINDOWS)
+ set(proglist MT AR)
+ else()
+ set(proglist AR RANLIB STRIP NM OBJDUMP DLLTOOL MT)
+ endif()
+ foreach(prog IN LISTS proglist)
+ if(VCPKG_DETECTED_CMAKE_${prog})
+ if(meson_${prog})
+ string(TOUPPER "MESON_${meson_${prog}}" var_to_set)
+ set("${var_to_set}" "${meson_${prog}} = ['${VCPKG_DETECTED_CMAKE_${prog}}']" PARENT_SCOPE)
+ elseif(${prog} STREQUAL AR AND VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${config_type})
+ # Probably need to move AR somewhere else
+ string(TOLOWER "${prog}" proglower)
+ z_vcpkg_meson_convert_compiler_flags_to_list(ar_flags "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${config_type}}")
+ list(PREPEND ar_flags "${VCPKG_DETECTED_CMAKE_${prog}}")
+ z_vcpkg_meson_convert_list_to_python_array(ar_flags ${ar_flags})
+ set("MESON_AR" "${proglower} = ${ar_flags}" PARENT_SCOPE)
+ else()
+ string(TOUPPER "MESON_${prog}" var_to_set)
+ string(TOLOWER "${prog}" proglower)
+ set("${var_to_set}" "${proglower} = ['${VCPKG_DETECTED_CMAKE_${prog}}']" PARENT_SCOPE)
+ endif()
+ endif()
+ endforeach()
+ set(compilers "${arg_LANGUAGES}")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ list(APPEND compilers RC)
+ endif()
+ set(meson_RC windres)
+ set(meson_Fortran fc)
+ set(meson_CXX cpp)
+ foreach(prog IN LISTS compilers)
+ if(VCPKG_DETECTED_CMAKE_${prog}_COMPILER)
+ string(TOUPPER "MESON_${prog}" var_to_set)
+ if(meson_${prog})
+ if(VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type})
+ # Need compiler flags in prog vars for sanity check.
+ z_vcpkg_meson_convert_compiler_flags_to_list(${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type}}")
+ endif()
+ list(PREPEND ${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_COMPILER}")
+ list(FILTER ${prog}flags EXCLUDE REGEX "(-|/)nologo") # Breaks compiler detection otherwise
+ z_vcpkg_meson_convert_list_to_python_array(${prog}flags ${${prog}flags})
+ set("${var_to_set}" "${meson_${prog}} = ${${prog}flags}" PARENT_SCOPE)
+ if (DEFINED VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID AND NOT VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID MATCHES "^(GNU|Intel)$")
+ string(TOUPPER "MESON_${prog}_LD" var_to_set)
+ set(${var_to_set} "${meson_${prog}}_ld = ['${VCPKG_DETECTED_CMAKE_LINKER}']" PARENT_SCOPE)
+ endif()
+ else()
+ if(VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type})
+ # Need compiler flags in prog vars for sanity check.
+ z_vcpkg_meson_convert_compiler_flags_to_list(${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type}}")
+ endif()
+ list(PREPEND ${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_COMPILER}")
+ list(FILTER ${prog}flags EXCLUDE REGEX "(-|/)nologo") # Breaks compiler detection otherwise
+ z_vcpkg_meson_convert_list_to_python_array(${prog}flags ${${prog}flags})
+ string(TOLOWER "${prog}" proglower)
+ set("${var_to_set}" "${proglower} = ${${prog}flags}" PARENT_SCOPE)
+ if (DEFINED VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID AND NOT VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID MATCHES "^(GNU|Intel)$")
+ string(TOUPPER "MESON_${prog}_LD" var_to_set)
+ set(${var_to_set} "${proglower}_ld = ['${VCPKG_DETECTED_CMAKE_LINKER}']" PARENT_SCOPE)
+ endif()
+ endif()
+ endif()
+ endforeach()
+endfunction()
+
+function(z_vcpkg_meson_convert_compiler_flags_to_list out_var compiler_flags)
+ separate_arguments(cmake_list NATIVE_COMMAND "${compiler_flags}")
+ list(TRANSFORM cmake_list REPLACE ";" [[\\;]])
+ set("${out_var}" "${cmake_list}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_meson_convert_list_to_python_array out_var)
+ z_vcpkg_function_arguments(flag_list 1)
+ vcpkg_list(REMOVE_ITEM flag_list "") # remove empty elements if any
+ vcpkg_list(JOIN flag_list "', '" flag_list)
+ set("${out_var}" "['${flag_list}']" PARENT_SCOPE)
+endfunction()
+
+# Generates the required compiler properties for meson
+function(z_vcpkg_meson_set_flags_variables config_type)
+ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ set(libpath_flag /LIBPATH:)
+ else()
+ set(libpath_flag -L)
+ endif()
+ if(config_type STREQUAL "DEBUG")
+ set(path_suffix "/debug")
+ else()
+ set(path_suffix "")
+ endif()
+
+ set(includepath "-I${CURRENT_INSTALLED_DIR}/include")
+ set(libpath "${libpath_flag}${CURRENT_INSTALLED_DIR}${path_suffix}/lib")
+
+ foreach(lang IN LISTS arg_LANGUAGES)
+ z_vcpkg_meson_convert_compiler_flags_to_list(${lang}flags "${VCPKG_DETECTED_CMAKE_${lang}_FLAGS_${config_type}}")
+ if(lang MATCHES "^(C|CXX)$")
+ vcpkg_list(APPEND ${lang}flags "${includepath}")
+ endif()
+ z_vcpkg_meson_convert_list_to_python_array(${lang}flags ${${lang}flags})
+ set(lang_mapping "${lang}")
+ if(lang STREQUAL "Fortran")
+ set(lang_mapping "FC")
+ endif()
+ string(TOLOWER "${lang_mapping}" langlower)
+ if(lang STREQUAL "CXX")
+ set(langlower cpp)
+ endif()
+ set(MESON_${lang_mapping}FLAGS "${langlower}_args = ${${lang}flags}\n")
+ set(linker_flags "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${config_type}}")
+ z_vcpkg_meson_convert_compiler_flags_to_list(linker_flags "${linker_flags}")
+ vcpkg_list(APPEND linker_flags "${libpath}")
+ z_vcpkg_meson_convert_list_to_python_array(linker_flags ${linker_flags})
+ string(APPEND MESON_${lang_mapping}FLAGS "${langlower}_link_args = ${linker_flags}\n")
+ set(MESON_${lang_mapping}FLAGS "${MESON_${lang_mapping}FLAGS}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+function(z_vcpkg_get_build_and_host_system build_system host_system is_cross) #https://mesonbuild.com/Cross-compilation.html
+ set(build_unknown FALSE)
+ if(CMAKE_HOST_WIN32)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(build_arch $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(build_arch $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
+ if(build_arch MATCHES "(amd|AMD)64")
+ set(build_cpu_fam x86_64)
+ set(build_cpu x86_64)
+ elseif(build_arch MATCHES "(x|X)86")
+ set(build_cpu_fam x86)
+ set(build_cpu i686)
+ elseif(build_arch MATCHES "^(ARM|arm)64$")
+ set(build_cpu_fam aarch64)
+ set(build_cpu armv8)
+ elseif(build_arch MATCHES "^(ARM|arm)$")
+ set(build_cpu_fam arm)
+ set(build_cpu armv7hl)
+ else()
+ if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE)
+ message(WARNING "Unsupported build architecture ${build_arch}! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the build_machine entry!")
+ endif()
+ set(build_unknown TRUE)
+ endif()
+ elseif(CMAKE_HOST_UNIX)
+ # at this stage, CMAKE_HOST_SYSTEM_PROCESSOR is not defined
+ execute_process(
+ COMMAND uname -m
+ OUTPUT_VARIABLE MACHINE
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ COMMAND_ERROR_IS_FATAL ANY)
+
+ if(CMAKE_HOST_SOLARIS)
+ execute_process(
+ COMMAND isainfo -k
+ OUTPUT_VARIABLE MACHINE
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ COMMAND_ERROR_IS_FATAL ANY)
+ endif()
+
+ # Show real machine architecture to visually understand whether we are in a native Apple Silicon terminal or running under Rosetta emulation
+ debug_message("Machine: ${MACHINE}")
+
+ if(MACHINE MATCHES "arm64|aarch64")
+ set(build_cpu_fam aarch64)
+ set(build_cpu armv8)
+ elseif(MACHINE MATCHES "armv7h?l")
+ set(build_cpu_fam arm)
+ set(build_cpu ${MACHINE})
+ elseif(MACHINE MATCHES "x86_64|amd64")
+ set(build_cpu_fam x86_64)
+ set(build_cpu x86_64)
+ elseif(MACHINE MATCHES "x86|i686")
+ set(build_cpu_fam x86)
+ set(build_cpu i686)
+ elseif(MACHINE MATCHES "i386")
+ set(build_cpu_fam x86)
+ set(build_cpu i386)
+ elseif(MACHINE MATCHES "loongarch64")
+ set(build_cpu_fam loongarch64)
+ set(build_cpu loongarch64)
+ else()
+ # https://github.com/mesonbuild/meson/blob/master/docs/markdown/Reference-tables.md#cpu-families
+ if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE)
+ message(WARNING "Unhandled machine: ${MACHINE}! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the build_machine entry!")
+ endif()
+ set(build_unknown TRUE)
+ endif()
+ else()
+ if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE)
+ message(WARNING "Failed to detect the build architecture! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the build_machine entry!")
+ endif()
+ set(build_unknown TRUE)
+ endif()
+
+ set(build "[build_machine]\n") # Machine the build is performed on
+ string(APPEND build "endian = 'little'\n")
+ if(CMAKE_HOST_WIN32)
+ string(APPEND build "system = 'windows'\n")
+ elseif(CMAKE_HOST_APPLE)
+ string(APPEND build "system = 'darwin'\n")
+ elseif(VCPKG_HOST_IS_CYGWIN)
+ string(APPEND build "system = 'cygwin'\n")
+ elseif(CMAKE_HOST_UNIX)
+ string(APPEND build "system = 'linux'\n")
+ else()
+ set(build_unknown TRUE)
+ endif()
+
+ if(DEFINED build_cpu_fam)
+ string(APPEND build "cpu_family = '${build_cpu_fam}'\n")
+ endif()
+ if(DEFINED build_cpu)
+ string(APPEND build "cpu = '${build_cpu}'")
+ endif()
+ if(NOT build_unknown)
+ set(${build_system} "${build}" PARENT_SCOPE)
+ endif()
+
+ set(host_unkown FALSE)
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "(amd|AMD|x|X)64")
+ set(host_cpu_fam x86_64)
+ set(host_cpu x86_64)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86")
+ set(host_cpu_fam x86)
+ set(host_cpu i686)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)64$")
+ set(host_cpu_fam aarch64)
+ set(host_cpu armv8)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)$")
+ set(host_cpu_fam arm)
+ set(host_cpu armv7hl)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "loongarch64")
+ set(host_cpu_fam loongarch64)
+ set(host_cpu loongarch64)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "wasm32")
+ set(host_cpu_fam wasm32)
+ set(host_cpu wasm32)
+ else()
+ if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE)
+ message(WARNING "Unsupported target architecture ${VCPKG_TARGET_ARCHITECTURE}! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the host_machine entry!" )
+ endif()
+ set(host_unkown TRUE)
+ endif()
+
+ set(host "[host_machine]\n") # host=target in vcpkg.
+ string(APPEND host "endian = 'little'\n")
+ if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_TARGET_IS_MINGW OR VCPKG_TARGET_IS_UWP)
+ set(meson_system_name "windows")
+ else()
+ string(TOLOWER "${VCPKG_CMAKE_SYSTEM_NAME}" meson_system_name)
+ endif()
+ string(APPEND host "system = '${meson_system_name}'\n")
+ string(APPEND host "cpu_family = '${host_cpu_fam}'\n")
+ string(APPEND host "cpu = '${host_cpu}'")
+ if(NOT host_unkown)
+ set(${host_system} "${host}" PARENT_SCOPE)
+ endif()
+
+ if(NOT build_cpu_fam MATCHES "${host_cpu_fam}"
+ OR VCPKG_TARGET_IS_ANDROID
+ OR (VCPKG_TARGET_IS_APPLE AND NOT VCPKG_TARGET_IS_OSX)
+ OR VCPKG_TARGET_IS_UWP
+ OR (VCPKG_TARGET_IS_MINGW AND NOT CMAKE_HOST_WIN32))
+ set(${is_cross} TRUE PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(z_vcpkg_meson_setup_extra_windows_variables config_type)
+ ## b_vscrt
+ if(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(crt_type "mt")
+ else()
+ set(crt_type "md")
+ endif()
+ if(config_type STREQUAL "DEBUG")
+ set(crt_type "${crt_type}d")
+ endif()
+ set(MESON_VSCRT_LINKAGE "b_vscrt = '${crt_type}'" PARENT_SCOPE)
+ ## winlibs
+ separate_arguments(c_winlibs NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}")
+ separate_arguments(cpp_winlibs NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ z_vcpkg_meson_convert_list_to_python_array(c_winlibs ${c_winlibs})
+ z_vcpkg_meson_convert_list_to_python_array(cpp_winlibs ${cpp_winlibs})
+ set(MESON_WINLIBS "c_winlibs = ${c_winlibs}\n")
+ string(APPEND MESON_WINLIBS "cpp_winlibs = ${cpp_winlibs}")
+ set(MESON_WINLIBS "${MESON_WINLIBS}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_meson_setup_variables config_type)
+ set(meson_var_list VSCRT_LINKAGE WINLIBS MT AR RC C C_LD CXX CXX_LD OBJC OBJC_LD OBJCXX OBJCXX_LD FC FC_LD WINDRES CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS FCFLAGS SHARED_LINKER_FLAGS)
+ foreach(var IN LISTS meson_var_list)
+ set(MESON_${var} "")
+ endforeach()
+
+ if(VCPKG_TARGET_IS_WINDOWS)
+ z_vcpkg_meson_setup_extra_windows_variables("${config_type}")
+ endif()
+
+ z_vcpkg_meson_set_proglist_variables("${config_type}")
+ z_vcpkg_meson_set_flags_variables("${config_type}")
+
+ foreach(var IN LISTS meson_var_list)
+ set(MESON_${var} "${MESON_${var}}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+function(vcpkg_configure_meson)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "NO_PKG_CONFIG"
+ "SOURCE_PATH"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;LANGUAGES;ADDITIONAL_BINARIES;ADDITIONAL_NATIVE_BINARIES;ADDITIONAL_CROSS_BINARIES"
+ )
+
+ if(NOT arg_LANGUAGES)
+ set(arg_LANGUAGES C CXX)
+ endif()
+
+ if(DEFINED arg_ADDITIONAL_NATIVE_BINARIES OR DEFINED arg_ADDITIONAL_CROSS_BINARIES)
+ message(WARNING "Options ADDITIONAL_(NATIVE|CROSS)_BINARIES have been deprecated. Only use ADDITIONAL_BINARIES!")
+ endif()
+
+ vcpkg_list(APPEND arg_ADDITIONAL_BINARIES ${arg_ADDITIONAL_NATIVE_BINARIES} ${arg_ADDITIONAL_CROSS_BINARIES})
+ vcpkg_list(REMOVE_DUPLICATES arg_ADDITIONAL_BINARIES)
+ vcpkg_list(JOIN arg_ADDITIONAL_BINARIES "\n" MESON_ADDITIONAL_BINARIES)
+
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+
+ if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ z_vcpkg_select_default_vcpkg_chainload_toolchain()
+ endif()
+ 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(MESON)
+
+ get_filename_component(CMAKE_PATH "${CMAKE_COMMAND}" DIRECTORY)
+ vcpkg_add_to_path("${CMAKE_PATH}" PREPEND) # Make CMake invokeable for Meson
+
+ vcpkg_find_acquire_program(PYTHON3)
+ get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY)
+ vcpkg_add_to_path("${PYTHON3_DIR}")
+
+ vcpkg_find_acquire_program(NINJA)
+ get_filename_component(NINJA_PATH ${NINJA} DIRECTORY)
+ vcpkg_add_to_path(PREPEND "${NINJA_PATH}") # Prepend to use the correct ninja.
+
+ set(buildtypes "")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ set(buildname "DEBUG")
+ vcpkg_list(APPEND buildtypes "${buildname}")
+ set(path_suffix_${buildname} "debug/")
+ set(suffix_${buildname} "dbg")
+ set(meson_input_file_${buildname} "${CURRENT_BUILDTREES_DIR}/meson-${TARGET_TRIPLET}-${suffix_${buildname}}.log")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ set(buildname "RELEASE")
+ vcpkg_list(APPEND buildtypes "${buildname}")
+ set(path_suffix_${buildname} "")
+ set(suffix_${buildname} "rel")
+ set(meson_input_file_${buildname} "${CURRENT_BUILDTREES_DIR}/meson-${TARGET_TRIPLET}-${suffix_${buildname}}.log")
+ endif()
+
+ vcpkg_list(APPEND arg_OPTIONS --backend ninja --wrap-mode nodownload -Dbuildtype=plain)
+
+ z_vcpkg_get_build_and_host_system(MESON_HOST_MACHINE MESON_BUILD_MACHINE IS_CROSS)
+
+ if(IS_CROSS)
+ # VCPKG_CROSSCOMPILING is not used since it regresses a lot of ports in x64-windows-x triplets
+ # For consistency this should proably be changed in the future?
+ vcpkg_list(APPEND arg_OPTIONS --native "${SCRIPTS}/buildsystems/meson/none.txt")
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG --cross "${meson_input_file_DEBUG}")
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE --cross "${meson_input_file_RELEASE}")
+ else()
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG --native "${meson_input_file_DEBUG}")
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE --native "${meson_input_file_RELEASE}")
+ endif()
+
+ # User provided cross/native files
+ if(VCPKG_MESON_NATIVE_FILE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE --native "${VCPKG_MESON_NATIVE_FILE}")
+ endif()
+ if(VCPKG_MESON_NATIVE_FILE_RELEASE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE --native "${VCPKG_MESON_NATIVE_FILE_RELEASE}")
+ endif()
+ if(VCPKG_MESON_NATIVE_FILE_DEBUG)
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG --native "${VCPKG_MESON_NATIVE_FILE_DEBUG}")
+ endif()
+ if(VCPKG_MESON_CROSS_FILE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE --cross "${VCPKG_MESON_CROSS_FILE}")
+ endif()
+ if(VCPKG_MESON_CROSS_FILE_RELEASE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE --cross "${VCPKG_MESON_CROSS_FILE_RELEASE}")
+ endif()
+ if(VCPKG_MESON_CROSS_FILE_DEBUG)
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG --cross "${VCPKG_MESON_CROSS_FILE_DEBUG}")
+ endif()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ set(MESON_DEFAULT_LIBRARY shared)
+ else()
+ set(MESON_DEFAULT_LIBRARY static)
+ endif()
+
+ vcpkg_list(APPEND arg_OPTIONS --libdir lib) # else meson install into an architecture describing folder
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG -Ddebug=true --prefix "${CURRENT_PACKAGES_DIR}/debug" --includedir ../include)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE -Ddebug=false --prefix "${CURRENT_PACKAGES_DIR}")
+
+ # select meson cmd-line options
+ if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}/debug','${CURRENT_INSTALLED_DIR}','${CURRENT_INSTALLED_DIR}/share']")
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}','${CURRENT_INSTALLED_DIR}/debug','${CURRENT_INSTALLED_DIR}/share']")
+ else()
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}/debug','${CURRENT_INSTALLED_DIR}']")
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}','${CURRENT_INSTALLED_DIR}/debug']")
+ endif()
+
+ # Allow overrides / additional configuration variables from triplets
+ if(DEFINED VCPKG_MESON_CONFIGURE_OPTIONS)
+ vcpkg_list(APPEND arg_OPTIONS ${VCPKG_MESON_CONFIGURE_OPTIONS})
+ endif()
+ if(DEFINED VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE)
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE ${VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE})
+ endif()
+ if(DEFINED VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG)
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG ${VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG})
+ endif()
+
+ # configure build
+ foreach(buildtype IN LISTS buildtypes)
+ message(STATUS "Configuring ${TARGET_TRIPLET}-${suffix_${buildtype}}")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${suffix_${buildtype}}")
+ #setting up PKGCONFIG
+ if(NOT arg_NO_PKG_CONFIG)
+ z_vcpkg_setup_pkgconfig_path(CONFIG "${buildtype}")
+ endif()
+
+ z_vcpkg_meson_setup_variables(${buildtype})
+ configure_file("${SCRIPTS}/buildsystems/meson/meson.template.in" "${meson_input_file_${buildtype}}" @ONLY)
+
+ vcpkg_execute_required_process(
+ COMMAND ${MESON} ${arg_OPTIONS} ${arg_OPTIONS_${buildtype}} ${arg_SOURCE_PATH}
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${suffix_${buildtype}}"
+ LOGNAME config-${TARGET_TRIPLET}-${suffix_${buildtype}}
+ SAVE_LOG_FILES
+ meson-logs/meson-log.txt
+ meson-info/intro-dependencies.json
+ meson-logs/install-log.txt
+ )
+
+ message(STATUS "Configuring ${TARGET_TRIPLET}-${suffix_${buildtype}} done")
+
+ if(NOT arg_NO_PKG_CONFIG)
+ z_vcpkg_restore_pkgconfig_path()
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake
new file mode 100644
index 0000000..9340fef
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake
@@ -0,0 +1,167 @@
+function(vcpkg_configure_qmake)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ ""
+ "SOURCE_PATH"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;BUILD_OPTIONS;BUILD_OPTIONS_RELEASE;BUILD_OPTIONS_DEBUG"
+ )
+
+ # Find qmake executable
+ find_program(qmake_executable NAMES qmake PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/qt5/bin" NO_DEFAULT_PATH)
+
+ if(NOT qmake_executable)
+ message(FATAL_ERROR "vcpkg_configure_qmake: unable to find qmake.")
+ endif()
+
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ include("${cmake_vars_file}")
+
+ function(qmake_append_program var qmake_var value)
+ get_filename_component(prog "${value}" NAME)
+ # QMake assumes everything is on PATH?
+ vcpkg_list(APPEND ${var} "${qmake_var}=${prog}")
+ find_program(${qmake_var} NAMES "${prog}")
+ cmake_path(COMPARE "${${qmake_var}}" EQUAL "${value}" correct_prog_on_path)
+ if(NOT correct_prog_on_path AND NOT "${value}" MATCHES "|:")
+ message(FATAL_ERROR "Detect path mismatch for '${qmake_var}'. '${value}' is not the same as '${${qmake_var}}'. Please correct your PATH!")
+ endif()
+ unset(${qmake_var})
+ unset(${qmake_var} CACHE)
+ set(${var} "${${var}}" PARENT_SCOPE)
+ endfunction()
+ # Setup Build tools
+ set(qmake_build_tools "")
+ qmake_append_program(qmake_build_tools "QMAKE_CC" "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ qmake_append_program(qmake_build_tools "QMAKE_CXX" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ qmake_append_program(qmake_build_tools "QMAKE_AR" "${VCPKG_DETECTED_CMAKE_AR}")
+ qmake_append_program(qmake_build_tools "QMAKE_RANLIB" "${VCPKG_DETECTED_CMAKE_RANLIB}")
+ qmake_append_program(qmake_build_tools "QMAKE_STRIP" "${VCPKG_DETECTED_CMAKE_STRIP}")
+ qmake_append_program(qmake_build_tools "QMAKE_NM" "${VCPKG_DETECTED_CMAKE_NM}")
+ qmake_append_program(qmake_build_tools "QMAKE_RC" "${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ qmake_append_program(qmake_build_tools "QMAKE_MT" "${VCPKG_DETECTED_CMAKE_MT}")
+ if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_DETECTED_CMAKE_AR MATCHES "ar$")
+ vcpkg_list(APPEND qmake_build_tools "QMAKE_AR+=qc")
+ endif()
+ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ qmake_append_program(qmake_build_tools "QMAKE_LIB" "${VCPKG_DETECTED_CMAKE_AR}")
+ qmake_append_program(qmake_build_tools "QMAKE_LINK" "${VCPKG_DETECTED_CMAKE_LINKER}")
+ else()
+ qmake_append_program(qmake_build_tools "QMAKE_LINK" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ qmake_append_program(qmake_build_tools "QMAKE_LINK_SHLIB" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ qmake_append_program(qmake_build_tools "QMAKE_LINK_C" "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ qmake_append_program(qmake_build_tools "QMAKE_LINK_C_SHLIB" "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ endif()
+ set(qmake_comp_flags "")
+ macro(qmake_add_flags qmake_var operation flags)
+ string(STRIP "${flags}" striped_flags)
+ if(striped_flags)
+ vcpkg_list(APPEND qmake_comp_flags "${qmake_var}${operation}${striped_flags}")
+ endif()
+ endmacro()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ vcpkg_list(APPEND arg_OPTIONS "CONFIG-=shared" "CONFIG*=static")
+ else()
+ vcpkg_list(APPEND arg_OPTIONS "CONFIG-=static" "CONFIG*=shared")
+ endif()
+ vcpkg_list(APPEND arg_OPTIONS "CONFIG*=force_debug_info")
+
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_CRT_LINKAGE STREQUAL "static")
+ vcpkg_list(APPEND arg_OPTIONS "CONFIG*=static_runtime")
+ endif()
+
+ if(DEFINED VCPKG_OSX_DEPLOYMENT_TARGET)
+ set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} "${VCPKG_OSX_DEPLOYMENT_TARGET}")
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE)
+
+ set(current_binary_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+
+ # Cleanup build directories
+ file(REMOVE_RECURSE "${current_binary_dir}")
+
+ configure_file("${CURRENT_INSTALLED_DIR}/tools/qt5/qt_release.conf" "${current_binary_dir}/qt.conf")
+
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
+ file(MAKE_DIRECTORY "${current_binary_dir}")
+
+ qmake_add_flags("QMAKE_LIBS" "+=" "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ qmake_add_flags("QMAKE_RC" "+=" "${VCPKG_DETECTED_CMAKE_RC_FLAGS_RELEASE}")
+ qmake_add_flags("QMAKE_CFLAGS_RELEASE" "+=" "${VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE}")
+ qmake_add_flags("QMAKE_CXXFLAGS_RELEASE" "+=" "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE}")
+ qmake_add_flags("QMAKE_LFLAGS" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+ qmake_add_flags("QMAKE_LFLAGS_SHLIB" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+ qmake_add_flags("QMAKE_LFLAGS_PLUGIN" "+=" "${VCPKG_DETECTED_CMAKE_MODULE_LINKER_FLAGS_RELEASE}")
+ qmake_add_flags("QMAKE_LIBFLAGS_RELEASE" "+=" "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_RELEASE}")
+
+ vcpkg_list(SET build_opt_param)
+ if(DEFINED arg_BUILD_OPTIONS OR DEFINED arg_BUILD_OPTIONS_RELEASE)
+ vcpkg_list(SET build_opt_param -- ${arg_BUILD_OPTIONS} ${arg_BUILD_OPTIONS_RELEASE})
+ endif()
+
+ vcpkg_execute_required_process(
+ COMMAND "${qmake_executable}" CONFIG-=debug CONFIG+=release ${qmake_build_tools} ${qmake_comp_flags}
+ ${arg_OPTIONS} ${arg_OPTIONS_RELEASE} ${arg_SOURCE_PATH}
+ -qtconf "${current_binary_dir}/qt.conf"
+ ${build_opt_param}
+ WORKING_DIRECTORY "${current_binary_dir}"
+ LOGNAME "config-${TARGET_TRIPLET}-rel"
+ SAVE_LOG_FILES config.log
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-rel done")
+ if(EXISTS "${current_binary_dir}/config.log")
+ file(REMOVE "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-rel.log")
+ file(RENAME "${current_binary_dir}/config.log" "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-rel.log")
+ endif()
+
+ z_vcpkg_restore_pkgconfig_path()
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG)
+
+ set(current_binary_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+
+ # Cleanup build directories
+ file(REMOVE_RECURSE "${current_binary_dir}")
+
+ configure_file("${CURRENT_INSTALLED_DIR}/tools/qt5/qt_debug.conf" "${current_binary_dir}/qt.conf")
+
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
+ file(MAKE_DIRECTORY "${current_binary_dir}")
+
+ set(qmake_comp_flags "")
+ qmake_add_flags("QMAKE_LIBS" "+=" "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ qmake_add_flags("QMAKE_RC" "+=" "${VCPKG_DETECTED_CMAKE_RC_FLAGS_DEBUG}")
+ qmake_add_flags("QMAKE_CFLAGS_DEBUG" "+=" "${VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG}")
+ qmake_add_flags("QMAKE_CXXFLAGS_DEBUG" "+=" "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG}")
+ qmake_add_flags("QMAKE_LFLAGS" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
+ qmake_add_flags("QMAKE_LFLAGS_SHLIB" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
+ qmake_add_flags("QMAKE_LFLAGS_PLUGIN" "+=" "${VCPKG_DETECTED_CMAKE_MODULE_LINKER_FLAGS_DEBUG}")
+ qmake_add_flags("QMAKE_LIBFLAGS_DEBUG" "+=" "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_DEBUG}")
+
+ vcpkg_list(SET build_opt_param)
+ if(DEFINED arg_BUILD_OPTIONS OR DEFINED arg_BUILD_OPTIONS_DEBUG)
+ vcpkg_list(SET build_opt_param -- ${arg_BUILD_OPTIONS} ${arg_BUILD_OPTIONS_DEBUG})
+ endif()
+ vcpkg_execute_required_process(
+ COMMAND "${qmake_executable}" CONFIG-=release CONFIG+=debug ${qmake_build_tools} ${qmake_comp_flags}
+ ${arg_OPTIONS} ${arg_OPTIONS_DEBUG} ${arg_SOURCE_PATH}
+ -qtconf "${current_binary_dir}/qt.conf"
+ ${build_opt_param}
+ WORKING_DIRECTORY "${current_binary_dir}"
+ LOGNAME "config-${TARGET_TRIPLET}-dbg"
+ SAVE_LOG_FILES config.log
+ )
+ message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done")
+ if(EXISTS "${current_binary_dir}/config.log")
+ file(REMOVE "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-dbg.log")
+ file(RENAME "${current_binary_dir}/config.log" "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-dbg.log")
+ endif()
+
+ z_vcpkg_restore_pkgconfig_path()
+ endif()
+
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake b/vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake
new file mode 100644
index 0000000..5f7bffe
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake
@@ -0,0 +1,49 @@
+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
+ "${CURRENT_PACKAGES_DIR}/bin/*.dll"
+ "${CURRENT_PACKAGES_DIR}/debug/bin/*.dll"
+ )
+ endif()
+
+ 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})
+
+ set(vslang_backup "$ENV{VSLANG}")
+ set(ENV{VSLANG} 1033)
+
+ foreach(dll IN LISTS dlls)
+ execute_process(COMMAND dumpbin /PDBPATH "${dll}"
+ COMMAND findstr PDB
+ OUTPUT_VARIABLE pdb_line
+ ERROR_QUIET
+ RESULT_VARIABLE error_code
+ )
+
+ if(error_code EQUAL "0" AND pdb_line MATCHES "PDB[^/]*(([A-Za-z]:|/).*\\.[Pp][Dd][Bb])")
+ 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}")
+ endif()
+ endforeach()
+
+ set(ENV{VSLANG} "${vslang_backup}")
+
+ if(NOT dlls_without_matching_pdbs STREQUAL "")
+ list(JOIN dlls_without_matching_pdbs "\n " message)
+ message(WARNING "Could not find a matching pdb file for:
+ ${message}\n")
+ endif()
+ endif()
+
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake b/vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
new file mode 100644
index 0000000..1928df6
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake
@@ -0,0 +1,45 @@
+function(z_vcpkg_copy_tool_dependencies_search tool_dir path_to_search)
+ if(DEFINED Z_VCPKG_COPY_TOOL_DEPENDENCIES_COUNT)
+ set(count ${Z_VCPKG_COPY_TOOL_DEPENDENCIES_COUNT})
+ else()
+ set(count 0)
+ endif()
+ 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}"
+ -verbose
+ WORKING_DIRECTORY "${VCPKG_ROOT_DIR}"
+ LOGNAME copy-tool-dependencies-${count}
+ )
+ math(EXPR count "${count} + 1")
+ endforeach()
+ set(Z_VCPKG_COPY_TOOL_DEPENDENCIES_COUNT ${count} CACHE INTERNAL "")
+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()
+ cmake_path(RELATIVE_PATH tool_dir
+ BASE_DIRECTORY "${CURRENT_PACKAGES_DIR}"
+ OUTPUT_VARIABLE relative_tool_dir
+ )
+ if(relative_tool_dir MATCHES "^debug/|/debug/")
+ z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_PACKAGES_DIR}/debug/bin")
+ z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_INSTALLED_DIR}/debug/bin")
+ else()
+ 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()
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_copy_tools.cmake b/vcpkg/scripts/cmake/vcpkg_copy_tools.cmake
new file mode 100644
index 0000000..d9b3b95
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_copy_tools.cmake
@@ -0,0 +1,49 @@
+function(vcpkg_copy_tools)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "AUTO_CLEAN" "SEARCH_DIR;DESTINATION" "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 arg_DESTINATION)
+ set(arg_DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+ endif()
+
+ 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 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 "${arg_DESTINATION}")
+ elseif(NOT "${VCPKG_TARGET_BUNDLE_SUFFIX}" STREQUAL "" AND NOT "${VCPKG_TARGET_BUNDLE_SUFFIX}" STREQUAL "${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
+ set(bundle_path "${arg_SEARCH_DIR}/${tool_name}${VCPKG_TARGET_BUNDLE_SUFFIX}")
+ if(EXISTS "${bundle_path}")
+ file(COPY "${bundle_path}" DESTINATION "${arg_DESTINATION}")
+ else()
+ message(FATAL_ERROR "Couldn't find tool \"${tool_name}\":
+ neither \"${tool_path}\" nor \"${bundle_path}\" exists")
+ endif()
+ else()
+ message(FATAL_ERROR "Couldn't find tool \"${tool_name}\":
+ \"${tool_path}\" does not exist")
+ endif()
+ if(EXISTS "${tool_pdb}")
+ file(COPY "${tool_pdb}" DESTINATION "${arg_DESTINATION}")
+ endif()
+ endforeach()
+
+ if(arg_AUTO_CLEAN)
+ vcpkg_clean_executables_in_bin(FILE_NAMES ${arg_TOOL_NAMES})
+ endif()
+
+ vcpkg_copy_tool_dependencies("${arg_DESTINATION}")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_download_distfile.cmake b/vcpkg/scripts/cmake/vcpkg_download_distfile.cmake
new file mode 100644
index 0000000..1466ea6
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_download_distfile.cmake
@@ -0,0 +1,140 @@
+function(vcpkg_download_distfile out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ "SKIP_SHA512;SILENT_EXIT;QUIET;ALWAYS_REDOWNLOAD"
+ "FILENAME;SHA512"
+ "URLS;HEADERS"
+ )
+
+ if(NOT DEFINED arg_URLS)
+ message(FATAL_ERROR "vcpkg_download_distfile requires a URLS argument.")
+ endif()
+ if(NOT DEFINED arg_FILENAME)
+ message(FATAL_ERROR "vcpkg_download_distfile requires a FILENAME argument.")
+ endif()
+ if(arg_SILENT_EXIT)
+ message(WARNING "SILENT_EXIT no longer has any effect. To resolve this warning, remove SILENT_EXIT.")
+ endif()
+
+ # Note that arg_ALWAYS_REDOWNLOAD implies arg_SKIP_SHA512, and NOT arg_SKIP_SHA512 implies NOT arg_ALWAYS_REDOWNLOAD
+ if(arg_ALWAYS_REDOWNLOAD AND NOT arg_SKIP_SHA512)
+ message(FATAL_ERROR "ALWAYS_REDOWNLOAD requires SKIP_SHA512")
+ endif()
+
+ if(NOT arg_SKIP_SHA512 AND NOT DEFINED arg_SHA512)
+ message(FATAL_ERROR "vcpkg_download_distfile requires a SHA512 argument.
+If you do not know the SHA512, add it as 'SHA512 0' and retry.")
+ elseif(arg_SKIP_SHA512 AND DEFINED arg_SHA512)
+ message(FATAL_ERROR "SHA512 may not be used with SKIP_SHA512.")
+ endif()
+
+ if(_VCPKG_INTERNAL_NO_HASH_CHECK)
+ set(arg_SKIP_SHA512 1)
+ endif()
+
+ if(NOT arg_SKIP_SHA512)
+ if("${arg_SHA512}" STREQUAL "0")
+ string(REPEAT 0 128 arg_SHA512)
+ else()
+ string(LENGTH "${arg_SHA512}" arg_SHA512_length)
+ if(NOT "${arg_SHA512_length}" EQUAL "128" OR NOT "${arg_SHA512}" MATCHES "^[a-zA-Z0-9]*$")
+ message(FATAL_ERROR "Invalid SHA512: ${arg_SHA512}.
+ If you do not know the file's SHA512, set this to \"0\".")
+ endif()
+
+ string(TOLOWER "${arg_SHA512}" arg_SHA512)
+ endif()
+ endif()
+
+ set(downloaded_file_path "${DOWNLOADS}/${arg_FILENAME}")
+
+ get_filename_component(directory_component "${arg_FILENAME}" DIRECTORY)
+ if ("${directory_component}" STREQUAL "")
+ file(MAKE_DIRECTORY "${DOWNLOADS}")
+ else()
+ file(MAKE_DIRECTORY "${DOWNLOADS}/${directory_component}")
+ endif()
+
+ if(EXISTS "${downloaded_file_path}")
+ if(arg_SKIP_SHA512)
+ if(NOT arg_ALWAYS_REDOWNLOAD)
+ if(NOT _VCPKG_INTERNAL_NO_HASH_CHECK)
+ message(STATUS "Skipping hash check and using cached ${arg_FILENAME}")
+ endif()
+
+ set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE)
+ return()
+ endif()
+ else()
+ # Note that NOT arg_SKIP_SHA512 implies NOT arg_ALWAYS_REDOWNLOAD
+ file(SHA512 "${downloaded_file_path}" file_hash)
+ if("${file_hash}" STREQUAL "${arg_SHA512}")
+ message(STATUS "Using cached ${arg_FILENAME}")
+ set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE)
+ return()
+ endif()
+
+ # The existing file hash mismatches. Perhaps the expected SHA512 changed. Try adding the expected SHA512
+ # into the file name and try again to hopefully not conflict.
+ get_filename_component(filename_component "${arg_FILENAME}" NAME_WE)
+ get_filename_component(extension_component "${arg_FILENAME}" EXT)
+ string(SUBSTRING "${arg_SHA512}" 0 8 hash)
+ set(arg_FILENAME "${filename_component}-${hash}${extension_component}")
+ if (NOT "${directory_component}" STREQUAL "")
+ set(arg_FILENAME "${directory_component}/${arg_FILENAME}")
+ endif()
+
+ set(downloaded_file_path "${DOWNLOADS}/${arg_FILENAME}")
+ if(EXISTS "${downloaded_file_path}")
+ if(_VCPKG_NO_DOWNLOADS)
+ set(advice_message "note: Downloads are disabled. Please ensure that the expected file is placed at ${downloaded_file_path} and retry.")
+ else()
+ set(advice_message "note: You may be able to resolve this failure by redownloading the file. To do so, delete ${downloaded_file_path} and retry.")
+ endif()
+
+ file(SHA512 "${downloaded_file_path}" file_hash)
+ if("${file_hash}" STREQUAL "${arg_SHA512}")
+ message(STATUS "Using cached ${arg_FILENAME}")
+ set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE)
+ return()
+ endif()
+
+ # Note that the extra leading spaces are here to prevent CMake from badly attempting to wrap this
+ message(FATAL_ERROR
+ " ${downloaded_file_path}: error: existing downloaded file had an unexpected hash\n"
+ " Expected: ${arg_SHA512}\n"
+ " Actual : ${file_hash}\n"
+ " ${advice_message}")
+ endif()
+ endif()
+ endif()
+
+ # vcpkg_download_distfile_ALWAYS_REDOWNLOAD only triggers when NOT _VCPKG_NO_DOWNLOADS
+ # this could be de-morgan'd out but it's more clear this way
+ if(_VCPKG_NO_DOWNLOADS)
+ message(FATAL_ERROR "Downloads are disabled, but '${downloaded_file_path}' does not exist.")
+ endif()
+
+ vcpkg_list(SET params "x-download" "${arg_FILENAME}")
+ foreach(url IN LISTS arg_URLS)
+ vcpkg_list(APPEND params "--url=${url}")
+ endforeach()
+
+ foreach(header IN LISTS arg_HEADERS)
+ list(APPEND params "--header=${header}")
+ endforeach()
+
+ if(arg_SKIP_SHA512)
+ vcpkg_list(APPEND params "--skip-sha512")
+ else()
+ vcpkg_list(APPEND params "--sha512=${arg_SHA512}")
+ endif()
+
+ # Setting WORKING_DIRECTORY and passing the relative FILENAME allows vcpkg x-download to print
+ # the full relative path if FILENAME has /s in it.
+ vcpkg_execute_in_download_mode(COMMAND "$ENV{VCPKG_COMMAND}" ${params} RESULT_VARIABLE error_code WORKING_DIRECTORY "${DOWNLOADS}")
+ if(NOT "${error_code}" EQUAL "0")
+ message(FATAL_ERROR "Download failed, halting portfile.")
+ endif()
+
+ set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake b/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake
new file mode 100644
index 0000000..a8c1f1f
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake
@@ -0,0 +1,83 @@
+function(vcpkg_download_sourceforge out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg"
+ ""
+ "REPO;REF;SHA512;FILENAME"
+ "")
+
+ foreach(arg_name IN ITEMS REPO SHA512 FILENAME)
+ if(NOT DEFINED "arg_${arg_name}")
+ message(FATAL_ERROR "${arg_name} is required.")
+ endif()
+ endforeach()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ set(sourceforge_host "https://sourceforge.net/projects")
+
+ if(arg_REPO MATCHES "^([^/]*)$") # just one element
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "")
+ elseif(arg_REPO MATCHES "^([^/]*)/([^/]*)$") # two elements
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "${CMAKE_MATCH_2}")
+ else()
+ message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name. It must be:
+ - an organization name without any slashes, or
+ - an organization name followed by a repository name separated by a single slash")
+ endif()
+
+ if(NOT "${arg_REF}" STREQUAL "")
+ set(url "${sourceforge_host}/${org_name}/files/${repo_name}/${arg_REF}/${arg_FILENAME}")
+ else()
+ set(url "${sourceforge_host}/${arg_REPO}/files/${arg_FILENAME}")
+ endif()
+
+ string(SUBSTRING "${arg_SHA512}" 0 10 sanitized_ref)
+
+ set(sourceforge_mirrors
+ cfhcable # United States
+ pilotfiber # New York, NY
+ gigenet # Chicago, IL
+ versaweb # Las Vegas, NV
+ ayera # Modesto, CA
+ netactuate # Durham, NC
+ phoenixnap # Tempe, AZ
+ astuteinternet # Vancouver, BC
+ freefr # Paris, France
+ netcologne # Cologne, Germany
+ deac-riga # Latvia
+ excellmedia # Hyderabad, India
+ iweb # Montreal, QC
+ jaist # Nomi, Japan
+ jztkft # Mezotur, Hungary
+ managedway # Detroit, MI
+ nchc # Taipei, Taiwan
+ netix # Bulgaria
+ ufpr # Curitiba, Brazil
+ tenet # Wynberg, South Africa
+ )
+ if(DEFINED SOURCEFORGE_MIRRORS AND NOT DEFINED VCPKG_SOURCEFORGE_EXTRA_MIRRORS)
+ message(WARNING "Extension point SOURCEFORGE_MIRRORS has been deprecated.
+ Please use the replacement VCPKG_SOURCEFORGE_EXTRA_MIRRORS variable instead.")
+ list(APPEND sourceforge_mirrors "${SOURCEFORGE_MIRRORS}")
+ list(REMOVE_DUPLICATES sourceforge_mirrors)
+ elseif(DEFINED VCPKG_SOURCEFORGE_EXTRA_MIRRORS)
+ list(APPEND sourceforge_mirrors "${VCPKG_SOURCEFORGE_EXTRA_MIRRORS}")
+ list(REMOVE_DUPLICATES sourceforge_mirrors)
+ endif()
+
+ set(all_urls "${url}/download")
+ foreach(mirror IN LISTS sourceforge_mirrors)
+ list(APPEND all_urls "${url}/download?use_mirror=${mirror}")
+ endforeach()
+
+ vcpkg_download_distfile(archive
+ URLS ${all_urls}
+ SHA512 "${arg_SHA512}"
+ FILENAME "${arg_FILENAME}"
+ )
+
+ set("${out_var}" "${archive}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake b/vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake
new file mode 100644
index 0000000..60fd5b5
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake
@@ -0,0 +1,141 @@
+set(Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES
+ "LINK : fatal error LNK1102:"
+ " fatal error C1060: "
+ # The linker ran out of memory during execution. We will try continuing once more, with parallelism disabled.
+ "LINK : fatal error LNK1318:"
+ "LINK : fatal error LNK1104:"
+ "LINK : fatal error LNK1201:"
+ "ld terminated with signal 9"
+ "Killed signal terminated program"
+ # Multiple threads using the same directory at the same time cause conflicts, will try again.
+ "Cannot create parent directory"
+ "Cannot write file"
+ # Multiple threads caused the wrong order of creating folders and creating files in folders
+ "Can't open"
+ # `make install` may stumble over concurrency, in particular with `mkdir` on osx.
+ "mkdir [^:]*: File exists"
+)
+list(JOIN Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES "|" Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES)
+
+function(vcpkg_execute_build_process)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "WORKING_DIRECTORY;LOGNAME" "COMMAND;NO_PARALLEL_COMMAND")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ foreach(required_arg IN ITEMS WORKING_DIRECTORY COMMAND)
+ if(NOT DEFINED arg_${required_arg})
+ message(FATAL_ERROR "${required_arg} must be specified.")
+ endif()
+ endforeach()
+
+ if(NOT DEFINED arg_LOGNAME)
+ message(WARNING "LOGNAME should be specified.")
+ set(arg_LOGNAME "build")
+ endif()
+
+ set(log_prefix "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}")
+ set(log_out "${log_prefix}-out.log")
+ set(log_err "${log_prefix}-err.log")
+ set(all_logs "${log_out}" "${log_err}")
+
+ if(X_PORT_PROFILE)
+ vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time")
+ if(DEFINED arg_NO_PARALLEL_COMMAND)
+ vcpkg_list(PREPEND arg_NO_PARALLEL_COMMAND "${CMAKE_COMMAND}" "-E" "time")
+ endif()
+ endif()
+
+ execute_process(
+ COMMAND ${arg_COMMAND}
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ OUTPUT_FILE "${log_out}"
+ ERROR_FILE "${log_err}"
+ RESULT_VARIABLE error_code
+ )
+ if (NOT error_code MATCHES "^[0-9]+$")
+ list(JOIN arg_COMMAND " " command)
+ message(FATAL_ERROR "Failed to execute command \"${command}\" in working directory \"${arg_WORKING_DIRECTORY}\": ${error_code}")
+ endif()
+ if(NOT error_code EQUAL "0")
+ file(READ "${log_out}" out_contents)
+ file(READ "${log_err}" err_contents)
+ set(all_contents "${out_contents}${err_contents}")
+ if(all_contents MATCHES "${Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES}")
+ message(WARNING "Please ensure your system has sufficient memory.")
+ set(log_out "${log_prefix}-out-1.log")
+ set(log_err "${log_prefix}-err-1.log")
+ list(APPEND all_logs "${log_out}" "${log_err}")
+
+ if(DEFINED arg_NO_PARALLEL_COMMAND)
+ message(STATUS "Restarting build without parallelism")
+ execute_process(
+ COMMAND ${arg_NO_PARALLEL_COMMAND}
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ OUTPUT_FILE "${log_out}"
+ ERROR_FILE "${log_err}"
+ RESULT_VARIABLE error_code
+ )
+ else()
+ message(STATUS "Restarting build")
+ execute_process(
+ COMMAND ${arg_COMMAND}
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ OUTPUT_FILE "${log_out}"
+ ERROR_FILE "${log_err}"
+ RESULT_VARIABLE error_code
+ )
+ endif()
+ elseif(all_contents MATCHES "mt(\\.exe)? : general error c101008d: ")
+ # Antivirus workaround - occasionally files are locked and cause mt.exe to fail
+ message(STATUS "mt.exe has failed. This may be the result of anti-virus. Disabling anti-virus on the buildtree folder may improve build speed")
+ foreach(iteration RANGE 1 3)
+ message(STATUS "Restarting Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE} because of mt.exe file locking issue. Iteration: ${iteration}")
+
+ set(log_out "${log_prefix}-out-${iteration}.log")
+ set(log_err "${log_prefix}-err-${iteration}.log")
+ list(APPEND all_logs "${log_out}" "${log_err}")
+ execute_process(
+ COMMAND ${arg_COMMAND}
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ OUTPUT_FILE "${log_out}"
+ ERROR_FILE "${log_err}"
+ RESULT_VARIABLE error_code
+ )
+
+ if(error_code EQUAL "0")
+ break()
+ endif()
+
+ file(READ "${log_out}" out_contents)
+ file(READ "${log_err}" err_contents)
+ set(all_contents "${out_contents}${err_contents}")
+ if(NOT all_contents MATCHES "mt : general error c101008d: ")
+ break()
+ endif()
+ endforeach()
+ endif()
+ endif()
+
+ if(NOT error_code EQUAL "0")
+ set(stringified_logs "")
+ foreach(log IN LISTS all_logs)
+ if(NOT EXISTS "${log}")
+ continue()
+ endif()
+ file(SIZE "${log}" log_size)
+ if(NOT log_size EQUAL "0")
+ file(TO_NATIVE_PATH "${log}" native_log)
+ string(APPEND stringified_logs " ${native_log}\n")
+ file(APPEND "${Z_VCPKG_ERROR_LOG_COLLECTION_FILE}" "${native_log}\n")
+ endif()
+ endforeach()
+ z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND})
+ message(FATAL_ERROR
+ " Command failed: ${pretty_command}\n"
+ " Working Directory: ${arg_WORKING_DIRECTORY}\n"
+ " See logs for more information:\n"
+ "${stringified_logs}"
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake b/vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake
new file mode 100644
index 0000000..2ad1481
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake
@@ -0,0 +1,46 @@
+function(vcpkg_execute_in_download_mode)
+ # this allows us to grab the value of the output variables, but pass through the rest of the arguments
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "RESULT_VARIABLE;RESULTS_VARIABLE;OUTPUT_VARIABLE;ERROR_VARIABLE" "")
+
+ set(output_and_error_same OFF)
+ set(output_variable_param "")
+ set(error_variable_param "")
+ set(result_variable_param "")
+ set(results_variable_param "")
+ if(DEFINED arg_OUTPUT_VARIABLE AND DEFINED arg_ERROR_VARIABLE AND arg_OUTPUT_VARIABLE STREQUAL arg_ERROR_VARIABLE)
+ set(output_variable_param OUTPUT_VARIABLE out_err_var)
+ set(error_variable_param ERROR_VARIABLE out_err_var)
+ set(output_and_error_same ON)
+ else()
+ if(DEFINED arg_OUTPUT_VARIABLE)
+ set(output_variable_param OUTPUT_VARIABLE out_var)
+ endif()
+ if(DEFINED arg_ERROR_VARIABLE)
+ set(error_variable_param ERROR_VARIABLE err_var)
+ endif()
+ endif()
+ if(DEFINED arg_RESULT_VARIABLE)
+ set(result_variable_param RESULT_VARIABLE result_var)
+ endif()
+ if(DEFINED arg_RESULTS_VARIABLE)
+ set(results_variable_param RESULTS_VARIABLE results_var)
+ endif()
+
+ cmake_language(CALL "${Z_VCPKG_EXECUTE_PROCESS_NAME}"
+ ${arg_UNPARSED_ARGUMENTS}
+ ${output_variable_param}
+ ${error_variable_param}
+ ${result_variable_param}
+ ${results_variable_param}
+ )
+
+ if(output_and_error_same)
+ z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_err_var)
+ else()
+ z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_var)
+ z_vcpkg_forward_output_variable(arg_ERROR_VARIABLE err_var)
+ endif()
+
+ z_vcpkg_forward_output_variable(arg_RESULT_VARIABLE result_var)
+ z_vcpkg_forward_output_variable(arg_RESULTS_VARIABLE results_var)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake b/vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake
new file mode 100644
index 0000000..c47bd89
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake
@@ -0,0 +1,144 @@
+function(vcpkg_execute_required_process)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ALLOW_IN_DOWNLOAD_MODE;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE"
+ "WORKING_DIRECTORY;LOGNAME;TIMEOUT;OUTPUT_VARIABLE;ERROR_VARIABLE"
+ "COMMAND;SAVE_LOG_FILES"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ foreach(required_arg IN ITEMS WORKING_DIRECTORY COMMAND)
+ if(NOT DEFINED arg_${required_arg})
+ message(FATAL_ERROR "${required_arg} must be specified.")
+ endif()
+ endforeach()
+
+ if(NOT DEFINED arg_LOGNAME)
+ message(WARNING "LOGNAME should be specified.")
+ set(arg_LOGNAME "required")
+ endif()
+
+ if (VCPKG_DOWNLOAD_MODE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE)
+ message(FATAL_ERROR
+[[
+This command cannot be executed in Download Mode.
+Halting portfile execution.
+]])
+ endif()
+
+ set(timeout_param "")
+ if(DEFINED arg_TIMEOUT)
+ set(timeout_param TIMEOUT "${arg_TIMEOUT}")
+ endif()
+
+ set(log_out "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out.log")
+ set(log_err "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-err.log")
+ set(output_param OUTPUT_FILE "${log_out}")
+ set(error_param ERROR_FILE "${log_err}")
+ set(output_and_error_same OFF)
+ if(DEFINED arg_OUTPUT_VARIABLE AND DEFINED arg_ERROR_VARIABLE AND arg_OUTPUT_VARIABLE STREQUAL arg_ERROR_VARIABLE)
+ set(output_param OUTPUT_VARIABLE out_err_var)
+ set(error_param ERROR_VARIABLE out_err_var)
+ set(output_and_error_same ON)
+ else()
+ if(DEFINED arg_OUTPUT_VARIABLE)
+ set(output_param OUTPUT_VARIABLE out_var)
+ endif()
+ if(DEFINED arg_ERROR_VARIABLE)
+ set(error_param ERROR_VARIABLE err_var)
+ endif()
+ endif()
+ if(arg_OUTPUT_STRIP_TRAILING_WHITESPACE)
+ list(APPEND output_param OUTPUT_STRIP_TRAILING_WHITESPACE)
+ endif()
+ if(arg_ERROR_STRIP_TRAILING_WHITESPACE)
+ list(APPEND error_param ERROR_STRIP_TRAILING_WHITESPACE)
+ endif()
+
+ if(X_PORT_PROFILE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE)
+ vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time")
+ endif()
+
+ vcpkg_execute_in_download_mode(
+ COMMAND ${arg_COMMAND}
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ ${timeout_param}
+ ${output_param}
+ ${error_param}
+ )
+
+ if(output_and_error_same)
+ file(WRITE "${log_out}" "${out_err_var}")
+ file(WRITE "${log_err}" "")
+ else()
+ if(DEFINED arg_OUTPUT_VARIABLE)
+ file(WRITE "${log_out}" "${out_var}")
+ endif()
+ if(DEFINED arg_ERROR_VARIABLE)
+ file(WRITE "${log_err}" "${err_var}")
+ endif()
+ endif()
+ vcpkg_list(SET logfiles)
+ vcpkg_list(SET logfile_copies)
+ set(expect_alias FALSE)
+ foreach(item IN LISTS arg_SAVE_LOG_FILES)
+ if(expect_alias)
+ vcpkg_list(POP_BACK logfile_copies)
+ vcpkg_list(APPEND logfile_copies "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-${item}")
+ set(expect_alias FALSE)
+ elseif(item STREQUAL "ALIAS")
+ if(NOT logfiles)
+ message(FATAL_ERROR "ALIAS used without source file")
+ endif()
+ set(expect_alias TRUE)
+ else()
+ vcpkg_list(APPEND logfiles "${arg_WORKING_DIRECTORY}/${item}")
+ cmake_path(GET item FILENAME filename)
+ if(NOT filename MATCHES "[.]log\$")
+ string(APPEND filename ".log")
+ endif()
+ vcpkg_list(APPEND logfile_copies "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-${filename}")
+ endif()
+ endforeach()
+ vcpkg_list(SET saved_logs)
+ foreach(logfile logfile_copy IN ZIP_LISTS logfiles logfile_copies)
+ if(EXISTS "${logfile}")
+ configure_file("${logfile}" "${logfile_copy}" COPYONLY)
+ vcpkg_list(APPEND saved_logs "${logfile_copy}")
+ endif()
+ endforeach()
+ if(NOT error_code EQUAL 0)
+ set(stringified_logs "")
+ foreach(log IN LISTS saved_logs ITEMS "${log_out}" "${log_err}")
+ if(NOT EXISTS "${log}")
+ continue()
+ endif()
+ file(SIZE "${log}" log_size)
+ if(NOT log_size EQUAL "0")
+ file(TO_NATIVE_PATH "${log}" native_log)
+ string(APPEND stringified_logs " ${native_log}\n")
+ file(APPEND "${Z_VCPKG_ERROR_LOG_COLLECTION_FILE}" "${native_log}\n")
+ endif()
+ endforeach()
+
+ z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND})
+ message(FATAL_ERROR
+ " Command failed: ${pretty_command}\n"
+ " Working Directory: ${arg_WORKING_DIRECTORY}\n"
+ " Error code: ${error_code}\n"
+ " See logs for more information:\n"
+ "${stringified_logs}"
+ )
+ endif()
+
+ # pass output parameters back to caller's scope
+ if(output_and_error_same)
+ z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_err_var)
+ # arg_ERROR_VARIABLE = arg_OUTPUT_VARIABLE, so no need to set it again
+ else()
+ z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_var)
+ z_vcpkg_forward_output_variable(arg_ERROR_VARIABLE err_var)
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake b/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
new file mode 100644
index 0000000..a13f8fa
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake
@@ -0,0 +1,71 @@
+function(vcpkg_execute_required_process_repeat)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ALLOW_IN_DOWNLOAD_MODE"
+ "COUNT;WORKING_DIRECTORY;LOGNAME"
+ "COMMAND"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ foreach(required_arg IN ITEMS COUNT WORKING_DIRECTORY LOGNAME COMMAND)
+ if(NOT DEFINED arg_${required_arg})
+ message(FATAL_ERROR "${required_arg} must be specified.")
+ endif()
+ endforeach()
+
+ # also checks for COUNT being an integer
+ if(NOT arg_COUNT GREATER_EQUAL "1")
+ message(FATAL_ERROR "COUNT (${arg_COUNT}) must be greater than or equal to 1.")
+ endif()
+
+ if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE)
+ message(FATAL_ERROR
+[[
+This command cannot be executed in Download Mode.
+Halting portfile execution.
+]])
+ endif()
+
+ if(X_PORT_PROFILE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE)
+ vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time")
+ endif()
+
+ set(all_logs "")
+ foreach(loop_count RANGE 1 ${arg_COUNT})
+ set(out_log "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out-${loop_count}.log")
+ set(err_log "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out-${loop_count}.log")
+ list(APPEND all_logs "${out_log}" "${err_log}")
+
+ vcpkg_execute_in_download_mode(
+ COMMAND ${arg_COMMAND}
+ OUTPUT_FILE "${out_log}"
+ ERROR_FILE "${err_log}"
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}"
+ )
+ if(error_code EQUAL "0")
+ return()
+ endif()
+ endforeach()
+
+ set(stringified_logs "")
+ foreach(log IN LISTS all_logs)
+ if(NOT EXISTS "${log}")
+ continue()
+ endif()
+ file(SIZE "${log}" log_size)
+ if(NOT log_size EQUAL "0")
+ file(TO_NATIVE_PATH "${log}" native_log)
+ string(APPEND stringified_logs " ${native_log}\n")
+ endif()
+ endforeach()
+
+ z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND})
+ message(FATAL_ERROR
+ " Command failed: ${pretty_command}\n"
+ " Working Directory: ${arg_WORKING_DIRECTORY}\n"
+ " See logs for more information:\n"
+ "${stringified_logs}"
+ )
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_extract_archive.cmake b/vcpkg/scripts/cmake/vcpkg_extract_archive.cmake
new file mode 100644
index 0000000..3c7be77
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_extract_archive.cmake
@@ -0,0 +1,45 @@
+function(vcpkg_extract_archive)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "ARCHIVE;DESTINATION"
+ ""
+ )
+
+ foreach(arg_name IN ITEMS ARCHIVE DESTINATION)
+ if(NOT DEFINED "arg_${arg_name}")
+ message(FATAL_ERROR "${arg_name} is required.")
+ endif()
+ endforeach()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(EXISTS "${arg_DESTINATION}")
+ message(FATAL_ERROR "${arg_DESTINATION} was an extraction target, but it already exists.")
+ endif()
+
+ file(MAKE_DIRECTORY "${arg_DESTINATION}")
+
+ cmake_path(GET arg_ARCHIVE EXTENSION archive_extension)
+ string(TOLOWER "${archive_extension}" archive_extension)
+ if("${archive_extension}" MATCHES [[\.msi$]])
+ cmake_path(NATIVE_PATH arg_ARCHIVE archive_native_path)
+ cmake_path(NATIVE_PATH arg_DESTINATION destination_native_path)
+ cmake_path(GET arg_ARCHIVE PARENT_PATH archive_directory)
+ vcpkg_execute_in_download_mode(
+ COMMAND msiexec
+ /a "${archive_native_path}"
+ /qn "TARGETDIR=${destination_native_path}"
+ WORKING_DIRECTORY "${archive_directory}"
+ )
+ elseif("${archive_extension}" MATCHES [[\.exe$]])
+ vcpkg_execute_in_download_mode(
+ COMMAND "$ENV{VCPKG_COMMAND}" z-extract "${arg_ARCHIVE}" "${arg_DESTINATION}")
+ else()
+ vcpkg_execute_in_download_mode(
+ COMMAND "${CMAKE_COMMAND}" -E tar xzf "${arg_ARCHIVE}"
+ WORKING_DIRECTORY "${arg_DESTINATION}"
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake b/vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake
new file mode 100644
index 0000000..7b090c5
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake
@@ -0,0 +1,158 @@
+function(z_vcpkg_extract_source_archive_deprecated_mode archive working_directory)
+ cmake_path(GET archive FILENAME archive_filename)
+ if(NOT EXISTS "${working_directory}/${archive_filename}.extracted")
+ message(STATUS "Extracting source ${archive}")
+ vcpkg_extract_archive(ARCHIVE "${archive}" DESTINATION "${working_directory}")
+ file(TOUCH "${working_directory}/${archive_filename}.extracted")
+ endif()
+endfunction()
+
+function(vcpkg_extract_source_archive)
+ if(ARGC LESS_EQUAL "2")
+ z_vcpkg_deprecation_message( "Deprecated form of vcpkg_extract_source_archive used:
+ Please use the `vcpkg_extract_source_archive(<out-var> ARCHIVE <archive>)` form.")
+ if(ARGC EQUAL "0")
+ message(FATAL_ERROR "vcpkg_extract_source_archive requires at least one argument.")
+ endif()
+
+ set(archive "${ARGV0}")
+ if(ARGC EQUAL "1")
+ set(working_directory "${CURRENT_BUILDTREES_DIR}/src")
+ else()
+ set(working_directory "${ARGV1}")
+ endif()
+
+ z_vcpkg_extract_source_archive_deprecated_mode("${archive}" "${working_directory}")
+ return()
+ endif()
+
+ set(out_source_path "${ARGV0}")
+ cmake_parse_arguments(PARSE_ARGV 1 "arg"
+ "NO_REMOVE_ONE_LEVEL;SKIP_PATCH_CHECK;Z_ALLOW_OLD_PARAMETER_NAMES"
+ "ARCHIVE;SOURCE_BASE;BASE_DIRECTORY;WORKING_DIRECTORY;REF"
+ "PATCHES"
+ )
+
+ if(DEFINED arg_REF)
+ if(NOT arg_Z_ALLOW_OLD_PARAMETER_NAMES)
+ message(FATAL_ERROR "Unexpected argument REF")
+ elseif(DEFINED arg_SOURCE_BASE)
+ message(FATAL_ERROR "Cannot specify both REF and SOURCE_BASE")
+ else()
+ string(REPLACE "/" "-" arg_SOURCE_BASE "${arg_REF}")
+ endif()
+ endif()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_ARCHIVE)
+ message(FATAL_ERROR "ARCHIVE must be specified")
+ endif()
+
+ if(DEFINED arg_WORKING_DIRECTORY)
+ if(DEFINED arg_BASE_DIRECTORY)
+ message(FATAL_ERROR "Cannot specify both BASE_DIRECTORY and WORKING_DIRECTORY")
+ elseif(NOT IS_ABSOLUTE "${arg_WORKING_DIRECTORY}")
+ message(FATAL_ERROR "WORKING_DIRECTORY (${arg_WORKING_DIRECTORY}) must be an absolute path")
+ endif()
+ set(working_directory "${arg_WORKING_DIRECTORY}")
+ else()
+ if(NOT DEFINED arg_BASE_DIRECTORY)
+ set(arg_BASE_DIRECTORY "src")
+ elseif(IS_ABSOLUTE "${arg_BASE_DIRECTORY}")
+ message(FATAL_ERROR "BASE_DIRECTORY (${arg_BASE_DIRECTORY}) must be a relative path")
+ endif()
+ cmake_path(APPEND CURRENT_BUILDTREES_DIR "${arg_BASE_DIRECTORY}"
+ OUTPUT_VARIABLE working_directory)
+ endif()
+
+ if(NOT DEFINED arg_SOURCE_BASE)
+ cmake_path(GET arg_ARCHIVE STEM arg_SOURCE_BASE)
+ elseif(arg_SOURCE_BASE MATCHES [[\\|/]])
+ message(FATAL_ERROR "SOURCE_BASE (${arg_SOURCE_BASE}) must not contain slashes")
+ endif()
+
+ # Take the last 10 chars of the base
+ set(base_max_length 10)
+ string(LENGTH "${arg_SOURCE_BASE}" source_base_length)
+ if(source_base_length GREATER base_max_length)
+ math(EXPR start "${source_base_length} - ${base_max_length}")
+ string(SUBSTRING "${arg_SOURCE_BASE}" "${start}" -1 arg_SOURCE_BASE)
+ endif()
+
+ # Hash the archive hash along with the patches. Take the first 10 chars of the hash
+ file(SHA512 "${arg_ARCHIVE}" patchset_hash)
+ foreach(patch IN LISTS arg_PATCHES)
+ cmake_path(ABSOLUTE_PATH patch
+ BASE_DIRECTORY "${CURRENT_PORT_DIR}"
+ OUTPUT_VARIABLE absolute_patch
+ )
+ if(NOT EXISTS "${absolute_patch}")
+ message(FATAL_ERROR "Could not find patch: '${patch}'")
+ endif()
+ file(SHA512 "${absolute_patch}" current_hash)
+ string(APPEND patchset_hash "${current_hash}")
+ endforeach()
+
+ string(SHA512 patchset_hash "${patchset_hash}")
+ string(SUBSTRING "${patchset_hash}" 0 10 patchset_hash)
+ cmake_path(APPEND working_directory "${arg_SOURCE_BASE}-${patchset_hash}"
+ OUTPUT_VARIABLE source_path
+ )
+
+ if(_VCPKG_EDITABLE AND EXISTS "${source_path}")
+ set("${out_source_path}" "${source_path}" PARENT_SCOPE)
+ message(STATUS "Using source at ${source_path}")
+ return()
+ elseif(NOT _VCPKG_EDITABLE)
+ cmake_path(APPEND_STRING source_path ".clean")
+ if(EXISTS "${source_path}")
+ message(STATUS "Cleaning sources at ${source_path}. Use --editable to skip cleaning for the packages you specify.")
+ file(REMOVE_RECURSE "${source_path}")
+ endif()
+ endif()
+
+ message(STATUS "Extracting source ${arg_ARCHIVE}")
+ cmake_path(APPEND_STRING source_path ".tmp" OUTPUT_VARIABLE temp_dir)
+ file(REMOVE_RECURSE "${temp_dir}")
+ file(MAKE_DIRECTORY "${temp_dir}")
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND "${CMAKE_COMMAND}" -E tar xjf "${arg_ARCHIVE}"
+ WORKING_DIRECTORY "${temp_dir}"
+ LOGNAME extract
+ )
+
+ if(arg_NO_REMOVE_ONE_LEVEL)
+ cmake_path(SET temp_source_path "${temp_dir}")
+ else()
+ file(GLOB archive_directory "${temp_dir}/*")
+ # Exclude .DS_Store entries created by the finder on macOS
+ list(FILTER archive_directory EXCLUDE REGEX ".*/.DS_Store$")
+ # make sure `archive_directory` is only a single file
+ if(NOT archive_directory MATCHES ";" AND IS_DIRECTORY "${archive_directory}")
+ cmake_path(SET temp_source_path "${archive_directory}")
+ else()
+ message(FATAL_ERROR "Could not unwrap top level directory from archive. Pass NO_REMOVE_ONE_LEVEL to disable this.")
+ endif()
+ endif()
+
+ if (arg_SKIP_PATCH_CHECK)
+ set(quiet_param QUIET)
+ else()
+ set(quiet_param "")
+ endif()
+
+ z_vcpkg_apply_patches(
+ SOURCE_PATH "${temp_source_path}"
+ PATCHES ${arg_PATCHES}
+ ${quiet_param}
+ )
+
+ file(RENAME "${temp_source_path}" "${source_path}")
+ file(REMOVE_RECURSE "${temp_dir}")
+
+ set("${out_source_path}" "${source_path}" PARENT_SCOPE)
+ message(STATUS "Using source at ${source_path}")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake b/vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
new file mode 100644
index 0000000..b279708
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake
@@ -0,0 +1,11 @@
+function(vcpkg_extract_source_archive_ex)
+ # OUT_SOURCE_PATH is an out-parameter so we need to parse it
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "OUT_SOURCE_PATH" "")
+ if(NOT DEFINED arg_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "OUT_SOURCE_PATH must be specified")
+ endif()
+
+ vcpkg_extract_source_archive(source_path ${arg_UNPARSED_ARGUMENTS} Z_ALLOW_OLD_PARAMETER_NAMES)
+
+ set("${arg_OUT_SOURCE_PATH}" "${source_path}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake b/vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake
new file mode 100644
index 0000000..a5cb105
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake
@@ -0,0 +1,78 @@
+function(vcpkg_fail_port_install)
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_fail_port_install has been removed and all values should be moved by adding `supports` field to manifest file or directly adding `${PORT}:${FAILED_TRIPLET}=fail` to _scripts/ci.baseline.txt_.\nPlease remove `vcpkg_fail_port_install(...)`.\n")
+
+ set(multi_args "ON_TARGET;ON_ARCH;ON_CRT_LINKAGE;ON_LIBRARY_LINKAGE")
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "ALWAYS" "MESSAGE" "${multi_args}")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_fail_port_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(arg_ALWAYS)
+ vcpkg_list(SET extra_args)
+ foreach(arg IN LISTS multi_args)
+ if(DEFINED "arg_${arg}")
+ vcpkg_list(APPEND extra_args "${arg}" "${arg_${arg}}")
+ endif()
+ endforeach()
+ if(NOT "${extra_args}" STREQUAL "")
+ message(WARNING "vcpkg_fail_port_install set to fail both unconditionally and conditionally on ${extra_args}. This is likely to be an error.")
+ endif()
+ if(NOT DEFINED arg_MESSAGE)
+ message(FATAL_ERROR "vcpkg_fail_port_install(ALWAYS) was called without a specific MESSAGE.")
+ endif()
+
+ message(FATAL_ERROR "${arg_MESSAGE}")
+ endif()
+
+ if(DEFINED arg_MESSAGE)
+ string(APPEND arg_MESSAGE "\n")
+ else()
+ set(arg_MESSAGE "")
+ endif()
+
+ set(fail_port OFF)
+ # Target fail check
+ if(DEFINED arg_ON_TARGET)
+ foreach(target IN LISTS arg_ON_TARGET)
+ string(TOUPPER "${target}" target_upper)
+ if(VCPKG_TARGET_IS_${target_upper})
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "Target '${target}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ # Architecture fail check
+ if(DEFINED arg_ON_ARCH)
+ foreach(arch IN LISTS arg_ON_ARCH)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL arch)
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "Architecture '${arch}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ # CRT linkage fail check
+ if(DEFINED arg_ON_CRT_LINKAGE)
+ foreach(crt_linkage IN LISTS arg_ON_CRT_LINKAGE)
+ if(VCPKG_CRT_LINKAGE STREQUAL crt_linkage)
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "CRT linkage '${VCPKG_CRT_LINKAGE}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ # Library linkage fail check
+ if(DEFINED arg_ON_LIBRARY_LINKAGE)
+ foreach(library_linkage IN LISTS arg_ON_LIBRARY_LINKAGE)
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL library_linkage)
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "Library linkage '${VCPKG_LIBRARY_LINKAGE}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ if(fail_port)
+ message(FATAL_ERROR "${arg_MESSAGE}")
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake
new file mode 100644
index 0000000..54646a9
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake
@@ -0,0 +1,9 @@
+set(program_name 7z)
+if(CMAKE_HOST_WIN32)
+ set(tool_subdirectory "24.09")
+ set(paths_to_search "${DOWNLOADS}/tools/7z/${tool_subdirectory}/7z2409/SourceDir/Files/7-Zip")
+ set(download_urls "https://github.com/ip7z/7zip/releases/download/24.09/7z2409.exe")
+ set(download_filename "7z2409.7z.exe")
+ set(search_names "7z.exe")
+ set(download_sha512 a39a84b13b383ac5fca20eb6d92ec6b8bc85f1b6a545c441efdbe054d8d12c9ebe97d366235bdf1383bbdb2a9666d18d0145b10b6e589180502c0c2dfa26ef14)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake
new file mode 100644
index 0000000..59153af
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake
@@ -0,0 +1,21 @@
+set(program_name bazel)
+set(program_version 4.2.2)
+set(rename_binary_to "bazel")
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(tool_subdirectory "${program_version}-linux")
+ set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64")
+ set(download_filename "bazel-${tool_subdirectory}-x86_64")
+ set(raw_executable ON)
+ set(download_sha512 f38619e054df78cab38278a5901b2798f2e25b5cec53358d98278002e713d225fd3df96a209b7f22a2357835a279cee8ef1768e10561b3e9fe6361f324563bb9)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ set(tool_subdirectory "${program_version}-darwin")
+ set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64")
+ set(download_filename "bazel-${tool_subdirectory}-x86_64")
+ set(raw_executable ON)
+ set(download_sha512 a3fd8f9d71b0669d742439200f27ee0a3891c1f248df62c841ebb2b416a47534562f429f8a08793b074e9b74f2ede3d97a7e13ac9921c7ee2dc6a2dca8b7f275)
+else()
+ set(tool_subdirectory "${program_version}-windows")
+ set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64.zip")
+ set(download_filename "bazel-${tool_subdirectory}-x86_64.zip")
+ set(download_sha512 8a8196e242964114316232818cb81bfa19ebfd3a029ebf550a241e33b22a6e9ed636dade06411a8706c05c4e73def0bc8d7f45ff0ec5478bcc5de21b5638204d)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake
new file mode 100644
index 0000000..ff2ea49
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake
@@ -0,0 +1,23 @@
+if(CMAKE_HOST_WIN32)
+ # This download shall be the same as in vcpkg_find_acquire_program(FLEX).cmake
+ # Note that this is 2.5.24 rather than 2.5.25 due to a race in %TEMP% in 2.5.25
+ # For more information, see: https://github.com/microsoft/vcpkg/issues/29139
+ # or: https://github.com/lexxmark/winflexbison/issues/86
+ set(program_version 2.5.24)
+ set(download_urls "https://github.com/lexxmark/winflexbison/releases/download/v${program_version}/win_flex_bison-${program_version}.zip")
+ set(download_filename "win_flex_bison-${program_version}.zip")
+ set(download_sha512 dc89fcdaa7071fbbf88b0755b799d69223240c28736924b4c30968c08e7e0b116c7e05ae98a9257be26a1dfb4aa70a628808a6b6018706bf857555c5b4335018)
+ set(tool_subdirectory "${program_version}")
+ set(program_name win_bison)
+ set(paths_to_search "${DOWNLOADS}/tools/win_flex/${program_version}")
+ if(NOT EXISTS "${paths_to_search}/data/m4sugar/m4sugar.m4")
+ file(REMOVE_RECURSE "${paths_to_search}")
+ endif()
+else()
+ set(program_name bison)
+ set(apt_package_name bison)
+ set(brew_package_name bison)
+ if (CMAKE_HOST_APPLE)
+ set(paths_to_search /opt/homebrew/opt/bison/bin /usr/local/opt/bison/bin)
+ endif()
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake
new file mode 100644
index 0000000..7bb0df7
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake
@@ -0,0 +1,31 @@
+set(program_name clang)
+set(tool_subdirectory "clang-15.0.6")
+set(program_version 15.0.6)
+if(CMAKE_HOST_WIN32)
+ set(paths_to_search
+ # Support LLVM in Visual Studio 2019
+ "$ENV{LLVMInstallDir}/x64/bin"
+ "$ENV{LLVMInstallDir}/bin"
+ "$ENV{VCINSTALLDIR}/Tools/Llvm/x64/bin"
+ "$ENV{VCINSTALLDIR}/Tools/Llvm/bin"
+ "${DOWNLOADS}/tools/${tool_subdirectory}-windows/bin"
+ "${DOWNLOADS}/tools/clang/${tool_subdirectory}/bin")
+
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(host_arch "$ENV{PROCESSOR_ARCHITEW6432}")
+ else()
+ set(host_arch "$ENV{PROCESSOR_ARCHITECTURE}")
+ endif()
+
+ if(host_arch MATCHES "64")
+ set(download_urls "https://github.com/llvm/llvm-project/releases/download/llvmorg-${program_version}/LLVM-${program_version}-win64.exe")
+ set(download_filename "LLVM-${program_version}-win64.exe")
+ set(download_sha512 2dd6f3eea106f2b905e6658ea5ea12856d17285adbfba055edc2d6b6389c4c2f7aa001df5cb0d8fb84fa7fa47d5035a7fddf276523b472dd55f150ae25938768)
+ else()
+ set(download_urls "https://github.com/llvm/llvm-project/releases/download/llvmorg-${program_version}/LLVM-${program_version}-win32.exe")
+ set(download_filename "LLVM-${program_version}-win32.exe")
+ set(download_sha512 90225D650EADB0E590A9912B479B46A575D41A19EB5F2DA03C4DC8B032DC0790222F0E3706DFE2A35C0E7747941972AC26CB47D3EB13730DB76168931F37E5F1)
+ endif()
+endif()
+set(brew_package_name "llvm")
+set(apt_package_name "clang")
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake
new file mode 100644
index 0000000..9362a7e
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake
@@ -0,0 +1,8 @@
+set(program_name dark)
+if(CMAKE_HOST_WIN32)
+ set(tool_subdirectory "wix311-binaries")
+ set(paths_to_search "${DOWNLOADS}/tools/dark/${tool_subdirectory}")
+ set(download_urls "https://github.com/wixtoolset/wix3/releases/download/wix311rtm/wix311-binaries.zip")
+ set(download_filename "wix311-binaries.zip")
+ set(download_sha512 74f0fa29b5991ca655e34a9d1000d47d4272e071113fada86727ee943d913177ae96dc3d435eaf494d2158f37560cd4c2c5274176946ebdb17bf2354ced1c516)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake
new file mode 100644
index 0000000..86ebf4f
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake
@@ -0,0 +1,11 @@
+set(program_name doxygen)
+set(program_version 1.9.1)
+if(CMAKE_HOST_WIN32)
+ set(download_filename "doxygen-${program_version}.windows.bin.zip")
+ set(download_sha512 "c3eeb6b9fa4eab70fb6b0864fbbf94fb8050f3fee38d117cf470921a80e3569cc1c8b0272604d6731e05f01790cfaa70e159bec5d0882fc4f2d8ae4a5d52a21b")
+ vcpkg_list(SET sourceforge_args
+ REPO doxygen
+ REF "rel-${program_version}"
+ )
+ set(tool_subdirectory c3eeb6b9fa-76d69c6db5)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake
new file mode 100644
index 0000000..d3bc996
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake
@@ -0,0 +1,20 @@
+if(CMAKE_HOST_WIN32)
+ # This download shall be the same as in vcpkg_find_acquire_program(BISON).cmake
+ # Note that this is 2.5.24 rather than 2.5.25 due to a race in %TEMP% in 2.5.25
+ # For more information, see: https://github.com/microsoft/vcpkg/issues/29139
+ # or: https://github.com/lexxmark/winflexbison/issues/86
+ set(program_version 2.5.24)
+ set(download_urls "https://github.com/lexxmark/winflexbison/releases/download/v${program_version}/win_flex_bison-${program_version}.zip")
+ set(download_filename "win_flex_bison-${program_version}.zip")
+ set(download_sha512 dc89fcdaa7071fbbf88b0755b799d69223240c28736924b4c30968c08e7e0b116c7e05ae98a9257be26a1dfb4aa70a628808a6b6018706bf857555c5b4335018)
+ set(tool_subdirectory "${program_version}")
+ set(program_name win_flex)
+ set(paths_to_search "${DOWNLOADS}/tools/win_flex/${program_version}")
+ if(NOT EXISTS "${paths_to_search}/data/m4sugar/m4sugar.m4")
+ file(REMOVE_RECURSE "${paths_to_search}")
+ endif()
+else()
+ set(program_name flex)
+ set(apt_package_name flex)
+ set(brew_package_name flex)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake
new file mode 100644
index 0000000..b200864
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake
@@ -0,0 +1,11 @@
+set(raw_executable true)
+set(program_name gas-preprocessor)
+set(interpreter PERL)
+set(search_names "gas-preprocessor.pl")
+set(paths_to_search "${DOWNLOADS}/tools/gas-preprocessor/${tool_subdirectory}")
+set(rename_binary_to "gas-preprocessor.pl")
+set(commit_id 9309c67acb535ca6248f092e96131d8eb07eefc1)
+set(download_urls "https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/${commit_id}/gas-preprocessor.pl")
+string(SUBSTRING ${commit_id} 0 8 tool_subdirectory)
+set(download_filename "gas-preprocessor-${tool_subdirectory}.pl")
+set(download_sha512 b4749cf8aa758e3f28d4b21803422a5c2588f5fc48cfd317564606b374f8d739c636067cf7a4956d7365d63b055bc6e7626c304857e6c9013d6b4a0db9d8ad4f)
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake
new file mode 100644
index 0000000..dc6f708
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake
@@ -0,0 +1,15 @@
+set(program_name git)
+if(CMAKE_HOST_WIN32)
+ set(base_version 2.32.0)
+ set(program_version 2.32.0.2)
+ set(tool_subdirectory "git-${program_version}-2-windows")
+ set(download_urls "https://github.com/git-for-windows/git/releases/download/v${base_version}.windows.2/PortableGit-${program_version}-32-bit.7z.exe")
+ set(download_filename "PortableGit-${program_version}-32-bit.7z.exe")
+ set(download_sha512 867d8534972cbaf7a4224e25a14d484f8d17ef186f8d79e9a758afb90cf69541375cb7615a39702311f4809cb8371ef85c2b1a15bfffe9e48f0e597ac011b348)
+ set(paths_to_search
+ "${DOWNLOADS}/tools/${tool_subdirectory}/mingw32/bin"
+ "${DOWNLOADS}/tools/git/${tool_subdirectory}/mingw32/bin")
+else()
+ set(brew_package_name "git")
+ set(apt_package_name "git")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake
new file mode 100644
index 0000000..eeb025a
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake
@@ -0,0 +1,49 @@
+set(program_name gn)
+set(rename_binary_to "gn")
+if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/share/gn/version.txt")
+ file(READ "${CURRENT_HOST_INSTALLED_DIR}/share/gn/version.txt" program_version)
+ set(paths_to_search "${CURRENT_HOST_INSTALLED_DIR}/tools/gn")
+else() # Old behavior
+ message("Consider adding vcpkg-tool-gn as a host dependency of this port or create an issue at https://github.com/microsoft/vcpkg/issues")
+ set(cipd_download_gn "https://chrome-infra-packages.appspot.com/dl/gn/gn")
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ execute_process(COMMAND uname -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(HOST_ARCH STREQUAL "aarch64")
+ set(program_version "GkfFAfAUyE-qfeWkdUMaeM1Ov64Fk3SjSj9pwKqZX7gC")
+ set(gn_platform "linux-arm64")
+ set(download_sha512 "E88201309A12C00CE60137261B8E1A759780C81D1925B819583B16D2095A16A7D32EFB2AF36C1E1D6EAA142BF6A6A811847D3140E4E94967EE28F4ADF6373E4B")
+ elseif(HOST_ARCH STREQUAL "riscv64")
+ set(program_version "tauFErkaMkGZN-_03F9DJfMm3DRnaiGOS6SXeLcOswAC")
+ set(gn_platform "linux-riscv64")
+ set(download_sha512 "210de22ad5d5634be902c68c6deed08686e252c34218baf30c6bd7266be142740b18d7e6a27b0ef56eb6f75dc5255d5365dff0b98ade482ccba4a32e756a14e5")
+ else()
+ set(program_version "Fv1ENXodhXmEXy_xpZr2gQkVJh57w_IsbsrEJOU0_EoC")
+ set(gn_platform "linux-amd64")
+ set(download_sha512 "A7A5CD5633C5547EC1B1A95958486DDAAC91F1A65881EDC0AD8F74DF44E82F08BA74358E9A72DFCDDE6F534A6B9C9A430D3E16ACE2E4346C4D2E9113F7654B3F")
+ endif()
+ elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ execute_process(COMMAND uname -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(HOST_ARCH STREQUAL "arm64")
+ set(program_version "qMPtGq7xZlpb-lHjP-SK27ftT4X71WIvguuyx6X14DEC")
+ set(gn_platform "mac-arm64")
+ set(download_sha512 "D096FB958D017807427911089AB5A7655AED117F6851C0491AC8063CEDB544423122EF64DF4264ECA86C20A2BDE9E64D7B72DA7ED8C95C2BA79A68B8247D36B8")
+ else()
+ set(program_version "0x2juPLNfP9603GIyZrUfflxK6LiMcppLAoxEpYuIYoC")
+ set(gn_platform "mac-amd64")
+ set(download_sha512 "2696ECE7B2C8008CABDDF10024017E2ECF875F8679424E77052252BDDC83A2096DF3C61D89CD25120EF27E0458C8914BEEED9D418593BDBC4F6ED33A8D4C3DC5")
+ endif()
+ else()
+ if("$ENV{PROCESSOR_ARCHITECTURE}" STREQUAL "ARM64")
+ set(program_version "q5ExVHmXyD34Q_Tzb-aRxsPipO-e37-csVRhVM7IJh0C")
+ set(gn_platform "windows-amd64")
+ set(download_sha512 "FA764AA44EB6F48ED50E855B4DC1DD1ABE35E45FD4AAC7F059A35293A14894C1B591215E34FB0CE9362E646EA9463BA3B489EFB7EBBAA2693D14238B50E4E686")
+ else() # AMD64
+ set(program_version "q5ExVHmXyD34Q_Tzb-aRxsPipO-e37-csVRhVM7IJh0C")
+ set(gn_platform "windows-amd64")
+ set(download_sha512 "FA764AA44EB6F48ED50E855B4DC1DD1ABE35E45FD4AAC7F059A35293A14894C1B591215E34FB0CE9362E646EA9463BA3B489EFB7EBBAA2693D14238B50E4E686")
+ endif()
+ endif()
+endif()
+set(tool_subdirectory "${program_version}")
+set(download_urls "${cipd_download_gn}/${gn_platform}/+/${program_version}")
+set(download_filename "gn-${gn_platform}.zip")
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake
new file mode 100644
index 0000000..fa89f49
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake
@@ -0,0 +1,55 @@
+set(program_name go)
+set(program_version 1.21.1)
+set(brew_package_name "go")
+set(apt_package_name "golang-go")
+if(CMAKE_HOST_WIN32)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(build_arch $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(build_arch $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
+ if(build_arch MATCHES "^(ARM|arm)64$")
+ set(tool_subdirectory ${program_version}.windows-arm64)
+ set(download_sha512 cb4bdb042cc773df049e63ba2ef1f93f4da23671e3b233af0a8e5898090659ba9ec6a2d98765e586716e52746288c8723f4eb5b8ed8d49e8c9110b32fe6e7ec7)
+ elseif(build_arch MATCHES "^(AMD|amd)64$")
+ set(tool_subdirectory ${program_version}.windows-amd64)
+ set(download_sha512 c2bf18a8018fab79fbc1dde904d1f7341ab360aec4cd1256bdd3913e5b83cbaf664101b1768e21f17d0fad859cad53a62d37074e0e458f02ee76f4bf4d6810b9)
+ else()
+ # Default to x86 for 32-bit systems
+ set(tool_subdirectory ${program_version}.windows-386)
+ set(download_sha512 417a4bd95a10f21c2166badd2303e1956d91d0e783e334c99ea0176a323e815729c8c3af3f7ec68f057b757d06bcc75be82584031c4069c89a2db62bbfa902e8)
+ endif()
+ set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin")
+ set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.zip")
+ set(download_filename "go${tool_subdirectory}.zip")
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(HOST_ARCH MATCHES "x86_64|amd64|AMD64")
+ set(tool_subdirectory ${program_version}.darwin-amd64)
+ set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz")
+ set(download_filename "go${tool_subdirectory}.tar.gz")
+ set(download_sha512 101f5b3682cb18fea222387427937784447f5f0b748749707e5158ea15e4c3e66d94a7af20470e405e804d46b19a981dcdeaa210881cbe7845b308e806a8b3f9)
+ elseif(HOST_ARCH MATCHES "arm64|aarch64|ARM64|AARCH64")
+ set(tool_subdirectory ${program_version}.darwin-arm64)
+ set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz")
+ set(download_filename "go${tool_subdirectory}.tar.gz")
+ set(download_sha512 a7ee818bc2853a4d385620823a4dd6d9ca44f3ad1d111783648817e82a3ef4b65edc9f06aeba893ae7d6b44773234ba78eb975f0222eed5eae4d10b029cec78a)
+ endif()
+ set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin")
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(HOST_ARCH MATCHES "x86_64|amd64|AMD64")
+ set(tool_subdirectory ${program_version}.linux-amd64)
+ set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz")
+ set(download_filename "go${tool_subdirectory}.tar.gz")
+ set(download_sha512 4567eefb6c5c524c37543c2d9813d792c2f71c8c2feeda51728a7d8dcf630cc1c6a8932df7d50df53d8f923db46cea3db386caba40e9b3401554a3734a94c9b6)
+ elseif(HOST_ARCH MATCHES "arm64|aarch64|ARM64|AARCH64")
+ set(tool_subdirectory ${program_version}.linux-arm64)
+ set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz")
+ set(download_filename "go${tool_subdirectory}.tar.gz")
+ set(download_sha512 3dec6cbd87253a7fbd5fd8b533f53a7f5a6f1e92a77c5ca270cd3e790b4b45dbdb1512945c521c927f36c5198e2cb4726b29ef94fffe4714918526790efee570)
+ endif()
+ set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin")
+else()
+ message(WARNING "Unsupported host system for prebuilt Go binaries. Skipping...")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake
new file mode 100644
index 0000000..dc52162
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake
@@ -0,0 +1,8 @@
+set(program_name gperf)
+set(program_version 3.0.1)
+if(CMAKE_HOST_WIN32)
+ set(download_filename "gperf-${program_version}-bin.zip")
+ set(download_sha512 3f2d3418304390ecd729b85f65240a9e4d204b218345f82ea466ca3d7467789f43d0d2129fcffc18eaad3513f49963e79775b10cc223979540fa2e502fe7d4d9)
+ set(download_urls "https://sourceforge.net/projects/gnuwin32/files/gperf/${program_version}/gperf-${program_version}-bin.zip/download")
+ set(paths_to_search "${DOWNLOADS}/tools/gperf/bin")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake
new file mode 100644
index 0000000..f3d5a2d
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake
@@ -0,0 +1,13 @@
+set(program_name jom)
+set(program_version_string 1_1_4)
+if(CMAKE_HOST_WIN32)
+ set(download_urls
+ "https://download.qt.io/official_releases/jom/jom_${program_version_string}.zip"
+ "https://mirrors.ocf.berkeley.edu/qt/official_releases/jom/jom_${program_version_string}.zip"
+ "https://mirrors.ukfast.co.uk/sites/qt.io/official_releases/jom/jom_${program_version_string}.zip"
+ )
+ set(download_filename "jom_${program_version_string}.zip")
+ set(download_sha512 a683bd829c84942223a791dae8abac5cfc2e3fa7de84c6fdc490ad3aa996a26c9fa0be0636890f02c9d56948bbe3225b43497cb590d1cb01e70c6fac447fa17b)
+ set(tool_subdirectory "jom-${program_version_string}")
+ set(paths_to_search "${DOWNLOADS}/tools/jom/${tool_subdirectory}")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake
new file mode 100644
index 0000000..0774cd9
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake
@@ -0,0 +1,18 @@
+set(program_name meson)
+set(search_names meson meson.py)
+set(interpreter PYTHON3)
+set(apt_package_name "meson")
+set(brew_package_name "meson")
+set(version_command --version)
+set(extra_search_args EXACT_VERSION_MATCH)
+if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/share/meson/version.txt")
+ file(READ "${CURRENT_HOST_INSTALLED_DIR}/share/meson/version.txt" program_version)
+ set(paths_to_search "${DOWNLOADS}/tools/meson-${program_version};${CURRENT_HOST_INSTALLED_DIR}/tools/meson")
+else() # Old behavior
+ set(program_version 0.58.1)
+ set(ref aeda7f249c4a5dbbecc52e44f382246a2377b5b0)
+ set(paths_to_search "${DOWNLOADS}/tools/meson/meson-${ref}")
+ set(download_urls "https://github.com/mesonbuild/meson/archive/${ref}.tar.gz")
+ set(download_filename "meson-${ref}.tar.gz")
+ set(download_sha512 18a012a45274dbb4582e99fd69d920f38831e788d9860f9553c64847bedb1c2010ae0b5c0ef4a4350c03f5e0f95aaa0395378e1208109b59640c1a70b1e202d2)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake
new file mode 100644
index 0000000..fea9ed4
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake
@@ -0,0 +1,13 @@
+set(program_name nasm)
+set(program_version 2.16.03)
+set(brew_package_name "nasm")
+set(apt_package_name "nasm")
+if(CMAKE_HOST_WIN32)
+ set(download_urls
+ "https://www.nasm.us/pub/nasm/releasebuilds/${program_version}/win64/nasm-${program_version}-win64.zip"
+ "https://vcpkg.github.io/assets/nasm/nasm-${program_version}-win64.zip"
+ )
+ set(download_filename "nasm-${program_version}-win64.zip")
+ set(download_sha512 22869ceb70ea0e6597fe06abe205b5d5dd66b41fe54dda73d338c488ba6ef13a39158f25b357616bf578752bb112869ef26ad897eb29352e85cf1ecc61a7c07a)
+ set(paths_to_search "${DOWNLOADS}/tools/nasm/nasm-${program_version}")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake
new file mode 100644
index 0000000..de20a43
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake
@@ -0,0 +1,52 @@
+set(program_name ninja)
+set(program_version 1.13.1)
+set(version_command --version)
+if(CMAKE_HOST_WIN32)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(build_arch $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(build_arch $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
+ if(build_arch MATCHES "^(ARM|arm)64$")
+ set(download_filename "ninja-winarm64-${program_version}.zip")
+ set(tool_subdirectory "${program_version}-windows-arm64")
+ set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-winarm64.zip")
+ set(download_sha512 6a3873522b3397a4d68c6a6c3e389085b81ba5ff20d4f5c289b3974c8bf7169de9cf2c8d9482c2b06846783492620008f486db44c2c651f007b3c335022a472d)
+ else()
+ set(download_filename "ninja-win-${program_version}.zip")
+ set(tool_subdirectory "${program_version}-windows")
+ set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-win.zip")
+ set(download_sha512 44955ef9e0053036dc316de3693523ce280338c816b445c27fcbe7dd219543b815812662c9082c409b17d823284506faa5b5c3c5f6d3721242dfc73e56d4ec34)
+ endif()
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ set(download_filename "ninja-mac-${program_version}.zip")
+ set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-mac.zip")
+ set(tool_subdirectory "${program_version}-osx")
+ set(paths_to_search "${DOWNLOADS}/tools/ninja-${program_version}-osx")
+ set(download_sha512 72ce74b57d21bcd50c1d457a304a3f4f88d960631a945f754180153a7e747950bc2e34195d0490d2c298bba2c02f96d5a5925b4096ddb7c86b67d35f7579641f)
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(paths_to_search "${DOWNLOADS}/tools/${tool_subdirectory}-freebsd")
+ set(version_command "")
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")
+ set(paths_to_search "${DOWNLOADS}/tools/${tool_subdirectory}-openbsd")
+ set(version_command "")
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(HOST_ARCH MATCHES "x86_64|amd64|AMD64")
+ set(download_filename "ninja-linux-${program_version}.zip")
+ set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-linux.zip")
+ set(tool_subdirectory "${program_version}-linux")
+ set(paths_to_search "${DOWNLOADS}/tools/ninja-${program_version}-linux")
+ set(download_sha512 ca4e424c46c12f4e120ab2030edcff8e34cf5db9d05b4364f2d4be10f46e1a29eef64f7b4bf65fb33cd629b3bc3bcb9292341f92953968ef226f44b52959d916)
+ elseif(HOST_ARCH MATCHES "arm64|aarch64|ARM64|AARCH64")
+ set(download_filename "ninja-linux-aarch64-${program_version}.zip")
+ set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-linux-aarch64.zip")
+ set(tool_subdirectory "${program_version}-linux-aarch64")
+ set(paths_to_search "${DOWNLOADS}/tools/ninja-${program_version}-linux-aarch64")
+ set(download_sha512 7cd841409fd2a4f35566ab2f0add75d89d94cfaa5952bc550cf263878469ab8109e36553b66e6422018012a4e9af4c7eaf79c84af1733d061231ce3511e3c98e)
+ else()
+ set(version_command "") # somewhat hacky way to skip version check and use system binary
+ endif()
+else()
+ set(version_command "")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake
new file mode 100644
index 0000000..196b5dd
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake
@@ -0,0 +1,11 @@
+set(program_name nuget)
+set(brew_package_name "nuget")
+if(CMAKE_HOST_WIN32)
+ set(download_urls "https://dist.nuget.org/win-x86-commandline/v6.11.1/nuget.exe")
+ set(download_filename "nuget.6.11.1.exe")
+ set(download_sha512 8E139D1C4A97F35625E261DF07AC5B3ECB6B931907D303E3B0FCCA26EC537FF667FF49CA15CB57909B30A262EA39EF678C4CBF33C99658162E58A6648D336D52)
+ set(tool_subdirectory "6.11.1")
+ set(paths_to_search "${DOWNLOADS}/tools/nuget-${tool_subdirectory}-windows")
+ set(raw_executable ON)
+ set(rename_binary_to "nuget.exe")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake
new file mode 100644
index 0000000..146e3f8
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake
@@ -0,0 +1,44 @@
+set(program_name patchelf)
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
+ set(program_version 0.15.5)
+ vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE)
+ if(HOST_ARCH STREQUAL "x86_64")
+ set(patchelf_platform "x86_64")
+ set(download_sha512 "1a638467dc71119d88657e83825bf9c4e65dbb2d3bbbd0267963a507e29429569dc7777490724928c86efc50af82d91b0163b29a09f8f99e62ebf6d9bb1567d2")
+ elseif(HOST_ARCH MATCHES "i[3-6]86")
+ set(patchelf_platform "i686")
+ set(download_sha512 "e27b68e657e440bb262fc8529a615cd71382573d3c8ae4e49ea40accd34338b5fcd05c5b50491329c9b3a134eb8d489a3352399bab8c6d1f0937303d0b6b5a14")
+ elseif(HOST_ARCH STREQUAL "aarch64")
+ set(patchelf_platform "aarch64")
+ set(download_sha512 "f0cc19d7dbf1eeb77f01ad6d9e6e01ebb356adc32b31eeb577de787d93d7292feea98f9027363ab79c08cf645d3c751df31b1e500151fca3597a7fae5b16542b")
+ elseif(HOST_ARCH STREQUAL "armv7l")
+ set(patchelf_platform "armv7l")
+ set(download_sha512 "e9b087d3198837c19ae0d8a30e9b8eb445282107bc6c1a148627a70d7d7dc0843bd570c8865407397e2157b59aa539ab1331862b59325970f94905ad09f1cc57")
+ elseif(HOST_ARCH STREQUAL "riscv64")
+ set(patchelf_platform "riscv64")
+ set(download_sha512 "a88e1a6ddaa6882d1af3582f031e97347098d85fa7baad00a457a9383f79f7f630dd47abc8d34fb6f1ca271ba63c635dbea3931053d0185c77a29750408c24ea")
+ elseif(HOST_ARCH STREQUAL "ppc64le")
+ set(patchelf_platform "ppc64le")
+ set(download_sha512 "fb36a5f032c2fbe377049a860760f8953279c1a0ae080c54f8040cd15abf0a9932668fe10214a16574cec51d328927a36319751c1d4ed6675ed57a2f3615ec69")
+ elseif(HOST_ARCH STREQUAL "s390x")
+ set(patchelf_platform "s390x")
+ set(download_sha512 "e102160c9ee39a52fdc5817548f860884982e7a9bc06eaf13fcc9d9697a46e0929730b398817a00b88e705977d58619bb85e8dc32af8a0017c363ca2ca76a74c")
+ else()
+ return()
+ endif()
+ set(download_filename "${program_name}-${program_version}-${patchelf_platform}.tar.gz")
+ set(download_urls "https://github.com/NixOS/patchelf/releases/download/${program_version}/${download_filename}")
+ set(tool_subdirectory "${program_version}-${patchelf_platform}-linux")
+ set(paths_to_search "${DOWNLOADS}/tools/patchelf/${program_version}-${patchelf_platform}-linux/bin")
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(patchelf_host "win32")
+ set(program_version 0.18.0)
+ set(download_sha512
+"19d24f64bea6d6236292455a09695d289ddca71433a0ccaf372f57da80a4cde5db1c375ac8e29a41ac1f0676b7d3b56ce5b2baf39e58369c4f741b612db51044")
+ set(download_filename "${program_name}-${patchelf_host}-${program_version}.exe")
+ set(download_urls "https://github.com/NixOS/patchelf/releases/download/${program_version}/${download_filename}")
+ set(tool_subdirectory "${program_version}-${patchelf_host}")
+ set(paths_to_search "${DOWNLOADS}/tools/patchelf/${program_version}-${patchelf_host}/")
+ set(raw_executable ON)
+ set(rename_binary_to "patchelf.exe")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake
new file mode 100644
index 0000000..c171c21
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake
@@ -0,0 +1,13 @@
+set(program_name perl)
+set(program_version 5.42.0.1)
+set(brew_package_name "perl")
+set(apt_package_name "perl")
+if(CMAKE_HOST_WIN32)
+ set(download_urls
+ "https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54201_64bit/strawberry-perl-5.42.0.1-64bit-portable.zip"
+ )
+ set(download_filename "strawberry-perl-5.42.0.1-64bit-portable.zip")
+ set(download_sha512 e78fc86eb76dc34f2fd8a911537b20378e1ce486a3ea1a167001fd040c2468e8db5e711a895314e7ead3511f3caafccc1ffbfd0bd4096c0360d712a9668fe69b)
+ set(tool_subdirectory ${program_version})
+ set(paths_to_search ${DOWNLOADS}/tools/perl/${tool_subdirectory}/perl/bin)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake
new file mode 100644
index 0000000..5dc58dc
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake
@@ -0,0 +1,66 @@
+macro(z_vcpkg_find_acquire_pkgconfig_msys_declare_packages)
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/clangarm64/mingw-w64-clang-aarch64-pkgconf-1~2.4.3-1-any.pkg.tar.zst"
+ SHA512 c2bb144b71bab8d1461c1c56b3b8d0cfe47ff7afd6757cfb5b7d0e887bfa7a9d0e95789da13169f5981a8d555aa4b0a7e2acc841c5a6b06763073f74966f4239
+ PROVIDES mingw-w64-clang-aarch64-pkg-config
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-pkgconf-1~2.4.3-1-any.pkg.tar.zst"
+ SHA512 bd7986cdf104a6e21abc27f270716cf7f93152fdb92733b23dfa0e44465b3e739e9c90a4934419198f856887f1cfe20ba1ef52478b84ea9e795f44e699475e11
+ PROVIDES mingw-w64-x86_64-pkg-config
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-pkgconf-1~2.4.3-1-any.pkg.tar.zst"
+ SHA512 22b3f5b2b25628713cae722e351f105f7670bc8364e41fd3bf68d8c86866c273215f2c31d467657ccf0e106eedd7c207ff474173f0eaeba5f2d7130ce6a0d3db
+ PROVIDES mingw-w64-i686-pkg-config
+ )
+endmacro()
+
+set(program_name pkg-config)
+if(DEFINED "ENV{PKG_CONFIG}")
+ debug_message(STATUS "PKG_CONFIG found in ENV! Using $ENV{PKG_CONFIG}")
+ set(PKGCONFIG "$ENV{PKG_CONFIG}" CACHE INTERNAL "")
+ set(PKGCONFIG "${PKGCONFIG}" PARENT_SCOPE)
+ return()
+elseif(CMAKE_HOST_WIN32)
+ if(NOT EXISTS "${PKGCONFIG}")
+ set(program_version 2.1.0)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(host_arch "$ENV{PROCESSOR_ARCHITEW6432}")
+ else()
+ set(host_arch "$ENV{PROCESSOR_ARCHITECTURE}")
+ endif()
+
+ if("${host_arch}" STREQUAL "ARM64")
+ vcpkg_acquire_msys(PKGCONFIG_ROOT
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages"
+ PACKAGES mingw-w64-clang-aarch64-pkgconf
+ )
+ set("${program}" "${PKGCONFIG_ROOT}/clangarm64/bin/pkg-config.exe" CACHE INTERNAL "")
+ elseif("${host_arch}" MATCHES "64")
+ vcpkg_acquire_msys(PKGCONFIG_ROOT
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages"
+ PACKAGES mingw-w64-x86_64-pkgconf
+ )
+ set("${program}" "${PKGCONFIG_ROOT}/mingw64/bin/pkg-config.exe" CACHE INTERNAL "")
+ else()
+ vcpkg_acquire_msys(PKGCONFIG_ROOT
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages"
+ PACKAGES mingw-w64-i686-pkgconf
+ )
+ set("${program}" "${PKGCONFIG_ROOT}/mingw32/bin/pkg-config.exe" CACHE INTERNAL "")
+ endif()
+ endif()
+ set("${program}" "${${program}}" PARENT_SCOPE)
+ return()
+else()
+ set(brew_package_name pkg-config)
+ set(apt_package_name pkg-config)
+ set(paths_to_search "/bin" "/usr/bin" "/usr/local/bin")
+ if(VCPKG_HOST_IS_OSX)
+ vcpkg_list(PREPEND paths_to_search "/opt/homebrew/bin")
+ endif()
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake
new file mode 100644
index 0000000..7e7905b
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake
@@ -0,0 +1,27 @@
+if(CMAKE_HOST_WIN32)
+ set(program_name python)
+ set(program_version 2.7.18)
+ if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/share/vcpkg-tool-python2/details.cmake")
+ include("${CURRENT_HOST_INSTALLED_DIR}/share/vcpkg-tool-python2/details.cmake")
+ else() # Old behavior
+ if (VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
+ set(tool_subdirectory "python-${program_version}-x86")
+ set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}.msi")
+ set(download_filename "python-${program_version}.msi")
+ set(download_sha512 2c112733c777ddbf189b0a54047a9d5851ebce0564cc38b9687d79ce6c7a09006109dbad8627fb1a60c3ad55e261db850d9dfa454af0533b460b2afc316fe115)
+ else()
+ set(tool_subdirectory "python-${program_version}-x64")
+ set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}.amd64.msi")
+ set(download_filename "python-${program_version}.amd64.msi")
+ set(download_sha512 6a81a413b80fd39893e7444fd47efa455d240cbb77a456c9d12f7cf64962b38c08cfa244cd9c50a65947c40f936c6c8c5782f7236d7b92445ab3dd01e82af23e)
+ endif()
+ set(paths_to_search "${DOWNLOADS}/tools/python/${tool_subdirectory}")
+ endif()
+elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ # macOS includes Python 2.7 built-in as `python`
+ set(program_name python)
+ set(brew_package_name "python2")
+else()
+ set(program_name python2)
+ set(apt_package_name "python")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake
new file mode 100644
index 0000000..9006e9b
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake
@@ -0,0 +1,41 @@
+if(CMAKE_HOST_WIN32)
+ set(program_name python)
+ set(program_version 3.12.7)
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(build_arch $ENV{PROCESSOR_ARCHITEW6432})
+ else()
+ set(build_arch $ENV{PROCESSOR_ARCHITECTURE})
+ endif()
+ if(build_arch MATCHES "^(ARM|arm)64$")
+ set(tool_subdirectory "python-${program_version}-arm64")
+ # https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-arm64.zip
+ set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-arm64.zip")
+ set(download_filename "python-${program_version}-embed-arm64.zip")
+ set(download_sha512 D1D1183682D20AC057C45BF2AD264B6568CDEB54A1502823C76A2448386CAEF79A3AB9EA8FF57A5C023D432590FCCB5E3E9980F8760CD9BAAC5A2A82BA240D73)
+ elseif(build_arch MATCHES "(amd|AMD)64")
+ set(tool_subdirectory "python-${program_version}-x64")
+ # https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-amd64.zip
+ set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-amd64.zip")
+ set(download_filename "python-${program_version}-embed-amd64.zip")
+ set(download_sha512 2F67A8487A9EDECE26B73AAB27E75249E538938AD976D371A9411B54DBAE20AFEAC82B406AD4EEEE38B1CF6F407E7620679D30C0FFF82EC8E8AE62268C322D59)
+ else()
+ set(tool_subdirectory "python-${program_version}-x86")
+ # https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-win32.zip
+ set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-win32.zip")
+ set(download_filename "python-${program_version}-embed-win32.zip")
+ set(download_sha512 15542080E0CC25C574391218107FE843006E8C5A7161D1CD48CF14A3C47155C0244587273D9C747F35B15EA17676869ECCE079214824214C1A62ABFC86AD9F9B)
+ endif()
+
+ # Remove this after the next update
+ string(APPEND tool_subdirectory "-1")
+
+ set(paths_to_search "${DOWNLOADS}/tools/python/${tool_subdirectory}")
+
+ vcpkg_list(SET post_install_command
+ "${CMAKE_COMMAND}" "-DPYTHON_DIR=${paths_to_search}" "-DPYTHON_VERSION=${program_version}" -P "${CMAKE_CURRENT_LIST_DIR}/z_vcpkg_make_python_less_embedded.cmake"
+ )
+else()
+ set(program_name python3)
+ set(brew_package_name "python")
+ set(apt_package_name "python3")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake
new file mode 100644
index 0000000..c955e6a
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake
@@ -0,0 +1,8 @@
+set(program_name "ruby")
+set(program_version 2.7.4-1)
+if(CMAKE_HOST_WIN32)
+ set(download_urls "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-${program_version}/rubyinstaller-${program_version}-x86.7z")
+ set(download_filename "rubyinstaller-${program_version}-x86.7z")
+ set(download_sha512 4bf459c987b407bdda328c52d95060bf6ad48fc3e5ed5f64d4b205c5b4153c7a00cb6f9da6c0bcd5f2e001e9dc3dda0b72269ec4afdeffd658b93c085cd1d859)
+ set(paths_to_search "${DOWNLOADS}/tools/ruby/rubyinstaller-${program_version}-x86/bin")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake
new file mode 100644
index 0000000..ddcfcd5
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake
@@ -0,0 +1,9 @@
+set(program_name scons)
+set(program_version 4.8.1)
+set(interpreter PYTHON3)
+set(search_names "scons.py")
+
+set(download_urls "https://sourceforge.net/projects/scons/files/scons-local-${program_version}.zip/download")
+set(download_filename "scons-local-${program_version}.zip")
+set(download_sha512 7ce428ccb3279359f916417f0eaca93d36a101b0760156ce53e3aa2c9c3f0a14869aadf49f21a9eb27ba366a27e3f5deab61669e5bf0b43f1547668da940c3b7)
+set(tool_subdirectory "${program_version}")
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake
new file mode 100644
index 0000000..90bcc0c
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake
@@ -0,0 +1,14 @@
+set(program_version 4.3.1)
+set(program_name swig)
+if(CMAKE_HOST_WIN32)
+ set(download_filename "swigwin-${program_version}.zip")
+ set(download_sha512 "ca7210684b6ccb1b9bb186797bf1b67bbf3e76f6d0e702fee78edf7456992a4298eb5fa0b5f602a4240161fedd422920fe56e12cd60b8c8fd71c2f784f3d0f43")
+ vcpkg_list(SET sourceforge_args
+ REPO swig/swigwin
+ REF "swigwin-${program_version}"
+ )
+ set(paths_to_search "${DOWNLOADS}/tools/swig/swigwin-${program_version}")
+else()
+ set(apt_package_name "swig")
+ set(brew_package_name "swig")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake
new file mode 100644
index 0000000..ae8c877
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake
@@ -0,0 +1,12 @@
+set(program_name yasm)
+set(program_version 1.3.0.6.g1962)
+set(brew_package_name "yasm")
+set(apt_package_name "yasm")
+if(CMAKE_HOST_WIN32)
+ set(download_urls "https://www.tortall.net/projects/yasm/snapshots/v${program_version}/yasm-${program_version}.exe")
+ set(download_filename "yasm-${program_version}.exe")
+ set(download_sha512 c1945669d983b632a10c5ff31e86d6ecbff143c3d8b2c433c0d3d18f84356d2b351f71ac05fd44e5403651b00c31db0d14615d7f9a6ecce5750438d37105c55b)
+ set(tool_subdirectory 1.3.0.6)
+ set(raw_executable ON)
+ set(rename_binary_to "yasm.exe")
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake
new file mode 100644
index 0000000..4dc2c0e
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake
@@ -0,0 +1,236 @@
+function(z_vcpkg_find_acquire_program_version_check out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ "EXACT_VERSION_MATCH"
+ "MIN_VERSION;PROGRAM_NAME"
+ "COMMAND"
+ )
+ vcpkg_execute_in_download_mode(
+ COMMAND ${arg_COMMAND}
+ WORKING_DIRECTORY "${VCPKG_ROOT_DIR}"
+ OUTPUT_VARIABLE program_version_output
+ )
+ string(STRIP "${program_version_output}" program_version_output)
+ #TODO: REGEX MATCH case for more complex cases!
+ set(version_compare VERSION_GREATER_EQUAL)
+ set(version_compare_msg "at least")
+ if(arg_EXACT_VERSION_MATCH)
+ set(version_compare VERSION_EQUAL)
+ set(version_compare_msg "exact")
+ endif()
+ if(NOT "${program_version_output}" ${version_compare} "${arg_MIN_VERSION}")
+ message(STATUS "Found ${arg_PROGRAM_NAME}('${program_version_output}') but ${version_compare_msg} version ${arg_MIN_VERSION} is required! Trying to use internal version if possible!")
+ set("${out_var}" OFF PARENT_SCOPE)
+ else()
+ message(STATUS "Found external ${arg_PROGRAM_NAME}('${program_version_output}').")
+ set("${out_var}" ON PARENT_SCOPE)
+ endif()
+endfunction()
+
+function(z_vcpkg_find_acquire_program_find_external program)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ "EXACT_VERSION_MATCH"
+ "INTERPRETER;MIN_VERSION;PROGRAM_NAME"
+ "NAMES;VERSION_COMMAND"
+ )
+ if(arg_EXACT_VERSION_MATCH)
+ set(arg_EXACT_VERSION_MATCH EXACT_VERSION_MATCH)
+ endif()
+
+ if("${arg_INTERPRETER}" STREQUAL "")
+ find_program("${program}" NAMES ${arg_NAMES})
+ else()
+ find_file(SCRIPT_${arg_PROGRAM_NAME} NAMES ${arg_NAMES})
+ if(SCRIPT_${arg_PROGRAM_NAME})
+ vcpkg_list(SET program_tmp ${${interpreter}} ${SCRIPT_${arg_PROGRAM_NAME}})
+ set("${program}" "${program_tmp}" CACHE INTERNAL "")
+ else()
+ set("${program}" "" CACHE INTERNAL "")
+ endif()
+ unset(SCRIPT_${arg_PROGRAM_NAME} CACHE)
+ endif()
+
+ if("${version_command}" STREQUAL "")
+ set(version_is_good ON) # can't check for the version being good, so assume it is
+ elseif(${program}) # only do a version check if ${program} has a value
+ z_vcpkg_find_acquire_program_version_check(version_is_good
+ ${arg_EXACT_VERSION_MATCH}
+ COMMAND ${${program}} ${arg_VERSION_COMMAND}
+ MIN_VERSION "${arg_MIN_VERSION}"
+ PROGRAM_NAME "${arg_PROGRAM_NAME}"
+ )
+ endif()
+
+ if(NOT version_is_good)
+ unset("${program}" PARENT_SCOPE)
+ unset("${program}" CACHE)
+ endif()
+endfunction()
+
+function(z_vcpkg_find_acquire_program_find_internal program)
+ cmake_parse_arguments(PARSE_ARGV 1 arg
+ ""
+ "INTERPRETER"
+ "NAMES;PATHS"
+ )
+ if("${arg_INTERPRETER}" STREQUAL "")
+ find_program(${program}
+ NAMES ${arg_NAMES}
+ PATHS ${arg_PATHS}
+ NO_DEFAULT_PATH)
+ else()
+ vcpkg_find_acquire_program("${arg_INTERPRETER}")
+ find_file(SCRIPT_${program}
+ NAMES ${arg_NAMES}
+ PATHS ${arg_PATHS}
+ NO_DEFAULT_PATH)
+ if(SCRIPT_${program})
+ if(arg_INTERPRETER MATCHES "PYTHON")
+ set("${program}" ${${arg_INTERPRETER}} -I ${SCRIPT_${program}} CACHE INTERNAL "")
+ else()
+ set("${program}" ${${arg_INTERPRETER}} ${SCRIPT_${program}} CACHE INTERNAL "")
+ endif()
+ endif()
+ unset(SCRIPT_${program} CACHE)
+ endif()
+endfunction()
+
+function(vcpkg_find_acquire_program program)
+ if(${program})
+ return()
+ endif()
+
+ set(raw_executable "OFF")
+ set(program_name "")
+ set(program_version "")
+ set(search_names "")
+ set(download_urls "")
+ set(download_filename "")
+ set(download_sha512 "")
+ set(rename_binary_to "")
+ set(tool_subdirectory "")
+ set(interpreter "")
+ set(post_install_command "")
+ set(paths_to_search "")
+ set(version_command "")
+ vcpkg_list(SET sourceforge_args)
+ set(brew_package_name "")
+ set(apt_package_name "")
+
+ set(program_information "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/vcpkg_find_acquire_program(${program}).cmake")
+ if(program MATCHES "^[A-Z0-9]+\$" AND EXISTS "${program_information}")
+ include("${program_information}")
+ else()
+ message(FATAL_ERROR "unknown tool ${program} -- unable to acquire.")
+ endif()
+
+ if("${program_name}" STREQUAL "")
+ message(FATAL_ERROR "Internal error: failed to initialize program_name for program ${program}")
+ endif()
+
+ set(full_subdirectory "${DOWNLOADS}/tools/${program_name}/${tool_subdirectory}")
+ if(NOT "${tool_subdirectory}" STREQUAL "")
+ list(APPEND paths_to_search ${full_subdirectory})
+ endif()
+ if("${full_subdirectory}" MATCHES [[^(.*)[/\\]+$]])
+ # remove trailing slashes, which may turn into a trailing `\` which CMake _does not like_
+ set(full_subdirectory "${CMAKE_MATCH_1}")
+ endif()
+
+ if("${search_names}" STREQUAL "")
+ set(search_names "${program_name}")
+ endif()
+
+ z_vcpkg_find_acquire_program_find_internal("${program}"
+ INTERPRETER "${interpreter}"
+ PATHS ${paths_to_search}
+ NAMES ${search_names}
+ )
+ if(NOT ${program})
+ z_vcpkg_find_acquire_program_find_external("${program}"
+ ${extra_search_args}
+ PROGRAM_NAME "${program_name}"
+ MIN_VERSION "${program_version}"
+ INTERPRETER "${interpreter}"
+ NAMES ${search_names}
+ VERSION_COMMAND ${version_command}
+ )
+ endif()
+ if(NOT ${program})
+ if("${download_urls}" STREQUAL "" AND "${sourceforge_args}" STREQUAL "")
+ set(example ".")
+ if(NOT "${brew_package_name}" STREQUAL "" AND VCPKG_HOST_IS_OSX)
+ set(example ":\n brew install ${brew_package_name}")
+ elseif(NOT "${apt_package_name}" STREQUAL "" AND VCPKG_HOST_IS_LINUX)
+ set(example ":\n sudo apt-get install ${apt_package_name}")
+ endif()
+ message(FATAL_ERROR "Could not find ${program_name}. Please install it via your package manager${example}")
+ endif()
+
+ if("${sourceforge_args}" STREQUAL "")
+ vcpkg_download_distfile(archive_path
+ URLS ${download_urls}
+ SHA512 "${download_sha512}"
+ FILENAME "${download_filename}"
+ )
+ else()
+ vcpkg_download_sourceforge(archive_path
+ ${sourceforge_args}
+ SHA512 "${download_sha512}"
+ FILENAME "${download_filename}"
+ )
+ endif()
+ if(raw_executable)
+ file(MAKE_DIRECTORY "${full_subdirectory}")
+ if("${rename_binary_to}" STREQUAL "")
+ file(COPY "${archive_path}"
+ DESTINATION "${full_subdirectory}"
+ FILE_PERMISSIONS
+ OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE
+ WORLD_READ WORLD_EXECUTE
+ )
+ else()
+ file(INSTALL "${archive_path}"
+ DESTINATION "${full_subdirectory}"
+ RENAME "${rename_binary_to}"
+ FILE_PERMISSIONS
+ OWNER_READ OWNER_WRITE OWNER_EXECUTE
+ GROUP_READ GROUP_EXECUTE
+ WORLD_READ WORLD_EXECUTE
+ )
+ endif()
+ elseif(tool_subdirectory STREQUAL "")
+ # The effective tool subdir is owned by the extracted paths of the archive.
+ # *** This behavior is provided for convenience and short paths. ***
+ # There must be no overlap between different providers of subdirs.
+ # Otherwise tool_subdirectory must be used in order to separate extracted trees.
+ file(REMOVE_RECURSE "${full_subdirectory}.temp")
+ vcpkg_extract_archive(ARCHIVE "${archive_path}" DESTINATION "${full_subdirectory}.temp")
+ file(COPY "${full_subdirectory}.temp/" DESTINATION "${full_subdirectory}")
+ file(REMOVE_RECURSE "${full_subdirectory}.temp")
+ else()
+ vcpkg_extract_archive(ARCHIVE "${archive_path}" DESTINATION "${full_subdirectory}")
+ endif()
+
+ if(NOT "${post_install_command}" STREQUAL "")
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND ${post_install_command}
+ WORKING_DIRECTORY "${full_subdirectory}"
+ LOGNAME "${program}-tool-post-install"
+ )
+ endif()
+ unset("${program}")
+ unset("${program}" CACHE)
+ z_vcpkg_find_acquire_program_find_internal("${program}"
+ INTERPRETER "${interpreter}"
+ PATHS ${paths_to_search}
+ NAMES ${search_names}
+ )
+ if(NOT ${program})
+ message(FATAL_ERROR "Unable to find ${program}")
+ endif()
+ endif()
+
+ set("${program}" "${${program}}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_fortran.cmake b/vcpkg/scripts/cmake/vcpkg_find_fortran.cmake
new file mode 100644
index 0000000..730aed8
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_find_fortran.cmake
@@ -0,0 +1,212 @@
+list(APPEND Z_VCPKG_ACQUIRE_MSYS_DECLARE_PACKAGE_COMMANDS "z_vcpkg_find_fortran_declare_msys_packages")
+
+function(vcpkg_find_fortran out_var)
+ if("${ARGC}" GREATER "1")
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra args: ${ARGN}")
+ endif()
+
+ vcpkg_list(SET additional_cmake_args)
+
+ set(CMAKE_BINARY_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
+ set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_BINARY_DIR}")
+ set(CMAKE_PLATFORM_INFO_DIR "${CMAKE_BINARY_DIR}/Platform")
+ macro(z_vcpkg_warn_ambiguous_system_variables)
+ # CMakeDetermineFortranCompiler is for project mode.
+ endmacro()
+ include(CMakeDetermineFortranCompiler)
+
+ if(NOT CMAKE_Fortran_COMPILER AND "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "")
+ # If a user uses their own VCPKG_CHAINLOAD_TOOLCHAIN_FILE, they _must_ figure out fortran on their own.
+ if(CMAKE_HOST_WIN32)
+ message(STATUS "No Fortran compiler found on the PATH. Using MinGW gfortran!")
+ # If no Fortran compiler is on the path we switch to use gfortan from MinGW within vcpkg
+ if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x86")
+ set(mingw_path mingw32)
+ set(machine_flag -m32)
+ vcpkg_acquire_msys(msys_root
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
+ PACKAGES mingw-w64-i686-gcc-fortran
+ )
+ elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64")
+ set(mingw_path mingw64)
+ set(machine_flag -m64)
+ vcpkg_acquire_msys(msys_root
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
+ PACKAGES mingw-w64-x86_64-gcc-fortran
+ )
+ else()
+ message(FATAL_ERROR "Unknown architecture '${VCPKG_TARGET_ARCHITECTURE}' for MinGW Fortran build!")
+ endif()
+
+ set(mingw_bin "${msys_root}/${mingw_path}/bin")
+ vcpkg_add_to_path(PREPEND "${mingw_bin}")
+ vcpkg_list(APPEND additional_cmake_args
+ -DCMAKE_GNUtoMS=ON
+ "-DCMAKE_Fortran_COMPILER=${mingw_bin}/gfortran.exe"
+ "-DCMAKE_C_COMPILER=${mingw_bin}/gcc.exe"
+ "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${machine_flag} ${VCPKG_Fortran_FLAGS}")
+
+ # This is for private use by vcpkg-gfortran
+ set(vcpkg_find_fortran_MSYS_ROOT "${msys_root}" PARENT_SCOPE)
+ set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE)
+ set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran
+ if(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(VCPKG_CRT_LINKAGE dynamic PARENT_SCOPE)
+ message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage")
+ endif()
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE)
+ message(STATUS "VCPKG_LIBRARY_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic library linkage")
+ endif()
+ else()
+ message(FATAL_ERROR "Unable to find a Fortran compiler using 'CMakeDetermineFortranCompiler'. Please install one (e.g. gfortran) and make it available on the PATH!")
+ endif()
+ endif()
+ set("${out_var}" "${additional_cmake_args}" PARENT_SCOPE)
+endfunction()
+
+macro(z_vcpkg_find_fortran_msys_declare_packages)
+ # primary package for x86
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-fortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 dd8633b15a2aeb9510410612b8e43e3ecdd61d89ada76d5aa1fa2b7f3273ac666027c56c5cbfcfdbe21a0309b4d3002f730acdfa3c693847db3cf92f914fb619
+ PROVIDES mingw-w64-i686-fc
+ DEPS mingw-w64-i686-gcc mingw-w64-i686-gcc-libgfortran mingw-w64-i686-gcc-libs mingw-w64-i686-gmp mingw-w64-i686-isl mingw-w64-i686-libwinpthread mingw-w64-i686-mpc mingw-w64-i686-mpfr mingw-w64-i686-zlib mingw-w64-i686-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-binutils-2.44-3-any.pkg.tar.zst"
+ SHA512 7ce793ec986313ffce56b59457365a0067737f7497520c8bbdee9e6585d16b1def4b8a73fbb302ce581e5cb3eaa959bfac3819c08b2c2e28f685bbcc0988088a
+ DEPS mingw-w64-i686-gettext-runtime mingw-w64-i686-libwinpthread mingw-w64-i686-zlib mingw-w64-i686-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-crt-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 f9a0250c0601014893152a68d3d430c03b01d9232510181b41b41a9a9bc11bf1e951ce853f070e96aedf40487d2a3b93018078dc770b8f3fcbf07dc6e1080835
+ PROVIDES mingw-w64-i686-crt
+ DEPS mingw-w64-i686-headers-git
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-15.1.0-5-any.pkg.tar.zst"
+ SHA512 754c5372dc9f63fd9783bc2e8f925c01b36805857efa73a619ef5163e0a740ea7b4c95ce1b44d5803f332da939bb3a09c14dc5379bb2d6b0b64deb31caeed3b3
+ PROVIDES mingw-w64-i686-gcc-base mingw-w64-i686-cc
+ DEPS mingw-w64-i686-binutils mingw-w64-i686-crt mingw-w64-i686-gcc-libs mingw-w64-i686-gmp mingw-w64-i686-headers mingw-w64-i686-isl mingw-w64-i686-libiconv mingw-w64-i686-mpc mingw-w64-i686-mpfr mingw-w64-i686-windows-default-manifest mingw-w64-i686-winpthreads mingw-w64-i686-zlib mingw-w64-i686-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-libgfortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 320d956a85ca95407c26d206431e79d0f0c3aaf10f48870a72ec0ceebabbecb4f7d767c27b0d8284b024b1c116137c39751df64e20435d5f9cac61b34d8e5da0
+ PROVIDES mingw-w64-i686-fc-libs
+ DEPS mingw-w64-i686-gcc-libs mingw-w64-i686-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-libs-15.1.0-5-any.pkg.tar.zst"
+ SHA512 8f8f547ff5343cb5132e90cb8632b0ac2091459510abaec5e4a2a1a77e88d57e644587e2f8fc06eca9c43fec3e8b12c3e803273980bd311a3d4350d635bd6015
+ PROVIDES mingw-w64-i686-omp
+ DEPS mingw-w64-i686-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gettext-runtime-0.25-1-any.pkg.tar.zst"
+ SHA512 e487f6c994e9997bf5a17e7ddb6d601def1b25bd38fa113aed6fe4c66af3071f93d751d593fae87eabf1b31f0796991c8333a619573f3d027cabb6b12a0abdd7
+ DEPS mingw-w64-i686-gcc-libs mingw-w64-i686-libiconv
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gmp-6.3.0-2-any.pkg.tar.zst"
+ SHA512 4a9e0ace05ea441fe6cd69b1b1af4c29e35727069ab1f22d0da7febc7aaba219502b5b4dea8b1aa070cb2c8b731da112429c3339fd03fe77828d9fa262b4a818
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-headers-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 858057afb80945d61dd1aeb6de99d4c14b4eab37748f583f8f41be481afedf8ef46904b48f9f364624ce2b2c267ecfbb393e35fdfa0be409d3acd6c7ec3088e0
+ PROVIDES mingw-w64-i686-headers
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-isl-0.27-1-any.pkg.tar.zst"
+ SHA512 070e87552aa0ce77bb9db3b6104c7a3b0d9b5f3515dffc5d03d586693661a9c4681d54ffa6209203bdd568cf111ecae2b26df7472cf40144d6537d655d01b178
+ DEPS mingw-w64-i686-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-libiconv-1.18-1-any.pkg.tar.zst"
+ SHA512 c45f62552dd57e53b80b2aa541322586255c11846be92ee8554f0c336b9d3f93382cefab613ff3ba61b4cff30a3beb91ccb1f472d89470c4399de81515c52c95
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-libwinpthread-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 ab5b2ecebf7809a9cc252ccc9e15d40bff28a7d63a332fbff8e230748fb4535491697495930f1b7d289f6d9e4fc6d2cd73baba284aaee19d93d2cbeeb5668ff8
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-mpc-1.3.1-2-any.pkg.tar.zst"
+ SHA512 936acdedea20b9892f90ebdb0b75250d1ed3d65487316ee986b8672683b01d4e1f2922387f18ea8d6befb71bf273995d4940ff55b645d07996c98bd50c9382ae
+ DEPS mingw-w64-i686-gmp mingw-w64-i686-mpfr
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-mpfr-4.2.2-1-any.pkg.tar.zst"
+ SHA512 002964eaa63ee3f602c580cedb995564ffd45f2468088af4b7f2096e0da96b2537a377054c60d9550689a66fbe58eb476db581db6935a44685b5c5c097915323
+ DEPS mingw-w64-i686-gcc-libs mingw-w64-i686-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-windows-default-manifest-6.4-4-any.pkg.tar.zst"
+ SHA512 103f8437e13fb2a839c5eb89f49f5888c71f7934771cf3b2dcca46d520277fe7f7d4841c9d415b454a6a581c6d1f806d6be7f614027df0484f2642ef2563e889
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-winpthreads-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 167b913ac66636e88624c7890fb7749423dce2708dec0e0b83a71baa445418d3439560b08a77af9992a313e7c00cf05a5776b3098c0bc1ea665f342fd3247491
+ DEPS mingw-w64-i686-crt-git mingw-w64-i686-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-zlib-1.3.1-1-any.pkg.tar.zst"
+ SHA512 881cf37f59bfbc3d8a6a6d16226360b63cf3d5abc82bb25fa1d9f871aa3e620fa22a8ae6b0cec619633d08550b72ad289f16b75d5819e3e117de0607125b0140
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-zstd-1.5.7-1-any.pkg.tar.zst"
+ SHA512 fa266dd3628322629412e64ff0f092f2a233ba05a65305cfffbdeeb82d954f681ed23e381cb3a5886034c9723bd40fd993303bdbe99f26fe179a69f3f7f8c4b5
+ DEPS mingw-w64-i686-gcc-libs
+ )
+
+ # primary package for x64
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-fortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 042fbdfae03fa05cb297687b8b85f4e78237e4d4f8106c0763254caa7e3f93b341f507415dc6395cd2432461cb48c94de8c0828248e84cf99b369a81fa879813
+ PROVIDES mingw-w64-x86_64-fc
+ DEPS mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-libgfortran mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gmp mingw-w64-x86_64-isl mingw-w64-x86_64-libwinpthread mingw-w64-x86_64-mpc mingw-w64-x86_64-mpfr mingw-w64-x86_64-zlib mingw-w64-x86_64-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-binutils-2.44-3-any.pkg.tar.zst"
+ SHA512 67b0367389f481fc8da4a4d16ffa886a28ef994cb1726c84b5e43a1cbc648474359ed9c159444d09121b23972ad88f30db8934484b6ff7cbb4a67d5351c6dd7c
+ DEPS mingw-w64-x86_64-gettext-runtime mingw-w64-x86_64-libwinpthread mingw-w64-x86_64-zlib mingw-w64-x86_64-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-crt-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 0568b22cb5686743a7b84f1655e65236c23d8911da9cb4ed4e984df737741fb4ec5430fe0f42bd7f5b8b021678828ad6fdf605885bac8318317a5cc2661706d6
+ PROVIDES mingw-w64-x86_64-crt
+ DEPS mingw-w64-x86_64-headers-git
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-15.1.0-5-any.pkg.tar.zst"
+ SHA512 283817fae25eeb1f2d97c4b07b2cad375617a8bf31a949369a6c9454ce345d864f5640db991ab04de8942ce2ef1ea08f6ee785e43f404807d3e04002736df636
+ PROVIDES mingw-w64-x86_64-gcc-base mingw-w64-x86_64-cc
+ DEPS mingw-w64-x86_64-binutils mingw-w64-x86_64-crt mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gmp mingw-w64-x86_64-headers mingw-w64-x86_64-isl mingw-w64-x86_64-libiconv mingw-w64-x86_64-mpc mingw-w64-x86_64-mpfr mingw-w64-x86_64-windows-default-manifest mingw-w64-x86_64-winpthreads mingw-w64-x86_64-zlib mingw-w64-x86_64-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-headers-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 0bb6b97449d423177cab7e2496850c6e00f858654fae8085eb2910f6fb67e403eff5a6cbd5cc45a28c22d9bf3bb27a138a55c43ecd52bfb020629bd98e81ed4c
+ PROVIDES mingw-w64-x86_64-headers
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-isl-0.27-1-any.pkg.tar.zst"
+ SHA512 879e3a6748f552b9c3574090b8d45fd83ff1cb843eae3924e6025464ecfc9d4883bd3d9e9dbcd54481820a6f5a01b33e3dc8e2c90bc812d8173412ee01a08110
+ DEPS mingw-w64-x86_64-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-windows-default-manifest-6.4-4-any.pkg.tar.zst"
+ SHA512 d7e1e4c79f6c7db3bd97305ff89e407a32d3ce9f2a18083b9674538d018651e889efb6fdef00cc79c78f8c07852eab63d7fc705e9567b1ad5684f0a704adeaf3
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-winpthreads-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 e20ba4171f2f18230dac3f8dbc058e912741c005a124dcb9192ef3e5a349b000d6251a2aba1b462d0f98e8366260ccb8407b2c4ed5a345d5761b20e985566323
+ DEPS mingw-w64-x86_64-crt-git mingw-w64-x86_64-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-zstd-1.5.7-1-any.pkg.tar.zst"
+ SHA512 35b8dfb55b22de813ca29cf2c38fe2912616c66c211706ea39551936c3d3b80b663a3d7e57698ca2300d026d9966fe6a36193a1e3503f3ca538f3e9e8ce75b55
+ DEPS mingw-w64-x86_64-gcc-libs
+ )
+endmacro() \ No newline at end of file
diff --git a/vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
new file mode 100644
index 0000000..3d8a8ba
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake
@@ -0,0 +1,186 @@
+function(vcpkg_fixup_cmake_targets)
+ if(Z_VCPKG_CMAKE_CONFIG_FIXUP_GUARD)
+ message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake-config; using both vcpkg-cmake-config and vcpkg_fixup_cmake_targets in the same port is unsupported.")
+ endif()
+
+ cmake_parse_arguments(PARSE_ARGV 0 arg "DO_NOT_DELETE_PARENT_CONFIG_PATH;NO_PREFIX_CORRECTION" "CONFIG_PATH;TARGET_PATH;TOOLS_PATH" "")
+
+ if(arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_fixup_cmake_targets was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT arg_TARGET_PATH)
+ set(arg_TARGET_PATH share/${PORT})
+ endif()
+
+ if(NOT arg_TOOLS_PATH)
+ set(arg_TOOLS_PATH tools/${PORT})
+ endif()
+
+ string(REPLACE "." "\\." EXECUTABLE_SUFFIX "${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
+
+ set(DEBUG_SHARE ${CURRENT_PACKAGES_DIR}/debug/${arg_TARGET_PATH})
+ set(RELEASE_SHARE ${CURRENT_PACKAGES_DIR}/${arg_TARGET_PATH})
+
+ if(arg_CONFIG_PATH AND NOT RELEASE_SHARE STREQUAL "${CURRENT_PACKAGES_DIR}/${arg_CONFIG_PATH}")
+ if(arg_CONFIG_PATH STREQUAL "share")
+ file(RENAME ${CURRENT_PACKAGES_DIR}/debug/share ${CURRENT_PACKAGES_DIR}/debug/share2)
+ file(RENAME ${CURRENT_PACKAGES_DIR}/share ${CURRENT_PACKAGES_DIR}/share2)
+ set(arg_CONFIG_PATH share2)
+ endif()
+
+ set(DEBUG_CONFIG ${CURRENT_PACKAGES_DIR}/debug/${arg_CONFIG_PATH})
+ set(RELEASE_CONFIG ${CURRENT_PACKAGES_DIR}/${arg_CONFIG_PATH})
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if(NOT EXISTS ${DEBUG_CONFIG})
+ message(FATAL_ERROR "'${DEBUG_CONFIG}' does not exist.")
+ endif()
+
+ # This roundabout handling enables CONFIG_PATH share
+ file(MAKE_DIRECTORY ${DEBUG_SHARE})
+ file(GLOB FILES ${DEBUG_CONFIG}/*)
+ file(COPY ${FILES} DESTINATION ${DEBUG_SHARE})
+ file(REMOVE_RECURSE ${DEBUG_CONFIG})
+ endif()
+
+ file(GLOB FILES ${RELEASE_CONFIG}/*)
+ file(COPY ${FILES} DESTINATION ${RELEASE_SHARE})
+ file(REMOVE_RECURSE ${RELEASE_CONFIG})
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG} NAME)
+ string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME)
+ if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE ${DEBUG_CONFIG})
+ else()
+ get_filename_component(DEBUG_CONFIG_PARENT_DIR ${DEBUG_CONFIG} DIRECTORY)
+ get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG_PARENT_DIR} NAME)
+ string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME)
+ if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE ${DEBUG_CONFIG_PARENT_DIR})
+ endif()
+ endif()
+ endif()
+
+ get_filename_component(RELEASE_CONFIG_DIR_NAME ${RELEASE_CONFIG} NAME)
+ string(TOLOWER "${RELEASE_CONFIG_DIR_NAME}" RELEASE_CONFIG_DIR_NAME)
+ if(RELEASE_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE ${RELEASE_CONFIG})
+ else()
+ get_filename_component(RELEASE_CONFIG_PARENT_DIR ${RELEASE_CONFIG} DIRECTORY)
+ get_filename_component(RELEASE_CONFIG_DIR_NAME ${RELEASE_CONFIG_PARENT_DIR} NAME)
+ string(TOLOWER "${RELEASE_CONFIG_DIR_NAME}" RELEASE_CONFIG_DIR_NAME)
+ if(RELEASE_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH)
+ file(REMOVE_RECURSE ${RELEASE_CONFIG_PARENT_DIR})
+ endif()
+ endif()
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ if(NOT EXISTS "${DEBUG_SHARE}")
+ message(FATAL_ERROR "'${DEBUG_SHARE}' does not exist.")
+ endif()
+ endif()
+
+ file(GLOB_RECURSE UNUSED_FILES
+ "${DEBUG_SHARE}/*[Tt]argets.cmake"
+ "${DEBUG_SHARE}/*[Cc]onfig.cmake"
+ "${DEBUG_SHARE}/*[Cc]onfigVersion.cmake"
+ "${DEBUG_SHARE}/*[Cc]onfig-version.cmake"
+ )
+ if(UNUSED_FILES)
+ file(REMOVE ${UNUSED_FILES})
+ endif()
+
+ file(GLOB_RECURSE RELEASE_TARGETS
+ "${RELEASE_SHARE}/*-release.cmake"
+ )
+ foreach(RELEASE_TARGET IN LISTS RELEASE_TARGETS)
+ file(READ ${RELEASE_TARGET} _contents)
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" _contents "${_contents}")
+ string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \"]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/${arg_TOOLS_PATH}/\\1" _contents "${_contents}")
+ file(WRITE ${RELEASE_TARGET} "${_contents}")
+ endforeach()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ file(GLOB_RECURSE DEBUG_TARGETS
+ "${DEBUG_SHARE}/*-debug.cmake"
+ )
+ foreach(DEBUG_TARGET IN LISTS DEBUG_TARGETS)
+ file(RELATIVE_PATH DEBUG_TARGET_REL "${DEBUG_SHARE}" "${DEBUG_TARGET}")
+
+ file(READ ${DEBUG_TARGET} _contents)
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" _contents "${_contents}")
+ string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \";]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/${arg_TOOLS_PATH}/\\1" _contents "${_contents}")
+ string(REPLACE "\${_IMPORT_PREFIX}/lib" "\${_IMPORT_PREFIX}/debug/lib" _contents "${_contents}")
+ string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/debug/bin" _contents "${_contents}")
+ file(WRITE ${RELEASE_SHARE}/${DEBUG_TARGET_REL} "${_contents}")
+
+ file(REMOVE ${DEBUG_TARGET})
+ endforeach()
+ endif()
+
+ #Fix ${_IMPORT_PREFIX} in cmake generated targets and configs;
+ #Since those can be renamed we have to check in every *.cmake
+ file(GLOB_RECURSE MAIN_CMAKES "${RELEASE_SHARE}/*.cmake")
+
+ foreach(MAIN_CMAKE IN LISTS MAIN_CMAKES)
+ file(READ ${MAIN_CMAKE} _contents)
+ #This correction is not correct for all cases. To make it correct for all cases it needs to consider
+ #original folder deepness to CURRENT_PACKAGES_DIR in comparison to the moved to folder deepness which
+ #is always at least (>=) 2, e.g. share/${PORT}. Currently the code assumes it is always 2 although
+ #this requirement is only true for the *Config.cmake. The targets are not required to be in the same
+ #folder as the *Config.cmake!
+ if(NOT arg_NO_PREFIX_CORRECTION)
+ string(REGEX REPLACE
+ "get_filename_component\\(_IMPORT_PREFIX \"\\\${CMAKE_CURRENT_LIST_FILE}\" PATH\\)(\nget_filename_component\\(_IMPORT_PREFIX \"\\\${_IMPORT_PREFIX}\" PATH\\))*"
+ "get_filename_component(_IMPORT_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_IMPORT_PREFIX \"\${_IMPORT_PREFIX}\" PATH)\nget_filename_component(_IMPORT_PREFIX \"\${_IMPORT_PREFIX}\" PATH)"
+ _contents "${_contents}") # see #1044 for details why this replacement is necessary. See #4782 why it must be a regex.
+ string(REGEX REPLACE
+ "get_filename_component\\(PACKAGE_PREFIX_DIR \"\\\${CMAKE_CURRENT_LIST_DIR}/\\.\\./(\\.\\./)*\" ABSOLUTE\\)"
+ "get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/../../\" ABSOLUTE)"
+ _contents "${_contents}")
+ string(REGEX REPLACE
+ "get_filename_component\\(PACKAGE_PREFIX_DIR \"\\\${CMAKE_CURRENT_LIST_DIR}/\\.\\.((\\\\|/)\\.\\.)*\" ABSOLUTE\\)"
+ "get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/../../\" ABSOLUTE)"
+ _contents "${_contents}") # This is a meson-related workaround, see https://github.com/mesonbuild/meson/issues/6955
+ endif()
+
+ #Fix wrongly absolute paths to install dir with the correct dir using ${_IMPORT_PREFIX}
+ #This happens if vcpkg built libraries are directly linked to a target instead of using
+ #an imported target for it. We could add more logic here to identify defect target files.
+ #Since the replacement here in a multi config build always requires a generator expression
+ #in front of the absoulte path to ${CURRENT_INSTALLED_DIR}. So the match should always be at
+ #least >:${CURRENT_INSTALLED_DIR}.
+ #In general the following generator expressions should be there:
+ #\$<\$<CONFIG:DEBUG>:${CURRENT_INSTALLED_DIR}/debug/lib/somelib>
+ #and/or
+ #\$<\$<NOT:\$<CONFIG:DEBUG>>:${CURRENT_INSTALLED_DIR}/lib/somelib>
+ #with ${CURRENT_INSTALLED_DIR} being fully expanded
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" [[${_IMPORT_PREFIX}]] _contents "${_contents}")
+ file(WRITE ${MAIN_CMAKE} "${_contents}")
+ endforeach()
+
+ # Remove /debug/<target_path>/ if it's empty.
+ file(GLOB_RECURSE REMAINING_FILES "${DEBUG_SHARE}/*")
+ if(NOT REMAINING_FILES)
+ file(REMOVE_RECURSE ${DEBUG_SHARE})
+ endif()
+
+ # Remove /debug/share/ if it's empty.
+ file(GLOB_RECURSE REMAINING_FILES "${CURRENT_PACKAGES_DIR}/debug/share/*")
+ if(NOT REMAINING_FILES)
+ file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
+ endif()
+
+ # Patch out any remaining absolute references
+ file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" CMAKE_CURRENT_PACKAGES_DIR)
+ file(GLOB CMAKE_FILES ${RELEASE_SHARE}/*.cmake)
+ foreach(CMAKE_FILE IN LISTS CMAKE_FILES)
+ file(READ ${CMAKE_FILE} _contents)
+ string(REPLACE "${CMAKE_CURRENT_PACKAGES_DIR}" "\${CMAKE_CURRENT_LIST_DIR}/../.." _contents "${_contents}")
+ file(WRITE ${CMAKE_FILE} "${_contents}")
+ endforeach()
+endfunction()
+
+
diff --git a/vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake b/vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake
new file mode 100644
index 0000000..300b6a8
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake
@@ -0,0 +1,207 @@
+function(z_vcpkg_fixup_pkgconfig_process_data arg_variable arg_config arg_prefix)
+ # This normalizes all data to start and to end with a newline, and
+ # to use LF instead of CRLF. This allows to use simpler regex matches.
+ string(REPLACE "\r\n" "\n" contents "\n${${arg_variable}}\n")
+
+ # We use ${pcfiledir} for relocatable pc files, and on windows,
+ # pkgconf initializes ${pc_sysrootdir} to invalid '/'.
+ string(REPLACE [[${pc_sysrootdir}]] "" contents "${contents}")
+
+ string(REPLACE "${CURRENT_PACKAGES_DIR}" [[${prefix}]] contents "${contents}")
+ string(REPLACE "${CURRENT_INSTALLED_DIR}" [[${prefix}]] contents "${contents}")
+ if(VCPKG_HOST_IS_WINDOWS)
+ string(REGEX REPLACE "^([a-zA-Z]):/" [[/\1/]] unix_packages_dir "${CURRENT_PACKAGES_DIR}")
+ string(REPLACE "${unix_packages_dir}" [[${prefix}]] contents "${contents}")
+ string(REGEX REPLACE "^([a-zA-Z]):/" [[/\1/]] unix_installed_dir "${CURRENT_INSTALLED_DIR}")
+ string(REPLACE "${unix_installed_dir}" [[${prefix}]] contents "${contents}")
+ endif()
+
+ string(REGEX REPLACE "\n[\t ]*prefix[\t ]*=[^\n]*" "" contents "prefix=${arg_prefix}${contents}")
+ if("${arg_config}" STREQUAL "DEBUG")
+ # prefix points at the debug subfolder
+ string(REPLACE [[${prefix}/debug]] [[${prefix}]] contents "${contents}")
+ string(REPLACE [[${prefix}/include]] [[${prefix}/../include]] contents "${contents}")
+ string(REPLACE [[${prefix}/share]] [[${prefix}/../share]] contents "${contents}")
+ endif()
+ # Remove line continuations before transformations
+ string(REGEX REPLACE "[ \t]*\\\\\n[ \t]*" " " contents "${contents}")
+ # This section fuses XYZ.private and XYZ according to VCPKG_LIBRARY_LINKAGE
+ #
+ # Pkgconfig searches Requires.private transitively for Cflags in the dynamic case,
+ # which prevents us from removing it.
+ #
+ # Once this transformation is complete, users of vcpkg should never need to pass
+ # --static.
+ if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static")
+ # how this works:
+ # we want to transform:
+ # Libs: $1
+ # Libs.private: $2
+ # into
+ # Libs: $1 $2
+ # and the same thing for Requires and Requires.private
+
+ foreach(item IN ITEMS "Libs" "Requires" "Cflags")
+ set(line "")
+ if("${contents}" MATCHES "\n${item}: *([^\n]*)")
+ string(APPEND line " ${CMAKE_MATCH_1}")
+ endif()
+ if("${contents}" MATCHES "\n${item}\\.private: *([^\n]*)")
+ string(APPEND line " ${CMAKE_MATCH_1}")
+ endif()
+
+ string(REGEX REPLACE "\n${item}(\\.private)?:[^\n]*" "" contents "${contents}")
+ if(NOT "${line}" STREQUAL "")
+ string(APPEND contents "${item}:${line}\n")
+ endif()
+ endforeach()
+ endif()
+
+ if(contents MATCHES "\nLibs: *([^\n]*)")
+ set(libs "${CMAKE_MATCH_1}")
+ if(libs MATCHES [[;]])
+ # Assuming that ';' comes from CMake lists only. Candidate for parameter control.
+ string(REPLACE ";" " " no_lists "${libs}")
+ string(REPLACE "${libs}" "${no_lists}" contents "${contents}")
+ set(libs "${no_lists}")
+ endif()
+
+ separate_arguments(libs_list UNIX_COMMAND "${libs}")
+ set(skip_next 0)
+ set(libs_filtered "")
+ foreach(item IN LISTS libs_list)
+ if(skip_next)
+ set(skip_next 0)
+ continue()
+ elseif(item MATCHES "^(-l|-L)?optimized\$")
+ string(COMPARE EQUAL "${arg_config}" "DEBUG" skip_next)
+ continue()
+ elseif(item MATCHES "^(-l|-L)?debug\$")
+ string(COMPARE EQUAL "${arg_config}" "RELEASE" skip_next)
+ continue()
+ elseif(item MATCHES "^(-l|-L)?general\$")
+ continue()
+ endif()
+ if(item MATCHES [[.[\$]| ]] AND NOT item MATCHES [["]])
+ set(item "\"${item}\"")
+ else()
+ set(quoted "\"${item}\"")
+ string(FIND " ${libs} " " ${quoted} " index)
+ if(NOT index STREQUAL "-1")
+ set(item "${quoted}")
+ endif()
+ endif()
+ list(APPEND libs_filtered "${item}")
+ endforeach()
+ list(JOIN libs_filtered " " libs_filtered)
+ string(REPLACE "${libs}" "${libs_filtered}" contents "${contents}")
+ set(libs "${libs_filtered}")
+
+ if(libs MATCHES "[^ ]*-NOTFOUND")
+ message(WARNING "Error in ${file}: 'Libs' refers to a missing lib:\n...${CMAKE_MATCH_0}")
+ endif()
+ if(libs MATCHES "[^\n]*::[^\n ]*")
+ message(WARNING "Error in ${file}: 'Libs' refers to a CMake target:\n...${CMAKE_MATCH_0}")
+ endif()
+ endif()
+
+ # Quote -L, -I, and -l paths starting with `${blah}`
+ # This was already handled for "Libs", but there might be additional occurrences in other lines.
+ string(REGEX REPLACE "([ =])(-[LIl]\\\${[^}]*}[^ ;\n\t]*)" [[\1"\2"]] contents "${contents}")
+
+ set("${arg_variable}" "${contents}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_fixup_pkgconfig_check_files arg_file arg_config)
+ set(path_suffix_DEBUG /debug)
+ set(path_suffix_RELEASE "")
+
+ z_vcpkg_setup_pkgconfig_path(CONFIG "${arg_config}")
+
+ # First make sure everything is ok with the package and its deps
+ cmake_path(GET arg_file STEM LAST_ONLY package_name)
+ debug_message("Checking package (${arg_config}): ${package_name}")
+ execute_process(
+ COMMAND "${PKGCONFIG}" --print-errors --exists "${package_name}"
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
+ RESULT_VARIABLE error_var
+ OUTPUT_VARIABLE output
+ ERROR_VARIABLE output
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_STRIP_TRAILING_WHITESPACE
+ )
+ if(NOT "${error_var}" EQUAL "0")
+ message(FATAL_ERROR "${PKGCONFIG} --exists ${package_name} failed with error code: ${error_var}
+ ENV{PKG_CONFIG_PATH}: \"$ENV{PKG_CONFIG_PATH}\"
+ output: ${output}"
+ )
+ else()
+ debug_message("pkg-config --exists ${package_name} output: ${output}")
+ endif()
+
+ z_vcpkg_restore_pkgconfig_path()
+endfunction()
+
+function(vcpkg_fixup_pkgconfig)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "SKIP_CHECK"
+ ""
+ "RELEASE_FILES;DEBUG_FILES;SYSTEM_LIBRARIES;SYSTEM_PACKAGES;IGNORE_FLAGS"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(DEFINED arg_RELEASE_FILES AND NOT DEFINED arg_DEBUG_FILES)
+ message(FATAL_ERROR "DEBUG_FILES must be specified if RELEASE_FILES was specified.")
+ endif()
+ if(NOT DEFINED arg_RELEASE_FILES AND DEFINED arg_DEBUG_FILES)
+ message(FATAL_ERROR "RELEASE_FILES must be specified if DEBUG_FILES was specified.")
+ endif()
+
+ if(NOT DEFINED arg_RELEASE_FILES)
+ file(GLOB_RECURSE arg_RELEASE_FILES "${CURRENT_PACKAGES_DIR}/**/*.pc")
+ file(GLOB_RECURSE arg_DEBUG_FILES "${CURRENT_PACKAGES_DIR}/debug/**/*.pc")
+ foreach(debug_file IN LISTS arg_DEBUG_FILES)
+ vcpkg_list(REMOVE_ITEM arg_RELEASE_FILES "${debug_file}")
+ endforeach()
+ endif()
+
+ foreach(config IN ITEMS RELEASE DEBUG)
+ debug_message("${config} Files: ${arg_${config}_FILES}")
+ if("${VCPKG_BUILD_TYPE}" STREQUAL "release" AND "${config}" STREQUAL "DEBUG")
+ continue()
+ endif()
+ foreach(file IN LISTS "arg_${config}_FILES")
+ message(STATUS "Fixing pkgconfig file: ${file}")
+ cmake_path(GET file PARENT_PATH pkg_lib_search_path)
+ if("${config}" STREQUAL "DEBUG")
+ set(relative_pc_path "${CURRENT_PACKAGES_DIR}/debug")
+ cmake_path(RELATIVE_PATH relative_pc_path BASE_DIRECTORY "${pkg_lib_search_path}")
+ else()
+ set(relative_pc_path "${CURRENT_PACKAGES_DIR}")
+ cmake_path(RELATIVE_PATH relative_pc_path BASE_DIRECTORY "${pkg_lib_search_path}")
+ endif()
+ #Correct *.pc file
+ file(READ "${file}" contents)
+ z_vcpkg_fixup_pkgconfig_process_data(contents "${config}" "\${pcfiledir}/${relative_pc_path}")
+ file(WRITE "${file}" "${contents}")
+ endforeach()
+
+ if(NOT arg_SKIP_CHECK) # The check can only run after all files have been corrected!
+ vcpkg_find_acquire_program(PKGCONFIG)
+ debug_message("Using pkg-config from: ${PKGCONFIG}")
+ foreach(file IN LISTS "arg_${config}_FILES")
+ z_vcpkg_fixup_pkgconfig_check_files("${file}" "${config}")
+ endforeach()
+ endif()
+ endforeach()
+ debug_message("Fixing pkgconfig --- finished")
+
+ set(Z_VCPKG_FIXUP_PKGCONFIG_CALLED TRUE CACHE INTERNAL "See below" FORCE)
+ # Variable to check if this function has been called!
+ # Theoreotically vcpkg could look for *.pc files and automatically call this function
+ # or check if this function has been called if *.pc files are detected.
+ # The same is true for vcpkg_fixup_cmake_targets
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake b/vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake
new file mode 100644
index 0000000..2cd9c99
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake
@@ -0,0 +1,93 @@
+function(vcpkg_from_bitbucket)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "OUT_SOURCE_PATH;REPO;REF;SHA512;HEAD_REF"
+ "PATCHES")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_from_bitbucket was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(DEFINED arg_REF AND NOT DEFINED arg_SHA512)
+ message(FATAL_ERROR "SHA512 must be specified if REF is specified.")
+ endif()
+ if(NOT DEFINED arg_REF AND DEFINED arg_SHA512)
+ message(FATAL_ERROR "REF must be specified if SHA512 is specified.")
+ endif()
+
+ if(NOT DEFINED arg_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
+ endif()
+ if(NOT DEFINED arg_REPO)
+ message(FATAL_ERROR "The Bitbucket repository must be specified.")
+ endif()
+
+ if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF)
+ message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified.")
+ endif()
+
+ if(NOT arg_REPO MATCHES "^([^/]*)/([^/]*)$")
+ message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name:
+ must be an organization name followed by a repository name separated by a single slash.")
+ endif()
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "${CMAKE_MATCH_2}")
+
+ set(redownload_param "")
+ set(working_directory_param "")
+ set(sha512_param "SHA512" "${arg_SHA512}")
+ set(ref_to_use "${arg_REF}")
+ if(VCPKG_USE_HEAD_VERSION)
+ if(DEFINED arg_HEAD_REF)
+ set(redownload_param "ALWAYS_REDOWNLOAD")
+ set(sha512_param "SKIP_SHA512")
+ set(working_directory_param "WORKING_DIRECTORY" "${CURRENT_BUILDTREES_DIR}/src/head")
+ set(ref_to_use "${arg_HEAD_REF}")
+ else()
+ message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
+ endif()
+ elseif(NOT DEFINED arg_REF)
+ message(FATAL_ERROR "Package does not specify REF. It must be built using --head.")
+ endif()
+
+ # avoid using either - or _, to allow both `foo/bar` and `foo-bar` to coexist
+ # we assume that no one will name a ref "foo_-bar"
+ string(REPLACE "/" "_-" sanitized_ref "${ref_to_use}")
+ set(downloaded_file_name "${org_name}-${repo_name}-${sanitized_ref}.tar.gz")
+
+ # exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build.
+ if(VCPKG_USE_HEAD_VERSION)
+ vcpkg_download_distfile(archive_version
+ URLS "https://api.bitbucket.com/2.0/repositories/${org_name}/${repo_name}/refs/branches/${arg_HEAD_REF}"
+ FILENAME "${downloaded_file_name}.version"
+ SKIP_SHA512
+ ALWAYS_REDOWNLOAD
+ )
+ # Parse the github refs response with regex.
+ # TODO: add json-pointer support to vcpkg
+ file(READ "${archive_version}" version_contents)
+ if(NOT version_contents MATCHES [["hash": "([a-f0-9]+)"]])
+ message(FATAL_ERROR "Failed to parse API response from '${version_url}':
+
+${version_contents}
+")
+ endif()
+ set(VCPKG_HEAD_VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE)
+ endif()
+
+ # download the file information from bitbucket.
+ vcpkg_download_distfile(archive
+ URLS "https://bitbucket.com/${org_name}/${repo_name}/get/${ref_to_use}.tar.gz"
+ FILENAME "${downloaded_file_name}"
+ ${sha512_param}
+ ${redownload_param}
+ )
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${archive}"
+ REF "${sanitized_ref}"
+ PATCHES ${arg_PATCHES}
+ ${working_directory_param}
+ )
+ set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_from_git.cmake b/vcpkg/scripts/cmake/vcpkg_from_git.cmake
new file mode 100644
index 0000000..0b477ac
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_from_git.cmake
@@ -0,0 +1,189 @@
+function(vcpkg_from_git)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "OUT_SOURCE_PATH;URL;REF;FETCH_REF;HEAD_REF;TAG;LFS"
+ "PATCHES"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_from_git was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(DEFINED arg_TAG)
+ message(WARNING "The TAG argument to vcpkg_from_git has been deprecated and has no effect.")
+ endif()
+
+ if(NOT DEFINED arg_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "OUT_SOURCE_PATH must be specified")
+ endif()
+ if(NOT DEFINED arg_URL)
+ message(FATAL_ERROR "URL must be specified")
+ endif()
+ if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF)
+ message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified")
+ endif()
+ if(DEFINED arg_FETCH_REF AND NOT DEFINED arg_REF)
+ message(FATAL_ERROR "REF must be specified if FETCH_REF is specified")
+ endif()
+ if(NOT DEFINED arg_LFS AND "LFS" IN_LIST arg_KEYWORDS_MISSING_VALUES)
+ set(arg_LFS "${arg_URL}")
+ endif()
+
+ vcpkg_list(SET git_fetch_shallow_param --depth 1)
+ vcpkg_list(SET extract_working_directory_param)
+ vcpkg_list(SET skip_patch_check_param)
+ set(git_working_directory "${DOWNLOADS}/git-tmp")
+ set(do_download OFF)
+
+ if(VCPKG_USE_HEAD_VERSION AND DEFINED arg_HEAD_REF)
+ vcpkg_list(SET working_directory_param "WORKING_DIRECTORY" "${CURRENT_BUILDTREES_DIR}/src/head")
+ vcpkg_list(SET git_fetch_shallow_param --depth 1)
+ vcpkg_list(SET skip_patch_check_param SKIP_PATCH_CHECK)
+ set(ref_to_fetch "${arg_HEAD_REF}")
+ set(git_working_directory "${CURRENT_BUILDTREES_DIR}/src/git-tmp")
+ string(REPLACE "/" "_-" sanitized_ref "${arg_HEAD_REF}")
+
+ if(NOT _VCPKG_NO_DOWNLOADS)
+ set(do_download ON)
+ endif()
+ else()
+ if(NOT DEFINED arg_REF)
+ message(FATAL_ERROR "Package does not specify REF. It must be built using --head.")
+ endif()
+ if(VCPKG_USE_HEAD_VERSION)
+ message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
+ endif()
+
+ if(DEFINED arg_FETCH_REF)
+ set(ref_to_fetch "${arg_FETCH_REF}")
+ vcpkg_list(SET git_fetch_shallow_param)
+ else()
+ set(ref_to_fetch "${arg_REF}")
+ endif()
+ string(REPLACE "/" "_-" sanitized_ref "${arg_REF}")
+ endif()
+
+ set(temp_archive "${DOWNLOADS}/temp/${PORT}-${sanitized_ref}.tar.gz")
+ set(archive "${DOWNLOADS}/${PORT}-${sanitized_ref}.tar.gz")
+
+ if(NOT EXISTS "${archive}")
+ if(_VCPKG_NO_DOWNLOADS)
+ message(FATAL_ERROR "Downloads are disabled, but '${archive}' does not exist.")
+ endif()
+ set(do_download ON)
+ endif()
+
+ if(do_download)
+ message(STATUS "Fetching ${arg_URL} ${ref_to_fetch}...")
+ find_program(GIT NAMES git git.cmd)
+ file(MAKE_DIRECTORY "${DOWNLOADS}")
+ # Note: git init is safe to run multiple times
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND "${GIT}" init "${git_working_directory}"
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}"
+ LOGNAME "git-init-${TARGET_TRIPLET}"
+ )
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND "${GIT}" fetch "${arg_URL}" "${ref_to_fetch}" ${git_fetch_shallow_param} -n
+ WORKING_DIRECTORY "${git_working_directory}"
+ LOGNAME "git-fetch-${TARGET_TRIPLET}"
+ )
+ if(arg_LFS)
+ # Running "git lfs" searches for "git-lfs[.exe]" on the path
+ vcpkg_execute_in_download_mode(
+ COMMAND "${GIT}" lfs --version
+ OUTPUT_VARIABLE lfs_version_output
+ ERROR_VARIABLE lfs_version_error
+ RESULT_VARIABLE lfs_version_result
+ WORKING_DIRECTORY "${git_working_directory}"
+ )
+ if(lfs_version_result)
+ message(FATAL_ERROR "Git LFS is required for ${PORT}")
+ endif()
+
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND "${GIT}" lfs install --local --force
+ WORKING_DIRECTORY "${git_working_directory}"
+ LOGNAME "git-lfs-install-${TARGET_TRIPLET}"
+ )
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND "${GIT}" lfs fetch "${arg_LFS}" "${ref_to_fetch}"
+ WORKING_DIRECTORY "${git_working_directory}"
+ LOGNAME "git-lfs-fetch-${TARGET_TRIPLET}"
+ )
+ endif()
+
+ if(VCPKG_USE_HEAD_VERSION)
+ set(expected_rev_parse FETCH_HEAD)
+ else()
+ set(expected_rev_parse "${arg_REF}")
+ endif()
+
+ vcpkg_execute_in_download_mode(
+ COMMAND "${GIT}" rev-parse "${expected_rev_parse}"
+ OUTPUT_VARIABLE rev_parse_ref
+ ERROR_VARIABLE rev_parse_ref
+ RESULT_VARIABLE error_code
+ WORKING_DIRECTORY "${git_working_directory}"
+ )
+
+ if(error_code)
+ if(VCPKG_USE_HEAD_VERSION)
+ message(FATAL_ERROR "Unable to determine the commit SHA of the HEAD version to use after \
+fetching ${ref_to_fetch} from the git repository. (git rev-parse ${expected_rev_parse} failed)")
+ elseif(DEFINED arg_FETCH_REF)
+ message(FATAL_ERROR "After fetching ${ref_to_fetch}, the target ref ${expected_rev_parse} appears \
+inaccessible. A common cause of this failure is setting REF to a named branch or tag rather than a commit SHA. REF \
+must be a commit SHA. (git rev-parse ${expected_rev_parse} failed)")
+ else()
+ message(FATAL_ERROR "After fetching ${ref_to_fetch}, the target ref ${expected_rev_parse} appears \
+inaccessible. A common cause of this failure is setting REF to a named branch or tag rather than a commit SHA. REF \
+must be a commit SHA. If the git server does not advertise commit SHAs \
+(uploadpack.allowReachableSHA1InWant is false), you can set FETCH_REF to a named branch in which the desired commit \
+SHA is in the history. For example, you may be able to fix this error by changing \"REF ${arg_REF}\" to \
+\"REF a-commit-sha FETCH_REF ${arg_REF}\". (git rev-parse ${expected_rev_parse} failed)")
+ endif()
+ endif()
+
+ string(STRIP "${rev_parse_ref}" rev_parse_ref)
+ if(VCPKG_USE_HEAD_VERSION)
+ set(VCPKG_HEAD_VERSION "${rev_parse_ref}" PARENT_SCOPE)
+ elseif(NOT "${rev_parse_ref}" STREQUAL "${arg_REF}")
+ message(FATAL_ERROR "After fetching ${ref_to_fetch}, the requested REF (${arg_REF}) does not match \
+its commit SHA returned by git rev-parse (${rev_parse_ref}). This is usually caused by trying to set REF to a named \
+branch or tag rather than a commit SHA. REF must be a commit SHA. If the git server does not advertise commit SHAs \
+(uploadpack.allowReachableSHA1InWant is false), you can set FETCH_REF to a named branch in which the desired commit \
+SHA is in the history. For example, you may be able to fix this error by changing \"REF ${arg_REF}\" to \
+\"REF a-commit-sha FETCH_REF ${arg_REF}\".
+ [Expected : ( ${arg_REF} )])
+ [ Actual : ( ${rev_parse_ref} )]"
+ )
+ endif()
+
+ file(MAKE_DIRECTORY "${DOWNLOADS}/temp")
+ vcpkg_execute_required_process(
+ ALLOW_IN_DOWNLOAD_MODE
+ COMMAND "${GIT}" -c core.autocrlf=false archive "${rev_parse_ref}" -o "${temp_archive}"
+ WORKING_DIRECTORY "${git_working_directory}"
+ LOGNAME git-archive
+ )
+ file(RENAME "${temp_archive}" "${archive}")
+ else()
+ message(STATUS "Using cached ${archive}")
+ endif()
+
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${archive}"
+ REF "${sanitized_ref}"
+ PATCHES ${arg_PATCHES}
+ NO_REMOVE_ONE_LEVEL
+ ${extract_working_directory_param}
+ ${skip_patch_check_param}
+ )
+
+ set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_from_github.cmake b/vcpkg/scripts/cmake/vcpkg_from_github.cmake
new file mode 100644
index 0000000..5e5c2c1
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_from_github.cmake
@@ -0,0 +1,136 @@
+function(vcpkg_from_github)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ "USE_TARBALL_API"
+ "OUT_SOURCE_PATH;REPO;REF;SHA512;HEAD_REF;GITHUB_HOST;AUTHORIZATION_TOKEN;FILE_DISAMBIGUATOR"
+ "PATCHES")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_from_github was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(DEFINED arg_REF AND NOT DEFINED arg_SHA512)
+ message(FATAL_ERROR "SHA512 must be specified if REF is specified.")
+ endif()
+ if(NOT DEFINED arg_REF AND DEFINED arg_SHA512)
+ message(FATAL_ERROR "REF must be specified if SHA512 is specified.")
+ endif()
+
+ if(NOT DEFINED arg_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
+ endif()
+ if(NOT DEFINED arg_REPO)
+ message(FATAL_ERROR "The GitHub repository must be specified.")
+ endif()
+
+ if(NOT DEFINED arg_GITHUB_HOST)
+ set(github_host "https://github.com")
+ set(github_api_url "https://api.github.com")
+ else()
+ set(github_host "${arg_GITHUB_HOST}")
+ set(github_api_url "${arg_GITHUB_HOST}/api/v3")
+ endif()
+
+ set(headers_param "")
+ if(DEFINED arg_AUTHORIZATION_TOKEN)
+ set(headers_param "HEADERS" "Authorization: token ${arg_AUTHORIZATION_TOKEN}")
+ endif()
+
+
+ if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF)
+ message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified.")
+ endif()
+
+ if(NOT arg_REPO MATCHES "^([^/]*)/([^/]*)$")
+ message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name:
+ must be an organization name followed by a repository name separated by a single slash.")
+ endif()
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "${CMAKE_MATCH_2}")
+
+ if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED arg_HEAD_REF)
+ message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
+ set(VCPKG_USE_HEAD_VERSION OFF)
+ elseif(NOT VCPKG_USE_HEAD_VERSION AND NOT DEFINED arg_REF)
+ message(FATAL_ERROR "Package does not specify REF. It must be built using --head.")
+ endif()
+
+ # exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build.
+ if(VCPKG_USE_HEAD_VERSION)
+ string(REPLACE "/" "_-" sanitized_head_ref "${arg_HEAD_REF}")
+ vcpkg_download_distfile(archive_version
+ URLS "${github_api_url}/repos/${org_name}/${repo_name}/git/refs/heads/${arg_HEAD_REF}"
+ FILENAME "${org_name}-${repo_name}-${sanitized_head_ref}.version"
+ ${headers_param}
+ SKIP_SHA512
+ ALWAYS_REDOWNLOAD
+ )
+ # Parse the github refs response with regex.
+ file(READ "${archive_version}" version_contents)
+ string(JSON head_version
+ ERROR_VARIABLE head_version_err
+ GET "${version_contents}"
+ "object"
+ "sha"
+ )
+ if(NOT "${head_version_err}" STREQUAL "NOTFOUND")
+ message(FATAL_ERROR "Failed to parse API response from '${version_url}':
+${version_contents}
+
+Error was: ${head_version_err}
+")
+ endif()
+
+ set(VCPKG_HEAD_VERSION "${head_version}" PARENT_SCOPE)
+ set(ref_to_use "${head_version}")
+
+ vcpkg_list(SET redownload_param ALWAYS_REDOWNLOAD)
+ vcpkg_list(SET sha512_param SKIP_SHA512)
+ vcpkg_list(SET working_directory_param WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head")
+ vcpkg_list(SET skip_patch_check_param SKIP_PATCH_CHECK)
+ else()
+ set(ref_to_use "${arg_REF}")
+
+ vcpkg_list(SET redownload_param)
+ vcpkg_list(SET working_directory_param)
+ vcpkg_list(SET skip_patch_check_param)
+ vcpkg_list(SET sha512_param SHA512 "${arg_SHA512}")
+ endif()
+
+ string(REPLACE "/" "_-" sanitized_ref "${ref_to_use}")
+ if(DEFINED arg_FILE_DISAMBIGUATOR AND NOT VCPKG_USE_HEAD_REF)
+ set(downloaded_file_name "${org_name}-${repo_name}-${sanitized_ref}-${arg_FILE_DISAMBIGUATOR}.tar.gz")
+ else()
+ set(downloaded_file_name "${org_name}-${repo_name}-${sanitized_ref}.tar.gz")
+ endif()
+
+ if(arg_USE_TARBALL_API)
+ # This alternative endpoint has a better support for GitHub's personal
+ # access tokens (for instance when there is SSO enabled within the
+ # organization).
+ set(download_url
+ "${github_api_url}/repos/${org_name}/${repo_name}/tarball/${ref_to_use}"
+ )
+ else()
+ set(download_url
+ "${github_host}/${org_name}/${repo_name}/archive/${ref_to_use}.tar.gz"
+ )
+ endif()
+
+ # Try to download the file information from github
+ vcpkg_download_distfile(archive
+ URLS "${download_url}"
+ FILENAME "${downloaded_file_name}"
+ ${headers_param}
+ ${sha512_param}
+ ${redownload_param}
+ )
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${archive}"
+ REF "${sanitized_ref}"
+ PATCHES ${arg_PATCHES}
+ ${working_directory_param}
+ ${skip_patch_check_param}
+ )
+ set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake b/vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake
new file mode 100644
index 0000000..93e8e60
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake
@@ -0,0 +1,128 @@
+include(vcpkg_execute_in_download_mode)
+
+function(z_uri_encode input output_variable)
+ string(HEX "${input}" hex)
+ string(LENGTH "${hex}" length)
+ math(EXPR last "${length} - 1")
+ set(result "")
+ foreach(i RANGE ${last})
+ math(EXPR even "${i} % 2")
+ if("${even}" STREQUAL "0")
+ string(SUBSTRING "${hex}" "${i}" 2 char)
+ string(APPEND result "%${char}")
+ endif()
+ endforeach()
+ set("${output_variable}" ${result} PARENT_SCOPE)
+endfunction()
+
+function(vcpkg_from_gitlab)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "OUT_SOURCE_PATH;GITLAB_URL;REPO;REF;SHA512;HEAD_REF;FILE_DISAMBIGUATOR;AUTHORIZATION_TOKEN"
+ "PATCHES")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_from_gitlab was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_GITLAB_URL)
+ message(FATAL_ERROR "GITLAB_URL must be specified.")
+ endif()
+
+ if(DEFINED arg_REF AND NOT DEFINED arg_SHA512)
+ message(FATAL_ERROR "SHA512 must be specified if REF is specified.")
+ endif()
+ if(NOT DEFINED arg_REF AND DEFINED arg_SHA512)
+ message(FATAL_ERROR "REF must be specified if SHA512 is specified.")
+ endif()
+
+ if(NOT DEFINED arg_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.")
+ endif()
+ if(NOT DEFINED arg_REPO)
+ message(FATAL_ERROR "The GitHub repository must be specified.")
+ endif()
+
+ set(headers_param "")
+ if(DEFINED arg_AUTHORIZATION_TOKEN)
+ set(headers_param "HEADERS" "PRIVATE-TOKEN: ${arg_AUTHORIZATION_TOKEN}")
+ endif()
+
+ if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF)
+ message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified.")
+ endif()
+
+ if (NOT arg_REPO MATCHES [[^([^/;]+/)+([^/;]+)$]])
+ message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name. It must be:
+ - an organization name followed by a repository name separated by a single slash, or
+ - an organization name, group name, subgroup names and repository name separated by slashes.")
+ endif()
+ set(gitlab_link "${arg_GITLAB_URL}/${arg_REPO}")
+ string(REPLACE "/" "-" downloaded_file_name_base "${arg_REPO}")
+ string(REPLACE "/" ";" repo_parts "${arg_REPO}")
+ list(GET repo_parts -1 repo_name)
+
+ set(redownload_param "")
+ set(working_directory_param "")
+ set(sha512_param "SHA512" "${arg_SHA512}")
+ set(ref_to_use "${arg_REF}")
+ if(VCPKG_USE_HEAD_VERSION)
+ if(DEFINED arg_HEAD_REF)
+ set(redownload_param "ALWAYS_REDOWNLOAD")
+ set(sha512_param "SKIP_SHA512")
+ set(working_directory_param "WORKING_DIRECTORY" "${CURRENT_BUILDTREES_DIR}/src/head")
+ set(ref_to_use "${arg_HEAD_REF}")
+ else()
+ message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.")
+ endif()
+ elseif(NOT DEFINED arg_REF)
+ message(FATAL_ERROR "Package does not specify REF. It must be built using --head.")
+ endif()
+
+ # avoid using either - or _, to allow both `foo/bar` and `foo-bar` to coexist
+ # we assume that no one will name a ref "foo_-bar"
+ string(REPLACE "/" "_-" sanitized_ref "${ref_to_use}")
+ if(DEFINED arg_FILE_DISAMBIGUATOR AND NOT VCPKG_USE_HEAD_VERSION)
+ set(downloaded_file_name "${downloaded_file_name_base}-${sanitized_ref}-${arg_FILE_DISAMBIGUATOR}.tar.gz")
+ else()
+ set(downloaded_file_name "${downloaded_file_name_base}-${sanitized_ref}.tar.gz")
+ endif()
+
+
+ # exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build.
+ # When multiple vcpkg_from_gitlab's are used after each other, only use the version from the first (hopefully the primary one).
+ if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED VCPKG_HEAD_VERSION)
+ z_uri_encode("${arg_REPO}" encoded_repo_path)
+ set(version_url "${arg_GITLAB_URL}/api/v4/projects/${encoded_repo_path}/repository/branches/${arg_HEAD_REF}")
+ vcpkg_download_distfile(archive_version
+ URLS "${version_url}"
+ FILENAME "${downloaded_file_name}.version"
+ ${headers_param}
+ SKIP_SHA512
+ ALWAYS_REDOWNLOAD
+ )
+ # Parse the gitlab response with regex.
+ file(READ "${archive_version}" version_contents)
+ if(NOT version_contents MATCHES [["id":(\ *)"([a-f0-9]+)"]])
+ message(FATAL_ERROR "Failed to parse API response from '${version_url}':\n${version_contents}\n")
+ endif()
+ set(VCPKG_HEAD_VERSION "${CMAKE_MATCH_2}" PARENT_SCOPE)
+ endif()
+
+ # download the file information from gitlab
+ vcpkg_download_distfile(archive
+ URLS "${gitlab_link}/-/archive/${ref_to_use}/${repo_name}-${ref_to_use}.tar.gz"
+ FILENAME "${downloaded_file_name}"
+ ${headers_param}
+ ${sha512_param}
+ ${redownload_param}
+ )
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${archive}"
+ REF "${sanitized_ref}"
+ PATCHES ${arg_PATCHES}
+ ${working_directory_param}
+ )
+ set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake b/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake
new file mode 100644
index 0000000..19772c3
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake
@@ -0,0 +1,46 @@
+function(vcpkg_from_sourceforge)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ "DISABLE_SSL;NO_REMOVE_ONE_LEVEL"
+ "OUT_SOURCE_PATH;REPO;REF;SHA512;FILENAME;WORKING_DIRECTORY"
+ "PATCHES")
+
+ foreach(arg_name IN ITEMS OUT_SOURCE_PATH SHA512 REPO FILENAME)
+ if(NOT DEFINED "arg_${arg_name}")
+ message(FATAL_ERROR "${arg_name} is required.")
+ endif()
+ endforeach()
+
+ if(arg_DISABLE_SSL)
+ message(WARNING "DISABLE_SSL has been deprecated and has no effect")
+ endif()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ vcpkg_download_sourceforge(ARCHIVE
+ REPO "${arg_REPO}"
+ REF "${arg_REF}"
+ SHA512 "${arg_SHA512}"
+ FILENAME "${arg_FILENAME}"
+ )
+
+ set(no_remove_one_level_param "")
+ if(arg_NO_REMOVE_ONE_LEVEL)
+ set(no_remove_one_level_param "NO_REMOVE_ONE_LEVEL")
+ endif()
+ set(working_directory_param "")
+ if(DEFINED arg_WORKING_DIRECTORY)
+ set(working_directory_param "WORKING_DIRECTORY" "${arg_WORKING_DIRECTORY}")
+ endif()
+ vcpkg_extract_source_archive_ex(
+ OUT_SOURCE_PATH SOURCE_PATH
+ ARCHIVE "${ARCHIVE}"
+ REF "${sanitized_ref}"
+ ${no_remove_one_level_param}
+ ${working_directory_param}
+ PATCHES ${arg_PATCHES}
+ )
+
+ set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake b/vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake
new file mode 100644
index 0000000..b24b4d0
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake
@@ -0,0 +1,7 @@
+function(vcpkg_get_program_files_platform_bitness out_var)
+ if(DEFINED ENV{ProgramW6432})
+ set("${out_var}" "$ENV{ProgramW6432}" PARENT_SCOPE)
+ else()
+ set("${out_var}" "$ENV{PROGRAMFILES}" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake b/vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake
new file mode 100644
index 0000000..4c58d07
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake
@@ -0,0 +1,7 @@
+function(vcpkg_get_windows_sdk out_var)
+ if("$ENV{WindowsSDKVersion}" MATCHES [[^([0-9.]*)(\\|/)?$]])
+ set("${out_var}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "Unexpected format for ENV{WindowsSDKVersion} ($ENV{WindowsSDKVersion})")
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_host_path_list.cmake b/vcpkg/scripts/cmake/vcpkg_host_path_list.cmake
new file mode 100644
index 0000000..9b245ff
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_host_path_list.cmake
@@ -0,0 +1,64 @@
+function(vcpkg_host_path_list)
+ if("${ARGC}" LESS "2")
+ message(FATAL_ERROR "vcpkg_host_path_list requires at least two arguments.")
+ endif()
+
+ if("${ARGV1}" MATCHES "^ARGV([0-9]*)$|^ARG[CN]$|^CMAKE_CURRENT_FUNCTION|^CMAKE_MATCH_")
+ message(FATAL_ERROR "vcpkg_host_path_list does not support the list_var being ${ARGV1}.
+ Please use a different variable name.")
+ endif()
+
+ if("${ARGV1}" MATCHES [[^ENV\{(.*)\}$]])
+ set(list "$ENV{${CMAKE_MATCH_1}}")
+ set(env_var ON)
+ elseif("${ARGV1}" MATCHES [[^([A-Z]+)\{.*\}$]])
+ message(FATAL_ERROR "vcpkg_host_path_list does not support ${CMAKE_MATCH_1} variables;
+ only ENV{} and regular variables are supported.")
+ else()
+ set(list "${${ARGV1}}")
+ set(env_var OFF)
+ endif()
+ set(operation "${ARGV0}")
+ set(list_var "${ARGV1}")
+
+ cmake_parse_arguments(PARSE_ARGV 2 arg "" "" "")
+ set(bad_items "${arg_UNPARSED_ARGUMENTS}")
+ list(FILTER bad_items INCLUDE REGEX "[${VCPKG_HOST_PATH_SEPARATOR}]")
+ if(NOT "${bad_items}" STREQUAL "")
+ message(FATAL_ERROR "Host path separator (${VCPKG_HOST_PATH_SEPARATOR}) in path; this is unsupported.")
+ endif()
+
+ if("${operation}" STREQUAL "SET")
+ cmake_path(CONVERT "${arg_UNPARSED_ARGUMENTS}" TO_NATIVE_PATH_LIST arguments)
+ set(list "${arguments}")
+ elseif("${operation}" STREQUAL "APPEND")
+ cmake_path(CONVERT "${arg_UNPARSED_ARGUMENTS}" TO_NATIVE_PATH_LIST arguments)
+ if("${list}" STREQUAL "")
+ set(list "${arguments}")
+ elseif(NOT "${arguments}" STREQUAL "")
+ set(list "${list}${VCPKG_HOST_PATH_SEPARATOR}${arguments}")
+ endif()
+ elseif("${operation}" STREQUAL "PREPEND")
+ cmake_path(CONVERT "${arg_UNPARSED_ARGUMENTS}" TO_NATIVE_PATH_LIST arguments)
+ if("${list}" STREQUAL "")
+ set(list "${arguments}")
+ elseif(NOT "${arguments}" STREQUAL "")
+ set(list "${arguments}${VCPKG_HOST_PATH_SEPARATOR}${list}")
+ endif()
+ elseif("${operation}" STREQUAL "REMOVE_DUPLICATES")
+ if(NOT VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+ string(REPLACE [[;]] [[\\\;]] list "${list}")
+ endif()
+ cmake_path(CONVERT "${list}" TO_CMAKE_PATH_LIST current_list)
+ list(REMOVE_DUPLICATES current_list)
+ cmake_path(CONVERT "${current_list}" TO_NATIVE_PATH_LIST list)
+ else()
+ message(FATAL_ERROR "Operation ${operation} not recognized.")
+ endif()
+
+ if(env_var)
+ set("${list_var}" "${list}")
+ else()
+ set("${list_var}" "${list}" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_install_cmake.cmake
new file mode 100644
index 0000000..df7d7bf
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_cmake.cmake
@@ -0,0 +1,23 @@
+function(vcpkg_install_cmake)
+ if(Z_VCPKG_CMAKE_INSTALL_GUARD)
+ message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_install_cmake in the same port is unsupported.")
+ endif()
+
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_cmake_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ vcpkg_list(SET params)
+ foreach(arg IN ITEMS DISABLE_PARALLEL ADD_BIN_TO_PATH)
+ if(arg_${arg})
+ vcpkg_list(APPEND params "${arg}")
+ endif()
+ endforeach()
+
+ vcpkg_build_cmake(Z_VCPKG_DISABLE_DEPRECATION MESSAGE
+ ${params}
+ LOGFILE_ROOT install
+ TARGET install
+ )
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_copyright.cmake b/vcpkg/scripts/cmake/vcpkg_install_copyright.cmake
new file mode 100644
index 0000000..061eba5
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_copyright.cmake
@@ -0,0 +1,42 @@
+function(vcpkg_install_copyright)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "COMMENT" "FILE_LIST")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_FILE_LIST)
+ message(FATAL_ERROR "FILE_LIST must be specified")
+ endif()
+
+ list(LENGTH arg_FILE_LIST FILE_LIST_LENGTH)
+ set(out_string "")
+
+ if(FILE_LIST_LENGTH LESS_EQUAL 0)
+ message(FATAL_ERROR "FILE_LIST must contain at least one file")
+ elseif(FILE_LIST_LENGTH EQUAL 1)
+ if(arg_COMMENT)
+ file(READ "${arg_FILE_LIST}" out_string)
+ else()
+ file(INSTALL "${arg_FILE_LIST}" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
+ return()
+ endif()
+ else()
+ foreach(file_item IN LISTS arg_FILE_LIST)
+ if(NOT EXISTS "${file_item}")
+ message(FATAL_ERROR "\n${CMAKE_CURRENT_FUNCTION} was passed a non-existing path: ${file_item}\n")
+ endif()
+
+ get_filename_component(file_name "${file_item}" NAME)
+ file(READ "${file_item}" file_contents)
+
+ string(APPEND out_string "${file_name}:\n\n${file_contents}\n\n")
+ endforeach()
+ endif()
+
+ if(arg_COMMENT)
+ string(PREPEND out_string "${arg_COMMENT}\n\n")
+ endif()
+
+ file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "${out_string}")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_gn.cmake b/vcpkg/scripts/cmake/vcpkg_install_gn.cmake
new file mode 100644
index 0000000..5d96cbd
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_gn.cmake
@@ -0,0 +1,118 @@
+function(z_vcpkg_install_gn_get_target_type out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "SOURCE_PATH;BUILD_DIR;TARGET" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Internal error: get_target_type was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ execute_process(
+ COMMAND "${GN}" desc "${arg_BUILD_DIR}" "${arg_TARGET}"
+ WORKING_DIRECTORY "${arg_SOURCE_PATH}"
+ OUTPUT_VARIABLE output
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(output MATCHES [[type: ([A-Za-z0-9_]+)]])
+ set("${out_var}" "${CMAKE_MATCH_1}" PARENT_SCOPE)
+ else()
+ message(FATAL_ERROR "invalid result from `gn desc`: ${output}")
+ endif()
+endfunction()
+
+function(z_vcpkg_install_gn_get_desc out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "SOURCE_PATH;BUILD_DIR;TARGET;WHAT_TO_DISPLAY" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Internal error: get_desc was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ execute_process(
+ COMMAND "${GN}" desc "${arg_BUILD_DIR}" "${arg_TARGET}" "${arg_WHAT_TO_DISPLAY}"
+ WORKING_DIRECTORY "${arg_SOURCE_PATH}"
+ OUTPUT_VARIABLE output
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ string(REPLACE ";" "\\;" output "${output}")
+ string(REGEX REPLACE "\n|(\r\n)" ";" output "${output}")
+ set("${out_var}" "${output}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_install_gn_install)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "SOURCE_PATH;BUILD_DIR;INSTALL_DIR" "TARGETS")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Internal error: install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(target IN LISTS arg_TARGETS)
+ # GN targets must start with a //
+ z_vcpkg_install_gn_get_desc(outputs
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ BUILD_DIR "${arg_BUILD_DIR}"
+ TARGET "//${target}"
+ WHAT_TO_DISPLAY outputs
+ )
+ z_vcpkg_install_gn_get_target_type(target_type
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ BUILD_DIR "${arg_BUILD_DIR}"
+ TARGET "//${target}"
+ )
+
+ foreach(output IN LISTS outputs)
+ if(output MATCHES "^//")
+ # relative path (e.g. //out/Release/target.lib)
+ string(REGEX REPLACE "^//" "${arg_SOURCE_PATH}/" output "${output}")
+ elseif(output MATCHES "^/" AND CMAKE_HOST_WIN32)
+ # absolute path (e.g. /C:/path/to/target.lib)
+ string(REGEX REPLACE "^/" "" output "${output}")
+ endif()
+
+ if(NOT EXISTS "${output}")
+ message(WARNING "Output for target `${target}` doesn't exist: ${output}.")
+ continue()
+ endif()
+
+ if(target_type STREQUAL "executable")
+ file(INSTALL "${output}" DESTINATION "${arg_INSTALL_DIR}/tools")
+ elseif(output MATCHES "(\\.dll|\\.pdb)$")
+ file(INSTALL "${output}" DESTINATION "${arg_INSTALL_DIR}/bin")
+ else()
+ file(INSTALL "${output}" DESTINATION "${arg_INSTALL_DIR}/lib")
+ endif()
+ endforeach()
+ endforeach()
+endfunction()
+
+function(vcpkg_install_gn)
+ if(Z_VCPKG_GN_INSTALL_GUARD)
+ message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-gn; using both vcpkg-gn and vcpkg_install_gn in the same port is unsupported.")
+ else()
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "This function 'vcpkg_install_gn' is obsolete. Use 'vcpkg_gn_install' in port 'vcpkg-gn'.")
+ endif()
+
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "SOURCE_PATH" "TARGETS")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_install_gn was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified.")
+ endif()
+
+ vcpkg_build_ninja(TARGETS ${arg_TARGETS})
+
+ vcpkg_find_acquire_program(GN)
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ z_vcpkg_install_gn_install(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg"
+ INSTALL_DIR "${CURRENT_PACKAGES_DIR}/debug"
+ TARGETS ${arg_TARGETS}
+ )
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ z_vcpkg_install_gn_install(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel"
+ INSTALL_DIR "${CURRENT_PACKAGES_DIR}"
+ TARGETS ${arg_TARGETS}
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_make.cmake b/vcpkg/scripts/cmake/vcpkg_install_make.cmake
new file mode 100644
index 0000000..5fcd25e
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_make.cmake
@@ -0,0 +1,6 @@
+function(vcpkg_install_make)
+ vcpkg_build_make(
+ ${ARGN}
+ ENABLE_INSTALL
+ )
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_meson.cmake b/vcpkg/scripts/cmake/vcpkg_install_meson.cmake
new file mode 100644
index 0000000..0351f27
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_meson.cmake
@@ -0,0 +1,71 @@
+function(vcpkg_install_meson)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "ADD_BIN_TO_PATH" "" "")
+
+ vcpkg_find_acquire_program(NINJA)
+ unset(ENV{DESTDIR}) # installation directory was already specified with '--prefix' option
+
+ if(VCPKG_TARGET_IS_OSX)
+ vcpkg_backup_env_variables(VARS SDKROOT MACOSX_DEPLOYMENT_TARGET)
+ set(ENV{SDKROOT} "${VCPKG_DETECTED_CMAKE_OSX_SYSROOT}")
+ set(ENV{MACOSX_DEPLOYMENT_TARGET} "${VCPKG_DETECTED_CMAKE_OSX_DEPLOYMENT_TARGET}")
+ endif()
+
+ foreach(buildtype IN ITEMS "debug" "release")
+ if(DEFINED VCPKG_BUILD_TYPE AND NOT VCPKG_BUILD_TYPE STREQUAL buildtype)
+ continue()
+ endif()
+
+ if(buildtype STREQUAL "debug")
+ set(short_buildtype "dbg")
+ else()
+ set(short_buildtype "rel")
+ endif()
+
+ message(STATUS "Package ${TARGET_TRIPLET}-${short_buildtype}")
+ if(arg_ADD_BIN_TO_PATH)
+ vcpkg_backup_env_variables(VARS PATH)
+ if(buildtype STREQUAL "debug")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin")
+ else()
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin")
+ endif()
+ endif()
+ vcpkg_execute_required_process(
+ COMMAND "${NINJA}" install -v
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_buildtype}"
+ LOGNAME package-${TARGET_TRIPLET}-${short_buildtype}
+ )
+ if(arg_ADD_BIN_TO_PATH)
+ vcpkg_restore_env_variables(VARS PATH)
+ endif()
+ endforeach()
+
+ vcpkg_list(SET renamed_libs)
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL static AND NOT VCPKG_TARGET_IS_MINGW)
+ # Meson names all static libraries lib<name>.a which basically breaks the world
+ file(GLOB_RECURSE gen_libraries "${CURRENT_PACKAGES_DIR}*/**/lib*.a")
+ foreach(gen_library IN LISTS gen_libraries)
+ get_filename_component(libdir "${gen_library}" DIRECTORY)
+ get_filename_component(libname "${gen_library}" NAME)
+ string(REGEX REPLACE ".a$" ".lib" fixed_librawname "${libname}")
+ string(REGEX REPLACE "^lib" "" fixed_librawname "${fixed_librawname}")
+ file(RENAME "${gen_library}" "${libdir}/${fixed_librawname}")
+ # For cmake fixes.
+ string(REGEX REPLACE ".a$" "" origin_librawname "${libname}")
+ string(REGEX REPLACE ".lib$" "" fixed_librawname "${fixed_librawname}")
+ vcpkg_list(APPEND renamed_libs ${fixed_librawname})
+ set(${librawname}_old ${origin_librawname})
+ set(${librawname}_new ${fixed_librawname})
+ endforeach()
+ file(GLOB_RECURSE cmake_files "${CURRENT_PACKAGES_DIR}*/*.cmake")
+ foreach(cmake_file IN LISTS cmake_files)
+ foreach(current_lib IN LISTS renamed_libs)
+ vcpkg_replace_string("${cmake_file}" "${${current_lib}_old}" "${${current_lib}_new}" IGNORE_UNCHANGED)
+ endforeach()
+ endforeach()
+ endif()
+
+ if(VCPKG_TARGET_IS_OSX)
+ vcpkg_restore_env_variables(VARS SDKROOT MACOSX_DEPLOYMENT_TARGET)
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake b/vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake
new file mode 100644
index 0000000..01d9011
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake
@@ -0,0 +1,163 @@
+function(vcpkg_install_msbuild)
+ cmake_parse_arguments(
+ PARSE_ARGV 0
+ "arg"
+ "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"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_install_msbuild was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_RELEASE_CONFIGURATION)
+ set(arg_RELEASE_CONFIGURATION Release)
+ endif()
+ if(NOT DEFINED arg_DEBUG_CONFIGURATION)
+ set(arg_DEBUG_CONFIGURATION Debug)
+ endif()
+ if(NOT DEFINED arg_PLATFORM)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(arg_PLATFORM x64)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(arg_PLATFORM Win32)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(arg_PLATFORM ARM)
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(arg_PLATFORM arm64)
+ else()
+ message(FATAL_ERROR "Unsupported target architecture")
+ endif()
+ endif()
+ if(NOT DEFINED arg_PLATFORM_TOOLSET)
+ set(arg_PLATFORM_TOOLSET "${VCPKG_PLATFORM_TOOLSET}")
+ endif()
+ if(NOT DEFINED arg_TARGET_PLATFORM_VERSION)
+ vcpkg_get_windows_sdk(arg_TARGET_PLATFORM_VERSION)
+ endif()
+ if(NOT DEFINED arg_TARGET)
+ set(arg_TARGET Rebuild)
+ endif()
+
+ list(APPEND arg_OPTIONS
+ "/t:${arg_TARGET}"
+ "/p:Platform=${arg_PLATFORM}"
+ "/p:PlatformToolset=${arg_PLATFORM_TOOLSET}"
+ "/p:VCPkgLocalAppDataDisabled=true"
+ "/p:UseIntelMKL=No"
+ "/p:WindowsTargetPlatformVersion=${arg_TARGET_PLATFORM_VERSION}"
+ "/p:VcpkgTriplet=${TARGET_TRIPLET}"
+ "/p:VcpkgInstalledDir=${_VCPKG_INSTALLED_DIR}"
+ "/p:VcpkgManifestInstall=false"
+ "/p:UseMultiToolTask=true"
+ "/p:MultiProcMaxCount=${VCPKG_CONCURRENCY}"
+ "/p:EnforceProcessCountAcrossBuilds=true"
+ "/m:${VCPKG_CONCURRENCY}"
+ )
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ # Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions
+ # TODO: Add a way for the user to override this if they want to opt-in to incompatibility
+ list(APPEND arg_OPTIONS "/p:WholeProgramOptimization=false")
+ endif()
+
+ if(arg_USE_VCPKG_INTEGRATION)
+ list(APPEND arg_OPTIONS
+ "/p:ForceImportBeforeCppTargets=${SCRIPTS}/buildsystems/msbuild/vcpkg.targets"
+ "/p:VcpkgApplocalDeps=false"
+ )
+ endif()
+
+ get_filename_component(source_path_suffix "${arg_SOURCE_PATH}" NAME)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ message(STATUS "Building ${arg_PROJECT_SUBPATH} for Release")
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ file(COPY "${arg_SOURCE_PATH}" DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel")
+ set(source_copy_path "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/${source_path_suffix}")
+ vcpkg_execute_required_process(
+ COMMAND msbuild "${source_copy_path}/${arg_PROJECT_SUBPATH}"
+ "/p:Configuration=${arg_RELEASE_CONFIGURATION}"
+ ${arg_OPTIONS}
+ ${arg_OPTIONS_RELEASE}
+ WORKING_DIRECTORY "${source_copy_path}"
+ LOGNAME "build-${TARGET_TRIPLET}-rel"
+ )
+ file(GLOB_RECURSE libs "${source_copy_path}/*.lib")
+ file(GLOB_RECURSE dlls "${source_copy_path}/*.dll")
+ file(GLOB_RECURSE exes "${source_copy_path}/*.exe")
+ if(NOT libs STREQUAL "")
+ file(COPY ${libs} DESTINATION "${CURRENT_PACKAGES_DIR}/lib")
+ endif()
+ if(NOT dlls STREQUAL "")
+ file(COPY ${dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/bin")
+ endif()
+ if(NOT exes STREQUAL "")
+ file(COPY ${exes} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+ vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+ endif()
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ message(STATUS "Building ${arg_PROJECT_SUBPATH} for Debug")
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ file(COPY "${arg_SOURCE_PATH}" DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg")
+ set(source_copy_path "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/${source_path_suffix}")
+ vcpkg_execute_required_process(
+ COMMAND msbuild "${source_copy_path}/${arg_PROJECT_SUBPATH}"
+ "/p:Configuration=${arg_DEBUG_CONFIGURATION}"
+ ${arg_OPTIONS}
+ ${arg_OPTIONS_DEBUG}
+ WORKING_DIRECTORY "${source_copy_path}"
+ LOGNAME "build-${TARGET_TRIPLET}-dbg"
+ )
+ file(GLOB_RECURSE libs "${source_copy_path}/*.lib")
+ file(GLOB_RECURSE dlls "${source_copy_path}/*.dll")
+ if(NOT libs STREQUAL "")
+ file(COPY ${libs} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")
+ endif()
+ if(NOT dlls STREQUAL "")
+ file(COPY ${dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin")
+ endif()
+ endif()
+
+ vcpkg_copy_pdbs()
+
+ if(NOT arg_SKIP_CLEAN)
+ vcpkg_clean_msbuild()
+ endif()
+
+ if(DEFINED arg_INCLUDES_SUBPATH)
+ file(COPY "${arg_SOURCE_PATH}/${arg_INCLUDES_SUBPATH}/"
+ DESTINATION "${CURRENT_PACKAGES_DIR}/include/"
+ )
+ file(GLOB_RECURSE all_am_file "${CURRENT_PACKAGES_DIR}/include/*.am")
+ file(GLOB_RECURSE all_in_file "${CURRENT_PACKAGES_DIR}/include/*.in")
+ if(NOT "${all_am_file}" STREQUAL "")
+ file(REMOVE ${all_am_file})
+ endif()
+ if(NOT "${all_in_file}" STREQUAL "")
+ file(REMOVE ${all_in_file})
+ endif()
+ file(GLOB root_includes
+ LIST_DIRECTORIES false
+ "${CURRENT_PACKAGES_DIR}/include/*")
+ if(NOT root_includes STREQUAL "")
+ if(arg_REMOVE_ROOT_INCLUDES)
+ file(REMOVE ${root_includes})
+ elseif(arg_ALLOW_ROOT_INCLUDES)
+ else()
+ message(FATAL_ERROR "Top-level files were found in ${CURRENT_PACKAGES_DIR}/include; this may indicate a problem with the call to `vcpkg_install_msbuild()`.\nTo avoid conflicts with other libraries, it is recommended to not put includes into the root `include/` directory.\nPass either ALLOW_ROOT_INCLUDES or REMOVE_ROOT_INCLUDES to handle these files.\n")
+ endif()
+ endif()
+ endif()
+
+ if(DEFINED arg_LICENSE_SUBPATH)
+ file(INSTALL "${arg_SOURCE_PATH}/${arg_LICENSE_SUBPATH}"
+ DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}"
+ RENAME copyright
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_nmake.cmake b/vcpkg/scripts/cmake/vcpkg_install_nmake.cmake
new file mode 100644
index 0000000..16dcd62
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_nmake.cmake
@@ -0,0 +1,57 @@
+function(vcpkg_install_nmake)
+ vcpkg_list(SET multi_value_args
+ TARGET
+ OPTIONS OPTIONS_DEBUG OPTIONS_RELEASE
+ PRERUN_SHELL PRERUN_SHELL_DEBUG PRERUN_SHELL_RELEASE)
+
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "NO_DEBUG;PREFER_JOM"
+ "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME;CL_LANGUAGE"
+ "${multi_value_args}"
+ )
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified")
+ endif()
+
+ if(NOT VCPKG_HOST_IS_WINDOWS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} only support windows.")
+ endif()
+
+ # backwards-compatibility hack
+ # gdal passes `arg_OPTIONS_DEBUG` (and RELEASE) as a single argument,
+ # so we need to split them again
+ set(arg_OPTIONS_DEBUG ${arg_OPTIONS_DEBUG})
+ set(arg_OPTIONS_RELEASE ${arg_OPTIONS_RELEASE})
+
+ vcpkg_list(SET extra_args)
+ # switch args
+ if(arg_NO_DEBUG)
+ vcpkg_list(APPEND extra_args NO_DEBUG)
+ endif()
+ if(arg_PREFER_JOM)
+ vcpkg_list(APPEND extra_args PREFER_JOM)
+ endif()
+
+ # single args
+ foreach(arg IN ITEMS PROJECT_SUBPATH PROJECT_NAME CL_LANGUAGE)
+ if(DEFINED "arg_${arg}")
+ vcpkg_list(APPEND extra_args ${arg} "${arg_${arg}}")
+ endif()
+ endforeach()
+
+ # multi-value args
+ foreach(arg IN LISTS multi_value_args)
+ if(DEFINED "arg_${arg}")
+ vcpkg_list(APPEND extra_args ${arg} ${arg_${arg}})
+ endif()
+ endforeach()
+
+ vcpkg_build_nmake(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ ENABLE_INSTALL
+ LOGFILE_ROOT install
+ ${extra_args})
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_install_qmake.cmake
new file mode 100644
index 0000000..c665486
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_install_qmake.cmake
@@ -0,0 +1,45 @@
+function(vcpkg_install_qmake)
+ z_vcpkg_function_arguments(args)
+
+ vcpkg_build_qmake(${args})
+
+ file(GLOB_RECURSE release_libs
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.lib"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.a"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.so"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.so.*"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.dylib"
+ )
+ file(GLOB_RECURSE release_bins
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.dll"
+ )
+ file(GLOB_RECURSE debug_libs
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.lib"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.a"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.so"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.so.*"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.dylib"
+ )
+ file(GLOB_RECURSE debug_bins
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.dll"
+ )
+ if("${release_libs}" STREQUAL "" AND "${debug_libs}" STREQUAL "")
+ message(FATAL_ERROR "Build did not appear to produce any libraries. If this is intended, use `vcpkg_build_qmake()` directly.")
+ endif()
+ if(NOT "${release_libs}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib")
+ file(COPY ${release_libs} DESTINATION "${CURRENT_PACKAGES_DIR}/lib")
+ endif()
+ if(NOT "${debug_libs}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib")
+ file(COPY ${debug_libs} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")
+ endif()
+ if(NOT "${release_bins}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/bin")
+ file(COPY ${release_bins} DESTINATION "${CURRENT_PACKAGES_DIR}/bin")
+ endif()
+ if(NOT "${debug_bins}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/bin")
+ file(COPY ${debug_bins} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin")
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_list.cmake b/vcpkg/scripts/cmake/vcpkg_list.cmake
new file mode 100644
index 0000000..d7fa0fe
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_list.cmake
@@ -0,0 +1,165 @@
+macro(z_vcpkg_list_escape_once_more lst)
+ string(REPLACE [[\;]] [[\\;]] "${lst}" "${${lst}}")
+endmacro()
+
+function(vcpkg_list)
+ # NOTE: as this function replaces an existing CMake command,
+ # it does not use cmake_parse_arguments
+
+ # vcpkg_list(<operation> <list_var> ...)
+ # A0 A1
+
+ if(ARGC LESS "2")
+ message(FATAL_ERROR "vcpkg_list requires at least two arguments.")
+ endif()
+
+ if(ARGV1 MATCHES "^ARGV([0-9]*)$|^ARG[CN]$|^CMAKE_CURRENT_FUNCTION")
+ message(FATAL_ERROR "vcpkg_list does not support the list_var being ${ARGV1}.
+ Please use a different variable name.")
+ endif()
+
+ set(list "${${ARGV1}}")
+ set(operation "${ARGV0}")
+ set(list_var "${ARGV1}")
+
+ if(operation STREQUAL "SET")
+ z_vcpkg_function_arguments(args 2)
+ set("${list_var}" "${args}" PARENT_SCOPE)
+ return()
+ endif()
+
+ # Normal reading functions
+ if(operation STREQUAL "LENGTH")
+ # vcpkg_list(LENGTH <list-var> <out-var>)
+ # A0 A1 A2
+ if(NOT ARGC EQUAL "3")
+ message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires two arguments.")
+ endif()
+ list(LENGTH list out)
+ set("${ARGV2}" "${out}" PARENT_SCOPE)
+ return()
+ endif()
+ if(operation MATCHES "^(GET|JOIN|FIND)$")
+ # vcpkg_list(<operation> <list-var> <arg> <out-var>)
+ # A0 A1 A2 A3
+ if(NOT ARGC EQUAL "4")
+ message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires three arguments.")
+ endif()
+ if(operation STREQUAL "GET")
+ list(LENGTH list length)
+ if(length EQUAL "0")
+ message(FATAL_ERROR "vcpkg_list GET given empty list")
+ elseif(ARGV2 GREATER_EQUAL length OR ARGV2 LESS "-${length}")
+ message(FATAL_ERROR "vcpkg_list index: ${ARGV2} is not in range")
+ endif()
+ endif()
+ list("${operation}" list "${ARGV2}" out)
+ set("${ARGV3}" "${out}" PARENT_SCOPE)
+ return()
+ endif()
+ if(operation STREQUAL "SUBLIST")
+ # vcpkg_list(SUBLIST <list-var> <begin> <length> <out-var>)
+ # A0 A1 A2 A3 A4
+ if(NOT ARGC EQUAL "5")
+ message(FATAL_ERROR "vcpkg_list sub-command SUBLIST requires four arguments.")
+ endif()
+ list(LENGTH list length)
+ if(ARGV2 LESS "0" OR (ARGV2 GREATER_EQUAL length AND NOT ARGV2 EQUAL "0"))
+ message(FATAL_ERROR "vcpkg_list begin index: ${ARGV2} is out of range")
+ endif()
+ z_vcpkg_list_escape_once_more(list)
+ list(SUBLIST list "${ARGV2}" "${ARGV3}" out)
+ set("${ARGV4}" "${out}" PARENT_SCOPE)
+ return()
+ endif()
+
+ # modification functions
+
+ if(operation MATCHES "^(APPEND|PREPEND)$")
+ # vcpkg_list(<operation> <list> [<element>...])
+ # A0 A1 A2...
+
+ # if ARGC <= 2, then we don't have to do anything
+ if(ARGC GREATER 2)
+ z_vcpkg_function_arguments(args 2)
+ if(list STREQUAL "")
+ set("${list_var}" "${args}" PARENT_SCOPE)
+ elseif(operation STREQUAL "APPEND")
+ set("${list_var}" "${list};${args}" PARENT_SCOPE)
+ else()
+ set("${list_var}" "${args};${list}" PARENT_SCOPE)
+ endif()
+ endif()
+ return()
+ endif()
+ if(operation STREQUAL "INSERT")
+ # vcpkg_list(INSERT <list> <index> [<element>...])
+ # A0 A1 A2 A3...
+
+ list(LENGTH list length)
+ if(ARGV2 LESS "-{$length}" OR ARGV2 GREATER length)
+ message(FATAL_ERROR "vcpkg_list index: ${ARGV2} out of range")
+ endif()
+ if(ARGC GREATER 3)
+ # list(LENGTH) is one of the few subcommands that's fine
+ list(LENGTH list length)
+ if(ARGV2 LESS "0")
+ math(EXPR ARGV2 "${length} + ${ARGV2}")
+ endif()
+ if(ARGV2 LESS "0" OR ARGV2 GREATER length)
+ message(FATAL_ERROR "list index: ${ARGV2} out of range (-${length}, ${length})")
+ endif()
+
+ z_vcpkg_function_arguments(args 3)
+ if(list STREQUAL "")
+ set("${list_var}" "${args}" PARENT_SCOPE)
+ elseif(ARGV2 EQUAL "0")
+ set("${list_var}" "${args};${list}" PARENT_SCOPE)
+ elseif(ARGV2 EQUAL length)
+ set("${list_var}" "${list};${args}" PARENT_SCOPE)
+ else()
+ vcpkg_list(SUBLIST list 0 "${ARGV2}" list_start)
+ vcpkg_list(SUBLIST list "${ARGV2}" -1 list_end)
+ set("${list_var}" "${list_start};${args};${list_end}" PARENT_SCOPE)
+ endif()
+ elseif(ARGC LESS 3)
+ message(FATAL_ERROR "vcpkg_list sub-command INSERT requires at least two arguments.")
+ endif()
+ return()
+ endif()
+
+ if(operation MATCHES "^(POP_BACK|POP_FRONT|REVERSE|REMOVE_DUPLICATES)$")
+ # vcpkg_list(<operation> <list>)
+ # A0 A1
+ if(NOT ARGC EQUAL 2)
+ message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires one argument.")
+ endif()
+ z_vcpkg_list_escape_once_more(list)
+ list("${operation}" list)
+ set("${list_var}" "${list}" PARENT_SCOPE)
+ return()
+ endif()
+
+ if(operation MATCHES "^(REMOVE_AT|REMOVE_ITEM)$")
+ # vcpkg_list(<operation> <list> <index-or-item>)
+ # A0 A1 A2
+ if(NOT ARGC EQUAL 3)
+ message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires two arguments.")
+ endif()
+ if(operation STREQUAL "REMOVE_AT")
+ list(LENGTH list length)
+ if(ARGV2 GREATER_EQUAL length OR ARGV2 LESS "-${length}")
+ message(FATAL_ERROR "vcpkg_list index: ${ARGV2} out of range")
+ endif()
+ endif()
+
+ z_vcpkg_list_escape_once_more(list)
+ string(REPLACE [[;]] [[\;]] ARGV2 "${ARGV2}")
+
+ list("${operation}" list "${ARGV2}")
+ set("${list_var}" "${list}" PARENT_SCOPE)
+ return()
+ endif()
+
+ message(FATAL_ERROR "vcpkg_list sub-command ${operation} is not yet implemented.")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_minimum_required.cmake b/vcpkg/scripts/cmake/vcpkg_minimum_required.cmake
new file mode 100644
index 0000000..1ef1496
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_minimum_required.cmake
@@ -0,0 +1,35 @@
+function(vcpkg_minimum_required)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "VERSION" "")
+ if(NOT DEFINED VCPKG_BASE_VERSION)
+ message(FATAL_ERROR "Your vcpkg executable is outdated and is not compatible with the current CMake scripts.
+ Please re-acquire vcpkg by running bootstrap-vcpkg."
+ )
+ endif()
+ if(NOT DEFINED arg_VERSION)
+ message(FATAL_ERROR "VERSION must be specified")
+ endif()
+
+ set(vcpkg_date_regex "^[12][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]$")
+ if(NOT "${VCPKG_BASE_VERSION}" MATCHES "${vcpkg_date_regex}")
+ message(FATAL_ERROR
+ "vcpkg internal failure; VCPKG_BASE_VERSION (${VCPKG_BASE_VERSION}) was not a valid date."
+ )
+ endif()
+
+ if(NOT "${arg_VERSION}" MATCHES "${vcpkg_date_regex}")
+ message(FATAL_ERROR
+ "VERSION (${arg_VERSION}) was not a valid date - expected something of the form 'YYYY-MM-DD'"
+ )
+ endif()
+
+ string(REPLACE "-" "." VCPKG_BASE_VERSION_as_dotted "${VCPKG_BASE_VERSION}")
+ string(REPLACE "-" "." arg_VERSION_as_dotted "${arg_VERSION}")
+
+ if("${VCPKG_BASE_VERSION_as_dotted}" VERSION_LESS "${arg_VERSION_as_dotted}")
+ message(FATAL_ERROR
+ "Your vcpkg executable is from ${VCPKG_BASE_VERSION} which is older than required by the caller "
+ "of vcpkg_minimum_required(VERSION ${arg_VERSION}). "
+ "Please re-acquire vcpkg by running bootstrap-vcpkg."
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_replace_string.cmake b/vcpkg/scripts/cmake/vcpkg_replace_string.cmake
new file mode 100644
index 0000000..1778f6e
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_replace_string.cmake
@@ -0,0 +1,20 @@
+function(vcpkg_replace_string filename match replace)
+ cmake_parse_arguments(PARSE_ARGV 3 "arg" "REGEX;IGNORE_UNCHANGED" "" "")
+ if(arg_REGEX)
+ set(arg_REGEX "REGEX")
+ else()
+ if("${match}" STREQUAL "${replace}")
+ return() # Avoid reading the file or triggering warnings
+ endif()
+
+ set(arg_REGEX "")
+ endif ()
+ file(READ "${filename}" contents)
+ string(SHA512 before_hash "${contents}")
+ string(${arg_REGEX} REPLACE "${match}" "${replace}" contents "${contents}")
+ string(SHA512 after_hash "${contents}")
+ if(NOT arg_IGNORE_UNCHANGED AND "${before_hash}" STREQUAL "${after_hash}")
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_replace_string made no changes.")
+ endif()
+ file(WRITE "${filename}" "${contents}")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_test_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_test_cmake.cmake
new file mode 100644
index 0000000..b3eb9f4
--- /dev/null
+++ b/vcpkg/scripts/cmake/vcpkg_test_cmake.cmake
@@ -0,0 +1,4 @@
+# DEPRECATED
+function(vcpkg_test_cmake)
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_test_cmake was a no-op and has been removed. Please remove the call to `vcpkg_test_cmake()`.")
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake b/vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake
new file mode 100644
index 0000000..9a270ba
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake
@@ -0,0 +1,45 @@
+function(z_vcpkg_apply_patches)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "QUIET" "SOURCE_PATH" "PATCHES")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "internal error: z_vcpkg_apply_patches was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ find_program(GIT NAMES git git.cmd REQUIRED)
+ if(DEFINED ENV{GIT_CONFIG_NOSYSTEM})
+ set(git_config_nosystem_backup "$ENV{GIT_CONFIG_NOSYSTEM}")
+ else()
+ unset(git_config_nosystem_backup)
+ endif()
+
+ set(ENV{GIT_CONFIG_NOSYSTEM} 1)
+ set(patchnum 0)
+ foreach(patch IN LISTS arg_PATCHES)
+ get_filename_component(absolute_patch "${patch}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}")
+ message(STATUS "Applying patch ${patch}")
+ set(logname "patch-${TARGET_TRIPLET}-${patchnum}")
+ vcpkg_execute_in_download_mode(
+ COMMAND "${GIT}" -c core.longpaths=true -c core.autocrlf=false -c core.filemode=true --work-tree=. --git-dir=.git apply "${absolute_patch}" --ignore-whitespace --whitespace=nowarn --verbose
+ OUTPUT_FILE "${CURRENT_BUILDTREES_DIR}/${logname}-out.log"
+ ERROR_VARIABLE error
+ WORKING_DIRECTORY "${arg_SOURCE_PATH}"
+ RESULT_VARIABLE error_code
+ )
+ file(WRITE "${CURRENT_BUILDTREES_DIR}/${logname}-err.log" "${error}")
+
+ if(error_code)
+ if(arg_QUIET)
+ message(STATUS "Applying patch ${patch} - failure silenced")
+ else()
+ message(FATAL_ERROR "Applying patch failed: ${error}")
+ endif()
+ endif()
+
+ math(EXPR patchnum "${patchnum} + 1")
+ endforeach()
+ if(DEFINED git_config_nosystem_backup)
+ set(ENV{GIT_CONFIG_NOSYSTEM} "${git_config_nosystem_backup}")
+ else()
+ unset(ENV{GIT_CONFIG_NOSYSTEM})
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake b/vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake
new file mode 100644
index 0000000..b238f00
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake
@@ -0,0 +1,8 @@
+function(z_vcpkg_escape_regex_control_characters out_var string)
+ if(ARGC GREATER "2")
+ message(FATAL_ERROR "z_vcpkg_escape_regex_control_characters passed extra arguments: ${ARGN}")
+ endif()
+ # uses | instead of [] to avoid confusion; additionally, CMake doesn't support `]` in a `[]`
+ string(REGEX REPLACE [[\[|\]|\(|\)|\.|\+|\*|\^|\\|\$|\?|\|]] [[\\\0]] escaped_content "${string}")
+ set("${out_var}" "${escaped_content}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake
new file mode 100644
index 0000000..fb3d058
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake
@@ -0,0 +1,131 @@
+function(z_vcpkg_calculate_corrected_rpath)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "ELF_FILE_DIR;ORG_RPATH;OUT_NEW_RPATH_VAR"
+ "")
+
+ set(current_prefix "${CURRENT_PACKAGES_DIR}")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}")
+ file(RELATIVE_PATH relative_from_packages "${CURRENT_PACKAGES_DIR}" "${arg_ELF_FILE_DIR}")
+ if("${relative_from_packages}/" MATCHES "^debug/|^(manual-tools|tools)/[^/]*/debug/")
+ set(current_prefix "${CURRENT_PACKAGES_DIR}/debug")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}/debug")
+ endif()
+
+ # compute path relative to lib
+ file(RELATIVE_PATH relative_to_lib "${arg_ELF_FILE_DIR}" "${current_prefix}/lib")
+ # compute path relative to prefix
+ file(RELATIVE_PATH relative_to_prefix "${arg_ELF_FILE_DIR}" "${current_prefix}")
+
+ set(rpath_norm "")
+ if(NOT "${arg_ORG_RPATH}" STREQUAL "")
+ cmake_path(CONVERT "${arg_ORG_RPATH}" TO_CMAKE_PATH_LIST rpath_norm)
+
+ # pattern matching helpers
+ list(TRANSFORM rpath_norm PREPEND "::")
+ list(TRANSFORM rpath_norm APPEND "/")
+
+ string(REPLACE "::${arg_ELF_FILE_DIR}/" "::\$ORIGIN/" rpath_norm "${rpath_norm}")
+ # Remove unnecessary up/down ; don't use normalize $ORIGIN/../ will be removed otherwise
+ string(REPLACE "/lib/pkgconfig/../../" "/" rpath_norm "${rpath_norm}")
+ # lib relative corrections
+ string(REPLACE "::${current_prefix}/lib/" "::\$ORIGIN/${relative_to_lib}/" rpath_norm "${rpath_norm}")
+ string(REPLACE "::${current_installed_prefix}/lib/" "::\$ORIGIN/${relative_to_lib}/" rpath_norm "${rpath_norm}")
+ # prefix relativ
+ string(REPLACE "::${current_prefix}/" "::\$ORIGIN/${relative_to_prefix}/" rpath_norm "${rpath_norm}")
+ string(REPLACE "::${current_installed_prefix}/" "::\$ORIGIN/${relative_to_prefix}/" rpath_norm "${rpath_norm}")
+
+ if(NOT X_VCPKG_RPATH_KEEP_SYSTEM_PATHS)
+ list(FILTER rpath_norm INCLUDE REGEX "::\\\$ORIGIN.+") # Only keep paths relativ to ORIGIN
+ endif()
+
+ # Path normalization
+ list(TRANSFORM rpath_norm REPLACE "/+" "/")
+
+ # remove pattern matching helpers
+ list(TRANSFORM rpath_norm REPLACE "^::" "")
+ list(TRANSFORM rpath_norm REPLACE "/\$" "")
+ endif()
+
+ if(NOT relative_to_lib STREQUAL "")
+ list(PREPEND rpath_norm "\$ORIGIN/${relative_to_lib}")
+ endif()
+ list(PREPEND rpath_norm "\$ORIGIN") # Make ORIGIN the first entry
+ list(TRANSFORM rpath_norm REPLACE "/$" "")
+ list(REMOVE_DUPLICATES rpath_norm)
+ cmake_path(CONVERT "${rpath_norm}" TO_NATIVE_PATH_LIST new_rpath)
+
+ set("${arg_OUT_NEW_RPATH_VAR}" "${new_rpath}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_fixup_rpath_in_dir)
+ # We need to iterate trough everything because we
+ # can't predict where an elf file will be located
+ file(GLOB root_entries LIST_DIRECTORIES TRUE "${CURRENT_PACKAGES_DIR}/*")
+
+ # Skip some folders for better throughput
+ list(APPEND folders_to_skip "include")
+ list(JOIN folders_to_skip "|" folders_to_skip_regex)
+ set(folders_to_skip_regex "^(${folders_to_skip_regex})$")
+
+ # In download mode, we don't know if we're going to need PATCHELF, so be pessimistic and fetch
+ # it so it ends up in the downloads directory.
+ if(VCPKG_DOWNLOAD_MODE)
+ vcpkg_find_acquire_program(PATCHELF)
+ endif()
+
+ foreach(folder IN LISTS root_entries)
+ if(NOT IS_DIRECTORY "${folder}")
+ continue()
+ endif()
+
+ get_filename_component(folder_name "${folder}" NAME)
+ if(folder_name MATCHES "${folders_to_skip_regex}")
+ continue()
+ endif()
+
+ file(GLOB_RECURSE elf_files LIST_DIRECTORIES FALSE "${folder}/*")
+ list(FILTER elf_files EXCLUDE REGEX "\\\.(a|cpp|cc|cxx|c|hpp|h|hh|hxx|inc|json|toml|yaml|man|m4|ac|am|in|log|txt|pyi?|pyc|pyx|pxd|pc|cmake|f77|f90|f03|fi|f|cu|mod|ini|whl|cat|csv|rst|md|npy|npz|template|build)$")
+ list(FILTER elf_files EXCLUDE REGEX "/(copyright|LICENSE|METADATA)$")
+
+ foreach(elf_file IN LISTS elf_files)
+ if(IS_SYMLINK "${elf_file}")
+ continue()
+ endif()
+
+ vcpkg_find_acquire_program(PATCHELF) # Note that this relies on vcpkg_find_acquire_program short
+ # circuiting after the first run
+ # If this fails, the file is not an elf
+ execute_process(
+ COMMAND "${PATCHELF}" --print-rpath "${elf_file}"
+ OUTPUT_VARIABLE readelf_output
+ ERROR_VARIABLE read_rpath_error
+ )
+ string(REPLACE "\n" "" readelf_output "${readelf_output}")
+ if(NOT "${read_rpath_error}" STREQUAL "")
+ continue()
+ endif()
+
+ get_filename_component(elf_file_dir "${elf_file}" DIRECTORY)
+
+ z_vcpkg_calculate_corrected_rpath(
+ ELF_FILE_DIR "${elf_file_dir}"
+ ORG_RPATH "${readelf_output}"
+ OUT_NEW_RPATH_VAR new_rpath
+ )
+
+ execute_process(
+ COMMAND "${PATCHELF}" --set-rpath "${new_rpath}" "${elf_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE set_rpath_error
+ )
+
+ if(NOT "${set_rpath_error}" STREQUAL "")
+ message(WARNING "Couldn't adjust RPATH of '${elf_file}': ${set_rpath_error}")
+ continue()
+ endif()
+
+ message(STATUS "Adjusted RPATH of '${elf_file}' (From '${readelf_output}' -> To '${new_rpath}')")
+ endforeach()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake
new file mode 100644
index 0000000..c8a6269
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake
@@ -0,0 +1,243 @@
+function(z_vcpkg_calculate_corrected_macho_rpath)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "MACHO_FILE_DIR;OUT_NEW_RPATH_VAR"
+ "")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ set(current_prefix "${CURRENT_PACKAGES_DIR}")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}")
+ file(RELATIVE_PATH relative_from_packages "${CURRENT_PACKAGES_DIR}" "${arg_MACHO_FILE_DIR}")
+ if("${relative_from_packages}/" MATCHES "^debug/" OR "${relative_from_packages}/" MATCHES "^(manual-)?tools/.*/debug/.*")
+ set(current_prefix "${CURRENT_PACKAGES_DIR}/debug")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}/debug")
+ endif()
+
+ # compute path relative to lib
+ file(RELATIVE_PATH relative_to_lib "${arg_MACHO_FILE_DIR}" "${current_prefix}/lib")
+ # remove trailing slash
+ string(REGEX REPLACE "/+$" "" relative_to_lib "${relative_to_lib}")
+
+ if(NOT relative_to_lib STREQUAL "")
+ set(new_rpath "@loader_path/${relative_to_lib}")
+ else()
+ set(new_rpath "@loader_path")
+ endif()
+
+ set("${arg_OUT_NEW_RPATH_VAR}" "${new_rpath}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_regex_escape)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "STRING;OUT_REGEX_ESCAPED_STRING_VAR"
+ "")
+ string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" regex_escaped "${arg_STRING}")
+ set("${arg_OUT_REGEX_ESCAPED_STRING_VAR}" "${regex_escaped}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_fixup_macho_rpath_in_dir)
+ # We need to iterate through everything because we
+ # can't predict where a Mach-O file will be located
+ file(GLOB root_entries LIST_DIRECTORIES TRUE "${CURRENT_PACKAGES_DIR}/*")
+
+ # Skip some folders for better throughput
+ list(APPEND folders_to_skip "include")
+ list(JOIN folders_to_skip "|" folders_to_skip_regex)
+ set(folders_to_skip_regex "^(${folders_to_skip_regex})$")
+
+ find_program(
+ install_name_tool_cmd
+ NAMES install_name_tool
+ DOC "Absolute path of install_name_tool cmd"
+ REQUIRED
+ )
+
+ find_program(
+ otool_cmd
+ NAMES otool
+ DOC "Absolute path of otool cmd"
+ REQUIRED
+ )
+
+ find_program(
+ file_cmd
+ NAMES file
+ DOC "Absolute path of file cmd"
+ REQUIRED
+ )
+
+ foreach(folder IN LISTS root_entries)
+ if(NOT IS_DIRECTORY "${folder}")
+ continue()
+ endif()
+
+ get_filename_component(folder_name "${folder}" NAME)
+ if(folder_name MATCHES "${folders_to_skip_regex}")
+ continue()
+ endif()
+
+ file(GLOB_RECURSE macho_files LIST_DIRECTORIES FALSE "${folder}/*")
+ list(FILTER macho_files EXCLUDE REGEX [[\.(cpp|cc|cxx|c|hpp|h|hh|hxx|inc|json|toml|yaml|man|m4|ac|am|in|log|txt|pyi?|pyc|pyx|pxd|pc|cmake|f77|f90|f03|fi|f|cu|mod|ini|whl|cat|csv|rst|md|npy|npz|template|build)$]])
+ list(FILTER macho_files EXCLUDE REGEX "/(copyright|LICENSE|METADATA)$")
+
+ foreach(macho_file IN LISTS macho_files)
+ if(IS_SYMLINK "${macho_file}")
+ continue()
+ endif()
+
+ # Determine if the file is a Mach-O executable or shared library
+ execute_process(
+ COMMAND "${file_cmd}" -b "${macho_file}"
+ OUTPUT_VARIABLE file_output
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(file_output MATCHES ".*Mach-O.*shared library.*")
+ set(file_type "shared")
+ elseif(file_output MATCHES ".*Mach-O.*executable.*")
+ set(file_type "executable")
+ else()
+ debug_message("File `${macho_file}` reported as `${file_output}` is not a Mach-O file")
+ continue()
+ endif()
+
+ list(APPEND macho_executables_and_shared_libs "${macho_file}")
+
+ get_filename_component(macho_file_dir "${macho_file}" DIRECTORY)
+ get_filename_component(macho_file_name "${macho_file}" NAME)
+
+ z_vcpkg_calculate_corrected_macho_rpath(
+ MACHO_FILE_DIR "${macho_file_dir}"
+ OUT_NEW_RPATH_VAR new_rpath
+ )
+
+ if("${file_type}" STREQUAL "shared")
+ # Set the install name for shared libraries
+ execute_process(
+ COMMAND "${otool_cmd}" -D "${macho_file}"
+ OUTPUT_VARIABLE get_id_ov
+ RESULT_VARIABLE get_id_rv
+ )
+ if(NOT get_id_rv EQUAL 0)
+ message(FATAL_ERROR "Could not obtain install name id from '${macho_file}'")
+ endif()
+ set(macho_new_id "@rpath/${macho_file_name}")
+ message(STATUS "Setting install name id of '${macho_file}' to '@rpath/${macho_file_name}'")
+ execute_process(
+ COMMAND "${install_name_tool_cmd}" -id "${macho_new_id}" "${macho_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE set_id_error
+ RESULT_VARIABLE set_id_exit_code
+ )
+ if(NOT "${set_id_error}" STREQUAL "" AND NOT set_id_exit_code EQUAL 0)
+ message(WARNING "Couldn't adjust install name of '${macho_file}': ${set_id_error}")
+ continue()
+ endif()
+
+ # otool -D <macho_file> typically returns lines like:
+
+ # <macho_file>:
+ # <id>
+
+ # But also with ARM64 binaries, it can return:
+ # <macho_file> (architecture arm64):
+ # <id>
+
+ # Either way we need to remove the first line and trim the trailing newline char.
+ string(REGEX REPLACE "[^\n]+:\n" "" get_id_ov "${get_id_ov}")
+ string(REGEX REPLACE "\n.*" "" get_id_ov "${get_id_ov}")
+ list(APPEND adjusted_shared_lib_old_ids "${get_id_ov}")
+ list(APPEND adjusted_shared_lib_new_ids "${macho_new_id}")
+ endif()
+
+ # List all existing rpaths
+ execute_process(
+ COMMAND "${otool_cmd}" -l "${macho_file}"
+ OUTPUT_VARIABLE get_rpath_ov
+ RESULT_VARIABLE get_rpath_rv
+ )
+
+ if(NOT get_rpath_rv EQUAL 0)
+ message(FATAL_ERROR "Could not obtain rpath list from '${macho_file}'")
+ endif()
+ # Extract the LC_RPATH load commands and extract the paths
+ string(REGEX REPLACE "[^\n]+cmd LC_RPATH\n[^\n]+\n[^\n]+path ([^\n]+) \\(offset[^\n]+\n" "rpath \\1\n" get_rpath_ov "${get_rpath_ov}")
+ string(REGEX MATCHALL "rpath [^\n]+" get_rpath_ov "${get_rpath_ov}")
+ string(REGEX REPLACE "rpath " "" rpath_list "${get_rpath_ov}")
+
+ list(FIND rpath_list "${new_rpath}" has_new_rpath)
+ if(NOT has_new_rpath EQUAL -1)
+ list(REMOVE_AT rpath_list ${has_new_rpath})
+ set(rpath_args)
+ else()
+ set(rpath_args -add_rpath "${new_rpath}")
+ endif()
+ foreach(rpath IN LISTS rpath_list)
+ list(APPEND rpath_args "-delete_rpath" "${rpath}")
+ endforeach()
+ if(NOT rpath_args)
+ continue()
+ endif()
+
+ # Set the new rpath
+ execute_process(
+ COMMAND "${install_name_tool_cmd}" ${rpath_args} "${macho_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE set_rpath_error
+ RESULT_VARIABLE set_rpath_exit_code
+ )
+
+ if(NOT "${set_rpath_error}" STREQUAL "" AND NOT set_rpath_exit_code EQUAL 0)
+ message(WARNING "Couldn't adjust RPATH of '${macho_file}': ${set_rpath_error}")
+ continue()
+ endif()
+
+ message(STATUS "Adjusted RPATH of '${macho_file}' to '${new_rpath}'")
+ endforeach()
+ endforeach()
+
+ # Check for dependent libraries in executables and shared libraries that
+ # need adjusting after id change
+ list(LENGTH adjusted_shared_lib_old_ids last_adjusted_index)
+ if(NOT last_adjusted_index EQUAL 0)
+ math(EXPR last_adjusted_index "${last_adjusted_index} - 1")
+ foreach(macho_file IN LISTS macho_executables_and_shared_libs)
+ execute_process(
+ COMMAND "${otool_cmd}" -L "${macho_file}"
+ OUTPUT_VARIABLE get_deps_ov
+ RESULT_VARIABLE get_deps_rv
+ )
+ if(NOT get_deps_rv EQUAL 0)
+ message(FATAL_ERROR "Could not obtain dependencies list from '${macho_file}'")
+ endif()
+ # change adjusted_shared_lib_old_ids[i] -> adjusted_shared_lib_new_ids[i]
+ foreach(i RANGE ${last_adjusted_index})
+ list(GET adjusted_shared_lib_old_ids ${i} adjusted_old_id)
+ z_vcpkg_regex_escape(
+ STRING "${adjusted_old_id}"
+ OUT_REGEX_ESCAPED_STRING_VAR regex
+ )
+ if(NOT get_deps_ov MATCHES "[ \t]${regex} ")
+ continue()
+ endif()
+ list(GET adjusted_shared_lib_new_ids ${i} adjusted_new_id)
+
+ # Replace the old id with the new id
+ execute_process(
+ COMMAND "${install_name_tool_cmd}" -change "${adjusted_old_id}" "${adjusted_new_id}" "${macho_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE change_id_error
+ RESULT_VARIABLE change_id_exit_code
+ )
+ if(NOT "${change_id_error}" STREQUAL "" AND NOT change_id_exit_code EQUAL 0)
+ message(WARNING "Couldn't adjust dependent shared library install name in '${macho_file}': ${change_id_error}")
+ continue()
+ endif()
+ message(STATUS "Adjusted dependent shared library install name in '${macho_file}' (From '${adjusted_old_id}' -> To '${adjusted_new_id}')")
+ endforeach()
+ endforeach()
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake b/vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake
new file mode 100644
index 0000000..1177ef3
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake
@@ -0,0 +1,12 @@
+macro(z_vcpkg_forward_output_variable ptr_to_parent_var var_to_forward)
+ if("${ARGC}" GREATER "2")
+ message(FATAL_ERROR "z_vcpkg_forward_output_variable was passed extra arguments: ${ARGN}")
+ endif()
+ if(DEFINED "${ptr_to_parent_var}")
+ if(DEFINED "${var_to_forward}")
+ set("${${ptr_to_parent_var}}" "${${var_to_forward}}" PARENT_SCOPE)
+ else()
+ unset("${${ptr_to_parent_var}}" PARENT_SCOPE)
+ endif()
+ endif()
+endmacro()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake b/vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake
new file mode 100644
index 0000000..45e60a2
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake
@@ -0,0 +1,36 @@
+# NOTE: this function definition is copied directly to scripts/buildsystems/vcpkg.cmake
+# do not make changes here without making the same change there.
+macro(z_vcpkg_function_arguments OUT_VAR)
+ if("${ARGC}" EQUAL 1)
+ set(z_vcpkg_function_arguments_FIRST_ARG 0)
+ elseif("${ARGC}" EQUAL 2)
+ set(z_vcpkg_function_arguments_FIRST_ARG "${ARGV1}")
+
+ if(NOT z_vcpkg_function_arguments_FIRST_ARG GREATER_EQUAL "0" AND NOT z_vcpkg_function_arguments_FIRST_ARG LESS "0")
+ message(FATAL_ERROR "z_vcpkg_function_arguments: index (${z_vcpkg_function_arguments_FIRST_ARG}) is not a number")
+ elseif(z_vcpkg_function_arguments_FIRST_ARG LESS "0" OR z_vcpkg_function_arguments_FIRST_ARG GREATER ARGC)
+ message(FATAL_ERROR "z_vcpkg_function_arguments: index (${z_vcpkg_function_arguments_FIRST_ARG}) out of range")
+ endif()
+ else()
+ # vcpkg bug
+ message(FATAL_ERROR "z_vcpkg_function_arguments: invalid arguments (${ARGV})")
+ endif()
+
+ set("${OUT_VAR}" "")
+
+ # this allows us to get the value of the enclosing function's ARGC
+ set(z_vcpkg_function_arguments_ARGC_NAME "ARGC")
+ set(z_vcpkg_function_arguments_ARGC "${${z_vcpkg_function_arguments_ARGC_NAME}}")
+
+ math(EXPR z_vcpkg_function_arguments_LAST_ARG "${z_vcpkg_function_arguments_ARGC} - 1")
+ # GREATER_EQUAL added in CMake 3.7
+ if(NOT z_vcpkg_function_arguments_LAST_ARG LESS z_vcpkg_function_arguments_FIRST_ARG)
+ foreach(z_vcpkg_function_arguments_N RANGE "${z_vcpkg_function_arguments_FIRST_ARG}" "${z_vcpkg_function_arguments_LAST_ARG}")
+ string(REPLACE ";" "\\;" z_vcpkg_function_arguments_ESCAPED_ARG "${ARGV${z_vcpkg_function_arguments_N}}")
+ # adds an extra ";" on the front
+ set("${OUT_VAR}" "${${OUT_VAR}};${z_vcpkg_function_arguments_ESCAPED_ARG}")
+ endforeach()
+ # and then removes that extra semicolon
+ string(SUBSTRING "${${OUT_VAR}}" 1 -1 "${OUT_VAR}")
+ endif()
+endmacro()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake b/vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake
new file mode 100644
index 0000000..51e0f03
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake
@@ -0,0 +1,38 @@
+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(DEFINED VCPKG_BUILD_TYPE)
+ set(cmake_vars_file "${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-${VCPKG_BUILD_TYPE}.cmake.log")
+ set(cache_var "Z_VCPKG_GET_CMAKE_VARS_FILE_${VCPKG_BUILD_TYPE}")
+ else()
+ set(cmake_vars_file "${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}.cmake.log")
+ set(cache_var Z_VCPKG_GET_CMAKE_VARS_FILE)
+ endif()
+ if(NOT DEFINED CACHE{${cache_var}})
+ set(${cache_var} "${cmake_vars_file}"
+ 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 "${cmake_vars_file}" "${include_string}")
+ endif()
+
+ set("${out_file}" "${${cache_var}}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake b/vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake
new file mode 100644
index 0000000..d09fec1
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake
@@ -0,0 +1,20 @@
+if(NOT DEFINED PYTHON_VERSION)
+ message(FATAL_ERROR "PYTHON_VERSION should be defined.")
+endif()
+
+if(NOT DEFINED PYTHON_DIR)
+ message(FATAL_ERROR "PYTHON_DIR should be defined.")
+endif()
+
+# We want to be able to import stuff from outside of this embeddable package.
+# https://docs.python.org/3/library/sys_path_init.html#pth-files
+string(REGEX MATCH "^3\\.[0-9]+" _python_version_plain "${PYTHON_VERSION}")
+string(REPLACE "." "" _python_version_plain "${_python_version_plain}")
+file(REMOVE "${PYTHON_DIR}/python${_python_version_plain}._pth")
+
+# Since this embeddable package is not isolated anymore, we should make sure
+# it doesn't accidentally pick up stuff from windows registry.
+file(WRITE "${PYTHON_DIR}/sitecustomize.py" [[import os
+import sys
+sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
+]])
diff --git a/vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake b/vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake
new file mode 100644
index 0000000..7752d7a
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake
@@ -0,0 +1,15 @@
+function(z_vcpkg_prettify_command_line out_var)
+ set(output_list "")
+ z_vcpkg_function_arguments(args 1)
+ foreach(v IN LISTS args)
+ string(REPLACE [[\]] [[\\]] v "${v}")
+ if(v MATCHES "( )")
+ string(REPLACE [["]] [[\"]] v "${v}")
+ list(APPEND output_list "\"${v}\"")
+ else()
+ list(APPEND output_list "${v}")
+ endif()
+ endforeach()
+ list(JOIN output_list " " output)
+ set("${out_var}" "${output}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake b/vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake
new file mode 100644
index 0000000..b1321c0
--- /dev/null
+++ b/vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake
@@ -0,0 +1,59 @@
+function(z_vcpkg_setup_pkgconfig_path)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "CONFIG" "")
+
+ if("${arg_CONFIG}" STREQUAL "")
+ message(FATAL_ERROR "CONFIG is required.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN ITEMS PKG_CONFIG PKG_CONFIG_PATH)
+ if(DEFINED ENV{${envvar}})
+ set("z_vcpkg_env_backup_${envvar}" "$ENV{${envvar}}" PARENT_SCOPE)
+ else()
+ unset("z_vcpkg_env_backup_${envvar}" PARENT_SCOPE)
+ endif()
+ endforeach()
+
+ vcpkg_find_acquire_program(PKGCONFIG)
+ get_filename_component(pkgconfig_path "${PKGCONFIG}" DIRECTORY)
+ cmake_path(CONVERT "$ENV{PATH}" TO_CMAKE_PATH_LIST path_list NORMALIZE)
+ cmake_path(CONVERT "${pkgconfig_path}" TO_CMAKE_PATH_LIST pkgconfig_path NORMALIZE)
+ if(NOT "${pkgconfig_path}" IN_LIST path_list)
+ vcpkg_add_to_path("${pkgconfig_path}")
+ endif()
+ unset(path_list)
+ unset(pkgconfig_path)
+
+ set(ENV{PKG_CONFIG} "${PKGCONFIG}")
+
+ foreach(prefix IN ITEMS "${CURRENT_INSTALLED_DIR}" "${CURRENT_PACKAGES_DIR}")
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/share/pkgconfig")
+ if(arg_CONFIG STREQUAL "RELEASE")
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/lib/pkgconfig")
+ # search order is lib, share, external
+ elseif(arg_CONFIG STREQUAL "DEBUG")
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/debug/lib/pkgconfig")
+ # search order is debug/lib, share, external
+ else()
+ message(FATAL_ERROR "CONFIG must be either RELEASE or DEBUG.")
+ endif()
+ endforeach()
+ # total search order is current packages dir, current installed dir, external
+endfunction()
+
+function(z_vcpkg_restore_pkgconfig_path)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN ITEMS PKG_CONFIG PKG_CONFIG_PATH)
+ if(DEFINED z_vcpkg_env_backup_${envvar})
+ set("ENV{${envvar}}" "${z_vcpkg_env_backup_${envvar}}")
+ else()
+ unset("ENV{${envvar}}")
+ endif()
+ endforeach()
+endfunction()