view CMakeLists.txt @ 1:fd402e53d263

new files
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 01 Jun 2015 11:12:20 +0200
parents
children d5027f9f676a
line wrap: on
line source

# TODO !

cmake_minimum_required(VERSION 2.8)

project(OrthancClient)

  OrthancCppClient/OrthancConnection.cpp
  OrthancCppClient/Study.cpp
  OrthancCppClient/Series.cpp
  OrthancCppClient/Instance.cpp
  OrthancCppClient/Patient.cpp




#####################################################################
## Create the standalone DLL containing the Orthanc Client API
#####################################################################

include_directories(${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/Laaw)

if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  if (CMAKE_CROSSCOMPILING)
    # Remove the default "lib" prefix from "libOrthancClient.dll" if cross-compiling
    set(CMAKE_SHARED_LIBRARY_PREFIX "")

    if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
      set(ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.def)
    elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
      set(ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.def)
    else()
      message(FATAL_ERROR "Support your platform here")
    endif()
  else()
    # Nothing to do if using Visual Studio
  endif()

  if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
    set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows32.dll")
    list(APPEND ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.rc)
  elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
    set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows64.dll")
    list(APPEND ORTHANC_CPP_CLIENT_AUX ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.rc)
  else()
    message(FATAL_ERROR "Support your platform here")
  endif()    

else()
  set(ORTHANC_CPP_CLIENT_AUX ${OPENSSL_SOURCES})
endif()

add_library(OrthancClient SHARED
  ${ORTHANC_ROOT}/OrthancCppClient/OrthancCppClient.cpp
  ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/SharedLibrary.cpp
  ${ORTHANC_ROOT}/Resources/ThirdParty/md5/md5.c
  ${ORTHANC_ROOT}/Resources/ThirdParty/base64/base64.cpp
  ${ORTHANC_CPP_CLIENT_AUX}
  ${THIRD_PARTY_SOURCES}
  ${CURL_SOURCES}
  ${GOOGLE_LOG_SOURCES}
  )

if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
    ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR
    ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
  set_target_properties(OrthancClient
    PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined -Wl,--as-needed -Wl,--version-script=${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/Laaw/VersionScript.map"
    )
  target_link_libraries(OrthancClient pthread)

elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
  target_link_libraries(OrthancClient OpenSSL ws2_32)

  if (CMAKE_CROSSCOMPILING)
    set_target_properties(OrthancClient
      PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++"
      )
  endif()

elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
  # TODO
  target_link_libraries(OrthancClient pthread)

else()
  message(FATAL_ERROR "Support your platform here")
endif()


# Set the version of the "Orthanc Client" shared library
file(STRINGS
  ${CMAKE_SOURCE_DIR}/OrthancCppClient/SharedLibrary/Product.json
  ORTHANC_CLIENT_VERSION_TMP
  REGEX "^[ \t]*\"Version\"[ \t]*")

string(REGEX REPLACE "^.*\"([0-9]+)\\.([0-9]+)\\.([0-9]+)\"" "\\1.\\2" 
  ORTHANC_CLIENT_VERSION ${ORTHANC_CLIENT_VERSION_TMP})

message("Setting the version of the library to ${ORTHANC_CLIENT_VERSION}")

set_target_properties(OrthancClient PROPERTIES 
  VERSION ${ORTHANC_CLIENT_VERSION} 
  SOVERSION ${ORTHANC_CLIENT_VERSION})


install(
  TARGETS OrthancClient
  RUNTIME DESTINATION lib    # Destination for Windows
  LIBRARY DESTINATION lib    # Destination for Linux
  )

install(
  FILES
  ${ORTHANC_ROOT}/OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h 
  ${ORTHANC_ROOT}/Plugins/Include/OrthancCPlugin.h 
  ${ORTHANC_ROOT}/Plugins/Include/OrthancCDatabasePlugin.h 
  ${ORTHANC_ROOT}/Plugins/Include/OrthancCppDatabasePlugin.h 
  DESTINATION include/orthanc
  )




#####################################################################
## Generate the documentation if Doxygen is present
#####################################################################

find_package(Doxygen)
if (DOXYGEN_FOUND)
  configure_file(
    ${CMAKE_SOURCE_DIR}/Resources/OrthancClient.doxygen
    ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
    @ONLY)

  add_custom_command(TARGET OrthancClient 
    POST_BUILD
    COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Generating client documentation with Doxygen" VERBATIM
    )

  install(
    DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancClientDocumentation/doc/
    DESTINATION share/doc/orthanc/OrthancClient
    )

else()
  message("Doxygen not found. The documentation will not be built.")
endif()


#####################################################################
## Prepare the "uninstall" target
## http://www.cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
#####################################################################

configure_file(
  "${CMAKE_CURRENT_SOURCE_DIR}/Resources/CMake/Uninstall.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  IMMEDIATE @ONLY)

add_custom_target(uninstall
  COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)