diff options
| author | Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> | 2020-11-10 18:52:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-10 09:52:02 -0800 |
| commit | 8de4ee858faf41fc6930c02203d873175940ea98 (patch) | |
| tree | 64d9e70e029042258ac46d90b9a717e597948306 /scripts/get_cmake_vars | |
| parent | 202ada4fcf552cd845fa4fd84778281c01b30199 (diff) | |
| download | vcpkg-8de4ee858faf41fc6930c02203d873175940ea98.tar.gz vcpkg-8de4ee858faf41fc6930c02203d873175940ea98.zip | |
[vcpkg/scripts] Add a way to get cmake compiler settings/flags (#12936)
* add function get_cmake_vars
* fine tuning.
* apply to make based ports.
* add log suffix on not windows platforms
* fix c&p error
* add previous LINK env
* setup env on windows and extract cpp flags correctly.
* Apply suggestions from code review
* commit changes from fontconfig PR
* Apply suggestions from code review
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
* cleanup docs
* add conversion from somelib.lib to -lsomelib
* add missing ar-lib wrapper
* small but important regex correction
* add latest changes from update_fontconfig PR
* Apply suggestions from code review
first set which don't need special attention
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
* Apply suggestions from code review
one more simple change
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
* [x264] set env AS
* fix bugs due to refactor
* use subpath everywhere
* apply changes from CR
* remove unnecessary lines 41 & 44
* remove flag transformation
* reintroduce the flag / to - transformation for MSVC
* Apply suggestions from code review
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
* rename the function
* rename function/variables
* transform flags list
* Apply suggestions from code review
* fix vcpkg_build_make due to the variable name change
* fix another case of function renaming regressions
* only rename config.log if it exists
* actually add the script after vcpkg_common_functions was deleted.
* remove setting of ldflags if path contains spaces
Co-authored-by: nicole mazzuca <mazzucan@outlook.com>
Co-authored-by: ras0219 <533828+ras0219@users.noreply.github.com>
Diffstat (limited to 'scripts/get_cmake_vars')
| -rw-r--r-- | scripts/get_cmake_vars/CMakeLists.txt | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/scripts/get_cmake_vars/CMakeLists.txt b/scripts/get_cmake_vars/CMakeLists.txt new file mode 100644 index 000000000..283f4ef87 --- /dev/null +++ b/scripts/get_cmake_vars/CMakeLists.txt @@ -0,0 +1,124 @@ +cmake_minimum_required(VERSION 3.17)
+
+set(VCPKG_LANGUAGES "C;CXX" CACHE STRING "Languages to enables for this project")
+
+set(OUTPUT_STRING)
+# Build default checklists
+list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING
+ CMAKE_SYSTEM_NAME
+ CMAKE_HOST_SYSTEM_NAME
+ CMAKE_SYSTEM_PROCESSOR
+ CMAKE_HOST_SYSTEM_PROCESSOR)
+# Programs to check
+set(PROGLIST AR RANLIB STRIP NM OBJDUMP DLLTOOL MT LINKER)
+foreach(prog IN LISTS PROGLIST)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${prog})
+endforeach()
+set(COMPILERS ${VCPKG_LANGUAGES} RC)
+foreach(prog IN LISTS COMPILERS)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${prog}_COMPILER)
+endforeach()
+# Variables to check
+foreach(_lang IN LISTS VCPKG_LANGUAGES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_STANDARD_INCLUDE_DIRECTORIES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_STANDARD_LIBRARIES)
+ 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)
+ # 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)
+ #list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_DIRECTORIES)
+ #list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_LIBRARIES)
+endforeach()
+list(REMOVE_DUPLICATES VCPKG_DEFAULT_VARS_TO_CHECK)
+
+# Environment variables to check.
+list(APPEND VCPKG_DEFAULT_ENV_VARS_TO_CHECK PATH INCLUDE C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)
+list(REMOVE_DUPLICATES VCPKG_DEFAULT_ENV_VARS_TO_CHECK)
+
+#Flags to check. Flags are a bit special since they are configuration aware.
+set(FLAGS ${VCPKG_LANGUAGES} RC SHARED_LINKER STATIC_LINKER EXE_LINKER)
+foreach(flag IN LISTS FLAGS)
+ list(APPEND VCPKG_DEFAULT_FLAGS_TO_CHECK CMAKE_${flag}_FLAGS)
+endforeach()
+list(REMOVE_DUPLICATES VCPKG_DEFAULT_FLAGS_TO_CHECK)
+
+# TODO if ever necessary: Properties to check
+
+set(VCPKG_VAR_PREFIX "VCPKG_DETECTED" CACHE STRING "Variable prefix to use for detected flags")
+set(VCPKG_VARS_TO_CHECK "${VCPKG_DEFAULT_VARS_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")
+
+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")
+endforeach()
+
+foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK)
+ IF(WIN32)
+ string(REPLACE "\\" "/" ENV_${_env} "$ENV{${_env}}")
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${ENV_${_env}}\")\n")
+ else()
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"$ENV{${_env}}\")\n")
+ endif()
+endforeach()
+
+foreach(flag IN LISTS VCPKG_FLAGS_TO_CHECK)
+ string(STRIP "${${flag}}" ${flag}) # Strip leading and trailing whitespaces
+ if(MSVC) # Transform MSVC /flags to -flags due to bash scripts intepreting /flag as a path.
+ string(REGEX REPLACE "(^| )/" "\\1-" ${flag} "${${flag}}")
+ endif()
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${${flag}}\")\n")
+ foreach(config IN LISTS VCPKG_CONFIGS)
+ string(STRIP "${${flag}_${config}}" ${flag}_${config})
+ if(MSVC)
+ string(REGEX REPLACE "(^| )/" "\\1-" ${flag}_${config} "${${flag}_${config}}")
+ endif()
+ 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")
+ endforeach()
+endforeach()
+
+
+file(WRITE "${VCPKG_OUTPUT_FILE}" "${OUTPUT_STRING}")
+
+# Programs:
+# CMAKE_AR
+# CMAKE_<LANG>_COMPILER_AR (Wrapper)
+# CMAKE_RANLIB
+# CMAKE_<LANG>_COMPILER_RANLIB
+# CMAKE_STRIP
+# CMAKE_NM
+# CMAKE_OBJDUMP
+# CMAKE_DLLTOOL
+# CMAKE_MT
+# CMAKE_LINKER
+# CMAKE_C_COMPILER
+# CMAKE_CXX_COMPILER
+# CMAKE_RC_COMPILER
+
+# Flags:
+# CMAKE_<LANG>_FLAGS
+# CMAKE_<LANG>_FLAGS_<CONFIG>
+# CMAKE_RC_FLAGS
+# CMAKE_SHARED_LINKER_FLAGS
+# CMAKE_STATIC_LINKER_FLAGS
+# CMAKE_STATIC_LINKER_FLAGS_<CONFIG>
+# CMAKE_EXE_LINKER_FLAGS
+# CMAKE_EXE_LINKER_FLAGS_<CONFIG>
|
