Back to home page

EIC code displayed by LXR

 
 

    


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

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