From d9e32cbb75a8880d13f07c236c297f83c9a33268 Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Thu, 15 Oct 2026 03:53:00 +0000 Subject: [PATCH 1/2] opencolorio: Add version 2.6.0 OpenColorIO's Python bindings, built via cibuildwheel exactly as upstream's wheel_workflow.yml does: setup.py's CMake build with -DOCIO_INSTALL_EXT_PACKAGES=ALL ExternalProject-builds Imath, OpenEXR, expat, pystring, yaml-cpp, minizip-ng, lcms2, pybind11 and zlib from source for every interpreter. No riscv64 wheel is published upstream. Carries a licensing patch (see patches/opencolorio/2.6.0) bundling the licence texts of those statically-linked dependencies, a gap that exists in every opencolorio wheel on PyPI, not just this one. --- .github/workflows/build-opencolorio.yml | 114 ++++ docs/packages/opencolorio.yaml | 5 + ...es-of-the-externalproject-built-and-.patch | 534 ++++++++++++++++++ 3 files changed, 653 insertions(+) create mode 100644 .github/workflows/build-opencolorio.yml create mode 100644 docs/packages/opencolorio.yaml create mode 100644 patches/opencolorio/2.6.0/0001-ship-the-licences-of-the-externalproject-built-and-.patch diff --git a/.github/workflows/build-opencolorio.yml b/.github/workflows/build-opencolorio.yml new file mode 100644 index 000000000000..be7e9c95f618 --- /dev/null +++ b/.github/workflows/build-opencolorio.yml @@ -0,0 +1,114 @@ +# SPDX-FileCopyrightText: 2026 The RISE Project +# SPDX-License-Identifier: MIT +--- +# This workflow is based on the `linux` job of +# https://github.com/AcademySoftwareFoundation/OpenColorIO/blob/v2.6.0/.github/workflows/wheel_workflow.yml +name: Build opencolorio wheels (riscv64) + +on: + workflow_dispatch: + inputs: + version: + description: 'Version glob to (re)build; empty builds every version of docs/packages/opencolorio.yaml not released yet' + required: false + default: '' + pull_request: + branches: [main] + paths: + - '.github/workflows/build-opencolorio.yml' + - 'docs/packages/opencolorio.yaml' + - 'patches/opencolorio/**' + push: + branches: [main] + paths: + - '.github/workflows/build-opencolorio.yml' + - 'docs/packages/opencolorio.yaml' + - 'patches/opencolorio/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read # to fetch code (actions/checkout) + +env: + MANYLINUX_RISCV64_IMAGE: quay.io/pypa/manylinux_2_39_riscv64 + +jobs: + setup: + uses: $/.github/workflows/_setup.yml + with: + package: opencolorio + version: ${{ inputs.version }} + + build_wheels: + needs: [setup] + if: needs.setup.outputs.versions != '[]' + name: Build opencolorio ${{ matrix.version }} ${{ matrix.python }}-manylinux_riscv64 + runs-on: ubuntu-24.04-riscv + timeout-minutes: 1440 + strategy: + fail-fast: false + matrix: + version: ${{ fromJSON(needs.setup.outputs.versions) }} + python: ["cp312", "cp313", "cp314", "cp314t"] + + env: + OPENCOLORIO_VERSION: ${{ matrix.version }} + + steps: + - name: Checkout opencolorio v${{ env.OPENCOLORIO_VERSION }} + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + repository: AcademySoftwareFoundation/OpenColorIO + ref: v${{ env.OPENCOLORIO_VERSION }} + persist-credentials: false + + - name: Checkout python-wheels + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + path: python-wheels + persist-credentials: false + + - name: Patch opencolorio source + run: git apply python-wheels/patches/opencolorio/${{ env.OPENCOLORIO_VERSION }}/00*.patch + + # setup.py builds with -DOCIO_INSTALL_EXT_PACKAGES=ALL, which ExternalProject-builds + # Imath, OpenEXR, expat, pystring, yaml-cpp, minizip-ng, lcms2, pybind11 and zlib from + # source for every interpreter; this is upstream's own recipe, unmodified. + - name: Build wheels + uses: pypa/cibuildwheel@1828c10ab37f080699c7b81cea34097c684a7074 # v4.2.0 + with: + output-dir: wheelhouse/ + only: ${{ matrix.python }}-manylinux_riscv64 + env: + CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} + CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ + CIBW_TEST_COMMAND: >- + python -c "import importlib.metadata as m; f = sorted(str(p).split('licenses/', 1)[1] for p in m.files('opencolorio') if '.dist-info/licenses/' in str(p)); assert f == ['LICENSE', 'LICENSE.argparse', 'LICENSE.deflate', 'LICENSE.expat', 'LICENSE.imath', 'LICENSE.lcms2', 'LICENSE.minizip-ng', 'LICENSE.openexr', 'LICENSE.openjph', 'LICENSE.pybind11', 'LICENSE.pystring', 'LICENSE.sampleicc', 'LICENSE.strutil', 'LICENSE.xxhash', 'LICENSE.yaml-cpp', 'LICENSE.zlib'], f" && + python {project}/tests/python/OpenColorIOTestSuite.py && + ociocheck + + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: opencolorio-${{ env.OPENCOLORIO_VERSION }}-${{ matrix.python }}-manylinux_riscv64 + path: wheelhouse/*.whl + if-no-files-found: error + + publish: + name: Publish opencolorio ${{ matrix.version }} + needs: [setup, build_wheels] + if: needs.setup.outputs.versions != '[]' + strategy: + fail-fast: false + matrix: + version: ${{ fromJSON(needs.setup.outputs.versions) }} + permissions: + contents: write + pull-requests: write + uses: $/.github/workflows/_publish-wheel.yml + secrets: + app-private-key: ${{ secrets.RISEPROJECT_APP_PRIVATE_KEY }} + with: + artifact-pattern: opencolorio-${{ matrix.version }}-*-manylinux_riscv64 diff --git a/docs/packages/opencolorio.yaml b/docs/packages/opencolorio.yaml new file mode 100644 index 000000000000..b324492ca634 --- /dev/null +++ b/docs/packages/opencolorio.yaml @@ -0,0 +1,5 @@ +package-name: opencolorio +source-code: https://github.com/AcademySoftwareFoundation/OpenColorIO +license: BSD-3-Clause +versions: +- version: 2.6.0 diff --git a/patches/opencolorio/2.6.0/0001-ship-the-licences-of-the-externalproject-built-and-.patch b/patches/opencolorio/2.6.0/0001-ship-the-licences-of-the-externalproject-built-and-.patch new file mode 100644 index 000000000000..0a466ced1ff8 --- /dev/null +++ b/patches/opencolorio/2.6.0/0001-ship-the-licences-of-the-externalproject-built-and-.patch @@ -0,0 +1,534 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Ludovic Henry +Date: Thu, 15 Oct 2026 03:50:17 +0000 +Subject: [PATCH] ship the licences of the ExternalProject-built and in-tree + vendored dependencies + +setup.cfg's `license_files = LICENSE` is an explicit setuptools list, so it +does not fall back to the `LICEN[CS]E*` auto-discovery glob. setup.py builds +with `-DOCIO_INSTALL_EXT_PACKAGES=ALL`, which statically links Imath, +OpenEXR (itself vendoring libdeflate and OpenJPH), expat, pystring, +yaml-cpp, minizip-ng, lcms2, pybind11 and zlib into libOpenColorIO and the +bundled command-line apps; the in-tree src/apputils/argparse.cpp and +strutil.cpp (from OpenImageIO) and ext/sampleicc, ext/xxHash are compiled +in unconditionally. None of their licence texts reach dist-info/licenses +today (confirmed against the published opencolorio 2.5.1 PyPI wheel, which +ships only LICENSE). + +Add each dependency's licence text as LICENSE. at the project root +and widen license_files to also match LICENSE.*, so they land in the +wheel's dist-info/licenses/ with no other packaging change. + +Upstream-Status: To upstream [not submitted from this automated port run; the same gap exists in every opencolorio wheel on PyPI, so this needs a maintainer discussion rather than a drive-by PR] + +Signed-off-by: Ludovic Henry +--- + LICENSE.argparse | 32 ++++++++++++++++++++++++++++ + LICENSE.deflate | 22 +++++++++++++++++++ + LICENSE.expat | 21 ++++++++++++++++++ + LICENSE.imath | 11 ++++++++++ + LICENSE.lcms2 | 22 +++++++++++++++++++ + LICENSE.minizip-ng | 17 +++++++++++++++ + LICENSE.openexr | 11 ++++++++++ + LICENSE.openjph | 27 +++++++++++++++++++++++ + LICENSE.pybind11 | 29 +++++++++++++++++++++++++ + LICENSE.pystring | 27 +++++++++++++++++++++++ + LICENSE.sampleicc | 53 ++++++++++++++++++++++++++++++++++++++++++++++ + LICENSE.strutil | 31 +++++++++++++++++++++++++++ + LICENSE.xxhash | 27 +++++++++++++++++++++++ + LICENSE.yaml-cpp | 19 +++++++++++++++++ + LICENSE.zlib | 22 +++++++++++++++++++ + setup.cfg | 4 +++- + 16 files changed, 374 insertions(+), 1 deletion(-) + create mode 100644 LICENSE.argparse + create mode 100644 LICENSE.deflate + create mode 100644 LICENSE.expat + create mode 100644 LICENSE.imath + create mode 100644 LICENSE.lcms2 + create mode 100644 LICENSE.minizip-ng + create mode 100644 LICENSE.openexr + create mode 100644 LICENSE.openjph + create mode 100644 LICENSE.pybind11 + create mode 100644 LICENSE.pystring + create mode 100644 LICENSE.sampleicc + create mode 100644 LICENSE.strutil + create mode 100644 LICENSE.xxhash + create mode 100644 LICENSE.yaml-cpp + create mode 100644 LICENSE.zlib + +diff --git a/LICENSE.argparse b/LICENSE.argparse +new file mode 100644 +index 0000000..24f0c3c +--- /dev/null ++++ b/LICENSE.argparse +@@ -0,0 +1,32 @@ ++argparse, courtesy of OpenImageIO and Larry Gritz ++http://openimageio.org ++ ++Copyright 2008 Larry Gritz and the other authors and contributors. ++All Rights Reserved. ++Based on BSD-licensed software Copyright 2004 NVIDIA Corp. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++* Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++* Redistributions in binary form must reproduce the above copyright ++notice, this list of conditions and the following disclaimer in the ++documentation and/or other materials provided with the distribution. ++* Neither the name of the software's owners nor the names of its ++contributors may be used to endorse or promote products derived from ++this software without specific prior written permission. ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++(This is the Modified BSD License) ++ +diff --git a/LICENSE.deflate b/LICENSE.deflate +new file mode 100644 +index 0000000..9b620b3 +--- /dev/null ++++ b/LICENSE.deflate +@@ -0,0 +1,22 @@ ++Copyright 2016 Eric Biggers ++Copyright 2024 Google LLC ++ ++Permission is hereby granted, free of charge, to any person ++obtaining a copy of this software and associated documentation files ++(the "Software"), to deal in the Software without restriction, ++including without limitation the rights to use, copy, modify, merge, ++publish, distribute, sublicense, and/or sell copies of the Software, ++and to permit persons to whom the Software is furnished to do so, ++subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++SOFTWARE. +diff --git a/LICENSE.expat b/LICENSE.expat +new file mode 100644 +index 0000000..c6d184a +--- /dev/null ++++ b/LICENSE.expat +@@ -0,0 +1,21 @@ ++Copyright (c) 1998-2000 Thai Open Source Software Center Ltd and Clark Cooper ++Copyright (c) 2001-2025 Expat maintainers ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject to ++the following conditions: ++ ++The above copyright notice and this permission notice shall be included ++in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +diff --git a/LICENSE.imath b/LICENSE.imath +new file mode 100644 +index 0000000..dacc461 +--- /dev/null ++++ b/LICENSE.imath +@@ -0,0 +1,11 @@ ++Copyright Contributors to the OpenEXR Project. All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: ++ ++1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. ++ ++3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +diff --git a/LICENSE.lcms2 b/LICENSE.lcms2 +new file mode 100644 +index 0000000..85480b5 +--- /dev/null ++++ b/LICENSE.lcms2 +@@ -0,0 +1,22 @@ ++MIT License ++ ++Copyright (c) 2023 Marti Maria Saguer ++ ++Permission is hereby granted, free of charge, to any person obtaining ++a copy of this software and associated documentation files (the ++"Software"), to deal in the Software without restriction, including ++without limitation the rights to use, copy, modify, merge, publish, ++distribute, sublicense, and/or sell copies of the Software, and to ++permit persons to whom the Software is furnished to do so, subject ++to the following conditions: ++ ++The above copyright notice and this permission notice shall be ++included in all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ++IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ++CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ++TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ++SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +diff --git a/LICENSE.minizip-ng b/LICENSE.minizip-ng +new file mode 100644 +index 0000000..3b6c4e1 +--- /dev/null ++++ b/LICENSE.minizip-ng +@@ -0,0 +1,17 @@ ++Condition of use and distribution are the same as zlib: ++ ++This software is provided 'as-is', without any express or implied ++warranty. In no event will the authors be held liable for any damages ++arising from the use of this software. ++ ++Permission is granted to anyone to use this software for any purpose, ++including commercial applications, and to alter it and redistribute it ++freely, subject to the following restrictions: ++ ++1. The origin of this software must not be misrepresented; you must not ++ claim that you wrote the original software. If you use this software ++ in a product, an acknowledgement in the product documentation would be ++ appreciated but is not required. ++2. Altered source versions must be plainly marked as such, and must not be ++ misrepresented as being the original software. ++3. This notice may not be removed or altered from any source distribution. +diff --git a/LICENSE.openexr b/LICENSE.openexr +new file mode 100644 +index 0000000..b2a016e +--- /dev/null ++++ b/LICENSE.openexr +@@ -0,0 +1,11 @@ ++Copyright (c) Contributors to the OpenEXR Project. All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: ++ ++1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. ++ ++3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +diff --git a/LICENSE.openjph b/LICENSE.openjph +new file mode 100644 +index 0000000..d403b9c +--- /dev/null ++++ b/LICENSE.openjph +@@ -0,0 +1,27 @@ ++BSD 2-Clause License ++ ++Copyright (c) 2019, Aous Naman ++Copyright (c) 2019, Kakadu Software Pty Ltd, Australia ++Copyright (c) 2019, The University of New South Wales, Sydney, Australia ++All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are met: ++ ++1. Redistributions of source code must retain the above copyright notice, this ++ list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright notice, ++ this list of conditions and the following disclaimer in the documentation ++ and/or other materials provided with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE ++FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ++CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +diff --git a/LICENSE.pybind11 b/LICENSE.pybind11 +new file mode 100644 +index 0000000..e466b0d +--- /dev/null ++++ b/LICENSE.pybind11 +@@ -0,0 +1,29 @@ ++Copyright (c) 2016 Wenzel Jakob , All rights reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are met: ++ ++1. Redistributions of source code must retain the above copyright notice, this ++ list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright notice, ++ this list of conditions and the following disclaimer in the documentation ++ and/or other materials provided with the distribution. ++ ++3. Neither the name of the copyright holder nor the names of its contributors ++ may be used to endorse or promote products derived from this software ++ without specific prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE ++FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ++CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++Please also refer to the file .github/CONTRIBUTING.md, which clarifies licensing of ++external contributions to this project including patches, pull requests, etc. +diff --git a/LICENSE.pystring b/LICENSE.pystring +new file mode 100644 +index 0000000..8269a9a +--- /dev/null ++++ b/LICENSE.pystring +@@ -0,0 +1,27 @@ ++Copyright (c) 2008-present Contributors to the Pystring project. ++All Rights Reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are met: ++ ++1. Redistributions of source code must retain the above copyright notice, this ++ list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright notice, ++ this list of conditions and the following disclaimer in the documentation ++ and/or other materials provided with the distribution. ++ ++3. Neither the name of the copyright holder nor the names of its ++ contributors may be used to endorse or promote products derived from ++ this software without specific prior written permission. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ++AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE ++FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ++DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ++SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ++CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +diff --git a/LICENSE.sampleicc b/LICENSE.sampleicc +new file mode 100644 +index 0000000..db8c997 +--- /dev/null ++++ b/LICENSE.sampleicc +@@ -0,0 +1,53 @@ ++SampleICC ++http://sampleicc.sourceforge.net/ ++ ++The ICC Software License, Version 0.2 ++ ++ ++Copyright (c) 2003-2010 The International Color Consortium. All rights ++reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions ++are met: ++ ++1. Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++ ++2. Redistributions in binary form must reproduce the above copyright ++notice, this list of conditions and the following disclaimer in ++the documentation and/or other materials provided with the ++distribution. ++ ++3. In the absence of prior written permission, the names "ICC" and "The ++International Color Consortium" must not be used to imply that the ++ICC organization endorses or promotes products derived from this ++software. ++ ++ ++THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED ++WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ++OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE INTERNATIONAL COLOR CONSORTIUM OR ++ITS CONTRIBUTING MEMBERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF ++USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ++ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ++OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ++OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ++SUCH DAMAGE. ++ ++==================================================================== ++ ++This software consists of voluntary contributions made by many ++individuals on behalf of the The International Color Consortium. ++ ++ ++Membership in the ICC is encouraged when this software is used for ++commercial purposes. ++ ++ ++For more information on The International Color Consortium, please ++see . ++ +diff --git a/LICENSE.strutil b/LICENSE.strutil +new file mode 100644 +index 0000000..e96f519 +--- /dev/null ++++ b/LICENSE.strutil +@@ -0,0 +1,31 @@ ++strutil and UnitTest, courtesy of OpenImageIO and Larry Gritz ++http://openimageio.org ++ ++Copyright 2008 Larry Gritz and the other authors and contributors. ++All Rights Reserved. ++ ++Redistribution and use in source and binary forms, with or without ++modification, are permitted provided that the following conditions are ++met: ++* Redistributions of source code must retain the above copyright ++notice, this list of conditions and the following disclaimer. ++* Redistributions in binary form must reproduce the above copyright ++notice, this list of conditions and the following disclaimer in the ++documentation and/or other materials provided with the distribution. ++* Neither the name of the software's owners nor the names of its ++contributors may be used to endorse or promote products derived from ++this software without specific prior written permission. ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ++"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ++LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ++A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ++OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ++SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ++LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ++THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++(This is the Modified BSD License) ++ +diff --git a/LICENSE.xxhash b/LICENSE.xxhash +new file mode 100644 +index 0000000..cb30285 +--- /dev/null ++++ b/LICENSE.xxhash +@@ -0,0 +1,27 @@ ++xxHash Library ++Copyright (c) 2012-2021 Yann Collet ++All rights reserved. ++ ++BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) ++ ++Redistribution and use in source and binary forms, with or without modification, ++are permitted provided that the following conditions are met: ++ ++* Redistributions of source code must retain the above copyright notice, this ++ list of conditions and the following disclaimer. ++ ++* Redistributions in binary form must reproduce the above copyright notice, this ++ list of conditions and the following disclaimer in the documentation and/or ++ other materials provided with the distribution. ++ ++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ++DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ++ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ++(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; ++LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ++ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ +diff --git a/LICENSE.yaml-cpp b/LICENSE.yaml-cpp +new file mode 100644 +index 0000000..991fdbb +--- /dev/null ++++ b/LICENSE.yaml-cpp +@@ -0,0 +1,19 @@ ++Copyright (c) 2008-2015 Jesse Beder. ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN ++THE SOFTWARE. +diff --git a/LICENSE.zlib b/LICENSE.zlib +new file mode 100644 +index 0000000..b7a69d0 +--- /dev/null ++++ b/LICENSE.zlib +@@ -0,0 +1,22 @@ ++Copyright notice: ++ ++ (C) 1995-2026 Jean-loup Gailly and Mark Adler ++ ++ This software is provided 'as-is', without any express or implied ++ warranty. In no event will the authors be held liable for any damages ++ arising from the use of this software. ++ ++ Permission is granted to anyone to use this software for any purpose, ++ including commercial applications, and to alter it and redistribute it ++ freely, subject to the following restrictions: ++ ++ 1. The origin of this software must not be misrepresented; you must not ++ claim that you wrote the original software. If you use this software ++ in a product, an acknowledgment in the product documentation would be ++ appreciated but is not required. ++ 2. Altered source versions must be plainly marked as such, and must not be ++ misrepresented as being the original software. ++ 3. This notice may not be removed or altered from any source distribution. ++ ++ Jean-loup Gailly Mark Adler ++ jloup@gzip.org madler@alumni.caltech.edu +diff --git a/setup.cfg b/setup.cfg +index a34fc55..ab6b083 100644 +--- a/setup.cfg ++++ b/setup.cfg +@@ -16,7 +16,9 @@ classifiers = + Programming Language :: C++ + description = OpenColorIO (OCIO) is a complete color management solution geared towards motion picture production with an emphasis on visual effects and computer animation. + license = Copyright Contributors to the OpenColorIO Project. +-license_files = LICENSE ++license_files = ++ LICENSE ++ LICENSE.* + long_description = file: README.md, LICENSE + long_description_content_type = text/markdown + name = opencolorio From 1aaa35746cd83e988b5022eb6a2693fc848137ca Mon Sep 17 00:00:00 2001 From: Ludovic Henry Date: Fri, 23 Oct 2026 23:50:12 +0000 Subject: [PATCH 2/2] opencolorio: Skip the docs build like upstream's wheel workflow pyproject.toml's Linux before-build (install_docs_env.sh) dnf-installs doxygen, so setup.py configures with -DOCIO_BUILD_DOCS=ON. The isolated build env's pins (docutils>=0.22.4, sphinx<=7.1.2) are contradictory and backtrack to Sphinx 3.5.3, which cannot be imported on Python >= 3.10, so CMake fails with "Could NOT find sphinx-press-theme" on every interpreter. Upstream's wheel_workflow.yml overrides before-build with "pip install sphinx-press-theme", so its PyPI Linux wheels are built without doxygen and the docs; do the same. --- .github/workflows/build-opencolorio.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/build-opencolorio.yml b/.github/workflows/build-opencolorio.yml index be7e9c95f618..62dc1315d79c 100644 --- a/.github/workflows/build-opencolorio.yml +++ b/.github/workflows/build-opencolorio.yml @@ -85,6 +85,15 @@ jobs: env: CIBW_MANYLINUX_RISCV64_IMAGE: ${{ env.MANYLINUX_RISCV64_IMAGE }} CIBW_ENVIRONMENT: PIP_EXTRA_INDEX_URL=https://pypi.riseproject.dev/simple/ + # Upstream's wheel_workflow.yml overrides pyproject.toml's Linux before-build + # (install_docs_env.sh, which dnf-installs doxygen) with exactly this. With doxygen + # present setup.py passes -DOCIO_BUILD_DOCS=ON, and the isolated build env's + # contradictory pins (docutils>=0.22.4 vs sphinx<=7.1.2, which wants docutils<0.21) + # backtrack to Sphinx 3.5.3, whose import crashes on Python >= 3.10 ("cannot import + # name 'Union' from 'types'"), so configure dies on "Could NOT find + # sphinx-press-theme". Without doxygen the docs are skipped and the stand-in + # docstrings.h is used, as in upstream's own PyPI Linux wheels. + CIBW_BEFORE_BUILD: pip install sphinx-press-theme CIBW_TEST_COMMAND: >- python -c "import importlib.metadata as m; f = sorted(str(p).split('licenses/', 1)[1] for p in m.files('opencolorio') if '.dist-info/licenses/' in str(p)); assert f == ['LICENSE', 'LICENSE.argparse', 'LICENSE.deflate', 'LICENSE.expat', 'LICENSE.imath', 'LICENSE.lcms2', 'LICENSE.minizip-ng', 'LICENSE.openexr', 'LICENSE.openjph', 'LICENSE.pybind11', 'LICENSE.pystring', 'LICENSE.sampleicc', 'LICENSE.strutil', 'LICENSE.xxhash', 'LICENSE.yaml-cpp', 'LICENSE.zlib'], f" && python {project}/tests/python/OpenColorIOTestSuite.py &&