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