root/OpenSceneGraph/trunk/CMakeLists.txt @ 9558

Revision 9558, 32.3 kB (checked in by robert, 6 years ago)

From Alberto Luaces, "I have modified CMakeLists.txt in order to make CMake fill the existent
openscenegraph.pc and openthreads.pc files with OSG's installation values.
Then I install those files into the expected path for pkg-config (this can
also be modified through PKG_CONFIG_PATH environment variable). Therefore
those of us who are using pkg-config for linking can easily select which
version of OSG we want to use."

  • Property svn:eol-style set to native
Line 
1IF(WIN32)
2    CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6 FATAL_ERROR)
3ELSE(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)
9ENDIF(WIN32)
10
11if(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)
25endif(COMMAND cmake_policy)
26
27PROJECT(OpenSceneGraph)
28
29SET(OPENSCENEGRAPH_MAJOR_VERSION 2)
30SET(OPENSCENEGRAPH_MINOR_VERSION 7)
31SET(OPENSCENEGRAPH_PATCH_VERSION 9)
32SET(OPENSCENEGRAPH_SOVERSION 54)
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
36SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0)
37
38SET(OPENSCENEGRAPH_VERSION ${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION})
39
40SET(OSG_PLUGINS osgPlugins-${OPENSCENEGRAPH_VERSION})
41
42SET(OSG_PLUGIN_PREFIX "")
43
44IF (CYGWIN)
45    SET(OSG_PLUGIN_PREFIX "cygwin_")
46ENDIF(CYGWIN)
47
48IF(MINGW)
49    SET(OSG_PLUGIN_PREFIX "mingw_")
50ENDIF(MINGW)
51
52
53# We want to build SONAMES shared librariess
54SET(OPENSCENEGRAPH_SONAMES TRUE)
55SET(OPENTHREADS_SONAMES TRUE)
56
57SET(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?
61SET(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.
75FIND_PACKAGE(Threads)
76IF(CMAKE_SYSTEM MATCHES IRIX)
77    # Erase CMAKE_THREAD_LIBS_INIT and hope it works
78    SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "")
79ENDIF(CMAKE_SYSTEM MATCHES IRIX)
80
81OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making svn branches, tags, updating ChangeLog." OFF)
82IF (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   
136ENDIF(OSG_MAINTAINER)
137
138
139# Find OpenGL
140FIND_PACKAGE(OpenGL)
141
142IF(APPLE)
143    FIND_LIBRARY(CARBON_LIBRARY Carbon)
144    FIND_LIBRARY(COCOA_LIBRARY Cocoa)
145ENDIF(APPLE)
146
147IF(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)
153ENDIF(UNIX)
154
155# Make the headers visible to everything
156IF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
157   INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
158ENDIF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
159
160INCLUDE_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
170IF(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)
224ENDIF(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
245OPTION(OSG_USE_FLOAT_MATRIX "Set to ON to build OpenSceneGraph with float Matrix instead of double." OFF)
246MARK_AS_ADVANCED(OSG_USE_FLOAT_MATRIX)
247
248OPTION(OSG_USE_FLOAT_PLANE "Set to ON to build OpenSceneGraph with float Plane instead of double." OFF)
249MARK_AS_ADVANCED(OSG_USE_FLOAT_PLANE)
250
251OPTION(OSG_USE_FLOAT_BOUNDINGSPHERE "Set to ON to build OpenSceneGraph with float BoundingSphere instead of double." ON)
252MARK_AS_ADVANCED(OSG_USE_FLOAT_BOUNDINGSPHERE)
253
254OPTION(OSG_USE_FLOAT_BOUNDINGBOX "Set to ON to build OpenSceneGraph with float BoundingBox instead of double." ON)
255MARK_AS_ADVANCED(OSG_USE_FLOAT_BOUNDINGBOX)
256
257OPTION(OSG_USE_UTF8_FILENAME "Set to ON to use a UTF8 locale for filenames instead of the default locale." OFF)
258MARK_AS_ADVANCED(OSG_USE_UTF8_FILENAME)
259
260OPTION(OSG_DISABLE_MSVC_WARNINGS "Set to OFF to not disable MSVC warnings generated by OSG headers." ON)
261MARK_AS_ADVANCED(OSG_DISABLE_MSVC_WARNINGS)
262
263OPTION(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
268SET(OPENSCENEGRAPH_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osg/Config")
269CONFIGURE_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
276IF(WIN32)
277    INCLUDE(Find3rdPartyDependencies)
278ENDIF(WIN32)
279
280# Common to all platforms:
281FIND_PACKAGE(FreeType)
282FIND_PACKAGE(FLTK)
283FIND_PACKAGE(GLUT)
284FIND_PACKAGE(SDL)
285FIND_PACKAGE(FOX)
286FIND_PACKAGE(Inventor)
287FIND_PACKAGE(Jasper)
288FIND_PACKAGE(OpenEXR)
289FIND_PACKAGE(COLLADA)
290FIND_PACKAGE(Xine)
291FIND_PACKAGE(OpenVRML)
292FIND_PACKAGE(Performer)
293FIND_PACKAGE(ZLIB)
294FIND_PACKAGE(GDAL)
295FIND_PACKAGE(CURL)
296FIND_PACKAGE(ZLIB)
297FIND_PACKAGE(ITK)
298FIND_PACKAGE(LibVNCServer)
299FIND_PACKAGE(OurDCMTK)
300FIND_PACKAGE(XUL)
301
302SET(wxWidgets_USE_LIBS base core gl net)
303FIND_PACKAGE(wxWidgets)
304
305# To select a specific version of QT define DESIRED_QT_VERSION
306# via cmake -DDESIRED_QT_VERSION=4
307IF  (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
315ELSE(DESIRED_QT_VERSION)
316
317    FIND_PACKAGE(Qt4)
318
319    IF  (NOT QT4_FOUND)
320        FIND_PACKAGE(Qt3)
321    ENDIF(NOT QT4_FOUND)
322
323ENDIF(DESIRED_QT_VERSION)
324
325#use pkg-config to find various modues
326INCLUDE(FindPkgConfig OPTIONAL)
327
328IF(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
344ENDIF(PKG_CONFIG_FOUND)
345
346
347
348
349#
350# Test to determine if we want the "tripledot" form of the GLU tesselator callback.
351#
352IF(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")
380ENDIF(NOT DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT)
381
382OPTION(OSG_GLU_TESS_CALLBACK_TRIPLEDOT "Set to ON to build with variable parameter (...) version of GLU tesselator callback" ${DEFAULT_GLU_TESS_CALLBACK_TRIPLEDOT})
383IF(OSG_GLU_TESS_CALLBACK_TRIPLEDOT)
384    ADD_DEFINITIONS(-DGLU_TESS_CALLBACK_TRIPLEDOT)
385ENDIF(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.
401IF(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
412ELSE(NOT APPLE)
413    FIND_PACKAGE(QuickTime)
414ENDIF(NOT APPLE)
415
416################################################################################
417# Create bin and lib directories if required
418
419IF("${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})
421ENDIF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
422
423
424################################################################################
425# Installation stuff
426
427SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
428ADD_DEFINITIONS(-DOSG_DEBUG_POSTFIX=${CMAKE_DEBUG_POSTFIX})
429
430IF(UNIX AND NOT WIN32)
431  IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
432    ADD_DEFINITIONS("-D_DEBUG")
433  ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
434ENDIF(UNIX AND NOT WIN32)
435
436IF(CYGWIN)
437  IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
438    ADD_DEFINITIONS("-D_DEBUG")
439  ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
440ENDIF(CYGWIN)
441
442IF(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")
447ENDIF(UNIX AND NOT WIN32 AND NOT APPLE)
448IF(NOT DEFINED LIB_POSTFIX)
449    SET(LIB_POSTFIX "")
450ENDIF(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})
456SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)
457MAKE_DIRECTORY(${OUTPUT_BINDIR})
458IF(MSVC AND NOT MSVC_IDE)
459    MAKE_DIRECTORY(${OUTPUT_BINDIR}/${OSG_PLUGINS})
460ENDIF(MSVC AND NOT MSVC_IDE)
461
462#SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib/${CMAKE_SYSTEM_NAME})
463SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)
464MAKE_DIRECTORY(${OUTPUT_LIBDIR})
465IF(NOT MSVC)
466    MAKE_DIRECTORY(${OUTPUT_LIBDIR}/${OSG_PLUGINS})
467ENDIF(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
475IF(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)
484ELSE(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})
487ENDIF(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.
500SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} CACHE STRING "You may add additional search paths here. Use ; to separate multiple paths.")
501SET(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.
516SET(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.
521IF(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)
533ELSE(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)
546ENDIF(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.
550IF(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)
567ENDIF(OSG_AGGRESSIVE_WARNING_FLAGS)
568
569
570# Dynamic vs Static Linking
571OPTION(DYNAMIC_OPENSCENEGRAPH "Set to ON to build OpenSceneGraph for dynamic linking.  Use OFF for static." ON)
572IF   (DYNAMIC_OPENSCENEGRAPH)
573    SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED")
574ELSE (DYNAMIC_OPENSCENEGRAPH)
575    SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC")
576ENDIF(DYNAMIC_OPENSCENEGRAPH)
577
578INCLUDE(OsgMacroUtils)
579# OSG Core
580ADD_SUBDIRECTORY(src)
581
582# OSG Applications
583OPTION(BUILD_OSG_APPLICATIONS "Enable to build OSG Applications (e.g. osgviewer)" ON)
584IF   (BUILD_OSG_APPLICATIONS)
585    ADD_SUBDIRECTORY(applications)
586ENDIF(BUILD_OSG_APPLICATIONS)
587
588# OSG Examples
589OPTION(BUILD_OSG_EXAMPLES "Enable to build OSG Examples" OFF)
590IF   (BUILD_OSG_EXAMPLES)
591    ADD_SUBDIRECTORY(examples)
592ENDIF(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.
596IF(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
629ENDIF(APPLE)
630
631
632#
633# Provide target for generating wrappers
634#
635SET(GENWRAPPER genwrapper)
636
637ADD_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
643INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL)
644OPTION(BUILD_DOCUMENTATION "Build OpenSceneGraph reference documentation using doxygen (use: make DoxygenDoc)" OFF)
645MARK_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".
648IF(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    )
730ENDIF(BUILD_DOCUMENTATION)
731
732OPTION(BUILD_DASHBOARD_REPORTS "Set to ON to activate reporting of OpenSceneGraph builds here http://www.cdash.org/CDashPublic/index.php?project=OpenSceneGraph" OFF)
733IF(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)
737ENDIF(BUILD_DASHBOARD_REPORTS)
738
739# This needs to be run very last so other parts of the scripts can take
740# advantage of this.
741IF(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")
743ENDIF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
744
745# present the packaging option only if we have the cpack command defined (effectively >= 2.6.0)
746IF(CMAKE_CPACK_COMMAND)
747    OPTION(BUILD_OSG_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF)
748    IF(BUILD_OSG_PACKAGES)
749      INCLUDE(OsgCPack)
750    ENDIF(BUILD_OSG_PACKAGES)
751ENDIF(CMAKE_CPACK_COMMAND)
752
753# Generate pkg-config configuration file
754
755CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/packaging/pkgconfig/openscenegraph.pc.in
756        ${PROJECT_BINARY_DIR}/packaging/pkgconfig/openscenegraph.pc
757    @ONLY
758    )
759
760INSTALL(FILES ${PROJECT_BINARY_DIR}/packaging/pkgconfig/openscenegraph.pc DESTINATION lib${LIB_POSTFIX}/pkgconfig)
761
762#-----------------------------------------------------------------------------
763### uninstall target
764#-----------------------------------------------------------------------------
765CONFIGURE_FILE(
766  "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
767  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
768  IMMEDIATE @ONLY)
769ADD_CUSTOM_TARGET(uninstall
770  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
Note: See TracBrowser for help on using the browser.