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