[osg-submissions] Changes to VPB CMake project files for building under VS 7.1

Robert Osfield robert.osfield at gmail.com
Fri Jun 6 11:03:22 PDT 2008


Hi Lugi,

I think I'd rather add the #define into the BuildLog.cpp as this keeps
the hack local to the file that needs it.

Robert.

On Fri, Jun 6, 2008 at 6:21 PM, Luigi Calori <l.calori at cineca.it> wrote:
> It seems vs 7.1 does not define correctly vsnprintf
>
> this hack solve the build problem of current svn vpb under MSVC 7.1
>
> I agree with J-S that
>>>
>>> Perhaps OSG's CMakeModules directory could be shared between OSG and VPB,
>>> since VpbMacroUtils.cmake for one is almost identical to
>>> OsgMacroUtils.cmake
>>> (and should probably *be* identical).
>>>
>>> Anyways, hope this brings you closer to being able to do a VPB 1.0
>>> release
>>>
>
> thanks
>           Luigi
>
> IF(WIN32)
>    CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6 FATAL_ERROR)
> ELSE(WIN32)
>    IF(APPLE)
>        CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6 FATAL_ERROR)
>        IF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4
> AND ${CMAKE_PATCH_VERSION} LESS 7)
>            MESSAGE("Warning: A critical CMake bug exists in 2.4.6 and below.
> Trying to build Universal Binaries will result in a compile error that seems
> unrelated. Either avoid building Universal Binaries by changing the
> CMAKE_OSX_ARCHITECTURES field to list only your architecture, or upgrade to
> the current CVS version of CMake or a newer stable version if it exists.")
>        ENDIF(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL
> 4 AND ${CMAKE_PATCH_VERSION} LESS 7)
>    ELSE(APPLE)
>        CMAKE_MINIMUM_REQUIRED(VERSION 2.4.0 FATAL_ERROR)
>    ENDIF(APPLE)
> ENDIF(WIN32)
>
> if(COMMAND cmake_policy)
>    # Works around warnings libraries linked against that don't
>    # have absolute paths (e.g. -lpthreads)
>    cmake_policy(SET CMP0003 NEW)
>
>    # Works around warnings about escaped quotes in ADD_DEFINITIONS
>    # statements.
>    cmake_policy(SET CMP0005 OLD)
> endif(COMMAND cmake_policy)
>
> PROJECT(VIRTUALPLANETBUILDER)
>
> SET(VIRTUALPLANETBUILDER_MAJOR_VERSION 0)
> SET(VIRTUALPLANETBUILDER_MINOR_VERSION 9)
> SET(VIRTUALPLANETBUILDER_PATCH_VERSION 9)
> SET(VIRTUALPLANETBUILDER_SOVERSION 8)
>
> SET(VIRTUALPLANETBUILDER_VERSION
> ${VIRTUALPLANETBUILDER_MAJOR_VERSION}.${VIRTUALPLANETBUILDER_MINOR_VERSION}.${VIRTUALPLANETBUILDER_PATCH_VERSION})
>
> # We want to build SONAMES shared librariess
> SET(VIRTUALPLANETBUILDER_SONAMES TRUE)
> SET(OPENTHREADS_SONAMES TRUE)
>
> SET(OpenThreads_SOURCE_DIR ${VIRTUALPLANETBUILDER_SOURCE_DIR})
>
> # 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
> "${VIRTUALPLANETBUILDER_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
>
>
> # Okay, here's the problem: On some platforms, linking against OpenThreads
> # is not enough and explicit linking to the underlying thread library
> # is also required (e.g. FreeBSD). But OpenThreads may be built with
> different
> # backends (Pthreads, Sproc, Windows) so we don't know what the underlying
> # thread library is because some platforms support multiple backends (e.g.
> # IRIX supports Sproc and Pthreads). Linking all libraries won't work
> # because the libraries may be incompatible.
> # So the current solution is to attempt best guess linking and exempt
> certain
> # cases. With IRIX, we're going to hope explicit linking to the underlying
> # library is not necessary. We currently don't case for pthreads on Windows
> # which might be an issue on things like Cygwin. This may need to be fixed.
> FIND_PACKAGE(Threads)
> IF(CMAKE_SYSTEM MATCHES IRIX)
>    # Erase CMAKE_THREAD_LIBS_INIT and hope it works
>    SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "")
> ENDIF(CMAKE_SYSTEM MATCHES IRIX)
>
> # Find OpenGL
> FIND_PACKAGE(OpenGL)
>
> 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)
>    # Some Unicies need explicit linkage to the Math library or the build
> fails.
>    FIND_LIBRARY(MATH_LIBRARY m)
> ENDIF(UNIX)
>
> FIND_PACKAGE(CURL)
>
>
> # Make the headers visible to everything
> INCLUDE_DIRECTORIES(
>    ${VIRTUALPLANETBUILDER_SOURCE_DIR}/include
>    ${OPENGL_INCLUDE_DIR}
> )
>
> # Common global definitions
> #ADD_DEFINITIONS(-D)
> # Platform specific definitions
>
> ########################################################################################################
> ##### these were settings located in SetupCommon.cmake used in Luigi
> builds.... find out what are useful
> ########################################################################################################
> #luigi#SET(CMAKE_VERBOSE_MAKEFILE TRUE)
> #luigi#SET(CMAKE_SKIP_RPATH TRUE)
> #luigi#SET(CMAKE_SKIP_RULE_DEPENDENCY TRUE)
> #luigi#IF(UNIX)
> #luigi#    LIST_CONTAINS(contains "g++" ${CMAKE_CXX_COMPILER_LIST})
> #luigi#    IF (contains)
> #luigi#        MESSAGE(${MY_MESSAGE_DEFAULT}
> "${CMAKE_CURRENT_LIST_FILE}:${CMAKE_CURRENT_LIST_LINE} setting
>  CMAKE_CXX_COMPILER to g++")
> #luigi#        SET(CMAKE_CXX_COMPILER "g++")
> #luigi#        SET(CMAKE_CXX_COMPILER_LOADED 2)
> #luigi#        SET(CMAKE_CXX_COMPILER_WORKS 2)
> #luigi#    ENDIF (contains)
> #luigi#    SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
> #luigi#    SET(CMAKE_CXX_FLAGS_DEBUG "-ggdb -gstabs")
> #luigi#ENDIF(UNIX)
> ########################################################################################################
>
> # Common to all platforms:
> SET(OSG_DIR "" CACHE PATH "set to base osg install path")
>
> SET(CMAKE_DEBUG_POSTFIX  "d")
>
> FIND_PACKAGE(OSG)
> FIND_PACKAGE(GDAL)
> # FIND_PACKAGE(ShapeLib)
>
> ################################################################################
> # Create bin and lib directories if required
>
> IF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
>   FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin ${CMAKE_BINARY_DIR}/lib)
> ENDIF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
>
>
> ################################################################################
> # Installation stuff
>
>
> IF(UNIX AND NOT WIN32 AND NOT APPLE)
>  IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
>      SET(LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
>      MARK_AS_ADVANCED(LIB_POSTFIX)
>  ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
> ENDIF(UNIX AND NOT WIN32 AND NOT APPLE)
> IF(NOT DEFINED LIB_POSTFIX)
>    SET(LIB_POSTFIX "")
> ENDIF(NOT DEFINED LIB_POSTFIX)
>
>
> IF(MSVC71)
>        ADD_DEFINITIONS(-Dvsnprintf=_vsnprintf)
> ENDIF(MSVC71)
>
> #SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin/${CMAKE_SYSTEM_NAME})
> SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)
> MAKE_DIRECTORY(${OUTPUT_BINDIR})
> SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_BINDIR})
>
> #SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib/${CMAKE_SYSTEM_NAME})
> SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)
> MAKE_DIRECTORY(${OUTPUT_LIBDIR})
> SET(LIBRARY_OUTPUT_PATH ${OUTPUT_LIBDIR})
>
>
>
> #SET(INSTALL_BINDIR VIRTUALPLANETBUILDER/bin)
> #SET(INSTALL_INCDIR VIRTUALPLANETBUILDER/include)
> #SET(INSTALL_LIBDIR VIRTUALPLANETBUILDER/lib)
> #SET(INSTALL_DOCDIR VIRTUALPLANETBUILDER/doc)
>
> ################################################################################
> # User Options
>
>
> # Expose CMAKE_INCLUDE_PATH and CMAKE_LIBARY_PATH to the GUI so users
> # may set these values without needing to manipulate the environment.
> SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} CACHE STRING "You may add
> additional search paths here. Use ; to separate multiple paths.")
> SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} CACHE STRING "You may add
> additional search paths here. Use ; to separate multiple paths.")
> # We are proposing that a new variable called CMAKE_PREFIX_PATH be
> introduced
> # to CMake to compliment CMAKE_INCLUDE_PATH and CMAKE_LIBRARY_PATH.
> # A formal feature request has been submited to CMake, Bug #4947.
> # It is intended for those users who have common prefixes for their INCLUDE
> # and LIBRARY locations. So if users have headers in /usr/local/include
> # and libraries in /usr/local/lib, the common prefix is /usr/local.
> # It should also cover the case where headers and libraries are
> # in the same directory.
> # Our proposal expects that FIND_* commands will automatically search for
> # CMAKE_PREFIX_PATH right after CMAKE_INCLUDE_PATH or CMAKE_LIBRARY_PATH.
> # Obviously, since CMake does not currently support this, we must write
> # our Find*.cmake modules to explicitly support this. Otherwise, this
> variable
> # will have no impact.
> # This is unofficial so this may be removed or changed at anytime.
> SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} CACHE STRING "(EXPERIMENTAL) You
> may add additional search paths here. Use ; to separate multiple paths.")
>
>
> # Automatically detected build options
> EXEC_PROGRAM(osgversion ARGS Matrix::value_type OUTPUT_VARIABLE
> OSG_USE_FLOAT_MATRIX)
> IF(OSG_USE_FLOAT_MATRIX MATCHES "float")
>    ADD_DEFINITIONS(-DOSG_USE_FLOAT_MATRIX)
> ENDIF(OSG_USE_FLOAT_MATRIX MATCHES "float")
>
> EXEC_PROGRAM(osgversion ARGS Plane::value_type OUTPUT_VARIABLE
> OSG_USE_FLOAT_PLANE)
> IF(OSG_USE_FLOAT_PLANE MATCHES "float")
>    ADD_DEFINITIONS(-DOSG_USE_FLOAT_PLANE)
> ENDIF(OSG_USE_FLOAT_PLANE MATCHES "float")
>
> EXEC_PROGRAM(osgversion ARGS BoundingSphere::value_type  OUTPUT_VARIABLE
> OSG_USE_FLOAT_BOUNDINGSPHERE)
> IF(OSG_USE_FLOAT_BOUNDINGSPHERE MATCHES "double")
>    ADD_DEFINITIONS(-DOSG_USE_DOUBLE_BOUNDINGSPHERE)
> ENDIF(OSG_USE_FLOAT_BOUNDINGSPHERE MATCHES "double")
>
> EXEC_PROGRAM(osgversion ARGS BoundingBox::value_type OUTPUT_VARIABLE
> OSG_USE_FLOAT_BOUNDINGBOX)
> IF(OSG_USE_FLOAT_BOUNDINGBOX MATCHES "double")
>    ADD_DEFINITIONS(-DOSG_USE_DOUBLE_BOUNDINGBOX)
> ENDIF(OSG_USE_FLOAT_BOUNDINGBOX MATCHES "double")
>
>
> # Dynamic vs Static Linking
> OPTION(DYNAMIC_VIRTUALPLANETBUILDER "Set to ON to build VIRTUALPLANETBUILDER
> for dynamic linking.  Use OFF for static." ON)
> IF   (DYNAMIC_VIRTUALPLANETBUILDER)
>    SET(VIRTUALPLANETBUILDER_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED")
> ELSE (DYNAMIC_VIRTUALPLANETBUILDER)
>    SET(VIRTUALPLANETBUILDER_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC")
> ENDIF(DYNAMIC_VIRTUALPLANETBUILDER)
>
> INCLUDE(VpbMacroUtils)
>
> # VPB Core
> ADD_SUBDIRECTORY(src)
>
> # VPB Applications
> OPTION(BUILD_APPLICATIONS "Enable to build VPB Applications (e.g. osgdem)"
> ON)
> IF   (BUILD_APPLICATIONS)
>    ADD_SUBDIRECTORY(applications)
> ENDIF(BUILD_APPLICATIONS)
>
>
>
> # Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
> # and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
> IF(APPLE)
>    # These are just defaults/recommendations, but how we want to build
>    # out of the box. But the user needs to be able to change these options.
>    # So we must only set the values the first time CMake is run, or we
>    # will overwrite any changes the user sets.
>    # FORCE is used because the options are not reflected in the UI
> otherwise.
>    # Seems like a good place to add version specific compiler flags too.
>    IF(NOT VPB_CONFIG_HAS_BEEN_RUN_BEFORE)
>        # This is really fragile, but CMake doesn't provide the OS system
>        # version information we need. (Darwin versions can be changed
>        # independently of OS X versions.)
>        # It does look like CMake handles the CMAKE_OSX_SYSROOT
> automatically.
>        IF(EXISTS /Developer/SDKs/10.5.sdk)
>            SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING
> "Build architectures for OSX" FORCE)
>            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)
>        ELSE(EXISTS /Developer/SDKs/10.5.sdk)
>            IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
>                SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build
> architectures for OSX" FORCE)
>                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)
>            ELSE(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
>                # No Universal Binary support
>                # Should break down further to set the -mmacosx-version-min,
>                # but the SDK detection is too unreliable here.
>            ENDIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
>        ENDIF(EXISTS /Developer/SDKs/10.5.sdk)
>    ENDIF(NOT VPB_CONFIG_HAS_BEEN_RUN_BEFORE)
>
>    OPTION(VPB_BUILD_APPLICATION_BUNDLES "Enable the building of applications
> and examples as OSX Bundles" OFF)
>
> ENDIF(APPLE)
>
>
> # This needs to be run very last so other parts of the scripts can take
> # advantage of this.
> IF(NOT VPB_CONFIG_HAS_BEEN_RUN_BEFORE)
>    SET(VPB_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")
> ENDIF(NOT VPB_CONFIG_HAS_BEEN_RUN_BEFORE)
>
>
> #-----------------------------------------------------------------------------
> ### uninstall target
> #-----------------------------------------------------------------------------
> CONFIGURE_FILE(
>  "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
>  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
>  IMMEDIATE @ONLY)
> ADD_CUSTOM_TARGET(uninstall
>  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
>
>
> _______________________________________________
> osg-submissions mailing list
> osg-submissions at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
>


More information about the osg-submissions mailing list