handle opcache as zend_extension
[m6w6/pecl-ci] / gen-matrix.php
1 <?php
2
3 return new class {
4 function github(array $matrix) {
5 $idx = function($job_id) {
6 static $ids = [];
7
8 $parts = explode("-", $job_id);
9 $count = end($parts);
10 if (is_numeric($count)) {
11 unset($parts[key($parts)]);
12 }
13
14 $base = implode("-", $parts);
15 if (isset($ids[$base])) {
16 $ids[$base]++;
17 } else {
18 $ids[$base] = 0;
19 }
20 $parts[] = $ids[$base];
21
22 return implode("-", $parts);
23 };
24
25 $all_jobs = [];
26 foreach ($matrix as $id => $array) {
27 $jobs = [];
28 foreach ($array as $key => $values) {
29 if (is_numeric($key) && is_string($values)) {
30 // duplicate each job and switch on yes/no
31 if (!$jobs) {
32 $jobs[$idx($id)][$values] = "yes";
33 $jobs[$idx($id)][$values] = "no";
34 } else {
35 foreach (array_keys($jobs) as $job_id) {
36 $jobs[$job_id][$values] = "yes";
37 $job_idx = $idx($job_id);
38 $jobs[$job_idx] = $jobs[$job_id];
39 $jobs[$job_idx][$values] = "no";
40 }
41 }
42 } else if (is_numeric($key) && is_array($values)) {
43 // multiplicate each job for each mutually enabled combination of options
44 $all_mut = [];
45 foreach ($values as $yes) {
46 $mut = [$yes => "yes"];
47 foreach ($values as $no) {
48 if ($yes !== $no) {
49 $mut[$no] = "no";
50 }
51 }
52 $all_mut[] = $mut;
53 }
54
55 if (!$jobs) {
56 foreach ($all_mut as $mut) {
57 $jobs[$idx($id)] = $mut;
58 }
59 } else {
60 foreach (array_keys($jobs) as $job_id) {
61 foreach ($all_mut as $i => $mut) {
62 $mut_job = array_merge($jobs[$job_id], $mut);
63 if ($i == 0) {
64 $jobs[$job_id] = $mut_job;
65 } else {
66 $jobs[$idx($job_id)] = $mut_job;
67 }
68 }
69 }
70 }
71 } else {
72 // multiplicate all jobs for each value
73 if (!$jobs) {
74 foreach ((array) $values as $val) {
75 $jobs[$idx($id)][$key] = $val;
76 }
77 } else {
78 foreach (array_keys($jobs) as $job_id) {
79 foreach ((array) $values as $i => $val) {
80 if ($i == 0) {
81 $jobs[$job_id][$key] = $val;
82 } else {
83 $job_idx = $idx($job_id);
84 $jobs[$job_idx] = $jobs[$job_id];
85 $jobs[$job_idx][$key] = $val;
86 }
87 }
88 }
89 }
90 }
91 }
92 $all_jobs[] = $jobs;
93 }
94 return array_merge(...$all_jobs);
95 }
96 function travis(array $matrix) {
97 $xpc = [];
98 foreach ($matrix as $id => $array) {
99 $apc = [];
100 foreach ($array as $key => $values) {
101 if (is_numeric($key) && is_string($values)) {
102 // switch on yes/no
103 $key = $values;
104 $values = ["no", "yes"];
105 } else if (is_numeric($key) && is_array($values)) {
106 // mutually enabled options
107 $vpc = [];
108 foreach ($values as $yes) {
109 $mpc = "$yes=yes ";
110 foreach ($values as $no) {
111 if ($yes === $no) {
112 continue;
113 }
114 $mpc .= "$no=no ";
115 }
116 $vpc[] = $mpc;
117 }
118 $key = null;
119 $values = $vpc;
120 }
121
122 if (empty($apc)) {
123 // seed
124 foreach ((array) $values as $val) {
125 $apc[] = strlen($key) ? "$key=$val" : $val;
126 }
127 } else {
128 // combine
129 $cpc = $apc;
130 $apc = [];
131 foreach ((array) $values as $val) {
132 foreach ($cpc as $e) {
133 $apc[] = strlen($key) ? "$e $key=$val" : "$e $val";
134 }
135 }
136 }
137 }
138 $xpc[$id] = $apc;
139 }
140 return $xpc;
141 }
142 function __invoke(...$args) {
143 return $this->travis(...$args); // BC
144 }
145 };