Skip to content

Add automated ABI compatibility testing to the CI #2251

Open

Description

@doug-walker

OIIO already has this setup in their CI. It uses the abi-compliance-checker tool.

OCIO would benefit from a similar check.

Activity

  1. added
    Feature RequestNew addition to OCIO functionality.
    good first issueStandard label for new developers to locate good issues to tackle to learn about OCIO development.
    help wantedIssues that the TSC has decided are worth implementing, but don't currently have the dev resources.
    Build IssueIssues related to build or environment problems on any platform.
    on Jan 22, 2026
  2. yosri-brh commented on Jan 22, 2026

    @yosri-brh

    Hello ! I'd like to work on this issue.

  3. doug-walker commented on Jan 22, 2026

    @doug-walker
    CollaboratorAuthor

    Thank you @yosri-brh , I've assigned it to you!

  4. remia commented on Jun 26, 2026

    @remia
    Collaborator

    I did some tests on this here, using Claude I basically asked it to write the ABI check workflow, explaining its choice regarding which method / library to use for the check, which is visible as comments in the workflow file (it went for libabigail and not abi-compliance-checker, for reasons explained, whether they are sensible or not is to be reviewed).

    Trying it on the RB-2.5 branch, it seems like it correctly detected the ABI break we introduced in 2.5.1, see the error, or below copy/paste:

    Baseline library: /__w/_temp/old/install/lib64/libOpenColorIO.so.2.5.0
    Proposed library: /__w/_temp/new/install/lib64/libOpenColorIO.so.2.5.2
    Functions changes summary: 0 Removed, 1 Changed (6 filtered out), 0 Added functions
    Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
    Function symbols changes summary: 0 Removed, 0 Added function symbol not referenced by debug info
    
    1 function with some indirect sub-type change:
    
      [C] 'method OpenColorIO_v2_5::GpuShaderDesc::GpuShaderDesc()' at GpuShaderDesc.cpp:406:1 has some indirect sub-type changes:
        implicit parameter 0 of type 'OpenColorIO_v2_5::GpuShaderDesc*' has sub-type changes:
          in pointed to type 'class OpenColorIO_v2_5::GpuShaderDesc' at OpenColorIO.h:3725:1:
            type size hasn't changed
            2 member function insertions:
              'method virtual unsigned int OpenColorIO_v2_5::GpuShaderDesc::get3DTextureShaderBindingIndex(unsigned int) const' at OpenColorIO.h:3813:1, virtual at voffset 35/35
              'method virtual unsigned int OpenColorIO_v2_5::GpuShaderDesc::getTextureShaderBindingIndex(unsigned int) const' at OpenColorIO.h:3797:1, virtual at voffset 31/35
            3 member function changes (10 filtered):
              'method virtual unsigned int OpenColorIO_v2_5::GpuShaderDesc::getNum3DTextures() const' has some sub-type changes:
                the vtable offset of method virtual unsigned int OpenColorIO_v2_5::GpuShaderDesc::getNum3DTextures() const changed from 31 to 32
                  note that this is an ABI incompatible change to the vtable of class OpenColorIO_v2_5::GpuShaderDesc
              'method virtual void OpenColorIO_v2_5::GpuShaderDesc::get3DTexture(unsigned int, const char*&, const char*&, unsigned int&, OpenColorIO_v2_5::Interpolation&) const' has some sub-type changes:
                the vtable offset of method virtual void OpenColorIO_v2_5::GpuShaderDesc::get3DTexture(unsigned int, const char*&, const char*&, unsigned int&, OpenColorIO_v2_5::Interpolation&) const changed from 32 to 33
                  note that this is an ABI incompatible change to the vtable of class OpenColorIO_v2_5::GpuShaderDesc
              'method virtual void OpenColorIO_v2_5::GpuShaderDesc::get3DTextureValues(unsigned int, const float*&) const' has some sub-type changes:
                the vtable offset of method virtual void OpenColorIO_v2_5::GpuShaderDesc::get3DTextureValues(unsigned int, const float*&) const changed from 33 to 34
                  note that this is an ABI incompatible change to the vtable of class OpenColorIO_v2_5::GpuShaderDesc
    

    There is probably some cleanup / review to do but this seem promising.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Build IssueIssues related to build or environment problems on any platform.Feature RequestNew addition to OCIO functionality.good first issueStandard label for new developers to locate good issues to tackle to learn about OCIO development.help wantedIssues that the TSC has decided are worth implementing, but don't currently have the dev resources.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions