Skip to content

cmake: Empty obs_executables fail to build on MacOS when using 31.1.1 in plugin buildspec.json #12381

Description

@Trouffman

Operating System Info

macOS 15

Other OS

No response

OBS Studio Version

31.1.1

OBS Studio Version (Other)

No response

OBS Studio Log URL

NA

OBS Studio Crash Log URL

No response

Expected Behavior

OBS 31.1.1 can be use to build plugins.

Current Behavior

The MacOS gh Action and local build will fail on macOS with a general error message:

CMake Error at cmake/common/buildspec_common.cmake:66 (execute_process):
    execute_process failed command indexes:
  
      1: "Child return code: 1"
  
  Call Stack (most recent call first):
    cmake/common/buildspec_common.cmake:226 (_setup_obs_studio)
    cmake/macos/buildspec.cmake:23 (_check_dependencies)
    cmake/macos/buildspec.cmake:35 (_check_dependencies_macos)
    cmake/macos/defaults.cmake:17 (include)
    CMakeLists.txt:11 (include)
  
  
  -- Configuring incomplete, errors occurred!
  Error:     ✖︎ script execution error
  
    Callstack:
    .github/scripts/build-macos:114
       .github/scripts/build-macos:153
    
  Error: Process completed with exit code 2.

Steps to Reproduce

Update the buildspec.json of a plugin to use OBS 31.1.1 (ie.: using obs-plugin-template or existing plugin).

The gh Action will fail for MacOS.

Anything else we should know?

Error cause / source

The variable obs_executables expected/used in the helper.cmake is empty or not defined and seems he variable obs_modules is missing from that command line compared to Windows/Ubuntu.

This variable is used next in add_dependencies() .

add_dependencies() requires 2 arguments for any version prior to cmake 4.1.
cmake 4.1 is not released yet, and on macOS: brew use 4.0.3 as time of this report.

Workaround

  • Unify the command to be similar between Windows, Ubuntu, MacOS.
    Disclaimer : I do not know if there is a reason for this or not. But it solves the problem :D
add_dependencies(${target} ${obs_executables} ${obs_modules})

OR

  • Add a check if obs_executables is populated/defined (in case that obs_modules should not be use don macOS)
if(obs_executables)
  add_dependencies(${target} ${obs_executables})
endif()

Ubuntu / Windows not impacted

Seems that Ubuntu & Windows runners are not impacted this is because they both use the obs_modules variable and it is never empty.

Identifying the root cause:

  • Why is the obs_executables not set when built within a plugin?
  • Is there a good reason to omit obs-modules variale for macOS?
  • I could not find any other mention of obs_executables variable or settings
  • I am not sure which values are expected for this (I only found the cause by trial & errors)
  • Weirdly enough, this is only showing up now with OBS 31.1.1 (did not try on 31.1.0), 31.0.4 works fine, but this piece of code is there for over 2 years and did not create issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions