1
|
1 # TODO !
|
|
2
|
|
3 cmake_minimum_required(VERSION 2.8)
|
|
4
|
|
5 project(OrthancClient)
|
|
6
|
3
|
7
|
|
8 # Parameters of the build
|
|
9 SET(STATIC_BUILD OFF CACHE BOOL "Static build of the third-party libraries (necessary for Windows)")
|
|
10
|
|
11 # Advanced parameters to fine-tune linking against system libraries
|
|
12 SET(USE_SYSTEM_BOOST ON CACHE BOOL "Use the system version of Boost")
|
|
13 SET(USE_SYSTEM_CURL ON CACHE BOOL "Use the system version of LibCurl")
|
|
14 SET(USE_SYSTEM_GOOGLE_TEST ON CACHE BOOL "Use the system version of Google Test")
|
|
15 SET(USE_SYSTEM_JSONCPP ON CACHE BOOL "Use the system version of JsonCpp")
|
|
16 SET(USE_SYSTEM_LIBPNG ON CACHE BOOL "Use the system version of LibPng")
|
|
17 SET(USE_SYSTEM_OPENSSL ON CACHE BOOL "Use the system version of OpenSSL")
|
|
18 SET(USE_SYSTEM_ZLIB ON CACHE BOOL "Use the system version of ZLib")
|
1
|
19
|
3
|
20 # Some basic inclusions
|
|
21 SET(ORTHANC_ROOT ${CMAKE_SOURCE_DIR}/Orthanc)
|
|
22 SET(ENABLE_SSL ON)
|
1
|
23
|
3
|
24 include(CheckIncludeFiles)
|
|
25 include(CheckIncludeFileCXX)
|
|
26 include(CheckLibraryExists)
|
|
27 include(FindPythonInterp)
|
|
28 include(Orthanc/Resources/CMake/DownloadPackage.cmake)
|
|
29 include(Orthanc/Resources/CMake/Compiler.cmake)
|
|
30
|
|
31 include(Orthanc/Resources/CMake/BoostConfiguration.cmake)
|
|
32 include(Orthanc/Resources/CMake/JsonCppConfiguration.cmake)
|
|
33 include(Orthanc/Resources/CMake/LibPngConfiguration.cmake)
|
|
34 include(Orthanc/Resources/CMake/LibCurlConfiguration.cmake)
|
|
35 include(Orthanc/Resources/CMake/OpenSslConfiguration.cmake)
|
|
36 include(Orthanc/Resources/CMake/ZlibConfiguration.cmake)
|
|
37
|
|
38 add_definitions(-DORTHANC_SSL_ENABLED=1)
|
1
|
39
|
|
40
|
|
41 #####################################################################
|
|
42 ## Create the standalone DLL containing the Orthanc Client API
|
|
43 #####################################################################
|
|
44
|
3
|
45 include_directories(OrthancCppClient/SharedLibrary/Laaw)
|
1
|
46
|
|
47 if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
|
48 if (CMAKE_CROSSCOMPILING)
|
|
49 # Remove the default "lib" prefix from "libOrthancClient.dll" if cross-compiling
|
|
50 set(CMAKE_SHARED_LIBRARY_PREFIX "")
|
|
51
|
|
52 if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
|
3
|
53 set(ORTHANC_CPP_CLIENT_AUX OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.def)
|
1
|
54 elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
3
|
55 set(ORTHANC_CPP_CLIENT_AUX OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.def)
|
1
|
56 else()
|
|
57 message(FATAL_ERROR "Support your platform here")
|
|
58 endif()
|
|
59 else()
|
|
60 # Nothing to do if using Visual Studio
|
|
61 endif()
|
|
62
|
|
63 if (${CMAKE_SIZEOF_VOID_P} EQUAL 4)
|
|
64 set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows32.dll")
|
3
|
65 list(APPEND ORTHANC_CPP_CLIENT_AUX OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows32.rc)
|
1
|
66 elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
|
67 set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows64.dll")
|
3
|
68 list(APPEND ORTHANC_CPP_CLIENT_AUX OrthancCppClient/SharedLibrary/AUTOGENERATED/Windows64.rc)
|
1
|
69 else()
|
|
70 message(FATAL_ERROR "Support your platform here")
|
|
71 endif()
|
|
72
|
|
73 else()
|
|
74 set(ORTHANC_CPP_CLIENT_AUX ${OPENSSL_SOURCES})
|
|
75 endif()
|
|
76
|
3
|
77
|
1
|
78 add_library(OrthancClient SHARED
|
3
|
79 Orthanc/Core/HttpClient.cpp
|
|
80 Orthanc/Core/ImageFormats/PngReader.cpp
|
|
81 Orthanc/Core/ImageFormats/ImageAccessor.cpp
|
|
82 Orthanc/Core/MultiThreading/SharedMessageQueue.cpp
|
|
83 Orthanc/Core/Toolbox.cpp
|
|
84 Orthanc/Core/ChunkedBuffer.cpp
|
|
85 Orthanc/Core/Enumerations.cpp
|
|
86 Orthanc/Core/OrthancException.cpp
|
|
87 Orthanc/Resources/ThirdParty/base64/base64.cpp
|
|
88 Orthanc/Resources/ThirdParty/base64/base64.cpp
|
|
89 Orthanc/Resources/ThirdParty/md5/md5.c
|
|
90
|
|
91 OrthancCppClient/Instance.cpp
|
|
92 OrthancCppClient/OrthancConnection.cpp
|
|
93 OrthancCppClient/Patient.cpp
|
|
94 OrthancCppClient/Series.cpp
|
|
95 OrthancCppClient/SharedLibrary/SharedLibrary.cpp
|
|
96 OrthancCppClient/Study.cpp
|
|
97 OrthancCppClient/ArrayFilledByThreads.cpp
|
|
98 OrthancCppClient/ThreadedCommandProcessor.cpp
|
|
99
|
1
|
100 ${ORTHANC_CPP_CLIENT_AUX}
|
|
101 ${THIRD_PARTY_SOURCES}
|
|
102 ${CURL_SOURCES}
|
|
103 )
|
|
104
|
3
|
105
|
|
106 list(LENGTH OPENSSL_SOURCES OPENSSL_SOURCES_LENGTH)
|
|
107 if (${OPENSSL_SOURCES_LENGTH} GREATER 0)
|
|
108 add_library(OpenSSL STATIC ${OPENSSL_SOURCES})
|
|
109 target_link_libraries(OrthancClient OpenSSL)
|
|
110 endif()
|
|
111
|
|
112
|
1
|
113 if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
|
|
114 ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR
|
|
115 ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
|
116 set_target_properties(OrthancClient
|
3
|
117 PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined -Wl,--as-needed -Wl,--version-script=${CMAKE_SOURCE_DIR}/OrthancCppClient/SharedLibrary/Laaw/VersionScript.map"
|
1
|
118 )
|
|
119 target_link_libraries(OrthancClient pthread)
|
|
120
|
|
121 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
3
|
122 target_link_libraries(OrthancClient ws2_32)
|
1
|
123
|
|
124 if (CMAKE_CROSSCOMPILING)
|
|
125 set_target_properties(OrthancClient
|
|
126 PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++"
|
|
127 )
|
|
128 endif()
|
|
129
|
|
130 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
|
131 # TODO
|
|
132 target_link_libraries(OrthancClient pthread)
|
|
133
|
|
134 else()
|
|
135 message(FATAL_ERROR "Support your platform here")
|
|
136 endif()
|
|
137
|
|
138
|
|
139 # Set the version of the "Orthanc Client" shared library
|
|
140 file(STRINGS
|
|
141 ${CMAKE_SOURCE_DIR}/OrthancCppClient/SharedLibrary/Product.json
|
|
142 ORTHANC_CLIENT_VERSION_TMP
|
|
143 REGEX "^[ \t]*\"Version\"[ \t]*")
|
|
144
|
|
145 string(REGEX REPLACE "^.*\"([0-9]+)\\.([0-9]+)\\.([0-9]+)\"" "\\1.\\2"
|
|
146 ORTHANC_CLIENT_VERSION ${ORTHANC_CLIENT_VERSION_TMP})
|
|
147
|
|
148 message("Setting the version of the library to ${ORTHANC_CLIENT_VERSION}")
|
|
149
|
|
150 set_target_properties(OrthancClient PROPERTIES
|
|
151 VERSION ${ORTHANC_CLIENT_VERSION}
|
|
152 SOVERSION ${ORTHANC_CLIENT_VERSION})
|
|
153
|
|
154
|
|
155 install(
|
|
156 TARGETS OrthancClient
|
|
157 RUNTIME DESTINATION lib # Destination for Windows
|
|
158 LIBRARY DESTINATION lib # Destination for Linux
|
|
159 )
|
|
160
|
|
161 install(
|
|
162 FILES
|
3
|
163 OrthancCppClient/SharedLibrary/AUTOGENERATED/OrthancCppClient.h
|
1
|
164 DESTINATION include/orthanc
|
|
165 )
|
|
166
|
|
167
|
|
168
|
|
169
|
|
170 #####################################################################
|
|
171 ## Generate the documentation if Doxygen is present
|
|
172 #####################################################################
|
|
173
|
|
174 find_package(Doxygen)
|
|
175 if (DOXYGEN_FOUND)
|
|
176 configure_file(
|
|
177 ${CMAKE_SOURCE_DIR}/Resources/OrthancClient.doxygen
|
|
178 ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
|
|
179 @ONLY)
|
|
180
|
|
181 add_custom_command(TARGET OrthancClient
|
|
182 POST_BUILD
|
|
183 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
|
|
184 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
185 COMMENT "Generating client documentation with Doxygen" VERBATIM
|
|
186 )
|
|
187
|
|
188 install(
|
|
189 DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancClientDocumentation/doc/
|
|
190 DESTINATION share/doc/orthanc/OrthancClient
|
|
191 )
|
|
192
|
|
193 else()
|
|
194 message("Doxygen not found. The documentation will not be built.")
|
|
195 endif()
|
|
196
|
|
197
|
|
198 #####################################################################
|
|
199 ## Prepare the "uninstall" target
|
|
200 ## http://www.cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
|
|
201 #####################################################################
|
|
202
|
|
203 configure_file(
|
3
|
204 "${CMAKE_CURRENT_SOURCE_DIR}/Orthanc/Resources/CMake/Uninstall.cmake.in"
|
1
|
205 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
206 IMMEDIATE @ONLY)
|
|
207
|
|
208 add_custom_target(uninstall
|
|
209 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|