1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/^# [0-9][0-9]* /{
file = $3;
gsub(/^"/, "", file);
gsub(/"$/, "", file);
while(sub(/\/\/*[^\/]*\/\.\.\/\/*/, "/", file)) {}
destfile = file;
if (!gsub(/^.*\/gcc\/.*\/include\//, "gcc/", destfile)) {
if (!gsub(/^.*\/include\//, "", destfile)) {
if (!gsub(/^.*\/include-fixed\//, "", destfile)) {
next;
}
}
}
if (file ~ /</) {
next;
}
if (file !~ /\.h$/) {
next;
}
count = 0;
origdestfile = destfile;
while (destfiles[destfile]) {
if (destfiles[destfile] == file) {
break;
}
destfile = count "/" origdestfile;
count++;
}
destfiles[destfile] = file;
copy[file] = destfile;
}
END{
for (key in copy) {
print key, copy[key];
}
}
|
|
|
|
|
>
>
>
|
<
>
>
|
|
<
|
<
>
|
|
|
>
>
|
>
>
<
|
>
>
>
|
>
>
>
>
>
>
|
>
|
>
>
|
>
|
>
>
|
>
>
|
|
|
|
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
/^End of search list/{
in_searchpath = 0;
}
(in_searchpath == 1){
searchpath = $0;
sub(/^ */, "", searchpath);
sub(/ *$/, "", searchpath);
searchpaths[searchidx] = searchpath "/";
searchidx++;
}
/#include <\.\.\.> search starts here:/{
in_searchpath = 1;
searchidx = 0;
}
/^# [0-9][0-9]* /{
file = $3;
sub(/^"/, "", file);
sub(/"$/, "", file);
if (file ~ /</) {
next;
}
if (file !~ /\.h$/) {
next;
}
destfile = file;
longestmatchlen = -1;
for (idx = 0; idx < searchidx; idx++) {
len = length(searchpaths[idx]);
if (substr(destfile, 1, len) == searchpaths[idx]) {
if (len > longestmatchlen) {
longestmatchidx = idx;
longestmatchlen = len;
}
}
}
while(sub(/\/\/*[^\/]*\/\.\.\/\/*/, "/", file)) {}
if (longestmatchlen > 0) {
idx = longestmatchidx;
destfile = substr(destfile, longestmatchlen + 1);
while(sub(/\/\/*[^\/]*\/\.\.\/\/*/, "/", destfile)) {}
} else {
while(sub(/\/\/*[^\/]*\/\.\.\/\/*/, "/", destfile)) {}
if (!sub(/^.*\/include\//, "", destfile)) {
next;
}
}
copy[file,idx] = destfile;
}
END{
for (key in copy) {
split(key, parts, SUBSEP);
src = parts[1];
idx = strtonum(parts[2]);
dest = copy[key];
destcopy[dest,idx] = src;
destcopyfiles[dest] = 1;
}
for (destfile in destcopyfiles) {
outidx = 0;
for (idx = 0; idx < searchidx; idx++) {
if (destcopy[destfile,idx]) {
srcfile = destcopy[destfile,idx];
newcopy[srcfile,outidx] = destfile;
outidx++;
}
}
}
for (key in newcopy) {
split(key, parts, SUBSEP);
if (parts[2] == "0") {
parts[2] = "";
} else {
parts[2] = parts[2] "/";
}
print parts[1], parts[2] newcopy[key];
}
}
|