Test add_test() generator expressions
This teaches the 'testing' test to try generator expressions in arguments to add_test(NAME). This test case mimics a common use-case of passing executables to test driver scripts. We excercise the syntax for per-configuration target file names.
This commit is contained in:
parent
d2e1f2b4d6
commit
875c478b64
|
@ -54,7 +54,34 @@ ADD_TEST(testing.1 ${Testing_BINARY_DIR}/bin/testing)
|
|||
ADD_SUBDIRECTORY(Sub/Sub2)
|
||||
|
||||
# Per-config target name test.
|
||||
ADD_LIBRARY(pcStatic STATIC pcStatic.c)
|
||||
SET_PROPERTY(TARGET pcStatic PROPERTY RELEASE_POSTFIX -opt)
|
||||
SET_PROPERTY(TARGET pcStatic PROPERTY DEBUG_POSTFIX -dbg)
|
||||
ADD_LIBRARY(pcShared SHARED pcShared.c)
|
||||
SET_PROPERTY(TARGET pcShared PROPERTY RELEASE_POSTFIX -opt)
|
||||
SET_PROPERTY(TARGET pcShared PROPERTY DEBUG_POSTFIX -dbg)
|
||||
SET_PROPERTY(TARGET pcShared PROPERTY VERSION 1.2)
|
||||
SET_PROPERTY(TARGET pcShared PROPERTY SOVERSION 3)
|
||||
IF(NOT WIN32)
|
||||
SET(soname_file -DpcShared_soname_file=$<TARGET_SONAME_FILE:pcShared>)
|
||||
ENDIF()
|
||||
ADD_EXECUTABLE(perconfig perconfig.c)
|
||||
TARGET_LINK_LIBRARIES(perconfig pcStatic pcShared)
|
||||
SET_PROPERTY(TARGET perconfig PROPERTY RELEASE_POSTFIX -opt)
|
||||
SET_PROPERTY(TARGET perconfig PROPERTY DEBUG_POSTFIX -dbg)
|
||||
ADD_TEST(NAME testing.perconfig COMMAND perconfig)
|
||||
|
||||
# Test using a driver script with generator expressions.
|
||||
ADD_TEST(NAME testing.driver
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-Dconfiguration=$<CONFIGURATION>
|
||||
-Dperconfig_file_dir=$<TARGET_FILE_DIR:perconfig>
|
||||
-Dperconfig_file_name=$<TARGET_FILE_NAME:perconfig>
|
||||
-Dperconfig_file=$<TARGET_FILE:perconfig>
|
||||
-DpcStatic_file=$<TARGET_FILE:pcStatic>
|
||||
-DpcStatic_linker_file=$<TARGET_LINKER_FILE:pcStatic>
|
||||
-DpcShared_file=$<TARGET_FILE:pcShared>
|
||||
-DpcShared_linker_file=$<TARGET_LINKER_FILE:pcShared>
|
||||
${soname_file}
|
||||
-P ${Testing_SOURCE_DIR}/driver.cmake
|
||||
)
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
# Print values for human reference.
|
||||
foreach(v
|
||||
configuration
|
||||
perconfig_file_dir
|
||||
perconfig_file_name
|
||||
perconfig_file
|
||||
pcStatic_file
|
||||
pcStatic_linker_file
|
||||
pcShared_file
|
||||
pcShared_linker_file
|
||||
pcShared_soname_file
|
||||
)
|
||||
message("${v}=${${v}}")
|
||||
endforeach()
|
||||
|
||||
# Verify that file names match as expected.
|
||||
set(pc_file_components ${perconfig_file_dir}/${perconfig_file_name})
|
||||
if(NOT "${pc_file_components}" STREQUAL "${perconfig_file}")
|
||||
message(SEND_ERROR
|
||||
"File components ${pc_file_components} do not match ${perconfig_file}")
|
||||
endif()
|
||||
if(NOT "${pcStatic_file}" STREQUAL "${pcStatic_linker_file}")
|
||||
message(SEND_ERROR
|
||||
"pcStatic_file does not match pcStatic_linker_file:\n"
|
||||
" ${pcStatic_file}\n"
|
||||
" ${pcStatic_linker_file}\n"
|
||||
)
|
||||
endif()
|
||||
|
||||
# Verify that the implementation files are named correctly.
|
||||
foreach(lib pcStatic pcShared)
|
||||
file(STRINGS "${${lib}_file}" info LIMIT_COUNT 1 REGEX "INFO:[^[]*\\[")
|
||||
if(NOT "${info}" MATCHES ".*INFO:symbol\\[${lib}\\].*")
|
||||
message(SEND_ERROR "No INFO:symbol[${lib}] found in:\n ${${lib}_file}")
|
||||
endif()
|
||||
endforeach()
|
||||
execute_process(COMMAND ${perconfig_file} RESULT_VARIABLE result)
|
||||
if(result)
|
||||
message(SEND_ERROR "Error running:\n ${perconfig_file}\n(${result})")
|
||||
endif()
|
|
@ -0,0 +1,5 @@
|
|||
#include "pcShared.h"
|
||||
const char* pcShared(void)
|
||||
{
|
||||
return "INFO:symbol[pcShared]";
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#ifndef pcShared_h
|
||||
#define pcShared_h
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifdef pcShared_EXPORTS
|
||||
# define PC_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
# define PC_EXPORT __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# define PC_EXPORT
|
||||
#endif
|
||||
|
||||
PC_EXPORT const char* pcShared(void);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,4 @@
|
|||
const char* pcStatic(void)
|
||||
{
|
||||
return "INFO:symbol[pcStatic]";
|
||||
}
|
|
@ -1,4 +1,8 @@
|
|||
#include "pcShared.h"
|
||||
extern const char* pcStatic(void);
|
||||
int main()
|
||||
{
|
||||
pcStatic();
|
||||
pcShared();
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue