0
|
1 # Orthanc - A Lightweight, RESTful DICOM Store
|
|
2 # Copyright (C) 2012-2015 Sebastien Jodogne, Medical Physics
|
|
3 # Department, University Hospital of Liege, Belgium
|
|
4 #
|
|
5 # This program is free software: you can redistribute it and/or
|
|
6 # modify it under the terms of the GNU Affero General Public License
|
|
7 # as published by the Free Software Foundation, either version 3 of
|
|
8 # the License, or (at your option) any later version.
|
|
9 #
|
|
10 # This program is distributed in the hope that it will be useful, but
|
|
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13 # Affero General Public License for more details.
|
|
14 #
|
|
15 # You should have received a copy of the GNU Affero General Public License
|
|
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
|
18
|
|
19 cmake_minimum_required(VERSION 2.8)
|
|
20
|
13
|
21 project(OrthancWebViewer)
|
0
|
22
|
8
|
23 set(ORTHANC_WEBVIEWER_VERSION "1.0")
|
|
24
|
|
25
|
0
|
26 # Parameters of the build
|
|
27 set(STATIC_BUILD OFF CACHE BOOL "Static build of the third-party libraries (necessary for Windows)")
|
|
28 SET(STANDALONE_BUILD ON CACHE BOOL "Standalone build (all the resources are embedded, necessary for releases)")
|
|
29 set(ALLOW_DOWNLOADS OFF CACHE BOOL "Allow CMake to download packages")
|
|
30
|
|
31 # Advanced parameters to fine-tune linking against system libraries
|
|
32 set(USE_SYSTEM_BOOST ON CACHE BOOL "Use the system version of Boost")
|
|
33 set(USE_SYSTEM_GDCM ON CACHE BOOL "Use the system version of Grassroot DICOM (GDCM)")
|
|
34 set(USE_SYSTEM_GOOGLE_TEST ON CACHE BOOL "Use the system version of Google Test")
|
|
35 set(USE_SYSTEM_JSONCPP ON CACHE BOOL "Use the system version of JsonCpp")
|
|
36 set(USE_SYSTEM_LIBJPEG ON CACHE BOOL "Use the system version of libjpeg")
|
|
37 set(USE_SYSTEM_LIBPNG ON CACHE BOOL "Use the system version of libpng")
|
|
38 set(USE_SYSTEM_ZLIB ON CACHE BOOL "Use the system version of zlib")
|
|
39 set(USE_SYSTEM_SQLITE ON CACHE BOOL "Use the system version of SQLite")
|
|
40
|
|
41 # Distribution-specific settings
|
|
42 set(USE_GTEST_DEBIAN_SOURCE_PACKAGE OFF CACHE BOOL "Use the sources of Google Test shipped with libgtest-dev (Debian only)")
|
|
43 mark_as_advanced(USE_GTEST_DEBIAN_SOURCE_PACKAGE)
|
|
44
|
|
45 # Force static build when cross-compiling
|
|
46 if (CMAKE_CROSSCOMPILING)
|
|
47 set(STATIC_BUILD ON)
|
|
48 set(STANDALONE_BUILD ON)
|
|
49 endif()
|
|
50
|
|
51 if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
52 SET(OS_LIBRARIES uuid rt dl)
|
|
53 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pthread")
|
|
54 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -pthread")
|
|
55 elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
|
|
56 SET(OS_LIBRARIES rpcrt4 ws2_32 secur32)
|
|
57 if (CMAKE_COMPILER_IS_GNUCXX)
|
|
58 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
|
|
59 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-libgcc -static-libstdc++")
|
|
60 endif()
|
|
61 endif ()
|
|
62
|
|
63 if (CMAKE_COMPILER_IS_GNUCXX)
|
|
64 SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/Resources/VersionScript.map -Wl,--no-undefined")
|
|
65 endif()
|
|
66
|
13
|
67 if (MSVC)
|
|
68 # Use static runtime under Visual Studio
|
|
69 # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace
|
|
70 # http://stackoverflow.com/a/6510446
|
|
71 foreach(flag_var
|
|
72 CMAKE_C_FLAGS_DEBUG
|
|
73 CMAKE_CXX_FLAGS_DEBUG
|
|
74 CMAKE_C_FLAGS_RELEASE
|
|
75 CMAKE_CXX_FLAGS_RELEASE
|
|
76 CMAKE_C_FLAGS_MINSIZEREL
|
|
77 CMAKE_CXX_FLAGS_MINSIZEREL
|
|
78 CMAKE_C_FLAGS_RELWITHDEBINFO
|
|
79 CMAKE_CXX_FLAGS_RELWITHDEBINFO)
|
|
80 string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
|
81 string(REGEX REPLACE "/MDd" "/MTd" ${flag_var} "${${flag_var}}")
|
|
82 endforeach(flag_var)
|
|
83
|
|
84 add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
|
85 endif()
|
0
|
86
|
|
87 include(CheckIncludeFiles)
|
|
88 include(CheckIncludeFileCXX)
|
|
89 include(CheckLibraryExists)
|
|
90 include(${CMAKE_SOURCE_DIR}/Resources/CMake/AutoGeneratedCode.cmake)
|
|
91 include(${CMAKE_SOURCE_DIR}/Resources/CMake/DownloadPackage.cmake)
|
|
92
|
|
93 include(${CMAKE_SOURCE_DIR}/Resources/CMake/BoostConfiguration.cmake)
|
|
94 include(${CMAKE_SOURCE_DIR}/Resources/CMake/GdcmConfiguration.cmake)
|
|
95 include(${CMAKE_SOURCE_DIR}/Resources/CMake/GoogleTestConfiguration.cmake)
|
|
96 include(${CMAKE_SOURCE_DIR}/Resources/CMake/JsonCppConfiguration.cmake)
|
|
97 include(${CMAKE_SOURCE_DIR}/Resources/CMake/LibJpegConfiguration.cmake)
|
|
98 include(${CMAKE_SOURCE_DIR}/Resources/CMake/LibPngConfiguration.cmake)
|
|
99 include(${CMAKE_SOURCE_DIR}/Resources/CMake/ZlibConfiguration.cmake)
|
|
100 include(${CMAKE_SOURCE_DIR}/Resources/CMake/SQLiteConfiguration.cmake)
|
|
101
|
|
102 include(${CMAKE_SOURCE_DIR}/Resources/CMake/JavaScriptLibraries.cmake)
|
|
103
|
|
104
|
|
105 # Check that the Orthanc SDK headers are available or download them
|
|
106 if (STATIC_BUILD)
|
11
|
107 set(ORTHANC_SDK_URL "http://orthanc.googlecode.com/hg-history/Orthanc-0.8.6")
|
0
|
108 file(MAKE_DIRECTORY ${AUTOGENERATED_DIR}/orthanc)
|
|
109 file(DOWNLOAD "${ORTHANC_SDK_URL}/Plugins/Include/OrthancCPlugin.h"
|
|
110 "${AUTOGENERATED_DIR}/orthanc/OrthancCPlugin.h" SHOW_PROGRESS)
|
|
111 if (${MSVC})
|
|
112 add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
|
|
113 file(DOWNLOAD "${ORTHANC_SDK_URL}/Resources/ThirdParty/VisualStudio/stdint.h"
|
|
114 "${AUTOGENERATED_DIR}/stdint.h" SHOW_PROGRESS)
|
|
115 endif()
|
|
116 else ()
|
|
117 CHECK_INCLUDE_FILE_CXX(orthanc/OrthancCPlugin.h HAVE_ORTHANC_H)
|
|
118 if (NOT HAVE_ORTHANC_H)
|
|
119 message(FATAL_ERROR "Please install the headers of the Orthanc plugins SDK")
|
|
120 endif()
|
|
121 endif()
|
|
122
|
|
123
|
|
124 if (STANDALONE_BUILD)
|
|
125 add_definitions(
|
|
126 -DORTHANC_STANDALONE=1
|
|
127 )
|
|
128 set(EMBEDDED_RESOURCES
|
|
129 WEB_VIEWER ${CMAKE_SOURCE_DIR}/WebApplication
|
|
130 )
|
|
131 else()
|
|
132 add_definitions(
|
|
133 -DORTHANC_STANDALONE=0
|
|
134 -DWEB_VIEWER_PATH="${CMAKE_SOURCE_DIR}/WebApplication/"
|
|
135 )
|
|
136 endif()
|
|
137
|
|
138 EmbedResources(
|
|
139 ORTHANC_EXPLORER ${CMAKE_SOURCE_DIR}/Resources/OrthancExplorer.js
|
|
140 JAVASCRIPT_LIBS ${JAVASCRIPT_LIBS_DIR}
|
|
141 ${EMBEDDED_RESOURCES}
|
|
142 )
|
|
143
|
|
144 add_definitions(
|
|
145 -DORTHANC_SQLITE_STANDALONE=1
|
|
146 )
|
|
147
|
|
148 set(CORE_SOURCES
|
|
149 ${BOOST_SOURCES}
|
|
150 ${JSONCPP_SOURCES}
|
|
151 ${SQLITE_SOURCES}
|
|
152 ${LIBJPEG_SOURCES}
|
|
153 ${ZLIB_SOURCES}
|
|
154 ${LIBPNG_SOURCES}
|
|
155
|
|
156 # Sources inherited from Orthanc core
|
|
157 ${CMAKE_SOURCE_DIR}/Orthanc/ChunkedBuffer.cpp
|
|
158 ${CMAKE_SOURCE_DIR}/Orthanc/Enumerations.cpp
|
|
159 ${CMAKE_SOURCE_DIR}/Orthanc/FileStorage/FilesystemStorage.cpp
|
|
160 ${CMAKE_SOURCE_DIR}/Orthanc/ImageFormats/ImageAccessor.cpp
|
|
161 ${CMAKE_SOURCE_DIR}/Orthanc/ImageFormats/ImageBuffer.cpp
|
|
162 ${CMAKE_SOURCE_DIR}/Orthanc/ImageFormats/ImageProcessing.cpp
|
|
163 ${CMAKE_SOURCE_DIR}/Orthanc/ImageFormats/PngWriter.cpp
|
|
164 ${CMAKE_SOURCE_DIR}/Orthanc/MultiThreading/SharedMessageQueue.cpp
|
|
165 ${CMAKE_SOURCE_DIR}/Orthanc/OrthancException.cpp
|
|
166 ${CMAKE_SOURCE_DIR}/Orthanc/SQLite/Connection.cpp
|
|
167 ${CMAKE_SOURCE_DIR}/Orthanc/SQLite/FunctionContext.cpp
|
|
168 ${CMAKE_SOURCE_DIR}/Orthanc/SQLite/Statement.cpp
|
|
169 ${CMAKE_SOURCE_DIR}/Orthanc/SQLite/StatementId.cpp
|
|
170 ${CMAKE_SOURCE_DIR}/Orthanc/SQLite/StatementReference.cpp
|
|
171 ${CMAKE_SOURCE_DIR}/Orthanc/SQLite/Transaction.cpp
|
|
172 ${CMAKE_SOURCE_DIR}/Orthanc/Toolbox.cpp
|
|
173 ${CMAKE_SOURCE_DIR}/Orthanc/Uuid.cpp
|
|
174 ${CMAKE_SOURCE_DIR}/Resources/ThirdParty/base64/base64.cpp
|
|
175
|
|
176 ${CMAKE_SOURCE_DIR}/Plugin/Cache/CacheManager.cpp
|
|
177 ${CMAKE_SOURCE_DIR}/Plugin/Cache/CacheScheduler.cpp
|
|
178 ${CMAKE_SOURCE_DIR}/Plugin/JpegWriter.cpp
|
|
179 ${CMAKE_SOURCE_DIR}/Plugin/ViewerToolbox.cpp
|
|
180 ${CMAKE_SOURCE_DIR}/Plugin/SeriesVolumeSorter.cpp
|
|
181 ${CMAKE_SOURCE_DIR}/Plugin/ViewerPrefetchPolicy.cpp
|
|
182 ${CMAKE_SOURCE_DIR}/Plugin/InstanceInformation.cpp
|
|
183 ${CMAKE_SOURCE_DIR}/Plugin/InstanceInformationAdapter.cpp
|
|
184 ${CMAKE_SOURCE_DIR}/Plugin/SeriesInformationAdapter.cpp
|
|
185 )
|
|
186
|
|
187 add_library(OrthancWebViewer
|
|
188 SHARED
|
|
189 ${CORE_SOURCES}
|
|
190 ${AUTOGENERATED_SOURCES}
|
|
191 ${CMAKE_SOURCE_DIR}/Plugin/Plugin.cpp
|
|
192
|
|
193 # The following files depend on GDCM
|
|
194 ${CMAKE_SOURCE_DIR}/Plugin/ParsedDicomImage.cpp
|
|
195 ${CMAKE_SOURCE_DIR}/Plugin/DecodedImageAdapter.cpp
|
|
196 )
|
|
197
|
|
198 if (STATIC_BUILD OR NOT USE_SYSTEM_GDCM)
|
|
199 add_dependencies(OrthancWebViewer GDCM)
|
|
200 endif()
|
|
201
|
|
202 target_link_libraries(OrthancWebViewer ${GDCM_LIBRARIES} ${OS_LIBRARIES})
|
|
203
|
8
|
204 message("Setting the version of the library to ${ORTHANC_WEBVIEWER_VERSION}")
|
12
|
205
|
|
206 add_definitions(-DORTHANC_WEBVIEWER_VERSION="${ORTHANC_WEBVIEWER_VERSION}")
|
|
207
|
8
|
208 set_target_properties(OrthancWebViewer PROPERTIES
|
|
209 VERSION ${ORTHANC_WEBVIEWER_VERSION}
|
|
210 SOVERSION ${ORTHANC_WEBVIEWER_VERSION})
|
|
211
|
0
|
212 install(
|
8
|
213 TARGETS OrthancWebViewer
|
|
214 RUNTIME DESTINATION lib # Destination for Windows
|
9
|
215 LIBRARY DESTINATION share/orthanc/plugins # Destination for Linux
|
8
|
216 )
|
0
|
217
|
|
218 add_executable(UnitTests
|
|
219 ${CORE_SOURCES}
|
|
220 ${GTEST_SOURCES}
|
|
221 UnitTestsSources/UnitTestsMain.cpp
|
|
222 )
|
|
223
|
|
224 target_link_libraries(UnitTests ${OS_LIBRARIES})
|