-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
370 lines (326 loc) · 10.8 KB
/
CMakeLists.txt
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
# cmake configuration
cmake_minimum_required(VERSION 2.8.12)
cmake_policy(VERSION 2.8.12)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_SOURCE_DIR}/cmake/")
include(CheckIncludeFile)
# for /MT on MSVC
set(CMAKE_USER_MAKE_RULES_OVERRIDE
"${CMAKE_SOURCE_DIR}/cmake/c_flag_overrides.cmake")
set(CMAKE_USER_MAKE_RULES_OVERRIDE_CXX
"${CMAKE_SOURCE_DIR}/cmake/cxx_flag_overrides.cmake")
# project
project(solvespace)
set(solvespace_VERSION_MAJOR 2)
set(solvespace_VERSION_MINOR 1)
if(WIN32)
# ttf2c takes 10 minutes (!) on Appveyor CI
set(DISABLE_TTF2C CACHE BOOL "Disable font regeneration with ttf2c, for use on CI")
endif()
if(NOT WIN32)
set(GUI gtk2 CACHE STRING "GUI toolkit to use (one of: gtk2 gtk3)")
endif()
# compiler
if(WIN32)
add_definitions(
-D_CRT_SECURE_NO_DEPRECATE=1
-D_CRT_SECURE_NO_WARNINGS=1
-D_WIN32_WINNT=0x500
-D_WIN32_IE=_WIN32_WINNT
-DISOLATION_AWARE_ENABLED=1
-DWIN32=1
-DWIN32_LEAN_AND_MEAN=1)
endif()
if((CMAKE_CXX_PLATFORM_ID STREQUAL "Linux") AND CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed ${CMAKE_EXE_LINKER_FLAGS}")
endif()
if(MINGW)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
endif()
# dependencies
CHECK_INCLUDE_FILE("stdint.h" HAVE_STDINT_H)
find_package(OpenGL REQUIRED)
find_package(Perl)
find_package(PerlModules COMPONENTS GD)
if(NOT (PERL_FOUND AND PERLMODULES_FOUND))
message(STATUS "Perl with GD not found; icons will not be regenerated if modified")
endif()
if(WIN32)
find_package(PNG)
if(NOT PNG_FOUND)
message(STATUS "Using in-tree libpng")
add_subdirectory(extlib/zlib)
message(STATUS "Using in-tree libpng")
set(ZLIB_LIBRARY
zlibstatic)
set(ZLIB_INCLUDE_DIR
"${CMAKE_SOURCE_DIR}/extlib/zlib"
"${CMAKE_BINARY_DIR}/extlib/zlib")
set(SKIP_INSTALL_ALL
ON)
add_subdirectory(extlib/libpng)
set(PNG_FOUND TRUE)
set(PNG_LIBRARIES
png16_static
zlibstatic)
set(PNG_INCLUDE_DIRS
"${CMAKE_SOURCE_DIR}/extlib/libpng"
"${CMAKE_BINARY_DIR}/extlib/libpng"
"${CMAKE_SOURCE_DIR}/extlib/zlib"
"${CMAKE_BINARY_DIR}/extlib/zlib")
endif()
if(NOT MINGW)
message(STATUS "Using prebuilt SpaceWare")
set(SPACEWARE_FOUND TRUE)
set(SPACEWARE_INCLUDE_DIR
"${CMAKE_SOURCE_DIR}/extlib/si")
set(SPACEWARE_LIBRARIES
"${CMAKE_SOURCE_DIR}/extlib/si/siapp.lib")
endif()
elseif(APPLE)
find_package(PNG REQUIRED)
find_library(APPKIT_LIBRARY AppKit REQUIRED)
else() # Linux and compatible systems
find_package(SpaceWare)
# Use freedesktop's pkg-config to locate everything.
find_package(PkgConfig REQUIRED)
pkg_check_modules(PNG REQUIRED libpng)
pkg_check_modules(FONTCONFIG REQUIRED fontconfig)
pkg_check_modules(JSONC REQUIRED json-c)
pkg_check_modules(GLEW REQUIRED glew)
set(HAVE_GTK TRUE)
if(GUI STREQUAL "gtk3")
set(HAVE_GTK3 TRUE)
pkg_check_modules(GTKMM REQUIRED gtkmm-3.0 pangomm-1.4 x11)
elseif(GUI STREQUAL "gtk2")
set(HAVE_GTK2 TRUE)
pkg_check_modules(GTKMM REQUIRED gtkmm-2.4 pangomm-1.4 x11)
else()
message(FATAL_ERROR "GUI unrecognized: ${GUI}")
endif()
endif()
macro(set_config_option VARNAME STRING)
set(${VARNAME} TRUE)
list(APPEND CONFIG_OPTIONS ${STRING})
message(STATUS "Found " ${STRING})
endmacro(set_config_option)
INCLUDE (CheckTypeSize)
check_type_size("void*" SIZEOF_VOID_P)
if(SIZEOF_VOID_P EQUAL 8)
set_config_option(HAVE_64BIT_SIZE_T "Have64BitSizeT")
endif(SIZEOF_VOID_P EQUAL 8)
set(OCC_3PARTIES_LIBRARIES)
if(MSVC)
set(OCC_3PARTIES_DLLS
"C:/occ3dparties/freeimage-3.16.0-vc12-64-opt/bin/FreeImage.dll"
"C:/occ3dparties/freeimage-3.16.0-vc12-64-opt/bin/FreeImagePlus.dll"
"C:/occ3dparties/freetype-2.5.3-vc12-64-opt/bin/freetype.dll"
"C:/occ3dparties/gl2ps-1.3.8-vc12-64-opt/lib/gl2ps.dll"
)
set(OCC_3PARTIES_DLLS_DEB
"C:/occ3dparties/freeimage-3.16.0-vc12-64-deb/bin/FreeImage.dll"
"C:/occ3dparties/freeimage-3.16.0-vc12-64-deb/bin/FreeImagePlus.dll"
"C:/occ3dparties/freetype-2.5.3-vc12-64-opt/bin/freetype.dll"
"C:/occ3dparties/gl2ps-1.3.8-vc12-64-deb/lib/gl2ps.dll"
)
set(OCC_Resources
${CASROOT}/src/StdResource/XCAF
${CASROOT}/src/StdResource/Plugin
)
endif(MSVC)
if(MINGW)
set(OCC_3PARTIES_LIBRARIES_REQUIRED
"libFreeImage"
"libFreeImagePlus"
"libfreetype"
"libgl2ps"
)
set(OCC_3PARTIES_DLLS)
set(OCC_3PARTIES_DLLS_DEB)
foreach(LIB_REQ ${OCC_3PARTIES_LIBRARIES_REQUIRED})
set(DLL "DLL-NOTFOUND")
find_file(DLL ${LIB_REQ}.dll)
if(NOT ${DLL} STREQUAL "LIB-NOTFOUND")
list(APPEND OCC_3PARTIES_DLLS ${DLL})
else(NOT ${DLL} STREQUAL "LIB-NOTFOUND")
message(SEND_ERROR ${LIB_REQ}.dll " not Found")
endif(NOT ${DLL} STREQUAL "LIB-NOTFOUND")
find_library(LIB ${LIB_REQ})
if(NOT ${LIB} STREQUAL "LIB-NOTFOUND")
list(APPEND OCC_3PARTIES_LIBRARIES ${LIB})
else(NOT ${LIB} STREQUAL "LIB-NOTFOUND")
message(SEND_ERROR "library ${LIB_REQ} not Found")
endif(NOT ${LIB} STREQUAL "LIB-NOTFOUND")
unset(DLL CACHE)
unset(LIB CACHE)
endforeach(LIB_REQ ${OCC_3PARTIES_LIBRARIES_REQUIRED})
set(OCC_Resources
${CASROOT}/src/StdResource/XCAF
${CASROOT}/src/StdResource/Plugin
)
endif(MINGW)
#Find OpenCascade
if(WIN32 OR MINGW)
if(HAVE_64BIT_SIZE_T)
set(OCC_SYS_NAME win64)
else(HAVE_64BIT_SIZE_T)
set(OCC_SYS_NAME win32)
endif(HAVE_64BIT_SIZE_T)
else(WIN32 OR MINGW)
set(OCC_SYS_NAME ${CMAKE_SYSTEM_NAME})
endif(WIN32 OR MINGW)
set(OCC_LIBRARIES_REQUIRED
FWOSPlugin
PTKernel
TKBin
TKBinL
TKBinXCAF
TKBO
TKBool
TKBRep
TKCAF
TKCDF
TKernel
TKFeat
TKFillet
TKG2d
TKG3d
TKGeomAlgo
TKGeomBase
TKHLR
TKIGES
TKLCAF
TKMath
TKMesh
TKMeshVS
TKOffset
TKOpenGl
TKPCAF
TKPLCAF
TKPrim
TKPShape
TKService
TKShapeSchema
TKShHealing
TKStdLSchema
TKStdSchema
TKSTEP
TKSTEP209
TKSTEPAttr
TKSTEPBase
TKSTL
TKTopAlgo
TKV3d
TKVRML
TKXCAF
TKXCAFSchema
TKXDEIGES
TKXDESTEP
TKXml
TKXmlL
TKXmlXCAF
TKXSBase
)
list(LENGTH OCC_LIBRARIES_REQUIRED NUM_OCC_LIBRARIES_REQUIRED)
set(OCC_LIBRARIES)
set(OCC_LIBRARIES_DEB)
foreach(OCC ${OCC_LIBRARIES_REQUIRED})
set(OCC_LIB "OCC_LIB-NOTFOUND")
set(OCC_LIB_DEB "OCC_LIB_DEB-NOTFOUND")
if(MSVC)
find_library(OCC_LIB ${OCC} PATHS ${CASROOT}/${OCC_SYS_NAME}/vc12/lib ${CASROOT}/${OCC_SYS_NAME}/vc10/lib NO_DEFAULT_PATH)
find_library(OCC_LIB_DEB ${OCC} PATHS ${CASROOT}/${OCC_SYS_NAME}/vc12/libd ${CASROOT}/${OCC_SYS_NAME}/vc10/libd NO_DEFAULT_PATH)
elseif(MINGW)
find_library(OCC_LIB ${OCC} PATHS ${OCE_INST_DIR}/${OCC_SYS_NAME} PATH_SUFFIXES lib bin)
else(MSVC)
find_library(OCC_LIB ${OCC} PATH_SUFFIXES oce/lib)
if(${OCC_LIB} STREQUAL "OCC_LIB-NOTFOUND")
find_library(OCC_LIB ${OCC} PATH_SUFFIXES lib)
endif()
endif(MSVC)
if(NOT ${OCC_LIB} STREQUAL "OCC_LIB-NOTFOUND")
list(APPEND OCC_LIBRARIES ${OCC_LIB})
message(STATUS "Found ${OCC} = ${OCC_LIB}")
else(NOT ${OCC_LIB} STREQUAL "OCC_LIB-NOTFOUND")
message(SEND_ERROR "${OCC} not Found")
endif(NOT ${OCC_LIB} STREQUAL "OCC_LIB-NOTFOUND")
if(MSVC)
if(NOT ${OCC_LIB_DEB} STREQUAL "OCC_LIB_DEB-NOTFOUND")
list(APPEND OCC_LIBRARIES_DEB ${OCC_LIB_DEB})
else(NOT ${OCC_LIB_DEB} STREQUAL "OCC_LIB-NOTFOUND")
list(APPEND OCC_LIBRARIES_DEB ${OCC_LIB})
message(WARNING ${OCC} " not Found Debug Version")
endif(NOT ${OCC_LIB_DEB} STREQUAL "OCC_LIB_DEB-NOTFOUND")
unset(OCC_LIB_DEB CACHE) # only available in cmake >= 2.6.4
endif(MSVC)
unset(OCC_LIB CACHE) # only available in cmake >= 2.6.4
endforeach(OCC)
if(WIN32)
set(OCC_DLLS)
set(OCC_DLLS_DEB)
foreach(OCC ${OCC_LIBRARIES_REQUIRED})
set(OCC_DLL "OCC_DLL-NOTFOUND")
if(MSVC)
find_file(OCC_DLL ${OCC}.dll PATHS ${CASROOT}/${OCC_SYS_NAME}/vc12/bin ${CASROOT}/${OCC_SYS_NAME}/vc10/bin NO_DEFAULT_PATH)
elseif(MINGW)
find_file(OCC_DLL lib${OCC}.dll PATHS ${OCE_INST_DIR}/${OCC_SYS_NAME} PATH_SUFFIXES bin)
endif()
if(NOT ${OCC_DLL} STREQUAL "OCC_DLL-NOTFOUND")
list(APPEND OCC_DLLS ${OCC_DLL})
else(NOT ${OCC_DLL} STREQUAL "OCC_DLL-NOTFOUND")
message(SEND_ERROR ${OCC} " not Found")
endif(NOT ${OCC_DLL} STREQUAL "OCC_DLL-NOTFOUND")
if(MSVC)
set(OCC_DLL "OCC_DLL-NOTFOUND")
find_file(OCC_DLL ${OCC}.dll PATHS ${CASROOT}/${OCC_SYS_NAME}/vc12/bind ${CASROOT}/${OCC_SYS_NAME}/vc10/bind NO_DEFAULT_PATH)
if(NOT ${OCC_DLL} STREQUAL "OCC_DLL-NOTFOUND")
list(APPEND OCC_DLLS_DEB ${OCC_DLL})
else(NOT ${OCC_DLL} STREQUAL "OCC_DLL-NOTFOUND")
message(STATUS "Debug version of" ${OCC} " not Found")
endif(NOT ${OCC_DLL} STREQUAL "OCC_DLL-NOTFOUND")
endif(MSVC)
unset(OCC_DLL CACHE) # only available in cmake >= 2.6.4
endforeach(OCC ${OCC_LIBRARIES_REQUIRED})
endif(WIN32)
list(LENGTH OCC_LIBRARIES NUM_OCC_LIBRARIES)
set(OCC_INCLUDES)
if(NUM_OCC_LIBRARIES EQUAL NUM_OCC_LIBRARIES_REQUIRED)
if(MINGW)
find_path(OCC_INC "BRep_Tool.hxx" PATHS ${OCE_INST_DIR} PATH_SUFFIXES include/oce)
elseif(MSVC)
find_path(OCC_INC "BRep_Tool.hxx" PATHS ${CASROOT} PATH_SUFFIXES inc)
else(MINGW)
find_path(OCC_INC "BRep_Tool.hxx" PATH_SUFFIXES include/oce)
if(${OCC_INC} STREQUAL "OCC_INC-NOTFOUND")
find_path(OCC_INC "BRep_Tool.hxx" PATHS ${CASROOT} PATH_SUFFIXES inc)
endif()
endif(MINGW)
if(OCC_INC)
list(APPEND OCC_INCLUDES ${OCC_INC})
set_config_option(HAVE_OCC "OpenCascade")
ADD_DEFINITIONS(-DCSFDB)
if(HAVE_64BIT_SIZE_T)
add_definitions(-D_OCC67)
endif(HAVE_64BIT_SIZE_T)
find_path(OCC_CONFIG_H "config.h" PATHS ${OCC_INC} ${CASROOT} NO_DEFAULT_PATH)
if(${OCC_CONFIG_H} STREQUAL "OCC_CONFIG_H-NOTFOUND")
add_definitions(-DHAVE_NO_OCC_CONFIG_H)
else(${OCC_CONFIG_H} STREQUAL "OCC_CONFIG_H-NOTFOUND")
list(APPEND OCC_INCLUDES ${OCC_CONFIG_H})
ADD_DEFINITIONS(-DHAVE_OCC_CONFIG_H)
endif(${OCC_CONFIG_H} STREQUAL "OCC_CONFIG_H-NOTFOUND")
find_path(OCE_CONFIG_H "oce-config.h" PATHS ${OCC_INC})
if(${OCE_CONFIG_H} STREQUAL "OCE_CONFIG_H-NOTFOUND")
add_definitions(-DHAVE_NO_OCE_CONFIG_H)
else(${OCE_CONFIG_H} STREQUAL "OCE_CONFIG_H-NOTFOUND")
ADD_DEFINITIONS(-DHAVE_OCE_CONFIG_H)
endif(${OCE_CONFIG_H} STREQUAL "OCE_CONFIG_H-NOTFOUND")
endif(OCC_INC)
endif(NUM_OCC_LIBRARIES EQUAL NUM_OCC_LIBRARIES_REQUIRED)
# components
if(WIN32)
add_subdirectory(tools)
endif()
add_subdirectory(src)
add_subdirectory(exposed)