Browse Source

file(GENERATE): Test source properties

Output files get the source property `GENERATED` which is indirectly
checked by adding them to a library.
For a missing file that is not generated CMake will abort.

With the new behavior according CMP0070 relative files are generated
into the binary directory.
Josef Angstenberger 5 years ago
parent
commit
462b6d83e8

+ 4 - 0
Tests/RunCMake/File_Generate/RunCMakeTest.cmake

@@ -4,6 +4,10 @@ run_cmake(CMP0070-NEW)
 run_cmake(CMP0070-OLD)
 run_cmake(CMP0070-WARN)
 
+run_cmake(SourceProperty)
+run_cmake(SourceProperty-CMP0070-NEW)
+run_cmake(SourceProperty-CMP0070-OLD)
+
 run_cmake(CommandConflict)
 if(RunCMake_GENERATOR_IS_MULTI_CONFIG)
   run_cmake(OutputConflict)

+ 1 - 0
Tests/RunCMake/File_Generate/SourceProperty-CMP0070-NEW-result.txt

@@ -0,0 +1 @@
+1

+ 11 - 0
Tests/RunCMake/File_Generate/SourceProperty-CMP0070-NEW-stderr.txt

@@ -0,0 +1,11 @@
+^CMake Error at SourceProperty-CMP0070-NEW.cmake:[0-9]+ \(add_library\):
+  Cannot find source file:
+
+.*\/relative-output-NEW\.c
+
+  Tried extensions \.c \.C.*
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Generate step failed.  Build files cannot be regenerated correctly.$

+ 8 - 0
Tests/RunCMake/File_Generate/SourceProperty-CMP0070-NEW.cmake

@@ -0,0 +1,8 @@
+enable_language(C)
+add_library(foo)
+
+cmake_policy(SET CMP0070 NEW)
+file(GENERATE OUTPUT relative-output-NEW.c CONTENT "")
+target_sources(foo PRIVATE
+  "${CMAKE_CURRENT_SOURCE_DIR}/relative-output-NEW.c"
+)

+ 1 - 0
Tests/RunCMake/File_Generate/SourceProperty-CMP0070-OLD-result.txt

@@ -0,0 +1 @@
+1

+ 23 - 0
Tests/RunCMake/File_Generate/SourceProperty-CMP0070-OLD-stderr.txt

@@ -0,0 +1,23 @@
+^CMake Deprecation Warning at SourceProperty-CMP0070-OLD.cmake:[0-9]+ \(cmake_policy\):
+  The OLD behavior for policy CMP0070 will be removed from a future version
+  of CMake.
+
+  The cmake-policies\(7\) manual explains that the OLD behaviors of all
+  policies are deprecated and that a policy should be set to OLD only under
+  specific short-term circumstances.  Projects should be ported to the NEW
+  behavior and not rely on setting a policy to OLD.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Error at SourceProperty-CMP0070-OLD.cmake:[0-9]+ \(add_library\):
+  Cannot find source file:
+
+.*\/relative-output-OLD\.c
+
+  Tried extensions \.c \.C.*
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)
+
+
+CMake Generate step failed.  Build files cannot be regenerated correctly.$

+ 8 - 0
Tests/RunCMake/File_Generate/SourceProperty-CMP0070-OLD.cmake

@@ -0,0 +1,8 @@
+enable_language(C)
+add_library(foo)
+
+cmake_policy(SET CMP0070 OLD)
+file(GENERATE OUTPUT relative-output-OLD.c CONTENT "")
+target_sources(foo PRIVATE
+  "${CMAKE_CURRENT_BINARY_DIR}/relative-output-OLD.c"
+)

+ 10 - 0
Tests/RunCMake/File_Generate/SourceProperty-stderr.txt

@@ -0,0 +1,10 @@
+^CMake Deprecation Warning at SourceProperty.cmake:[0-9]+ \(cmake_policy\):
+  The OLD behavior for policy CMP0070 will be removed from a future version
+  of CMake.
+
+  The cmake-policies\(7\) manual explains that the OLD behaviors of all
+  policies are deprecated and that a policy should be set to OLD only under
+  specific short-term circumstances.  Projects should be ported to the NEW
+  behavior and not rely on setting a policy to OLD.
+Call Stack \(most recent call first\):
+  CMakeLists.txt:[0-9]+ \(include\)$

+ 14 - 0
Tests/RunCMake/File_Generate/SourceProperty.cmake

@@ -0,0 +1,14 @@
+enable_language(C)
+add_library(SourceProperty)
+
+cmake_policy(SET CMP0070 OLD)
+file(GENERATE OUTPUT relative-output-OLD.c CONTENT "")
+target_sources(SourceProperty PRIVATE
+  "${CMAKE_CURRENT_SOURCE_DIR}/relative-output-OLD.c"
+)
+
+cmake_policy(SET CMP0070 NEW)
+file(GENERATE OUTPUT relative-output-NEW.c CONTENT "")
+target_sources(SourceProperty PRIVATE
+  "${CMAKE_CURRENT_BINARY_DIR}/relative-output-NEW.c"
+)