From 45e1953c4037d4492668651ae3bbfd6a4a875bc1 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 7 Dec 2010 17:36:24 -0500 Subject: Factor per-config sample targets out of 'Testing' test Put the source files, build rules, and test scripts for these targets under Tests/PerConfig and refer to it from Tests/Testing as a subdirectory. The targets and scripts will be useful in other tests. --- Tests/PerConfig/CMakeLists.txt | 33 +++++++++++++++++++++++++++++++++ Tests/PerConfig/pcShared.c | 5 +++++ Tests/PerConfig/pcShared.h | 16 ++++++++++++++++ Tests/PerConfig/pcStatic.c | 4 ++++ Tests/PerConfig/perconfig.c | 8 ++++++++ Tests/PerConfig/perconfig.cmake | 40 ++++++++++++++++++++++++++++++++++++++++ Tests/Testing/CMakeLists.txt | 34 +++------------------------------- Tests/Testing/driver.cmake | 40 ---------------------------------------- Tests/Testing/pcShared.c | 5 ----- Tests/Testing/pcShared.h | 16 ---------------- Tests/Testing/pcStatic.c | 4 ---- Tests/Testing/perconfig.c | 8 -------- 12 files changed, 109 insertions(+), 104 deletions(-) create mode 100644 Tests/PerConfig/CMakeLists.txt create mode 100644 Tests/PerConfig/pcShared.c create mode 100644 Tests/PerConfig/pcShared.h create mode 100644 Tests/PerConfig/pcStatic.c create mode 100644 Tests/PerConfig/perconfig.c create mode 100644 Tests/PerConfig/perconfig.cmake delete mode 100644 Tests/Testing/driver.cmake delete mode 100644 Tests/Testing/pcShared.c delete mode 100644 Tests/Testing/pcShared.h delete mode 100644 Tests/Testing/pcStatic.c delete mode 100644 Tests/Testing/perconfig.c diff --git a/Tests/PerConfig/CMakeLists.txt b/Tests/PerConfig/CMakeLists.txt new file mode 100644 index 0000000..a45abc8 --- /dev/null +++ b/Tests/PerConfig/CMakeLists.txt @@ -0,0 +1,33 @@ +project(PerConfig C) + +# Targets with per-configuration names. +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=$) +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) + +SET(PerConfig_COMMAND + ${CMAKE_COMMAND} + -Dconfiguration=$ + -Dperconfig_file_dir=$ + -Dperconfig_file_name=$ + -Dperconfig_file=$ + -DpcStatic_file=$ + -DpcStatic_linker_file=$ + -DpcShared_file=$ + -DpcShared_linker_file=$ + ${soname_file} + -P ${PerConfig_SOURCE_DIR}/perconfig.cmake + ) +SET(PerConfig_COMMAND "${PerConfig_COMMAND}" PARENT_SCOPE) diff --git a/Tests/PerConfig/pcShared.c b/Tests/PerConfig/pcShared.c new file mode 100644 index 0000000..b08fadc --- /dev/null +++ b/Tests/PerConfig/pcShared.c @@ -0,0 +1,5 @@ +#include "pcShared.h" +const char* pcShared(void) +{ + return "INFO:symbol[pcShared]"; +} diff --git a/Tests/PerConfig/pcShared.h b/Tests/PerConfig/pcShared.h new file mode 100644 index 0000000..59a6ef4 --- /dev/null +++ b/Tests/PerConfig/pcShared.h @@ -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 diff --git a/Tests/PerConfig/pcStatic.c b/Tests/PerConfig/pcStatic.c new file mode 100644 index 0000000..7e1bf51 --- /dev/null +++ b/Tests/PerConfig/pcStatic.c @@ -0,0 +1,4 @@ +const char* pcStatic(void) +{ + return "INFO:symbol[pcStatic]"; +} diff --git a/Tests/PerConfig/perconfig.c b/Tests/PerConfig/perconfig.c new file mode 100644 index 0000000..d942d45 --- /dev/null +++ b/Tests/PerConfig/perconfig.c @@ -0,0 +1,8 @@ +#include "pcShared.h" +extern const char* pcStatic(void); +int main() +{ + pcStatic(); + pcShared(); + return 0; +} diff --git a/Tests/PerConfig/perconfig.cmake b/Tests/PerConfig/perconfig.cmake new file mode 100644 index 0000000..4a93acc --- /dev/null +++ b/Tests/PerConfig/perconfig.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() diff --git a/Tests/Testing/CMakeLists.txt b/Tests/Testing/CMakeLists.txt index f857407..815b52b 100644 --- a/Tests/Testing/CMakeLists.txt +++ b/Tests/Testing/CMakeLists.txt @@ -53,35 +53,7 @@ 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=$) -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) +# Per-config target name and generator expressions. +ADD_SUBDIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../PerConfig 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=$ - -Dperconfig_file_dir=$ - -Dperconfig_file_name=$ - -Dperconfig_file=$ - -DpcStatic_file=$ - -DpcStatic_linker_file=$ - -DpcShared_file=$ - -DpcShared_linker_file=$ - ${soname_file} - -P ${Testing_SOURCE_DIR}/driver.cmake - ) +ADD_TEST(NAME testing.driver COMMAND ${PerConfig_COMMAND}) diff --git a/Tests/Testing/driver.cmake b/Tests/Testing/driver.cmake deleted file mode 100644 index 4a93acc..0000000 --- a/Tests/Testing/driver.cmake +++ /dev/null @@ -1,40 +0,0 @@ -# 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() diff --git a/Tests/Testing/pcShared.c b/Tests/Testing/pcShared.c deleted file mode 100644 index b08fadc..0000000 --- a/Tests/Testing/pcShared.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "pcShared.h" -const char* pcShared(void) -{ - return "INFO:symbol[pcShared]"; -} diff --git a/Tests/Testing/pcShared.h b/Tests/Testing/pcShared.h deleted file mode 100644 index 59a6ef4..0000000 --- a/Tests/Testing/pcShared.h +++ /dev/null @@ -1,16 +0,0 @@ -#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 diff --git a/Tests/Testing/pcStatic.c b/Tests/Testing/pcStatic.c deleted file mode 100644 index 7e1bf51..0000000 --- a/Tests/Testing/pcStatic.c +++ /dev/null @@ -1,4 +0,0 @@ -const char* pcStatic(void) -{ - return "INFO:symbol[pcStatic]"; -} diff --git a/Tests/Testing/perconfig.c b/Tests/Testing/perconfig.c deleted file mode 100644 index d942d45..0000000 --- a/Tests/Testing/perconfig.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "pcShared.h" -extern const char* pcStatic(void); -int main() -{ - pcStatic(); - pcShared(); - return 0; -} -- cgit v0.12