ci: fix three platform-specific build failures
- Linux: Qt6 metatype static_assert requires complete types; declare OakEngineBlock with Q_DECLARE_OPAQUE_POINTER in the public header (outside extern "C") - Windows: gtest discovery runs the freshly linked test exe at build time and it cannot find the DLLs (0xc0000135); copy oakcore/oakengine/ ffmpeg_bridge DLLs next to the test binaries on WIN32 - macOS: Imath header mixing between otio-install's stale bundled Imath and Homebrew's Imath broke ImathBox.h (V2h undeclared); bump the OTIO cache to v2 and drop bundled Imath headers so the system one is the only set in play
This commit is contained in:
@@ -62,11 +62,17 @@ jobs:
|
|||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: otio-install
|
path: otio-install
|
||||||
key: otio-0.16.0-${{ runner.os }}-v1
|
key: otio-0.16.0-${{ runner.os }}-v2
|
||||||
|
|
||||||
- name: Set OTIO location (Unix)
|
- name: Set OTIO location (Unix)
|
||||||
if: runner.os != 'Windows'
|
if: runner.os != 'Windows'
|
||||||
run: echo "OTIO_LOCATION=${PWD}/otio-install" >> "$GITHUB_ENV"
|
run: |
|
||||||
|
echo "OTIO_LOCATION=${PWD}/otio-install" >> "$GITHUB_ENV"
|
||||||
|
# With OTIO_FIND_IMATH=ON the system (brew/apt) Imath must be the
|
||||||
|
# only Imath header set in play; drop any bundled headers a stale
|
||||||
|
# cache entry may have brought back (they collide with the system
|
||||||
|
# include guards and break ImathBox.h).
|
||||||
|
rm -rf "${PWD}/otio-install/include/Imath"
|
||||||
|
|
||||||
- name: Build OpenTimelineIO (Unix)
|
- name: Build OpenTimelineIO (Unix)
|
||||||
if: runner.os != 'Windows' && steps.otio-cache.outputs.cache-hit != 'true'
|
if: runner.os != 'Windows' && steps.otio-cache.outputs.cache-hit != 'true'
|
||||||
@@ -120,7 +126,7 @@ jobs:
|
|||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
with:
|
with:
|
||||||
path: otio-install
|
path: otio-install
|
||||||
key: otio-0.16.0-${{ runner.os }}-v1
|
key: otio-0.16.0-${{ runner.os }}-v2
|
||||||
|
|
||||||
- name: Set OTIO location (Windows)
|
- name: Set OTIO location (Windows)
|
||||||
if: runner.os == 'Windows'
|
if: runner.os == 'Windows'
|
||||||
|
|||||||
@@ -32,3 +32,10 @@ target_include_directories(oakcore_gtest PRIVATE
|
|||||||
)
|
)
|
||||||
|
|
||||||
gtest_discover_tests(oakcore_gtest)
|
gtest_discover_tests(oakcore_gtest)
|
||||||
|
|
||||||
|
if (WIN32)
|
||||||
|
# gtest discovery executes the binary at build time; it needs the DLL next to it
|
||||||
|
add_custom_command(TARGET oakcore_gtest POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
$<TARGET_FILE:olivecore> $<TARGET_FILE_DIR:oakcore_gtest>)
|
||||||
|
endif ()
|
||||||
|
|||||||
@@ -292,6 +292,17 @@ if (BUILD_TESTS)
|
|||||||
# Freshly linked binaries can exceed the 5s default discovery
|
# Freshly linked binaries can exceed the 5s default discovery
|
||||||
# timeout on first run (dyld cold cache + Qt/OCIO init)
|
# timeout on first run (dyld cold cache + Qt/OCIO init)
|
||||||
gtest_discover_tests(${name} DISCOVERY_TIMEOUT 60)
|
gtest_discover_tests(${name} DISCOVERY_TIMEOUT 60)
|
||||||
|
if (WIN32)
|
||||||
|
# gtest discovery executes the binary at build time; it needs
|
||||||
|
# the engine DLLs next to it
|
||||||
|
add_custom_command(TARGET ${name} POST_BUILD
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
$<TARGET_FILE:oakengine> $<TARGET_FILE_DIR:${name}>
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
$<TARGET_FILE:olivecore> $<TARGET_FILE_DIR:${name}>
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
|
$<TARGET_FILE:ffmpeg_bridge> $<TARGET_FILE_DIR:${name}>)
|
||||||
|
endif ()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
make_oakengine_gtest(oakengine_ipc_test)
|
make_oakengine_gtest(oakengine_ipc_test)
|
||||||
|
|||||||
@@ -1308,6 +1308,11 @@ oakengine_clip_get_connected_viewer(const OakEngineBlock *clip);
|
|||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Qt6 on some toolchains requires complete types in meta-type instantiations
|
||||||
|
// (e.g. QList<OakEngineBlock*> in TimelinePanel signals); declare the handle
|
||||||
|
// opaque instead of pulling the engine definition into the public header.
|
||||||
|
Q_DECLARE_OPAQUE_POINTER(OakEngineBlock *)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* OAKENGINE_TIMELINE_H */
|
#endif /* OAKENGINE_TIMELINE_H */
|
||||||
|
|||||||
Reference in New Issue
Block a user