Back to home page

EIC code displayed by LXR

 
 

    


Warning, /jana2/cmake/AddJanaLibrary.cmake is written in an unsupported language. File is not indexed.

0001 
0002 macro(add_jana_library library_name)
0003 
0004     # Parse remaining arguments
0005     set(options)
0006     set(oneValueArgs EXPORT)
0007     set(multiValueArgs SOURCES PUBLIC_HEADER TESTS)
0008 
0009     cmake_parse_arguments(LIBRARY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
0010 
0011     if (NOT LIBRARY_SOURCES AND NOT LIBRARY_PUBLIC_HEADER AND NOT LIBRARY_TESTS)
0012         # If no arguments provided, glob everything
0013         file(GLOB HEADERS_IN_SUBDIR "include/*")
0014         file(GLOB SOURCES_IN_SUBDIR "src/*")
0015         file(GLOB TESTS_IN_SUBDIR "test*/*")
0016         file(GLOB HEADERS_IN_CWD "*.h*")
0017         set(SOURCES_IN_CWD)
0018         set(TESTS_IN_CWD)
0019 
0020         file(GLOB ALL_SOURCES_IN_CWD "*.c*")
0021         foreach(file IN LISTS ALL_SOURCES_IN_CWD)
0022             string(TOLOWER "${file}" file_lower)
0023             if(NOT file_lower MATCHES ".*/test[^/]*$|.*test$|.*tests$")
0024                 list(APPEND SOURCES_IN_CWD ${file})
0025             else()
0026                 list(APPEND TESTS_IN_CWD ${file})
0027             endif()
0028         endforeach()
0029 
0030         set(LIBRARY_SOURCES ${SOURCES_IN_CWD} ${SOURCES_IN_SUBDIR})
0031         set(LIBRARY_PUBLIC_HEADER ${HEADERS_IN_CWD} ${HEADERS_IN_SUBDIR})
0032         set(LIBRARY_TESTS ${TESTS_IN_CWD} ${TESTS_IN_SUBDIR})
0033         message(STATUS "Plugin ${library_name}: found sources: ${LIBRARY_SOURCES}")
0034         message(STATUS "Plugin ${library_name}: found headers: ${LIBRARY_PUBLIC_HEADER}")
0035         message(STATUS "Plugin ${library_name}: found tests: ${LIBRARY_TESTS}")
0036     endif()
0037 
0038     if (${PROJECT_NAME} STREQUAL "jana2")
0039         # This is an internal plugin
0040         set(INSTALL_NAMESPACE "JANA")
0041         set(JANA_NAMESPACE "")
0042         if (NOT LIBRARY_EXPORT)
0043             set(LIBRARY_EXPORT "jana2_targets")
0044         endif()
0045     else()
0046         # This is an external plugin
0047         # Figure out install namespace, which _might_ be different than PROJECT_NAME
0048         if (NOT DEFINED INSTALL_NAMESPACE)
0049             set(INSTALL_NAMESPACE ${PROJECT_NAME} CACHE STRING "Project-specific namespace for installation paths, e.g. /lib/INSTALL_NAMESPACE/plugins")
0050         endif()
0051         set(JANA_NAMESPACE "JANA::")
0052     endif()
0053 
0054     # Set up target
0055     add_library(${library_name} SHARED ${LIBRARY_SOURCES})
0056 
0057     set_target_properties(${library_name} PROPERTIES
0058         EXPORT_NAME ${library_name}
0059         SKIP_BUILD_RPATH FALSE
0060         BUILD_WITH_INSTALL_RPATH TRUE
0061         INSTALL_RPATH_USE_LINK_PATH TRUE
0062         INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
0063     )
0064 
0065     target_link_libraries(${library_name} PUBLIC "${JANA_NAMESPACE}jana2_static_lib")
0066 
0067     # Handle public headers
0068     if (LIBRARY_PUBLIC_HEADER)
0069         set_target_properties(${library_name} PROPERTIES 
0070             PUBLIC_HEADER "${LIBRARY_PUBLIC_HEADER}"
0071         )
0072         target_include_directories(${library_name}
0073             PUBLIC
0074                 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
0075                 $<INSTALL_INTERFACE:include/${INSTALL_NAMESPACE}/${library_name}>
0076         )
0077     endif()
0078 
0079     # Install target
0080     install(TARGETS ${library_name}
0081         EXPORT ${LIBRARY_EXPORT}
0082         PUBLIC_HEADER DESTINATION include/${INSTALL_NAMESPACE}/${library_name}
0083         LIBRARY DESTINATION lib
0084     )
0085 
0086     # Handle tests
0087     if (LIBRARY_TESTS)
0088         add_executable(${library_name}_tests ${LIBRARY_TESTS})
0089         target_link_libraries(${library_name}_tests PRIVATE ${library_name} "${JANA_NAMESPACE}VendoredCatch2")
0090         set_target_properties(${library_name}_tests PROPERTIES
0091             SKIP_BUILD_RPATH FALSE
0092             BUILD_WITH_INSTALL_RPATH TRUE
0093             INSTALL_RPATH_USE_LINK_PATH TRUE
0094             INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
0095         )
0096         #install(TARGETS ${library_name}_tests RUNTIME DESTINATION bin)
0097         add_test(NAME ${library_name}_tests COMMAND ${library_name}_tests)
0098     endif()
0099 endmacro()
0100 
0101