fix imagemagick and postgresql builds with different libs

This commit is contained in:
DubbleClick 2023-10-17 19:37:13 +02:00
parent da1cbeb79c
commit 0007043f4a
3 changed files with 37 additions and 23 deletions

View File

@ -12,11 +12,10 @@ class imagick extends Extension
{ {
public function patchBeforeBuildconf(): bool public function patchBeforeBuildconf(): bool
{ {
// linux need to link library manually, we add it to extra-libs // imagick may call omp_pause_all which requires -lgomp
$extra_libs = $this->builder->getOption('extra-libs', ''); $extra_libs = $this->builder->getOption('extra-libs', '');
if (!str_contains($extra_libs, 'libMagickCore')) { $libf = BUILD_LIB_PATH;
$extra_libs .= ' /usr/lib/libMagick++-7.Q16HDRI.a /usr/lib/libMagickCore-7.Q16HDRI.a /usr/lib/libMagickWand-7.Q16HDRI.a'; $extra_libs .= " {$libf}/libMagick++-7.Q16HDRI.a {$libf}/libMagickWand-7.Q16HDRI.a {$libf}/libMagickCore-7.Q16HDRI.a -lgomp ";
}
$this->builder->setOption('extra-libs', $extra_libs); $this->builder->setOption('extra-libs', $extra_libs);
return true; return true;
} }

View File

@ -16,23 +16,31 @@ trait imagemagick
*/ */
protected function build(): void protected function build(): void
{ {
$extra = '--without-jxl --without-xml --without-zstd --without-x --disable-openmp '; $extra = '--without-jxl --without-x --disable-openmp ';
// libzip support $required_libs = '';
$extra .= $this->builder->getLib('libzip') ? '--with-zip ' : '--without-zip '; $optional_libs = [
// jpeg support 'libzip' => 'zip',
$extra .= $this->builder->getLib('libjpeg') ? '--with-jpeg ' : ''; 'libjpeg' => 'jpeg',
// png support 'libpng' => 'png',
$extra .= $this->builder->getLib('libpng') ? '--with-png ' : ''; 'libwebp' => 'webp',
// webp support 'libxml2' => 'xml',
$extra .= $this->builder->getLib('libwebp') ? '--with-webp ' : ''; 'zlib' => 'zlib',
// zstd support 'zstd' => 'zstd',
// $extra .= $this->builder->getLib('zstd') ? '--with-zstd ' : '--without-zstd '; 'freetype' => 'freetype',
// freetype support ];
$extra .= $this->builder->getLib('freetype') ? '--with-freetype ' : '--without-freetype '; foreach ($optional_libs as $lib => $option) {
$extra .= $this->builder->getLib($lib) ? "--with-{$option} " : "--without-{$option} ";
if ($this->builder->getLib($lib)) {
$required_libs .= ' ' . $this->builder->getLib($lib)->getStaticLibFiles();
}
}
shell()->cd($this->source_dir) shell()->cd($this->source_dir)
->exec( ->exec(
"{$this->builder->configure_env} ./configure " . "{$this->builder->configure_env} " .
'LDFLAGS="-static" ' .
"LIBS='{$required_libs}' " .
'./configure ' .
'--enable-static --disable-shared ' . '--enable-static --disable-shared ' .
$extra . $extra .
'--prefix=' '--prefix='

View File

@ -21,9 +21,16 @@ trait postgresql
$env = $this->builder->configure_env; $env = $this->builder->configure_env;
$envs = $env; $envs = $env;
$packages = 'openssl zlib readline libxml-2.0 zlib'; $packages = 'openssl zlib readline libxml-2.0 zlib';
foreach (['zstd', 'ldap', 'pam', 'libxslt'] as $lib) { $optional_packages = [
'zstd' => 'libzstd',
'ldap' => 'ldap',
'libpam' => 'libpam',
'libxslt' => 'libxslt',
'icu' => 'icu-i18n',
];
foreach ($optional_packages as $lib => $pkg) {
if ($this->getBuilder()->getLib($lib)) { if ($this->getBuilder()->getLib($lib)) {
$packages .= ' ' . $lib; $packages .= ' ' . $pkg;
} }
} }
@ -62,11 +69,11 @@ trait postgresql
'--with-ssl=openssl ' . '--with-ssl=openssl ' .
'--with-readline ' . '--with-readline ' .
'--with-libxml ' . '--with-libxml ' .
($this->builder->getLib('ldap') ? '--with-ldap ' : '--without-ldap ') .
($this->builder->getLib('icu') ? '--with-icu ' : '--without-icu ') . ($this->builder->getLib('icu') ? '--with-icu ' : '--without-icu ') .
($this->builder->getLib('pam') ? '--with-pam ' : '--without-pam ') . ($this->builder->getLib('ldap') ? '--with-ldap ' : '--without-ldap ') .
($this->builder->getLib('zstd') ? '--with-zstd ' : '--without-zstd ') . ($this->builder->getLib('libpam') ? '--with-pam ' : '--without-pam ') .
($this->builder->getLib('libxslt') ? '--with-libxslt ' : '--without-libxslt ') . ($this->builder->getLib('libxslt') ? '--with-libxslt ' : '--without-libxslt ') .
($this->builder->getLib('zstd') ? '--with-zstd ' : '--without-zstd ') .
'--without-lz4 ' . '--without-lz4 ' .
'--without-perl ' . '--without-perl ' .
'--without-python ' . '--without-python ' .