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