add cache file option to autoconf executor by default (if cflags and ldflags match default)

This commit is contained in:
DubbleClick 2025-07-02 11:47:20 +07:00
parent 0695fb9381
commit 5577cd0fab
5 changed files with 30 additions and 12 deletions

View File

@ -18,13 +18,8 @@ class libffi extends LinuxLibraryBase
*/ */
public function build(): void public function build(): void
{ {
$arch = getenv('SPC_ARCH');
UnixAutoconfExecutor::create($this) UnixAutoconfExecutor::create($this)
->configure( ->configure()
"--host={$arch}-unknown-linux",
"--target={$arch}-unknown-linux",
"--libdir={$this->getLibDir()}"
)
->make(); ->make();
if (is_file(BUILD_ROOT_PATH . '/lib64/libffi.a')) { if (is_file(BUILD_ROOT_PATH . '/lib64/libffi.a')) {

View File

@ -24,7 +24,7 @@ trait gettext
if ($this->builder->getOption('enable-zts')) { if ($this->builder->getOption('enable-zts')) {
$autoconf->addConfigureArgs('--enable-threads=isoc+posix') $autoconf->addConfigureArgs('--enable-threads=isoc+posix')
->appendEnv([ ->appendEnv([
'CFLAGS' => '-lpthread -D_REENTRANT', 'CFLAGS' => '-D_REENTRANT',
'LDFLGAS' => '-lpthread', 'LDFLGAS' => '-lpthread',
]); ]);
} else { } else {

View File

@ -17,6 +17,7 @@ trait unixodbc
protected function build(): void protected function build(): void
{ {
UnixAutoconfExecutor::create($this) UnixAutoconfExecutor::create($this)
->removeConfigureArgs('--cache-file')
->configure( ->configure(
'--disable-debug', '--disable-debug',
'--disable-dependency-tracking', '--disable-dependency-tracking',

View File

@ -129,4 +129,9 @@ class UnixShell
} }
return $cmd; return $cmd;
} }
public function getEnv(): array
{
return $this->env;
}
} }

View File

@ -32,6 +32,13 @@ class UnixAutoconfExecutor extends Executor
// remove all the ignored args // remove all the ignored args
$args = array_merge($args, $this->getDefaultConfigureArgs(), $this->configure_args); $args = array_merge($args, $this->getDefaultConfigureArgs(), $this->configure_args);
$args = array_diff($args, $this->ignore_args); $args = array_diff($args, $this->ignore_args);
$args = array_filter(
$args,
fn ($arg) => !array_filter(
$this->ignore_args,
fn ($ignore) => str_starts_with($arg, $ignore . '=')
)
);
$configure_args = implode(' ', $args); $configure_args = implode(' ', $args);
$this->shell->exec("./configure {$configure_args}"); $this->shell->exec("./configure {$configure_args}");
@ -46,7 +53,7 @@ class UnixAutoconfExecutor extends Executor
/** /**
* Run make * Run make
* *
* @param string $target Build target * @param string $target Build target
* @throws RuntimeException * @throws RuntimeException
*/ */
public function make(string $target = '', false|string $with_install = 'install', bool $with_clean = true, array $after_env_vars = []): static public function make(string $target = '', false|string $with_install = 'install', bool $with_clean = true, array $after_env_vars = []): static
@ -72,9 +79,9 @@ class UnixAutoconfExecutor extends Executor
* Add optional library configuration. * Add optional library configuration.
* This method checks if a library is available and adds the corresponding arguments to the CMake configuration. * This method checks if a library is available and adds the corresponding arguments to the CMake configuration.
* *
* @param string $name library name to check * @param string $name library name to check
* @param \Closure|string $true_args arguments to use if the library is available (allow closure, returns string) * @param \Closure|string $true_args arguments to use if the library is available (allow closure, returns string)
* @param string $false_args arguments to use if the library is not available * @param string $false_args arguments to use if the library is not available
* @return $this * @return $this
*/ */
public function optionalLib(string $name, \Closure|string $true_args, string $false_args = ''): static public function optionalLib(string $name, \Closure|string $true_args, string $false_args = ''): static
@ -119,13 +126,23 @@ class UnixAutoconfExecutor extends Executor
*/ */
private function getDefaultConfigureArgs(): array private function getDefaultConfigureArgs(): array
{ {
return [ $args = [
'--disable-shared', '--disable-shared',
'--enable-static', '--enable-static',
"--prefix={$this->library->getBuildRootPath()}", "--prefix={$this->library->getBuildRootPath()}",
'--with-pic', '--with-pic',
'--enable-pic', '--enable-pic',
]; ];
// only add the cache file if CFLAGS and LDFLAGS are defaulted
$env = $this->shell->getEnv();
$expected_cflags = '-I' . BUILD_INCLUDE_PATH . ' ' . getenv('SPC_DEFAULT_C_FLAGS');
$expected_ldflags = '-L' . BUILD_LIB_PATH;
if (($env['CFLAGS'] ?? '') === $expected_cflags && ($env['LDFLAGS'] ?? '') === $expected_ldflags) {
$args[] = '--cache-file=' . BUILD_ROOT_PATH . '/config.cache';
}
return $args;
} }
/** /**