Skip to content
Snippets Groups Projects
Commit 477fb26c authored by Nat Goodspeed's avatar Nat Goodspeed
Browse files

Centralize LD_LIBRARY_PATH logic with new SET_TEST_PATH macro.

Add ${SHARED_LIB_STAGING_DIR_RELEASE} to LD_LIBRARY_PATH for executing tests:
otherwise Debug-build tests can't find (e.g.) the aprutil DLL, for which we
don't build/package a debug variant.
Leverage discovery that a CMake macro can accept a target variable name
argument for LL_TEST_COMMAND macro.
parent cb50a239
No related branches found
No related tags found
No related merge requests found
...@@ -141,17 +141,9 @@ INCLUDE(GoogleMock) ...@@ -141,17 +141,9 @@ INCLUDE(GoogleMock)
IF(LL_TEST_VERBOSE) IF(LL_TEST_VERBOSE)
MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd = ${TEST_CMD}") MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_cmd = ${TEST_CMD}")
ENDIF(LL_TEST_VERBOSE) ENDIF(LL_TEST_VERBOSE)
IF(WINDOWS)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR})
ELSEIF(DARWIN)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources:/usr/lib)
ELSE(WINDOWS)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}:/usr/lib)
ENDIF(WINDOWS)
LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${TEST_CMD}) SET_TEST_PATH(LD_LIBRARY_PATH)
SET(TEST_SCRIPT_CMD ${LL_TEST_COMMAND_value}) LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${TEST_CMD})
IF(LL_TEST_VERBOSE) IF(LL_TEST_VERBOSE)
MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script = ${TEST_SCRIPT_CMD}") MESSAGE(STATUS "LL_ADD_PROJECT_UNIT_TESTS ${name} test_script = ${TEST_SCRIPT_CMD}")
ENDIF(LL_TEST_VERBOSE) ENDIF(LL_TEST_VERBOSE)
...@@ -233,16 +225,9 @@ FUNCTION(LL_ADD_INTEGRATION_TEST ...@@ -233,16 +225,9 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
LIST(INSERT test_command test_exe_pos "${TEST_EXE}") LIST(INSERT test_command test_exe_pos "${TEST_EXE}")
ENDIF (test_exe_pos LESS 0) ENDIF (test_exe_pos LESS 0)
IF(WINDOWS) SET_TEST_PATH(LD_LIBRARY_PATH)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR})
ELSEIF(DARWIN)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources:/usr/lib)
ELSE(WINDOWS)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}:/usr/lib)
ENDIF(WINDOWS)
LL_TEST_COMMAND("${LD_LIBRARY_PATH}" ${test_command}) LL_TEST_COMMAND(TEST_SCRIPT_CMD "${LD_LIBRARY_PATH}" ${test_command})
SET(TEST_SCRIPT_CMD ${LL_TEST_COMMAND_value})
if(TEST_DEBUG) if(TEST_DEBUG)
message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}") message(STATUS "TEST_SCRIPT_CMD: ${TEST_SCRIPT_CMD}")
...@@ -258,3 +243,36 @@ FUNCTION(LL_ADD_INTEGRATION_TEST ...@@ -258,3 +243,36 @@ FUNCTION(LL_ADD_INTEGRATION_TEST
# ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD}) # ADD_TEST(INTEGRATION_TEST_RUNNER_${testname} ${TEST_SCRIPT_CMD})
ENDFUNCTION(LL_ADD_INTEGRATION_TEST) ENDFUNCTION(LL_ADD_INTEGRATION_TEST)
MACRO(SET_TEST_LIST LISTVAR)
IF(WINDOWS)
# We typically build/package only Release variants of third-party
# libraries, so append the Release staging dir in case the library being
# sought doesn't have a debug variant.
set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR} ${SHARED_LIB_STAGING_DIR}/Release)
ELSEIF(DARWIN)
# We typically build/package only Release variants of third-party
# libraries, so append the Release staging dir in case the library being
# sought doesn't have a debug variant.
set(${LISTVAR} ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources ${SHARED_LIB_STAGING_DIR}/Release/Resources /usr/lib)
ELSE(WINDOWS)
# Linux uses a single staging directory anyway.
set(${LISTVAR} ${SHARED_LIB_STAGING_DIR} /usr/lib)
ENDIF(WINDOWS)
ENDMACRO(SET_TEST_LIST)
MACRO(SET_TEST_PATH PATHVAR)
set_test_list(test_list)
IF(WINDOWS)
set(sep "\;")
ELSE(WINDOWS)
set(sep ":")
ENDIF(WINDOWS)
set(path "")
set(optsep "")
foreach(dir ${test_list})
set(path "${path}${optsep}${dir}")
set(optsep "${sep}")
endforeach(dir)
set(${PATHVAR} "${path}")
ENDMACRO(SET_TEST_PATH)
...@@ -5,7 +5,7 @@ macro(ll_deploy_sharedlibs_command target_exe) ...@@ -5,7 +5,7 @@ macro(ll_deploy_sharedlibs_command target_exe)
get_filename_component(OUTPUT_PATH ${TARGET_LOCATION} PATH) get_filename_component(OUTPUT_PATH ${TARGET_LOCATION} PATH)
if(DARWIN) if(DARWIN)
set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources") SET_TEST_LIST(SEARCH_DIRS)
get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE) get_target_property(IS_BUNDLE ${target_exe} MACOSX_BUNDLE)
if(IS_BUNDLE) if(IS_BUNDLE)
# If its a bundle the exe is not in the target location, this should find it. # If its a bundle the exe is not in the target location, this should find it.
...@@ -15,9 +15,10 @@ macro(ll_deploy_sharedlibs_command target_exe) ...@@ -15,9 +15,10 @@ macro(ll_deploy_sharedlibs_command target_exe)
set(OUTPUT_PATH ${OUTPUT_PATH}/../Resources) set(OUTPUT_PATH ${OUTPUT_PATH}/../Resources)
endif(IS_BUNDLE) endif(IS_BUNDLE)
elseif(WINDOWS) elseif(WINDOWS)
set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}" "$ENV{SystemRoot}/system32") SET_TEST_LIST(SEARCH_DIRS)
LIST(APPEND SEARCH_DIRS "$ENV{SystemRoot}/system32")
elseif(LINUX) elseif(LINUX)
set(SEARCH_DIRS "${SHARED_LIB_STAGING_DIR}") SET_TEST_LIST(SEARCH_DIRS)
set(OUTPUT_PATH ${OUTPUT_PATH}/lib) set(OUTPUT_PATH ${OUTPUT_PATH}/lib)
endif(DARWIN) endif(DARWIN)
......
MACRO(LL_TEST_COMMAND LD_LIBRARY_PATH) MACRO(LL_TEST_COMMAND OUTVAR LD_LIBRARY_PATH)
# nat wonders how Kitware can use the term 'function' for a construct that # nat wonders how Kitware can use the term 'function' for a construct that
# cannot return a value. And yet, variables you set inside a FUNCTION are # cannot return a value. And yet, variables you set inside a FUNCTION are
# local. Try a MACRO instead. # local. Try a MACRO instead.
SET(LL_TEST_COMMAND_value SET(value
${PYTHON_EXECUTABLE} ${PYTHON_EXECUTABLE}
"${CMAKE_SOURCE_DIR}/cmake/run_build_test.py") "${CMAKE_SOURCE_DIR}/cmake/run_build_test.py")
IF(LD_LIBRARY_PATH) IF(LD_LIBRARY_PATH)
LIST(APPEND LL_TEST_COMMAND_value "-l${LD_LIBRARY_PATH}") LIST(APPEND value "-l${LD_LIBRARY_PATH}")
ENDIF(LD_LIBRARY_PATH) ENDIF(LD_LIBRARY_PATH)
LIST(APPEND LL_TEST_COMMAND_value ${ARGN}) LIST(APPEND value ${ARGN})
##MESSAGE(STATUS "Will run: ${LL_TEST_COMMAND_value}") SET(${OUTVAR} ${value})
##MESSAGE(STATUS "Will run: ${value}")
ENDMACRO(LL_TEST_COMMAND) ENDMACRO(LL_TEST_COMMAND)
...@@ -13,6 +13,7 @@ include(LLXML) ...@@ -13,6 +13,7 @@ include(LLXML)
include(LScript) include(LScript)
include(Linking) include(Linking)
include(Tut) include(Tut)
include(LLAddBuildTest)
include(GoogleMock) include(GoogleMock)
...@@ -117,19 +118,12 @@ endif (WINDOWS) ...@@ -117,19 +118,12 @@ endif (WINDOWS)
get_target_property(TEST_EXE test LOCATION) get_target_property(TEST_EXE test LOCATION)
IF(WINDOWS) SET_TEST_PATH(LD_LIBRARY_PATH)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) LL_TEST_COMMAND(command "${LD_LIBRARY_PATH}"
ELSEIF(DARWIN)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources:/usr/lib)
ELSE(WINDOWS)
set(LD_LIBRARY_PATH ${SHARED_LIB_STAGING_DIR}:/usr/lib)
ENDIF(WINDOWS)
LL_TEST_COMMAND("${LD_LIBRARY_PATH}"
"${TEST_EXE}" "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt" "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt") "${TEST_EXE}" "--output=${CMAKE_CURRENT_BINARY_DIR}/cpp_test_results.txt" "--touch=${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt")
ADD_CUSTOM_COMMAND( ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cpp_tests_ok.txt
COMMAND ${LL_TEST_COMMAND_value} COMMAND ${command}
DEPENDS test DEPENDS test
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "C++ unit tests" COMMENT "C++ unit tests"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment