mirror of
https://github.com/buserror/mii_emu.git
synced 2024-11-28 10:52:35 +00:00
59 lines
1.3 KiB
Bash
59 lines
1.3 KiB
Bash
#!/bin/bash
|
|
# Generate a JSON file compatible with clangd for indexing. Parses
|
|
# the output of the make process, extract gcc lines, and convert to JSON
|
|
# using (gnu) AWK
|
|
# Join lines that finish by \ -- then split the large command lines around
|
|
# && and ||, then look for gcc, then split and look for a .c argument.
|
|
# when found, populate the compile_commands.json file
|
|
gawk -v dir="$(pwd)" '
|
|
BEGIN {
|
|
acc="";line=0;
|
|
print "[";
|
|
}
|
|
END {
|
|
print "]";
|
|
}
|
|
/\\ *$/ {
|
|
$0 = gensub(/\\ *$/, "", "g", $0);
|
|
acc = acc $0
|
|
next;
|
|
}
|
|
/\|\| *$/ {
|
|
acc = acc $0
|
|
next;
|
|
}
|
|
/^g?make\[([0-9]+)]/ {
|
|
if ($2 != "Entering")
|
|
next;
|
|
dir = gensub(/'\''/, "", "g", $4)
|
|
next;
|
|
}
|
|
{
|
|
acc = acc $0
|
|
acc = gensub(/([^\\])"/, "\\1\\\\\"", "g", acc);
|
|
acc = gensub(/[ \t]+/, " ", "g", acc);
|
|
cnt = split(acc, e, / *\|\| *| *&& */);
|
|
acc = "";
|
|
for (cmd in e) {
|
|
e[cmd] = gensub(/[ |\t]+$/, "", "g", e[cmd]);
|
|
e[cmd] = gensub(/\\"\\"/, "\\\\\"", "g", e[cmd]);
|
|
split(e[cmd], arg, / +/);
|
|
if (!match(arg[1], /g?cc$/))
|
|
continue;
|
|
c_file=""
|
|
for (ai in arg) {
|
|
if (match(arg[ai], /\.c$/)) {
|
|
c_file = arg[ai];
|
|
break;
|
|
}
|
|
}
|
|
if (c_file != "") {
|
|
if (line > 0) printf ",";
|
|
line++;
|
|
printf "{\"directory\":\"%s\",\"file\":\"%s\",\"command\":\"%s\"}\n",
|
|
dir, c_file, e[cmd];
|
|
}
|
|
}
|
|
}
|
|
'
|