Skip to content

Commit 6e32672

Browse files
committed
better deduplicate_flags
1 parent 4f76942 commit 6e32672

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

src/globals/functions.php

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,10 +256,30 @@ function clean_spaces(string $string): string
256256
*/
257257
function deduplicate_flags(string $flags): string
258258
{
259-
$tokens = preg_split('/\s+/', trim($flags));
259+
// Flags that take their value as a separate token.
260+
static $paired = [
261+
'-Xclang', '-Xpreprocessor', '-Xlinker', '-Xassembler',
262+
'-framework', '-arch', '-target',
263+
'-include', '-imacros', '-isystem', '-isysroot', '-iquote', '-idirafter',
264+
'-MT', '-MF', '-MQ',
265+
];
266+
267+
$tokens = preg_split('/\s+/', trim($flags)) ?: [];
268+
269+
// Group paired flag+value into a single atom before dedup.
270+
$atoms = [];
271+
$n = count($tokens);
272+
for ($i = 0; $i < $n; ++$i) {
273+
if (in_array($tokens[$i], $paired, true) && $i + 1 < $n) {
274+
$atoms[] = $tokens[$i] . ' ' . $tokens[$i + 1];
275+
++$i;
276+
} else {
277+
$atoms[] = $tokens[$i];
278+
}
279+
}
260280

261281
// Reverse, unique, reverse back - keeps last occurrence of duplicates
262-
$deduplicated = array_reverse(array_unique(array_reverse($tokens)));
282+
$deduplicated = array_reverse(array_unique(array_reverse($atoms)));
263283

264284
return implode(' ', $deduplicated);
265285
}

0 commit comments

Comments
 (0)