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)
|
ADD_SUBDIRECTORY(Sub/Sub2)
|
||||||
|
|
||||||
# Per-config target name test.
|
# 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)
|
ADD_EXECUTABLE(perconfig perconfig.c)
|
||||||
|
TARGET_LINK_LIBRARIES(perconfig pcStatic pcShared)
|
||||||
SET_PROPERTY(TARGET perconfig PROPERTY RELEASE_POSTFIX -opt)
|
SET_PROPERTY(TARGET perconfig PROPERTY RELEASE_POSTFIX -opt)
|
||||||
SET_PROPERTY(TARGET perconfig PROPERTY DEBUG_POSTFIX -dbg)
|
SET_PROPERTY(TARGET perconfig PROPERTY DEBUG_POSTFIX -dbg)
|
||||||
ADD_TEST(NAME testing.perconfig COMMAND perconfig)
|
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()
|
int main()
|
||||||
{
|
{
|
||||||
|
pcStatic();
|
||||||
|
pcShared();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue