From 83a619c5b7bc811864aa3996e4744f32e08bec09 Mon Sep 17 00:00:00 2001 From: Taylor Howell Date: Mon, 15 Sep 2025 11:40:08 +0100 Subject: [PATCH 1/6] patch for cmake_minimum_required version --- CMakeLists.txt | 3 ++- cmake/MujocoDependencies.cmake | 6 ++++++ cmake/UpdateCMakeMinimumRequired.cmake | 10 ++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 cmake/UpdateCMakeMinimumRequired.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d7f79d04..4eb13b43 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -cmake_minimum_required(VERSION 3.16) +set(MUJOCO_CMAKE_MIN_REQ "3.16") +cmake_minimum_required(VERSION ${MUJOCO_CMAKE_MIN_REQ}) # Make CMAKE_C_VISIBILITY_PRESET work properly. set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index 81fde269..44aad6ed 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -78,6 +78,8 @@ mark_as_advanced(MUJOCO_DEP_VERSION_TriangleMeshDistance) include(FetchContent) include(FindOrFetch) +set(PATCH_SCRIPT ${PROJECT_SOURCE_DIR}/cmake/UpdateCMakeMinimumRequired.cmake) + # Override the BUILD_SHARED_LIBS setting, just for building third party libs (since we always want # static libraries). The ccd CMakeLists.txt doesn't expose an option to build a static ccd library, # unless BUILD_SHARED_LIBS is set. @@ -179,6 +181,8 @@ findorfetch( https://github.com/tinyobjloader/tinyobjloader.git GIT_TAG ${MUJOCO_DEP_VERSION_tinyobjloader} + PATCH_COMMAND + ${CMAKE_COMMAND} -DDESIRED_VERSION=${MUJOCO_CMAKE_MIN_REQ} -DTARGET_FILE=/CMakeLists.txt -P ${PATCH_SCRIPT} TARGETS tinyobjloader EXCLUDE_FROM_ALL @@ -211,6 +215,8 @@ findorfetch( https://github.com/danfis/libccd.git GIT_TAG ${MUJOCO_DEP_VERSION_ccd} + PATCH_COMMAND + ${CMAKE_COMMAND} -DDESIRED_VERSION=${MUJOCO_CMAKE_MIN_REQ} -DTARGET_FILE=/CMakeLists.txt -P ${PATCH_SCRIPT} TARGETS ccd EXCLUDE_FROM_ALL diff --git a/cmake/UpdateCMakeMinimumRequired.cmake b/cmake/UpdateCMakeMinimumRequired.cmake new file mode 100644 index 00000000..e126b611 --- /dev/null +++ b/cmake/UpdateCMakeMinimumRequired.cmake @@ -0,0 +1,10 @@ +file(READ "${TARGET_FILE}" FILE_CONTENTS) + +string(REGEX REPLACE + "cmake_minimum_required\\(VERSION [0-9\\.]+\\)" + "cmake_minimum_required(VERSION ${DESIRED_VERSION})" + NEW_CONTENTS + "${FILE_CONTENTS}" +) + +file(WRITE "${TARGET_FILE}" "${NEW_CONTENTS}") From 1b7e508f17b0cd7f6dbeb42c909364e25727aac5 Mon Sep 17 00:00:00 2001 From: Taylor Howell Date: Mon, 15 Sep 2025 12:16:15 +0100 Subject: [PATCH 2/6] add copyright header --- cmake/UpdateCMakeMinimumRequired.cmake | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/cmake/UpdateCMakeMinimumRequired.cmake b/cmake/UpdateCMakeMinimumRequired.cmake index e126b611..0bd49ad5 100644 --- a/cmake/UpdateCMakeMinimumRequired.cmake +++ b/cmake/UpdateCMakeMinimumRequired.cmake @@ -1,3 +1,17 @@ +# Copyright 2025 DeepMind Technologies Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + file(READ "${TARGET_FILE}" FILE_CONTENTS) string(REGEX REPLACE From c79b2d064b0321924c054b910867464bcb14b51e Mon Sep 17 00:00:00 2001 From: Taylor Howell Date: Mon, 15 Sep 2025 12:17:41 +0100 Subject: [PATCH 3/6] add description of file utility --- cmake/UpdateCMakeMinimumRequired.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/UpdateCMakeMinimumRequired.cmake b/cmake/UpdateCMakeMinimumRequired.cmake index 0bd49ad5..5d8d6599 100644 --- a/cmake/UpdateCMakeMinimumRequired.cmake +++ b/cmake/UpdateCMakeMinimumRequired.cmake @@ -12,6 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. +# Replace cmake_minimum_required version. + file(READ "${TARGET_FILE}" FILE_CONTENTS) string(REGEX REPLACE From 0ddb840395ff337ed4e8b09ac88fd33ff8c7d50c Mon Sep 17 00:00:00 2001 From: Taylor Howell Date: Mon, 15 Sep 2025 12:28:38 +0100 Subject: [PATCH 4/6] add comments explaining patches --- cmake/MujocoDependencies.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index 44aad6ed..d9456bf3 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -181,6 +181,7 @@ findorfetch( https://github.com/tinyobjloader/tinyobjloader.git GIT_TAG ${MUJOCO_DEP_VERSION_tinyobjloader} + # update cmake_minimum_required version for compatibility with newer version of cmake PATCH_COMMAND ${CMAKE_COMMAND} -DDESIRED_VERSION=${MUJOCO_CMAKE_MIN_REQ} -DTARGET_FILE=/CMakeLists.txt -P ${PATCH_SCRIPT} TARGETS @@ -215,6 +216,7 @@ findorfetch( https://github.com/danfis/libccd.git GIT_TAG ${MUJOCO_DEP_VERSION_ccd} + # update cmake_minimum_required version for compatibility with newer version of cmake PATCH_COMMAND ${CMAKE_COMMAND} -DDESIRED_VERSION=${MUJOCO_CMAKE_MIN_REQ} -DTARGET_FILE=/CMakeLists.txt -P ${PATCH_SCRIPT} TARGETS From ea856a4c318d83eb579ac147a1e91eef738295ce Mon Sep 17 00:00:00 2001 From: Silvio Traversaro Date: Mon, 15 Sep 2025 13:44:10 +0200 Subject: [PATCH 5/6] Refactor cmake_minimum_required handling in dependencies Removed PATCH_COMMAND for cmake_minimum_required updates and added checks for CMAKE_POLICY_VERSION_MINIMUM. --- cmake/MujocoDependencies.cmake | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index d9456bf3..c242b5a6 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -78,8 +78,6 @@ mark_as_advanced(MUJOCO_DEP_VERSION_TriangleMeshDistance) include(FetchContent) include(FindOrFetch) -set(PATCH_SCRIPT ${PROJECT_SOURCE_DIR}/cmake/UpdateCMakeMinimumRequired.cmake) - # Override the BUILD_SHARED_LIBS setting, just for building third party libs (since we always want # static libraries). The ccd CMakeLists.txt doesn't expose an option to build a static ccd library, # unless BUILD_SHARED_LIBS is set. @@ -170,6 +168,11 @@ findorfetch( target_compile_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS}) target_link_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS}) +# update cmake_minimum_required version for compatibility with newer version of cmake +if(NOT DEFINED CMAKE_POLICY_VERSION_MINIMUM) + set(CMAKE_POLICY_VERSION_MINIMUM ${MUJOCO_CMAKE_MIN_REQ}) + set(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED ON) +endif() findorfetch( USE_SYSTEM_PACKAGE OFF @@ -181,13 +184,14 @@ findorfetch( https://github.com/tinyobjloader/tinyobjloader.git GIT_TAG ${MUJOCO_DEP_VERSION_tinyobjloader} - # update cmake_minimum_required version for compatibility with newer version of cmake - PATCH_COMMAND - ${CMAKE_COMMAND} -DDESIRED_VERSION=${MUJOCO_CMAKE_MIN_REQ} -DTARGET_FILE=/CMakeLists.txt -P ${PATCH_SCRIPT} TARGETS tinyobjloader EXCLUDE_FROM_ALL ) +if(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED) + unset(CMAKE_POLICY_VERSION_MINIMUM) + unset(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED) +endif() if(NOT TARGET trianglemeshdistance) FetchContent_Declare( @@ -205,6 +209,11 @@ endif() set(ENABLE_DOUBLE_PRECISION ON) set(CCD_HIDE_ALL_SYMBOLS ON) +# update cmake_minimum_required version for compatibility with newer version of cmake +if(NOT DEFINED CMAKE_POLICY_VERSION_MINIMUM) + set(CMAKE_POLICY_VERSION_MINIMUM ${MUJOCO_CMAKE_MIN_REQ}) + set(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED ON) +endif() findorfetch( USE_SYSTEM_PACKAGE OFF @@ -216,13 +225,14 @@ findorfetch( https://github.com/danfis/libccd.git GIT_TAG ${MUJOCO_DEP_VERSION_ccd} - # update cmake_minimum_required version for compatibility with newer version of cmake - PATCH_COMMAND - ${CMAKE_COMMAND} -DDESIRED_VERSION=${MUJOCO_CMAKE_MIN_REQ} -DTARGET_FILE=/CMakeLists.txt -P ${PATCH_SCRIPT} TARGETS ccd EXCLUDE_FROM_ALL ) +if(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED) + unset(CMAKE_POLICY_VERSION_MINIMUM) + unset(CMAKE_POLICY_VERSION_MINIMUM_LOCALLY_DEFINED) +endif() target_compile_options(ccd PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS}) target_link_options(ccd PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS}) From 155d6c686a87fdc56b1a21a9b106444dbdfa6073 Mon Sep 17 00:00:00 2001 From: Taylor Howell Date: Mon, 15 Sep 2025 13:30:56 +0100 Subject: [PATCH 6/6] remove UpdateCMakeMinimumRequired.cmake --- cmake/UpdateCMakeMinimumRequired.cmake | 26 -------------------------- 1 file changed, 26 deletions(-) delete mode 100644 cmake/UpdateCMakeMinimumRequired.cmake diff --git a/cmake/UpdateCMakeMinimumRequired.cmake b/cmake/UpdateCMakeMinimumRequired.cmake deleted file mode 100644 index 5d8d6599..00000000 --- a/cmake/UpdateCMakeMinimumRequired.cmake +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2025 DeepMind Technologies Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Replace cmake_minimum_required version. - -file(READ "${TARGET_FILE}" FILE_CONTENTS) - -string(REGEX REPLACE - "cmake_minimum_required\\(VERSION [0-9\\.]+\\)" - "cmake_minimum_required(VERSION ${DESIRED_VERSION})" - NEW_CONTENTS - "${FILE_CONTENTS}" -) - -file(WRITE "${TARGET_FILE}" "${NEW_CONTENTS}")