Skip to content

Commit 255855a

Browse files
committed
Specify more detailed requirements to ensure upstream dependencies are met
1 parent fc7b3cb commit 255855a

File tree

1 file changed

+89
-32
lines changed

1 file changed

+89
-32
lines changed

src/ComposerIntegration/BundledPhpExtensionsRepository.php

Lines changed: 89 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
use Php\Pie\Platform\OperatingSystemFamily;
1414
use Php\Pie\Platform\TargetPlatform;
1515

16+
use function array_combine;
1617
use function array_key_exists;
18+
use function array_keys;
1719
use function array_map;
1820
use function sprintf;
1921

@@ -22,7 +24,7 @@ class BundledPhpExtensionsRepository extends ArrayRepository
2224
/**
2325
* @var list<array{
2426
* name: non-empty-string,
25-
* version?: non-empty-string,
27+
* require?: array<string, non-empty-string>,
2628
* os-families?: non-empty-list<OperatingSystemFamily>,
2729
* type?: ExtensionType,
2830
* priority?: int,
@@ -36,17 +38,32 @@ class BundledPhpExtensionsRepository extends ArrayRepository
3638
['name' => 'curl'],
3739
['name' => 'dba'],
3840
['name' => 'dom'],
39-
['name' => 'enchant', 'version' => '>= 5.2.0'],
41+
[
42+
'name' => 'enchant',
43+
'require' => ['php' => '>= 5.2.0'],
44+
],
4045
['name' => 'exif'],
41-
['name' => 'ffi', 'version' => '>= 7.4.0'],
42-
['name' => 'gd'],
46+
[
47+
'name' => 'ffi',
48+
'require' => ['php' => '>= 7.4.0'],
49+
],
50+
// ['name' => 'gd'], // build failure - ext/gd/gd.c:79:11: fatal error: ft2build.h: No such file or directory
4351
['name' => 'gettext'],
4452
['name' => 'gmp'],
4553
['name' => 'iconv'],
46-
['name' => 'intl', 'version' => '>= 5.3.0'],
54+
[
55+
'name' => 'intl',
56+
'require' => ['php' => '>= 5.3.0'],
57+
],
4758
['name' => 'ldap'],
4859
['name' => 'mbstring'],
49-
['name' => 'mysqlnd', 'version' => '>= 5.3.0'],
60+
[
61+
'name' => 'mysqlnd',
62+
'require' => [
63+
'php' => '>= 5.3.0',
64+
'ext-openssl' => '*',
65+
],
66+
],
5067
[
5168
'name' => 'mysqli',
5269
'priority' => 90, // must load after mysqlnd
@@ -55,19 +72,28 @@ class BundledPhpExtensionsRepository extends ArrayRepository
5572
[
5673
'name' => 'opcache',
5774
'type' => ExtensionType::ZendExtension,
58-
'version' => '>= 5.5.0',
75+
'require' => ['php' => '>= 5.5.0'],
5976
],
60-
['name' => 'openssl'],
77+
// ['name' => 'openssl'], // Not building in CI
6178
['name' => 'pcntl'],
62-
// ['name' => 'pdo', 'version' => '>= 5.1.0'], // build failure - make: *** [Makefile:206: /home/james/.config/pie/php8.4_64f029c38a947437b5385bfed58650fb/vendor/php/pdo/ext/pdo/pdo_sql_parser.c] Error 127
63-
// ['name' => 'pdo_dblib', 'version' => '>= 5.1.0'], // build failure - configure: error: Cannot find FreeTDS in known installation directories.
64-
// ['name' => 'pdo_firebird', 'version' => '>= 5.1.0'], // build failure - configure: error: libfbclient not found.
65-
['name' => 'pdo_mysql', 'version' => '>= 5.1.0'],
66-
// ['name' => 'pdo_odbc', 'version' => '>= 5.1.0'], // build failure - configure: error: Unknown ODBC flavour yes
67-
['name' => 'pdo_pgsql', 'version' => '>= 5.1.0'],
68-
['name' => 'pdo_sqlite', 'version' => '>= 5.1.0'],
79+
// ['name' => 'pdo', 'require' => ['php' => '>= 5.1.0']], // build failure - make: *** [Makefile:206: /home/james/.config/pie/php8.4_64f029c38a947437b5385bfed58650fb/vendor/php/pdo/ext/pdo/pdo_sql_parser.c] Error 127
80+
// ['name' => 'pdo_dblib', 'require' => ['php' => '>= 5.1.0']], // build failure - configure: error: Cannot find FreeTDS in known installation directories.
81+
// ['name' => 'pdo_firebird', 'require' => ['php' => '>= 5.1.0']], // build failure - configure: error: libfbclient not found.
82+
// [
83+
// 'name' => 'pdo_mysql',
84+
// 'require' => ['php' => '>= 5.1.0'],
85+
// ], // Not building in CI
86+
// ['name' => 'pdo_odbc', 'require' => ['php' => '>= 5.1.0']], // build failure - configure: error: Unknown ODBC flavour yes
87+
// [
88+
// 'name' => 'pdo_pgsql',
89+
// 'require' => ['php' => '>= 5.1.0'],
90+
// ], // Not building in CI
91+
// [
92+
// 'name' => 'pdo_sqlite',
93+
// 'require' => ['php' => '>= 5.1.0'],
94+
// ], // Not building in CI
6995
['name' => 'pgsql'],
70-
// ['name' => 'phar', 'version' => '>= 5.3.0'], // build failure - config.status: error: cannot find input file: '/phar.1.in'
96+
// ['name' => 'phar', 'require' => ['php' => '>= 5.3.0']], // build failure - config.status: error: cannot find input file: '/phar.1.in'
7197
['name' => 'posix'],
7298
['name' => 'readline'],
7399
['name' => 'session'],
@@ -76,18 +102,40 @@ class BundledPhpExtensionsRepository extends ArrayRepository
76102
['name' => 'snmp'],
77103
['name' => 'soap'],
78104
['name' => 'sockets'],
79-
['name' => 'sodium', 'version' => '>= 7.2.0'],
80-
['name' => 'sqlite3', 'version' => '>= 5.3.0'],
105+
[
106+
'name' => 'sodium',
107+
'require' => ['php' => '>= 7.2.0'],
108+
],
109+
[
110+
'name' => 'sqlite3',
111+
'require' => ['php' => '>= 5.3.0'],
112+
],
81113
['name' => 'sysvmsg'],
82114
['name' => 'sysvsem'],
83115
['name' => 'sysvshm'],
84116
['name' => 'tidy'],
85117
// ['name' => 'tokenizer'], // build failure - make: *** No rule to make target '/home/james/workspace/oss/php-src/ext/tokenizer/Zend/zend_language_parser.y', needed by '/home/james/workspace/oss/php-src/ext/tokenizer/Zend/zend_language_parser.c'. Stop.
86118
['name' => 'xml'],
87-
['name' => 'xmlreader', 'version' => '>= 5.1.0'],
88-
['name' => 'xmlwriter', 'version' => '>= 5.2.0'],
119+
// [
120+
// 'name' => 'xmlreader',
121+
// 'require' => [
122+
// 'php' => '>= 5.1.0',
123+
// 'ext-xml' => '*',
124+
// 'ext-dom' => '*',
125+
// ],
126+
// ], // Not building in CI
127+
[
128+
'name' => 'xmlwriter',
129+
'require' => [
130+
'php' => '>= 5.2.0',
131+
'ext-xml' => '*',
132+
],
133+
],
89134
['name' => 'xsl'],
90-
['name' => 'zip', 'version' => '>= 5.2.0'],
135+
[
136+
'name' => 'zip',
137+
'require' => ['php' => '>= 5.2.0'],
138+
],
91139
['name' => 'zlib'],
92140
];
93141

@@ -98,22 +146,31 @@ public static function forTargetPlatform(TargetPlatform $targetPlatform): self
98146

99147
return new self(array_map(
100148
static function (array $extension) use ($versionParser, $phpVersion): Package {
101-
if (! array_key_exists('version', $extension)) {
102-
$extension['version'] = $phpVersion;
149+
if (! array_key_exists('require', $extension)) {
150+
$extension['require'] = ['php' => $phpVersion];
103151
}
104152

153+
$requireLinks = array_map(
154+
static function (string $target, string $constraint) use ($extension, $versionParser): Link {
155+
return new Link(
156+
'php/' . $extension['name'],
157+
$target,
158+
$versionParser->parseConstraints($constraint),
159+
'requires',
160+
$constraint,
161+
);
162+
},
163+
array_keys($extension['require']),
164+
$extension['require'],
165+
);
166+
105167
$package = new CompletePackage('php/' . $extension['name'], $phpVersion . '.0', $phpVersion);
106168
$package->setType(($extension['type'] ?? ExtensionType::PhpModule)->value);
107169
$package->setDistType('zip');
108-
$package->setRequires([
109-
'php' => new Link(
110-
'php/' . $extension['name'],
111-
'php',
112-
$versionParser->parseConstraints($extension['version']),
113-
'requires',
114-
$extension['version'],
115-
),
116-
]);
170+
$package->setRequires(array_combine(
171+
array_map(static fn (Link $link) => $link->getTarget(), $requireLinks),
172+
$requireLinks,
173+
));
117174
$package->setDistUrl(sprintf('https://github.com/php/php-src/archive/refs/tags/php-%s.zip', $phpVersion));
118175
$package->setDistReference(sprintf('php-%s', $phpVersion));
119176
$phpExt = [

0 commit comments

Comments
 (0)