ci(build): enhance macOS runtime build process with git source management for libplacebo

Entire-Checkpoint: c6e522b4276c
This commit is contained in:
4gray committed 2026-04-27 01:27:11 +02:00
1 parent 09e65f8847
commit 03b5270bc2
3 files changed
+106 -9

No files matched your search

+2 -2
View File
@@ -61,10 +61,10 @@ The builder currently pins:
- FFmpeg `8.1`, configured without `--enable-gpl` or `--enable-nonfree`, and with autodetected external libraries disabled
- mpv `0.41.0`, configured with `-Dlibmpv=true -Dgpl=false`
- libplacebo `7.360.1`
- libplacebo `7.360.1`, checked out from git with the OpenGL-related submodules required by its Meson build
- libass `0.17.3` plus FreeType, FriBidi, and HarfBuzz
The build manifest records source URLs, downloaded source SHA-256 values, and the exact FFmpeg/mpv flags. The staged manifest is normalized to `origin: vendored-lgpl`, which is the only embedded MPV runtime origin allowed in required macOS release packaging.
The build manifest records source URLs, downloaded archive SHA-256 values where applicable, libplacebo git commit/submodule metadata, and the exact FFmpeg/mpv flags. The staged manifest is normalized to `origin: vendored-lgpl`, which is the only embedded MPV runtime origin allowed in required macOS release packaging.
## Build Integration
+103 -6
View File
@@ -47,7 +47,8 @@ const sourcePackages = [
{
id: 'libplacebo',
version: '7.360.1',
url: 'https://github.com/haasn/libplacebo/archive/refs/tags/v7.360.1.tar.gz',
tag: 'v7.360.1',
gitUrl: 'https://github.com/haasn/libplacebo.git',
license: 'LGPL-2.1-or-later',
},
{
@@ -196,6 +197,7 @@ function ensureTools() {
'meson',
'ninja',
'pkg-config',
'git',
];
const missing = requiredCommands.filter((command) => !commandExists(command));
@@ -224,11 +226,86 @@ function sha256File(filePath) {
return hash.digest('hex');
}
function runCapture(command, commandArgs, options = {}) {
const result = spawnSync(command, commandArgs, {
cwd: options.cwd ?? workspaceRoot,
env: options.env ?? buildEnv(),
encoding: 'utf8',
stdio: 'pipe',
...options,
});
if (result.status !== 0) {
const stderr = result.stderr ? `\n${result.stderr}` : '';
throw new Error(
`${command} ${commandArgs.join(' ')} failed with status ${
result.status ?? 1
}.${stderr}`
);
}
return result.stdout.trim();
}
function cloneGitSource(sourcePackage) {
const packageSourcePath = sourcePathFor(sourcePackage.id);
fs.rmSync(packageSourcePath, { recursive: true, force: true });
run('git', [
'clone',
'--depth',
'1',
'--branch',
sourcePackage.tag,
sourcePackage.gitUrl,
packageSourcePath,
]);
run(
'git',
[
'submodule',
'update',
'--init',
'--depth',
'1',
'3rdparty/glad',
'3rdparty/jinja',
'3rdparty/markupsafe',
'3rdparty/fast_float',
],
{ cwd: packageSourcePath }
);
sourcePackage.gitCommit = runCapture('git', ['rev-parse', 'HEAD'], {
cwd: packageSourcePath,
});
sourcePackage.submodules = runCapture(
'git',
[
'submodule',
'status',
'3rdparty/glad',
'3rdparty/jinja',
'3rdparty/markupsafe',
'3rdparty/fast_float',
],
{ cwd: packageSourcePath }
)
.split(/\r?\n/)
.map((line) => line.trim())
.filter(Boolean);
}
function downloadSources() {
fs.mkdirSync(archiveRoot, { recursive: true });
fs.mkdirSync(sourceRoot, { recursive: true });
for (const sourcePackage of sourcePackages) {
if (sourcePackage.gitUrl) {
cloneGitSource(sourcePackage);
continue;
}
const archivePath = archivePathFor(sourcePackage);
if (!fs.existsSync(archivePath)) {
run('curl', [
@@ -414,8 +491,17 @@ function sourceMetadata(packageId) {
const sourcePackage = packageById.get(packageId);
return {
version: sourcePackage.version,
sourceUrl: sourcePackage.url,
sourceSha256: sourcePackage.sha256,
sourceUrl: sourcePackage.url ?? sourcePackage.gitUrl,
...(sourcePackage.tag ? { sourceTag: sourcePackage.tag } : {}),
...(sourcePackage.sha256
? { sourceSha256: sourcePackage.sha256 }
: {}),
...(sourcePackage.gitCommit
? { sourceGitCommit: sourcePackage.gitCommit }
: {}),
...(sourcePackage.submodules
? { sourceSubmodules: sourcePackage.submodules }
: {}),
license: sourcePackage.license,
};
}
@@ -435,8 +521,19 @@ function writeManifest() {
sourcePackage.id,
{
version: sourcePackage.version,
sourceUrl: sourcePackage.url,
sourceSha256: sourcePackage.sha256,
sourceUrl: sourcePackage.url ?? sourcePackage.gitUrl,
...(sourcePackage.tag
? { sourceTag: sourcePackage.tag }
: {}),
...(sourcePackage.sha256
? { sourceSha256: sourcePackage.sha256 }
: {}),
...(sourcePackage.gitCommit
? { sourceGitCommit: sourcePackage.gitCommit }
: {}),
...(sourcePackage.submodules
? { sourceSubmodules: sourcePackage.submodules }
: {}),
license: sourcePackage.license,
},
])
@@ -453,7 +550,7 @@ function writeManifest() {
mesonFlags: mpvMesonFlags,
},
sourceDistribution:
'Attach the downloaded source archives, this manifest, and any local patches with the macOS binary release.',
'Attach the downloaded source archives, the libplacebo git checkout metadata, this manifest, and any local patches with the macOS binary release.',
};
fs.writeFileSync(