diff --git a/cmake_support/OST.cmake b/cmake_support/OST.cmake index 496d46e1200c0b9cf01f1e429e4650acbdaaad16..1e3e66444034ec6b9ea16173f4ba2a5a64478d7e 100644 --- a/cmake_support/OST.cmake +++ b/cmake_support/OST.cmake @@ -127,31 +127,6 @@ macro(copy_if_different FROM_DIR TO_DIR FILES TARGETS TARGET) endforeach() endmacro() -#------------------------------------------------------------------------------- -# stage_headers -#------------------------------------------------------------------------------- -macro(stage_headers HEADERS HEADER_INSTALL_DIR TARGET SUB) - set(FROM_DIR "./") - set(_HDR_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${SUB}") - foreach(_HDR ${HEADERS}) - list(APPEND _ABS_HEADER_NAMES ${_HDR_SOURCE_DIR}/${_HDR}) - endforeach() - # introduce a helper target to make sure the headers are staged before - # building the library - string(REPLACE "/" "_" _SUB_NO_SLASH "${SUB}") - string(REPLACE "${PREFIX}_" "" _TARGET "${TARGET}") - set(_TARGET_NAME ${_TARGET}_${_SUB_NO_SLASH}_headers) - set(_SUB ${SUB}) - if (NOT _SUB) - set(_TARGET_NAME ${_TARGET}_headers) - endif() - add_custom_target("${_TARGET_NAME}" COMMENT "") - set(HEADER_DIR "${HEADER_STAGE_PATH}/${HEADER_INSTALL_DIR}") - copy_if_different("" "${HEADER_DIR}" - "${_ABS_HEADER_NAMES}" "" - "${_TARGET_NAME}") - add_dependencies(${TARGET} ${_TARGET_NAME}) -endmacro() #------------------------------------------------------------------------------- # parse_file_list @@ -216,6 +191,10 @@ macro(module) #----------------------------------------------------------------------------- # create library #----------------------------------------------------------------------------- + file(MAKE_DIRECTORY ${LIB_STAGE_PATH}) + file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}) + file(MAKE_DIRECTORY ${LIBEXEC_STAGE_PATH}) + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/tests") if (NOT TARGET create_stage) add_custom_target(create_stage COMMAND ${CMAKE_COMMAND} -E make_directory ${LIB_STAGE_PATH} COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_OUTPUT_PATH} @@ -282,7 +261,6 @@ macro(module) if (ENABLE_STATIC) target_link_libraries(${_LIB_NAME} ${STATIC_LIBRARIES}) endif() - else() add_custom_target("${_LIB_NAME}" ALL) set_target_properties("${_LIB_NAME}" PROPERTIES HEADER_ONLY 1 @@ -291,23 +269,34 @@ macro(module) #----------------------------------------------------------------------------- # stage headers #----------------------------------------------------------------------------- - if (_ARG_HEADERS) - parse_file_list("${_ARG_HEADERS}" _HEADER_MAP) - map(KEYS _HEADER_MAP _HEADER_MAP_KEYS) - foreach(_DIR ${_HEADER_MAP_KEYS}) - map(GET _HEADER_MAP ${_DIR} _HEADERS) - set(_ABS_HEADER_NAMES) - set(_HDR_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${_DIR}") - foreach(_HDR ${_HEADERS}) - list(APPEND _ABS_HEADER_NAMES "${_HDR_SOURCE_DIR}/${_HDR}") - endforeach() - install(FILES ${_ABS_HEADER_NAMES} DESTINATION "include/${_HEADER_OUTPUT_DIR}/${_DIR}") - set(_HDR_STAGE_DIR "${_HEADER_OUTPUT_DIR}/${_DIR}") - stage_headers("${_HEADERS}" "${_HDR_STAGE_DIR}" "${_LIB_NAME}" "${_DIR}") - endforeach() + if (_ARG_HEADERS) + stage_and_install_headers("${_ARG_HEADERS}" "${_HEADER_OUTPUT_DIR}" "${_LIB_NAME}") endif() endmacro() +#------------------------------------------------------------------------------- +# macro stage_and_install_headers +#------------------------------------------------------------------------------- +macro(stage_and_install_headers HEADERLIST HEADER_OUTPUT_DIR TARGET) + add_custom_target("${TARGET}_headers" COMMENT "") + add_dependencies("${TARGET}" "${TARGET}_headers") + add_dependencies("${TARGET}_headers" create_stage) + parse_file_list("${HEADERLIST}" _HEADER_MAP) + map(KEYS _HEADER_MAP _HEADER_MAP_KEYS) + foreach(_DIR ${_HEADER_MAP_KEYS}) + map(GET _HEADER_MAP ${_DIR} _HEADERS) + set(_HDR_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${_DIR}") + set(_ABS_HEADER_NAMES) + foreach(_HDR ${_HEADERS}) + list(APPEND _ABS_HEADER_NAMES ${_HDR_SOURCE_DIR}/${_HDR}) + endforeach() + set(_HDR_STAGE_DIR "${HEADER_OUTPUT_DIR}/${_DIR}") + set(_FULL_HEADER_DIR "${HEADER_STAGE_PATH}/${_HDR_STAGE_DIR}") + copy_if_different("" "${_FULL_HEADER_DIR}" "${_ABS_HEADER_NAMES}" "" "${TARGET}_headers") + install(FILES ${_ABS_HEADER_NAMES} DESTINATION "include/${_HDR_STAGE_DIR}") + endforeach() +endmacro() + #------------------------------------------------------------------------------- # Synopsis diff --git a/modules/config/CMakeLists.txt b/modules/config/CMakeLists.txt index c7cdc9468303279890c5a9a84ce2d9aae4fae4ad..4f7e645ae21730204495c46ce91bc624bf4b28bb 100644 --- a/modules/config/CMakeLists.txt +++ b/modules/config/CMakeLists.txt @@ -74,6 +74,4 @@ set(VERSION_HH_FILE "${CMAKE_CURRENT_SOURCE_DIR}/version.hh") configure_file(config.hh.in ${CONFIG_HH_FILE}) configure_file(version.hh.in ${VERSION_HH_FILE}) add_custom_target(ost_config) -stage_headers("${OST_CONFIG_HEADERS}" "ost" - "ost_config" "" "ost") -install(FILES ${OST_CONFIG_HEADERS} DESTINATION include/ost) +stage_and_install_headers("${OST_CONFIG_HEADERS}" "ost" "ost_config")