[openssl,vcpkg-cmake-get-vars] Fix android and emscripten, add feature tools (#29966)

* [vcpkg-cmake-get-vars] Call 'project' early

System variables like 'APPLE' or 'ANDROID' aren't set before 'project()'.

* Get Android variables

* [openssl] Ensure that compiler is reached via 'PATH'

* Fix Android configuration

* Add 'tools' feature

* Update versions

* [openssl] Initialize android with vcpkg settings

* [openssl] Really don't build apps

* [vcpkg-cmake-get-vars] Update android vars

* [libpq] Pass openssl version from pkgconfig

* [vcpkg-cmake-get-vars] Update android vars

* [vcpkg-cmake-get-vars] Report generator

* [vcpkg-cmake-get-vars] Escape all output

* Transfer cmake-get-vars fixes

* Transfer cmake-get-vars extra flags

* no-asm for android-arm w/o neon

* [vcpkg_configure_make] Unquote as needed

Toolchain flags are passed into make via environment variables (e.g.
CFLAGS) and expanded by Makefiles regardless of quotes. And even vcm's
internal handling isn't prepared for these quotes. So we must remove
the early. This doesn't interfere with properly escaped quotes.

* Re-add lost 'project', amends 4cf7caaa

* [openssl] Fix emscripten
This commit is contained in:
Kai Pastor 2023-03-14 22:11:06 +01:00 committed by GitHub
parent 090b767f02
commit 73b9a2a359
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 265 additions and 132 deletions

View File

@ -1,38 +0,0 @@
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 25a549015..9018270ab 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -132,21 +132,21 @@ sub GetOpenSSLVersion
# Attempt to get OpenSSL version and location. This assumes that
# openssl.exe is in the specified directory.
# Quote the .exe name in case it has spaces
- my $opensslcmd =
- qq("openssl.exe" version 2>&1);
- my $sslout = `$opensslcmd`;
+ #my $opensslcmd =
+ # qq("openssl.exe" version 2>&1);
+ #my $sslout = `$opensslcmd`;
- $? >> 8 == 0
- or croak
- "Unable to determine OpenSSL version: The openssl.exe command wasn't found.";
+ #$? >> 8 == 0
+ # or croak
+ # "Unable to determine OpenSSL version: The openssl.exe command wasn't found.";
- if ($sslout =~ /(\d+)\.(\d+)\.(\d+)(\D)/m)
- {
- return ($1, $2, $3);
- }
+ #if ($sslout =~ /(\d+)\.(\d+)\.(\d+)(\D)/m)
+ #{
+ return (1, 1, 1);
+ #}
- croak
- "Unable to determine OpenSSL version: The openssl.exe version could not be determined.";
+ #croak
+ # "Unable to determine OpenSSL version: The openssl.exe version could not be determined.";
}
sub GenerateFiles

View File

@ -0,0 +1,14 @@
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 72c5b98..0d153c0 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -128,6 +128,9 @@ sub copyFile
sub GetOpenSSLVersion
{
my $self = shift;
+ if (($ENV{'VCPKG_OPENSSL_VERSION'} // '') =~ /(\d+)\.(\d+)\.(\d+)/m) {
+ return ($1, $2, $3);
+ }
# Attempt to get OpenSSL version and location. This assumes that
# openssl.exe is in the specified directory.

View File

@ -1,13 +0,0 @@
diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm
index 51711c2bf..d33fdc3b0 100644
--- a/src/tools/msvc/Solution.pm
+++ b/src/tools/msvc/Solution.pm
@@ -129,7 +129,7 @@ sub GetOpenSSLVersion
# openssl.exe is in the specified directory.
# Quote the .exe name in case it has spaces
my $opensslcmd =
- qq("$self->{options}->{openssl}\\bin\\openssl.exe" version 2>&1);
+ qq("openssl.exe" version 2>&1);
my $sslout = `$opensslcmd`;
$? >> 8 == 0

View File

@ -11,7 +11,7 @@ vcpkg_download_distfile(ARCHIVE
set(PATCHES set(PATCHES
patches/windows/install.patch patches/windows/install.patch
patches/windows/win_bison_flex.patch patches/windows/win_bison_flex.patch
patches/windows/openssl_exe_path.patch patches/windows/openssl-version.patch
patches/windows/Solution.patch patches/windows/Solution.patch
patches/windows/MSBuildProject_fix_gendef_perl.patch patches/windows/MSBuildProject_fix_gendef_perl.patch
patches/windows/msgfmt.patch patches/windows/msgfmt.patch
@ -31,7 +31,6 @@ if(VCPKG_CRT_LINKAGE STREQUAL "static")
endif() endif()
if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm") if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm")
list(APPEND PATCHES patches/windows/arm.patch) list(APPEND PATCHES patches/windows/arm.patch)
list(APPEND PATCHES patches/windows/host_skip_openssl.patch) # Skip openssl.exe version check since it cannot be executed by the host
endif() endif()
if(NOT "${FEATURES}" MATCHES "client") if(NOT "${FEATURES}" MATCHES "client")
list(APPEND PATCHES patches/windows/minimize_install.patch) list(APPEND PATCHES patches/windows/minimize_install.patch)
@ -88,6 +87,11 @@ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
vcpkg_cmake_get_vars(vars_file) vcpkg_cmake_get_vars(vars_file)
include("${vars_file}") include("${vars_file}")
file(STRINGS "${CURRENT_INSTALLED_DIR}/lib/pkgconfig/openssl.pc" OPENSSL_VERSION REGEX "Version:")
if(OPENSSL_VERSION)
set(ENV{VCPKG_OPENSSL_VERSION} "${OPENSSL_VERSION}")
endif()
file(GLOB SOURCE_FILES ${SOURCE_PATH}/*) file(GLOB SOURCE_FILES ${SOURCE_PATH}/*)
foreach(_buildtype ${port_config_list}) foreach(_buildtype ${port_config_list})
# Copy libpq sources. # Copy libpq sources.
@ -140,8 +144,6 @@ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
vcpkg_add_to_path("${MSYS_ROOT}/usr/bin") vcpkg_add_to_path("${MSYS_ROOT}/usr/bin")
endif() endif()
if("${FEATURES}" MATCHES "openssl") if("${FEATURES}" MATCHES "openssl")
set(buildenv_contents "${buildenv_contents}\n\$ENV{'PATH'}=\$ENV{'PATH'} . ';${CURRENT_INSTALLED_DIR}/tools/openssl';")
#set(_contents "${_contents}\n\$ENV{PATH}=\$ENV{PATH} . ';${CURRENT_INSTALLED_DIR}/tools/openssl';")
string(REPLACE "openssl => undef" "openssl => \"${CURRENT_INSTALLED_DIR}\"" _contents "${_contents}") string(REPLACE "openssl => undef" "openssl => \"${CURRENT_INSTALLED_DIR}\"" _contents "${_contents}")
endif() endif()
if("${FEATURES}" MATCHES "python") if("${FEATURES}" MATCHES "python")

View File

@ -1,6 +1,7 @@
{ {
"name": "libpq", "name": "libpq",
"version": "15.2", "version": "15.2",
"port-version": 1,
"description": "The official database access API of postgresql", "description": "The official database access API of postgresql",
"homepage": "https://www.postgresql.org/", "homepage": "https://www.postgresql.org/",
"license": "PostgreSQL", "license": "PostgreSQL",

View File

@ -0,0 +1,12 @@
diff --git a/Configure b/Configure
index 5ac4b52..ad638e8 100755
--- a/Configure
+++ b/Configure
@@ -401,6 +401,7 @@ my @dtls = qw(dtls1 dtls1_2);
my @disablables = (
"acvp-tests",
"afalgeng",
+ "apps",
"aria",
"asan",
"asm",

View File

@ -21,11 +21,13 @@ vcpkg_from_github(
REF "openssl-${VERSION}" REF "openssl-${VERSION}"
SHA512 5a821aaaaa89027ce08a347e5fc216757c2971e29f7d24792609378c54f657839b3775bf639e7330b28b4f96ef0d32869f0a96afcb25c8a2e1c2fe51a6eb4aa3 SHA512 5a821aaaaa89027ce08a347e5fc216757c2971e29f7d24792609378c54f657839b3775bf639e7330b28b4f96ef0d32869f0a96afcb25c8a2e1c2fe51a6eb4aa3
PATCHES PATCHES
disable-apps.patch
disable-install-docs.patch disable-install-docs.patch
script-prefix.patch script-prefix.patch
windows/install-layout.patch windows/install-layout.patch
windows/install-pdbs.patch windows/install-pdbs.patch
windows/umul128-arm64.patch # Fixed upstream in https://github.com/openssl/openssl/pull/20244, but not released as of 3.0.8 windows/umul128-arm64.patch # Fixed upstream in https://github.com/openssl/openssl/pull/20244, but not released as of 3.0.8
unix/android-cc.patch
unix/move-openssldir.patch unix/move-openssldir.patch
unix/no-empty-dirs.patch unix/no-empty-dirs.patch
unix/no-static-libs-for-shared.patch unix/no-static-libs-for-shared.patch
@ -45,6 +47,10 @@ else()
vcpkg_list(APPEND CONFIGURE_OPTIONS no-shared no-module) vcpkg_list(APPEND CONFIGURE_OPTIONS no-shared no-module)
endif() endif()
if(NOT "tools" IN_LIST FEATURES)
vcpkg_list(APPEND CONFIGURE_OPTIONS no-apps)
endif()
if(DEFINED OPENSSL_USE_NOPINSHARED) if(DEFINED OPENSSL_USE_NOPINSHARED)
vcpkg_list(APPEND CONFIGURE_OPTIONS no-pinshared) vcpkg_list(APPEND CONFIGURE_OPTIONS no-pinshared)
endif() endif()

View File

@ -0,0 +1,4 @@
build_sw:
$(EMSDK)/upstream/emscripten/emmake $(MAKE) -f Makefile build_sw ${VCPKG_JOBS} $(MAKEFLAGS)
install:
$(EMSDK)/upstream/emscripten/emmake $(MAKE) -f Makefile install ${VCPKG_JOBS} $(MAKEFLAGS)

View File

@ -0,0 +1,20 @@
diff --git a/Configurations/15-android.conf b/Configurations/15-android.conf
index 41ad922..d15e34c 100644
--- a/Configurations/15-android.conf
+++ b/Configurations/15-android.conf
@@ -102,6 +102,7 @@
my $cflags;
my $cppflags;
+if (0) {
# see if there is NDK clang on $PATH, "universal" or "standalone"
if (which("clang") =~ m|^$ndk/.*/prebuilt/([^/]+)/|) {
my $host=$1;
@@ -158,6 +159,7 @@
$sysroot =~ s|^$ndk/||;
$sysroot = " --sysroot=\$($ndk_var)/$sysroot";
}
+}
$android_ndk = {
cflags => $cflags . $sysroot,
cppflags => $cppflags,

View File

@ -15,7 +15,7 @@ for OPTION; do
INTERPRETER="${LAST_SEEN}" INTERPRETER="${LAST_SEEN}"
COPY_OPTIONS=yes COPY_OPTIONS=yes
;; ;;
--prefix=*|--openssldir=*|--libdir=*|--debug,*) --prefix=*|--openssldir=*|--libdir=*|--cross-compile-prefix=*|--debug,*)
OUT_OPTIONS+=("${OPTION}") OUT_OPTIONS+=("${OPTION}")
;; ;;
-*|*=*) -*|*=*)

View File

@ -27,17 +27,26 @@ if(NOT perl_ipc_cmd_result STREQUAL "0")
message(FATAL_ERROR "\nPerl cannot find IPC::Cmd. Please install it through your system package manager.\n") message(FATAL_ERROR "\nPerl cannot find IPC::Cmd. Please install it through your system package manager.\n")
endif() endif()
# Ideally, OpenSSL should use `CC` from vcpkg as is (absolute path).
# But in reality, OpenSSL expects to locate the compiler via `PATH`,
# and it makes its own choices e.g. for Android.
vcpkg_cmake_get_vars(cmake_vars_file)
include("${cmake_vars_file}")
cmake_path(GET VCPKG_DETECTED_CMAKE_C_COMPILER PARENT_PATH compiler_path)
cmake_path(GET VCPKG_DETECTED_CMAKE_C_COMPILER FILENAME compiler_name)
find_program(compiler_in_path NAMES "${compiler_name}" PATHS ENV PATH NO_DEFAULT_PATH)
if(NOT compiler_in_path)
vcpkg_host_path_list(APPEND ENV{PATH} "${compiler_path}")
elseif(NOT compiler_in_path STREQUAL VCPKG_DETECTED_CMAKE_C_COMPILER)
vcpkg_host_path_list(PREPEND ENV{PATH} "${compiler_path}")
endif()
vcpkg_list(SET MAKEFILE_OPTIONS)
if(VCPKG_TARGET_IS_ANDROID) if(VCPKG_TARGET_IS_ANDROID)
if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64") set(ENV{ANDROID_NDK_ROOT} "${VCPKG_DETECTED_CMAKE_ANDROID_NDK}")
set(OPENSSL_ARCH android-arm64) set(OPENSSL_ARCH "android-${VCPKG_DETECTED_CMAKE_ANDROID_ARCH}")
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "arm") if(VCPKG_DETECTED_CMAKE_ANDROID_ARCH STREQUAL "arm" AND NOT VCPKG_DETECTED_CMAKE_ANDROID_ARM_NEON)
set(OPENSSL_ARCH android-arm) vcpkg_list(APPEND CONFIGURE_OPTIONS no-asm)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x64")
set(OPENSSL_ARCH android-x86_64)
elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "x86")
set(OPENSSL_ARCH android-x86)
else()
message(FATAL_ERROR "Unknown iOS target architecture: ${VCPKG_TARGET_ARCHITECTURE}")
endif() endif()
elseif(VCPKG_TARGET_IS_LINUX) elseif(VCPKG_TARGET_IS_LINUX)
if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64") if(VCPKG_TARGET_ARCHITECTURE MATCHES "arm64")
@ -79,8 +88,12 @@ elseif(VCPKG_TARGET_IS_MINGW)
endif() endif()
elseif(VCPKG_TARGET_IS_EMSCRIPTEN) elseif(VCPKG_TARGET_IS_EMSCRIPTEN)
set(INTERPRETER "$ENV{EMSDK}/upstream/emscripten/emconfigure") set(INTERPRETER "$ENV{EMSDK}/upstream/emscripten/emconfigure")
set(MAKE "$ENV{EMSDK}/upstream/emscripten/emmake") # We must wrap the build in emmake which does not pass jobserver fds.
set(ENV{MAKE} "${MAKE}") vcpkg_list(SET MAKEFILE_OPTIONS
MAKEFILE "${CMAKE_CURRENT_LIST_DIR}/Makefile.emscripten"
DISABLE_PARALLEL
)
set(ENV{VCPKG_JOBS} "-j${VCPKG_CONCURRENCY}")
vcpkg_list(APPEND CONFIGURE_OPTIONS vcpkg_list(APPEND CONFIGURE_OPTIONS
threads threads
no-engine no-engine
@ -109,13 +122,21 @@ vcpkg_configure_make(
OPTIONS_DEBUG OPTIONS_DEBUG
--debug --debug
) )
vcpkg_install_make(BUILD_TARGET build_sw) vcpkg_install_make(
${MAKEFILE_OPTIONS}
BUILD_TARGET build_sw
)
vcpkg_fixup_pkgconfig() vcpkg_fixup_pkgconfig()
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}") if("tools" IN_LIST FEATURES)
file(RENAME "${CURRENT_PACKAGES_DIR}/bin/c_rehash" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/c_rehash") file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/bin/c_rehash") file(RENAME "${CURRENT_PACKAGES_DIR}/bin/c_rehash" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/c_rehash")
vcpkg_copy_tools(TOOL_NAMES openssl AUTO_CLEAN) file(REMOVE "${CURRENT_PACKAGES_DIR}/debug/bin/c_rehash")
vcpkg_copy_tools(TOOL_NAMES openssl AUTO_CLEAN)
elseif(VCPKG_LIBRARY_LINKAGE STREQUAL "static" OR NOT VCPKG_TARGET_IS_WINDOWS)
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/etc/ssl/misc")
endif()
file(TOUCH "${CURRENT_PACKAGES_DIR}/etc/ssl/certs/.keep") file(TOUCH "${CURRENT_PACKAGES_DIR}/etc/ssl/certs/.keep")
file(TOUCH "${CURRENT_PACKAGES_DIR}/etc/ssl/private/.keep") file(TOUCH "${CURRENT_PACKAGES_DIR}/etc/ssl/private/.keep")

View File

@ -1,7 +1,7 @@
{ {
"name": "openssl", "name": "openssl",
"version": "3.0.8", "version": "3.0.8",
"port-version": 1, "port-version": 2,
"description": "OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.", "description": "OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols. It is also a general-purpose cryptography library.",
"homepage": "https://www.openssl.org", "homepage": "https://www.openssl.org",
"license": "Apache-2.0", "license": "Apache-2.0",
@ -16,8 +16,13 @@
}, },
{ {
"name": "vcpkg-cmake-get-vars", "name": "vcpkg-cmake-get-vars",
"host": true, "host": true
"platform": "windows & !mingw"
} }
] ],
"features": {
"tools": {
"description": "Install openssl executable and scripts",
"supports": "!uwp"
}
}
} }

View File

@ -85,14 +85,23 @@ vcpkg_build_nmake(
install_runtime install_ssldirs # extra targets install_runtime install_ssldirs # extra targets
) )
file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}") set(scripts "bin/c_rehash.pl" "misc/CA.pl" "misc/tsget.pl")
file(RENAME "${CURRENT_PACKAGES_DIR}/openssl.cnf" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/openssl.cnf") if("tools" IN_LIST FEATURES)
if(NOT VCPKG_TARGET_IS_UWP) file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
foreach(script IN ITEMS "bin/c_rehash.pl" "misc/CA.pl" "misc/tsget.pl") file(RENAME "${CURRENT_PACKAGES_DIR}/openssl.cnf" "${CURRENT_PACKAGES_DIR}/tools/${PORT}/openssl.cnf")
foreach(script IN LISTS scripts)
file(COPY "${CURRENT_PACKAGES_DIR}/${script}" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}") file(COPY "${CURRENT_PACKAGES_DIR}/${script}" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
file(REMOVE "${CURRENT_PACKAGES_DIR}/${script}" "${CURRENT_PACKAGES_DIR}/debug/${script}") file(REMOVE "${CURRENT_PACKAGES_DIR}/${script}" "${CURRENT_PACKAGES_DIR}/debug/${script}")
endforeach() endforeach()
vcpkg_copy_tools(TOOL_NAMES openssl AUTO_CLEAN) vcpkg_copy_tools(TOOL_NAMES openssl AUTO_CLEAN)
else()
file(REMOVE "${CURRENT_PACKAGES_DIR}/openssl.cnf")
foreach(script IN LISTS scripts)
file(REMOVE "${CURRENT_PACKAGES_DIR}/${script}" "${CURRENT_PACKAGES_DIR}/debug/${script}")
endforeach()
if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin")
endif()
endif() endif()
vcpkg_copy_pdbs() vcpkg_copy_pdbs()

View File

@ -1,17 +1,62 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
if(NOT VCPKG_OUTPUT_FILE)
message(FATAL_ERROR "VCPKG_OUTPUT_FILE is required to be defined")
endif()
if(NOT CMAKE_BUILD_TYPE)
message(FATAL_ERROR "CMAKE_BUILD_TYPE is required to be defined")
else()
string(TOUPPER "${CMAKE_BUILD_TYPE}" VCPKG_CONFIGS)
endif()
set(VCPKG_LANGUAGES "C;CXX" CACHE STRING "Languages to enables for this project") set(VCPKG_LANGUAGES "C;CXX" CACHE STRING "Languages to enables for this project")
set(OUTPUT_STRING) project(get_cmake_vars LANGUAGES ${VCPKG_LANGUAGES})
set(OUTPUT_STRING "# Generator: ${CMAKE_CURRENT_LIST_FILE}\n")
function(escaped out_var value)
string(REPLACE "\\" "\\\\" value "${value}")
string(REPLACE "\"" "\\\"" value "${value}")
string(REPLACE "\$" "\\\$" value "${value}")
set(${out_var} "${value}" PARENT_SCOPE)
endfunction()
# Build default checklists # Build default checklists
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING
CMAKE_SYSTEM_NAME CMAKE_SYSTEM_NAME
CMAKE_SYSTEM_VERSION
CMAKE_HOST_SYSTEM_NAME CMAKE_HOST_SYSTEM_NAME
CMAKE_SYSTEM_PROCESSOR CMAKE_SYSTEM_PROCESSOR
CMAKE_HOST_SYSTEM_PROCESSOR CMAKE_HOST_SYSTEM_PROCESSOR
CMAKE_SIZEOF_VOID_P CMAKE_SIZEOF_VOID_P
MSVC MSVC
MSVC_VERSION) MSVC_VERSION)
if(ANDROID)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK
CMAKE_ANDROID_ARCH
CMAKE_ANDROID_ARCH_ABI
CMAKE_ANDROID_ARM_MODE
CMAKE_ANDROID_ARM_NEON
CMAKE_ANDROID_NDK
CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG
CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION
CMAKE_ANDROID_NDK_VERSION
CMAKE_ANDROID_STL_TYPE
)
# Forward legacy variables from older NDKs
if("${CMAKE_ANDROID_ARCH}" STREQUAL "")
set(CMAKE_ANDROID_ARCH "${ANDROID_ARCH_NAME}")
endif()
if("${CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG}" STREQUAL "")
set(CMAKE_ANDROID_NDK_TOOLCHAIN_HOST_TAG "${ANDROID_HOST_TAG}")
endif()
if(CMAKE_SYSTEM_VERSION STREQUAL "1" AND ANDROID_PLATFORM_LEVEL GREATER "1")
set(CMAKE_SYSTEM_VERSION "${ANDROID_PLATFORM_LEVEL}")
endif()
endif()
if(APPLE) if(APPLE)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_OSX_DEPLOYMENT_TARGET list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_OSX_DEPLOYMENT_TARGET
CMAKE_OSX_SYSROOT) CMAKE_OSX_SYSROOT)
@ -67,30 +112,19 @@ set(VCPKG_VARS_TO_CHECK "${VCPKG_DEFAULT_VARS_TO_CHECK}" CACHE STRING "Variables
set(VCPKG_FLAGS_TO_CHECK "${VCPKG_DEFAULT_FLAGS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults") set(VCPKG_FLAGS_TO_CHECK "${VCPKG_DEFAULT_FLAGS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
set(VCPKG_ENV_VARS_TO_CHECK "${VCPKG_DEFAULT_ENV_VARS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults") set(VCPKG_ENV_VARS_TO_CHECK "${VCPKG_DEFAULT_ENV_VARS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
if(NOT VCPKG_OUTPUT_FILE)
message(FATAL_ERROR "VCPKG_OUTPUT_FILE is required to be defined")
endif()
if(NOT CMAKE_BUILD_TYPE)
message(FATAL_ERROR "CMAKE_BUILD_TYPE is required to be defined")
else()
string(TOUPPER "${CMAKE_BUILD_TYPE}" VCPKG_CONFIGS)
endif()
project(get_cmake_vars LANGUAGES ${VCPKG_LANGUAGES})
foreach(VAR IN LISTS VCPKG_VARS_TO_CHECK VCPKG_FLAGS_TO_CHECK) foreach(VAR IN LISTS VCPKG_VARS_TO_CHECK VCPKG_FLAGS_TO_CHECK)
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${VAR} \"${${VAR}}\")\n") escaped(value "${${VAR}}")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${VAR} \"${value}\")\n")
endforeach() endforeach()
foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK) foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK)
if(CMAKE_HOST_WIN32) if(CMAKE_HOST_WIN32)
string(REPLACE "\\" "/" ENV_${_env} "$ENV{${_env}}") string(REPLACE "\\" "/" value "$ENV{${_env}}")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${ENV_${_env}}\")\n") escaped(value "${value}")
else() else()
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"$ENV{${_env}}\")\n") escaped(value "$ENV{${_env}}")
endif() endif()
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${value}\")\n")
endforeach() endforeach()
set(EXTRA_FLAGS "") set(EXTRA_FLAGS "")
@ -160,10 +194,8 @@ foreach(flag ${VCPKG_LANGUAGES} SHARED_LINKER EXE_LINKER STATIC_LINKER MODULE_LI
endif() endif()
endif() endif()
endif() endif()
string(REPLACE "\\" "\\\\" ${flag}_FLAGS "${${flag}_FLAGS}") escaped(value "${${flag}_FLAGS}")
string(REPLACE "\"" "\\\"" ${flag}_FLAGS "${${flag}_FLAGS}") string(APPEND OUTPUT_STRING "set(VCPKG_COMBINED_${flag}_FLAGS_${VCPKG_CONFIGS} \"${value}\")\n")
string(REPLACE "\$" "\\\$" ${flag}_FLAGS "${${flag}_FLAGS}")
string(APPEND OUTPUT_STRING "set(VCPKG_COMBINED_${flag}_FLAGS_${VCPKG_CONFIGS} \"${${flag}_FLAGS}\")\n")
endforeach() endforeach()
file(WRITE "${VCPKG_OUTPUT_FILE}" "${OUTPUT_STRING}") file(WRITE "${VCPKG_OUTPUT_FILE}" "${OUTPUT_STRING}")

View File

@ -1,6 +1,6 @@
{ {
"name": "vcpkg-cmake-get-vars", "name": "vcpkg-cmake-get-vars",
"version-date": "2022-12-16", "version-date": "2023-03-02",
"documentation": "https://vcpkg.io/en/docs/README.html", "documentation": "https://vcpkg.io/en/docs/README.html",
"license": "MIT", "license": "MIT",
"dependencies": [ "dependencies": [

View File

@ -136,6 +136,23 @@ function(vcpkg_configure_make)
debug_message("Including cmake vars from: ${cmake_vars_file}") debug_message("Including cmake vars from: ${cmake_vars_file}")
include("${cmake_vars_file}") include("${cmake_vars_file}")
# Remove outer quotes from cmake variables which will be forwarded via makefile/shell variables
# substituted into makefile commands (e.g. Android NDK has "--sysroot=...")
foreach(var IN ITEMS VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG
VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE
VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG
VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE
VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG
VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE
VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_DEBUG
VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_RELEASE
VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES
VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES
)
separate_arguments(cmake_list NATIVE_COMMAND "${${var}}")
list(JOIN cmake_list " " "${var}")
endforeach()
if(DEFINED VCPKG_MAKE_BUILD_TRIPLET) if(DEFINED VCPKG_MAKE_BUILD_TRIPLET)
set(arg_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling set(arg_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling
endif() endif()

View File

@ -1,8 +1,29 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
if(NOT VCPKG_OUTPUT_FILE)
message(FATAL_ERROR "VCPKG_OUTPUT_FILE is required to be defined")
endif()
if(NOT CMAKE_BUILD_TYPE)
message(FATAL_ERROR "CMAKE_BUILD_TYPE is required to be defined")
else()
string(TOUPPER "${CMAKE_BUILD_TYPE}" VCPKG_CONFIGS)
endif()
set(VCPKG_LANGUAGES "C;CXX" CACHE STRING "Languages to enables for this project") set(VCPKG_LANGUAGES "C;CXX" CACHE STRING "Languages to enables for this project")
set(OUTPUT_STRING) project(get_cmake_vars LANGUAGES ${VCPKG_LANGUAGES})
set(OUTPUT_STRING "# Generator: ${CMAKE_CURRENT_LIST_FILE}\n")
function(escaped out_var value)
string(REPLACE "\\" "\\\\" value "${value}")
string(REPLACE "\"" "\\\"" value "${value}")
string(REPLACE "\$" "\\\$" value "${value}")
set(${out_var} "${value}" PARENT_SCOPE)
endfunction()
# Build default checklists # Build default checklists
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING
CMAKE_SYSTEM_NAME CMAKE_SYSTEM_NAME
@ -64,34 +85,35 @@ set(VCPKG_VARS_TO_CHECK "${VCPKG_DEFAULT_VARS_TO_CHECK}" CACHE STRING "Variables
set(VCPKG_FLAGS_TO_CHECK "${VCPKG_DEFAULT_FLAGS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults") set(VCPKG_FLAGS_TO_CHECK "${VCPKG_DEFAULT_FLAGS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
set(VCPKG_ENV_VARS_TO_CHECK "${VCPKG_DEFAULT_ENV_VARS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults") set(VCPKG_ENV_VARS_TO_CHECK "${VCPKG_DEFAULT_ENV_VARS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
if(NOT VCPKG_OUTPUT_FILE)
message(FATAL_ERROR "VCPKG_OUTPUT_FILE is required to be defined")
endif()
if(NOT CMAKE_BUILD_TYPE)
message(FATAL_ERROR "CMAKE_BUILD_TYPE is required to be defined")
else()
string(TOUPPER "${CMAKE_BUILD_TYPE}" VCPKG_CONFIGS)
endif()
project(get_cmake_vars LANGUAGES ${VCPKG_LANGUAGES})
foreach(VAR IN LISTS VCPKG_VARS_TO_CHECK) foreach(VAR IN LISTS VCPKG_VARS_TO_CHECK)
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${VAR} \"${${VAR}}\")\n") escaped(value "${${VAR}}")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${VAR} \"${value}\")\n")
endforeach() endforeach()
foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK) foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK)
if(CMAKE_HOST_WIN32) if(CMAKE_HOST_WIN32)
string(REPLACE "\\" "/" ENV_${_env} "$ENV{${_env}}") string(REPLACE "\\" "/" value "$ENV{${_env}}")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${ENV_${_env}}\")\n") escaped(value "${value}")
else() else()
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"$ENV{${_env}}\")\n") escaped(value "$ENV{${_env}}")
endif() endif()
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${value}\")\n")
endforeach() endforeach()
set(extra_flags "")
if(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
string(APPEND extra_flags " \"${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}\"")
else()
string(APPEND extra_flags " ${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN} \"${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}\"")
endif()
endif()
if(CMAKE_SYSROOT AND CMAKE_CXX_COMPILE_OPTIONS_SYSROOT)
string(APPEND extra_flags " \"${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}\"")
endif()
macro(_vcpkg_adjust_flags flag_var) macro(_vcpkg_adjust_flags flag_var)
if(MSVC) # Transform MSVC /flags to -flags due to bash scripts intepreting /flag as a path. if(MSVC) # Transform MSVC /flags to -flags due to msys2 runtime intepreting /flag as a path.
string(REGEX REPLACE "(^| )/" "\\1-" ${flag_var} "${${flag_var}}") string(REGEX REPLACE "(^| )/" "\\1-" ${flag_var} "${${flag_var}}")
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
if("${flag_var}" STREQUAL "CMAKE_CXX_FLAGS") if("${flag_var}" STREQUAL "CMAKE_CXX_FLAGS")
@ -126,6 +148,9 @@ macro(_vcpkg_adjust_flags flag_var)
string(PREPEND ${flag_var} "${CMAKE_${lang}_COMPILE_OPTIONS_TARGET} ${CMAKE_${lang}_COMPILER_TARGET} ") string(PREPEND ${flag_var} "${CMAKE_${lang}_COMPILE_OPTIONS_TARGET} ${CMAKE_${lang}_COMPILER_TARGET} ")
endif() endif()
endif() endif()
if("${flag_var}" IN_LIST flags_to_add_target)
string(APPEND ${flag_var} " ${extra_flags}")
endif()
unset(lang) unset(lang)
unset(flags_to_add_target) unset(flags_to_add_target)
endmacro() endmacro()
@ -133,15 +158,16 @@ endmacro()
foreach(flag IN LISTS VCPKG_FLAGS_TO_CHECK) foreach(flag IN LISTS VCPKG_FLAGS_TO_CHECK)
string(STRIP "${${flag}}" ${flag}) # Strip leading and trailing whitespaces string(STRIP "${${flag}}" ${flag}) # Strip leading and trailing whitespaces
_vcpkg_adjust_flags(${flag}) _vcpkg_adjust_flags(${flag})
string(REPLACE [[\\]] [[\]] ${flag} "${${flag}}") escaped(value "${${flag}}")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${${flag}}\")\n") string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${value}\")\n")
foreach(config IN LISTS VCPKG_CONFIGS) foreach(config IN LISTS VCPKG_CONFIGS)
escaped(raw_value "${CMAKE_${flag}_FLAGS_${config}}")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag}_${config} \"${raw_value}\")\n")
string(STRIP "${${flag}_${config}}" ${flag}_${config}) string(STRIP "${${flag}_${config}}" ${flag}_${config})
_vcpkg_adjust_flags(${flag}_${config}) _vcpkg_adjust_flags(${flag}_${config})
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag}_${config} \"${CMAKE_${flag}_FLAGS_${config}}\")\n") escaped(combined_value "${${flag}} ${${flag}_${config}}")
set(COMBINED_${flag}_${config} "${${flag}} ${${flag}_${config}}") string(STRIP "${combined_value}" combined_value)
string(STRIP "${COMBINED_${flag}_${config}}" COMBINED_${flag}_${config}) string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${flag}_${config} \"${combined_value}\")\n")
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${flag}_${config} \"${COMBINED_${flag}_${config}}\")\n")
endforeach() endforeach()
endforeach() endforeach()

View File

@ -4302,7 +4302,7 @@
}, },
"libpq": { "libpq": {
"baseline": "15.2", "baseline": "15.2",
"port-version": 0 "port-version": 1
}, },
"libpqxx": { "libpqxx": {
"baseline": "7.7.4", "baseline": "7.7.4",
@ -5802,7 +5802,7 @@
}, },
"openssl": { "openssl": {
"baseline": "3.0.8", "baseline": "3.0.8",
"port-version": 1 "port-version": 2
}, },
"openssl-unix": { "openssl-unix": {
"baseline": "deprecated", "baseline": "deprecated",
@ -8133,7 +8133,7 @@
"port-version": 1 "port-version": 1
}, },
"vcpkg-cmake-get-vars": { "vcpkg-cmake-get-vars": {
"baseline": "2022-12-16", "baseline": "2023-03-02",
"port-version": 0 "port-version": 0
}, },
"vcpkg-get-python-packages": { "vcpkg-get-python-packages": {

View File

@ -1,5 +1,10 @@
{ {
"versions": [ "versions": [
{
"git-tree": "215b5533383016a897deb00d90b9ca5ebefc0469",
"version": "15.2",
"port-version": 1
},
{ {
"git-tree": "afe52a0d413f6e4dce23ba247692413dd9ff1cce", "git-tree": "afe52a0d413f6e4dce23ba247692413dd9ff1cce",
"version": "15.2", "version": "15.2",

View File

@ -1,5 +1,10 @@
{ {
"versions": [ "versions": [
{
"git-tree": "3fbd85566107cc3a76ed800844569f1a7503f9d6",
"version": "3.0.8",
"port-version": 2
},
{ {
"git-tree": "17ce011827417025d6a29924ace0a474f1689c65", "git-tree": "17ce011827417025d6a29924ace0a474f1689c65",
"version": "3.0.8", "version": "3.0.8",

View File

@ -1,5 +1,10 @@
{ {
"versions": [ "versions": [
{
"git-tree": "2e624c2cf12a97a7a802e31ff1d28b9fa6ba9bde",
"version-date": "2023-03-02",
"port-version": 0
},
{ {
"git-tree": "bad453fe7f58edb2e8d0093692dcaa52347e446c", "git-tree": "bad453fe7f58edb2e8d0093692dcaa52347e446c",
"version-date": "2022-12-16", "version-date": "2022-12-16",