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
|
6
|
45 include_directories(Resources/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)
|
6
|
53 set(ORTHANC_CPP_CLIENT_AUX CppClient/SharedLibrary/AUTOGENERATED/Windows32.def)
|
1
|
54 elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
6
|
55 set(ORTHANC_CPP_CLIENT_AUX CppClient/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")
|
6
|
65 list(APPEND ORTHANC_CPP_CLIENT_AUX CppClient/SharedLibrary/AUTOGENERATED/Windows32.rc)
|
1
|
66 elseif (${CMAKE_SIZEOF_VOID_P} EQUAL 8)
|
|
67 set(CMAKE_SHARED_LIBRARY_SUFFIX "_Windows64.dll")
|
6
|
68 list(APPEND ORTHANC_CPP_CLIENT_AUX CppClient/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
|
6
|
91 CppClient/Instance.cpp
|
|
92 CppClient/OrthancConnection.cpp
|
|
93 CppClient/Patient.cpp
|
|
94 CppClient/Series.cpp
|
|
95 CppClient/Study.cpp
|
|
96 CppClient/ArrayFilledByThreads.cpp
|
|
97 CppClient/ThreadedCommandProcessor.cpp
|
|
98
|
|
99 SharedLibrary/SharedLibrary.cpp
|
3
|
100
|
1
|
101 ${ORTHANC_CPP_CLIENT_AUX}
|
|
102 ${THIRD_PARTY_SOURCES}
|
|
103 ${CURL_SOURCES}
|
|
104 )
|
|
105
|
3
|
106
|
|
107 list(LENGTH OPENSSL_SOURCES OPENSSL_SOURCES_LENGTH)
|
|
108 if (${OPENSSL_SOURCES_LENGTH} GREATER 0)
|
|
109 add_library(OpenSSL STATIC ${OPENSSL_SOURCES})
|
|
110 target_link_libraries(OrthancClient OpenSSL)
|
|
111 endif()
|
|
112
|
|
113
|
1
|
114 if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux" OR
|
|
115 ${CMAKE_SYSTEM_NAME} STREQUAL "kFreeBSD" OR
|
|
116 ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
|
117 set_target_properties(OrthancClient
|
6
|
118 PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined -Wl,--as-needed -Wl,--version-script=${CMAKE_SOURCE_DIR}/Resources/Laaw/VersionScript.map"
|
1
|
119 )
|
|
120 target_link_libraries(OrthancClient pthread)
|
|
121
|
|
122 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
3
|
123 target_link_libraries(OrthancClient ws2_32)
|
1
|
124
|
|
125 if (CMAKE_CROSSCOMPILING)
|
|
126 set_target_properties(OrthancClient
|
|
127 PROPERTIES LINK_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++"
|
|
128 )
|
|
129 endif()
|
|
130
|
|
131 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin")
|
|
132 # TODO
|
|
133 target_link_libraries(OrthancClient pthread)
|
|
134
|
|
135 else()
|
|
136 message(FATAL_ERROR "Support your platform here")
|
|
137 endif()
|
|
138
|
|
139
|
|
140 # Set the version of the "Orthanc Client" shared library
|
|
141 file(STRINGS
|
6
|
142 ${CMAKE_SOURCE_DIR}/SharedLibrary/Product.json
|
1
|
143 ORTHANC_CLIENT_VERSION_TMP
|
|
144 REGEX "^[ \t]*\"Version\"[ \t]*")
|
|
145
|
|
146 string(REGEX REPLACE "^.*\"([0-9]+)\\.([0-9]+)\\.([0-9]+)\"" "\\1.\\2"
|
|
147 ORTHANC_CLIENT_VERSION ${ORTHANC_CLIENT_VERSION_TMP})
|
|
148
|
|
149 message("Setting the version of the library to ${ORTHANC_CLIENT_VERSION}")
|
|
150
|
|
151 set_target_properties(OrthancClient PROPERTIES
|
|
152 VERSION ${ORTHANC_CLIENT_VERSION}
|
|
153 SOVERSION ${ORTHANC_CLIENT_VERSION})
|
|
154
|
|
155
|
|
156 install(
|
|
157 TARGETS OrthancClient
|
|
158 RUNTIME DESTINATION lib # Destination for Windows
|
|
159 LIBRARY DESTINATION lib # Destination for Linux
|
|
160 )
|
|
161
|
|
162 install(
|
|
163 FILES
|
6
|
164 CppClient/SharedLibrary/AUTOGENERATED/CppClient.h
|
1
|
165 DESTINATION include/orthanc
|
|
166 )
|
|
167
|
|
168
|
|
169
|
|
170
|
|
171 #####################################################################
|
|
172 ## Generate the documentation if Doxygen is present
|
|
173 #####################################################################
|
|
174
|
|
175 find_package(Doxygen)
|
|
176 if (DOXYGEN_FOUND)
|
|
177 configure_file(
|
|
178 ${CMAKE_SOURCE_DIR}/Resources/OrthancClient.doxygen
|
|
179 ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
|
|
180 @ONLY)
|
|
181
|
|
182 add_custom_command(TARGET OrthancClient
|
|
183 POST_BUILD
|
|
184 COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/OrthancClient.doxygen
|
|
185 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
186 COMMENT "Generating client documentation with Doxygen" VERBATIM
|
|
187 )
|
|
188
|
|
189 install(
|
|
190 DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/OrthancClientDocumentation/doc/
|
|
191 DESTINATION share/doc/orthanc/OrthancClient
|
|
192 )
|
|
193
|
|
194 else()
|
|
195 message("Doxygen not found. The documentation will not be built.")
|
|
196 endif()
|
|
197
|
|
198
|
|
199 #####################################################################
|
|
200 ## Prepare the "uninstall" target
|
|
201 ## http://www.cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F
|
|
202 #####################################################################
|
|
203
|
|
204 configure_file(
|
3
|
205 "${CMAKE_CURRENT_SOURCE_DIR}/Orthanc/Resources/CMake/Uninstall.cmake.in"
|
1
|
206 "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
207 IMMEDIATE @ONLY)
|
|
208
|
|
209 add_custom_target(uninstall
|
|
210 COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|