diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e30499ae..d2380cd76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,185 +1,198 @@ -PROJECT(OpenSceneGraph) - -# We have some custom .cmake scripts not in the official distribution. -# Maybe this can be used override existing behavior if needed? -SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}") - -# Mainly for Windows as a convenience. This will find a directory in parallel with the -# OSG source that contains 3rd party headers and libraries. -# Use of relative paths in CMake is ill-advised, but don't know of any alternatives in this case -SET(CMAKE_INCLUDE_PATH "${OpenSceneGraph_SOURCE_DIR}/../3rdParty/include;${CMAKE_INCLUDE_PATH}") -SET(CMAKE_LIBRARY_PATH "${OpenSceneGraph_SOURCE_DIR}/../3rdParty/lib;${CMAKE_LIBRARY_PATH}") -IF(USING_OSG_OP_OT_TRIPLE_SET) - SET(CMAKE_INCLUDE_PATH "${OpenSceneGraph_SOURCE_DIR}/../../3rdParty/include;${CMAKE_INCLUDE_PATH}") - SET(CMAKE_LIBRARY_PATH "${OpenSceneGraph_SOURCE_DIR}/../../3rdParty/lib;${CMAKE_LIBRARY_PATH}") -ENDIF(USING_OSG_OP_OT_TRIPLE_SET) - - -# FIXME: The FindOpenThreads stuff below is not quite correct. -# The problem is that if we are building OpenSceneGraph by itself -# (not part of the triple-set OT/OP/OSG source), then we need to hunt -# down the OpenThreads library on the system. -# But if we are building as part of the triple-set, then we want to -# refer to the version in the triple set. But this gets harder because -# FIND_LIBRARY will fail to pick the triple set version in this case -# because the library is not yet built when running this CMake script. -# -# Maybe we need a global flag (set in the root CMakeLists.txt) -# that tells us which scenario we are doing. -# And in the triple set case, we skip this check. - -IF(USING_OSG_OP_OT_TRIPLE_SET) - # MESSAGE("OSG: Using TripleSet, ${OpenThreads_SOURCE_DIR}.") - # So I think the fall-out is that all the OpenThreads variables - # that have been set are still in play. So the include paths are still - # visible, and the library is still set. - # To keep the same code paths - SET(OPENTHREADS_LIBRARY OpenThreads) - SET(OPENTHREADS_INCLUDE_DIR ${OpenThreads_SOURCE_DIR}/include) - - # MESSAGE("Lib: ${OPENTHREADS_LIBRARY}") - - -ELSE(USING_OSG_OP_OT_TRIPLE_SET) -# MESSAGE("OSG: Not using Triple Set") - FIND_PACKAGE(OpenThreads REQUIRED) - -ENDIF(USING_OSG_OP_OT_TRIPLE_SET)# Find OpenGL -FIND_PACKAGE(OpenGL) - -IF(APPLE) - FIND_LIBRARY(CARBON_LIBRARY Carbon) - FIND_LIBRARY(COCOA_LIBRARY Cocoa) -ENDIF(APPLE) - -IF(UNIX) - # Not sure what this will do on Cygwin and Msys - # Also, remember OS X X11 is a user installed option so it may not exist. - FIND_PACKAGE(X11) -ENDIF(UNIX) - -# Make the headers visible to everything -INCLUDE_DIRECTORIES( - ${OpenSceneGraph_SOURCE_DIR}/include - ${OPENTHREADS_INCLUDE_DIR} - ${OPENGL_INCLUDE_DIR} -) - -# Common global definitions -#ADD_DEFINITIONS(-D) -# Platform specific definitions - -IF(WIN32) - # Both Cygwin and Msys need -DNOMINMAX ??? - IF(UNIX) - ADD_DEFINITIONS(-DNOMINMAX) - ENDIF(UNIX) -ENDIF(WIN32) - - - -################################################################################ -# 3rd Party Dependency Stuff - -# Common to all platforms: -FIND_PACKAGE(FreeType) - - -# Platform specific: -# (We can approach this one of two ways. We can try to FIND everything -# and simply check if we found the packages before actually building -# or we can hardcode the cases. The advantage of the former is that -# packages that are installed on platforms that don't require them -# will still get built (presuming no compatibility issues). But this -# also means modules that are redundant may get built. For example, -# OS X doesn't need GIF, JPEG, PNG, TIFF, etc because it uses QuickTime. -# Also, it will clutter the CMake menu with "NOT_FOUND". -# The downside to the latter is that it is harder to build those -# potentially redundant modules.) - -# Image readers/writers depend on 3rd party libraries except for OS X which -# can use Quicktime. -IF(NOT APPLE) - FIND_PACKAGE(GIFLIB) - FIND_PACKAGE(JPEG) - FIND_PACKAGE(PNG) - FIND_PACKAGE(TIFF) - - # QuickTime is required for OS X, but optional for Windows. - IF(WIN32) - FIND_PACKAGE(QuickTime) - ENDIF(WIN32) - -ELSE(NOT APPLE) - FIND_PACKAGE(QuickTime) -ENDIF(NOT APPLE) - - - - -################################################################################ -# Installation stuff - -SET(CMAKE_DEBUG_POSTFIX "d") -#SET(INSTALL_BINDIR OpenSceneGraph/bin) -#SET(INSTALL_INCDIR OpenSceneGraph/include) -#SET(INSTALL_LIBDIR OpenSceneGraph/lib) -#SET(INSTALL_DOCDIR OpenSceneGraph/doc) - -################################################################################ -# User Options - -# Dynamic vs Static Linking -OPTION(DYNAMIC_OPENSCENEGRAPH "Set to ON to build OpenSceneGraph for dynamic linking. Use OFF for static." ON) -IF (DYNAMIC_OPENSCENEGRAPH) - SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED") -ELSE (DYNAMIC_OPENSCENEGRAPH) - SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC") -ENDIF(DYNAMIC_OPENSCENEGRAPH) - -# OSG Core -ADD_SUBDIRECTORY(src) - -# OSG Applications -OPTION(BUILD_OSG_APPLICATIONS "Enable to build OSG Applications (e.g. osgviewer)" ON) -IF (BUILD_OSG_APPLICATIONS) - ADD_SUBDIRECTORY(applications) -ENDIF(BUILD_OSG_APPLICATIONS) - -# OSG Examples -OPTION(BUILD_OSG_EXAMPLES "Enable to build OSG Examples" OFF) -IF (BUILD_OSG_EXAMPLES) - ADD_SUBDIRECTORY(examples) -ENDIF(BUILD_OSG_EXAMPLES) - - - -# For Doxygen -#FIXME: I haven't figured out what to do with OSG's multiple doxyfiles -# and footer. -INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL) - -# To build the documention, you will have to enable it -# and then do the equivalent of "make DoxygenDoc". -IF(BUILD_DOCUMENTATION) - IF(DOT) - SET(HAVE_DOT YES) - ELSE(DOT) - SET(HAVE_DOT NO) - ENDIF(DOT) - # This processes our Doxyfile.in and substitutes paths to generate - # a final Doxyfile - CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/doxyfile.cmake - ${PROJECT_BINARY_DIR}/doc/doxyfile - ) - # This creates a new target to build documentation. - # It runs ${DOXYGEN} which is the full path and executable to - # Doxygen on your system, set by the FindDoxygen.cmake module - # (called by FindDocumentation.cmake). - # It runs the final generated Doxyfile against it. - # The DOT_PATH is substituted into the Doxyfile. - ADD_CUSTOM_TARGET(DoxygenDoc ${DOXYGEN} - ${PROJECT_BINARY_DIR}/docs/doxyfile - ) -ENDIF(BUILD_DOCUMENTATION) - +CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6 FATAL_ERROR) + +PROJECT(OpenSceneGraph) + +# We have some custom .cmake scripts not in the official distribution. +# Maybe this can be used override existing behavior if needed? +SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}") + +# Mainly for Windows as a convenience. This will find a directory in parallel with the +# OSG source that contains 3rd party headers and libraries. +# Use of relative paths in CMake is ill-advised, but don't know of any alternatives in this case +SET(CMAKE_INCLUDE_PATH "${OpenSceneGraph_SOURCE_DIR}/../3rdParty/include;${CMAKE_INCLUDE_PATH}") +SET(CMAKE_LIBRARY_PATH "${OpenSceneGraph_SOURCE_DIR}/../3rdParty/lib;${CMAKE_LIBRARY_PATH}") +IF(USING_OSG_OP_OT_TRIPLE_SET) + SET(CMAKE_INCLUDE_PATH "${OpenSceneGraph_SOURCE_DIR}/../../3rdParty/include;${CMAKE_INCLUDE_PATH}") + SET(CMAKE_LIBRARY_PATH "${OpenSceneGraph_SOURCE_DIR}/../../3rdParty/lib;${CMAKE_LIBRARY_PATH}") +ENDIF(USING_OSG_OP_OT_TRIPLE_SET) + + +# FIXME: The FindOpenThreads stuff below is not quite correct. +# The problem is that if we are building OpenSceneGraph by itself +# (not part of the triple-set OT/OP/OSG source), then we need to hunt +# down the OpenThreads library on the system. +# But if we are building as part of the triple-set, then we want to +# refer to the version in the triple set. But this gets harder because +# FIND_LIBRARY will fail to pick the triple set version in this case +# because the library is not yet built when running this CMake script. +# +# Maybe we need a global flag (set in the root CMakeLists.txt) +# that tells us which scenario we are doing. +# And in the triple set case, we skip this check. + +IF(USING_OSG_OP_OT_TRIPLE_SET) + # MESSAGE("OSG: Using TripleSet, ${OpenThreads_SOURCE_DIR}.") + # So I think the fall-out is that all the OpenThreads variables + # that have been set are still in play. So the include paths are still + # visible, and the library is still set. + # To keep the same code paths + SET(OPENTHREADS_LIBRARY OpenThreads) + SET(OPENTHREADS_INCLUDE_DIR ${OpenThreads_SOURCE_DIR}/include) + + # MESSAGE("Lib: ${OPENTHREADS_LIBRARY}") + + +ELSE(USING_OSG_OP_OT_TRIPLE_SET) +# MESSAGE("OSG: Not using Triple Set") + FIND_PACKAGE(OpenThreads REQUIRED) + +ENDIF(USING_OSG_OP_OT_TRIPLE_SET)# Find OpenGL +FIND_PACKAGE(OpenGL) + +IF(APPLE) + FIND_LIBRARY(CARBON_LIBRARY Carbon) + FIND_LIBRARY(COCOA_LIBRARY Cocoa) +ENDIF(APPLE) + +IF(UNIX) + # Not sure what this will do on Cygwin and Msys + # Also, remember OS X X11 is a user installed option so it may not exist. + FIND_PACKAGE(X11) +ENDIF(UNIX) + +# Make the headers visible to everything +INCLUDE_DIRECTORIES( + ${OpenSceneGraph_SOURCE_DIR}/include + ${OPENTHREADS_INCLUDE_DIR} + ${OPENGL_INCLUDE_DIR} +) + +# Common global definitions +#ADD_DEFINITIONS(-D) +# Platform specific definitions + +IF(WIN32) + # Both Cygwin and Msys need -DNOMINMAX ??? + IF(UNIX) + ADD_DEFINITIONS(-DNOMINMAX) + ENDIF(UNIX) +ENDIF(WIN32) + + + +################################################################################ +# 3rd Party Dependency Stuff + +# Common to all platforms: +FIND_PACKAGE(FreeType) + + +# Platform specific: +# (We can approach this one of two ways. We can try to FIND everything +# and simply check if we found the packages before actually building +# or we can hardcode the cases. The advantage of the former is that +# packages that are installed on platforms that don't require them +# will still get built (presuming no compatibility issues). But this +# also means modules that are redundant may get built. For example, +# OS X doesn't need GIF, JPEG, PNG, TIFF, etc because it uses QuickTime. +# Also, it will clutter the CMake menu with "NOT_FOUND". +# The downside to the latter is that it is harder to build those +# potentially redundant modules.) + +# Image readers/writers depend on 3rd party libraries except for OS X which +# can use Quicktime. +IF(NOT APPLE) + FIND_PACKAGE(GIFLIB) + FIND_PACKAGE(JPEG) + FIND_PACKAGE(PNG) + FIND_PACKAGE(TIFF) + + # QuickTime is required for OS X, but optional for Windows. + IF(WIN32) + FIND_PACKAGE(QuickTime) + ENDIF(WIN32) + +ELSE(NOT APPLE) + FIND_PACKAGE(QuickTime) +ENDIF(NOT APPLE) + + + + +################################################################################ +# Installation stuff + +SET(CMAKE_DEBUG_POSTFIX "d") + +SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin/${CMAKE_SYSTEM_NAME}) +MAKE_DIRECTORY(${OUTPUT_BINDIR}) +SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_BINDIR}) + +SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib/${CMAKE_SYSTEM_NAME}) +MAKE_DIRECTORY(${OUTPUT_LIBDIR}) +SET(LIBRARY_OUTPUT_PATH ${OUTPUT_LIBDIR}) + + + +#SET(INSTALL_BINDIR OpenSceneGraph/bin) +#SET(INSTALL_INCDIR OpenSceneGraph/include) +#SET(INSTALL_LIBDIR OpenSceneGraph/lib) +#SET(INSTALL_DOCDIR OpenSceneGraph/doc) + +################################################################################ +# User Options + +# Dynamic vs Static Linking +OPTION(DYNAMIC_OPENSCENEGRAPH "Set to ON to build OpenSceneGraph for dynamic linking. Use OFF for static." ON) +IF (DYNAMIC_OPENSCENEGRAPH) + SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED") +ELSE (DYNAMIC_OPENSCENEGRAPH) + SET(OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC") +ENDIF(DYNAMIC_OPENSCENEGRAPH) + +# OSG Core +ADD_SUBDIRECTORY(src) + +# OSG Applications +OPTION(BUILD_OSG_APPLICATIONS "Enable to build OSG Applications (e.g. osgviewer)" ON) +IF (BUILD_OSG_APPLICATIONS) + ADD_SUBDIRECTORY(applications) +ENDIF(BUILD_OSG_APPLICATIONS) + +# OSG Examples +OPTION(BUILD_OSG_EXAMPLES "Enable to build OSG Examples" OFF) +IF (BUILD_OSG_EXAMPLES) + ADD_SUBDIRECTORY(examples) +ENDIF(BUILD_OSG_EXAMPLES) + + + +# For Doxygen +#FIXME: I haven't figured out what to do with OSG's multiple doxyfiles +# and footer. +INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL) + +# To build the documention, you will have to enable it +# and then do the equivalent of "make DoxygenDoc". +IF(BUILD_DOCUMENTATION) + IF(DOT) + SET(HAVE_DOT YES) + ELSE(DOT) + SET(HAVE_DOT NO) + ENDIF(DOT) + # This processes our Doxyfile.in and substitutes paths to generate + # a final Doxyfile + CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/doc/Doxyfiles/doxyfile.cmake + ${PROJECT_BINARY_DIR}/doc/doxyfile + ) + # This creates a new target to build documentation. + # It runs ${DOXYGEN} which is the full path and executable to + # Doxygen on your system, set by the FindDoxygen.cmake module + # (called by FindDocumentation.cmake). + # It runs the final generated Doxyfile against it. + # The DOT_PATH is substituted into the Doxyfile. + ADD_CUSTOM_TARGET(DoxygenDoc ${DOXYGEN} + ${PROJECT_BINARY_DIR}/docs/doxyfile + ) +ENDIF(BUILD_DOCUMENTATION) +