diff --git a/scripts/get_cmake_vars/CMakeLists.txt b/scripts/get_cmake_vars/CMakeLists.txt index 1f97de305d..8c21eccf1b 100644 --- a/scripts/get_cmake_vars/CMakeLists.txt +++ b/scripts/get_cmake_vars/CMakeLists.txt @@ -1,8 +1,26 @@ 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(OUTPUT_STRING) +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 list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING CMAKE_SYSTEM_NAME @@ -64,34 +82,23 @@ 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_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) - 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() foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK) if(CMAKE_HOST_WIN32) - string(REPLACE "\\" "/" ENV_${_env} "$ENV{${_env}}") - string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${ENV_${_env}}\")\n") + string(REPLACE "\\" "/" value "$ENV{${_env}}") + escaped(value "${value}") else() - string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"$ENV{${_env}}\")\n") + escaped(value "$ENV{${_env}}") endif() + string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${value}\")\n") endforeach() 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}}") if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") if("${flag_var}" STREQUAL "CMAKE_CXX_FLAGS") @@ -133,15 +140,16 @@ endmacro() foreach(flag IN LISTS VCPKG_FLAGS_TO_CHECK) string(STRIP "${${flag}}" ${flag}) # Strip leading and trailing whitespaces _vcpkg_adjust_flags(${flag}) - string(REPLACE [[\\]] [[\]] ${flag} "${${flag}}") - string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${${flag}}\")\n") + escaped(value "${${flag}}") + string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${value}\")\n") 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}) _vcpkg_adjust_flags(${flag}_${config}) - string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag}_${config} \"${CMAKE_${flag}_FLAGS_${config}}\")\n") - set(COMBINED_${flag}_${config} "${${flag}} ${${flag}_${config}}") - string(STRIP "${COMBINED_${flag}_${config}}" COMBINED_${flag}_${config}) - string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${flag}_${config} \"${COMBINED_${flag}_${config}}\")\n") + escaped(combined_value "${${flag}} ${${flag}_${config}}") + string(STRIP "${combined_value}" combined_value) + string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${flag}_${config} \"${combined_value}\")\n") endforeach() endforeach()