Add imagemagick,jbig,lerc,libaom,libde265,libheif,libjxl,libtiff,libwebp,libzip

This commit is contained in:
crazywhalecc 2026-02-05 20:59:23 +08:00
parent 807b90b182
commit 7ae16e5be8
No known key found for this signature in database
GPG Key ID: 1F4BDD59391F2680
20 changed files with 617 additions and 0 deletions

View File

@ -0,0 +1,32 @@
imagemagick:
type: library
artifact:
source: {
"type": "ghtar",
"repo": "ImageMagick/ImageMagick"
}
metadata:
license-files: [LICENSE]
lang: cpp
pkg-configs: [
"Magick++-7.Q16HDRI",
"MagickCore-7.Q16HDRI",
"MagickWand-7.Q16HDRI"
]
depends:
- zlib
- libjpeg
- libjxl
- libpng
- libwebp
- freetype
- libtiff
- libheif
- bzip2
suggests:
- zstd
- xz
- libzip
- libxml2

15
config/pkg/lib/jbig.yml Normal file
View File

@ -0,0 +1,15 @@
jbig:
type: library
artifact:
source: 'https://dl.static-php.dev/static-php-cli/deps/jbig/jbigkit-2.1.tar.gz'
source-mirror: 'https://www.cl.cam.ac.uk/~mgk25/jbigkit/download/jbigkit-2.1.tar.gz'
metadata:
license-files: [COPYING]
license: GPL-2.0-or-later
headers:
- jbig.h
- jbig85.h
- jbig_ar.h
static-libs@unix:
- libjbig.a
- libjbig85.a

12
config/pkg/lib/lerc.yml Normal file
View File

@ -0,0 +1,12 @@
lerc:
type: library
artifact:
source:
type: ghtar
repo: Esri/lerc
prefer-stable: true
metadata:
license-files: [LICENSE]
lang: cpp
static-libs@unix:
- libLerc.a

12
config/pkg/lib/libaom.yml Normal file
View File

@ -0,0 +1,12 @@
libaom:
type: library
artifact:
source:
type: git
rev: main
url: 'https://aomedia.googlesource.com/aom'
metadata:
license-files: [LICENSE]
lang: cpp
static-libs@unix:
- libaom.a

View File

@ -0,0 +1,13 @@
libde265:
type: library
artifact:
source:
type: ghrel
repo: strukturag/libde265
match: libde265-.+\.tar\.gz
prefer-stable: true
metadata:
license-files: [COPYING]
lang: cpp
static-libs@unix:
- libde265.a

View File

@ -0,0 +1,18 @@
libheif:
type: library
artifact:
source:
type: ghrel
repo: strukturag/libheif
match: libheif-.+\.tar\.gz
prefer-stable: true
metadata:
license-files: [COPYING]
depends:
- libde265
- libwebp
- libaom
- zlib
- brotli
static-libs@unix:
- libheif.a

21
config/pkg/lib/libjxl.yml Normal file
View File

@ -0,0 +1,21 @@
libjxl:
type: library
artifact:
source:
type: git
url: 'https://github.com/libjxl/libjxl'
rev: main
submodules: [third_party/highway, third_party/libjpeg-turbo, third_party/sjpeg, third_party/skcms]
metadata:
license-files: [LICENSE]
license: BSD-3-Clause
depends:
- brotli
- libjpeg
- libpng
- libwebp
pkg-configs:
- libjxl
- libjxl_cms
- libjxl_threads
- libhwy

View File

@ -0,0 +1,21 @@
libtiff:
type: library
artifact:
source:
type: filelist
url: 'https://download.osgeo.org/libtiff/'
regex: '/href="(?<file>tiff-(?<version>[^"]+)\.tar\.xz)"/'
metadata:
license-files: [LICENSE.md]
license: libtiff
depends:
- zlib
- libjpeg
suggests@unix:
- lerc
- libwebp
- jbig
- xz
- zstd
static-libs@unix:
- libtiff.a

View File

@ -0,0 +1,16 @@
libwebp:
type: library
artifact:
source:
type: ghtagtar
repo: webmproject/libwebp
match: v1\.\d+\.\d+$
metadata:
license-files: [COPYING]
license: BSD-3-Clause
pkg-configs:
- libwebp
- libwebpdecoder
- libwebpdemux
- libwebpmux
- libsharpyuv

23
config/pkg/lib/libzip.yml Normal file
View File

@ -0,0 +1,23 @@
libzip:
type: library
artifact:
source: {
"type": "ghrel",
"repo": "nih-at/libzip",
"match": "libzip.+\\.tar\\.xz",
"prefer-stable": true
}
metadata:
license-files: [LICENSE]
static-libs@unix:
- libzip.a
headers:
- zip.h
- zipconf.h
depends@unix:
- zlib
suggests@unix:
- bzip2
- xz
- zstd
- openssl

View File

@ -0,0 +1,83 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixAutoconfExecutor;
use StaticPHP\Runtime\SystemTarget;
use StaticPHP\Toolchain\Interface\ToolchainInterface;
use StaticPHP\Util\FileSystem;
#[Library('imagemagick')]
class imagemagick
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(LibraryPackage $lib, ToolchainInterface $toolchain): void
{
$ldflags = $original_ldflags = getenv('SPC_DEFAULT_LD_FLAGS');
if (str_contains($ldflags, '-Wl,--as-needed')) {
$ldflags = str_replace('-Wl,--as-needed', '', $ldflags);
f_putenv("SPC_DEFAULT_LD_FLAGS={$ldflags}");
}
$ac = UnixAutoconfExecutor::create($lib)
->optionalPackage('libzip', ...ac_with_args('zip'))
->optionalPackage('libjpeg', ...ac_with_args('jpeg'))
->optionalPackage('libpng', ...ac_with_args('png'))
->optionalPackage('libwebp', ...ac_with_args('webp'))
->optionalPackage('libxml2', ...ac_with_args('xml'))
->optionalPackage('libheif', ...ac_with_args('heic'))
->optionalPackage('zlib', ...ac_with_args('zlib'))
->optionalPackage('xz', ...ac_with_args('lzma'))
->optionalPackage('zstd', ...ac_with_args('zstd'))
->optionalPackage('freetype', ...ac_with_args('freetype'))
->optionalPackage('bzip2', ...ac_with_args('bzlib'))
->optionalPackage('libjxl', ...ac_with_args('jxl'))
->optionalPackage('jbig', ...ac_with_args('jbig'))
->addConfigureArgs(
'--disable-openmp',
'--without-x',
);
// special: linux-static target needs `-static`
$ldflags = $toolchain->isStatic() ? '-static -ldl' : '-ldl';
// special: macOS needs -iconv
$libs = SystemTarget::getTargetOS() === 'Darwin' ? '-liconv' : '';
$ac->appendEnv([
'LDFLAGS' => $ldflags,
'LIBS' => $libs,
'PKG_CONFIG' => '$PKG_CONFIG --static',
]);
$ac->configure()->make();
f_putenv("SPC_DEFAULT_LD_FLAGS={$original_ldflags}");
$filelist = [
'ImageMagick.pc',
'ImageMagick-7.Q16HDRI.pc',
'Magick++.pc',
'Magick++-7.Q16HDRI.pc',
'MagickCore.pc',
'MagickCore-7.Q16HDRI.pc',
'MagickWand.pc',
'MagickWand-7.Q16HDRI.pc',
];
$lib->patchPkgconfPrefix($filelist);
foreach ($filelist as $file) {
FileSystem::replaceFileRegex(
"{$lib->getLibDir()}/pkgconfig/{$file}",
'#includearchdir=/include/ImageMagick-7#m',
'includearchdir=${prefix}/include/ImageMagick-7'
);
}
$lib->patchLaDependencyPrefix();
}
}

View File

@ -0,0 +1,46 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Attribute\Package\PatchBeforeBuild;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Package\PackageBuilder;
use StaticPHP\Util\FileSystem;
#[Library('jbig')]
class jbig
{
#[PatchBeforeBuild]
public function patchBeforeBuild(LibraryPackage $lib): void
{
FileSystem::replaceFileStr($lib->getSourceDir() . '/Makefile', 'CFLAGS = -O2 -W -Wno-unused-result', 'CFLAGS = -O2 -W -Wno-unused-result -fPIC');
}
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(LibraryPackage $lib, PackageBuilder $builder): void
{
$ccenv = [
'CC' => getenv('CC'),
'CXX' => getenv('CXX'),
'AR' => getenv('AR'),
'LD' => getenv('LD'),
];
$env = [];
foreach ($ccenv as $k => $v) {
$env[] = "{$k}={$v}";
}
$env_str = implode(' ', $env);
shell()->cd($lib->getSourceDir())->initializeEnv($lib)
->exec("make -j{$builder->concurrency} {$env_str} lib")
->exec("cp libjbig/libjbig.a {$lib->getLibDir()}")
->exec("cp libjbig/libjbig85.a {$lib->getLibDir()}")
->exec("cp libjbig/jbig.h {$lib->getIncludeDir()}")
->exec("cp libjbig/jbig85.h {$lib->getIncludeDir()}")
->exec("cp libjbig/jbig_ar.h {$lib->getIncludeDir()}");
}
}

View File

@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
#[Library('lerc')]
class lerc extends LibraryPackage
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(): void
{
UnixCMakeExecutor::create($this)->build();
}
}

View File

@ -0,0 +1,33 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
use StaticPHP\Toolchain\Interface\ToolchainInterface;
use StaticPHP\Toolchain\ZigToolchain;
#[Library('libaom')]
class libaom extends LibraryPackage
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(ToolchainInterface $toolchain): void
{
$extra = getenv('SPC_COMPILER_EXTRA');
if ($toolchain instanceof ZigToolchain) {
$new = trim($extra . ' -D_GNU_SOURCE');
f_putenv("SPC_COMPILER_EXTRA={$new}");
}
UnixCMakeExecutor::create($this)
->setBuildDir("{$this->getSourceDir()}/builddir")
->addConfigureArgs('-DAOM_TARGET_CPU=generic')
->build();
f_putenv("SPC_COMPILER_EXTRA={$extra}");
$this->patchPkgconfPrefix(['aom.pc']);
}
}

View File

@ -0,0 +1,24 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
#[Library('libde265')]
class libde265 extends LibraryPackage
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(): void
{
UnixCMakeExecutor::create($this)
->addConfigureArgs('-DENABLE_SDL=OFF')
->build();
$this->patchPkgconfPrefix(['libde265.pc']);
}
}

View File

@ -0,0 +1,45 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Attribute\Package\PatchBeforeBuild;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
use StaticPHP\Util\FileSystem;
#[Library('libheif')]
class libheif
{
#[PatchBeforeBuild]
public function patchBeforeBuild(LibraryPackage $lib): void
{
if (!str_contains(file_get_contents($lib->getSourceDir() . '/CMakeLists.txt'), 'libbrotlienc')) {
FileSystem::replaceFileStr(
$lib->getSourceDir() . '/CMakeLists.txt',
'list(APPEND REQUIRES_PRIVATE "libbrotlidec")',
'list(APPEND REQUIRES_PRIVATE "libbrotlidec")' . "\n" . ' list(APPEND REQUIRES_PRIVATE "libbrotlienc")'
);
}
}
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(LibraryPackage $lib): void
{
UnixCMakeExecutor::create($lib)
->addConfigureArgs(
'--preset=release',
'-DWITH_EXAMPLES=OFF',
'-DWITH_GDK_PIXBUF=OFF',
'-DBUILD_TESTING=OFF',
'-DWITH_LIBSHARPYUV=ON', // optional: libwebp
'-DENABLE_PLUGIN_LOADING=OFF',
)
->build();
$lib->patchPkgconfPrefix(['libheif.pc']);
}
}

View File

@ -0,0 +1,52 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
use StaticPHP\Toolchain\Interface\ToolchainInterface;
use StaticPHP\Toolchain\ZigToolchain;
#[Library('libjxl')]
class libjxl extends LibraryPackage
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(ToolchainInterface $toolchain): void
{
$cmake = UnixCMakeExecutor::create($this)
->addConfigureArgs(
'-DJPEGXL_ENABLE_TOOLS=OFF',
'-DJPEGXL_ENABLE_EXAMPLES=OFF',
'-DJPEGXL_ENABLE_MANPAGES=OFF',
'-DJPEGXL_ENABLE_BENCHMARK=OFF',
'-DJPEGXL_ENABLE_PLUGINS=OFF',
'-DJPEGXL_ENABLE_SJPEG=ON',
'-DJPEGXL_ENABLE_JNI=OFF',
'-DJPEGXL_ENABLE_TRANSCODE_JPEG=ON',
'-DJPEGXL_STATIC=' . ($toolchain->isStatic() ? 'ON' : 'OFF'),
'-DJPEGXL_FORCE_SYSTEM_BROTLI=ON',
'-DBUILD_TESTING=OFF'
);
if ($toolchain instanceof ZigToolchain) {
$cflags = getenv('SPC_DEFAULT_C_FLAGS') ?: getenv('CFLAGS') ?: '';
$has_avx512 = str_contains($cflags, '-mavx512') || str_contains($cflags, '-march=x86-64-v4');
if (!$has_avx512) {
$cmake->addConfigureArgs(
'-DCXX_MAVX512F_SUPPORTED:BOOL=FALSE',
'-DCXX_MAVX512DQ_SUPPORTED:BOOL=FALSE',
'-DCXX_MAVX512CD_SUPPORTED:BOOL=FALSE',
'-DCXX_MAVX512BW_SUPPORTED:BOOL=FALSE',
'-DCXX_MAVX512VL_SUPPORTED:BOOL=FALSE'
);
}
}
$cmake->build();
}
}

View File

@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixAutoconfExecutor;
use StaticPHP\Runtime\SystemTarget;
use StaticPHP\Util\FileSystem;
#[Library('libtiff')]
class libtiff
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(LibraryPackage $lib): void
{
$libcpp = SystemTarget::getTargetOS() === 'Linux' ? '-lstdc++' : '-lc++';
FileSystem::replaceFileStr("{$lib->getSourceDir()}/configure", '-lwebp', '-lwebp -lsharpyuv');
FileSystem::replaceFileStr("{$lib->getSourceDir()}/configure", '-l"$lerc_lib_name"', "-l\"\$lerc_lib_name\" {$libcpp}");
UnixAutoconfExecutor::create($lib)
->optionalPackage('lerc', '--enable-lerc', '--disable-lerc')
->optionalPackage('zstd', '--enable-zstd', '--disable-zstd')
->optionalPackage('libwebp', '--enable-webp', '--disable-webp')
->optionalPackage('xz', '--enable-lzma', '--disable-lzma')
->optionalPackage('jbig', '--enable-jbig', '--disable-jbig')
->configure(
// zlib deps
'--enable-zlib',
"--with-zlib-include-dir={$lib->getIncludeDir()}",
"--with-zlib-lib-dir={$lib->getLibDir()}",
// libjpeg deps
'--enable-jpeg',
"--with-jpeg-include-dir={$lib->getIncludeDir()}",
"--with-jpeg-lib-dir={$lib->getLibDir()}",
'--disable-old-jpeg',
'--disable-jpeg12',
'--disable-libdeflate',
'--disable-tools',
'--disable-contrib',
'--disable-cxx',
'--without-x',
)
->make();
$lib->patchPkgconfPrefix(['libtiff-4.pc']);
}
}

View File

@ -0,0 +1,44 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
#[Library('libwebp')]
class libwebp extends LibraryPackage
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(): void
{
$code = '#include <immintrin.h>
int main() { return _mm256_cvtsi256_si32(_mm256_setzero_si256()); }';
$cc = getenv('CC') ?: 'gcc';
[$ret] = shell()->execWithResult("printf '%s' '{$code}' | {$cc} -x c -mavx2 -o /dev/null - 2>&1");
$disableAvx2 = $ret !== 0 && GNU_ARCH === 'x86_64' && PHP_OS_FAMILY === 'Linux';
UnixCMakeExecutor::create($this)
->addConfigureArgs(
'-DWEBP_BUILD_EXTRAS=OFF',
'-DWEBP_BUILD_ANIM_UTILS=OFF',
'-DWEBP_BUILD_CWEBP=OFF',
'-DWEBP_BUILD_DWEBP=OFF',
'-DWEBP_BUILD_GIF2WEBP=OFF',
'-DWEBP_BUILD_IMG2WEBP=OFF',
'-DWEBP_BUILD_VWEBP=OFF',
'-DWEBP_BUILD_WEBPINFO=OFF',
'-DWEBP_BUILD_WEBPMUX=OFF',
'-DWEBP_BUILD_FUZZTEST=OFF',
$disableAvx2 ? '-DWEBP_ENABLE_SIMD=OFF' : ''
)
->build();
// patch pkgconfig
$this->patchPkgconfPrefix(patch_option: PKGCONF_PATCH_PREFIX | PKGCONF_PATCH_LIBDIR);
$this->patchPkgconfPrefix(['libsharpyuv.pc'], PKGCONF_PATCH_CUSTOM, ['/^includedir=.*$/m', 'includedir=${prefix}/include/webp']);
}
}

View File

@ -0,0 +1,36 @@
<?php
declare(strict_types=1);
namespace Package\Library;
use StaticPHP\Attribute\Package\BuildFor;
use StaticPHP\Attribute\Package\Library;
use StaticPHP\Package\LibraryPackage;
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
#[Library('libzip')]
class libzip
{
#[BuildFor('Darwin')]
#[BuildFor('Linux')]
public function buildUnix(LibraryPackage $lib): void
{
UnixCMakeExecutor::create($lib)
->optionalPackage('bzip2', ...cmake_boolean_args('ENABLE_BZIP2'))
->optionalPackage('xz', ...cmake_boolean_args('ENABLE_LZMA'))
->optionalPackage('openssl', ...cmake_boolean_args('ENABLE_OPENSSL'))
->optionalPackage('zstd', ...cmake_boolean_args('ENABLE_ZSTD'))
->addConfigureArgs(
'-DENABLE_GNUTLS=OFF',
'-DENABLE_MBEDTLS=OFF',
'-DBUILD_DOC=OFF',
'-DBUILD_EXAMPLES=OFF',
'-DBUILD_REGRESS=OFF',
'-DBUILD_TOOLS=OFF',
'-DBUILD_OSSFUZZ=OFF',
)
->build();
$lib->patchPkgconfPrefix(['libzip.pc'], PKGCONF_PATCH_PREFIX);
}
}