root/OpenSceneGraph/trunk/CMakeLists.txt @ 10780

Revision 10780, 37.6 kB (checked in by robert, 5 years ago)

From Michael Platings, "This plugin adds support for the Autodesk FBX file format. It imports animations, including skeletal and morph animations, hence all my previous submissions to osgAnimation. The plugin won't build without the changes made in the "osgAnimation small additions" submission (14th August).
The plugin requires the FBX SDK to be installed, available from http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=6837478"

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