diff options
author | Stephen Kelly <steveire@gmail.com> | 2014-10-30 23:41:53 (GMT) |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2014-11-24 20:54:41 (GMT) |
commit | 4cf5179c77237f3eb56f85eddebc43895691694c (patch) | |
tree | 4ab200eaf6c05ccd098eeb0f1101c0c6e2745c89 /Tests | |
parent | 2ed0088b2abc591bb5ba6b4a13ee9997231883eb (diff) | |
download | CMake-4cf5179c77237f3eb56f85eddebc43895691694c.zip CMake-4cf5179c77237f3eb56f85eddebc43895691694c.tar.gz CMake-4cf5179c77237f3eb56f85eddebc43895691694c.tar.bz2 |
WCDH: Make it possible to generate multiple files.
Extend the write_compiler_detection_header interface to allow
specifying a location for supplementary files, and getting the
list of resulting files as a variable.
Diffstat (limited to 'Tests')
14 files changed, 115 insertions, 23 deletions
diff --git a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt index 645cc65..b1bc822 100644 --- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt +++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt @@ -67,6 +67,22 @@ add_executable(WriteCompilerDetectionHeader main.cpp) set_property(TARGET WriteCompilerDetectionHeader PROPERTY CXX_STANDARD 98) set_defines(WriteCompilerDetectionHeader "${true_defs}" "${false_defs}") +write_compiler_detection_header( + FILE "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/multi_file_compiler_detection.h" + PREFIX MULTI + OUTPUT_FILES_VAR multi_files + OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files/compiler_support" + COMPILERS GNU Clang + VERSION 3.1 + FEATURES + ${cxx_known_features} ${c_known_features} +) + +add_executable(multi_files multi_files.cpp) +set_property(TARGET multi_files PROPERTY CXX_STANDARD 98) +target_include_directories(multi_files PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files) +set_defines(multi_files "${true_defs}" "${false_defs}") + if(MSVC) return() # MSVC has only one mode. endif() @@ -86,3 +102,8 @@ endif() add_executable(WriteCompilerDetectionHeader_11 main.cpp) set_property(TARGET WriteCompilerDetectionHeader_11 PROPERTY CXX_STANDARD 11) set_defines(WriteCompilerDetectionHeader_11 "${true_defs}" "${false_defs}") + +add_executable(multi_files_11 multi_files.cpp) +set_property(TARGET multi_files_11 PROPERTY CXX_STANDARD 11) +target_include_directories(multi_files_11 PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/compiler_multi_files) +set_defines(multi_files_11 "${true_defs}" "${false_defs}") diff --git a/Tests/Module/WriteCompilerDetectionHeader/compile_tests.h b/Tests/Module/WriteCompilerDetectionHeader/compile_tests.h new file mode 100644 index 0000000..8b547d8 --- /dev/null +++ b/Tests/Module/WriteCompilerDetectionHeader/compile_tests.h @@ -0,0 +1,25 @@ + +#define JOIN_IMPL(A, B) A ## B +#define JOIN(A, B) JOIN_IMPL(A, B) + +#define CHECK(FEATURE) (JOIN(PREFIX, JOIN(_COMPILER_, FEATURE)) == JOIN(EXPECTED_COMPILER_, FEATURE)) + +#if !CHECK(CXX_DELEGATING_CONSTRUCTORS) +#error cxx_delegating_constructors expected availability did not match. +#endif + +#if !CHECK(CXX_VARIADIC_TEMPLATES) +#error cxx_variadic_templates expected availability did not match. +#endif + +#if !CHECK(VERSION_MAJOR) +#error Compiler major version did not match. +#endif + +#if !CHECK(VERSION_MINOR) +#error Compiler minor version did not match. +#endif + +#if !CHECK(VERSION_PATCH) +#error Compiler patch version did not match. +#endif diff --git a/Tests/Module/WriteCompilerDetectionHeader/main.cpp b/Tests/Module/WriteCompilerDetectionHeader/main.cpp index b807ad5..82b2191 100644 --- a/Tests/Module/WriteCompilerDetectionHeader/main.cpp +++ b/Tests/Module/WriteCompilerDetectionHeader/main.cpp @@ -1,29 +1,8 @@ #include "test_compiler_detection.h" -#define JOIN_IMPL(A, B) A ## B -#define JOIN(A, B) JOIN_IMPL(A, B) -#define CHECK(FEATURE) (JOIN(TEST_COMPILER_, FEATURE) == JOIN(EXPECTED_COMPILER_, FEATURE)) - -#if !CHECK(CXX_DELEGATING_CONSTRUCTORS) -#error cxx_delegating_constructors expected availability did not match. -#endif - -#if !CHECK(CXX_VARIADIC_TEMPLATES) -#error cxx_variadic_templates expected availability did not match. -#endif - -#if !CHECK(VERSION_MAJOR) -#error Compiler major version did not match. -#endif - -#if !CHECK(VERSION_MINOR) -#error Compiler minor version did not match. -#endif - -#if !CHECK(VERSION_PATCH) -#error Compiler patch version did not match. -#endif +#define PREFIX TEST +#include "compile_tests.h" int main() { diff --git a/Tests/Module/WriteCompilerDetectionHeader/multi_files.cpp b/Tests/Module/WriteCompilerDetectionHeader/multi_files.cpp new file mode 100644 index 0000000..ca29823 --- /dev/null +++ b/Tests/Module/WriteCompilerDetectionHeader/multi_files.cpp @@ -0,0 +1,10 @@ + +#include "multi_file_compiler_detection.h" + +#define PREFIX MULTI +#include "compile_tests.h" + +int main() +{ + return 0; +} diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir-result.txt b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir-stderr.txt b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir-stderr.txt new file mode 100644 index 0000000..6658d5d --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir-stderr.txt @@ -0,0 +1,6 @@ +CMake Error at .*Modules/WriteCompilerDetectionHeader.cmake:[0-9]+ \(message\): + The compiler-specific output directory must be within the same directory as + the main file. +Call Stack \(most recent call first\): + MultiBadOutDir.cmake:4 \(write_compiler_detection_header\) + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir.cmake b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir.cmake new file mode 100644 index 0000000..b545bee --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiBadOutDir.cmake @@ -0,0 +1,12 @@ + +include(WriteCompilerDetectionHeader) + +write_compiler_detection_header( + FILE "${CMAKE_CURRENT_BINARY_DIR}/dir/somefile" + PREFIX Pref + OUTPUT_FILES_VAR outfiles + OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}" + COMPILERS GNU + VERSION 3.1 + FEATURES cxx_auto_type +) diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar-result.txt b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar-stderr.txt b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar-stderr.txt new file mode 100644 index 0000000..50f9b6f --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar-stderr.txt @@ -0,0 +1,5 @@ +CMake Error at .*Modules/WriteCompilerDetectionHeader.cmake:[0-9]+ \(message\): + If OUTPUT_DIR is specified, then OUTPUT_FILES_VAR must also be specified. +Call Stack \(most recent call first\): + MultiNoOutFileVar.cmake:4 \(write_compiler_detection_header\) + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar.cmake b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar.cmake new file mode 100644 index 0000000..e42b0ed --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutFileVar.cmake @@ -0,0 +1,11 @@ + +include(WriteCompilerDetectionHeader) + +write_compiler_detection_header( + FILE "${CMAKE_CURRENT_BINARY_DIR}/somefile" + PREFIX Pref + OUTPUT_DIR outfiles + COMPILERS GNU + VERSION 3.1 + FEATURES cxx_auto_type +) diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir-result.txt b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir-stderr.txt b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir-stderr.txt new file mode 100644 index 0000000..1c83a1a --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir-stderr.txt @@ -0,0 +1,5 @@ +CMake Error at .*Modules/WriteCompilerDetectionHeader.cmake:[0-9]+ \(message\): + If OUTPUT_FILES_VAR is specified, then OUTPUT_DIR must also be specified. +Call Stack \(most recent call first\): + MultiNoOutdir.cmake:4 \(write_compiler_detection_header\) + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir.cmake b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir.cmake new file mode 100644 index 0000000..e8c2ae1 --- /dev/null +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/MultiNoOutdir.cmake @@ -0,0 +1,11 @@ + +include(WriteCompilerDetectionHeader) + +write_compiler_detection_header( + FILE "${CMAKE_CURRENT_BINARY_DIR}/somefile" + PREFIX Pref + OUTPUT_FILES_VAR outfiles + COMPILERS GNU + VERSION 3.1 + FEATURES cxx_auto_type +) diff --git a/Tests/RunCMake/WriteCompilerDetectionHeader/RunCMakeTest.cmake b/Tests/RunCMake/WriteCompilerDetectionHeader/RunCMakeTest.cmake index 6dded44..a834e6d 100644 --- a/Tests/RunCMake/WriteCompilerDetectionHeader/RunCMakeTest.cmake +++ b/Tests/RunCMake/WriteCompilerDetectionHeader/RunCMakeTest.cmake @@ -12,3 +12,7 @@ run_cmake(InvalidFeature) run_cmake(InvalidCXXFeature) run_cmake(EmptyPrefix) run_cmake(InvalidPrefix) +run_cmake(MultiNoOutdir) +run_cmake(MultiNoOutFileVar) +set(NO_CACHE TRUE) +run_cmake(MultiBadOutDir) |