Skip to content

Commit b052220

Browse files
committed
Add support for package environment variables and path injection
1 parent beeb0b8 commit b052220

3 files changed

Lines changed: 45 additions & 0 deletions

File tree

src/StaticPHP/Config/ConfigValidator.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class ConfigValidator
4040
'static-libs' => ConfigType::LIST_ARRAY, // @
4141
'pkg-configs' => ConfigType::LIST_ARRAY,
4242
'static-bins' => ConfigType::LIST_ARRAY, // @
43+
'path' => ConfigType::LIST_ARRAY, // @
44+
'env' => ConfigType::ASSOC_ARRAY, // @
45+
'append-env' => ConfigType::ASSOC_ARRAY, // @
4346
];
4447

4548
public const array PACKAGE_FIELDS = [
@@ -60,6 +63,9 @@ class ConfigValidator
6063
'static-libs' => false, // @
6164
'pkg-configs' => false,
6265
'static-bins' => false, // @
66+
'path' => false, // @
67+
'env' => false, // @
68+
'append-env' => false, // @
6369
];
6470

6571
public const array SUFFIX_ALLOWED_FIELDS = [
@@ -68,6 +74,9 @@ class ConfigValidator
6874
'headers',
6975
'static-libs',
7076
'static-bins',
77+
'path',
78+
'env',
79+
'append-env',
7180
];
7281

7382
public const array PHP_EXTENSION_FIELDS = [

src/StaticPHP/Package/PackageInstaller.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use StaticPHP\Artifact\ArtifactDownloader;
1010
use StaticPHP\Artifact\ArtifactExtractor;
1111
use StaticPHP\Artifact\DownloaderOptions;
12+
use StaticPHP\Config\PackageConfig;
1213
use StaticPHP\DI\ApplicationContext;
1314
use StaticPHP\Exception\WrongUsageException;
1415
use StaticPHP\Registry\PackageLoader;
@@ -580,6 +581,30 @@ private function resolvePackages(): void
580581
foreach ($resolved_packages as $pkg_name) {
581582
$this->packages[$pkg_name] = PackageLoader::getPackage($pkg_name);
582583
}
584+
585+
foreach ($this->packages as $package) {
586+
$this->injectPackageEnvs($package);
587+
}
588+
}
589+
590+
private function injectPackageEnvs(Package $package): void
591+
{
592+
$name = $package->getName();
593+
594+
$paths = PackageConfig::get($name, 'path', []);
595+
foreach ($paths as $path) {
596+
GlobalEnvManager::addPathIfNotExists(FileSystem::replacePathVariable($path));
597+
}
598+
599+
$envs = PackageConfig::get($name, 'env', []);
600+
foreach ($envs as $k => $v) {
601+
GlobalEnvManager::putenv("{$k}=" . FileSystem::replacePathVariable((string) $v));
602+
}
603+
604+
$append_envs = PackageConfig::get($name, 'append-env', []);
605+
foreach ($append_envs as $k => $v) {
606+
GlobalEnvManager::appendEnv($k, FileSystem::replacePathVariable((string) $v));
607+
}
583608
}
584609

585610
private function handlePhpTargetPackage(TargetPackage $package): void

src/StaticPHP/Util/GlobalEnvManager.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,17 @@ public static function addPathIfNotExists(string $path): void
112112
}
113113
}
114114

115+
public static function appendEnv(string $key, string $value): void
116+
{
117+
$existing = getenv($key);
118+
if ($existing !== false && $existing !== '') {
119+
$separator = SystemTarget::isUnix() ? ':' : ';';
120+
self::putenv("{$key}={$value}{$separator}{$existing}");
121+
} else {
122+
self::putenv("{$key}={$value}");
123+
}
124+
}
125+
115126
/**
116127
* Initialize the toolchain after the environment variables are set.
117128
* The toolchain or environment availability check is done here.

0 commit comments

Comments
 (0)