setup-php 2.13.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +990 -922
  3. package/lib/config.d.ts +3 -0
  4. package/lib/config.js +71 -71
  5. package/lib/config.js.map +1 -1
  6. package/lib/coverage.d.ts +5 -0
  7. package/lib/coverage.js +97 -87
  8. package/lib/coverage.js.map +1 -1
  9. package/lib/extensions.d.ts +4 -0
  10. package/lib/extensions.js +214 -200
  11. package/lib/extensions.js.map +1 -1
  12. package/lib/fetch.d.ts +1 -0
  13. package/lib/fetch.js +63 -0
  14. package/lib/fetch.js.map +1 -0
  15. package/lib/install.d.ts +2 -0
  16. package/lib/install.js +75 -81
  17. package/lib/install.js.map +1 -1
  18. package/lib/tools.d.ts +23 -0
  19. package/lib/tools.js +367 -386
  20. package/lib/tools.js.map +1 -1
  21. package/lib/utils.d.ts +21 -0
  22. package/lib/utils.js +261 -291
  23. package/lib/utils.js.map +1 -1
  24. package/package.json +67 -56
  25. package/src/config.ts +82 -82
  26. package/src/configs/brew_extensions +31 -0
  27. package/src/configs/composer.env +2 -0
  28. package/src/configs/ini/jit.ini +3 -0
  29. package/src/configs/ini/php.ini +2 -0
  30. package/src/configs/ini/xdebug.ini +1 -0
  31. package/src/configs/os_releases.csv +19 -17
  32. package/src/configs/php-versions.json +6 -5
  33. package/src/configs/php_packages +12 -0
  34. package/src/configs/{php.json → pm/php.json} +29 -29
  35. package/src/configs/{phpunit.json → pm/phpunit.json} +24 -24
  36. package/src/configs/tools.json +278 -235
  37. package/src/configs/tools_schema.json +125 -114
  38. package/src/coverage.ts +144 -142
  39. package/src/extensions.ts +367 -349
  40. package/src/fetch.ts +54 -0
  41. package/src/install.ts +66 -82
  42. package/src/scripts/darwin.sh +285 -249
  43. package/src/scripts/extensions/add_extensions.ps1 +194 -0
  44. package/src/scripts/extensions/add_extensions.sh +184 -0
  45. package/src/scripts/{ext → extensions}/blackfire.ps1 +32 -32
  46. package/src/scripts/{ext → extensions}/blackfire.sh +22 -21
  47. package/src/scripts/{ext → extensions}/couchbase.sh +43 -43
  48. package/src/scripts/{ext → extensions}/cubrid.sh +60 -60
  49. package/src/scripts/extensions/extension_map.php +132 -0
  50. package/src/scripts/{ext → extensions}/firebird.ps1 +19 -19
  51. package/src/scripts/{ext → extensions}/firebird.sh +39 -35
  52. package/src/scripts/{ext → extensions}/gearman.sh +22 -22
  53. package/src/scripts/{ext → extensions}/geos.sh +17 -17
  54. package/src/scripts/{ext → extensions}/http.ps1 +54 -54
  55. package/src/scripts/{ext → extensions}/http.sh +109 -120
  56. package/src/scripts/{ext → extensions}/intl.sh +23 -23
  57. package/src/scripts/{ext → extensions}/ioncube.ps1 +33 -32
  58. package/src/scripts/{ext → extensions}/ioncube.sh +21 -19
  59. package/src/scripts/{ext → extensions}/oci.ps1 +85 -60
  60. package/src/scripts/{ext → extensions}/oci.sh +65 -63
  61. package/src/scripts/{ext → extensions}/patches/firebird.sh +11 -11
  62. package/src/scripts/{ext → extensions}/patches/geos.sh +7 -7
  63. package/src/scripts/{ext → extensions}/patches/http.sh +11 -11
  64. package/src/scripts/{ext → extensions}/patches/pdo_oci.sh +6 -6
  65. package/src/scripts/{ext → extensions}/patches/phpize.sh +26 -26
  66. package/src/scripts/{ext → extensions}/patches/protobuf.sh +4 -4
  67. package/src/scripts/{ext → extensions}/phalcon.ps1 +54 -54
  68. package/src/scripts/{ext → extensions}/phalcon.sh +58 -58
  69. package/src/scripts/{ext → extensions}/source.sh +145 -144
  70. package/src/scripts/extensions/sqlsrv.sh +15 -0
  71. package/src/scripts/linux.sh +269 -256
  72. package/src/scripts/tools/add_tools.ps1 +239 -26
  73. package/src/scripts/tools/add_tools.sh +175 -20
  74. package/src/scripts/tools/blackfire.ps1 +19 -19
  75. package/src/scripts/tools/blackfire.sh +40 -39
  76. package/src/scripts/tools/grpc_php_plugin.ps1 +21 -21
  77. package/src/scripts/tools/grpc_php_plugin.sh +58 -58
  78. package/src/scripts/tools/ppa.sh +192 -151
  79. package/src/scripts/tools/protoc.ps1 +38 -38
  80. package/src/scripts/tools/protoc.sh +28 -28
  81. package/src/scripts/tools/symfony.ps1 +14 -0
  82. package/src/scripts/tools/symfony.sh +13 -0
  83. package/src/scripts/unix.sh +186 -0
  84. package/src/scripts/win32.ps1 +352 -494
  85. package/src/tools.ts +512 -538
  86. package/src/utils.ts +415 -500
  87. package/.eslintrc.json +0 -16
  88. package/.github/CODE_OF_CONDUCT.md +0 -76
  89. package/.github/CONTRIBUTING.md +0 -70
  90. package/.github/FUNDING.yml +0 -7
  91. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -42
  92. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
  93. package/.github/PULL_REQUEST_TEMPLATE.md +0 -37
  94. package/.github/SECURITY.md +0 -29
  95. package/.github/workflows/docs.yml +0 -77
  96. package/.github/workflows/node-workflow.yml +0 -51
  97. package/.github/workflows/workflow.yml +0 -78
  98. package/.idea/workspace.xml +0 -113
  99. package/.prettierrc.json +0 -12
  100. package/__tests__/config.test.ts +0 -52
  101. package/__tests__/coverage.test.ts +0 -110
  102. package/__tests__/extensions.test.ts +0 -263
  103. package/__tests__/install.test.ts +0 -175
  104. package/__tests__/tools.test.ts +0 -524
  105. package/__tests__/utils.test.ts +0 -307
  106. package/action.yml +0 -29
  107. package/dist/index.js +0 -3051
  108. package/examples/bedrock.yml +0 -32
  109. package/examples/blackfire-player.yml +0 -31
  110. package/examples/blackfire.yml +0 -31
  111. package/examples/cakephp-mysql.yml +0 -114
  112. package/examples/cakephp-postgres.yml +0 -112
  113. package/examples/cakephp.yml +0 -92
  114. package/examples/codeigniter.yml +0 -34
  115. package/examples/laravel-mysql.yml +0 -74
  116. package/examples/laravel-postgres.yml +0 -74
  117. package/examples/laravel.yml +0 -42
  118. package/examples/lumen-mysql.yml +0 -74
  119. package/examples/lumen-postgres.yml +0 -74
  120. package/examples/lumen.yml +0 -38
  121. package/examples/phalcon-mysql.yml +0 -74
  122. package/examples/phalcon-postgres.yml +0 -73
  123. package/examples/sage.yml +0 -57
  124. package/examples/slim-framework.yml +0 -34
  125. package/examples/symfony-mysql.yml +0 -57
  126. package/examples/symfony-postgres.yml +0 -55
  127. package/examples/symfony.yml +0 -39
  128. package/examples/yii2-mysql.yml +0 -73
  129. package/examples/yii2-postgres.yml +0 -71
  130. package/examples/zend-framework.yml +0 -36
  131. package/jest.config.js +0 -12
  132. package/lib/sapi.js +0 -64
  133. package/src/scripts/common.sh +0 -314
  134. package/tsconfig.json +0 -18
package/src/extensions.ts CHANGED
@@ -1,349 +1,367 @@
1
- import * as utils from './utils';
2
-
3
- /**
4
- * Install and enable extensions for darwin
5
- *
6
- * @param extension_csv
7
- * @param version
8
- */
9
- export async function addExtensionDarwin(
10
- extension_csv: string,
11
- version: string
12
- ): Promise<string> {
13
- const extensions: Array<string> = await utils.extensionArray(extension_csv);
14
- let add_script = '\n';
15
- let remove_script = '';
16
- await utils.asyncForEach(extensions, async function (extension: string) {
17
- const version_extension: string = version + extension;
18
- const [ext_name, ext_version]: string[] = extension.split('-');
19
- const ext_prefix = await utils.getExtensionPrefix(ext_name);
20
-
21
- switch (true) {
22
- // match :extension
23
- case /^:/.test(ext_name):
24
- remove_script += '\nremove_extension ' + ext_name.slice(1);
25
- return;
26
- // match extensions for compiling from source
27
- case /.+-.+\/.+@.+/.test(extension):
28
- add_script += await utils.parseExtensionSource(extension, ext_prefix);
29
- return;
30
- // match 5.3blackfire...8.0blackfire
31
- // match 5.3blackfire-(semver)...8.0blackfire-(semver)
32
- // match couchbase, geos, pdo_oci, oci8, http, pecl_http
33
- // match 5.3ioncube...7.4ioncube
34
- // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
35
- case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
36
- version_extension
37
- ):
38
- case /^couchbase$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
39
- extension
40
- ):
41
- case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
42
- add_script += await utils.customPackage(
43
- ext_name,
44
- 'ext',
45
- extension,
46
- 'darwin'
47
- );
48
- return;
49
- // match pre-release versions. For example - xdebug-beta
50
- case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
51
- add_script += await utils.joins(
52
- '\nadd_unstable_extension',
53
- ext_name,
54
- ext_version,
55
- ext_prefix
56
- );
57
- return;
58
- // match semver
59
- case /.+-\d+\.\d+\.\d+.*/.test(extension):
60
- add_script += await utils.joins(
61
- '\nadd_pecl_extension',
62
- ext_name,
63
- ext_version,
64
- ext_prefix
65
- );
66
- return;
67
- // match 5.3pcov to 7.0pcov
68
- case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
69
- add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
70
- return;
71
- // match 5.6 and newer - amqp, apcu, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, swoole, xdebug, xdebug2, yaml, zmq
72
- // match 7.1 and newer - pcov
73
- // match 5.6 to 7.4 - propro
74
- case /(?<!5\.[3-5])(amqp|apcu|grpc|igbinary|imagick|imap|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|swoole|xdebug|xdebug2|yaml|zmq)/.test(
75
- version_extension
76
- ):
77
- case /(5\.6|7\.[0-4])propro/.test(version_extension):
78
- case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
79
- case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_extension):
80
- add_script += await utils.joins(
81
- '\nadd_brew_extension',
82
- ext_name,
83
- ext_prefix
84
- );
85
- return;
86
- // match sqlite
87
- case /^sqlite$/.test(extension):
88
- extension = 'sqlite3';
89
- break;
90
- default:
91
- break;
92
- }
93
- add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
94
- });
95
- return add_script + remove_script;
96
- }
97
-
98
- /**
99
- * Install and enable extensions for windows
100
- *
101
- * @param extension_csv
102
- * @param version
103
- */
104
- export async function addExtensionWindows(
105
- extension_csv: string,
106
- version: string
107
- ): Promise<string> {
108
- const extensions: Array<string> = await utils.extensionArray(extension_csv);
109
- let add_script = '\n';
110
- let remove_script = '';
111
- await utils.asyncForEach(extensions, async function (extension: string) {
112
- const [ext_name, ext_version]: string[] = extension.split('-');
113
- const version_extension: string = version + extension;
114
- let matches: RegExpExecArray;
115
- switch (true) {
116
- // Match :extension
117
- case /^:/.test(ext_name):
118
- remove_script += '\nRemove-Extension ' + ext_name.slice(1);
119
- break;
120
- // match 5.3blackfire...8.0blackfire
121
- // match 5.3blackfire-(semver)...8.0blackfire-(semver)
122
- // match pdo_oci and oci8
123
- // match 5.3ioncube...7.4ioncube
124
- // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
125
- // match 7.1pecl_http...8.0pecl_http and 7.1http...8.0http
126
- case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
127
- version_extension
128
- ):
129
- case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
130
- case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
131
- case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
132
- case /^(7\.[1-4]|8\.0)(pecl_)?http/.test(version_extension):
133
- add_script += await utils.customPackage(
134
- ext_name,
135
- 'ext',
136
- extension,
137
- 'win32'
138
- );
139
- return;
140
- // match pre-release versions. For example - xdebug-beta
141
- case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension):
142
- add_script += await utils.joins(
143
- '\nAdd-Extension',
144
- ext_name,
145
- ext_version.replace('stable', '')
146
- );
147
- break;
148
- // match extensions for compiling from source
149
- case /.+-.+\/.+@.+/.test(extension):
150
- add_script += await utils.getUnsupportedLog(
151
- extension,
152
- version,
153
- 'win32'
154
- );
155
- break;
156
- // match semver without state
157
- case /.+-\d+\.\d+\.\d+$/.test(extension):
158
- add_script += await utils.joins(
159
- '\nAdd-Extension',
160
- ext_name,
161
- 'stable',
162
- ext_version
163
- );
164
- break;
165
- // match semver with state
166
- case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
167
- matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
168
- version_extension
169
- ) as RegExpExecArray;
170
- add_script += await utils.joins(
171
- '\nAdd-Extension',
172
- ext_name,
173
- matches[2].replace('preview', 'devel'),
174
- matches[1]
175
- );
176
- break;
177
- // match 7.2xdebug2 to 7.4xdebug2
178
- case /7\.[2-4]xdebug2/.test(version_extension):
179
- add_script += '\nAdd-Extension xdebug stable 2.9.8';
180
- break;
181
- // match 5.3pcov to 7.0pcov
182
- case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
183
- add_script += await utils.getUnsupportedLog('pcov', version, 'win32');
184
- break;
185
- // match 5.3 to 5.6 - mysql, mysqli, mysqlnd
186
- case /^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(version_extension):
187
- add_script +=
188
- '\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
189
- break;
190
- // match 7.0 and newer mysql, mysqli and mysqlnd
191
- case /(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(
192
- version_extension
193
- ):
194
- add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
195
- break;
196
- // match sqlite
197
- case /^sqlite$/.test(extension):
198
- extension = 'sqlite3';
199
- add_script += await utils.joins('\nAdd-Extension', extension);
200
- break;
201
- default:
202
- add_script += '\nAdd-Extension ' + extension;
203
- break;
204
- }
205
- });
206
- return add_script + remove_script;
207
- }
208
-
209
- /**
210
- * Install and enable extensions for linux
211
- *
212
- * @param extension_csv
213
- * @param version
214
- */
215
- export async function addExtensionLinux(
216
- extension_csv: string,
217
- version: string
218
- ): Promise<string> {
219
- const extensions: Array<string> = await utils.extensionArray(extension_csv);
220
- let add_script = '\n';
221
- let remove_script = '';
222
- await utils.asyncForEach(extensions, async function (extension: string) {
223
- const version_extension: string = version + extension;
224
- const [ext_name, ext_version]: string[] = extension.split('-');
225
- const ext_prefix = await utils.getExtensionPrefix(ext_name);
226
-
227
- switch (true) {
228
- // Match :extension
229
- case /^:/.test(ext_name):
230
- remove_script += '\nremove_extension ' + ext_name.slice(1);
231
- return;
232
- // match extensions for compiling from source
233
- case /.+-.+\/.+@.+/.test(extension):
234
- add_script += await utils.parseExtensionSource(extension, ext_prefix);
235
- return;
236
- // match 5.3blackfire...8.0blackfire
237
- // match 5.3blackfire-(semver)...8.0blackfire-(semver)
238
- // match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
239
- // match couchbase, geos, pdo_oci, oci8, http, pecl_http
240
- // match 5.3ioncube...7.4ioncube
241
- // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
242
- case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
243
- version_extension
244
- ):
245
- case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
246
- version_extension
247
- ):
248
- case /^couchbase$|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
249
- extension
250
- ):
251
- case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
252
- case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
253
- case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
254
- add_script += await utils.customPackage(
255
- ext_name,
256
- 'ext',
257
- extension,
258
- 'linux'
259
- );
260
- return;
261
- // match pre-release versions. For example - xdebug-beta
262
- case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
263
- add_script += await utils.joins(
264
- '\nadd_unstable_extension',
265
- ext_name,
266
- ext_version,
267
- ext_prefix
268
- );
269
- return;
270
- // match semver versions
271
- case /.+-\d+\.\d+\.\d+.*/.test(extension):
272
- add_script += await utils.joins(
273
- '\nadd_pecl_extension',
274
- ext_name,
275
- ext_version,
276
- ext_prefix
277
- );
278
- return;
279
- // match 5.3pcov to 7.0pcov
280
- case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
281
- add_script += await utils.getUnsupportedLog('pcov', version, 'linux');
282
- return;
283
- // match 7.2xdebug2...7.4xdebug2
284
- case /^7\.[2-4]xdebug2$/.test(version_extension):
285
- add_script += await utils.joins(
286
- '\nadd_pecl_extension',
287
- 'xdebug',
288
- '2.9.8',
289
- ext_prefix
290
- );
291
- return;
292
- // match pdo extensions
293
- case /^pdo[_-].+/.test(extension):
294
- extension = extension.replace(/pdo[_-]|3/, '');
295
- add_script += '\nadd_pdo_extension ' + extension;
296
- return;
297
- // match sqlite
298
- case /^sqlite$/.test(extension):
299
- extension = 'sqlite3';
300
- break;
301
- default:
302
- break;
303
- }
304
- add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
305
- });
306
- return add_script + remove_script;
307
- }
308
-
309
- /**
310
- * Install and enable extensions
311
- *
312
- * @param extension_csv
313
- * @param version
314
- * @param os_version
315
- * @param no_step
316
- */
317
- export async function addExtension(
318
- extension_csv: string,
319
- version: string,
320
- os_version: string,
321
- no_step = false
322
- ): Promise<string> {
323
- const log: string = await utils.stepLog('Setup Extensions', os_version);
324
- let script = '\n';
325
- switch (no_step) {
326
- case true:
327
- script += log + (await utils.suppressOutput(os_version));
328
- break;
329
- case false:
330
- default:
331
- script += log;
332
- break;
333
- }
334
-
335
- switch (os_version) {
336
- case 'win32':
337
- return script + (await addExtensionWindows(extension_csv, version));
338
- case 'darwin':
339
- return script + (await addExtensionDarwin(extension_csv, version));
340
- case 'linux':
341
- return script + (await addExtensionLinux(extension_csv, version));
342
- default:
343
- return await utils.log(
344
- 'Platform ' + os_version + ' is not supported',
345
- os_version,
346
- 'error'
347
- );
348
- }
349
- }
1
+ import * as utils from './utils';
2
+
3
+ /**
4
+ * Install and enable extensions for darwin
5
+ *
6
+ * @param extension_csv
7
+ * @param version
8
+ */
9
+ export async function addExtensionDarwin(
10
+ extension_csv: string,
11
+ version: string
12
+ ): Promise<string> {
13
+ const extensions: Array<string> = await utils.extensionArray(extension_csv);
14
+ let add_script = '\n';
15
+ let remove_script = '';
16
+ await utils.asyncForEach(extensions, async function (extension: string) {
17
+ const version_extension: string = version + extension;
18
+ const [ext_name, ext_version]: string[] = extension.split('-');
19
+ const ext_prefix = await utils.getExtensionPrefix(ext_name);
20
+
21
+ switch (true) {
22
+ // match :extension
23
+ case /^:/.test(ext_name):
24
+ remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
25
+ return;
26
+ // Match none
27
+ case /^none$/.test(ext_name):
28
+ add_script += '\ndisable_all_shared';
29
+ return;
30
+ // match extensions for compiling from source
31
+ case /.+-.+\/.+@.+/.test(extension):
32
+ add_script += await utils.parseExtensionSource(extension, ext_prefix);
33
+ return;
34
+ // match 5.3blackfire...8.1blackfire
35
+ // match 5.3blackfire-(semver)...8.1blackfire-(semver)
36
+ // match couchbase, geos, pdo_oci, oci8, http, pecl_http
37
+ // match 5.3ioncube...7.4ioncube
38
+ // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
39
+ case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
40
+ version_extension
41
+ ):
42
+ case /^couchbase$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
43
+ extension
44
+ ):
45
+ case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
46
+ case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_extension):
47
+ case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
48
+ add_script += await utils.customPackage(
49
+ ext_name,
50
+ 'extensions',
51
+ extension,
52
+ 'darwin'
53
+ );
54
+ return;
55
+ // match pre-release versions. For example - xdebug-beta
56
+ case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
57
+ add_script += await utils.joins(
58
+ '\nadd_unstable_extension',
59
+ ext_name,
60
+ ext_version,
61
+ ext_prefix
62
+ );
63
+ return;
64
+ // match semver
65
+ case /.+-\d+\.\d+\.\d+.*/.test(extension):
66
+ add_script += await utils.joins(
67
+ '\nadd_pecl_extension',
68
+ ext_name,
69
+ ext_version,
70
+ ext_prefix
71
+ );
72
+ return;
73
+ // match 5.3pcov to 7.0pcov
74
+ case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
75
+ add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
76
+ return;
77
+ // match 5.6 and newer - amqp, apcu, expect, gnupg, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
78
+ // match 7.1 and newer - pcov
79
+ // match 5.6 to 7.4 - propro
80
+ // match 7.0 and newer - vips, xlswriter
81
+ case /(?<!5\.[3-5])(amqp|apcu|expect|gnupg|grpc|igbinary|imagick|imap|mailparse|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
82
+ version_extension
83
+ ):
84
+ case /(5\.6|7\.[0-4])propro/.test(version_extension):
85
+ case /(?<!5\.[3-6]|7\.0)pcov/.test(version_extension):
86
+ case /(?<!5\.[3-6])(vips|xlswriter)/.test(version_extension):
87
+ add_script += await utils.joins(
88
+ '\nadd_brew_extension',
89
+ ext_name,
90
+ ext_prefix
91
+ );
92
+ return;
93
+ // match sqlite
94
+ case /^sqlite$/.test(extension):
95
+ extension = 'sqlite3';
96
+ break;
97
+ default:
98
+ break;
99
+ }
100
+ add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
101
+ });
102
+ return add_script + remove_script;
103
+ }
104
+
105
+ /**
106
+ * Install and enable extensions for windows
107
+ *
108
+ * @param extension_csv
109
+ * @param version
110
+ */
111
+ export async function addExtensionWindows(
112
+ extension_csv: string,
113
+ version: string
114
+ ): Promise<string> {
115
+ const extensions: Array<string> = await utils.extensionArray(extension_csv);
116
+ let add_script = '\n';
117
+ let remove_script = '';
118
+ await utils.asyncForEach(extensions, async function (extension: string) {
119
+ const [ext_name, ext_version]: string[] = extension.split('-');
120
+ const version_extension: string = version + extension;
121
+ let matches: RegExpExecArray;
122
+ switch (true) {
123
+ // Match :extension
124
+ case /^:/.test(ext_name):
125
+ remove_script += '\nDisable-Extension' + ext_name.replace(/:/g, ' ');
126
+ break;
127
+ // Match none
128
+ case /^none$/.test(ext_name):
129
+ add_script += '\nDisable-AllShared';
130
+ break;
131
+ // match 5.3blackfire...8.0blackfire
132
+ // match 5.3blackfire-(semver)...8.0blackfire-(semver)
133
+ // match pdo_oci and oci8
134
+ // match 5.3ioncube...7.4ioncube
135
+ // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
136
+ // match 7.1pecl_http...8.0pecl_http and 7.1http...8.0http
137
+ case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
138
+ version_extension
139
+ ):
140
+ case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
141
+ case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
142
+ case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
143
+ case /^(7\.[1-4]|8\.0)(pecl_)?http/.test(version_extension):
144
+ add_script += await utils.customPackage(
145
+ ext_name,
146
+ 'extensions',
147
+ extension,
148
+ 'win32'
149
+ );
150
+ return;
151
+ // match pre-release versions. For example - xdebug-beta
152
+ case /.+-(stable|beta|alpha|devel|snapshot)/.test(extension):
153
+ add_script += await utils.joins(
154
+ '\nAdd-Extension',
155
+ ext_name,
156
+ ext_version.replace('stable', '')
157
+ );
158
+ break;
159
+ // match extensions for compiling from source
160
+ case /.+-.+\/.+@.+/.test(extension):
161
+ add_script += await utils.getUnsupportedLog(
162
+ extension,
163
+ version,
164
+ 'win32'
165
+ );
166
+ break;
167
+ // match semver without state
168
+ case /.+-\d+\.\d+\.\d+$/.test(extension):
169
+ add_script += await utils.joins(
170
+ '\nAdd-Extension',
171
+ ext_name,
172
+ 'stable',
173
+ ext_version
174
+ );
175
+ break;
176
+ // match semver with state
177
+ case /.+-\d+\.\d+\.\d+[a-zA-Z]+\d*/.test(extension):
178
+ matches = /.+-(\d+\.\d+\.\d+)([a-zA-Z]+)\d*/.exec(
179
+ version_extension
180
+ ) as RegExpExecArray;
181
+ add_script += await utils.joins(
182
+ '\nAdd-Extension',
183
+ ext_name,
184
+ matches[2].replace('preview', 'devel'),
185
+ matches[1]
186
+ );
187
+ break;
188
+ // match 7.2xdebug2 to 7.4xdebug2
189
+ case /7\.[2-4]xdebug2/.test(version_extension):
190
+ add_script += '\nAdd-Extension xdebug stable 2.9.8';
191
+ break;
192
+ // match 5.3pcov to 7.0pcov
193
+ case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
194
+ add_script += await utils.getUnsupportedLog('pcov', version, 'win32');
195
+ break;
196
+ // match 5.3 to 5.6 - mysql, mysqli, mysqlnd
197
+ case /^5\.[3-6](?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(version_extension):
198
+ add_script +=
199
+ '\nAdd-Extension mysql\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
200
+ break;
201
+ // match 7.0 and newer mysql, mysqli and mysqlnd
202
+ case /(?<!5\.[3-6])(?<!pdo_)(mysql|mysqli|mysqlnd)$/.test(
203
+ version_extension
204
+ ):
205
+ add_script += '\nAdd-Extension mysqli\nAdd-Extension mysqlnd';
206
+ break;
207
+ // match sqlite
208
+ case /^sqlite$/.test(extension):
209
+ extension = 'sqlite3';
210
+ add_script += await utils.joins('\nAdd-Extension', extension);
211
+ break;
212
+ default:
213
+ add_script += '\nAdd-Extension ' + extension;
214
+ break;
215
+ }
216
+ });
217
+ return add_script + remove_script;
218
+ }
219
+
220
+ /**
221
+ * Install and enable extensions for linux
222
+ *
223
+ * @param extension_csv
224
+ * @param version
225
+ */
226
+ export async function addExtensionLinux(
227
+ extension_csv: string,
228
+ version: string
229
+ ): Promise<string> {
230
+ const extensions: Array<string> = await utils.extensionArray(extension_csv);
231
+ let add_script = '\n';
232
+ let remove_script = '';
233
+ await utils.asyncForEach(extensions, async function (extension: string) {
234
+ const version_extension: string = version + extension;
235
+ const [ext_name, ext_version]: string[] = extension
236
+ .split(/-(.+)/)
237
+ .filter(Boolean);
238
+ const ext_prefix = await utils.getExtensionPrefix(ext_name);
239
+
240
+ switch (true) {
241
+ // Match :extension
242
+ case /^:/.test(ext_name):
243
+ remove_script += '\ndisable_extension' + ext_name.replace(/:/g, ' ');
244
+ return;
245
+ // Match none
246
+ case /^none$/.test(ext_name):
247
+ add_script += '\ndisable_all_shared';
248
+ return;
249
+ // match extensions for compiling from source
250
+ case /.+-.+\/.+@.+/.test(extension):
251
+ add_script += await utils.parseExtensionSource(extension, ext_prefix);
252
+ return;
253
+ // match 5.3blackfire...8.1blackfire
254
+ // match 5.3blackfire-(semver)...8.1blackfire-(semver)
255
+ // match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
256
+ // match couchbase, geos, pdo_oci, oci8, http, pecl_http
257
+ // match 5.3ioncube...7.4ioncube
258
+ // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
259
+ case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
260
+ version_extension
261
+ ):
262
+ case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
263
+ version_extension
264
+ ):
265
+ case /^couchbase$|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
266
+ extension
267
+ ):
268
+ case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
269
+ case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
270
+ case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
271
+ case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
272
+ add_script += await utils.customPackage(
273
+ ext_name,
274
+ 'extensions',
275
+ extension,
276
+ 'linux'
277
+ );
278
+ return;
279
+ // match pre-release versions. For example - xdebug-beta
280
+ case /.+-(stable|beta|alpha|devel|snapshot|rc|preview)/.test(extension):
281
+ add_script += await utils.joins(
282
+ '\nadd_unstable_extension',
283
+ ext_name,
284
+ ext_version,
285
+ ext_prefix
286
+ );
287
+ return;
288
+ // match semver versions
289
+ case /.+-\d+\.\d+\.\d+.*/.test(extension):
290
+ add_script += await utils.joins(
291
+ '\nadd_pecl_extension',
292
+ ext_name,
293
+ ext_version,
294
+ ext_prefix
295
+ );
296
+ return;
297
+ // match 5.3pcov to 7.0pcov
298
+ case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
299
+ add_script += await utils.getUnsupportedLog('pcov', version, 'linux');
300
+ return;
301
+ // match 7.2xdebug2...7.4xdebug2
302
+ case /^7\.[2-4]xdebug2$/.test(version_extension):
303
+ add_script += await utils.joins(
304
+ '\nadd_pecl_extension',
305
+ 'xdebug',
306
+ '2.9.8',
307
+ ext_prefix
308
+ );
309
+ return;
310
+ // match pdo extensions
311
+ case /^pdo[_-].+/.test(extension):
312
+ extension = extension.replace(/pdo[_-]|3/, '');
313
+ add_script += '\nadd_pdo_extension ' + extension;
314
+ return;
315
+ // match sqlite
316
+ case /^sqlite$/.test(extension):
317
+ extension = 'sqlite3';
318
+ break;
319
+ default:
320
+ break;
321
+ }
322
+ add_script += await utils.joins('\nadd_extension', extension, ext_prefix);
323
+ });
324
+ return add_script + remove_script;
325
+ }
326
+
327
+ /**
328
+ * Install and enable extensions
329
+ *
330
+ * @param extension_csv
331
+ * @param version
332
+ * @param os
333
+ * @param no_step
334
+ */
335
+ export async function addExtension(
336
+ extension_csv: string,
337
+ version: string,
338
+ os: string,
339
+ no_step = false
340
+ ): Promise<string> {
341
+ const log: string = await utils.stepLog('Setup Extensions', os);
342
+ let script = '\n';
343
+ switch (no_step) {
344
+ case true:
345
+ script += log + (await utils.suppressOutput(os));
346
+ break;
347
+ case false:
348
+ default:
349
+ script += log;
350
+ break;
351
+ }
352
+
353
+ switch (os) {
354
+ case 'win32':
355
+ return script + (await addExtensionWindows(extension_csv, version));
356
+ case 'darwin':
357
+ return script + (await addExtensionDarwin(extension_csv, version));
358
+ case 'linux':
359
+ return script + (await addExtensionLinux(extension_csv, version));
360
+ default:
361
+ return await utils.log(
362
+ 'Platform ' + os + ' is not supported',
363
+ os,
364
+ 'error'
365
+ );
366
+ }
367
+ }