Merge topic 'feature-absence-hard-error'
8d0b1cca Features: FATAL_ERROR on compilers with no recorded features. 447fbb3f Tests: Execute compile features tests unconditionally. 597bb72e Tests: Run RunCMake.target_compile_features unconditionally.
This commit is contained in:
commit
b10083876c
@ -4604,8 +4604,28 @@ AddRequiredTargetFeature(cmTarget *target, const std::string& feature,
|
|||||||
|
|
||||||
if (!featuresKnown || !*featuresKnown)
|
if (!featuresKnown || !*featuresKnown)
|
||||||
{
|
{
|
||||||
// We know of no features for the compiler at all.
|
cmOStringStream e;
|
||||||
return true;
|
if (error)
|
||||||
|
{
|
||||||
|
e << "no";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
e << "No";
|
||||||
|
}
|
||||||
|
e << " known features for compiler\n\""
|
||||||
|
<< this->GetDefinition("CMAKE_" + lang + "_COMPILER_ID")
|
||||||
|
<< "\"\nversion "
|
||||||
|
<< this->GetDefinition("CMAKE_" + lang + "_COMPILER_VERSION") << ".";
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
*error = e.str();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this->IssueMessage(cmake::FATAL_ERROR, e.str());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> availableFeatures;
|
std::vector<std::string> availableFeatures;
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(target_compile_features)
|
project(target_compile_features)
|
||||||
|
|
||||||
|
if (NOT CMAKE_CXX_COMPILE_FEATURES)
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_dummy.cpp"
|
||||||
|
"int main(int,char**) { return 0; }\n"
|
||||||
|
)
|
||||||
|
add_executable(target_compile_features "${CMAKE_CURRENT_BINARY_DIR}/test_dummy.cpp")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
|
|
||||||
add_executable(target_compile_features main.cpp)
|
add_executable(target_compile_features main.cpp)
|
||||||
|
@ -197,11 +197,9 @@ if(BUILD_TESTING)
|
|||||||
ADD_TEST_MACRO(TarTest TarTest)
|
ADD_TEST_MACRO(TarTest TarTest)
|
||||||
ADD_TEST_MACRO(SystemInformation SystemInformation)
|
ADD_TEST_MACRO(SystemInformation SystemInformation)
|
||||||
ADD_TEST_MACRO(MathTest MathTest)
|
ADD_TEST_MACRO(MathTest MathTest)
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL GNU
|
ADD_TEST_MACRO(CompileFeatures CompileFeatures)
|
||||||
AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
|
ADD_TEST_MACRO(CMakeCommands.target_compile_features target_compile_features)
|
||||||
ADD_TEST_MACRO(CompileFeatures CompileFeatures)
|
|
||||||
ADD_TEST_MACRO(CMakeCommands.target_compile_features target_compile_features)
|
|
||||||
endif()
|
|
||||||
# assume no resources building to test
|
# assume no resources building to test
|
||||||
set(TEST_RESOURCES FALSE)
|
set(TEST_RESOURCES FALSE)
|
||||||
# for windows and cygwin assume we have resources
|
# for windows and cygwin assume we have resources
|
||||||
|
@ -3,6 +3,14 @@ cmake_minimum_required(VERSION 3.0)
|
|||||||
|
|
||||||
project(CompileFeatures)
|
project(CompileFeatures)
|
||||||
|
|
||||||
|
if (NOT CMAKE_CXX_COMPILE_FEATURES)
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp"
|
||||||
|
"int main(int,char**) { return 0; }\n"
|
||||||
|
)
|
||||||
|
add_executable(CompileFeatures "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
macro(run_test feature)
|
macro(run_test feature)
|
||||||
if (";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ${feature})
|
if (";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ${feature})
|
||||||
add_library(test_${feature} OBJECT ${feature}.cpp)
|
add_library(test_${feature} OBJECT ${feature}.cpp)
|
||||||
|
@ -126,9 +126,7 @@ add_RunCMake_test(File_Generate)
|
|||||||
add_RunCMake_test(ExportWithoutLanguage)
|
add_RunCMake_test(ExportWithoutLanguage)
|
||||||
add_RunCMake_test(target_link_libraries)
|
add_RunCMake_test(target_link_libraries)
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL GNU AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
|
add_RunCMake_test(target_compile_features)
|
||||||
add_RunCMake_test(target_compile_features)
|
|
||||||
endif()
|
|
||||||
add_RunCMake_test(CheckModules)
|
add_RunCMake_test(CheckModules)
|
||||||
add_RunCMake_test(CommandLine)
|
add_RunCMake_test(CommandLine)
|
||||||
|
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
1
|
@ -0,0 +1,8 @@
|
|||||||
|
CMake Error at NoSupportedCxxFeatures.cmake:3 \(target_compile_features\):
|
||||||
|
target_compile_features no known features for compiler
|
||||||
|
|
||||||
|
"[^"]*"
|
||||||
|
|
||||||
|
version *[.0-9]+\.
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
CMakeLists.txt:3 \(include\)
|
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
add_library(no_features empty.cpp)
|
||||||
|
target_compile_features(no_features PRIVATE cxx_constexpr)
|
@ -0,0 +1 @@
|
|||||||
|
1
|
@ -0,0 +1,6 @@
|
|||||||
|
CMake Error in CMakeLists.txt:
|
||||||
|
No known features for compiler
|
||||||
|
|
||||||
|
"[^"]*"
|
||||||
|
|
||||||
|
version *[.0-9]+\.
|
@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
add_library(no_features empty.cpp)
|
||||||
|
target_compile_features(no_features PRIVATE $<1:cxx_constexpr>)
|
@ -7,3 +7,14 @@ run_cmake(NotAFeature_OriginDebug)
|
|||||||
run_cmake(NotAFeature_OriginDebugGenex)
|
run_cmake(NotAFeature_OriginDebugGenex)
|
||||||
run_cmake(NotAFeature_OriginDebugTransitive)
|
run_cmake(NotAFeature_OriginDebugTransitive)
|
||||||
run_cmake(NotAFeature_OriginDebug_target_compile_features)
|
run_cmake(NotAFeature_OriginDebug_target_compile_features)
|
||||||
|
|
||||||
|
run_cmake(generate_feature_list)
|
||||||
|
file(READ
|
||||||
|
"${RunCMake_BINARY_DIR}/generate_feature_list-build/features.txt"
|
||||||
|
FEATURES
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT FEATURES)
|
||||||
|
run_cmake(NoSupportedCxxFeatures)
|
||||||
|
run_cmake(NoSupportedCxxFeaturesGenex)
|
||||||
|
endif()
|
||||||
|
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/features.txt"
|
||||||
|
"${CMAKE_CXX_COMPILE_FEATURES}"
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user