root/OpenSceneGraph/trunk/CMakeLists.txt

Revision 9472 (checked in by robert, 1 day ago)

Commented out the warning disabling block

  • Property svn:eol-style set to native
Line 
1 IF(WIN32)
2     CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6 FATAL_ERROR)
3 ELSE(WIN32)
4     IF(APPLE)
5         CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
6     ELSE(APPLE)
7         CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0 FATAL_ERROR)
8     ENDIF(APPLE)
9 ENDIF(WIN32)
10
11 if(COMMAND cmake_policy)
12     # Works around warnings libraries linked against that don't
13     # have absolute paths (e.g. -lpthreads)
14     cmake_policy(SET CMP0003 NEW)
15
16     # Works around warnings about escaped quotes in ADD_DEFINITIONS
17     # statements.
18     cmake_policy(SET CMP0005 NEW)
19
20     # cmake-2.6.1 introduces policy cmp0008 decide how to treat full path libraries that do not appear to be valid library file names
21     # quote from cvslog "Such libraries worked by accident in the VS IDE and Xcode generators in CMake 2.4 and below."
22     if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4 AND ${CMAKE_PATCH_VERSION} GREATER 0)
23         cmake_policy(SET CMP0008 OLD)
24     endif(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4 AND ${CMAKE_PATCH_VERSION} GREATER 0)
25 endif(COMMAND cmake_policy)
26
27 PROJECT(OpenSceneGraph)
28
29 SET(OPENSCENEGRAPH_MAJOR_VERSION 2)
30 SET(OPENSCENEGRAPH_MINOR_VERSION 7)
31 SET(OPENSCENEGRAPH_PATCH_VERSION 8)
32 SET(OPENSCENEGRAPH_SOVERSION 53)
33
34 # set to 0 when not a release candidate, non zero means that any generated
35 # svn tags will be treated as release candidates of given number
36 SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0)
37
38 SET(OPENSCENEGRAPH_VERSION ${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION})
39
40 SET(OSG_PLUGINS osgPlugins-${OPENSCENEGRAPH_VERSION})
41
42 SET(OSG_PLUGIN_PREFIX "")
43
44 IF (CYGWIN)
45     SET(OSG_PLUGIN_PREFIX "cygwin_")
46 ENDIF(CYGWIN)
47
48 IF(MINGW)
49     SET(OSG_PLUGIN_PREFIX "mingw_")
50 ENDIF(MINGW)
51
52
53 # We want to build SONAMES shared librariess
54 SET(OPENSCENEGRAPH_SONAMES TRUE)
55 SET(OPENTHREADS_SONAMES TRUE)
56
57 SET(OpenThreads_SOURCE_DIR ${OpenSceneGraph_SOURCE_DIR})
58
59 # We have some custom .cmake scripts not in the official distribution.
60 # Maybe this can be used override existing behavior if needed?
61 SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
62
63
64 # Okay, here's the problem: On some platforms, linking against OpenThreads
65 # is not enough and explicit linking to the underlying thread library
66 # is also required (e.g. FreeBSD). But OpenThreads may be built with different
67 # backends (Pthreads, Sproc, Windows) so we don't know what the underlying
68 # thread library is because some platforms support multiple backends (e.g.
69 # IRIX supports Sproc and Pthreads). Linking all libraries won't work
70 # because the libraries may be incompatible.
71 # So the current solution is to attempt best guess linking and exempt certain
72 # cases. With IRIX, we're going to hope explicit linking to the underlying
73 # library is not necessary. We currently don't case for pthreads on Windows
74 # which might be an issue on things like Cygwin. This may need to be fixed.
75 FIND_PACKAGE(Threads)
76 IF(CMAKE_SYSTEM MATCHES IRIX)
77     # Erase CMAKE_THREAD_LIBS_INIT and hope it works
78     SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "")
79 ENDIF(CMAKE_SYSTEM MATCHES IRIX)
80
81 OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making svn branches, tags, updating ChangeLog." OFF)
82 IF (OSG_MAINTAINER)
83
84     SET(OPENSCENEGRAPH_SVN "trunk")
85     #SET(OPENSCENEGRAPH_SVN "branches")
86     SET(OPENSCENEGRAPH_BRANCH OpenSceneGraph-${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION})
87
88     #
89     # Provide target for tagging a release
90     #
91     SET(SVNCOMMAND svn)
92     SET(SVNTRUNKDIR     http://www.openscenegraph.org/svn/osg/OpenSceneGraph/trunk)
93     SET(SVNTAGDIR       http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags)
94     SET(SVNBRANCHDIR    http://www.openscenegraph.org/svn/osg/OpenSceneGraph/branch)
95
96     IF   (OPENSCENEGRAPH_SVN STREQUAL "trunk")
97         SET(SVNSOURCEDIR ${SVNTRUNKDIR})
98     ELSE (OPENSCENEGRAPH_SVN STREQUAL "trunk")
99         SET(SVNSOURCEDIR ${SVNBRANCH_DIR}/${OPENSCENEGRAPH_BRANCH})
100     ENDIF(OPENSCENEGRAPH_SVN STREQUAL "trunk")
101
102
103     IF   (OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0)
104         SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION})
105     ELSE (OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0)
106         SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION}-rc${OPENSCENEGRAPH_RELEASE_CANDIDATE})
107     ENDIF(OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0)
108
109
110     ADD_CUSTOM_TARGET(tag-test
111         COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
112     )
113
114     ADD_CUSTOM_TARGET(tag-run
115         COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
116     )
117
118     ADD_CUSTOM_TARGET(branch-test
119         COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
120     )
121
122     ADD_CUSTOM_TARGET(branch-run
123         COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
124     )
125
126     #
127     # Provide target for generating ChangeLog
128     #
129     SET(GENERATELOGS svn2cl)
130
131     ADD_CUSTOM_TARGET(ChangeLog
132         COMMAND ${SVNCOMMAND} update
133         COMMAND ${GENERATELOGS}
134     )
135    
136 ENDIF(OSG_MAINTAINER)
137
138
139 # Find OpenGL
140 FIND_PACKAGE(OpenGL)
141
142 IF(APPLE)
143     FIND_LIBRARY(CARBON_LIBRARY Carbon)
144     FIND_LIBRARY(COCOA_LIBRARY Cocoa)
145 ENDIF(APPLE)
146
147 IF(UNIX)
148     # Not sure what this will do on Cygwin and Msys
149     # Also, remember OS X X11 is a user installed option so it may not exist.
150     FIND_PACKAGE(X11)
151     # Some Unicies need explicit linkage to the Math library or the build fails.
152     FIND_LIBRARY(MATH_LIBRARY m)
153 ENDIF(UNIX)
154
155 # Make the headers visible to everything
156 IF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
157    INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
158 ENDIF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
159
160 INCLUDE_DIRECTORIES(
161     ${OpenSceneGraph_SOURCE_DIR}/include
162     ${OPENGL_INCLUDE_DIR}
163 )
164
165 # Common global definitions
166 #ADD_DEFINITIONS(-D)
167 # Platform specific definitions
168
169
170 IF(WIN32)
171
172     IF(MSVC)
173         # This option is to enable the /MP switch for Visual Studio 2005 and above compilers
174         OPTION(WIN32_USE_MP "Set to ON to build OpenSceneGraph with the /MP option (Visual Studio 2005 and above)." OFF)
175         MARK_AS_ADVANCED(WIN32_USE_MP)
176         IF(WIN32_USE_MP)
177             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
178         ENDIF(WIN32_USE_MP)
179
180         # turn off various warnings
181         # foreach(warning 4244 4251 4267 4275 4290 4786 4305 4996)
182         #     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd${warning}")
183         # endforeach(warning)
184
185         # More MSVC specific compilation flags
186         ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)
187         ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
188     ENDIF(MSVC)
189
190     #needed for net plugin
191     SET (OSG_SOCKET_LIBS wsock32)
192     # Both Cygwin and Msys need -DNOMINMAX ???
193     IF(UNIX)
194         ADD_DEFINITIONS(-DNOMINMAX)
195     ENDIF(UNIX)
196 ########################################################################################################
197 # the following options are MSVC specific,
198 # the first OSG_MSVC_VERSIONED_DLL activate a custom build-time layout that should allow to run examples and application
199 # fron bin folder without requiring installation step.
200 # it also prepend "osg${OPENSCENEGRAPH_SOVERSION}-" to only .dll files, leaving .lib files untouched in lib
201 # it also use a hack to get rid of Debug and Release folder in MSVC projects
202 # all the .dll and .pdb are in bin and all the .lib and .exp are in lib
203 #
204 # the second option disable incremental linking in debug build , that is enabled by default by CMake
205 ##########################################################################################################
206
207     IF(MSVC)
208         IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7)
209             MESSAGE("Warning:  disabling versioned options 2.4.6 exibits inconsintencies in .pdb naming, at least under MSVC, suggested upgrading at least to 2.4.7")
210             SET(OSG_MSVC_VERSIONED_DLL OFF)
211             SET(OSG_MSVC_DEBUG_INCREMENTAL_LINK ON)
212         ELSE(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7)
213             OPTION(OSG_MSVC_VERSIONED_DLL "Set to ON to build OpenSceneGraph with versioned dll names" ON)
214             MARK_AS_ADVANCED(OSG_MSVC_VERSIONED_DLL)
215             OPTION(OSG_MSVC_DEBUG_INCREMENTAL_LINK "Set to OFF to build OpenSceneGraph without incremental linking in debug (release is off by default)" ON)
216             MARK_AS_ADVANCED(OSG_MSVC_DEBUG_INCREMENTAL_LINK)
217             IF(NOT OSG_MSVC_DEBUG_INCREMENTAL_LINK)
218                 SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO")
219                 SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO")
220                 SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO")
221             ENDIF(NOT OSG_MSVC_DEBUG_INCREMENTAL_LINK)
222         ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7)
223     ENDIF(MSVC)
224 ENDIF(WIN32)
225
226 ########################################################################################################
227 ##### these were settings located in SetupCommon.cmake used in Luigi builds.... find out what are useful
228 ########################################################################################################
229 #luigi#SET(CMAKE_VERBOSE_MAKEFILE TRUE)
230 #luigi#SET(CMAKE_SKIP_RPATH TRUE)
231 #luigi#SET(CMAKE_SKIP_RULE_DEPENDENCY TRUE)
232 #luigi#IF(UNIX)
233 #luigi#    LIST_CONTAINS(contains "g++" ${CMAKE_CXX_COMPILER_LIST})
234 #luigi#    IF (contains)
235 #luigi#        MESSAGE(${MY_MESSAGE_DEFAULT} "${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} setting  CMAKE_CXX_COMPILER to g++")
236 #luigi#        SET(CMAKE_CXX_COMPILER "g++")
237 #luigi#        SET(CMAKE_CXX_COMPILER_LOADED 2)
238 #luigi#        SET(CMAKE_CXX_COMPILER_WORKS 2)
239 #luigi#    ENDIF (contains)
240 #luigi#    SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
241 #luigi#    SET(CMAKE_CXX_FLAGS_DEBUG "-ggdb -gstabs")
242 #luigi#ENDIF(UNIX)
243 ########################################################################################################
244
245 OPTION(OSG_USE_FLOAT_MATRIX "Set to ON to build OpenSceneGraph with float Matrix instead of double." OFF)
246 MARK_AS_ADVANCED(OSG_USE_FLOAT_MATRIX)
247
248 OPTION(OSG_USE_FLOAT_PLANE "Set to ON to build OpenSceneGraph with float Plane instead of double." OFF)
249 MARK_AS_ADVANCED(OSG_USE_FLOAT_PLANE)
250
251 OPTION(OSG_USE_FLOAT_BOUNDINGSPHERE "Set to ON to build OpenSceneGraph with float BoundingSphere instead of double." ON)
252 MARK_AS_ADVANCED(OSG_USE_FLOAT_BOUNDINGSPHERE)
253
254 OPTION(OSG_USE_FLOAT_BOUNDINGBOX "Set to ON to build OpenSceneGraph with float BoundingBox instead of double." ON)
255 MARK_AS_ADVANCED(OSG_USE_FLOAT_BOUNDINGBOX)
256
257 OPTION(OSG_USE_UTF8_FILENAME "Set to ON to use a UTF8 locale for filenames instead of the default locale." OFF)
258 MARK_AS_ADVANCED(OSG_USE_UTF8_FILENAME)
259
260 OPTION(OSG_DISABLE_MSVC_WARNINGS "Set to OFF to not disable MSVC warnings generated by OSG headers." ON)
261 MARK_AS_ADVANCED(OSG_DISABLE_MSVC_WARNINGS)
262
263 OPTION(OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION "Set to ON to use the ref_ptr<> T* operator() output conversion. " ON)
264
265 ################################################################################
266 # Set Config file
267
268 SET(OPENSCENEGRAPH_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osg/Config")
269 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Config.in"
270                "${OPENSCENEGRAPH_CONFIG_HEADER}")
271 # INSTALL_FILES(/include/osg/ FILES "${OPENSCENEGRAPH_CONFIG_HEADER}")
272
273
274 ################################################################################
275 # 3rd Party Dependency Stuff
276 IF(WIN32)
277     INCLUDE(Find3rdPartyDependencies)
278 ENDIF(WIN32)
279
280 # Common to all platforms:
281 FIND_PACKAGE(FreeType)
282 FIND_PACKAGE(FLTK)
283 FIND_PACKAGE(GLUT)
284 FIND_PACKAGE(SDL)
285 FIND_PACKAGE(FOX)
286 FIND_PACKAGE(Inventor)
287 FIND_PACKAGE(Jasper)
288 FIND_PACKAGE(OpenEXR)
289 FIND_PACKAGE(COLLADA)
290 FIND_PACKAGE(Xine)
291 FIND_PACKAGE(OpenVRML)
292 FIND_PACKAGE(Performer)
293 FIND_PACKAGE(ZLIB)
294 FIND_PACKAGE(GDAL)
295 FIND_PACKAGE(CURL)
296 FIND_PACKAGE(ZLIB)
297 FIND_PACKAGE(ITK)
298 FIND_PACKAGE(LibVNCServer)
299 FIND_PACKAGE(OurDCMTK)
300 FIND_PACKAGE(XUL)
301
302 SET(wxWidgets_USE_LIBS base core gl net)
303 FIND_PACKAGE(wxWidgets)
304
305 # To select a specific version of QT define DESIRED_QT_VERSION
306 # via cmake -DDESIRED_QT_VERSION=4
307 IF  (DESIRED_QT_VERSION)
308
309     IF  (DESIRED_QT_VERSION MATCHES 4)
310       FIND_PACKAGE(Qt4)
311     ELSE(DESIRED_QT_VERSION MATCHES 4)
312       FIND_PACKAGE(Qt3)
313     ENDIF(DESIRED_QT_VERSION MATCHES 4)
314
315 ELSE(DESIRED_QT_VERSION)
316
317     FIND_PACKAGE(Qt4)
318
319     IF  (NOT QT4_FOUND)
320         FIND_PACKAGE(Qt3)
321     ENDIF(NOT QT4_FOUND)
322
323 ENDIF(DESIRED_QT_VERSION)
324
325 #use pkg-config to find various modues
326 INCLUDE(FindPkgConfig OPTIONAL)
327
328 IF(PKG_CONFIG_FOUND)
329
330     INCLUDE(FindPkgConfig)
331
332     PKG_CHECK_MODULES(GTK gtk+-2.0)
333
334     IF(WIN32)
335         PKG_CHECK_MODULES(GTKGL gtkglext-win32-1.0)
336     ELSE(WIN32)
337         PKG_CHECK_MODULES(GTKGL gtkglext-x11-1.0)
338     ENDIF(WIN32)
339
340     PKG_CHECK_MODULES(RSVG librsvg-2.0)
341     PKG_CHECK_MODULES(CAIRO cairo)
342     PKG_CHECK_MODULES(POPPLER poppler-glib)
343
344 ENDIF(PKG_CONFIG_FOUND)
345
346
347
348
349 #
350 # Test to determine if we want the "tripledot" form of the GLU tesselator callback.
351 #
352 IF(NOT DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT)
353     IF(WIN32 OR CMAKE_SYSTEM_NAME MATCHES "Linux")
354
355         # Skip the compile check for platforms that never need the variable
356         # form.
357         SET(DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT false)
358
359     ELSE(WIN32 OR CMAKE_SYSTEM_NAME MATCHES "Linux")
360
361         # For other platforms perform the check
362         INCLUDE(CheckCXXSourceCompiles)
363         SET(CMAKE_REQUIRED_DEFINITIONS -DGLU_TESS_CALLBACK_TRIPLEDOT)
364         SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include ${GLUT_INCLUDE_DIR} ${GL_INCLUDE_DIR})
365         SET(CMAKE_REQUIRED_LIBRARIES ${GLUT_LIBRARY} ${GL_LIBRARY})
366         CHECK_CXX_SOURCE_COMPILES(
367             "#include <osg/GL>
368             #include <osg/GLU>
369             static void testcb(GLvoid *, void*) { }
370             int main() {
371                GLUtesselator *t = gluNewTess();
372                gluTessCallback(t, GLU_TESS_VERTEX_DATA, (GLU_TESS_CALLBACK) testcb);
373                return 0;
374             }"
375             GLU_Tesselator_Needs_Variable_Parameter_Callback_Convention_Failure_Means_No)
376         SET(DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT
377             ${GLU_Tesselator_Needs_Variable_Parameter_Callback_Convention_Failure_Means_No})
378
379     ENDIF(WIN32 OR CMAKE_SYSTEM_NAME MATCHES "Linux")
380 ENDIF(NOT DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT)
381
382 OPTION(OSG_GLU_TESS_CALLBACK_TRIPLEDOT "Set to ON to build with variable parameter (...) version of GLU tesselator callback" ${DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT})
383 IF(OSG_GLU_TESS_CALLBACK_TRIPLEDOT)
384     ADD_DEFINITIONS(-DGLU_TESS_CALLBACK_TRIPLEDOT)
385 ENDIF(OSG_GLU_TESS_CALLBACK_TRIPLEDOT)
386
387 # Platform specific:
388 # (We can approach this one of two ways. We can try to FIND everything
389 # and simply check if we found the packages before actually building
390 # or we can hardcode the cases. The advantage of the former is that
391 # packages that are installed on platforms that don't require them
392 # will still get built (presuming no compatibility issues). But this
393 # also means modules that are redundant may get built. For example,
394 # OS X doesn't need GIF, JPEG, PNG, TIFF, etc because it uses QuickTime.
395 # Also, it will clutter the CMake menu with "NOT_FOUND".
396 # The downside to the latter is that it is harder to build those
397 # potentially redundant modules.)
398
399 # Image readers/writers depend on 3rd party libraries except for OS X which
400 # can use Quicktime.
401 IF(NOT APPLE)
402     FIND_PACKAGE(GIFLIB)
403     FIND_PACKAGE(JPEG)
404     FIND_PACKAGE(PNG)
405     FIND_PACKAGE(TIFF)
406
407     # QuickTime is required for OS X, but optional for Windows.
408     IF(WIN32)
409         FIND_PACKAGE(QuickTime)
410     ENDIF(WIN32)
411
412 ELSE(NOT APPLE)
413     FIND_PACKAGE(QuickTime)
414 ENDIF(NOT APPLE)
415
416 ################################################################################
417 # Create bin and lib directories if required
418
419 IF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
420    FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin ${CMAKE_BINARY_DIR}/lib ${CMAKE_BINARY_DIR}/lib/${OSG_PLUGINS})
421 ENDIF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
422
423
424 ################################################################################
425 # Installation stuff
426
427 SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
428 ADD_DEFINITIONS(-DOSG_DEBUG_POSTFIX=${CMAKE_DEBUG_POSTFIX})
429
430 IF(UNIX AND NOT WIN32)
431   IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
432     ADD_DEFINITIONS("-D_DEBUG")
433   ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
434 ENDIF(UNIX AND NOT WIN32)
435
436 IF(CYGWIN)
437   IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
438     ADD_DEFINITIONS("-D_DEBUG")
439   ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
440 ENDIF(CYGWIN)
441
442 IF(UNIX AND NOT WIN32 AND NOT APPLE)
443   IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
444       SET(LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
445       MARK_AS_ADVANCED(LIB_POSTFIX)
446   ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
447 ENDIF(UNIX AND NOT WIN32 AND NOT APPLE)
448 IF(NOT DEFINED LIB_POSTFIX)
449     SET(LIB_POSTFIX "")
450 ENDIF(NOT DEFINED LIB_POSTFIX)
451
452 # Here we apparantly do some funky stuff with making the bin/ and lib/
453 # folders which is probably needed to work around a very old CMake bug?
454
455 #SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin/${CMAKE_SYSTEM_NAME})
456 SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)
457 MAKE_DIRECTORY(${OUTPUT_BINDIR})
458 IF(MSVC AND NOT MSVC_IDE)
459     MAKE_DIRECTORY(${OUTPUT_BINDIR}/${OSG_PLUGINS})
460 ENDIF(MSVC AND NOT MSVC_IDE)
461
462 #SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib/${CMAKE_SYSTEM_NAME})
463 SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)
464 MAKE_DIRECTORY(${OUTPUT_LIBDIR})
465 IF(NOT MSVC)
466     MAKE_DIRECTORY(${OUTPUT_LIBDIR}/${OSG_PLUGINS})
467 ENDIF(NOT MSVC)
468
469 # On CMake 2.4.x use EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH and later
470 # we work around the DLL placement by use of the PREFIX target property hack
471 #
472 # On CMake 2.6.x use the newly minted CMAKE_LIBRARY_OUTPUT_DIRECTORY,
473 # CMAKE_ARCHIVE_OUTPUT_DIRECTORY & CMAKE_RUNTIME_OUTPUT_DIRECTORY
474
475 IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
476     # If CMake >= 2.6.0
477     SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
478     SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
479     IF(WIN32)
480         SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
481     ELSE(WIN32)
482         SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
483     ENDIF(WIN32)
484 ELSE(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
485     SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_BINDIR})
486     SET(LIBRARY_OUTPUT_PATH ${OUTPUT_LIBDIR})
487 ENDIF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
488
489 #SET(INSTALL_BINDIR OpenSceneGraph/bin)
490 #SET(INSTALL_INCDIR OpenSceneGraph/include)
491 #SET(INSTALL_LIBDIR OpenSceneGraph/lib)
492 #SET(INSTALL_DOCDIR OpenSceneGraph/doc)
493
494 ################################################################################
495 # User Options
496
497
498 # Expose CMAKE_INCLUDE_PATH and CMAKE_LIBARY_PATH to the GUI so users
499 # may set these values without needing to manipulate the environment.
500 SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} CACHE STRING "You may add additional search paths here. Use ; to separate multiple paths.")
501 SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} CACHE STRING "You may add additional search paths here. Use ; to separate multiple paths.")
502 # We are proposing that a new variable called CMAKE_PREFIX_PATH be introduced
503 # to CMake to compliment CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH.
504 # A formal feature request has been submited to CMake, Bug #4947.
505 # It is intended for those users who have common prefixes for their INCLUDE
506 # and LIBRARY locations. So if users have headers in /usr/local/include
507 # and libraries in /usr/local/lib, the common prefix is /usr/local.
508 # It should also cover the case where headers and libraries are
509 # in the same directory.
510 # Our proposal expects that FIND_* commands will automatically search for
511 # CMAKE_PREFIX_PATH right after CMAKE_INCLUDE_PATH or CMAKE_LIBRARY_PATH.
512 # Obviously, since CMake does not currently support this, we must write
513 # our Find*.cmake modules to explicitly support this. Otherwise, this variable
514 # will have no impact.
515 # This is unofficial so this may be removed or changed at anytime.
516 SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "(EXPERIMENTAL) You may add additional search paths here. Use ; to separate multiple paths.")
517
518 # This is for an advanced option to give aggressive warnings
519 # under different compilers. If yours is not implemented, this option
520 # will not be made available.
521 IF(CMAKE_COMPILER_IS_GNUCXX)
522     # To be complete, we might also do GNUCC flags,
523     # but everything here is C++ code.
524     # -Wshadow and -Woverloaded-virtual are also interesting flags, but OSG
525     # returns too many hits.
526     # FYI, if we do implement GNUCC, then -Wmissing-prototypes in another
527     # interesting C-specific flag.
528     # Also, there is a bug in gcc 4.0. Under C++, -pedantic will create
529     # errors instead of warnings for certain issues, including superfluous
530     # semicolons and commas, and the use of long long. -fpermissive seems
531     # to be the workaround.
532     SET(OSG_AGGRESSIVE_WARNING_FLAGS "-Wall -Wparentheses -Wformat=2 -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused -fpermissive")
533 ELSE(CMAKE_COMPILER_IS_GNUCXX)
534     IF(MSVC)
535         # FIXME: What are good aggressive warning flags for Visual Studio?
536         # And do we need to further subcase this for different versions of VS?
537         # CMake variables: MSVC60, MSVC70, MSVC71, MSVC80, CMAKE_COMPILER_2005
538         SET(OSG_AGGRESSIVE_WARNING_FLAGS "/W4 /wd4706 /wd4127")
539
540
541     ELSE(MSVC)
542         # CMake lacks an elseif, so other non-gcc, non-VS compilers need
543         # to be listed below. If unhandled, OSG_AGGRESSIVE_WARNING_FLAGS should
544         # remain unset.
545     ENDIF(MSVC)
546 ENDIF(CMAKE_COMPILER_IS_GNUCXX)
547
548 # This part is for the CMake menu option to toggle the warnings on/off.
549 # This will only be made available if we set values for OSG_AGGRESSIVE_WARNING_FLAGS.
550 IF(OSG_AGGRESSIVE_WARNING_FLAGS)
551     OPTION(OSG_USE_AGGRESSIVE_WARNINGS "Enable to activate aggressive warnings" ON)
552     MARK_AS_ADVANCED(OSG_USE_AGGRESSIVE_WARNINGS)
553
554     IF(OSG_USE_AGGRESSIVE_WARNINGS)
555         # Add flags defined by OSG_AGGRESSIVE_WARNING_FLAGS if they aren't already there
556         FOREACH(flag ${OSG_AGGRESSIVE_WARNING_FLAGS})
557             IF(NOT CMAKE_CXX_FLAGS MATCHES "${flag}")
558                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
559             ENDIF(NOT CMAKE_CXX_FLAGS MATCHES "${flag}")
560         ENDFOREACH(flag)
561     ELSE(OSG_USE_AGGRESSIVE_WARNINGS)
562         # Remove all flags considered aggresive
563         FOREACH(flag ${OSG_AGGRESSIVE_WARNING_FLAGS})
564             STRING(REGEX REPLACE "${flag}" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
565         ENDFOREACH(flag)
566     ENDIF(OSG_USE_AGGRESSIVE_WARNINGS)
567 ENDIF(OSG_AGGRESSIVE_WARNING_FLAGS)
568
569
570 # Dynamic vs Static Linking
571 OPTION(DYNAMIC_OPENSCENEGRAPH "Set to ON to build OpenSceneGraph for dynamic linking.  Use OFF for static." ON)
572 IF   (DYNAMIC_OPENSCENEGRAPH)
573     SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED")
574 ELSE (DYNAMIC_OPENSCENEGRAPH)
575     SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC")
576 ENDIF(DYNAMIC_OPENSCENEGRAPH)
577
578 INCLUDE(OsgMacroUtils)
579 # OSG Core
580 ADD_SUBDIRECTORY(src)
581
582 # OSG Applications
583 OPTION(BUILD_OSG_APPLICATIONS "Enable to build OSG Applications (e.g. osgviewer)" ON)
584 IF   (BUILD_OSG_APPLICATIONS)
585     ADD_SUBDIRECTORY(applications)
586 ENDIF(BUILD_OSG_APPLICATIONS)
587
588 # OSG Examples
589 OPTION(BUILD_OSG_EXAMPLES "Enable to build OSG Examples" OFF)
590 IF   (BUILD_OSG_EXAMPLES)
591     ADD_SUBDIRECTORY(examples)
592 ENDIF(BUILD_OSG_EXAMPLES)
593
594 # Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
595 # and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
596 IF(APPLE)
597     # These are just defaults/recommendations, but how we want to build
598     # out of the box. But the user needs to be able to change these options.
599     # So we must only set the values the first time CMake is run, or we
600     # will overwrite any changes the user sets.
601     # FORCE is used because the options are not reflected in the UI otherwise.
602     # Seems like a good place to add version specific compiler flags too.
603     IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
604         # This is really fragile, but CMake doesn't provide the OS system
605         # version information we need. (Darwin versions can be changed
606         # independently of OS X versions.)
607         # It does look like CMake handles the CMAKE_OSX_SYSROOT automatically.
608         IF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
609             # 64-bit compiles are not supported with Carbon. We should enable
610             # 64-bit compilation by default once osgviewer has been
611             # rewritten with Cocoa.
612             #SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX" FORCE)
613             SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX" FORCE)
614             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
615         ELSE(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
616             IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
617                 SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX" FORCE)
618                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.4 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
619             ELSE(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
620                 # No Universal Binary support
621                 # Should break down further to set the -mmacosx-version-min,
622                 # but the SDK detection is too unreliable here.
623             ENDIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
624         ENDIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
625     ENDIF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
626
627     OPTION(OSG_BUILD_APPLICATION_BUNDLES "Enable the building of applications and examples as OSX Bundles" OFF)
628
629 ENDIF(APPLE)
630
631
632 #
633 # Provide target for generating wrappers
634 #
635 SET(GENWRAPPER genwrapper)
636
637 ADD_CUSTOM_TARGET(wrappers
638     COMMAND ${GENWRAPPER} -c ${OpenSceneGraph_SOURCE_DIR}/src/osgWrappers/genwrapper.conf -t ${OpenSceneGraph_SOURCE_DIR}/src/osgWrappers/Doxyfile.template -d ${OpenSceneGraph_SOURCE_DIR} | doxygen -
639     COMMAND ${GENWRAPPER} -c ${OpenSceneGraph_SOURCE_DIR}/src/osgWrappers/genwrapper.conf -l ${OpenSceneGraph_SOURCE_DIR}
640 )
641
642 # For Doxygen
643 INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL)
644 OPTION(BUILD_DOCUMENTATION "Build OpenSceneGraph reference documentation using doxygen (use: make DoxygenDoc)" OFF)
645 MARK_AS_ADVANCED(CLEAR BUILD_DOCUMENTATION)
646 # To build the documention, you will have to enable it
647 # and then do the equivalent of "make DoxygenDoc".
648 IF(BUILD_DOCUMENTATION)
649
650     OPTION(BUILD_REF_DOCS_SEARCHENGINE "Enable doxygen's search engine (requires that documentation to be installed on a php enabled web server)" OFF)
651     IF(BUILD_REF_DOCS_SEARCHENGINE)
652         SET(SEARCHENGINE YES)
653     ELSE(BUILD_REF_DOCS_SEARCHENGINE)
654         SET(SEARCHENGINE NO)
655     ENDIF(BUILD_REF_DOCS_SEARCHENGINE)
656
657     OPTION(BUILD_REF_DOCS_TAGFILE "Generate a tag file named osg.tag on the documentation web server" OFF)
658     IF(BUILD_REF_DOCS_TAGFILE)
659         SET(GENERATE_TAGFILE "${OpenSceneGraph_BINARY_DIR}/doc/OpenSceneGraphReferenceDocs/osg.tag")
660     ELSE(BUILD_REF_DOCS_TAGFILE)
661         SET(GENERATE_TAGFILE "")
662     ENDIF(BUILD_REF_DOCS_TAGFILE)
663
664     IF(DOT)
665         SET(HAVE_DOT YES)
666     ELSE(DOT)
667         SET(HAVE_DOT NO)
668     ENDIF(DOT)
669    
670     # If html help generation was requested. DOCUMENTATION_HTML_HELP is defined by Documentation.cmake
671     SET(GENERATE_HTMLHELP "NO")
672     IF(DOCUMENTATION_HTML_HELP)
673         # on windows Documentation.cmake finds the html help workshop fi it exists. On u*ix we might have it with wine but no way to point it out
674         IF(NOT WIN32)
675             SET(HTML_HELP_COMPILER "" CACHE FILEPATH "Enter location of the HTML help compiler to let doxygen compile html")
676             MARK_AS_ADVANCED(HTML_HELP_COMPILER)
677         ENDIF(NOT WIN32)
678         # this var sets a proper value in .doxygen files when coniguring them below
679         SET(GENERATE_HTMLHELP "YES")
680     endif(DOCUMENTATION_HTML_HELP)
681  
682     # This processes our doxyfile.cmake and substitutes paths to generate
683     # a final Doxyfile
684     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/doxyfile.cmake
685         ${PROJECT_BINARY_DIR}/doc/openscenegraph.doxyfile
686     )
687     # copy the osg logo to documentations target folder
688     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PlatformSpecifics/Windows/icons/src/osg32-32.png
689         ${PROJECT_BINARY_DIR}/doc/OpenSceneGraphReferenceDocs/osg32-32.png COPYONLY
690     )
691     #INSTALL(FILES ${PROJECT_BINARY_DIR}/doc/${PROJECT_NAME}ReferenceDocs-${OPENSCENEGRAPH_VERSION}.chm DESTINATION doc OPTIONAL COMPONENT openscenegraph-doc)
692     INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/doc/OpenSceneGraphReferenceDocs DESTINATION doc COMPONENT openscenegraph-doc)
693
694     # now set up openthreads documentation generation
695     IF(BUILD_REF_DOCS_TAGFILE)
696         SET(GENERATE_TAGFILE "${OpenSceneGraph_BINARY_DIR}/doc/OpenThreadsReferenceDocs/ot.tag")
697     ENDIF(BUILD_REF_DOCS_TAGFILE)
698
699     # This processes our openthreads.doxyfile.cmake and generate a final doxyfile
700     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/openthreads.doxyfile.cmake
701         ${PROJECT_BINARY_DIR}/doc/openthreads.doxyfile
702     )
703     # copy the osg logo to documentations target folder
704     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PlatformSpecifics/Windows/icons/src/osg32-32.png
705         ${PROJECT_BINARY_DIR}/doc/OpenThreadsReferenceDocs/osg32-32.png COPYONLY
706     )
707     #INSTALL(FILES ${PROJECT_BINARY_DIR}/doc/${PROJECT_NAME}ReferenceDocs-${OPENSCENEGRAPH_VERSION}.chm DESTINATION doc OPTIONAL COMPONENT openscenegraph-doc)
708     INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/doc/OpenThreadsReferenceDocs DESTINATION doc COMPONENT openthreads-doc)
709
710     # Process our other doxyfiles but don't create targets for these
711     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/all_Doxyfile
712         ${PROJECT_BINARY_DIR}/doc/all_Doxyfile)
713     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/auto_Doxyfile
714         ${PROJECT_BINARY_DIR}/doc/auto_Doxyfile)
715     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/core_Doxyfile
716         ${PROJECT_BINARY_DIR}/doc/core_Doxyfile)
717    
718     # This creates a new target to build documentation.
719     # It runs ${DOXYGEN} which is the full path and executable to
720     # Doxygen on your system, set by the FindDoxygen.cmake module
721     # (called by FindDocumentation.cmake).
722     # It runs the final generated Doxyfile against it.
723     # The DOT_PATH is substituted into the Doxyfile.
724     ADD_CUSTOM_TARGET(doc_openscenegraph ${DOXYGEN}
725         ${PROJECT_BINARY_DIR}/doc/openscenegraph.doxyfile
726     )
727     ADD_CUSTOM_TARGET(doc_openthreads ${DOXYGEN}
728         ${PROJECT_BINARY_DIR}/doc/openthreads.doxyfile
729     )
730 ENDIF(BUILD_DOCUMENTATION)
731
732 OPTION(BUILD_DASHBOARD_REPORTS "Set to ON to activate reporting of OpenSceneGraph builds here http://www.cdash.org/CDashPublic/index.php?project=OpenSceneGraph" OFF)
733 IF(BUILD_DASHBOARD_REPORTS)
734 # The following are required to uses Dart and the Cdash dashboard
735 # viewable here : http://www.cdash.org/CDashPublic/index.php?project=OpenSceneGraph
736     INCLUDE(Dart)
737 ENDIF(BUILD_DASHBOARD_REPORTS)
738
739 # This needs to be run very last so other parts of the scripts can take
740 # advantage of this.
741 IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
742     SET(OSG_CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
743 ENDIF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
744
745 # CPack is only available for cmake version >= 2.6.0
746 IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
747     # If CMake >= 2.6.0
748     OPTION(BUILD_OSG_PACKAGES "Set to ON to generate CPack configuration files and default packaging targets" OFF)
749     IF(BUILD_OSG_PACKAGES)
750       INCLUDE(OsgCPack)
751     ENDIF(BUILD_OSG_PACKAGES)
752 ENDIF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
753
754 #-----------------------------------------------------------------------------
755 ### uninstall target
756 #-----------------------------------------------------------------------------
757 CONFIGURE_FILE(
758   "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
759   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
760   IMMEDIATE @ONLY)
761 ADD_CUSTOM_TARGET(uninstall
762   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
Note: See TracBrowser for help on using the browser.