# Copyright: 2016-2023 Paul Obermeier (obermeier@tcl3d.org) # Distributed under BSD license. # # BuildType Windows: CMake / vs # CMake / gcc # BuildType Linux : CMake / gcc # BuildType Darwin : CMake / gcc # # Possible user configuration options (--copt): # -DBUILD_OSG_EXAMPLES=ON|OFF. Default: OFF. # KeepPluginFolder=ON|OFF. Default: OFF. # # Notes: OSG 3.0.1 cannot be compiled on OS X 10.9 (Mavericks) anymore, # because of deprecated functions like CGDisplayBitsPerPixel. # Manual changes to source code: # src/osgPlugins/ffmpeg/FFMpegHeaders.hpp: Added conditional definition of # UINT64_MIN and UINT64_MAX to compile with FFMPEG versions newer than 4.2. # src/osg/DisplaySettings.cpp: Added "&& !defined(__MINGW32__)" to compile with # MinGW gcc 11.2. # src/osgPlugins/ffmpeg/*: Added "udp" as additional protocol. proc Init_OpenSceneGraph { libName libVersion } { SetScriptAuthor $libName "Paul Obermeier" "obermeier@tcl3d.org" SetLibHomepage $libName "http://www.openscenegraph.org/" SetLibDependencies $libName "CMake" "ZLib" "TIFF" "JPEG" "jasper" \ "giflib" "PNG" "curl" "Freetype" "ffmpeg" SetPlatforms $libName "All" SetWinCompilers $libName "gcc" "vs" } proc Build_OpenSceneGraph { libName libVersion buildDir instDir devDir distDir } { if { [IsDarwin] && [VersionCompare "3.2.0" $libVersion] > 0 } { SetErrorMessage "On Darwin only versions greater than 3.2.0 are supported" return false } if { [UseStage "Extract" $libName] } { ExtractLibrary $libName $buildDir ReplaceLine "$buildDir/CMakeLists.txt" \ "-pedantic" \ "-fpermissive" ReplaceLine "$buildDir/CMakeLists.txt" \ "ENDIF(WIN32 AND NOT ANDROID)" \ {ENDIF(WIN32 AND NOT ANDROID) IF(WIN32 AND NOT ANDROID) IF(MSVC) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO") ENDIF(MSVC) ENDIF(WIN32 AND NOT ANDROID)} ReplaceKeywords "$buildDir/include/osgAnimation/Action" [list "Status" "ActionStatus"] # Need system libraries in VisualStudio format because of dependencies on other libraries, # which were compiled with MSys. CopySysIncludeFiles $libName "$buildDir/include" } if { [UseStage "Configure" $libName] } { if { [IsWindows] } { set msysOpts "" if { [UseWinCompiler $libName "gcc"] } { append msysOpts "-DCMAKE_CXX_FLAGS=-static-libstdc++ " append msysOpts "-DCMAKE_SHARED_LINKER_FLAGS_INIT=-static-libstdc++" } CMakeConfig $libName "$buildDir" "$buildDir" "$instDir" \ "-DACTUAL_3RDPARTY_DIR=$devDir" "-DUSE_3RDPARTY_BIN=ON" \ "-DBUILD_OSG_APPLICATIONS=ON" \ "-DPNG_PNG_INCLUDE_DIR=$devDir/include" \ {*}$msysOpts \ [GetCMakeMSysOption $libName] } elseif { [IsDarwin] } { CMakeConfig $libName "$buildDir" "$buildDir" "$instDir" \ "-DACTUAL_3RDPARTY_DIR=$devDir" "-DUSE_3RDPARTY_BIN=ON" \ "-DBUILD_OSG_APPLICATIONS=ON" \ "-DOSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX=imageio" \ "-DPNG_PNG_INCLUDE_DIR=$devDir/include" \ "-DCMAKE_CXX_FLAGS=\"-std=c++11 -stdlib=libc++\"" } else { CMakeConfig $libName "$buildDir" "$buildDir" "$instDir" \ "-DACTUAL_3RDPARTY_DIR=$devDir" "-DUSE_3RDPARTY_BIN=ON" \ "-DBUILD_OSG_APPLICATIONS=ON" \ "-DPNG_PNG_INCLUDE_DIR=$devDir/include" } } if { [UseStage "Compile" $libName] } { CMakeBuild $libName "$buildDir" "install" [GetBuildType] [GetCMakeMSysOption $libName] StripLibraries "$instDir" } if { [UseStage "Distribute" $libName] } { set debugChar "" if { [IsDebugBuild] } { set debugChar "d" } SingleFileCopy "$instDir/bin/osgconv${debugChar}[GetExeSuffix]" "$distDir/bin" SingleFileCopy "$instDir/bin/osgversion${debugChar}[GetExeSuffix]" "$distDir/bin" SingleFileCopy "$instDir/bin/osgviewer${debugChar}[GetExeSuffix]" "$distDir/bin" if { [IsWindows] } { set keepPluginFolder false if { [string tolower [GetUserConfigValue $libName "KeepPluginFolder"]] eq "on" } { set keepPluginFolder true } MultiFileCopy "$instDir/bin" "$distDir/lib" "*.dll" $keepPluginFolder MultiFileCopy "$instDir/bin" "$devDir/lib" "*.dll" $keepPluginFolder MultiFileCopy "$instDir/bin" "$devDir/bin" "*.exe" MultiFileCopy "$instDir/lib" "$devDir/lib" "*" true ; # *.lib files if { [UseWinCompiler $libName "gcc"] } { SingleFileCopy [GetSehLib] "$distDir/bin" SingleFileCopy [GetSehLib] "$devDir/bin" } } else { LibFileCopy "$instDir" "$distDir" "*.dylib *.so*" LibFileCopy "$instDir" "$devDir" "*.dylib *.so*" MultiFileCopy "$instDir/bin" "$devDir/bin" } MultiFileCopy "$instDir/include" "$devDir/include" "*" true file delete -force "$devDir/lib/pkgconfig" if { [IsDebugBuild] && [UseWinCompiler $libName "vs"] } { MultiFileCopy "$buildDir/bin" "$devDir/lib" "*.pdb" } } return true }