1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
##############################################################################
#
# libics: Image Cytometry Standard file reading and writing.
#
# C++ interface
# Copyright 2018 Cris Luengo
#
##############################################################################
# Compiler flags
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED on)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") # also matchs "AppleClang"
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wsign-conversion -pedantic")
elseif(CMAKE_C_COMPILER_ID STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -Wsign-conversion -pedantic")
elseif(CMAKE_C_COMPILER_ID STREQUAL "Intel")
# TODO: compiler flags for Intel compiler
elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
# TODO: compiler flags for MSVC compiler
endif()
set(SOURCES ${CMAKE_CURRENT_LIST_DIR}/libics.cpp)
set(HEADERS ${CMAKE_CURRENT_LIST_DIR}/libics.hpp)
add_library(libics_cpp ${SOURCES} ${HEADERS})
target_link_libraries(libics_cpp PRIVATE libics)
if(BUILD_SHARED_LIBS)
target_compile_definitions(libics_cpp PRIVATE BUILD_ICSCPP) # When compiling DLL/SO
target_compile_definitions(libics_cpp INTERFACE USE_ICSCPP_DLL) # When linking against DLL/SO
endif()
target_include_directories(libics_cpp PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
if(UNIX)
set_target_properties(libics_cpp PROPERTIES OUTPUT_NAME "ics_cpp")
endif(UNIX)
# Install
export(TARGETS libics_cpp FILE cmake/libics_cppTargets.cmake)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
cmake/libics_cppConfigVersion.cmake
VERSION ${PACKAGE_VERSION}
COMPATIBILITY AnyNewerVersion)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/libicsConfig.cmake.in
cmake/libics_cppConfig.cmake
INSTALL_DESTINATION cmake/)
install(TARGETS libics_cpp
EXPORT libics_cppTargets
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include)
install(FILES ${HEADERS} DESTINATION include)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/cmake/libics_cppConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/cmake/libics_cppConfigVersion.cmake
DESTINATION cmake/)
install(EXPORT libics_cppTargets DESTINATION cmake)
# Unit tests
add_executable(test_ics2a_cpp EXCLUDE_FROM_ALL ${CMAKE_CURRENT_LIST_DIR}/test_ics2a.cpp)
target_link_libraries(test_ics2a_cpp libics_cpp)
add_executable(test_ics2b_cpp EXCLUDE_FROM_ALL ${CMAKE_CURRENT_LIST_DIR}/test_ics2b.cpp)
target_link_libraries(test_ics2b_cpp libics_cpp)
add_executable(test_metadata_cpp EXCLUDE_FROM_ALL ${CMAKE_CURRENT_LIST_DIR}/test_metadata.cpp)
target_link_libraries(test_metadata_cpp libics_cpp)
add_executable(test_history_cpp EXCLUDE_FROM_ALL ${CMAKE_CURRENT_LIST_DIR}/test_history.cpp)
target_link_libraries(test_history_cpp libics_cpp)
set(TEST_PROGRAMS ${TEST_PROGRAMS} test_ics2a_cpp test_ics2b_cpp test_metadata_cpp test_history_cpp)
add_dependencies(all_tests ${TEST_PROGRAMS})
add_test(NAME test_ics2a_cpp COMMAND test_ics2a_cpp "${CMAKE_CURRENT_SOURCE_DIR}/test/testim.ics" result_v2a_cpp.ics)
set_tests_properties(test_ics2a_cpp PROPERTIES DEPENDS ctest_build_test_code)
add_test(NAME test_ics2b_cpp COMMAND test_ics2b_cpp "${CMAKE_CURRENT_SOURCE_DIR}/test/testim.ics" result_v2b_cpp.ics)
set_tests_properties(test_ics2b_cpp PROPERTIES DEPENDS ctest_build_test_code)
add_test(NAME test_metadata1_cpp COMMAND test_metadata_cpp result_v1.ics)
set_tests_properties(test_metadata1_cpp PROPERTIES DEPENDS test_ics1)
add_test(NAME test_metadata2_cpp COMMAND test_metadata_cpp result_v2a.ics)
set_tests_properties(test_metadata2_cpp PROPERTIES DEPENDS test_ics2a)
add_test(NAME test_metadata3_cpp COMMAND test_metadata_cpp result_v2b.ics)
set_tests_properties(test_metadata3_cpp PROPERTIES DEPENDS test_ics2b)
if(LIBICS_USE_ZLIB)
add_test(NAME test_metadata4_cpp COMMAND test_metadata_cpp result_v2z.ics)
set_tests_properties(test_metadata4_cpp PROPERTIES DEPENDS test_gzip)
endif()
add_test(NAME test_history_cpp COMMAND test_history_cpp result_v1.ics)
set_tests_properties(test_history_cpp PROPERTIES DEPENDS test_ics1)
|