From 2ed5383f7b88b23975f9cfd325f6451fd8716fb2 Mon Sep 17 00:00:00 2001 From: Kai Pastor Date: Fri, 1 Oct 2021 08:58:36 +0200 Subject: [vcpkg_configure_make] Standardize `OPTIONS` list item handling (#19540) * Remove unused EXTRA_QUOTES * Uniformly invoke 'configure' * [libtasn1] Fix mingw build * Unify prefix handling * Revise install dir processing * x-add-version * Force libdir to lib (adopted from #19666) * [skip actions] CI rebuild * CR request: Put backslash before shell var * CR request: Use vcpkg_list * Update versions * Fix python3 options * Update versions * Bump python port-version. * CR request: Add comment about backslashes before prefix Co-authored-by: Billy Robert O'Neal III --- scripts/cmake/vcpkg_configure_make.cmake | 88 ++++++++++++++++---------------- 1 file changed, 43 insertions(+), 45 deletions(-) (limited to 'scripts') diff --git a/scripts/cmake/vcpkg_configure_make.cmake b/scripts/cmake/vcpkg_configure_make.cmake index a80641512..0b8e88be1 100644 --- a/scripts/cmake/vcpkg_configure_make.cmake +++ b/scripts/cmake/vcpkg_configure_make.cmake @@ -302,6 +302,7 @@ function(vcpkg_configure_make) set(_vcm_paths_with_spaces TRUE) endif() + set(CONFIGURE_ENV "V=1") # Pre-processing windows configure requirements if (VCPKG_TARGET_IS_WINDOWS) if(CMAKE_HOST_WIN32) @@ -351,7 +352,6 @@ function(vcpkg_configure_make) endif() endmacro() - set(CONFIGURE_ENV "V=1") # 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 @@ -448,17 +448,16 @@ function(vcpkg_configure_make) endif() endif() + # 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. + # CURRENT_INSTALLED_DIR: Pristine native path (unprotected spaces, Windows drive letters) + # _VCPKG_INSTALLED: Native path with escaped space characters + # _VCPKG_PREFIX: Path with unprotected spaces, but drive letters transformed for mingw/msys + string(REPLACE " " "\\ " _VCPKG_INSTALLED "${CURRENT_INSTALLED_DIR}") if(CMAKE_HOST_WIN32) - #Some PATH handling for dealing with spaces....some tools will still fail with that! - string(REPLACE " " "\\\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR}) - string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_PREFIX "${_VCPKG_PREFIX}") - set(_VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR}) - set(prefix_var "'\${prefix}'") # Windows needs extra quotes or else the variable gets expanded in the makefile! + string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" _VCPKG_PREFIX "${CURRENT_INSTALLED_DIR}") else() - string(REPLACE " " "\ " _VCPKG_PREFIX ${CURRENT_INSTALLED_DIR}) - string(REPLACE " " "\ " _VCPKG_INSTALLED ${CURRENT_INSTALLED_DIR}) - set(EXTRA_QUOTES) - set(prefix_var "\${prefix}") + set(_VCPKG_PREFIX "${CURRENT_INSTALLED_DIR}") endif() # macOS - cross-compiling support @@ -484,25 +483,26 @@ function(vcpkg_configure_make) "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}") # Set configure paths - set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}${EXTRA_QUOTES}") - set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG} "--prefix=${EXTRA_QUOTES}${_VCPKG_PREFIX}/debug${EXTRA_QUOTES}") + set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE} "--prefix=${_VCPKG_PREFIX}") + set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG} "--prefix=${_VCPKG_PREFIX}/debug") if(NOT _csc_NO_ADDITIONAL_PATHS) + # ${prefix} has an extra backslash to prevent early expansion when calling `bash -c configure "..."`. set(_csc_OPTIONS_RELEASE ${_csc_OPTIONS_RELEASE} # Important: These should all be relative to prefix! - "--bindir=${prefix_var}/tools/${PORT}/bin" - "--sbindir=${prefix_var}/tools/${PORT}/sbin" - "--libdir=${prefix_var}/lib" # On some Linux distributions lib64 is the default + "--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_var}/share/${PORT}" - "--docdir=${prefix_var}/share/${PORT}" - "--datarootdir=${prefix_var}/share/${PORT}") + "--mandir=\\\${prefix}/share/${PORT}" + "--docdir=\\\${prefix}/share/${PORT}" + "--datarootdir=\\\${prefix}/share/${PORT}") set(_csc_OPTIONS_DEBUG ${_csc_OPTIONS_DEBUG} # Important: These should all be relative to prefix! - "--bindir=${prefix_var}/../tools/${PORT}/debug/bin" - "--sbindir=${prefix_var}/../tools/${PORT}/debug/sbin" - "--libdir=${prefix_var}/lib" # On some Linux distributions lib64 is the default - "--includedir=${prefix_var}/../include" - "--datarootdir=${prefix_var}/share/${PORT}") + "--bindir=\\\${prefix}/../tools/${PORT}/debug/bin" + "--sbindir=\\\${prefix}/../tools/${PORT}/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 DISABLE_VERBOSE_FLAGS) @@ -534,18 +534,13 @@ function(vcpkg_configure_make) else() find_program(base_cmd bash REQUIRED) endif() - if(VCPKG_TARGET_IS_WINDOWS) - list(JOIN _csc_OPTIONS " " _csc_OPTIONS) - list(JOIN _csc_OPTIONS_RELEASE " " _csc_OPTIONS_RELEASE) - list(JOIN _csc_OPTIONS_DEBUG " " _csc_OPTIONS_DEBUG) - endif() # Setup include environment (since these are buildtype independent restoring them is unnecessary) macro(prepend_include_path var) if("${${var}_BACKUP}" STREQUAL "") - set(ENV{${var}} "${_VCPKG_INSTALLED}/include") + set(ENV{${var}} "${CURRENT_INSTALLED_DIR}/include") else() - set(ENV{${var}} "${_VCPKG_INSTALLED}/include${VCPKG_HOST_PATH_SEPARATOR}${${var}_BACKUP}") + set(ENV{${var}} "${CURRENT_INSTALLED_DIR}/include${VCPKG_HOST_PATH_SEPARATOR}${${var}_BACKUP}") endif() endmacro() # Used by CL @@ -693,10 +688,10 @@ function(vcpkg_configure_make) endif() else() set(_link_dirs) - if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib") + if(EXISTS "${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib") set(_link_dirs "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib") endif() - if(EXISTS "{_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link") + if(EXISTS "{CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link") set(_link_dirs "${_link_dirs} -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link") endif() string(STRIP "${_link_dirs}" _link_dirs) @@ -726,10 +721,10 @@ function(vcpkg_configure_make) endif() else() set(_link_dirs) - if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib") + if(EXISTS "${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib") set(_link_dirs "-L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib") endif() - if(EXISTS "{_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link") + if(EXISTS "{CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link") set(_link_dirs "${_link_dirs} -L${_VCPKG_INSTALLED}${PATH_SUFFIX_${_VAR_SUFFIX}}/lib/manual-link") endif() string(STRIP "${_link_dirs}" _link_dirs) @@ -738,6 +733,15 @@ function(vcpkg_configure_make) unset(_VAR_SUFFIX) endif() + foreach(var IN ITEMS _csc_OPTIONS _csc_OPTIONS_RELEASE _csc_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(_buildtype IN LISTS _buildtypes) foreach(ENV_VAR ${_csc_CONFIG_DEPENDENT_ENVIRONMENT}) if(DEFINED ENV{${ENV_VAR}}) @@ -788,27 +792,21 @@ function(vcpkg_configure_make) set(_lib_env_vars LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH) foreach(_lib_env_var IN LISTS _lib_env_vars) set(_link_path) - if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib") - set(_link_path "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib") + if(EXISTS "${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/lib") + set(_link_path "${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/lib") endif() - if(EXISTS "${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link") + if(EXISTS "${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/lib/manual-link") if(_link_path) set(_link_path "${_link_path}${VCPKG_HOST_PATH_SEPARATOR}") endif() - set(_link_path "${_link_path}${_VCPKG_INSTALLED}${PATH_SUFFIX_${_buildtype}}/lib/manual-link") + set(_link_path "${_link_path}${CURRENT_INSTALLED_DIR}${PATH_SUFFIX_${_buildtype}}/lib/manual-link") endif() set(ENV{${_lib_env_var}} "${_link_path}${${_lib_env_var}_PATHLIKE_CONCAT}") endforeach() unset(_link_path) unset(_lib_env_vars) - if(CMAKE_HOST_WIN32) - set(command "${base_cmd}" -c "${CONFIGURE_ENV} ./${RELATIVE_BUILD_PATH}/configure ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}") - elseif(VCPKG_TARGET_IS_WINDOWS) - set(command "${base_cmd}" -c "${CONFIGURE_ENV} $@" -- "./${RELATIVE_BUILD_PATH}/configure" ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}) - else() - set(command "${base_cmd}" "./${RELATIVE_BUILD_PATH}/configure" ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}) - endif() + set(command "${base_cmd}" -c "${CONFIGURE_ENV} ./${RELATIVE_BUILD_PATH}/configure ${_csc_BUILD_TRIPLET} ${_csc_OPTIONS} ${_csc_OPTIONS_${_buildtype}}") if(_csc_ADD_BIN_TO_PATH) set(PATH_BACKUP $ENV{PATH}) -- cgit v1.2.3