From 28c3d59ed930976fd5ac4b5ea4f595632ef54758 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 28 Oct 2009 13:35:53 -0400 Subject: [PATCH] Test per-config OUTPUT_DIRECTORY properties We test (ARCHIVE|LIBRARY|RUNTIME)_OUTPUT_DIRECTORY_ properties by building COnly as a subdirectory and setting the properties to put its files in specific locations. We build an executable that verifies the targets actually appear where expected. --- Tests/CMakeLists.txt | 1 + Tests/OutDir/CMakeLists.txt | 35 +++++++++++++++++++++++++++++++++++ Tests/OutDir/OutDir.c | 24 ++++++++++++++++++++++++ Tests/OutDir/OutDir.cmake | 28 ++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+) create mode 100644 Tests/OutDir/CMakeLists.txt create mode 100644 Tests/OutDir/OutDir.c create mode 100644 Tests/OutDir/OutDir.cmake diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index ea6383572..c9a63723b 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -117,6 +117,7 @@ IF(BUILD_TESTING) ADD_TEST_MACRO(COnly COnly) ADD_TEST_MACRO(CxxOnly CxxOnly) ADD_TEST_MACRO(IPO COnly/COnly) + ADD_TEST_MACRO(OutDir runtime/OutDir) ADD_TEST_MACRO(NewlineArgs NewlineArgs) ADD_TEST_MACRO(SetLang SetLang) ADD_TEST_MACRO(ExternalOBJ ExternalOBJ) diff --git a/Tests/OutDir/CMakeLists.txt b/Tests/OutDir/CMakeLists.txt new file mode 100644 index 000000000..88468c3c0 --- /dev/null +++ b/Tests/OutDir/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 2.8) +project(OutDir C) + +if(CMAKE_CONFIGURATION_TYPES) + foreach(config ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER "${config}" CONFIG) + list(APPEND configs "${CONFIG}") + endforeach() + set(CMAKE_BUILD_TYPE) +elseif(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Debug) +endif() + +if(CMAKE_BUILD_TYPE) + string(TOUPPER "${CMAKE_BUILD_TYPE}" configs) +endif() + +set(top "${OutDir_BINARY_DIR}") +foreach(config ${configs}) + foreach(type archive runtime library) + string(TOUPPER "${type}" TYPE) + set(CMAKE_${TYPE}_OUTPUT_DIRECTORY_${config} "${top}/${type}") + file(REMOVE_RECURSE "${top}/${type}") + endforeach() +endforeach() + +add_subdirectory(../COnly COnly) + +add_custom_command( + OUTPUT OutDir.h + COMMAND ${CMAKE_COMMAND} -Dtop=${top} -P ${OutDir_SOURCE_DIR}/OutDir.cmake + DEPENDS COnly ${OutDir_SOURCE_DIR}/OutDir.cmake + ) +include_directories(${top}) +add_executable(OutDir OutDir.c OutDir.h) diff --git a/Tests/OutDir/OutDir.c b/Tests/OutDir/OutDir.c new file mode 100644 index 000000000..53f925926 --- /dev/null +++ b/Tests/OutDir/OutDir.c @@ -0,0 +1,24 @@ +#include +#include + +int main(void) +{ + const char* files[] = {TESTC1_LIB, TESTC2_LIB, CONLY_EXE, 0}; + int result = 0; + const char** fname = files; + for(;*fname;++fname) + { + FILE* f = fopen(*fname, "rb"); + if(f) + { + printf("found: [%s]\n", *fname); + fclose(f); + } + else + { + printf("error: [%s]\n", *fname); + result = 1; + } + } + return result; +} diff --git a/Tests/OutDir/OutDir.cmake b/Tests/OutDir/OutDir.cmake new file mode 100644 index 000000000..3ca847019 --- /dev/null +++ b/Tests/OutDir/OutDir.cmake @@ -0,0 +1,28 @@ +set(CMAKE_FIND_LIBRARY_PREFIXES "lib" "") +set(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".a" ".so" ".dylib") + +find_library(TESTC1_LIB + NAMES testc1 testc1_test_debug_postfix + PATHS ${top}/archive + NO_DEFAULT_PATH) + +find_library(TESTC2_LIB + NAMES testc2 testc2_test_debug_postfix + PATHS ${top}/archive ${top}/library + NO_DEFAULT_PATH) + +find_program(CONLY_EXE + NAMES COnly + PATHS ${top}/runtime + NO_DEFAULT_PATH) + +file(WRITE ${top}/OutDir.h "/* Generated by ${CMAKE_CURRENT_LIST_FILE} */ +#ifndef OutDir_h +#define OutDir_h + +#define TESTC1_LIB \"${TESTC1_LIB}\" +#define TESTC2_LIB \"${TESTC2_LIB}\" +#define CONLY_EXE \"${CONLY_EXE}\" + +#endif +")