Cleaned up the Qt find package, and made changed the default threading model to Singl...
[openscenegraph:osg.git] / CMakeLists.txt
1 set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
2 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
3
4 IF(WIN32)
5     CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6 FATAL_ERROR)
6 ELSE(WIN32)
7     IF(APPLE)
8         CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
9     ELSE(APPLE)
10         CMAKE_MINIMUM_REQUIRED(VERSION 2.4.4 FATAL_ERROR)
11     ENDIF(APPLE)
12 ENDIF(WIN32)
13
14 if(COMMAND cmake_policy)
15     # Works around warnings libraries linked against that don't
16     # have absolute paths (e.g. -lpthreads)
17     cmake_policy(SET CMP0003 NEW)
18
19     # Works around warnings about escaped quotes in ADD_DEFINITIONS
20     # statements.
21     cmake_policy(SET CMP0005 NEW)
22
23     # tell CMake to prefer CMake's own CMake modules when available
24     # only available from cmake-2.8.4
25     if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 8 AND ${CMAKE_PATCH_VERSION} GREATER 3)
26         cmake_policy(SET CMP0017 NEW)
27     endif()
28
29     # cmake-2.6.1 introduces policy cmp0008 decide how to treat full path libraries that do not appear to be valid library file names
30     # quote from cvslog "Such libraries worked by accident in the VS IDE and Xcode generators in CMake 2.4 and below."
31     if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4 AND ${CMAKE_PATCH_VERSION} GREATER 0)
32         cmake_policy(SET CMP0008 OLD)
33     endif()
34
35     # disable autolinking to qtmain as we have our own main() functions (new in Qt 5.1)
36     if((${CMAKE_MAJOR_VERSION} EQUAL 2 OR ${CMAKE_MAJOR_VERSION} GREATER 2) AND
37        (${CMAKE_MINOR_VERSION} EQUAL 8 OR ${CMAKE_MINOR_VERSION} GREATER 8) AND
38         ${CMAKE_PATCH_VERSION} GREATER 10)
39         cmake_policy(SET CMP0020 OLD)
40     endif()
41     # nicer version check - but needs at least CMake 2.6.2? Worth upgrading the requirements?
42     #if("${CMAKE_VERSION}" VERSION_GREATER 2.8.10)
43
44
45 endif()
46
47 PROJECT(OpenSceneGraph)
48
49 SET(OPENSCENEGRAPH_MAJOR_VERSION 3)
50 SET(OPENSCENEGRAPH_MINOR_VERSION 3)
51 SET(OPENSCENEGRAPH_PATCH_VERSION 1)
52 SET(OPENSCENEGRAPH_SOVERSION 111)
53
54 # set to 0 when not a release candidate, non zero means that any generated
55 # svn tags will be treated as release candidates of given number
56 SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0)
57
58 SET(OPENSCENEGRAPH_VERSION ${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION})
59
60 SET(OSG_PLUGINS osgPlugins-${OPENSCENEGRAPH_VERSION})
61
62 SET(OSG_PLUGIN_PREFIX "")
63
64 IF (CYGWIN)
65     SET(OSG_PLUGIN_PREFIX "cygwin_")
66 ENDIF()
67
68 IF(MINGW)
69     SET(OSG_PLUGIN_PREFIX "mingw_")
70 ENDIF()
71
72
73 # We want to build SONAMES shared librariess
74 SET(OPENSCENEGRAPH_SONAMES TRUE)
75 SET(OPENTHREADS_SONAMES TRUE)
76
77 SET(OpenThreads_SOURCE_DIR ${OpenSceneGraph_SOURCE_DIR})
78
79 # We have some custom .cmake scripts not in the official distribution.
80 # Maybe this can be used override existing behavior if needed?
81 SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
82
83 ## Option to enable Android build using AndroidNDK
84 OPTION(OSG_BUILD_PLATFORM_ANDROID OFF)
85 IF(OSG_BUILD_PLATFORM_ANDROID)
86
87     CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)
88
89     INCLUDE(OsgAndroidMacroUtils)
90     SET(ANDROID TRUE)
91     IF(NOT ANDROID_PLATFORM)
92         MESSAGE("Warning Android Platform version NOT defined, Default selected version: 5")
93         SET(ANDROID_PLATFORM 5)
94     ENDIF()
95     IF(NOT ANDROID_ABI)
96         MESSAGE("Warning Android ABI version NOT defined, Default selection: armeabi armeabi-v7a")
97         SET(ANDROID_ABI "armeabi armeabi-v7a")
98     ENDIF()
99     IF(NOT ANDROID_STL)
100         MESSAGE("Warning Android STL NOT defined, Default selection: gnustl_static")
101         SET(ANDROID_STL "gnustl_static")
102     ENDIF()
103     IF(ANDROID_DEBUG)
104         MESSAGE("Warning Android Build is in debug mode")
105         SET(ANDROID_RELEASE_OPTIM "debug")
106     ELSE()
107         MESSAGE("Warning Android Build is in release mode")
108         SET(ANDROID_RELEASE_OPTIM "release")
109     ENDIF()
110     IF(ANDROID_NEON)
111         MESSAGE("Warning Android NEON optimizations enabled, this will not be available on all armeabi-v7a devices ie. Tegra2")
112         SET(ANDROID_OPTIM_NEON true)
113     ELSE()
114         SET(ANDROID_OPTIM_NEON false)
115     ENDIF()
116     IF(ANDROID_ARM32)
117         MESSAGE("Warning ARM 32bit instruction set will be used")
118         SET(ANDROID_OPTIM_ARM32 true)
119     ELSE()
120         SET(ANDROID_OPTIM_ARM32 false)
121     ENDIF()
122
123     FIND_PACKAGE(AndroidNDK REQUIRED)
124
125     SET(OSG_ANDROID_TEMPLATES "${CMAKE_SOURCE_DIR}/PlatformSpecifics/Android")
126
127     SET(J  "4" CACHE STRING "how many processes for make -j <J>")
128
129     ADD_CUSTOM_COMMAND(
130         OUTPUT    Android-OpenSceneGraph
131         DEPENDS   ${CMAKE_BINARY_DIR}/Android.mk
132         COMMAND   "${ANDROID_NDK}/ndk-build"
133         ARGS      --directory=${CMAKE_BINARY_DIR} NDK_APPLICATION_MK=Application.mk -j${J} NDK_LOG=1
134     )
135
136     ADD_CUSTOM_TARGET(ndk ALL echo
137           DEPENDS Android-OpenSceneGraph
138     )
139     install(DIRECTORY include/ DESTINATION include/
140         PATTERN ".svn" EXCLUDE
141     )
142     install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ DESTINATION include/
143     )
144     install(DIRECTORY ${CMAKE_BINARY_DIR}/obj/ DESTINATION obj/
145         PATTERN ".svn" EXCLUDE
146         PATTERN "objs" EXCLUDE
147     )
148
149     ADD_DEFINITIONS(-DANDROID)
150
151 ENDIF()
152
153
154
155 # Okay, here's the problem: On some platforms, linking against OpenThreads
156 # is not enough and explicit linking to the underlying thread library
157 # is also required (e.g. FreeBSD). But OpenThreads may be built with different
158 # backends (Pthreads, Sproc, Windows) so we don't know what the underlying
159 # thread library is because some platforms support multiple backends (e.g.
160 # IRIX supports Sproc and Pthreads). Linking all libraries won't work
161 # because the libraries may be incompatible.
162 # So the current solution is to attempt best guess linking and exempt certain
163 # cases. With IRIX, we're going to hope explicit linking to the underlying
164 # library is not necessary. We currently don't case for pthreads on Windows
165 # which might be an issue on things like Cygwin. This may need to be fixed.
166 IF(NOT ANDROID)
167     FIND_PACKAGE(Threads)
168 ENDIF()
169 IF(CMAKE_SYSTEM MATCHES IRIX)
170     # Erase CMAKE_THREAD_LIBS_INIT and hope it works
171     SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "")
172 ENDIF()
173
174 OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making svn branches, tags, updating ChangeLog." OFF)
175 IF (OSG_MAINTAINER)
176
177     SET(OPENSCENEGRAPH_SVN "trunk")
178     #SET(OPENSCENEGRAPH_SVN "branches")
179     SET(OPENSCENEGRAPH_BRANCH OpenSceneGraph-${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION})
180
181     #
182     # Provide target for tagging a release
183     #
184     SET(SVNCOMMAND svn)
185     SET(SVNTRUNKDIR     http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk)
186     SET(SVNTAGDIR       http://svn.openscenegraph.org/osg/OpenSceneGraph/tags)
187     SET(SVNBRANCHDIR    http://svn.openscenegraph.org/osg/OpenSceneGraph/branches)
188
189     IF   (OPENSCENEGRAPH_SVN STREQUAL "trunk")
190         SET(SVNSOURCEDIR ${SVNTRUNKDIR})
191     ELSE()
192         SET(SVNSOURCEDIR ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH})
193     ENDIF()
194
195
196     IF   (OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0)
197         SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION})
198     ELSE()
199         SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION}-rc${OPENSCENEGRAPH_RELEASE_CANDIDATE})
200     ENDIF()
201
202
203     ADD_CUSTOM_TARGET(tag-test
204         COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
205     )
206
207     ADD_CUSTOM_TARGET(tag-run
208         COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
209     )
210
211     ADD_CUSTOM_TARGET(branch-test
212         COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
213     )
214
215     ADD_CUSTOM_TARGET(branch-run
216         COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
217     )
218
219     #
220     # Provide target for generating ChangeLog
221     #
222     SET(GENERATELOGS svn2cl)
223
224     ADD_CUSTOM_TARGET(ChangeLog
225         COMMAND ${SVNCOMMAND} update
226         COMMAND ${GENERATELOGS} ${SVNSOURCEDIR}
227     )
228
229 ENDIF(OSG_MAINTAINER)
230
231 IF(NOT ANDROID)
232 IF(APPLE)
233     # Determine the canonical name of the selected Platform SDK
234     EXECUTE_PROCESS(COMMAND "/usr/bin/sw_vers" "-productVersion"
235                     OUTPUT_VARIABLE OSG_OSX_SDK_NAME
236                     OUTPUT_STRIP_TRAILING_WHITESPACE)
237     STRING(SUBSTRING "${OSG_OSX_SDK_NAME}" 0 4 OSG_OSX_SDK_NAME)
238     SET(OSG_OSX_SDK_NAME "macosx${OSG_OSX_SDK_NAME}")
239
240     # Trying to get CMake to generate an XCode IPhone project, current efforts are to get iphoneos sdk 3.1 working
241     # Added option which needs manually setting to select the IPhone SDK for building. We can only have one of the below
242     # set to true. Should realy have an OSG_BUILD_PLATFORM variable that we set to our desired platform
243     OPTION(OSG_BUILD_PLATFORM_IPHONE "Enable IPhoneSDK Device support" OFF)
244     OPTION(OSG_BUILD_PLATFORM_IPHONE_SIMULATOR "Enable IPhoneSDK Simulator support" OFF)
245
246     IF(OSG_BUILD_PLATFORM_IPHONE OR OSG_BUILD_PLATFORM_IPHONE_SIMULATOR)
247
248         #you need to manually set the default sdk version here
249         SET (IPHONE_SDKVER "6.0" CACHE STRING "IOS SDK-Version")
250         SET (IPHONE_VERSION_MIN "4.2" CACHE STRING "IOS minimum os version, use 7.0 or greater to get 64bit support")
251
252         #the below is taken from ogre, it states the gcc stuff needs to happen before PROJECT() is called. I've no clue if we even need it
253         # Force gcc <= 4.2 on iPhone
254         IF(IPHONE_VERSION_MIN LESS "6.0")
255             include(CMakeForceCompiler)
256             CMAKE_FORCE_C_COMPILER(llvm-gcc-4.2 GNU)
257             CMAKE_FORCE_CXX_COMPILER(llvm-gcc-4.2 GNU)
258             SET(GCC_THUMB_SUPPORT NO)
259         ENDIF()
260
261         #set either the device sdk or the simulator sdk. Can't find away to separate these in the same project
262         IF(OSG_BUILD_PLATFORM_IPHONE)
263             SET (IPHONE_DEVROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer")
264             SET (IPHONE_SDKROOT "${IPHONE_DEVROOT}/SDKs/iPhoneOS${IPHONE_SDKVER}.sdk")
265         ELSE()
266             SET (IPHONE_DEVROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer")
267             SET (IPHONE_SDKROOT "${IPHONE_DEVROOT}/SDKs/iPhoneSimulator${IPHONE_SDKVER}.sdk")
268         ENDIF()
269
270         # Apple iOS: Find OpenGLES
271         FIND_LIBRARY(OPENGLES_LIBRARY OpenGLES)
272     ELSE ()
273         FIND_LIBRARY(CARBON_LIBRARY Carbon)
274         FIND_LIBRARY(COCOA_LIBRARY Cocoa)
275
276         # Apple OS X: Find OpenGL and AGL
277         FIND_PACKAGE(OpenGL)
278         FIND_LIBRARY(AGL_LIBRARY AGL)
279     ENDIF ()
280
281     OPTION(OSG_COMPILE_FRAMEWORKS "compile frameworks instead of dylibs (experimental)" OFF)
282     SET(OSG_COMPILE_FRAMEWORKS_INSTALL_NAME_DIR "@executable_path/../Frameworks" CACHE STRING "install name dir for compiled frameworks")
283 ELSE()
284     # Non-Apple: Find OpenGL
285     FIND_PACKAGE(OpenGL)
286 ENDIF()
287 ENDIF()
288
289 IF(UNIX AND NOT ANDROID)
290     # Not sure what this will do on Cygwin and Msys
291     # Also, remember OS X X11 is a user installed option so it may not exist.
292     FIND_PACKAGE(X11)
293     # Some Unicies need explicit linkage to the Math library or the build fails.
294     FIND_LIBRARY(MATH_LIBRARY m)
295
296     FIND_LIBRARY(DL_LIBRARY dl)
297     IF(NOT DL_LIBRARY)
298         SET(DL_LIBRARY "") # change from NOTFOUND to empty when passed to linker
299     ENDIF()
300
301     IF( CMAKE_SYSTEM MATCHES "Linux" )
302         FIND_LIBRARY( RT_LIBRARY rt )
303     ENDIF( CMAKE_SYSTEM MATCHES "Linux" )
304
305 ENDIF()
306
307 INCLUDE_DIRECTORIES(
308     ${OpenSceneGraph_SOURCE_DIR}/include
309     ${OPENGL_INCLUDE_DIR}
310 )
311
312 # Make the headers visible to everything
313 IF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
314    INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
315 ENDIF()
316
317 # Common global definitions
318 #ADD_DEFINITIONS(-D)
319 # Platform specific definitions
320
321
322 IF(WIN32 AND NOT ANDROID)
323
324     IF(MSVC)
325         # This option is to enable the /MP switch for Visual Studio 2005 and above compilers
326         OPTION(WIN32_USE_MP "Set to ON to build OpenSceneGraph with the /MP option (Visual Studio 2005 and above)." OFF)
327         MARK_AS_ADVANCED(WIN32_USE_MP)
328         IF(WIN32_USE_MP)
329             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
330         ENDIF(WIN32_USE_MP)
331
332         # turn off various warnings
333         # foreach(warning 4244 4251 4267 4275 4290 4786 4305 4996)
334         #     SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd${warning}")
335         # endforeach(warning)
336
337         # This option is to enable the /DYNAMICBASE switch
338         # It is used to workaround a bug in Windows 7 when linking in release, which results in corrupt
339         # 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
340         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)
341         MARK_AS_ADVANCED(WIN32_USE_DYNAMICBASE)
342         IF(WIN32_USE_DYNAMICBASE)
343             SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DYNAMICBASE")
344         ENDIF(WIN32_USE_DYNAMICBASE)
345
346         # More MSVC specific compilation flags
347         ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)
348         ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
349
350         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)
351         MARK_AS_ADVANCED(MSVC_DISABLE_CHECKED_ITERATORS)
352         IF(MSVC_DISABLE_CHECKED_ITERATORS)
353             ADD_DEFINITIONS(-D_SECURE_SCL=0)
354         ENDIF(MSVC_DISABLE_CHECKED_ITERATORS)
355
356         OPTION(MSVC_USE_DEFAULT_STACK_SIZE "Set to ON to use the default Visual C++ stack size. CMake forces a high stack size by default, which can cause problems for applications with large number of threads." OFF)
357         MARK_AS_ADVANCED(MSVC_USE_DEFAULT_STACK_SIZE)
358         IF(MSVC_USE_DEFAULT_STACK_SIZE)
359             STRING(REGEX REPLACE "/STACK:[0-9]+" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
360             STRING(REGEX REPLACE "/STACK:[0-9]+" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
361             STRING(REGEX REPLACE "/STACK:[0-9]+" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
362         ENDIF(MSVC_USE_DEFAULT_STACK_SIZE)
363         get_filename_component( CMAKE_MAKE_PROGRAM_NAME ${CMAKE_MAKE_PROGRAM} NAME)
364         IF (CMAKE_MAKE_PROGRAM_NAME STREQUAL "VCExpress.exe")
365             OPTION(MSVC_BUILD_USE_SOLUTION_FOLDERS "Enable project grouping in VS - VCExpress detected, not supported in VCExpress )" OFF)
366         ELSE()
367             OPTION(MSVC_BUILD_USE_SOLUTION_FOLDERS "Enable project grouping in VS" ON)
368         ENDIF()
369         SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ${MSVC_BUILD_USE_SOLUTION_FOLDERS})
370     ENDIF()
371
372     #needed for net plugin
373     SET (OSG_SOCKET_LIBS wsock32)
374     # Both Cygwin and Msys need -DNOMINMAX ???
375     IF(UNIX)
376         ADD_DEFINITIONS(-DNOMINMAX)
377     ENDIF()
378
379 ########################################################################################################
380 # the following options are MSVC specific,
381 # the first OSG_MSVC_VERSIONED_DLL activate a custom build-time layout that should allow to run examples and application
382 # fron bin folder without requiring installation step.
383 # it also prepend "osg${OPENSCENEGRAPH_SOVERSION}-" to only .dll files, leaving .lib files untouched in lib
384 # it also use a hack to get rid of Debug and Release folder in MSVC projects
385 # all the .dll and .pdb are in bin and all the .lib and .exp are in lib
386 #
387 # the second option disable incremental linking in debug build , that is enabled by default by CMake
388 ##########################################################################################################
389
390     IF(MSVC)
391         IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4 AND ${CMAKE_PATCH_VERSION} LESS 7)
392             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")
393             SET(OSG_MSVC_VERSIONED_DLL OFF)
394             SET(OSG_MSVC_DEBUG_INCREMENTAL_LINK ON)
395         ELSE()
396             OPTION(OSG_MSVC_VERSIONED_DLL "Set to ON to build OpenSceneGraph with versioned dll names" ON)
397             MARK_AS_ADVANCED(OSG_MSVC_VERSIONED_DLL)
398             OPTION(OSG_MSVC_DEBUG_INCREMENTAL_LINK "Set to OFF to build OpenSceneGraph without incremental linking in debug (release is off by default)" ON)
399             MARK_AS_ADVANCED(OSG_MSVC_DEBUG_INCREMENTAL_LINK)
400             IF(NOT OSG_MSVC_DEBUG_INCREMENTAL_LINK)
401                 SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO")
402                 SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO")
403                 SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/debug /INCREMENTAL:NO")
404             ENDIF(NOT OSG_MSVC_DEBUG_INCREMENTAL_LINK)
405         ENDIF()
406     ENDIF(MSVC)
407 ENDIF(WIN32 AND NOT ANDROID)
408
409 ########################################################################################################
410 ##### these were settings located in SetupCommon.cmake used in Luigi builds.... find out what are useful
411 ########################################################################################################
412 #luigi#SET(CMAKE_VERBOSE_MAKEFILE TRUE)
413 #luigi#SET(CMAKE_SKIP_RPATH TRUE)
414 #luigi#SET(CMAKE_SKIP_RULE_DEPENDENCY TRUE)
415 #luigi#IF(UNIX)
416 #luigi#    LIST_CONTAINS(contains "g++" ${CMAKE_CXX_COMPILER_LIST})
417 #luigi#    IF (contains)
418 #luigi#        MESSAGE(${MY_MESSAGE_DEFAULT} "${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} setting  CMAKE_CXX_COMPILER to g++")
419 #luigi#        SET(CMAKE_CXX_COMPILER "g++")
420 #luigi#        SET(CMAKE_CXX_COMPILER_LOADED 2)
421 #luigi#        SET(CMAKE_CXX_COMPILER_WORKS 2)
422 #luigi#    ENDIF (contains)
423 #luigi#    SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
424 #luigi#    SET(CMAKE_CXX_FLAGS_DEBUG "-ggdb -gstabs")
425 #luigi#ENDIF(UNIX)
426 ########################################################################################################
427
428 OPTION(OSG_NOTIFY_DISABLED "Set to ON to build OpenSceneGraph with the notify() disabled." OFF)
429
430 OPTION(OSG_USE_FLOAT_MATRIX "Set to ON to build OpenSceneGraph with float Matrix instead of double." OFF)
431 MARK_AS_ADVANCED(OSG_USE_FLOAT_MATRIX)
432
433 OPTION(OSG_USE_FLOAT_PLANE "Set to ON to build OpenSceneGraph with float Plane instead of double." OFF)
434 MARK_AS_ADVANCED(OSG_USE_FLOAT_PLANE)
435
436 OPTION(OSG_USE_FLOAT_BOUNDINGSPHERE "Set to ON to build OpenSceneGraph with float BoundingSphere instead of double." ON)
437 MARK_AS_ADVANCED(OSG_USE_FLOAT_BOUNDINGSPHERE)
438
439 OPTION(OSG_USE_FLOAT_BOUNDINGBOX "Set to ON to build OpenSceneGraph with float BoundingBox instead of double." ON)
440 MARK_AS_ADVANCED(OSG_USE_FLOAT_BOUNDINGBOX)
441
442 IF (WIN32)
443     OPTION(OSG_USE_UTF8_FILENAME "Set to ON to use a UTF8 locale for filenames instead of the default locale." OFF)
444     MARK_AS_ADVANCED(OSG_USE_UTF8_FILENAME)
445 ENDIF()
446
447 OPTION(OSG_DISABLE_MSVC_WARNINGS "Set to OFF to not disable MSVC warnings generated by OSG headers." ON)
448 MARK_AS_ADVANCED(OSG_DISABLE_MSVC_WARNINGS)
449
450 OPTION(OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION "Set to ON to use the ref_ptr<> T* operator() output conversion. " ON)
451
452
453 OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." ON)
454 OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." ON)
455 OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." OFF)
456 OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." OFF)
457 OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." OFF)
458 OPTION(OSG_GL_LIBRARY_STATIC "Set to ON to statically link with OpenGL/GLES library." OFF)
459
460 SET(OPENGL_egl_LIBRARY CACHE STRING "Set the OpenGL egl library.")
461
462 # SET(OSG_GL_DISPLAYLISTS_AVAILABLE ${OSG_GL1_AVAILABLE})
463 # SET(OSG_GL_MATRICES_AVAILABLE ${OSG_GL1_AVAILABLE})
464 # SET(OSG_GL_VERTEX_FUNCS_AVAILABLE ${OSG_GL1_AVAILABLE})
465 # SET(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE ${OSG_GL1_AVAILABLE})
466 # SET(OSG_GL_FIXED_FUNCTION_AVAILABLE ${OSG_GL1_AVAILABLE})
467
468 OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." ${OSG_GL1_AVAILABLE})
469 OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ${OSG_GL1_AVAILABLE})
470 OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ${OSG_GL1_AVAILABLE})
471 OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ${OSG_GL1_AVAILABLE})
472 OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ${OSG_GL1_AVAILABLE})
473
474 OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." ON)
475
476 ################################################################################
477 # Set Config file
478
479 SET(OPENSCENEGRAPH_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osg/Config")
480 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Config.in"
481                "${OPENSCENEGRAPH_CONFIG_HEADER}")
482
483 SET(OPENSCENEGRAPH_VERSION_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/osg/Version")
484 CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Version.in"
485                "${OPENSCENEGRAPH_VERSION_HEADER}")
486
487 # INSTALL_FILES(/include/osg/ FILES "${OPENSCENEGRAPH_CONFIG_HEADER}")
488
489
490 ################################################################################
491 # Set Version Info resource file
492
493 IF(MSVC)
494     SET(OPENSCENEGRAPH_VERSIONINFO_RC "${PROJECT_BINARY_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc")
495     CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc.in"
496                    "${OPENSCENEGRAPH_VERSIONINFO_RC}")
497 ENDIF()
498
499 ################################################################################
500 # Optional build components
501
502 # OSG Applications
503 OPTION(BUILD_OSG_APPLICATIONS "Enable to build OSG Applications (e.g. osgviewer)" ON)
504
505 # OSG Examples
506 OPTION(BUILD_OSG_EXAMPLES "Enable to build OSG Examples" OFF)
507
508 ################################################################################
509 # 3rd Party Dependency Stuff
510 IF(WIN32 AND NOT ANDROID)
511     INCLUDE(Find3rdPartyDependencies)
512 ENDIF()
513
514 IF(ANDROID)
515     ANDROID_3RD_PARTY()
516 ELSE()
517 # Common to all platforms except android:
518     FIND_PACKAGE(FreeType)
519     FIND_PACKAGE(Inventor)
520     FIND_PACKAGE(Jasper)
521     FIND_PACKAGE(OpenEXR)
522     FIND_PACKAGE(COLLADA)
523     FIND_PACKAGE(FBX)
524     FIND_PACKAGE(ZLIB)
525     FIND_PACKAGE(Xine)
526     FIND_PACKAGE(OpenVRML)
527     FIND_PACKAGE(Performer)
528     FIND_PACKAGE(GDAL)
529     FIND_PACKAGE(GTA)
530     FIND_PACKAGE(CURL)
531     FIND_PACKAGE(LibVNCServer)
532     FIND_PACKAGE(OurDCMTK)
533     FIND_PACKAGE(FFmpeg)
534     FIND_PACKAGE(DirectShow)
535     FIND_PACKAGE(SDL)
536     FIND_PACKAGE(Poppler-glib)
537     FIND_PACKAGE(RSVG)
538     FIND_PACKAGE(GtkGl)
539     FIND_PACKAGE(DirectInput)
540     FIND_PACKAGE(NVTT)
541     IF (NOT WIN32)
542         FIND_PACKAGE(Asio)
543     ENDIF()
544     FIND_PACKAGE(ZeroConf)
545     FIND_PACKAGE(Lua52)
546     IF (NOT (LUA_LIBRARIES AND LUA_INCLUDE_DIR))
547         FIND_PACKAGE(Lua51)
548     ENDIF()
549     FIND_PACKAGE(V8)
550     FIND_PACKAGE(PythonLibs)
551 ENDIF()
552
553 IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION LESS 8)
554     FIND_PACKAGE(ITK)
555 ENDIF()
556
557 # Include macro utilities here
558 INCLUDE(OsgMacroUtils)
559
560 OPTION(OSG_USE_QT "Enable to use Qt (build Qt-dependent libraries, plugins and examples)" ON)
561
562 IF(OSG_USE_QT AND NOT ANDROID)
563 # To select a specific version of QT define DESIRED_QT_VERSION
564 # via cmake -DDESIRED_QT_VERSION=5
565 # QUIET option disables messages if the package cannot be found.
566
567     IF  (DESIRED_QT_VERSION)
568         IF  (DESIRED_QT_VERSION MATCHES 5)
569               FIND_PACKAGE(Qt5Widgets)
570         ELSEIF (DESIRED_QT_VERSION MATCHES 4)
571               FIND_PACKAGE(Qt4)
572         ELSE()
573               FIND_PACKAGE(Qt3)
574         ENDIF()
575
576     ELSE()
577
578         FIND_PACKAGE(Qt5Widgets QUIET)
579
580         IF ( Qt5Widgets_FOUND )
581             # CMake 2.8.8 or greater required
582             BUILDER_VERSION_GREATER(2 8 7)
583             IF(NOT VALID_BUILDER_VERSION)
584                 MESSAGE(
585                 SEND_ERROR
586                 "Qt5 requires CMake version 2.8.8 or greater!\n"
587                 "Update CMake or set DESIRED_QT_VERSION to less than 5
588                 or disable OSG_USE_QT."
589                 )
590             ENDIF( )
591         ENDIF( )
592
593         IF ( NOT Qt5Widgets_FOUND )
594             FIND_PACKAGE(Qt4)
595
596             IF (NOT QT4_FOUND)
597                 FIND_PACKAGE(Qt3)
598             ENDIF()
599         ENDIF()
600     ENDIF()
601
602     #If we have found Qt5, let's try to top off by getting the webkit as well
603     IF ( Qt5Widgets_FOUND )
604         FIND_PACKAGE(Qt5WebKitWidgets QUIET)
605     ENDIF()
606
607 ENDIF()
608
609 #optional example related dependencies
610 IF   (BUILD_OSG_EXAMPLES AND NOT ANDROID)
611
612
613     FIND_PACKAGE(FLTK)
614     FIND_PACKAGE(GLUT)
615     FIND_PACKAGE(FOX)
616
617     SET(wxWidgets_USE_LIBS base core gl net)
618     FIND_PACKAGE(wxWidgets)
619
620 ENDIF(BUILD_OSG_EXAMPLES AND NOT ANDROID)
621
622
623 # Platform specific:
624 # (We can approach this one of two ways. We can try to FIND everything
625 # and simply check if we found the packages before actually building
626 # or we can hardcode the cases. The advantage of the former is that
627 # packages that are installed on platforms that don't require them
628 # will still get built (presuming no compatibility issues). But this
629 # also means modules that are redundant may get built. For example,
630 # OS X doesn't need GIF, JPEG, PNG, TIFF, etc because it uses QuickTime.
631 # Also, it will clutter the CMake menu with "NOT_FOUND".
632 # The downside to the latter is that it is harder to build those
633 # potentially redundant modules.)
634
635 # Image readers/writers depend on 3rd party libraries except for OS X which
636 # can use Quicktime.
637 IF(NOT ANDROID)
638     IF(NOT APPLE)
639         FIND_PACKAGE(GIFLIB)
640         FIND_PACKAGE(JPEG)
641         FIND_PACKAGE(PNG)
642         FIND_PACKAGE(TIFF)
643         # QuickTime is required for OS X, but optional for Windows.
644         IF(WIN32)
645             FIND_PACKAGE(QuickTime)
646         ENDIF()
647
648     ELSE()
649         FIND_PACKAGE(TIFF)
650         FIND_PACKAGE(QuickTime)
651         FIND_PACKAGE(QTKit)
652         FIND_PACKAGE(CoreVideo)
653         FIND_PACKAGE(CoreMedia)
654         FIND_PACKAGE(QuartzCore)
655         FIND_PACKAGE(AVFoundation)
656     ENDIF()
657 ENDIF()
658
659 ################################################################################
660 # Create bin and lib directories if required
661
662 IF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
663    FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin ${CMAKE_BINARY_DIR}/lib ${CMAKE_BINARY_DIR}/lib/${OSG_PLUGINS})
664 ENDIF()
665
666
667 ################################################################################
668 # Installation stuff
669
670 SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
671 SET(CMAKE_RELEASE_POSTFIX "" CACHE STRING "add a postfix, usually empty on windows")
672 SET(CMAKE_RELWITHDEBINFO_POSTFIX "rd" CACHE STRING "add a postfix, usually empty on windows")
673 SET(CMAKE_MINSIZEREL_POSTFIX "s" CACHE STRING "add a postfix, usually empty on windows")
674
675 # Set the build postfix extension according to what configuration is being built.
676 IF (CMAKE_BUILD_TYPE MATCHES "Release")
677     SET(CMAKE_BUILD_POSTFIX "${CMAKE_RELEASE_POSTFIX}")
678 ELSEIF (CMAKE_BUILD_TYPE MATCHES "MinSizeRel")
679     SET(CMAKE_BUILD_POSTFIX "${CMAKE_MINSIZEREL_POSTFIX}")
680 ELSEIF(CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo")
681     SET(CMAKE_BUILD_POSTFIX "${CMAKE_RELWITHDEBINFO_POSTFIX}")
682 ELSEIF(CMAKE_BUILD_TYPE MATCHES "Debug")
683     SET(CMAKE_BUILD_POSTFIX "${CMAKE_DEBUG_POSTFIX}")
684 ELSE()
685     SET(CMAKE_BUILD_POSTFIX "")
686 ENDIF()
687
688 IF(UNIX AND NOT WIN32)
689   SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
690   SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
691 ENDIF()
692
693 IF(CYGWIN)
694   SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
695   SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
696 ENDIF()
697
698 IF(UNIX AND NOT WIN32 AND NOT APPLE)
699   IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
700       SET(LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
701       MARK_AS_ADVANCED(LIB_POSTFIX)
702   ENDIF()
703 ENDIF()
704 IF(NOT DEFINED LIB_POSTFIX)
705     SET(LIB_POSTFIX "")
706 ENDIF()
707
708 # Here we apparantly do some funky stuff with making the bin/ and lib/
709 # folders which is probably needed to work around a very old CMake bug?
710
711 #SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin/${CMAKE_SYSTEM_NAME})
712 SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)
713 MAKE_DIRECTORY(${OUTPUT_BINDIR})
714 IF(MSVC AND NOT MSVC_IDE)
715     MAKE_DIRECTORY(${OUTPUT_BINDIR}/${OSG_PLUGINS})
716 ENDIF(MSVC AND NOT MSVC_IDE)
717
718 #SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib/${CMAKE_SYSTEM_NAME})
719 SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)
720 MAKE_DIRECTORY(${OUTPUT_LIBDIR})
721 IF(NOT MSVC OR MSVC_IDE)
722     MAKE_DIRECTORY(${OUTPUT_LIBDIR}/${OSG_PLUGINS})
723 ENDIF(NOT MSVC OR MSVC_IDE)
724
725 # On CMake 2.4.x use EXECUTABLE_OUTPUT_PATH and LIBRARY_OUTPUT_PATH and later
726 # we work around the DLL placement by use of the PREFIX target property hack
727 #
728 # On CMake 2.6.x use the newly minted CMAKE_LIBRARY_OUTPUT_DIRECTORY,
729 # CMAKE_ARCHIVE_OUTPUT_DIRECTORY & CMAKE_RUNTIME_OUTPUT_DIRECTORY
730 #
731 # CMake >= 2.8.1 changed the output directory algorithm (See doc).
732 # Here we also set per-configuration directories (CMAKE_*_OUTPUT_DIRECTORY_<CONFIG>), or else binaries are generated in /bin/Debug and /bin/Release, etc. with MSVC and Xcode.
733 # (Doc reads "multi-configuration generators (VS, Xcode) do NOT append a per-configuration subdirectory to the specified directory").
734 # The workaround for 2.6.x (adding "../" as an output prefix for each target) seem to have no effect in >=2.8.1, so there is no need to change this.
735 IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION LESS 5)
736     # If CMake < 2.6.0
737     SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_BINDIR})
738     SET(LIBRARY_OUTPUT_PATH    ${OUTPUT_LIBDIR})
739 ELSE()
740     # If CMake >= 2.6.0
741     SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
742     SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
743     IF(WIN32)
744         SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
745     ELSE(WIN32)
746         SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
747     ENDIF(WIN32)
748
749     # Testing CMAKE_VERSION is possible in >= 2.6.4 only
750     BUILDER_VERSION_GREATER(2 8 0)
751     IF(VALID_BUILDER_VERSION)  # If CMake >= 2.8.1
752         FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES})        # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses)
753             STRING(TOUPPER "${CONF}" CONF)                # Go uppercase (DEBUG, RELEASE...)
754             SET("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}")
755             SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}")
756             IF(WIN32)
757                 SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}")
758             ELSE()
759                 SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}")
760             ENDIF()
761         ENDFOREACH()
762     ENDIF(VALID_BUILDER_VERSION)
763 ENDIF()
764
765 #SET(INSTALL_BINDIR OpenSceneGraph/bin)
766 #SET(INSTALL_INCDIR OpenSceneGraph/include)
767 #SET(INSTALL_LIBDIR OpenSceneGraph/lib)
768 #SET(INSTALL_DOCDIR OpenSceneGraph/doc)
769
770 ################################################################################
771 # User Options
772
773
774 # Expose CMAKE_INCLUDE_PATH and CMAKE_LIBARY_PATH to the GUI so users
775 # may set these values without needing to manipulate the environment.
776 SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} CACHE STRING "You may add additional search paths here. Use ; to separate multiple paths.")
777 SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} CACHE STRING "You may add additional search paths here. Use ; to separate multiple paths.")
778 # We are proposing that a new variable called CMAKE_PREFIX_PATH be introduced
779 # to CMake to compliment CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH.
780 # A formal feature request has been submited to CMake, Bug #4947.
781 # It is intended for those users who have common prefixes for their INCLUDE
782 # and LIBRARY locations. So if users have headers in /usr/local/include
783 # and libraries in /usr/local/lib, the common prefix is /usr/local.
784 # It should also cover the case where headers and libraries are
785 # in the same directory.
786 # Our proposal expects that FIND_* commands will automatically search for
787 # CMAKE_PREFIX_PATH right after CMAKE_INCLUDE_PATH or CMAKE_LIBRARY_PATH.
788 # Obviously, since CMake does not currently support this, we must write
789 # our Find*.cmake modules to explicitly support this. Otherwise, this variable
790 # will have no impact.
791 # This is unofficial so this may be removed or changed at anytime.
792 SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "(EXPERIMENTAL) You may add additional search paths here. Use ; to separate multiple paths.")
793
794 # This is for an advanced option to give aggressive warnings
795 # under different compilers. If yours is not implemented, this option
796 # will not be made available.
797 IF(CMAKE_COMPILER_IS_GNUCXX)
798     # To be complete, we might also do GNUCC flags,
799     # but everything here is C++ code.
800     # -Wshadow and -Woverloaded-virtual are also interesting flags, but OSG
801     # returns too many hits.
802     # FYI, if we do implement GNUCC, then -Wmissing-prototypes in another
803     # interesting C-specific flag.
804     # Also, there is a bug in gcc 4.0. Under C++, -pedantic will create
805     # errors instead of warnings for certain issues, including superfluous
806     # semicolons and commas, and the use of long long. -fpermissive seems
807     # to be the workaround.
808     SET(OSG_AGGRESSIVE_WARNING_FLAGS -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused)
809
810     # Previous included -Wformat=2 in OSG_AGGRESSIVE_WARNING_FLAGS but had to remove it due to standard library errors
811
812
813 ELSEIF(MSVC)
814         #disable specific warning level 4 warnings:
815         #C4100 'identifier' : unreferenced formal parameter
816         #C4127 Error Message conditional expression is constant
817         #C4706 assignment within conditional expression
818         SET(OSG_AGGRESSIVE_WARNING_FLAGS /W4 /wd4706 /wd4127 /wd4100)
819 ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
820         SET(OSG_AGGRESSIVE_WARNING_FLAGS  -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused -Wno-overloaded-virtual)
821
822         # CMake lacks an elseif, so other non-gcc, non-VS compilers need
823         # to be listed below. If unhandled, OSG_AGGRESSIVE_WARNING_FLAGS should
824         # remain unset.
825
826         IF (APPLE)
827             SET(OSG_CXX_LANGUAGE_STANDARD "C++11" CACHE STRING "set the c++ language standard (C++98 / C++11) for OSG" )
828             MARK_AS_ADVANCED(OSG_CXX_LANGUAGE_STANDARD)
829             # remove existing flags
830             REMOVE_CXX_FLAG(-std=c++98)
831             REMOVE_CXX_FLAG(-std=c++11)
832             REMOVE_CXX_FLAG(-stdlib=libstdc++)
833             REMOVE_CXX_FLAG(-stdlib=libc++)
834
835             IF(${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "c++98" OR ${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "C++98")
836                 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
837                 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
838                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -stdlib=libstdc++")
839             ELSE()
840                 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
841                 set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
842                 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
843             ENDIF()
844
845             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-overloaded-virtual -Wno-conversion")
846             set(WARNING_CFLAGS "")
847         ENDIF()
848 ENDIF()
849
850 # This part is for the CMake menu option to toggle the warnings on/off.
851 # This will only be made available if we set values for OSG_AGGRESSIVE_WARNING_FLAGS.
852 IF(OSG_AGGRESSIVE_WARNING_FLAGS)
853
854     IF (APPLE)
855         SET(DEFAULT_USE_AGGRESSIVE_WARNINGS OFF)
856     ELSE()
857         SET(DEFAULT_USE_AGGRESSIVE_WARNINGS ON)
858     ENDIF()
859
860     OPTION(OSG_USE_AGGRESSIVE_WARNINGS "Enable to activate aggressive warnings" ${DEFAULT_USE_AGGRESSIVE_WARNINGS})
861     MARK_AS_ADVANCED(OSG_USE_AGGRESSIVE_WARNINGS)
862
863     IF(OSG_USE_AGGRESSIVE_WARNINGS)
864         # Add flags defined by OSG_AGGRESSIVE_WARNING_FLAGS if they aren't already there
865         FOREACH(flag ${OSG_AGGRESSIVE_WARNING_FLAGS})
866             IF(NOT CMAKE_CXX_FLAGS MATCHES "${flag}")
867                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
868             ENDIF()
869         ENDFOREACH()
870     ELSE()
871         # Remove all flags considered aggresive
872         FOREACH(flag ${OSG_AGGRESSIVE_WARNING_FLAGS})
873             STRING(REGEX REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
874         ENDFOREACH()
875     ENDIF()
876 ENDIF()
877
878
879 # Dynamic vs Static Linking
880 OPTION(DYNAMIC_OPENSCENEGRAPH "Set to ON to build OpenSceneGraph for dynamic linking.  Use OFF for static." ON)
881 IF   (DYNAMIC_OPENSCENEGRAPH)
882     SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED")
883 ELSE ()
884     SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC")
885 ENDIF()
886
887
888 # OSG Core
889 ADD_SUBDIRECTORY(src)
890
891 IF   (BUILD_OSG_APPLICATIONS AND NOT ANDROID)
892     ADD_SUBDIRECTORY(applications)
893 ENDIF()
894
895 IF   (BUILD_OSG_EXAMPLES)
896     ADD_SUBDIRECTORY(examples)
897 ENDIF()
898
899
900 IF(APPLE AND NOT ANDROID)
901
902         #Here we check if the user specified IPhone SDK
903     IF(OSG_BUILD_PLATFORM_IPHONE OR OSG_BUILD_PLATFORM_IPHONE_SIMULATOR)
904
905         #set iphone arch and flags taken from http://sites.google.com/site/michaelsafyan/coding/resources/how-to-guides/cross-compile-for-the-iphone/how-to-cross-compile-for-the-iphone-using-cmake
906         IF(OSG_BUILD_PLATFORM_IPHONE)
907             IF(${IPHONE_VERSION_MIN} LESS "7.0")
908                 SET(CMAKE_OSX_ARCHITECTURES "armv6;armv7" CACHE STRING "Build architectures for iOS" FORCE)
909                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-thumb -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
910             ELSE()
911                 SET(CMAKE_OSX_ARCHITECTURES "armv7;armv7s;arm64" CACHE STRING "Build architectures for iOS" FORCE)
912                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
913             ENDIF()
914
915             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN}" FORCE)
916
917         ELSE()
918             #simulator uses i386 architectures
919             SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for iOS Simulator" FORCE)
920             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-thumb -arch i386 -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
921
922             SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=${IPHONE_VERSION_MIN}" FORCE)
923
924         ENDIF()
925
926         #here we set the specific iphone sdk version. We can only set either device or simulator sdk. So if you want both you currently have to have two seperate projects
927         SET(CMAKE_OSX_SYSROOT "${IPHONE_SDKROOT}" CACHE STRING "System root for iOS" FORCE)
928
929         #hack, force link to opengles
930         set(CMAKE_EXE_LINKER_FLAGS "-framework Foundation -framework OpenGLES")
931
932         #use the IPhone windowing system
933         SET(OSG_WINDOWING_SYSTEM "IOS" CACHE STRING "Forced IPhone windowing system on iOS"  FORCE)
934         SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "imageio" CACHE STRING "Forced imageio default image plugin for iOS" FORCE)
935
936         #I think this or similar will be required for IPhone apps
937         OPTION(OSG_BUILD_APPLICATION_BUNDLES "Enable the building of applications and examples as OSX Bundles" ON)
938
939     ELSE()
940
941         # Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
942         # and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
943
944         # These are just defaults/recommendations, but how we want to build
945         # out of the box. But the user needs to be able to change these options.
946         # So we must only set the values the first time CMake is run, or we
947         # will overwrite any changes the user sets.
948         # FORCE is used because the options are not reflected in the UI otherwise.
949         # Seems like a good place to add version specific compiler flags too.
950         IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
951             IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9")
952                 SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "imageio" CACHE STRING "Forced imageio default image plugin for OSX" FORCE)
953                 # 64 Bit Works, i386,ppc is not supported any more
954                 SET(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX" FORCE)
955                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.8 -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
956             ELSEIF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.7")
957                 SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "imageio" CACHE STRING "Forced imageio default image plugin for OSX" FORCE)
958                 # 64 Bit Works, PPC is not supported any more
959                 SET(CMAKE_OSX_ARCHITECTURES "i386;x86_64" CACHE STRING "Build architectures for OSX" FORCE)
960                 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.7 -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
961             ELSEIF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.6" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.5")
962                 SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "imageio" CACHE STRING "Forced imageio default image plugin for OSX" FORCE)
963                 # 64-bit compiles are not supported with Carbon.
964                 SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX" FORCE)
965                 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)
966             ELSEIF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.4")
967                 SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "quicktime" CACHE STRING "Forced imageio default image plugin for OSX" FORCE)
968                 SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX" FORCE)
969                 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)
970             ELSE()
971                 # No Universal Binary support
972                 # Should break down further to set the -mmacosx-version-min,
973                 # but the SDK detection is too unreliable here.
974             ENDIF()
975         ENDIF()
976
977         OPTION(OSG_BUILD_APPLICATION_BUNDLES "Enable the building of applications and examples as OSX Bundles" OFF)
978
979     ENDIF()
980
981 ENDIF()
982
983
984 # For Doxygen
985 INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL)
986 OPTION(BUILD_DOCUMENTATION "Build OpenSceneGraph reference documentation using doxygen (use: make doc_openscenegraph doc_openthreads)" OFF)
987 MARK_AS_ADVANCED(CLEAR BUILD_DOCUMENTATION)
988 # To build the documention, you will have to enable it
989 # and then do the equivalent of "make doc_openscenegraph doc_openthreads".
990 IF(BUILD_DOCUMENTATION)
991
992     OPTION(BUILD_REF_DOCS_SEARCHENGINE "Enable doxygen's search engine (requires that documentation to be installed on a php enabled web server)" OFF)
993     IF(BUILD_REF_DOCS_SEARCHENGINE)
994         SET(SEARCHENGINE YES)
995     ELSE()
996         SET(SEARCHENGINE NO)
997     ENDIF()
998
999     OPTION(BUILD_REF_DOCS_TAGFILE "Generate a tag file named osg.tag on the documentation web server" OFF)
1000     IF(BUILD_REF_DOCS_TAGFILE)
1001         SET(GENERATE_TAGFILE "${OpenSceneGraph_BINARY_DIR}/doc/OpenSceneGraphReferenceDocs/osg.tag")
1002     ELSE()
1003         SET(GENERATE_TAGFILE "")
1004     ENDIF()
1005
1006     IF(DOT)
1007         SET(HAVE_DOT YES)
1008     ELSE()
1009         SET(HAVE_DOT NO)
1010     ENDIF()
1011
1012     # If html help generation was requested. DOCUMENTATION_HTML_HELP is defined by Documentation.cmake
1013     SET(GENERATE_HTMLHELP "NO")
1014     IF(DOCUMENTATION_HTML_HELP)
1015         # on windows Documentation.cmake finds the html help workshop if it exists. On u*ix we might have it with wine but no way to point it out
1016         IF(NOT WIN32)
1017             SET(HTML_HELP_COMPILER "" CACHE FILEPATH "Enter location of the HTML help compiler to let doxygen compile html")
1018             MARK_AS_ADVANCED(HTML_HELP_COMPILER)
1019         ENDIF()
1020         # this var sets a proper value in .doxygen files when configuring them below
1021         SET(GENERATE_HTMLHELP "YES")
1022     endif()
1023
1024     # This processes our doxyfile.cmake and substitutes paths to generate
1025     # a final Doxyfile
1026     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/doxyfile.cmake
1027         ${PROJECT_BINARY_DIR}/doc/openscenegraph.doxyfile
1028     )
1029     # copy the osg logo to documentations target folder
1030     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PlatformSpecifics/Windows/icons/src/osg32-32.png
1031         ${PROJECT_BINARY_DIR}/doc/OpenSceneGraphReferenceDocs/osg32-32.png COPYONLY
1032     )
1033     #INSTALL(FILES ${PROJECT_BINARY_DIR}/doc/${PROJECT_NAME}ReferenceDocs-${OPENSCENEGRAPH_VERSION}.chm DESTINATION doc OPTIONAL COMPONENT openscenegraph-doc)
1034     INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/doc/OpenSceneGraphReferenceDocs DESTINATION doc COMPONENT openscenegraph-doc)
1035
1036     # now set up openthreads documentation generation
1037     IF(BUILD_REF_DOCS_TAGFILE)
1038         SET(GENERATE_TAGFILE "${OpenSceneGraph_BINARY_DIR}/doc/OpenThreadsReferenceDocs/ot.tag")
1039     ENDIF()
1040
1041     # This processes our openthreads.doxyfile.cmake and generate a final doxyfile
1042     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/openthreads.doxyfile.cmake
1043         ${PROJECT_BINARY_DIR}/doc/openthreads.doxyfile
1044     )
1045     # copy the osg logo to documentations target folder
1046     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/PlatformSpecifics/Windows/icons/src/osg32-32.png
1047         ${PROJECT_BINARY_DIR}/doc/OpenThreadsReferenceDocs/osg32-32.png COPYONLY
1048     )
1049     #INSTALL(FILES ${PROJECT_BINARY_DIR}/doc/${PROJECT_NAME}ReferenceDocs-${OPENSCENEGRAPH_VERSION}.chm DESTINATION doc OPTIONAL COMPONENT openscenegraph-doc)
1050     INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/doc/OpenThreadsReferenceDocs DESTINATION doc COMPONENT openthreads-doc)
1051
1052     # Process our other doxyfiles but don't create targets for these
1053     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/all_Doxyfile
1054         ${PROJECT_BINARY_DIR}/doc/all_Doxyfile)
1055     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/auto_Doxyfile
1056         ${PROJECT_BINARY_DIR}/doc/auto_Doxyfile)
1057     CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/core_Doxyfile
1058         ${PROJECT_BINARY_DIR}/doc/core_Doxyfile)
1059
1060     # This creates a new target to build documentation.
1061     # It runs ${DOXYGEN} which is the full path and executable to
1062     # Doxygen on your system, set by the FindDoxygen.cmake module
1063     # (called by FindDocumentation.cmake).
1064     # It runs the final generated Doxyfile against it.
1065     # The DOT_PATH is substituted into the Doxyfile.
1066     ADD_CUSTOM_TARGET(doc_openscenegraph ${DOXYGEN}
1067         ${PROJECT_BINARY_DIR}/doc/openscenegraph.doxyfile
1068     )
1069     SET_TARGET_PROPERTIES(doc_openscenegraph PROPERTIES FOLDER "Documentation")
1070
1071     ADD_CUSTOM_TARGET(doc_openthreads ${DOXYGEN}
1072         ${PROJECT_BINARY_DIR}/doc/openthreads.doxyfile
1073     )
1074     SET_TARGET_PROPERTIES(doc_openthreads PROPERTIES FOLDER "Documentation")
1075 ENDIF(BUILD_DOCUMENTATION)
1076
1077 OPTION(BUILD_DASHBOARD_REPORTS "Set to ON to activate reporting of OpenSceneGraph builds here http://cdash.openscenegraph.org/index.php?project=OpenSceneGraph" OFF)
1078 IF(BUILD_DASHBOARD_REPORTS)
1079 # The following are required to uses Dart and the Cdash dashboard
1080 # viewable here : http://cdash.openscenegraph.org/index.php?project=OpenSceneGraph
1081     INCLUDE(Dart)
1082 ENDIF()
1083
1084 # present the packaging option only if we have the cpack command defined (effectively >= 2.6.0)
1085 IF(CMAKE_CPACK_COMMAND)
1086     OPTION(BUILD_OSG_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF)
1087     IF(BUILD_OSG_PACKAGES)
1088       INCLUDE(OsgCPack)
1089     ENDIF()
1090 ENDIF()
1091
1092 # Generate pkg-config configuration files
1093
1094 SET(PKGCONFIG_FILES
1095   openscenegraph
1096   openscenegraph-osg
1097   openscenegraph-osgDB
1098   openscenegraph-osgFX
1099   openscenegraph-osgGA
1100   openscenegraph-osgParticle
1101   openscenegraph-osgSim
1102   openscenegraph-osgText
1103   openscenegraph-osgUtil
1104   openscenegraph-osgTerrain
1105   openscenegraph-osgManipulator
1106   openscenegraph-osgViewer
1107   openscenegraph-osgWidget
1108   openscenegraph-osgShadow
1109   openscenegraph-osgAnimation
1110   openscenegraph-osgVolume
1111 )
1112
1113 IF(QT4_FOUND OR Qt5Widgets_FOUND )
1114   SET(PKGCONFIG_FILES ${PKGCONFIG_FILES} openscenegraph-osgQt)
1115 ENDIF()
1116
1117 FOREACH(PKGCONFIG_FILE ${PKGCONFIG_FILES})
1118   CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/packaging/pkgconfig/${PKGCONFIG_FILE}.pc.in
1119     ${PROJECT_BINARY_DIR}/packaging/pkgconfig/${PKGCONFIG_FILE}.pc
1120     @ONLY
1121     )
1122   INSTALL(FILES ${PROJECT_BINARY_DIR}/packaging/pkgconfig/${PKGCONFIG_FILE}.pc DESTINATION lib${LIB_POSTFIX}/pkgconfig COMPONENT libopenscenegraph-dev)
1123 ENDFOREACH(PKGCONFIG_FILE)
1124
1125
1126 # Run this as late as possible so users can easier spot the message
1127 IF (NOT DEFINED REQUIRES_LIBPATH_MESSAGE AND ${CMAKE_INSTALL_PREFIX} STREQUAL "/usr/local")
1128     SET(REQUIRES_LIBPATH_MESSAGE ON)
1129 ENDIF()
1130
1131 IF(REQUIRES_LIBPATH_MESSAGE)
1132     IF (NOT OSG_LIBPATH_MESSAGE_HAS_BEEN_RUN_BEFORE)
1133         SET(OSG_LIBPATH_MESSAGE_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether the libpath message has been reported before")
1134
1135         MESSAGE("\nThe build system is configured to install libraries to ${CMAKE_INSTALL_PREFIX}/lib${LIB_POSTFIX}\n"
1136             "Your applications may not be able to find your installed libraries unless you:\n"
1137             "    set your LD_LIBRARY_PATH (user specific) or\n"
1138             "    update your ld.so configuration (system wide)")
1139         IF(IS_DIRECTORY /etc/ld.so.conf.d)
1140             MESSAGE("You have an ld.so.conf.d directory on your system, so if you wish to ensure that\n"
1141                 "applications find the installed osg libraries, system wide, you could install an\n"
1142                 "OpenSceneGraph specific ld.so configuration with:\n"
1143                 "    sudo make install_ld_conf\n")
1144             CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/packaging/ld.so.conf.d/openscenegraph.conf.in
1145                 ${PROJECT_BINARY_DIR}/packaging/ld.so.conf.d/openscenegraph.conf
1146             )
1147             ADD_CUSTOM_TARGET(install_ld_conf ${CMAKE_COMMAND} -E copy_if_different
1148                 ${PROJECT_BINARY_DIR}/packaging/ld.so.conf.d/openscenegraph.conf
1149                 /etc/ld.so.conf.d/openscenegraph.conf
1150                 COMMAND ldconfig
1151                 COMMENT "Copying openscenegraph.conf to /etc/ld.so.conf.d and running ldconfig"
1152             )
1153         ELSE()
1154             IF(EXISTS /etc/ld.so.conf)
1155                 MESSAGE("You have an ld.so.conf file in /etc, if you wish to ensure \n"
1156                 "that applications find the installed osg libraries, system wide, you\n"
1157                 "could add ${CMAKE_INSTALL_PREFIX}/lib${LIB_POSTFIX} to it.")
1158             ENDIF()
1159         ENDIF()
1160
1161         # emit a message during installation.
1162         INSTALL(CODE "MESSAGE(\"Libraries were installed to ${CMAKE_INSTALL_PREFIX}lib${LIB_POSTFIX}.\\nYou may need to update your ld.so configuration. \")")
1163
1164     ENDIF(NOT OSG_LIBPATH_MESSAGE_HAS_BEEN_RUN_BEFORE)
1165
1166 ELSE()
1167     SET(OSG_LIBPATH_MESSAGE_HAS_BEEN_RUN_BEFORE 0 CACHE INTERNAL "Flag to track whether the libpath message has been reported before")
1168 ENDIF()
1169
1170
1171 # This needs to be run very last so other parts of the scripts can take
1172 # advantage of this.
1173 IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
1174     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")
1175 ENDIF()
1176
1177 #-----------------------------------------------------------------------------
1178 ### uninstall target
1179 #-----------------------------------------------------------------------------
1180 CONFIGURE_FILE(
1181   "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
1182   "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
1183   IMMEDIATE @ONLY)
1184 ADD_CUSTOM_TARGET(uninstall
1185   "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
1186
1187 #
1188 IF(ANDROID)
1189     message(STATUS "Creating Android Makefile Master files" )
1190     configure_file("${OSG_ANDROID_TEMPLATES}/Android.mk.master.in" "${CMAKE_BINARY_DIR}/Android.mk")
1191     configure_file("${OSG_ANDROID_TEMPLATES}/Application.mk.master.in" "${CMAKE_BINARY_DIR}/Application.mk")
1192     configure_file("${OSG_ANDROID_TEMPLATES}/AndroidManifest.xml.master.in" "${CMAKE_BINARY_DIR}/AndroidManifest.xml")
1193 ENDIF(ANDROID)
1194