Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 11 additions & 10 deletions scripts/cmake/vcpkg_configure_make.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,9 @@ function(vcpkg_configure_make)
# Only for ports using autotools so we can assume that they follow the common conventions for build/target/host
set(_csc_BUILD_TRIPLET "--build=${BUILD_ARCH}-pc-mingw32") # This is required since we are running in a msys
# shell which will be otherwise identified as ${BUILD_ARCH}-pc-msys
if(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}") # we don't need to specify the additional flags if we build nativly.
if(VCPKG_DETECTED_CMAKE_C_COMPILER_TARGET)
string(APPEND _csc_BUILD_TRIPLET " --host=${VCPKG_DETECTED_CMAKE_C_COMPILER_TARGET}")
elseif(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}") # we don't need to specify the additional flags if we build nativly.
string(APPEND _csc_BUILD_TRIPLET " --host=${TARGET_ARCH}-pc-mingw32") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
endif()
if(VCPKG_TARGET_IS_UWP AND NOT _csc_BUILD_TRIPLET MATCHES "--host")
Expand Down Expand Up @@ -339,11 +341,10 @@ function(vcpkg_configure_make)
endif()
endforeach()
if (_csc_AUTOCONFIG OR _csc_USE_WRAPPERS) # 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
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")

_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} ${VCPKG_DETECTED_CMAKE_C_COMPILER_ARG1} -E")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} ${VCPKG_DETECTED_CMAKE_C_COMPILER_ARG1}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} ${VCPKG_DETECTED_CMAKE_C_COMPILER_ARG1}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER} ${VCPKG_DETECTED_CMAKE_CXX_COMPILER_ARG1}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV RC "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV WINDRES "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
if(VCPKG_DETECTED_CMAKE_AR)
Expand All @@ -352,10 +353,10 @@ function(vcpkg_configure_make)
_vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "ar-lib lib.exe -verbose")
endif()
else()
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CPP "${VCPKG_DETECTED_CMAKE_C_COMPILER} ${VCPKG_DETECTED_CMAKE_C_COMPILER_ARG1} -E")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC "${VCPKG_DETECTED_CMAKE_C_COMPILER} ${VCPKG_DETECTED_CMAKE_C_COMPILER_ARG1}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CC_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER} ${VCPKG_DETECTED_CMAKE_C_COMPILER_ARG1}")
_vcpkg_append_to_configure_environment(CONFIGURE_ENV CXX "${VCPKG_DETECTED_CMAKE_CXX_COMPILER} ${VCPKG_DETECTED_CMAKE_CXX_COMPILER_ARG1}")
if(VCPKG_DETECTED_CMAKE_AR)
_vcpkg_append_to_configure_environment(CONFIGURE_ENV AR "${VCPKG_DETECTED_CMAKE_AR}")
else()
Expand Down
39 changes: 39 additions & 0 deletions scripts/get_cmake_vars/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ foreach(_lang IN LISTS VCPKG_LANGUAGES)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_STANDARD)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_COMPILE_FEATURES)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_EXTENSION)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_COMPILER_ARG1)
list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_COMPILER_TARGET)
# Probably never required since implicit.
#list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES)
#list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_INCLUDE_DIRECTORIES)
Expand Down Expand Up @@ -74,6 +76,38 @@ endif()

project(get_cmake_vars LANGUAGES ${VCPKG_LANGUAGES})

macro(_vcpkg_add_option_to_var var option_var value_var)
if(${option_var} AND ${value_var})
if(${option_var} MATCHES "=$")
set(_sep "")
else()
set(_sep " ")
endif()
string(APPEND ${var} " ${${option_var}}${_sep}${${value_var}}")
endif()
endmacro()

# Configure a Makefile project by CC='${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}'.
# Why export CMAKE_${lang}_COMPILER_ARG1?
# Someone may use this variable to achieve multi-part compile commands like what the environment variable CC does.
# See https://gitlab.kitware.com/cmake/cmake/-/issues/17346.
# Another important reason is for GNU Build System Autoconf/Automake/Libtool.
# Some flags are common to CFLAGS and LDFLAGS, there are two approaches as documented at
# https://www.gnu.org/software/autoconf/manual/html_node/Preset-Output-Variables.html,
# i.e. add the flags to CC or to both CFLAGS and LDFLAGS.
# But Libtool will strip link flags when creating shared libraries,
# https://www.gnu.org/software/libtool/manual/html_node/Stripped-link-flags.html.
# For cross-compiling, the most important flag --target also gets stripped.
# https://git.savannah.gnu.org/cgit/libtool.git/tree/build-aux/ltmain.in or
# ltmain.sh which is copied into source code root directory after autoreconf -i
# has a list of "Flags to be passed through".
foreach(lang IN LISTS VCPKG_LANGUAGES)
if("CMAKE_${lang}_COMPILER_ARG1" IN_LIST VCPKG_VARS_TO_CHECK)
_vcpkg_add_option_to_var(CMAKE_${lang}_COMPILER_ARG1 CMAKE_${lang}_COMPILE_OPTIONS_TARGET CMAKE_${lang}_COMPILER_TARGET)
endif()
endforeach()


foreach(VAR IN LISTS VCPKG_VARS_TO_CHECK)
string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${VAR} \"${${VAR}}\")\n")
endforeach()
Expand Down Expand Up @@ -102,6 +136,11 @@ macro(_vcpkg_adjust_flags flag_var)
string(APPEND ${flag_var} " -isysroot ${CMAKE_OSX_SYSROOT}")
endif()
endif()
elseif("${flag_var}" IN_LIST VCPKG_LANG_FLAGS)
string(REPLACE "FLAGS" "" _prefix ${flag_var}) # CMAKE_<LANG>_
_vcpkg_add_option_to_var(${flag_var} ${_prefix}COMPILE_OPTIONS_SYSROOT CMAKE_SYSROOT)
_vcpkg_add_option_to_var(${flag_var} ${_prefix}COMPILE_OPTIONS_TARGET ${_prefix}COMPILER_TARGET)
_vcpkg_add_option_to_var(${flag_var} ${_prefix}COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN ${_prefix}COMPILER_EXTERNAL_TOOLCHAIN)
endif()
endmacro()

Expand Down