From a0471607dc6d743235ea0db90eb65022e1efaf26 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sat, 17 Jan 2026 23:56:18 +0000 Subject: [PATCH 01/14] Remove explicit setting of CMake policies already covered by exisitng cmake_minimum_required These were already NEW because the OSG already uses 2.8 --- CMakeLists.txt | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 21d2c05d423..32f13465b0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,20 +16,6 @@ set_property(GLOBAL PROPERTY USE_FOLDERS ON) CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR) 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 NEW) - - # tell CMake to prefer CMake's own CMake modules when available - # only available from cmake-2.8.4 - if("${CMAKE_VERSION}" VERSION_GREATER 2.8.3) - cmake_policy(SET CMP0017 NEW) - endif() - # INTERPROCEDURAL_OPTIMIZATION is enforced when enabled. # Allows passing -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON cmake_policy(SET CMP0069 NEW) From 80958f8b53f8bd8b36738e66432d30ab7a5dbdeb Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sat, 17 Jan 2026 23:56:52 +0000 Subject: [PATCH 02/14] Consistently use 2.8 CMP0012 to CMP0023 do not look relevant to this one file. --- examples/osgCMakeExample/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/osgCMakeExample/CMakeLists.txt b/examples/osgCMakeExample/CMakeLists.txt index cd843299add..be30626e39b 100644 --- a/examples/osgCMakeExample/CMakeLists.txt +++ b/examples/osgCMakeExample/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.8) SET(PROJECT_NAME osgCMakeExample) From efc9de3b308c30d5b7950f6632b40fe66be0142b Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 00:01:24 +0000 Subject: [PATCH 03/14] Support CMP0025 --- CMakeLists.txt | 2 +- CMakeModules/FindFBX.cmake | 2 +- src/osgPlugins/cfg/CMakeLists.txt | 2 +- src/osgPlugins/dae/CMakeLists.txt | 2 +- src/osgPlugins/exr/CMakeLists.txt | 2 +- src/osgPlugins/fbx/CMakeLists.txt | 2 +- src/osgPlugins/ffmpeg/CMakeLists.txt | 2 +- src/osgPlugins/gdal/CMakeLists.txt | 2 +- src/osgPlugins/gstreamer/CMakeLists.txt | 2 +- src/osgPlugins/pdf/CMakeLists.txt | 2 +- src/osgPlugins/svg/CMakeLists.txt | 2 +- src/osgPlugins/zip/CMakeLists.txt | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 32f13465b0a..e4969ac631b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1022,7 +1022,7 @@ ELSEIF(MSVC) #C4706 assignment within conditional expression #C4589: Constructor of abstract class 'osgGA::CameraManipulator' ignores initializer for virtual base class 'osg::Object' SET(OSG_AGGRESSIVE_WARNING_FLAGS /W4 /wd4589 /wd4706 /wd4127 /wd4100) -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") SET(OSG_AGGRESSIVE_WARNING_FLAGS -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused -Wno-overloaded-virtual) # CMake lacks an elseif, so other non-gcc, non-VS compilers need diff --git a/CMakeModules/FindFBX.cmake b/CMakeModules/FindFBX.cmake index 6ffee2ceb6b..d45b6e849aa 100644 --- a/CMakeModules/FindFBX.cmake +++ b/CMakeModules/FindFBX.cmake @@ -9,7 +9,7 @@ # correspond to the ./configure --prefix=$FBX_DIR IF(APPLE) - if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") # using regular Clang or AppleClang SET(FBX_LIBDIR "clang") else() diff --git a/src/osgPlugins/cfg/CMakeLists.txt b/src/osgPlugins/cfg/CMakeLists.txt index 4f7062ba995..83597a3cf9d 100644 --- a/src/osgPlugins/cfg/CMakeLists.txt +++ b/src/osgPlugins/cfg/CMakeLists.txt @@ -19,7 +19,7 @@ SET(TARGET_H # lex/yacc generated files use register that causes warnings with CLang under OSX so disable this warnings. -IF(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") +IF(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-register") ENDIF() diff --git a/src/osgPlugins/dae/CMakeLists.txt b/src/osgPlugins/dae/CMakeLists.txt index 7eadfc2f38e..539b0e5071b 100644 --- a/src/osgPlugins/dae/CMakeLists.txt +++ b/src/osgPlugins/dae/CMakeLists.txt @@ -9,7 +9,7 @@ IF(CMAKE_COMPILER_IS_GNUCXX) STRING(REGEX REPLACE "-Wextra" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") ENDIF() -IF(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") ENDIF() diff --git a/src/osgPlugins/exr/CMakeLists.txt b/src/osgPlugins/exr/CMakeLists.txt index 6191ed18fca..e6b67e08bdf 100644 --- a/src/osgPlugins/exr/CMakeLists.txt +++ b/src/osgPlugins/exr/CMakeLists.txt @@ -5,7 +5,7 @@ SET(TARGET_SRC ReaderWriterEXR.cpp ) SET(TARGET_LIBRARIES_VARS ${OPENEXR_LIBRARIES_VARS} ${ILMBASE_LIBRARIES_VARS} ZLIB_LIBRARIES) -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") REMOVE_CXX_FLAG(-Wshadow) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated") ENDIF() diff --git a/src/osgPlugins/fbx/CMakeLists.txt b/src/osgPlugins/fbx/CMakeLists.txt index 2dc67b13598..72ab22378b7 100644 --- a/src/osgPlugins/fbx/CMakeLists.txt +++ b/src/osgPlugins/fbx/CMakeLists.txt @@ -24,7 +24,7 @@ IF(CMAKE_COMPILER_IS_GNUCXX) SET(CMAKE_CXX_FLAGS "-w") -ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") REMOVE_CXX_FLAG(-pedantic) REMOVE_CXX_FLAG(-Wall) diff --git a/src/osgPlugins/ffmpeg/CMakeLists.txt b/src/osgPlugins/ffmpeg/CMakeLists.txt index 6109f916402..a8cb15989ca 100644 --- a/src/osgPlugins/ffmpeg/CMakeLists.txt +++ b/src/osgPlugins/ffmpeg/CMakeLists.txt @@ -61,7 +61,7 @@ SET(TARGET_H MessageQueue.hpp ) -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations") ENDIF() diff --git a/src/osgPlugins/gdal/CMakeLists.txt b/src/osgPlugins/gdal/CMakeLists.txt index f1b67070178..74baa86dd0a 100644 --- a/src/osgPlugins/gdal/CMakeLists.txt +++ b/src/osgPlugins/gdal/CMakeLists.txt @@ -12,7 +12,7 @@ SET(TARGET_H SET(TARGET_LIBRARIES_VARS GDAL_LIBRARY ) SET(TARGET_ADDED_LIBRARIES osgTerrain ) -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") REMOVE_CXX_FLAG(-Wunused-result) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-result") diff --git a/src/osgPlugins/gstreamer/CMakeLists.txt b/src/osgPlugins/gstreamer/CMakeLists.txt index 53c6f271c7a..71a92a956d6 100644 --- a/src/osgPlugins/gstreamer/CMakeLists.txt +++ b/src/osgPlugins/gstreamer/CMakeLists.txt @@ -21,7 +21,7 @@ SET(TARGET_H ) -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") REMOVE_CXX_FLAG(-pedantic) diff --git a/src/osgPlugins/pdf/CMakeLists.txt b/src/osgPlugins/pdf/CMakeLists.txt index 7957506540c..f6d6ae47c9e 100644 --- a/src/osgPlugins/pdf/CMakeLists.txt +++ b/src/osgPlugins/pdf/CMakeLists.txt @@ -1,6 +1,6 @@ SET(TARGET_SRC ReaderWriterPDF.cpp ) -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") REMOVE_CXX_FLAG(-pedantic) ENDIF() diff --git a/src/osgPlugins/svg/CMakeLists.txt b/src/osgPlugins/svg/CMakeLists.txt index 1d7b5265d28..19328a5ed82 100644 --- a/src/osgPlugins/svg/CMakeLists.txt +++ b/src/osgPlugins/svg/CMakeLists.txt @@ -4,7 +4,7 @@ LINK_LIBRARIES(${RSVG_LIBRARIES} ${CAIRO_LIBRARIES}) SET(TARGET_SRC ReaderWriterSVG.cpp ) -IF(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") # Remove -pedantic flag as it barfs on ffmoeg headers STRING(REGEX REPLACE "-pedantic" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") ENDIF() diff --git a/src/osgPlugins/zip/CMakeLists.txt b/src/osgPlugins/zip/CMakeLists.txt index e805b418159..764456528b3 100644 --- a/src/osgPlugins/zip/CMakeLists.txt +++ b/src/osgPlugins/zip/CMakeLists.txt @@ -11,7 +11,7 @@ SET(TARGET_H ADD_DEFINITIONS(-DZIP_STD) -IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") +IF(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-implicit-fallthrough") ENDIF() From 83227c7f0c6968219b06b5d989823485e0315920 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 00:55:59 +0000 Subject: [PATCH 04/14] Ignore .cmake --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index f0ac01816d2..c2644add11a 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ CMakeScripts Makefile cmake_install.cmake install_manifest*.txt +.cmake/* # Compiled Object files From 537e5fe70747a27e0a4b3da44e2ba11fe3e63ee3 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 00:56:25 +0000 Subject: [PATCH 05/14] Fix PDB regression Introduced by 7195e5938b0554c8f000e4b4918388786704c13d --- CMakeModules/OsgMacroUtils.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeModules/OsgMacroUtils.cmake b/CMakeModules/OsgMacroUtils.cmake index cafd8725ba3..b650d4baed1 100644 --- a/CMakeModules/OsgMacroUtils.cmake +++ b/CMakeModules/OsgMacroUtils.cmake @@ -457,7 +457,7 @@ MACRO(SETUP_APPLICATION APPLICATION_NAME) ELSE(APPLE) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin COMPONENT openscenegraph ) IF(MSVC) - INSTALL(FILES $ DESTINATION bin COMPONENT openscenegraph) + INSTALL(FILES $ DESTINATION bin COMPONENT openscenegraph) ENDIF(MSVC) ENDIF(APPLE) @@ -489,7 +489,7 @@ MACRO(SETUP_EXAMPLE EXAMPLE_NAME) ELSE(APPLE) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples ) IF(MSVC) - INSTALL(FILES $ DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples) + INSTALL(FILES $ DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples) ENDIF(MSVC) ENDIF(APPLE) From 45ba4259eef44e4465ee8677ceeac2270e4ef875 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 00:57:04 +0000 Subject: [PATCH 06/14] Fix CMP0026 This now-illegal macro doesn't seem to be used anywhere --- CMakeModules/UtilityMacros.cmake | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/CMakeModules/UtilityMacros.cmake b/CMakeModules/UtilityMacros.cmake index 63baf17bf8c..544735bcccc 100644 --- a/CMakeModules/UtilityMacros.cmake +++ b/CMakeModules/UtilityMacros.cmake @@ -101,23 +101,6 @@ MACRO(TARGET_LOCATIONS_SET_FILE FILE) FILE(WRITE ${ACCUM_FILE_TARGETS} "") ENDMACRO() -#--------------------------------------------------- -# Macro: TARGET_LOCATIONS_ACCUM TARGET_NAME -# -#--------------------------------------------------- - -MACRO(TARGET_LOCATIONS_ACCUM TARGET_NAME) - IF(ACCUM_FILE_TARGETS) - IF(EXISTS ${ACCUM_FILE_TARGETS}) - GET_TARGET_PROPERTY(_FILE_LOCATION ${TARGET_NAME} LOCATION) - FILE(APPEND ${ACCUM_FILE_TARGETS} "${_FILE_LOCATION};") - #SET(_TARGETS_LIST ${_TARGETS_LIST} "${_FILE_LOCATION}" CACHE INTERNAL "lista dll") - #MESSAGE("adding target -->${TARGET_NAME}<-- file -->${_FILE_LOCATION}<-- to list -->${_TARGETS_LIST}<--") - #SET(ACCUM_FILE_TARGETS ${ACCUM_FILE_TARGETS} ${_FILE_LOCATION}) - ENDIF() - ENDIF() -ENDMACRO() - #--------------------------------------------------- # Macro: TARGET_LOCATIONS_GET_LIST _VAR # From 1a88c548059553fa4cc77f521005a17342128e30 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 01:05:39 +0000 Subject: [PATCH 07/14] Get rid of ancient version-checking macro It was only used to check OSG's minimum version anyway. --- CMakeLists.txt | 25 ++++---- CMakeModules/OsgMacroUtils.cmake | 98 ++++++++------------------------ 2 files changed, 36 insertions(+), 87 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e4969ac631b..4eb8df82d96 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -938,20 +938,17 @@ ELSE(WIN32) SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR}) ENDIF(WIN32) -# Testing CMAKE_VERSION is possible in >= 2.6.4 only -BUILDER_VERSION_GREATER(2 8 0) -IF(VALID_BUILDER_VERSION) # If CMake >= 2.8.1 - FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES}) # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses) - STRING(TOUPPER "${CONF}" CONF) # Go uppercase (DEBUG, RELEASE...) - SET("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}") - SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}") - IF(WIN32) - SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}") - ELSE() - SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}") - ENDIF() - ENDFOREACH() -ENDIF(VALID_BUILDER_VERSION) + +FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES}) # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses) + STRING(TOUPPER "${CONF}" CONF) # Go uppercase (DEBUG, RELEASE...) + SET("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}") + SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}") + IF(WIN32) + SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_BINDIR}") + ELSE() + SET("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${OUTPUT_LIBDIR}") + ENDIF() +ENDFOREACH() #SET(INSTALL_BINDIR OpenSceneGraph/bin) #SET(INSTALL_INCDIR OpenSceneGraph/include) diff --git a/CMakeModules/OsgMacroUtils.cmake b/CMakeModules/OsgMacroUtils.cmake index b650d4baed1..a06bdc54592 100644 --- a/CMakeModules/OsgMacroUtils.cmake +++ b/CMakeModules/OsgMacroUtils.cmake @@ -9,32 +9,6 @@ # the content of this library for linking when in debugging ####################################################################################################### -# VALID_BUILDER_VERSION: used for replacing CMAKE_VERSION (available in v2.6.3 RC9) and VERSION_GREATER/VERSION_LESS (available in 2.6.2 RC4). -# This can be replaced by "IF(${CMAKE_VERSION} VERSION_LESS "x.y.z")" from 2.6.4. -SET(VALID_BUILDER_VERSION OFF) -MACRO(BUILDER_VERSION_GREATER MAJOR_VER MINOR_VER PATCH_VER) - SET(VALID_BUILDER_VERSION OFF) - IF(CMAKE_MAJOR_VERSION GREATER ${MAJOR_VER}) - SET(VALID_BUILDER_VERSION ON) - ELSEIF(CMAKE_MAJOR_VERSION EQUAL ${MAJOR_VER}) - IF(CMAKE_MINOR_VERSION GREATER ${MINOR_VER}) - SET(VALID_BUILDER_VERSION ON) - ELSEIF(CMAKE_MINOR_VERSION EQUAL ${MINOR_VER}) - IF(CMAKE_PATCH_VERSION GREATER ${PATCH_VER}) - SET(VALID_BUILDER_VERSION ON) - ENDIF(CMAKE_PATCH_VERSION GREATER ${PATCH_VER}) - ENDIF() - ENDIF() -ENDMACRO(BUILDER_VERSION_GREATER MAJOR_VER MINOR_VER PATCH_VER) - - -# CMAKE_VERSION_TEST: Define whether "IF(${CMAKE_VERSION} VERSION_LESS "x.y.z")" can be used or not. -BUILDER_VERSION_GREATER(2 8 0) -SET(CMAKE_VERSION_TEST ${VALID_BUILDER_VERSION}) # >= 2.8.0 - -SET(VALID_BUILDER_VERSION OFF) - - MACRO(LINK_WITH_VARIABLES TRGTNAME) FOREACH(varname ${ARGN}) IF(${varname}_DEBUG) @@ -161,39 +135,29 @@ ENDMACRO(SETUP_LINK_LIBRARIES) # Sets the output directory property for CMake >= 2.6.0, giving an output path RELATIVE to default one MACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR) - BUILDER_VERSION_GREATER(2 8 0) - IF(NOT VALID_BUILDER_VERSION) - # If CMake <= 2.8.0 (Testing CMAKE_VERSION is possible in >= 2.6.4) - IF(MSVC_IDE) - # Using the "prefix" hack - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../${RELATIVE_OUTDIR}/") - ELSE(MSVC_IDE) - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "${RELATIVE_OUTDIR}/") - ENDIF(MSVC_IDE) - ELSE(NOT VALID_BUILDER_VERSION) - # Using the output directory properties - - # Global properties (All generators but VS & Xcode) - FILE(TO_CMAKE_PATH TMPVAR "CMAKE_ARCHIVE_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}") - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${TMPVAR}") - FILE(TO_CMAKE_PATH TMPVAR "CMAKE_RUNTIME_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}") - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TMPVAR}") - FILE(TO_CMAKE_PATH TMPVAR "CMAKE_LIBRARY_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}") - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TMPVAR}") - - # Per-configuration property (VS, Xcode) - FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES}) # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses) - STRING(TOUPPER "${CONF}" CONF) # Go uppercase (DEBUG, RELEASE...) - - # We use "FILE(TO_CMAKE_PATH", to create nice looking paths - FILE(TO_CMAKE_PATH "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR) - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}") - FILE(TO_CMAKE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR) - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}") - FILE(TO_CMAKE_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR) - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}") - ENDFOREACH(CONF ${CMAKE_CONFIGURATION_TYPES}) - ENDIF(NOT VALID_BUILDER_VERSION) + + # Using the output directory properties + + # Global properties (All generators but VS & Xcode) + FILE(TO_CMAKE_PATH TMPVAR "CMAKE_ARCHIVE_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}") + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${TMPVAR}") + FILE(TO_CMAKE_PATH TMPVAR "CMAKE_RUNTIME_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}") + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${TMPVAR}") + FILE(TO_CMAKE_PATH TMPVAR "CMAKE_LIBRARY_OUTPUT_DIRECTORY/${RELATIVE_OUTDIR}") + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${TMPVAR}") + + # Per-configuration property (VS, Xcode) + FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES}) # For each configuration (Debug, Release, MinSizeRel... and/or anything the user chooses) + STRING(TOUPPER "${CONF}" CONF) # Go uppercase (DEBUG, RELEASE...) + + # We use "FILE(TO_CMAKE_PATH", to create nice looking paths + FILE(TO_CMAKE_PATH "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR) + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}") + FILE(TO_CMAKE_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR) + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}") + FILE(TO_CMAKE_PATH "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CONF}}/${RELATIVE_OUTDIR}" TMPVAR) + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES "LIBRARY_OUTPUT_DIRECTORY_${CONF}" "${TMPVAR}") + ENDFOREACH(CONF ${CMAKE_CONFIGURATION_TYPES}) ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR) @@ -528,13 +492,7 @@ MACRO(HANDLE_MSVC_DLL) SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "") # Ensure the /Debug /Release are removed IF(NOT MSVC_IDE) IF (NOT CMAKE24) - BUILDER_VERSION_GREATER(2 8 0) - IF(NOT VALID_BUILDER_VERSION) - # If CMake < 2.8.1 - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") - ELSE(NOT VALID_BUILDER_VERSION) - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") - ENDIF(NOT VALID_BUILDER_VERSION) + SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") ELSE (NOT CMAKE24) SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") SET(NEW_LIB_NAME "${OUTPUT_BINDIR}/${LIB_PREFIX}${LIB_SOVERSION}-${LIB_NAME}") @@ -549,13 +507,7 @@ MACRO(HANDLE_MSVC_DLL) ENDIF (NOT CMAKE24) ELSE(NOT MSVC_IDE) IF (NOT CMAKE24) - BUILDER_VERSION_GREATER(2 8 0) - IF(NOT VALID_BUILDER_VERSION) - # If CMake < 2.8.1 - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") - ELSE(NOT VALID_BUILDER_VERSION) - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") - ENDIF(NOT VALID_BUILDER_VERSION) + SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") ELSE (NOT CMAKE24) SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") ENDIF (NOT CMAKE24) From 4d56486ee2126deacd5ecb6b4021cb8f759fa70f Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 01:09:30 +0000 Subject: [PATCH 08/14] Get rid of check for nonexistent variable It seems to be a hallucinated way to check the current CMake version - it's not mentioned even in old versions of the docs - but LLMs wouldn't be invented for well over a decade. --- CMakeModules/OsgMacroUtils.cmake | 67 ++------------------------------ 1 file changed, 4 insertions(+), 63 deletions(-) diff --git a/CMakeModules/OsgMacroUtils.cmake b/CMakeModules/OsgMacroUtils.cmake index a06bdc54592..ce7c4703f3b 100644 --- a/CMakeModules/OsgMacroUtils.cmake +++ b/CMakeModules/OsgMacroUtils.cmake @@ -24,22 +24,7 @@ MACRO(LINK_WITH_VARIABLES TRGTNAME) ENDMACRO(LINK_WITH_VARIABLES TRGTNAME) MACRO(LINK_INTERNAL TRGTNAME) - IF(NOT CMAKE24) - TARGET_LINK_LIBRARIES(${TRGTNAME} ${ARGN}) - ELSE(NOT CMAKE24) - FOREACH(LINKLIB ${ARGN}) - IF(MSVC AND OSG_MSVC_VERSIONED_DLL) - #when using versioned names, the .dll name differ from .lib name, there is a problem with that: - #CMake 2.4.7, at least seem to use PREFIX instead of IMPORT_PREFIX for computing linkage info to use into projects, - # so we full path name to specify linkage, this prevent automatic inferencing of dependencies, so we add explicit depemdencies - #to library targets used - TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${OUTPUT_LIBDIR}/${LINKLIB}${CMAKE_RELEASE_POSTFIX}.lib" debug "${OUTPUT_LIBDIR}/${LINKLIB}${CMAKE_DEBUG_POSTFIX}.lib") - ADD_DEPENDENCIES(${TRGTNAME} ${LINKLIB}) - ELSE(MSVC AND OSG_MSVC_VERSIONED_DLL) - TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${LINKLIB}${CMAKE_RELEASE_POSTFIX}" debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") - ENDIF(MSVC AND OSG_MSVC_VERSIONED_DLL) - ENDFOREACH(LINKLIB) - ENDIF(NOT CMAKE24) + TARGET_LINK_LIBRARIES(${TRGTNAME} ${ARGN}) ENDMACRO(LINK_INTERNAL TRGTNAME) MACRO(LINK_EXTERNAL TRGTNAME) @@ -266,34 +251,7 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME) ENDIF(DYNAMIC_OPENSCENEGRAPH) IF(MSVC) - IF(NOT CMAKE24) - SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS}") # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed - ELSE(NOT CMAKE24) - - IF(OSG_MSVC_VERSIONED_DLL) - - #this is a hack... the build place is set to lib/ by LIBARARY_OUTPUT_PATH equal to OUTPUT_LIBDIR - #the .lib will be crated in ../ so going straight in lib by the IMPORT_PREFIX property - #because we want dll placed in OUTPUT_BINDIR ie the bin folder sibling of lib, we can use ../../bin to go there, - #it is hardcoded, we should compute OUTPUT_BINDIR position relative to OUTPUT_LIBDIR ... to be implemented - #changing bin to something else breaks this hack - #the dll are placed in bin/${OSG_PLUGINS} - - IF(NOT MSVC_IDE) - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../bin/${OSG_PLUGINS}/") - ELSE(NOT MSVC_IDE) - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../../bin/${OSG_PLUGINS}/" IMPORT_PREFIX "../") - ENDIF(NOT MSVC_IDE) - - ELSE(OSG_MSVC_VERSIONED_DLL) - - #in standard mode (unversioned) the .lib and .dll are placed in lib//${OSG_PLUGINS}. - #here the PREFIX property has been used, the same result would be accomplidhe by prepending ${OSG_PLUGINS}/ to OUTPUT_NAME target property - - SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "${OSG_PLUGINS}/") - ENDIF(OSG_MSVC_VERSIONED_DLL) - - ENDIF(NOT CMAKE24) + SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS}") # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed ENDIF(MSVC) SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}") @@ -491,26 +449,9 @@ MACRO(HANDLE_MSVC_DLL) SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "") # Ensure the /Debug /Release are removed IF(NOT MSVC_IDE) - IF (NOT CMAKE24) - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") - ELSE (NOT CMAKE24) - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") - SET(NEW_LIB_NAME "${OUTPUT_BINDIR}/${LIB_PREFIX}${LIB_SOVERSION}-${LIB_NAME}") - ADD_CUSTOM_COMMAND( - TARGET ${LIB_NAME} - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy "${NEW_LIB_NAME}.lib" "${OUTPUT_LIBDIR}/${LIB_NAME}.lib" - COMMAND ${CMAKE_COMMAND} -E copy "${NEW_LIB_NAME}.exp" "${OUTPUT_LIBDIR}/${LIB_NAME}.exp" - COMMAND ${CMAKE_COMMAND} -E remove "${NEW_LIB_NAME}.lib" - COMMAND ${CMAKE_COMMAND} -E remove "${NEW_LIB_NAME}.exp" - ) - ENDIF (NOT CMAKE24) + SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") ELSE(NOT MSVC_IDE) - IF (NOT CMAKE24) - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") - ELSE (NOT CMAKE24) - SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") - ENDIF (NOT CMAKE24) + SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "${LIB_PREFIX}${LIB_SOVERSION}-") ENDIF(NOT MSVC_IDE) # SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/osg${OPENSCENEGRAPH_SOVERSION}-") From 5ef44714fc06b9e5c5713caa4d701db449593056 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 01:22:54 +0000 Subject: [PATCH 09/14] Fix CMP0037 Spaces are illegal in target names (although legal in labels - it's not worth setting that up here, though) --- CMakeModules/OsgCPack.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeModules/OsgCPack.cmake b/CMakeModules/OsgCPack.cmake index 8fcb37680eb..97f76a346a6 100644 --- a/CMakeModules/OsgCPack.cmake +++ b/CMakeModules/OsgCPack.cmake @@ -60,7 +60,7 @@ SET(CPACK_SOURCE_GENERATOR "TGZ") # for ms visual studio we use it's internally defined variable to get the configuration (debug,release, ...) IF(MSVC_IDE) SET(OSG_CPACK_CONFIGURATION "$(OutDir)") - SET(PACKAGE_TARGET_PREFIX "Package ") + SET(PACKAGE_TARGET_PREFIX "Package_") ELSE() # on un*x an empty CMAKE_BUILD_TYPE means release IF(CMAKE_BUILD_TYPE) From cd27a53c69baf0780604f338a3eb44f85f03bcb2 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 01:32:57 +0000 Subject: [PATCH 10/14] Require CMake 3.0 All policies up to CMP0050 have been verified compatible (after far more tweaking than I'd have liked) --- CMakeLists.txt | 20 +++---------------- .../Android/android.toolchain.cmake | 18 ++++++----------- examples/osgCMakeExample/CMakeLists.txt | 2 +- examples/osgemscripten/CMakeLists.txt | 2 +- 4 files changed, 11 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4eb8df82d96..2ab85b6570b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR) if(COMMAND cmake_policy) # INTERPROCEDURAL_OPTIMIZATION is enforced when enabled. @@ -888,22 +888,8 @@ IF(DEFINED LIB_POSTFIX) # Use LIB_POSTFIX if defined SET(OSG_INSTALL_LIBDIR lib${LIB_POSTFIX}) ELSE() - IF(CMAKE_VERSION VERSION_LESS "2.8.5") - 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() - ENDIF() - IF(NOT DEFINED LIB_POSTFIX) - SET(LIB_POSTFIX "") - ENDIF() - SET(OSG_INSTALL_LIBDIR lib${LIB_POSTFIX}) - ELSE() - # Use the GNU standard installation directories for CMake >= 2.8.5 - INCLUDE(GNUInstallDirs) - SET(OSG_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) - ENDIF() + INCLUDE(GNUInstallDirs) + SET(OSG_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) ENDIF() IF(NOT DEFINED LIB_POSTFIX) SET(LIB_POSTFIX "") diff --git a/PlatformSpecifics/Android/android.toolchain.cmake b/PlatformSpecifics/Android/android.toolchain.cmake index fc349162fb8..04e0510cd28 100644 --- a/PlatformSpecifics/Android/android.toolchain.cmake +++ b/PlatformSpecifics/Android/android.toolchain.cmake @@ -210,7 +210,7 @@ # Modified by Lasse Oorni and Yao Wei Tjong for Urho3D -cmake_minimum_required( VERSION 2.6.3 ) +cmake_minimum_required( VERSION 3.0 ) # Urho3D: on Windows Cygwin-based NDK tools may fail in the linking phase with too long command line. Turn on response files to avoid this if( CMAKE_HOST_WIN32 ) @@ -854,20 +854,16 @@ else() unset( __realApiLevel ) endif() set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE ) - if( CMAKE_VERSION VERSION_GREATER "2.8" ) - list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS ) - set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) - endif() + list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS ) + set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) endif() unset( __levelIdx ) # remember target ABI set( ANDROID_ABI "${ANDROID_ABI}" CACHE STRING "The target ABI for Android. If arm, then armeabi-v7a is recommended for hardware floating point." FORCE ) -if( CMAKE_VERSION VERSION_GREATER "2.8" ) - list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME} ) - set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME}} ) -endif() +list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME} ) +set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME}} ) # runtime choice (STL, rtti, exceptions) @@ -1162,9 +1158,7 @@ if( NOT CMAKE_C_COMPILER ) endif() set( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" ) -if( CMAKE_VERSION VERSION_LESS 2.8.5 ) - set( CMAKE_ASM_COMPILER_ARG1 "-c" ) -endif() +set( CMAKE_ASM_COMPILER_ARG1 "-c" ) if( APPLE ) find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) if( NOT CMAKE_INSTALL_NAME_TOOL ) diff --git a/examples/osgCMakeExample/CMakeLists.txt b/examples/osgCMakeExample/CMakeLists.txt index be30626e39b..e16acc9a336 100644 --- a/examples/osgCMakeExample/CMakeLists.txt +++ b/examples/osgCMakeExample/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.0) SET(PROJECT_NAME osgCMakeExample) diff --git a/examples/osgemscripten/CMakeLists.txt b/examples/osgemscripten/CMakeLists.txt index b2bc9875a5a..81dfe0bc2c8 100644 --- a/examples/osgemscripten/CMakeLists.txt +++ b/examples/osgemscripten/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR) # Path to OpenSceneGraph SET(OSG_DIR "${CMAKE_SOURCE_DIR}/../..") From 90fe0c5c65f6987cb88a6335a15b39fcb2cbe28a Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Sun, 18 Jan 2026 02:22:54 +0000 Subject: [PATCH 11/14] Require CMake 3.2 I've verified all the policies up to CMP0056 --- CMakeLists.txt | 2 +- PlatformSpecifics/Android/android.toolchain.cmake | 8 ++------ examples/osgCMakeExample/CMakeLists.txt | 2 +- examples/osgemscripten/CMakeLists.txt | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ab85b6570b..7ccc60d12c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) if(COMMAND cmake_policy) # INTERPROCEDURAL_OPTIMIZATION is enforced when enabled. diff --git a/PlatformSpecifics/Android/android.toolchain.cmake b/PlatformSpecifics/Android/android.toolchain.cmake index 04e0510cd28..4c01809086e 100644 --- a/PlatformSpecifics/Android/android.toolchain.cmake +++ b/PlatformSpecifics/Android/android.toolchain.cmake @@ -210,7 +210,7 @@ # Modified by Lasse Oorni and Yao Wei Tjong for Urho3D -cmake_minimum_required( VERSION 3.0 ) +cmake_minimum_required( VERSION 3.2 ) # Urho3D: on Windows Cygwin-based NDK tools may fail in the linking phase with too long command line. Turn on response files to avoid this if( CMAKE_HOST_WIN32 ) @@ -234,11 +234,7 @@ if( _CMAKE_IN_TRY_COMPILE ) endif() # this one is important -if( CMAKE_VERSION VERSION_GREATER "3.0.99" ) - set( CMAKE_SYSTEM_NAME Android ) -else() - set( CMAKE_SYSTEM_NAME Linux ) -endif() +set( CMAKE_SYSTEM_NAME Android ) # this one not so much set( CMAKE_SYSTEM_VERSION 1 ) diff --git a/examples/osgCMakeExample/CMakeLists.txt b/examples/osgCMakeExample/CMakeLists.txt index e16acc9a336..a917cf17dd2 100644 --- a/examples/osgCMakeExample/CMakeLists.txt +++ b/examples/osgCMakeExample/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.2) SET(PROJECT_NAME osgCMakeExample) diff --git a/examples/osgemscripten/CMakeLists.txt b/examples/osgemscripten/CMakeLists.txt index 81dfe0bc2c8..b0b1a39b377 100644 --- a/examples/osgemscripten/CMakeLists.txt +++ b/examples/osgemscripten/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.0 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) # Path to OpenSceneGraph SET(OSG_DIR "${CMAKE_SOURCE_DIR}/../..") From 4d04feabd6492a7866d05cda80ef229542b3da4f Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Mon, 19 Jan 2026 00:46:07 +0000 Subject: [PATCH 12/14] Remove line that was missed I didn't notice that the condition was inverted so this code had become unreachable rather than unavoidable. --- PlatformSpecifics/Android/android.toolchain.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PlatformSpecifics/Android/android.toolchain.cmake b/PlatformSpecifics/Android/android.toolchain.cmake index 4c01809086e..1e36810fdfc 100644 --- a/PlatformSpecifics/Android/android.toolchain.cmake +++ b/PlatformSpecifics/Android/android.toolchain.cmake @@ -1154,7 +1154,7 @@ if( NOT CMAKE_C_COMPILER ) endif() set( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" ) -set( CMAKE_ASM_COMPILER_ARG1 "-c" ) + if( APPLE ) find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) if( NOT CMAKE_INSTALL_NAME_TOOL ) From d47cd6ace50387b0eb0432868b9c59e3a9c61c62 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Mon, 19 Jan 2026 01:30:43 +0000 Subject: [PATCH 13/14] Fix CMP0065 This one definitely broke OpenMW when we bumped our minimum CMake version past 3.5, but that meant that we already knew about it and already knew how to fix it and which platforms were affected. --- CMakeModules/OsgMacroUtils.cmake | 8 ++++++++ examples/osgCMakeExample/CMakeLists.txt | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/CMakeModules/OsgMacroUtils.cmake b/CMakeModules/OsgMacroUtils.cmake index ce7c4703f3b..e9f1d0c3dd9 100644 --- a/CMakeModules/OsgMacroUtils.cmake +++ b/CMakeModules/OsgMacroUtils.cmake @@ -355,6 +355,14 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP) ENDIF() ENDIF() + IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND DYNAMIC_OPENSCENEGRAPH) + # templated types used in OSG plugins and applications need to get the same type ID + # based on investigation for https://gitlab.com/OpenMW/openmw/-/issues/8039 by the OpenMW team, this is believed to only be necessary for Clang on Linux + # i.e. not for GCC anywhere, MSVC on Windows or for AppleClang on MacOS + # it's possible that this is really required by the C++ spec for all platforms and we're just getting away with it everywhere else + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES ENABLE_EXPORTS ON) + ENDIF() + SETUP_LINK_LIBRARIES() ENDMACRO(SETUP_EXE) diff --git a/examples/osgCMakeExample/CMakeLists.txt b/examples/osgCMakeExample/CMakeLists.txt index a917cf17dd2..bda38b3ce9a 100644 --- a/examples/osgCMakeExample/CMakeLists.txt +++ b/examples/osgCMakeExample/CMakeLists.txt @@ -22,3 +22,11 @@ LINK_DIRECTORIES(${OSG_LIB_DIR}) ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCES}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OSG_LIBRARIES} ${OSGVIEWER_LIBRARIES} ${OSGUTIL_LIBRARIES} ${OSGDB_LIBRARIES} ${OSGGA_LIBRARIES} ${OPENTHREADS_LIBRARIES}) + +IF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + # templated types used in OSG plugins and applications need to get the same type ID + # based on investigation for https://gitlab.com/OpenMW/openmw/-/issues/8039 by the OpenMW team, this is believed to only be necessary for Clang on Linux + # i.e. not for GCC anywhere, MSVC on Windows or for AppleClang on MacOS + # it's possible that this is really required by the C++ spec for all platforms and we're just getting away with it everywhere else + SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES ENABLE_EXPORTS ON) +ENDIF() From d5fe0927b01abbe47fa680bb3db34db33b934431 Mon Sep 17 00:00:00 2001 From: AnyOldName3 Date: Mon, 19 Jan 2026 01:32:39 +0000 Subject: [PATCH 14/14] Require CMake 3.5 --- CMakeLists.txt | 2 +- PlatformSpecifics/Android/android.toolchain.cmake | 2 +- examples/osgCMakeExample/CMakeLists.txt | 2 +- examples/osgemscripten/CMakeLists.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ccc60d12c8..4abbc86d3aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR) if(COMMAND cmake_policy) # INTERPROCEDURAL_OPTIMIZATION is enforced when enabled. diff --git a/PlatformSpecifics/Android/android.toolchain.cmake b/PlatformSpecifics/Android/android.toolchain.cmake index 1e36810fdfc..2289010d117 100644 --- a/PlatformSpecifics/Android/android.toolchain.cmake +++ b/PlatformSpecifics/Android/android.toolchain.cmake @@ -210,7 +210,7 @@ # Modified by Lasse Oorni and Yao Wei Tjong for Urho3D -cmake_minimum_required( VERSION 3.2 ) +cmake_minimum_required( VERSION 3.5 ) # Urho3D: on Windows Cygwin-based NDK tools may fail in the linking phase with too long command line. Turn on response files to avoid this if( CMAKE_HOST_WIN32 ) diff --git a/examples/osgCMakeExample/CMakeLists.txt b/examples/osgCMakeExample/CMakeLists.txt index bda38b3ce9a..605f12329f2 100644 --- a/examples/osgCMakeExample/CMakeLists.txt +++ b/examples/osgCMakeExample/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.5) SET(PROJECT_NAME osgCMakeExample) diff --git a/examples/osgemscripten/CMakeLists.txt b/examples/osgemscripten/CMakeLists.txt index b0b1a39b377..10c4daf687e 100644 --- a/examples/osgemscripten/CMakeLists.txt +++ b/examples/osgemscripten/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.2 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.5 FATAL_ERROR) # Path to OpenSceneGraph SET(OSG_DIR "${CMAKE_SOURCE_DIR}/../..")