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