diff options
22 files changed, 198 insertions, 42 deletions
diff --git a/Modules/CMakePrintHelpers.cmake b/Modules/CMakePrintHelpers.cmake index 8c25a73..fb201dc 100644 --- a/Modules/CMakePrintHelpers.cmake +++ b/Modules/CMakePrintHelpers.cmake @@ -10,16 +10,19 @@ e.g. for debugging. :: - cmake_print_properties([TARGETS target1 .. targetN] - [SOURCES source1 .. sourceN] - [DIRECTORIES dir1 .. dirN] - [TESTS test1 .. testN] - [CACHE_ENTRIES entry1 .. entryN] - PROPERTIES prop1 .. propN ) + cmake_print_properties(<TARGETS [<target1> ...] | + SOURCES [<source1> ...] | + DIRECTORIES [<dir1> ...] | + TESTS [<test1> ...] | + CACHE_ENTRIES [<entry1> ...] > + PROPERTIES [<prop1> ...] ) This function prints the values of the properties of the given targets, source files, directories, tests or cache entries. Exactly one of the -scope keywords must be used. Example:: +scope keywords must be used. The scope keyword and its arguments must +come before the ``PROPERTIES`` keyword, in the arguments list. + +Example:: cmake_print_properties(TARGETS foo bar PROPERTIES LOCATION INTERFACE_INCLUDE_DIRECTORIES) @@ -56,17 +59,34 @@ endfunction() function(cmake_print_properties) set(options ) set(oneValueArgs ) - set(multiValueArgs TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES ) + set(cpp_multiValueArgs PROPERTIES ) + set(cppmode_multiValueArgs TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES ) + + string(JOIN " " _mode_names ${cppmode_multiValueArgs}) + set(_missing_mode_message + "Mode keyword missing in cmake_print_properties() call, there must be exactly one of ${_mode_names}") - cmake_parse_arguments(CPP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + cmake_parse_arguments( + CPP "${options}" "${oneValueArgs}" "${cpp_multiValueArgs}" ${ARGN}) - if(CPP_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unknown keywords given to cmake_print_properties(): \"${CPP_UNPARSED_ARGUMENTS}\"") + if(NOT CPP_PROPERTIES) + message(FATAL_ERROR + "Required argument PROPERTIES missing in cmake_print_properties() call") return() endif() - if(NOT CPP_PROPERTIES) - message(FATAL_ERROR "Required argument PROPERTIES missing in cmake_print_properties() call") + if(NOT CPP_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "${_missing_mode_message}") + return() + endif() + + cmake_parse_arguments( + CPPMODE "${options}" "${oneValueArgs}" "${cppmode_multiValueArgs}" + ${CPP_UNPARSED_ARGUMENTS}) + + if(CPPMODE_UNPARSED_ARGUMENTS) + message(FATAL_ERROR + "Unknown keywords given to cmake_print_properties(): \"${CPPMODE_UNPARSED_ARGUMENTS}\"") return() endif() @@ -74,32 +94,32 @@ function(cmake_print_properties) set(items) set(keyword) - if(CPP_TARGETS) - set(items ${CPP_TARGETS}) + if(CPPMODE_TARGETS) + set(items ${CPPMODE_TARGETS}) set(mode ${mode} TARGETS) set(keyword TARGET) endif() - if(CPP_SOURCES) - set(items ${CPP_SOURCES}) + if(CPPMODE_SOURCES) + set(items ${CPPMODE_SOURCES}) set(mode ${mode} SOURCES) set(keyword SOURCE) endif() - if(CPP_TESTS) - set(items ${CPP_TESTS}) + if(CPPMODE_TESTS) + set(items ${CPPMODE_TESTS}) set(mode ${mode} TESTS) set(keyword TEST) endif() - if(CPP_DIRECTORIES) - set(items ${CPP_DIRECTORIES}) + if(CPPMODE_DIRECTORIES) + set(items ${CPPMODE_DIRECTORIES}) set(mode ${mode} DIRECTORIES) set(keyword DIRECTORY) endif() - if(CPP_CACHE_ENTRIES) - set(items ${CPP_CACHE_ENTRIES}) + if(CPPMODE_CACHE_ENTRIES) + set(items ${CPPMODE_CACHE_ENTRIES}) set(mode ${mode} CACHE_ENTRIES) # This is a workaround for the fact that passing `CACHE` as an argument to # set() causes a cache variable to be set. @@ -108,13 +128,14 @@ function(cmake_print_properties) endif() if(NOT mode) - message(FATAL_ERROR "Mode keyword missing in cmake_print_properties() call, must be one of TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES") + message(FATAL_ERROR "${_missing_mode_message}") return() endif() list(LENGTH mode modeLength) if("${modeLength}" GREATER 1) - message(FATAL_ERROR "Multiple mode keyword used in cmake_print_properties() call, it must be exactly one of TARGETS SOURCES TESTS DIRECTORIES CACHE_ENTRIES PROPERTIES") + message(FATAL_ERROR + "Multiple mode keywords used in cmake_print_properties() call, there must be exactly one of ${_mode_names}.") return() endif() @@ -124,8 +145,8 @@ function(cmake_print_properties) set(itemExists TRUE) if(keyword STREQUAL "TARGET") if(NOT TARGET ${item}) - set(itemExists FALSE) - string(APPEND msg "\n No such TARGET \"${item}\" !\n\n") + set(itemExists FALSE) + string(APPEND msg "\n No such TARGET \"${item}\" !\n\n") endif() endif() diff --git a/Modules/FindPython/Support.cmake b/Modules/FindPython/Support.cmake index cbb6c1c..8e98500 100644 --- a/Modules/FindPython/Support.cmake +++ b/Modules/FindPython/Support.cmake @@ -1248,9 +1248,18 @@ endif() # Python and Anaconda distributions: define which architectures can be used if (CMAKE_SIZEOF_VOID_P) - # In this case, search only for 64bit or 32bit math (EXPR _${_PYTHON_PREFIX}_ARCH "${CMAKE_SIZEOF_VOID_P} * 8") - set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH}) + if ("Development.Module" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS + OR "Development.Embed" IN_LIST ${_PYTHON_PREFIX}_FIND_COMPONENTS) + # In this case, search only for 64bit or 32bit + set (_${_PYTHON_PREFIX}_ARCH2 ${_${_PYTHON_PREFIX}_ARCH}) + else() + if (_${_PYTHON_PREFIX}_ARCH EQUAL "32") + set (_${_PYTHON_PREFIX}_ARCH2 64) + else() + set (_${_PYTHON_PREFIX}_ARCH2 32) + endif() + endif() else() # architecture unknown, search for both 64bit and 32bit set (_${_PYTHON_PREFIX}_ARCH 64) diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 3a8573a..91a9bf7 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,7 +1,7 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 23) -set(CMake_VERSION_PATCH 20220606) +set(CMake_VERSION_PATCH 20220607) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 7fdfaea..24e98f4 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -3367,7 +3367,7 @@ if(BUILD_TESTING) set(JavaExportImport_BUILD_OPTIONS -DCMake_TEST_NESTED_MAKE_PROGRAM:FILEPATH=${CMake_TEST_EXPLICIT_MAKE_PROGRAM}) ADD_TEST_MACRO(JavaExportImport JavaExportImport) - get_filename_component(JNIPATH ${JAVA_COMPILE} PATH) + get_filename_component(JNIPATH ${Java_JAVAC_EXECUTABLE} PATH) find_file(JNI_H jni.h "${JNIPATH}/../include" "${JNIPATH}/../java/include") diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 7e17450..4b00212 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -465,6 +465,7 @@ add_RunCMake_test(load_cache) add_RunCMake_test(math) add_RunCMake_test(message) add_RunCMake_test(option) +add_RunCMake_test(PrintHelpers) add_RunCMake_test(project -DCMake_TEST_RESOURCES=${CMake_TEST_RESOURCES}) add_RunCMake_test(project_injected) add_RunCMake_test(DependencyProviders) diff --git a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake index ad9619e..a001c5d 100644 --- a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake +++ b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake @@ -71,11 +71,7 @@ macro(mangle_flags variable) endmacro() function(test_cmp0128_old_same_standard) - if(extensions_default) - set(flag_ext "_EXT") - endif() - - set(flag "${${lang}${${lang}_STANDARD_DEFAULT}${flag_ext}_FLAG}") + set(flag "${${lang}${${lang}_STANDARD_DEFAULT}_EXT_FLAG}") if(NOT flag) return() diff --git a/Tests/RunCMake/PrintHelpers/CMakeLists.txt b/Tests/RunCMake/PrintHelpers/CMakeLists.txt new file mode 100644 index 0000000..6d4fe63 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/CMakeLists.txt @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.23) +project(${RunCMake_TEST} C) +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/PrintHelpers/Properties-stdout.txt b/Tests/RunCMake/PrintHelpers/Properties-stdout.txt new file mode 100644 index 0000000..c52f7b6 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/Properties-stdout.txt @@ -0,0 +1,14 @@ +.*Properties for TARGET nothing:.* +.*nothing.LINKER_LANGUAGE = <NOTFOUND>.* +.*nothing.TYPE = \"STATIC_LIBRARY\".* +.*Properties for TARGET something:.* +.*something.LINKER_LANGUAGE = <NOTFOUND>.* +.*something.TYPE = \"EXECUTABLE\".* ++ +.* +.*Properties for SOURCE nothing.c:.* +.*nothing.c.COMPILE_DEFINITIONS = <NOTFOUND>.* +.*nothing.c.LANGUAGE = \"C\".* +.*Properties for SOURCE something.c:.* +.*something.c.COMPILE_DEFINITIONS = \"SOMETHING=1\".* +.*something.c.LANGUAGE = \"C\".* diff --git a/Tests/RunCMake/PrintHelpers/Properties.cmake b/Tests/RunCMake/PrintHelpers/Properties.cmake new file mode 100644 index 0000000..3e8ecd1 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/Properties.cmake @@ -0,0 +1,26 @@ +enable_language(C) + +set_property(SOURCE nothing.c PROPERTY LANGUAGE C) +set_property(SOURCE something.c PROPERTY + COMPILE_DEFINITIONS SOMETHING=1) + +add_library(nothing STATIC nothing.c nothing.h) + +add_executable(something something.c something.h) +target_link_libraries(something PUBLIC nothing) + +include(CMakePrintHelpers) + +cmake_print_properties( + TARGETS nothing something + PROPERTIES + LINKER_LANGUAGE + TYPE +) + +cmake_print_properties( + SOURCES nothing.c something.c + PROPERTIES + COMPILE_DEFINITIONS + LANGUAGE +) diff --git a/Tests/RunCMake/PrintHelpers/PropertiesSources-stdout.cmake b/Tests/RunCMake/PrintHelpers/PropertiesSources-stdout.cmake new file mode 100644 index 0000000..93b3df0 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/PropertiesSources-stdout.cmake @@ -0,0 +1,8 @@ +.*Properties for TARGET rot13:.* +.*rot13.SOURCES = \"rot13.c;rot13.h\".* +.*rot13.POSITION_INDEPENDENT_CODE = \"True\".* ++ +.*--.* +.*Properties for SOURCE rot13.c:.* +.*rot13.c.LOCATION = \"[^\"]*/PrintHelpers/rot13.c\".* +.*rot13.c.LANGUAGE = \"C\".* diff --git a/Tests/RunCMake/PrintHelpers/PropertiesSources.cmake b/Tests/RunCMake/PrintHelpers/PropertiesSources.cmake new file mode 100644 index 0000000..f102b94 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/PropertiesSources.cmake @@ -0,0 +1,19 @@ +set_property(SOURCE rot13.c PROPERTY LANGUAGE C) + +add_library(rot13 SHARED rot13.c rot13.h) + +include(CMakePrintHelpers) + +cmake_print_properties( + TARGETS rot13 + PROPERTIES + SOURCES + POSITION_INDEPENDENT_CODE +) + +cmake_print_properties( + SOURCES rot13.c + PROPERTIES + LOCATION + LANGUAGE +) diff --git a/Tests/RunCMake/PrintHelpers/RunCMakeTest.cmake b/Tests/RunCMake/PrintHelpers/RunCMakeTest.cmake new file mode 100644 index 0000000..5b8ad0c --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/RunCMakeTest.cmake @@ -0,0 +1,5 @@ +include(RunCMake) + +run_cmake(Variables) +run_cmake(Properties) +run_cmake(PropertiesSources) diff --git a/Tests/RunCMake/PrintHelpers/Variables-stdout.txt b/Tests/RunCMake/PrintHelpers/Variables-stdout.txt new file mode 100644 index 0000000..ca95c8d --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/Variables-stdout.txt @@ -0,0 +1 @@ +-- source_dir="src" ; binary_dir="build" diff --git a/Tests/RunCMake/PrintHelpers/Variables.cmake b/Tests/RunCMake/PrintHelpers/Variables.cmake new file mode 100644 index 0000000..88f5ad1 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/Variables.cmake @@ -0,0 +1,6 @@ + +set(source_dir "src") +set(binary_dir "build") + +include(CMakePrintHelpers) +cmake_print_variables(source_dir binary_dir) diff --git a/Tests/RunCMake/PrintHelpers/nothing.c b/Tests/RunCMake/PrintHelpers/nothing.c new file mode 100644 index 0000000..32b7b39 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/nothing.c @@ -0,0 +1,6 @@ +#include "nothing.h" + +void nothing() +{ + (void*)0; +} diff --git a/Tests/RunCMake/PrintHelpers/nothing.h b/Tests/RunCMake/PrintHelpers/nothing.h new file mode 100644 index 0000000..ae86667 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/nothing.h @@ -0,0 +1,8 @@ +#ifndef NOTHING_H +#define NOTHING_H + +#include <stdlib.h> + +void nothing(); + +#endif diff --git a/Tests/RunCMake/PrintHelpers/rot13.c b/Tests/RunCMake/PrintHelpers/rot13.c new file mode 100644 index 0000000..053bebd --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/rot13.c @@ -0,0 +1,15 @@ +#include "rot13.h" + +void rot13(char* in) +{ + char* end = in + strlen(in); + for (char* c = in; c < end; c++) { + if (*c >= 'a' && *c <= 'z') { + *c += (*c < 'n') ? 13 : -13; + continue; + } + if (*c >= 'A' && *c <= 'Z') { + *c += (*c < 'N') ? 13 : -13; + } + } +} diff --git a/Tests/RunCMake/PrintHelpers/rot13.h b/Tests/RunCMake/PrintHelpers/rot13.h new file mode 100644 index 0000000..9afea5f --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/rot13.h @@ -0,0 +1,9 @@ +#ifndef ROT13_H +#define ROT13_H + +#include <stdlib.h> +#include <string.h> + +void rot13(char* in); + +#endif diff --git a/Tests/RunCMake/PrintHelpers/something.c b/Tests/RunCMake/PrintHelpers/something.c new file mode 100644 index 0000000..a2bc425 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/something.c @@ -0,0 +1,7 @@ +#include "something.h" + +int main() +{ + nothing(); + return 0; +} diff --git a/Tests/RunCMake/PrintHelpers/something.h b/Tests/RunCMake/PrintHelpers/something.h new file mode 100644 index 0000000..667ee99 --- /dev/null +++ b/Tests/RunCMake/PrintHelpers/something.h @@ -0,0 +1,8 @@ +#ifndef SOMETHING_H +#define SOMETHING_H + +#include <stdlib.h> + +#include "nothing.h" + +#endif diff --git a/Utilities/Release/linux/aarch64/cache.txt b/Utilities/Release/linux/aarch64/cache.txt index ebfed73..87851d5 100644 --- a/Utilities/Release/linux/aarch64/cache.txt +++ b/Utilities/Release/linux/aarch64/cache.txt @@ -3,9 +3,6 @@ CMAKE_BUILD_TYPE:STRING=Release CMAKE_C_STANDARD:STRING=11 CMAKE_CXX_STANDARD:STRING=14 -# Require only older APIs where possible. -CMAKE_C_FLAGS:STRING=-D_POSIX_C_SOURCE=199506L -D_POSIX_SOURCE=1 -D_SVID_SOURCE=1 -D_BSD_SOURCE=1 - # Link C++ library statically. CMAKE_EXE_LINKER_FLAGS:STRING=-static-libstdc++ -static-libgcc diff --git a/Utilities/Release/linux/x86_64/cache.txt b/Utilities/Release/linux/x86_64/cache.txt index a422af3..d32c3dd 100644 --- a/Utilities/Release/linux/x86_64/cache.txt +++ b/Utilities/Release/linux/x86_64/cache.txt @@ -3,9 +3,6 @@ CMAKE_BUILD_TYPE:STRING=Release CMAKE_C_STANDARD:STRING=11 CMAKE_CXX_STANDARD:STRING=14 -# Require only older APIs where possible. -CMAKE_C_FLAGS:STRING=-D_POSIX_C_SOURCE=199506L -D_POSIX_SOURCE=1 -D_SVID_SOURCE=1 -D_BSD_SOURCE=1 - # Link C++ library statically. CMAKE_EXE_LINKER_FLAGS:STRING=-static-libstdc++ -static-libgcc |