mirror of
https://github.com/Kitware/CMake.git
synced 2026-08-02 22:09:35 +00:00
Merge topic 'print-sources'
d8dcfa7776Tests: Add tests for CMakePrintHelpersb7ddfcfe08cmake_print_properties(): Update grammar docse52b9e1270PrintHelpers: Document argument order restrictiond87ed4d88fPrintHelpers: Fix indentation5fa70e1738PrintHelpers: Rewrite a few more error messages2579503f45PrintHelpers: Fix target SOURCES property Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !7331
This commit is contained in:
@@ -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 )
|
||||
|
||||
cmake_parse_arguments(CPP "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
|
||||
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}")
|
||||
|
||||
if(CPP_UNPARSED_ARGUMENTS)
|
||||
message(FATAL_ERROR "Unknown keywords given to cmake_print_properties(): \"${CPP_UNPARSED_ARGUMENTS}\"")
|
||||
cmake_parse_arguments(
|
||||
CPP "${options}" "${oneValueArgs}" "${cpp_multiValueArgs}" ${ARGN})
|
||||
|
||||
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()
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
3
Tests/RunCMake/PrintHelpers/CMakeLists.txt
Normal file
3
Tests/RunCMake/PrintHelpers/CMakeLists.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
cmake_minimum_required(VERSION 3.23)
|
||||
project(${RunCMake_TEST} C)
|
||||
include(${RunCMake_TEST}.cmake)
|
||||
14
Tests/RunCMake/PrintHelpers/Properties-stdout.txt
Normal file
14
Tests/RunCMake/PrintHelpers/Properties-stdout.txt
Normal file
@@ -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\".*
|
||||
26
Tests/RunCMake/PrintHelpers/Properties.cmake
Normal file
26
Tests/RunCMake/PrintHelpers/Properties.cmake
Normal file
@@ -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
|
||||
)
|
||||
@@ -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\".*
|
||||
19
Tests/RunCMake/PrintHelpers/PropertiesSources.cmake
Normal file
19
Tests/RunCMake/PrintHelpers/PropertiesSources.cmake
Normal file
@@ -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
|
||||
)
|
||||
5
Tests/RunCMake/PrintHelpers/RunCMakeTest.cmake
Normal file
5
Tests/RunCMake/PrintHelpers/RunCMakeTest.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
include(RunCMake)
|
||||
|
||||
run_cmake(Variables)
|
||||
run_cmake(Properties)
|
||||
run_cmake(PropertiesSources)
|
||||
1
Tests/RunCMake/PrintHelpers/Variables-stdout.txt
Normal file
1
Tests/RunCMake/PrintHelpers/Variables-stdout.txt
Normal file
@@ -0,0 +1 @@
|
||||
-- source_dir="src" ; binary_dir="build"
|
||||
6
Tests/RunCMake/PrintHelpers/Variables.cmake
Normal file
6
Tests/RunCMake/PrintHelpers/Variables.cmake
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
set(source_dir "src")
|
||||
set(binary_dir "build")
|
||||
|
||||
include(CMakePrintHelpers)
|
||||
cmake_print_variables(source_dir binary_dir)
|
||||
6
Tests/RunCMake/PrintHelpers/nothing.c
Normal file
6
Tests/RunCMake/PrintHelpers/nothing.c
Normal file
@@ -0,0 +1,6 @@
|
||||
#include "nothing.h"
|
||||
|
||||
void nothing()
|
||||
{
|
||||
(void*)0;
|
||||
}
|
||||
8
Tests/RunCMake/PrintHelpers/nothing.h
Normal file
8
Tests/RunCMake/PrintHelpers/nothing.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef NOTHING_H
|
||||
#define NOTHING_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
void nothing();
|
||||
|
||||
#endif
|
||||
15
Tests/RunCMake/PrintHelpers/rot13.c
Normal file
15
Tests/RunCMake/PrintHelpers/rot13.c
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
9
Tests/RunCMake/PrintHelpers/rot13.h
Normal file
9
Tests/RunCMake/PrintHelpers/rot13.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef ROT13_H
|
||||
#define ROT13_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
void rot13(char* in);
|
||||
|
||||
#endif
|
||||
7
Tests/RunCMake/PrintHelpers/something.c
Normal file
7
Tests/RunCMake/PrintHelpers/something.c
Normal file
@@ -0,0 +1,7 @@
|
||||
#include "something.h"
|
||||
|
||||
int main()
|
||||
{
|
||||
nothing();
|
||||
return 0;
|
||||
}
|
||||
8
Tests/RunCMake/PrintHelpers/something.h
Normal file
8
Tests/RunCMake/PrintHelpers/something.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#ifndef SOMETHING_H
|
||||
#define SOMETHING_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "nothing.h"
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user