1
# CMakeLists.txt -- CMake configuration file for qhull, qhull6, and related programs
2
#
3
# To build with MSYS/mingw
4
#   cd build && cmake -G "MSYS Makefiles" .. && cmake ..
5
#   make
6
#   make install
7
#
8
# To uninstall on unix or MSYS/mingw
9
#   xargs rm <build/install_manifest.txt
10
#
11
# To build Qhull Visual Studio projects, run cmake twice
12
#   mkdir -p build-cmake && cd build-cmake && cmake -G "Visual Studio 8 2005" .. && cmake ..
13
#   Double click build-cmake/qhull-all.sln
14
#   Build INSTALL for C:/Program Files/qhull
15
#   You may need to copy bin/msvcr80.dll into C:/Program Files/qhull/bin
16
#   If using library debug targets, please rename with '_d' (e.g., qhullstatic_d.lib)
17
#
18
# To uninstall on Windows
19
#   Delete C:/Program Files/qhull
20
#
21
# For qhulltest, use the Qt build (src/qhull-all.pro)
22
#
23
# Qhull ships with cmake-derived sln and proj files
24
#   See eg/make-vcproj.sh -- it created the first versions of these files
25
#   Change to relative paths
26
#   Remove ZERO_CHECK, ALL_BUILD, and INSTALL projects
27
#   Change targets to bin/ and lib/ directories
28
#   Disable incremental linking and ilk files (LinkIncremental="1")
29
#   Disable Run-Time Type Info (rtti)
30
#   Remove src/libqhullcpp from most of the AdditionalIncludeDirectories
31
#   Remove CMAKE_INTDIR from PreprocessorDefinitions
32
#   Adjust target names and destinations (e.g., lib/libqhullstatic_d.a)
33
#  
34
# $Id: //main/2011/qhull/CMakeLists.txt#23 $$Change: 1494 $
35
# $DateTime: 2012/02/21 22:41:40 $$Author: bbarber $
36
37
project(qhull)
38
cmake_minimum_required(VERSION 2.6)
39
40
# Define qhull_VERSION in CMakeLists.txt, Makefile, qhull-exports.def, qhull_p-exports.def, and qhull-warn.pri
41
string(REGEX REPLACE ".* ([0-9]+) .*"
42
    "6.3.1.\\1"  qhull_VERSION "$Change: 1494 $")
43
# qhull_SOVERSION: 2003 = empty, 2009 = 5 , 2010-2012 = 6
44
set(qhull_SOVERSION 6)
45
set(qhull_VERSION2 "2012.1 2012/02/18")
46
47
if(INCLUDE_INSTALL_DIR)
48
else()
49
set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include)
50
endif()
51
if(LIB_INSTALL_DIR)
52
else()
53
set(LIB_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib)
54
endif()
55
if(BIN_INSTALL_DIR)
56
else()
57
set(BIN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/bin)
58
endif()
59
if(MAN_INSTALL_DIR)
60
else()
61
    if(WIN32)
62
        set(MAN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/man/man1)
63
    else()
64
        set(MAN_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/man/man1)
65
    endif()
66
endif()
67
if(DOC_INSTALL_DIR)
68
else()
69
    if(WIN32)
70
        set(DOC_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/doc)
71
    else()
72
        set(DOC_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/qhull)
73
    endif()
74
endif()
75
message(STATUS)
76
message(STATUS "========== qhull Build Information ==========")
77
message(STATUS "Build Version: 				   ${qhull_VERSION}")
78
message(STATUS "Install Prefix (CMAKE_INSTALL_PREFIX):     ${CMAKE_INSTALL_PREFIX}")
79
message(STATUS "Binary Directory (BIN_INSTALL_DIR):        ${BIN_INSTALL_DIR}")
80
message(STATUS "Library Directory (LIB_INSTALL_DIR):       ${LIB_INSTALL_DIR}")
81
message(STATUS "Include Directory (INCLUDE_INSTALL_DIR):   ${INCLUDE_INSTALL_DIR}")
82
message(STATUS "Documentation Directory (DOC_INSTALL_DIR): ${DOC_INSTALL_DIR}")
83
message(STATUS "Man Pages Directory (MAN_INSTALL_DIR):     ${MAN_INSTALL_DIR}")
84
message(STATUS "Build Type (CMAKE_BUILD_TYPE):             ${CMAKE_BUILD_TYPE}")
85
message(STATUS "To override these options, add -D{OPTION_NAME}=... to the cmake command")
86
message(STATUS "  Build the debug targets                  -DCMAKE_BUILD_TYPE=Debug")
87
message(STATUS)
88
message(STATUS "To build and install qhull, enter \"make\" and \"make install\"")
89
message(STATUS)
90
91
# ---------------------------------------
92
# Define library source files and variables
93
#
94
# Files for individual targets are defined with the target
95
# ---------------------------------------
96
97
# Order libqhull object files by frequency of execution.  Small files at end.
98
set(
99
    libqhull_HEADERS
100
        src/libqhull/libqhull.h
101
        src/libqhull/geom.h
102
        src/libqhull/io.h
103
        src/libqhull/mem.h
104
        src/libqhull/merge.h
105
        src/libqhull/poly.h
106
        src/libqhull/qhull_a.h
107
        src/libqhull/qset.h
108
        src/libqhull/random.h
109
        src/libqhull/stat.h
110
        src/libqhull/user.h
111
)
112
set(
113
    libqhull_SOURCES
114
        src/libqhull/global.c
115
        src/libqhull/stat.c
116
        src/libqhull/geom2.c
117
        src/libqhull/poly2.c
118
        src/libqhull/merge.c
119
        src/libqhull/libqhull.c
120
        src/libqhull/geom.c
121
        src/libqhull/poly.c
122
        src/libqhull/qset.c
123
        src/libqhull/mem.c
124
        src/libqhull/random.c
125
        src/libqhull/usermem.c
126
        src/libqhull/userprintf.c
127
        src/libqhull/io.c
128
        src/libqhull/user.c
129
        src/libqhull/rboxlib.c
130
        src/libqhull/userprintf_rbox.c
131
        ${libqhull_HEADERS}
132
)
133
134
set(
135
    libqhull_DOC
136
        src/libqhull/index.htm
137
        src/libqhull/qh-geom.htm
138
        src/libqhull/qh-globa.htm
139
        src/libqhull/qh-io.htm
140
        src/libqhull/qh-mem.htm
141
        src/libqhull/qh-merge.htm
142
        src/libqhull/qh-poly.htm
143
        src/libqhull/qh-qhull.htm
144
        src/libqhull/qh-set.htm
145
        src/libqhull/qh-stat.htm
146
        src/libqhull/qh-user.htm    
147
)
148
149
set(
150
    testqset_HEADERS
151
        src/libqhull/mem.h
152
        src/libqhull/qset.h
153
)
154
set(
155
    testqset_SOURCES
156
        src/libqhull/qset.c
157
        src/libqhull/mem.c
158
        src/testqset/testqset.c
159
        ${testqset_HEADERS}
160
)
161
162
set(
163
    libqhullcpp_HEADERS
164
        src/libqhullcpp/Coordinates.h
165
        src/libqhullcpp/functionObjects.h
166
        src/libqhullcpp/PointCoordinates.h
167
        src/libqhullcpp/Qhull.h
168
        src/libqhullcpp/QhullError.h
169
        src/libqhullcpp/QhullFacet.h
170
        src/libqhullcpp/QhullFacetList.h
171
        src/libqhullcpp/QhullFacetSet.h
172
        src/libqhullcpp/QhullHyperplane.h
173
        src/libqhullcpp/QhullIterator.h
174
        src/libqhullcpp/QhullLinkedList.h
175
        src/libqhullcpp/QhullPoint.h
176
        src/libqhullcpp/QhullPoints.h
177
        src/libqhullcpp/QhullPointSet.h
178
        src/libqhullcpp/QhullQh.h
179
        src/libqhullcpp/QhullRidge.h
180
        src/libqhullcpp/QhullSet.h
181
        src/libqhullcpp/QhullSets.h
182
        src/libqhullcpp/QhullStat.h
183
        src/libqhullcpp/QhullVertex.h
184
        src/libqhullcpp/QhullVertexSet.h
185
        src/libqhullcpp/RboxPoints.h
186
        src/libqhullcpp/RoadError.h
187
        src/libqhullcpp/RoadLogEvent.h
188
        src/libqhullcpp/UsingLibQhull.h
189
        src/qhulltest/RoadTest.h
190
)
191
192
set(
193
    libqhullcpp_SOURCES
194
        src/libqhullcpp/Coordinates.cpp
195
        src/libqhullcpp/PointCoordinates.cpp
196
        src/libqhullcpp/Qhull.cpp
197
        src/libqhullcpp/QhullFacet.cpp
198
        src/libqhullcpp/QhullFacetList.cpp
199
        src/libqhullcpp/QhullFacetSet.cpp
200
        src/libqhullcpp/QhullHyperplane.cpp
201
        src/libqhullcpp/QhullPoint.cpp
202
        src/libqhullcpp/QhullPointSet.cpp
203
        src/libqhullcpp/QhullPoints.cpp
204
        src/libqhullcpp/QhullQh.cpp
205
        src/libqhullcpp/QhullRidge.cpp
206
        src/libqhullcpp/QhullSet.cpp
207
        src/libqhullcpp/QhullStat.cpp
208
        src/libqhullcpp/QhullVertex.cpp
209
        src/libqhullcpp/QhullVertexSet.cpp
210
        src/libqhullcpp/RboxPoints.cpp
211
        src/libqhullcpp/RoadError.cpp
212
        src/libqhullcpp/RoadLogEvent.cpp
213
        src/libqhullcpp/UsingLibQhull.cpp
214
        ${libqhullcpp_HEADERS}
215
)
216
217
set(
218
    doc_FILES
219
        README.txt 
220
        REGISTER.txt 
221
        Announce.txt 
222
        COPYING.txt 
223
        index.htm
224
)
225
226
include_directories(${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/libqhull)
227
228
if(CMAKE_BUILD_TYPE MATCHES "[dD]ebug")
229
    set(qhull_CPP qhullcpp_d)
230
    set(qhull_SHARED qhull_d)
231
    set(qhull_SHAREDP qhull_pd)
232
    set(qhull_STATIC qhullstatic_d)
233
    set(qhull_STATICP qhullstatic_pd)
234
else()
235
    set(qhull_CPP qhullcpp)
236
    set(qhull_SHARED libqhull)  # Avoid name conflict with qhull executable
237
    set(qhull_SHAREDP qhull_p)
238
    set(qhull_STATIC qhullstatic)
239
    set(qhull_STATICP qhullstatic_p)
240
endif()
241
242
set(
243
    qhull_TARGETS_INSTALL
244
        ${qhull_CPP} ${qhull_STATIC} ${qhull_STATICP} ${qhull_SHARED} ${qhull_SHAREDP}
245
        qhull rbox qconvex qdelaunay qvoronoi qhalf
246
)
247
set(
248
    qhull_TARGETS_TEST
249
        user_eg user_eg2 user_eg3 testqset
250
)
251
set(
252
    qhull_TARGETS
253
        ${qhull_TARGETS_INSTALL} ${qhull_TARGETS_TEST}
254
)
255
256
257
# ---------------------------------------
258
# Define shared library qhull without qh_QHpointer
259
# ---------------------------------------
260
261
add_library(${qhull_SHARED} SHARED 
262
        ${libqhull_SOURCES}
263
        src/libqhull/qhull-exports.def)
264
        
265
if(qhull_SHARED MATCHES "libqhull")
266
   set_target_properties(${qhull_SHARED} PROPERTIES
267
        OUTPUT_NAME "qhull")
268
endif()
269
270
set_target_properties(${qhull_SHARED} PROPERTIES
271
    SOVERSION ${qhull_SOVERSION})
272
273
if(UNIX)
274
    target_link_libraries(${qhull_SHARED} m)
275
    if(APPLE)
276
        set_target_properties(${qhull_SHARED} PROPERTIES 
277
            INSTALL_NAME_DIR "${LIB_INSTALL_DIR}")
278
    else()
279
        set_target_properties(${qhull_SHARED} PROPERTIES 
280
            INSTALL_RPATH "${LIB_INSTALL_DIR}"
281
            INSTALL_RPATH_USE_LINK_PATH TRUE
282
            BUILD_WITH_INSTALL_RPATH FALSE)
283
    endif()
284
endif(UNIX)
285
286
# ---------------------------------------
287
# Define shared library qhull with qh_QHpointer
288
# ---------------------------------------
289
290
add_library(${qhull_SHAREDP} SHARED 
291
        ${libqhull_SOURCES}
292
        src/libqhullp/qhull_p-exports.def)
293
set_target_properties(${qhull_SHAREDP} PROPERTIES
294
    COMPILE_DEFINITIONS "qh_QHpointer"
295
    SOVERSION ${qhull_SOVERSION})
296
297
if(UNIX)
298
    target_link_libraries(${qhull_SHAREDP} m)
299
    if(APPLE)
300
        set_target_properties(${qhull_SHAREDP} PROPERTIES 
301
            INSTALL_NAME_DIR "${LIB_INSTALL_DIR}")
302
    else()
303
        set_target_properties(${qhull_SHAREDP} PROPERTIES 
304
            INSTALL_RPATH "${LIB_INSTALL_DIR}"
305
            INSTALL_RPATH_USE_LINK_PATH TRUE
306
            BUILD_WITH_INSTALL_RPATH FALSE)
307
    endif()
308
endif(UNIX)
309
310
# ---------------------------------------
311
# Define static libraries qhullstatic and qhullstatic_p (qh_QHpointer)
312
# ---------------------------------------
313
314
add_library(${qhull_STATIC} STATIC ${libqhull_SOURCES})
315
set_target_properties(${qhull_STATIC} PROPERTIES
316
    VERSION ${qhull_VERSION})
317
318
add_library(${qhull_STATICP} STATIC ${libqhull_SOURCES})
319
set_target_properties(${qhull_STATICP} PROPERTIES
320
    COMPILE_DEFINITIONS "qh_QHpointer"
321
    VERSION ${qhull_VERSION})
322
323
if(UNIX)
324
    target_link_libraries(${qhull_STATIC} m)
325
    target_link_libraries(${qhull_STATICP} m)
326
endif(UNIX)
327
328
# ---------------------------------------
329
# Define C++ static library qhullcpp (qh_QHpointer)
330
# ---------------------------------------
331
332
add_library(${qhull_CPP} STATIC ${libqhullcpp_SOURCES})
333
set_target_properties(${qhull_CPP} PROPERTIES
334
    COMPILE_DEFINITIONS "qh_QHpointer"
335
    VERSION ${qhull_VERSION})
336
337
# ---------------------------------------
338
# Define qhull executables linked to qhullstatic library
339
# ---------------------------------------
340
341
set(qhull_SOURCES       src/qhull/unix.c)
342
set(rbox_SOURCES        src/rbox/rbox.c)
343
set(qconvex_SOURCES     src/qconvex/qconvex.c)
344
set(qdelaunay_SOURCES   src/qdelaunay/qdelaun.c)
345
set(qvoronoi_SOURCES    src/qvoronoi/qvoronoi.c)
346
set(qhalf_SOURCES       src/qhalf/qhalf.c)
347
set(user_eg2_SOURCES    src/user_eg2/user_eg2.c)
348
if(MSVC)
349
    set(user_eg_DEFINES qh_QHpointer qh_QHpointer_dllimport)
350
    set(user_eg2_DEFINES qh_dllimport)
351
else()
352
    set(user_eg_DEFINES qh_QHpointer)
353
    set(user_eg2_DEFINES )
354
endif()
355
356
add_executable(qhull ${qhull_SOURCES})
357
target_link_libraries(qhull ${qhull_STATIC})
358
359
add_executable(rbox ${rbox_SOURCES})
360
target_link_libraries(rbox ${qhull_STATIC})
361
362
add_executable(qconvex ${qconvex_SOURCES})
363
target_link_libraries(qconvex ${qhull_STATIC})
364
365
add_executable(qdelaunay ${qdelaunay_SOURCES})
366
target_link_libraries(qdelaunay ${qhull_STATIC})
367
368
add_executable(qvoronoi ${qvoronoi_SOURCES})
369
target_link_libraries(qvoronoi ${qhull_STATIC})
370
371
add_executable(qhalf ${qhalf_SOURCES})
372
target_link_libraries(qhalf ${qhull_STATIC})
373
374
# ---------------------------------------
375
# Define testqset linked to qset.o and mem.o
376
# ---------------------------------------
377
378
add_executable(testqset ${testqset_SOURCES})
379
380
# ---------------------------------------
381
# Define user_eg linked to qhull shared library with qh_QHpointer
382
# ---------------------------------------
383
384
set(user_eg_SOURCES     src/user_eg/user_eg.c)
385
386
add_executable(user_eg ${user_eg_SOURCES})
387
# user_eg may be linked to qhull_STATIC if user_eg_DEFINES is removed
388
target_link_libraries(user_eg ${qhull_SHAREDP})
389
set_target_properties(user_eg PROPERTIES
390
    COMPILE_DEFINITIONS "${user_eg_DEFINES}")
391
392
# ---------------------------------------
393
# Define user_eg2 linked to qhull shared library (e.g., Debian)
394
# ---------------------------------------
395
396
add_executable(user_eg2 ${user_eg2_SOURCES})
397
target_link_libraries(user_eg2 ${qhull_SHARED})
398
set_target_properties(user_eg2 PROPERTIES
399
    COMPILE_DEFINITIONS "${user_eg2_DEFINES}")
400
401
# ---------------------------------------
402
# Define user_eg3 linked to qhullstatic_p and qhullcpp static library
403
# ---------------------------------------
404
405
# libqhullcpp must be before src/libqhull.  The later is not needed.
406
# Otherwise get error -- user_eg3.cpp:72: error: aggregate 'orgQhull::Qhull qhull' has incomplete type and cannot be defined
407
include_directories(BEFORE ${CMAKE_SOURCE_DIR}/src/libqhullcpp)
408
409
set(user_eg3_SOURCES    src/user_eg3/user_eg3.cpp)
410
411
add_executable(user_eg3 ${user_eg3_SOURCES})
412
# qhull_STATICP must be last, otherwise qh_fprintf,etc. are not loaded from qhull_CPP
413
target_link_libraries(user_eg3 ${qhull_CPP} ${qhull_STATICP})
414
set_target_properties(user_eg3 PROPERTIES
415
    COMPILE_DEFINITIONS "qh_QHpointer")
416
417
# ---------------------------------------
418
# Define install
419
# ---------------------------------------
420
421
install(TARGETS ${qhull_TARGETS_INSTALL}
422
        RUNTIME DESTINATION ${BIN_INSTALL_DIR}
423
        LIBRARY DESTINATION ${LIB_INSTALL_DIR}
424
        ARCHIVE DESTINATION ${LIB_INSTALL_DIR})
425
426
install(FILES ${libqhull_HEADERS}    DESTINATION ${INCLUDE_INSTALL_DIR}/libqhull)
427
install(FILES ${libqhull_DOC}        DESTINATION ${INCLUDE_INSTALL_DIR}/libqhull)
428
install(FILES ${libqhullcpp_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/libqhullcpp)
429
install(FILES html/qhull.man         DESTINATION ${MAN_INSTALL_DIR} RENAME qhull.1)
430
install(FILES html/rbox.man          DESTINATION ${MAN_INSTALL_DIR} RENAME rbox.1)
431
install(FILES ${doc_FILES}           DESTINATION ${DOC_INSTALL_DIR})
432
install(DIRECTORY html/              DESTINATION ${DOC_INSTALL_DIR})