Skip to content

Commit 3d10236

Browse files
committed
Add PatchBeforeBuild attribute
1 parent 82ab141 commit 3d10236

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace StaticPHP\Attribute\Package;
6+
7+
#[\Attribute(\Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)]
8+
class PatchBeforeBuild {}

src/StaticPHP/Package/PackageCallbacksTrait.php

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ trait PackageCallbacksTrait
1616

1717
protected mixed $validate_callback = null;
1818

19-
protected mixed $patch_before_build_callback = null;
19+
protected mixed $patch_before_build_callbacks = null;
2020

2121
public function setInfoCallback(callable $callback): void
2222
{
@@ -48,26 +48,28 @@ public function setValidateCallback(callable $callback): void
4848
$this->validate_callback = $callback;
4949
}
5050

51-
public function setPatchBeforeBuildCallback(callable $callback): void
51+
public function addPatchBeforeBuildCallback(callable $callback): void
5252
{
53-
$this->patch_before_build_callback = $callback;
53+
$this->patch_before_build_callbacks[] = $callback;
5454
}
5555

5656
public function patchBeforeBuild(): void
5757
{
5858
if (file_exists("{$this->getSourceDir()}/.spc-patched")) {
5959
return;
6060
}
61-
if ($this->patch_before_build_callback === null) {
61+
if ($this->patch_before_build_callbacks === null) {
6262
return;
6363
}
6464
// Use CallbackInvoker with current package as context
65-
$ret = ApplicationContext::invoke($this->patch_before_build_callback, [
66-
Package::class => $this,
67-
static::class => $this,
68-
]);
69-
if ($ret === true) {
70-
FileSystem::writeFile("{$this->getSourceDir()}/.spc-patched", 'PATCHED!!!');
65+
foreach ($this->patch_before_build_callbacks as $callback) {
66+
$ret = ApplicationContext::invoke($callback, [
67+
Package::class => $this,
68+
static::class => $this,
69+
]);
70+
if ($ret === true) {
71+
FileSystem::writeFile("{$this->getSourceDir()}/.spc-patched", 'PATCHED!!!');
72+
}
7173
}
7274
}
7375

src/StaticPHP/Registry/PackageLoader.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use StaticPHP\Attribute\Package\Info;
1313
use StaticPHP\Attribute\Package\InitPackage;
1414
use StaticPHP\Attribute\Package\Library;
15+
use StaticPHP\Attribute\Package\PatchBeforeBuild;
1516
use StaticPHP\Attribute\Package\ResolveBuild;
1617
use StaticPHP\Attribute\Package\Stage;
1718
use StaticPHP\Attribute\Package\Target;
@@ -196,6 +197,8 @@ public static function loadFromClass(mixed $class): void
196197
match ($method_attribute->getName()) {
197198
// #[BuildFor(PHP_OS_FAMILY)]
198199
BuildFor::class => self::addBuildFunction($pkg, $method_instance, [$instance_class, $method->getName()]),
200+
// #[BeforeBuild]
201+
PatchBeforeBuild::class => self::addPatchBeforeBuildFunction($pkg, [$instance_class, $method->getName()]),
199202
// #[CustomPhpConfigureArg(PHP_OS_FAMILY)]
200203
CustomPhpConfigureArg::class => self::bindCustomPhpConfigureArg($pkg, $method_attribute->newInstance(), [$instance_class, $method->getName()]),
201204
// #[Stage('stage_name')]
@@ -332,6 +335,11 @@ private static function addBuildFunction(Package $pkg, object $attr, callable $f
332335
$pkg->addBuildFunction($attr->os, $fn);
333336
}
334337

338+
private static function addPatchBeforeBuildFunction(Package $pkg, callable $fn): void
339+
{
340+
$pkg->addPatchBeforeBuildCallback($fn);
341+
}
342+
335343
private static function addStage(\ReflectionMethod $method, Package $pkg, object $instance_class, object $method_instance): void
336344
{
337345
$name = $method_instance->function;

0 commit comments

Comments
 (0)