diff --git a/.ci_support/linux_64_python3.10.____cpython.yaml b/.ci_support/linux_64_python3.10.____cpython.yaml index f9cdbc9..070b4fe 100644 --- a/.ci_support/linux_64_python3.10.____cpython.yaml +++ b/.ci_support/linux_64_python3.10.____cpython.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_64_python3.11.____cpython.yaml b/.ci_support/linux_64_python3.11.____cpython.yaml index 0627274..18c47ac 100644 --- a/.ci_support/linux_64_python3.11.____cpython.yaml +++ b/.ci_support/linux_64_python3.11.____cpython.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_64_python3.12.____cpython.yaml b/.ci_support/linux_64_python3.12.____cpython.yaml index 61ff684..61e3283 100644 --- a/.ci_support/linux_64_python3.12.____cpython.yaml +++ b/.ci_support/linux_64_python3.12.____cpython.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_64_python3.13.____cp313.yaml b/.ci_support/linux_64_python3.13.____cp313.yaml index 7bfd314..0e53876 100644 --- a/.ci_support/linux_64_python3.13.____cp313.yaml +++ b/.ci_support/linux_64_python3.13.____cp313.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_64_python3.14.____cp314.yaml b/.ci_support/linux_64_python3.14.____cp314.yaml index 952daf9..0bb3775 100644 --- a/.ci_support/linux_64_python3.14.____cp314.yaml +++ b/.ci_support/linux_64_python3.14.____cp314.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_aarch64_python3.10.____cpython.yaml b/.ci_support/linux_aarch64_python3.10.____cpython.yaml index 36682e9..c2dc4c7 100644 --- a/.ci_support/linux_aarch64_python3.10.____cpython.yaml +++ b/.ci_support/linux_aarch64_python3.10.____cpython.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_aarch64_python3.11.____cpython.yaml b/.ci_support/linux_aarch64_python3.11.____cpython.yaml index c3dd024..d226409 100644 --- a/.ci_support/linux_aarch64_python3.11.____cpython.yaml +++ b/.ci_support/linux_aarch64_python3.11.____cpython.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_aarch64_python3.12.____cpython.yaml b/.ci_support/linux_aarch64_python3.12.____cpython.yaml index 788388e..c553634 100644 --- a/.ci_support/linux_aarch64_python3.12.____cpython.yaml +++ b/.ci_support/linux_aarch64_python3.12.____cpython.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_aarch64_python3.13.____cp313.yaml b/.ci_support/linux_aarch64_python3.13.____cp313.yaml index c97e97e..2e624ad 100644 --- a/.ci_support/linux_aarch64_python3.13.____cp313.yaml +++ b/.ci_support/linux_aarch64_python3.13.____cp313.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.ci_support/linux_aarch64_python3.14.____cp314.yaml b/.ci_support/linux_aarch64_python3.14.____cp314.yaml index e3265de..75f25b0 100644 --- a/.ci_support/linux_aarch64_python3.14.____cp314.yaml +++ b/.ci_support/linux_aarch64_python3.14.____cp314.yaml @@ -15,7 +15,7 @@ cxx_compiler: cxx_compiler_version: - '14' docker_image: -- quay.io/condaforge/linux-anvil-x86_64:alma9 +- quay.io/condaforge/linux-anvil-x86_64:alma10 pin_run_as_build: python: min_pin: x.x diff --git a/.github/workflows/conda-build.yml b/.github/workflows/conda-build.yml index 957c888..03b6e7e 100644 --- a/.github/workflows/conda-build.yml +++ b/.github/workflows/conda-build.yml @@ -23,7 +23,7 @@ jobs: matrix: include: - CONFIG: linux_64_python3.10.____cpython - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -35,7 +35,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_64_python3.11.____cpython - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -47,7 +47,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_64_python3.12.____cpython - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -59,7 +59,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_64_python3.13.____cp313 - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -71,7 +71,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_64_python3.14.____cp314 - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -83,7 +83,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_aarch64_python3.10.____cpython - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -95,7 +95,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_aarch64_python3.11.____cpython - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -107,7 +107,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_aarch64_python3.12.____cpython - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -119,7 +119,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_aarch64_python3.13.____cp313 - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts @@ -131,7 +131,7 @@ jobs: runs_on: ['ubuntu-latest'] tools_install_dir: ~/miniforge3 - CONFIG: linux_aarch64_python3.14.____cp314 - DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma9 + DOCKER_IMAGE: quay.io/condaforge/linux-anvil-x86_64:alma10 STORE_BUILD_ARTIFACTS: False UPLOAD_PACKAGES: True build_workspace_dir: build_artifacts diff --git a/recipe/3759.patch b/recipe/3759.patch deleted file mode 100644 index 2db26ae..0000000 --- a/recipe/3759.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 8fabd1e8cc3e0161ff4935fcb4b1e7b6ae659e14 Mon Sep 17 00:00:00 2001 -From: Silvio Traversaro -Date: Tue, 29 Jul 2025 15:52:02 +0200 -Subject: [PATCH] pxrConfig.cmake.in : Do not pin exact Python patch version - ---- - pxr/pxrConfig.cmake.in | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/pxr/pxrConfig.cmake.in b/pxr/pxrConfig.cmake.in -index ae8d02c5c0..951ce5f7a2 100644 ---- a/pxr/pxrConfig.cmake.in -+++ b/pxr/pxrConfig.cmake.in -@@ -43,7 +43,7 @@ if(@PXR_ENABLE_PYTHON_SUPPORT@) - endif() - - if (NOT DEFINED Python3_VERSION) -- find_dependency(Python3 "@Python3_VERSION@" EXACT COMPONENTS Development) -+ find_dependency(Python3 "@Python3_VERSION_MAJOR@.@Python3_VERSION_MINOR@" EXACT COMPONENTS Development) - else() - find_dependency(Python3 COMPONENTS Development) - endif() diff --git a/recipe/build.bat b/recipe/build.bat index 3ffa9c6..70ade39 100644 --- a/recipe/build.bat +++ b/recipe/build.bat @@ -1,6 +1,9 @@ mkdir build cd build +:: PXR_PYTHON_INSTALL_DIR pins the Python bindings to lib/python (the location +:: used before OpenUSD 26.08). As of 26.08 it defaults to a Lib\site-packages +:: layout, which would break the "move lib\python\pxr" step below. cmake %CMAKE_ARGS% ^ -G "Ninja" ^ -DCMAKE_INSTALL_PREFIX=%LIBRARY_PREFIX% ^ @@ -13,6 +16,7 @@ cmake %CMAKE_ARGS% ^ -DPXR_ENABLE_PYTHON_SUPPORT=ON ^ -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY:BOOL=ON ^ -DPXR_PYTHON_SHEBANG="/usr/bin/env python" ^ + -DPXR_PYTHON_INSTALL_DIR=lib/python ^ -DPython3_EXECUTABLE=%PYTHON% ^ -DPython_EXECUTABLE=%PYTHON% ^ -DPXR_INSTALL_DLL_IN_BIN:BOOL=ON ^ @@ -36,7 +40,9 @@ if errorlevel 1 exit 1 :: resulting in a package (for example for a given Python version) silently not being uploaded :: testExecGeomXformable_Perf_Large is disabled as it is disabled upstream, see :: https://github.com/PixarAnimationStudios/OpenUSD/blob/v25.11/.github/workflows/buildusd.yml#L83 -ctest --output-on-failure -C Release -E "testWorkThreadLimits|testUsdResolverExample|TfPathUtils|testWorkDispatcher|testUsdUtilsFlattenLayerStack|testExecGeomXformable_Perf_Large" +:: --no-tests=ignore keeps ctest from erroring when no tests are registered +:: (recent ctest defaults that action to "error"). +ctest --output-on-failure --no-tests=ignore -C Release -E "testWorkThreadLimits|testUsdResolverExample|TfPathUtils|testWorkDispatcher|testUsdUtilsFlattenLayerStack|testExecGeomXformable_Perf_Large" if errorlevel 1 exit 1 :: The CMake install logic of openusd is not flexible, so let's fix the files diff --git a/recipe/build.sh b/recipe/build.sh index 6ca5115..1b2c612 100644 --- a/recipe/build.sh +++ b/recipe/build.sh @@ -32,6 +32,10 @@ if [[ "${build_platform}" != "${target_platform}" ]]; then CMAKE_ARGS="${CMAKE_ARGS} -DPYSIDEUICBINARY=$BUILD_PREFIX/lib/qt6/uic" fi +# PXR_PYTHON_INSTALL_DIR pins the Python bindings to lib/python (the hard-coded +# location used before OpenUSD 26.08). As of 26.08 it defaults to a +# lib/pythonX.Y/site-packages layout, which would break the "mv lib/python/pxr" +# step below. cmake ${CMAKE_ARGS} -GNinja .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TESTING:BOOL=ON \ @@ -40,7 +44,8 @@ cmake ${CMAKE_ARGS} -GNinja .. \ -DPXR_BUILD_USD_IMAGING:BOOL=ON \ -DPXR_ENABLE_PYTHON_SUPPORT:BOOL=ON \ -DCMAKE_EXPORT_NO_PACKAGE_REGISTRY:BOOL=ON \ - -DPXR_PYTHON_SHEBANG="/usr/bin/env python" + -DPXR_PYTHON_SHEBANG="/usr/bin/env python" \ + -DPXR_PYTHON_INSTALL_DIR=lib/python cmake --build . --config Release cmake --build . --config Release --target install @@ -49,8 +54,12 @@ cmake --build . --config Release --target install # testJsIO is disabled as it now actually links usd_tf, and so the linker remove the link to Python # testExecGeomXformable_Perf_Large is disabled as it is disabled upstream, see # https://github.com/PixarAnimationStudios/OpenUSD/blob/v25.11/.github/workflows/buildusd.yml#L83 +# --no-tests=ignore keeps ctest from erroring when it registers no tests (the +# default action became "error" in recent ctest). On some configurations (e.g. +# linux_64) OpenUSD registers no ctest tests at all, which older ctest silently +# treated as success. if [[ "${CONDA_BUILD_CROSS_COMPILATION:-}" != "1" || "${CROSSCOMPILING_EMULATOR}" != "" ]]; then - ctest --output-on-failure -C Release -E "testWorkThreadLimits3|testJsIO|testExecGeomXformable_Perf_Large|${OPENUSD_ADDITIONAL_CTEST_TO_SKIP}" + ctest --output-on-failure --no-tests=ignore -C Release -E "testWorkThreadLimits3|testJsIO|testExecGeomXformable_Perf_Large|${OPENUSD_ADDITIONAL_CTEST_TO_SKIP}" fi # Workaround for https://github.com/prefix-dev/rattler-build/issues/1955 diff --git a/recipe/fix_macos_test_python_link.patch b/recipe/fix_macos_test_python_link.patch new file mode 100644 index 0000000..da079f7 --- /dev/null +++ b/recipe/fix_macos_test_python_link.patch @@ -0,0 +1,38 @@ +Link the Python libraries into C++ ctest executables. + +Since OpenUSD 26.08, PYTHON_LIBRARIES resolves (when +PXR_PY_UNDEFINED_DYNAMIC_LOOKUP is ON) to a generator expression that +links libpython only into EXECUTABLE targets, so that standalone +executables do not hit missing Python symbols while the shared libraries +themselves keep using -undefined dynamic_lookup. Regular CLI binaries get +this via the interface link libraries of the USD libraries they consume, +but the C++ test executables built by pxr_build_test only link +${bt_LIBRARIES} and never pull in ${PYTHON_LIBRARIES}. + +On macOS, conda-forge's Python reports a static LDLIBRARY +(libpythonX.Y.a) via sysconfig, which makes OpenUSD force +PXR_PY_UNDEFINED_DYNAMIC_LOOKUP ON. The USD C++ libraries reference +Python C-API symbols (TfPython, boost::python glue) that are left +undefined for runtime resolution, so a C++ test binary that does not link +libpython fails to load with errors such as: + + dyld: symbol not found in flat namespace '__Py_NoneStruct' + +This adds ${PYTHON_LIBRARIES} to the test link. Because a test target is +an EXECUTABLE, the generator expression evaluates to the Python library +for it (and to nothing for shared libraries), so the test binaries link +libpython and resolve those symbols. It only affects the (non-installed) +test executables, not the shipped libraries. + +diff --git a/cmake/macros/Public.cmake b/cmake/macros/Public.cmake +index 5f6a545..a019fe1 100644 +--- a/cmake/macros/Public.cmake ++++ b/cmake/macros/Public.cmake +@@ -661,6 +661,7 @@ function(pxr_build_test TEST_NAME) + ) + _pxr_target_link_libraries(${TEST_NAME} + ${bt_LIBRARIES} ++ ${PYTHON_LIBRARIES} + ) + + # Find libraries under the install prefix, which has the core USD diff --git a/recipe/fix_tbb_version_macro.patch b/recipe/fix_tbb_version_macro.patch deleted file mode 100644 index 3ac7eff..0000000 --- a/recipe/fix_tbb_version_macro.patch +++ /dev/null @@ -1,36 +0,0 @@ -Explicitly include so TBB_INTERFACE_VERSION_MAJOR is defined. - -OpenUSD's workTBB backend relies on to transitively -pull in the TBB version header (and thus define TBB_INTERFACE_VERSION_MAJOR) -before deciding between the legacy tbb::task API and the oneTBB task_group -API. This is no longer true with recent oneTBB releases (>= 2021/12.18, the -"tbb 2023" conda-forge migration), where does not -define TBB_INTERFACE_VERSION_MAJOR. As a result the `#if -TBB_INTERFACE_VERSION_MAJOR >= 12` guard evaluates as false and the code -falls back to the removed legacy tbb::task / tbb::empty_task / -tbb::task_group_context API, failing to compile. - -Including explicitly guarantees the macro is defined for the -preprocessor checks. The header is available in all relevant TBB versions. - -diff --git a/pxr/base/work/workTBB/dispatcher_impl.h b/pxr/base/work/workTBB/dispatcher_impl.h ---- a/pxr/base/work/workTBB/dispatcher_impl.h -+++ b/pxr/base/work/workTBB/dispatcher_impl.h -@@ -13,6 +13,7 @@ - // Blocked range is not used in this file, but this header happens to pull in - // the TBB version header in a way that works in all TBB versions. - #include -+#include - #include - #if TBB_INTERFACE_VERSION_MAJOR >= 12 - #include -diff --git a/pxr/base/work/workTBB/detachedTask_impl.h b/pxr/base/work/workTBB/detachedTask_impl.h ---- a/pxr/base/work/workTBB/detachedTask_impl.h -+++ b/pxr/base/work/workTBB/detachedTask_impl.h -@@ -10,5 +10,6 @@ - #include -+#include - #include "pxr/base/work/workTBB/dispatcher_impl.h" - #include "pxr/base/work/api.h" - - #if TBB_INTERFACE_VERSION_MAJOR >= 12 diff --git a/recipe/recipe.yaml b/recipe/recipe.yaml index 1d64a68..b69ced5 100644 --- a/recipe/recipe.yaml +++ b/recipe/recipe.yaml @@ -2,7 +2,7 @@ schema_version: 1 context: name: openusd - version: "26.05" + version: "26.08" package: name: ${{ name }} @@ -10,21 +10,17 @@ package: source: - url: https://github.com/PixarAnimationStudios/OpenUSD/archive/refs/tags/v${{ version }}.tar.gz - sha256: bf514f62ac9508d3c5b121dc1107f3b29bf3c954473b9b0bf8324b7cf04c64c1 + sha256: 4bccbb95cddda1dbeef2f74a08b9456352f2aa91bfd4578c0c613009c7950149 patches: - link_python_to_executables.patch - add_pxr_install_dll_in_bin.patch - # Fix https://github.com/conda-forge/openusd-feedstock/issues/11 - - 3759.patch - remove_hardcoded_prefix.patch - # Explicitly include so TBB_INTERFACE_VERSION_MAJOR is - # defined when selecting the oneTBB task_group backend. Recent oneTBB - # (the "tbb 2023" migration) no longer defines it via , - # which made the workTBB backend fall back to the removed legacy tbb::task API. - - fix_tbb_version_macro.patch + # Link libpython into the C++ ctest executables so they don't fail to + # load with missing Python symbols (e.g. __Py_NoneStruct) on macOS. + - fix_macos_test_python_link.patch build: - number: 2 + number: 0 skip: ppc64le requirements: