Imported Upstream version 3.25.0
[platform/upstream/cmake.git] / Tests / RunCMake / file / RunCMakeTest.cmake
1 include(RunCMake)
2
3 run_cmake(CREATE_LINK)
4 run_cmake(CREATE_LINK-COPY_ON_ERROR)
5 run_cmake(CREATE_LINK-noarg)
6 run_cmake(CREATE_LINK-noexist)
7 run_cmake(DOWNLOAD-hash-mismatch)
8 run_cmake(DOWNLOAD-unused-argument)
9 run_cmake(DOWNLOAD-httpheader-not-set)
10 run_cmake(DOWNLOAD-netrc-bad)
11 run_cmake(DOWNLOAD-tls-cainfo-not-set)
12 run_cmake(DOWNLOAD-tls-verify-not-set)
13 run_cmake(DOWNLOAD-pass-not-set)
14 run_cmake(DOWNLOAD-no-save-hash)
15 run_cmake(TOUCH)
16 run_cmake(TOUCH-error-in-source-directory)
17 run_cmake(TOUCH-error-missing-directory)
18 run_cmake(UPLOAD-unused-argument)
19 run_cmake(UPLOAD-httpheader-not-set)
20 run_cmake(UPLOAD-netrc-bad)
21 run_cmake(UPLOAD-tls-cainfo-not-set)
22 run_cmake(UPLOAD-tls-verify-not-set)
23 run_cmake(UPLOAD-pass-not-set)
24 run_cmake(INSTALL-DIRECTORY)
25 run_cmake(INSTALL-FILES_FROM_DIR)
26 run_cmake(INSTALL-FILES_FROM_DIR-bad)
27 run_cmake(INSTALL-MESSAGE-bad)
28 run_cmake(FileOpenFailRead)
29 run_cmake(LOCK)
30 run_cmake(LOCK-error-file-create-fail)
31 run_cmake(LOCK-error-guard-incorrect)
32 run_cmake(LOCK-error-incorrect-timeout)
33 run_cmake(LOCK-error-incorrect-timeout-trail)
34 run_cmake(LOCK-error-lock-fail)
35 run_cmake(LOCK-error-negative-timeout)
36 run_cmake(LOCK-error-no-function)
37 run_cmake(LOCK-error-no-guard)
38 run_cmake(LOCK-error-no-path)
39 run_cmake(LOCK-error-no-result-variable)
40 run_cmake(LOCK-error-no-timeout)
41 run_cmake(LOCK-error-timeout)
42 run_cmake(LOCK-error-unknown-option)
43 run_cmake(LOCK-lowercase)
44 run_cmake(READ_ELF)
45 run_cmake(GLOB)
46 run_cmake(GLOB_RECURSE)
47 run_cmake(GLOB_RECURSE-noexp-FOLLOW_SYMLINKS)
48 run_cmake(SIZE)
49 run_cmake(SIZE-error-does-not-exist)
50 run_cmake(TIMESTAMP)
51
52 run_cmake(REMOVE-empty)
53
54 run_cmake_script(COPY_FILE-file-replace)
55 run_cmake_script(COPY_FILE-dir-to-file-capture)
56 run_cmake_script(COPY_FILE-dir-to-file-fail)
57 run_cmake_script(COPY_FILE-dirlink-to-file-capture)
58 run_cmake_script(COPY_FILE-dirlink-to-file-fail)
59 run_cmake_script(COPY_FILE-file-to-file)
60 run_cmake_script(COPY_FILE-file-to-dir-capture)
61 run_cmake_script(COPY_FILE-file-to-dir-fail)
62 run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-capture)
63 run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-fail)
64 run_cmake_script(COPY_FILE-file-ONLY_IF_DIFFERENT-no-overwrite)
65 run_cmake_script(COPY_FILE-link-to-file)
66 run_cmake_script(COPY_FILE-arg-missing)
67 run_cmake_script(COPY_FILE-arg-unknown)
68
69 run_cmake_script(RENAME-file-replace)
70 run_cmake_script(RENAME-file-to-file)
71 run_cmake_script(RENAME-file-to-dir-capture)
72 run_cmake_script(RENAME-file-to-dir-fail)
73 run_cmake_script(RENAME-file-NO_REPLACE-capture)
74 run_cmake_script(RENAME-file-NO_REPLACE-fail)
75 run_cmake_script(RENAME-arg-missing)
76 run_cmake_script(RENAME-arg-unknown)
77
78 # tests are valid both for GLOB and GLOB_RECURSE
79 run_cmake(GLOB-sort-dedup)
80 run_cmake(GLOB-error-LIST_DIRECTORIES-not-boolean)
81 run_cmake(GLOB-error-LIST_DIRECTORIES-no-arg)
82 run_cmake(GLOB-error-RELATIVE-no-arg)
83 run_cmake(GLOB-error-CONFIGURE_DEPENDS-modified)
84 run_cmake(GLOB-noexp-CONFIGURE_DEPENDS)
85 run_cmake(GLOB-noexp-FOLLOW_SYMLINKS)
86 run_cmake(GLOB-noexp-LIST_DIRECTORIES)
87 run_cmake(GLOB-noexp-RELATIVE)
88 run_cmake_command(GLOB-error-CONFIGURE_DEPENDS-SCRIPT_MODE ${CMAKE_COMMAND} -P
89   ${RunCMake_SOURCE_DIR}/GLOB-error-CONFIGURE_DEPENDS-SCRIPT_MODE.cmake)
90
91 if(NOT WIN32
92     AND NOT MSYS # FIXME: This works on CYGWIN but not on MSYS
93     )
94   run_cmake(CREATE_LINK-SYMBOLIC)
95   run_cmake(CREATE_LINK-SYMBOLIC-noexist)
96   run_cmake(GLOB_RECURSE-cyclic-recursion)
97   run_cmake(INSTALL-SYMLINK)
98   run_cmake(READ_SYMLINK)
99   run_cmake(READ_SYMLINK-noexist)
100   run_cmake(READ_SYMLINK-notsymlink)
101   if(NOT CYGWIN)
102     run_cmake(INSTALL-FOLLOW_SYMLINK_CHAIN)
103   endif()
104 endif()
105
106 run_cmake(REAL_PATH-unexpected-arg)
107 run_cmake(REAL_PATH-no-base-dir)
108 run_cmake(REAL_PATH)
109
110 if(RunCMake_GENERATOR MATCHES "Ninja")
111   # Detect ninja version so we know what tests can be supported.
112   execute_process(
113     COMMAND "${RunCMake_MAKE_PROGRAM}" --version
114     OUTPUT_VARIABLE ninja_out
115     ERROR_VARIABLE ninja_out
116     RESULT_VARIABLE ninja_res
117     OUTPUT_STRIP_TRAILING_WHITESPACE
118     )
119   if(ninja_res EQUAL 0 AND "x${ninja_out}" MATCHES "^x[0-9]+\\.[0-9]+")
120     set(ninja_version "${ninja_out}")
121     message(STATUS "ninja version: ${ninja_version}")
122   else()
123     message(FATAL_ERROR "'ninja --version' reported:\n${ninja_out}")
124   endif()
125
126   if("${ninja_version}" VERSION_LESS 1.8)
127     message(STATUS "Ninja is too old for GLOB CONFIGURE_DEPENDS; expect a warning.")
128   endif()
129 endif()
130
131 if(RunCMake_GENERATOR MATCHES "Ninja" AND "${ninja_version}" VERSION_LESS 1.8)
132   run_cmake(GLOB_RECURSE-warn-CONFIGURE_DEPENDS-ninja-version)
133 else()
134   run_cmake(GLOB-warn-CONFIGURE_DEPENDS-late)
135
136   # Use a single build tree for a few tests without cleaning.
137   set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GLOB-CONFIGURE_DEPENDS-RerunCMake-build)
138   set(RunCMake_TEST_NO_CLEAN 1)
139   set(RunCMake_DEFAULT_stderr ".*")
140   if(RunCMake_GENERATOR STREQUAL "Borland Makefiles" OR
141      RunCMake_GENERATOR STREQUAL "Watcom WMake")
142     set(fs_delay 3)
143   else()
144     set(fs_delay 1.125)
145   endif()
146
147   file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
148   file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/test")
149   set(tf_1  "${RunCMake_TEST_BINARY_DIR}/test/1.txt")
150   file(WRITE "${tf_1}" "1")
151
152   message(STATUS "GLOB-CONFIGURE_DEPENDS-RerunCMake: first configuration...")
153   run_cmake(GLOB-CONFIGURE_DEPENDS-RerunCMake)
154   run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-build ${CMAKE_COMMAND} --build .)
155
156   execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay})
157   message(STATUS "GLOB-CONFIGURE_DEPENDS-RerunCMake: add another file...")
158   file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/test/sub")
159   set(tf_2  "${RunCMake_TEST_BINARY_DIR}/test/sub/2.txt")
160   file(WRITE "${tf_2}" "2")
161   run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-rebuild_first ${CMAKE_COMMAND} --build .)
162   run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-nowork ${CMAKE_COMMAND} --build .)
163
164   execute_process(COMMAND ${CMAKE_COMMAND} -E sleep ${fs_delay})
165   message(STATUS "GLOB-CONFIGURE_DEPENDS-RerunCMake: remove first test file...")
166   file(REMOVE "${tf_1}")
167   run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-rebuild_second ${CMAKE_COMMAND} --build .)
168   run_cmake_command(GLOB-CONFIGURE_DEPENDS-RerunCMake-nowork ${CMAKE_COMMAND} --build .)
169
170   if(NOT WIN32
171       AND NOT MSYS # FIXME: This works on CYGWIN but not on MSYS
172       )
173     message(STATUS "GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake: link the first test directory into a new directory...")
174     file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/test2")
175     execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${RunCMake_TEST_BINARY_DIR}/test" "${RunCMake_TEST_BINARY_DIR}/test2/test_folder_symlink")
176
177     message(STATUS "GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake: first configuration...")
178     run_cmake(GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake)
179     run_cmake_command(GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake-build ${CMAKE_COMMAND} --build .)
180
181     message(STATUS "GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake: add another file in the linked directory...")
182     set(tf_3  "${RunCMake_TEST_BINARY_DIR}/test/3.txt")
183     file(WRITE "${tf_3}" "3")
184     run_cmake_command(GLOB-CONFIGURE_DEPENDS-CMP0009-RerunCMake-rebuild ${CMAKE_COMMAND} --build .)
185   endif()
186
187   unset(RunCMake_TEST_BINARY_DIR)
188   unset(RunCMake_TEST_NO_CLEAN)
189   unset(RunCMake_DEFAULT_stderr)
190 endif()