ENH: Adding test for ADD_CUSTOM_COMMAND's new IMPLICIT_DEPENDS feature.

This commit is contained in:
Brad King 2007-09-17 10:51:05 -04:00
parent d7a5d4c191
commit 423cdb561c
4 changed files with 68 additions and 0 deletions

View File

@ -11,6 +11,9 @@ message("Creating Project/foo.cxx")
write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
"const char* foo() { return \"foo\";}" ) "const char* foo() { return \"foo\";}" )
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot.hxx.in
"static const char* zot = \"zot\";\n")
message("Building project first time") message("Building project first time")
try_compile(RESULT try_compile(RESULT
${BuildDepends_BINARY_DIR}/Project ${BuildDepends_BINARY_DIR}/Project
@ -42,6 +45,14 @@ if(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}") "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}")
endif(EXISTS endif(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}") "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}")
set(zot ${BuildDepends_BINARY_DIR}/Project/zot${CMAKE_EXECUTABLE_SUFFIX})
if(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}" )
message("found debug")
set(zot
"${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}")
endif(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}")
message("Running ${bar} ") message("Running ${bar} ")
execute_process(COMMAND ${bar} OUTPUT_VARIABLE out RESULT_VARIABLE runResult) execute_process(COMMAND ${bar} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
@ -54,6 +65,17 @@ else("${out}" STREQUAL "foo ")
message(SEND_ERROR "Project did not initially build properly: ${out}") message(SEND_ERROR "Project did not initially build properly: ${out}")
endif("${out}" STREQUAL "foo ") endif("${out}" STREQUAL "foo ")
message("Running ${zot} ")
execute_process(COMMAND ${zot} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
string(REGEX REPLACE "[\r\n]" " " out "${out}")
message("Run result: ${runResult} Output: \"${out}\"")
if("${out}" STREQUAL "zot ")
message("Worked!")
else("${out}" STREQUAL "zot ")
message(SEND_ERROR "Project did not initially build properly: ${out}")
endif("${out}" STREQUAL "zot ")
message("Waiting 3 seconds...") message("Waiting 3 seconds...")
# any additional argument will cause ${bar} to wait forever # any additional argument will cause ${bar} to wait forever
execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out) execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
@ -61,6 +83,8 @@ execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
message("Modifying Project/foo.cxx") message("Modifying Project/foo.cxx")
write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
"const char* foo() { return \"foo changed\";}" ) "const char* foo() { return \"foo changed\";}" )
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot.hxx.in
"static const char* zot = \"zot changed\";\n")
message("Building project second time") message("Building project second time")
try_compile(RESULT try_compile(RESULT
@ -91,6 +115,11 @@ if(EXISTS
message("found debug") message("found debug")
endif(EXISTS endif(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}") "${BuildDepends_BINARY_DIR}/Project/Debug/bar${CMAKE_EXECUTABLE_SUFFIX}")
if(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}" )
message("found debug")
endif(EXISTS
"${BuildDepends_BINARY_DIR}/Project/Debug/zot${CMAKE_EXECUTABLE_SUFFIX}")
message("Running ${bar} ") message("Running ${bar} ")
execute_process(COMMAND ${bar} OUTPUT_VARIABLE out RESULT_VARIABLE runResult) execute_process(COMMAND ${bar} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
@ -102,3 +131,14 @@ if("${out}" STREQUAL "foo changed ")
else("${out}" STREQUAL "foo changed ") else("${out}" STREQUAL "foo changed ")
message(SEND_ERROR "Project did not rebuild properly!") message(SEND_ERROR "Project did not rebuild properly!")
endif("${out}" STREQUAL "foo changed ") endif("${out}" STREQUAL "foo changed ")
message("Running ${zot} ")
execute_process(COMMAND ${zot} OUTPUT_VARIABLE out RESULT_VARIABLE runResult)
string(REGEX REPLACE "[\r\n]" " " out "${out}")
message("Run result: ${runResult} Output: \"${out}\"")
if("${out}" STREQUAL "zot changed ")
message("Worked!")
else("${out}" STREQUAL "zot changed ")
message(SEND_ERROR "Project did not rebuild properly!")
endif("${out}" STREQUAL "zot changed ")

View File

@ -27,3 +27,21 @@ add_executable(bar bar.cxx
${CMAKE_CURRENT_BINARY_DIR}/regen.h ${CMAKE_CURRENT_BINARY_DIR}/regen.h
${CMAKE_CURRENT_BINARY_DIR}/noregen.h ${CMAKE_CURRENT_BINARY_DIR}/noregen.h
) )
#-----------------------------------------------------------------------------
IF("${CMAKE_GENERATOR}" MATCHES "Make")
# Test the IMPLICIT_DEPENDS feature.
SET(ZOT_DEPENDS IMPLICIT_DEPENDS CXX ${CMAKE_CURRENT_SOURCE_DIR}/dep.cxx)
ELSE("${CMAKE_GENERATOR}" MATCHES "Make")
# No IMPLICIT_DEPENDS...just depend directly.
SET(ZOT_DEPENDS DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx.in)
ENDIF("${CMAKE_GENERATOR}" MATCHES "Make")
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_BINARY_DIR}/zot.hxx.in
${CMAKE_CURRENT_BINARY_DIR}/zot.hxx
${ZOT_DEPENDS}
)
add_executable(zot zot.cxx ${CMAKE_CURRENT_BINARY_DIR}/zot.hxx)

View File

@ -0,0 +1 @@
#include <zot.hxx.in>

View File

@ -0,0 +1,9 @@
#include <zot.hxx>
#include <stdio.h>
int main()
{
printf("%s\n", zot);
fflush(stdout);
return 0;
}