xfree86: work around a sdksyms problem with gcc5 on Cygwin
The linemarkers in the preprocessor output from gcc5 on Cygwin have canonicalized paths to included files (e.g. xserver/build/../include/misc.h is canonicalized to xserver/build/include/misc.h). (see gcc svn rev 210264, which causes the transformation performed by -fcanonical-system-headers to be applied to all include pathnames) These canonicalized paths won't match $topdir, so sdksyms doesn't look at the contents of those headers for sdk exported symbols. Workaround this by canonicalizing all the paths we consider, using readlink. v2: Keep a cache of readlink results so it isn't quite so dreadfully slow. Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
ac15d4cecc
commit
bca2216090
|
@ -296,7 +296,7 @@ cat > sdksyms.c << EOF
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
topdir=$1
|
topdir=$(readlink -f $1)
|
||||||
shift
|
shift
|
||||||
LC_ALL=C
|
LC_ALL=C
|
||||||
export LC_ALL
|
export LC_ALL
|
||||||
|
@ -314,11 +314,24 @@ BEGIN {
|
||||||
printf("sdksyms.c:") > "sdksyms.dep";
|
printf("sdksyms.c:") > "sdksyms.dep";
|
||||||
}
|
}
|
||||||
/^# [0-9]+ "/ {
|
/^# [0-9]+ "/ {
|
||||||
# Process text after a include in a relative path or when the
|
# Match preprocessor linemarkers which have the form:
|
||||||
# processed file has a basename matching $top_srcdir.
|
# # linenum "filename" flags
|
||||||
# Note that indexing starts at 1; 0 means no match, and there
|
#
|
||||||
# is a starting ".
|
# Only process text for sdk exports where the linemarker filename has a
|
||||||
sdk = $3 !~ /^"\// || index($3, topdir) == 2;
|
# relative path, or an absolute path matching $top_srcdir.
|
||||||
|
#
|
||||||
|
|
||||||
|
# canonicalize filename
|
||||||
|
if ($3 in canonicalized) {
|
||||||
|
c = canonicalized[$3]
|
||||||
|
} else {
|
||||||
|
cmd = "readlink -f " $3
|
||||||
|
cmd | getline c
|
||||||
|
close(cmd)
|
||||||
|
canonicalized[$3] = c
|
||||||
|
}
|
||||||
|
# note that index() starts at 1; 0 means no match.
|
||||||
|
sdk = $3 !~ /^"\// || index(c, topdir) == 1;
|
||||||
|
|
||||||
if (sdk && $3 ~ /\.h"$/) {
|
if (sdk && $3 ~ /\.h"$/) {
|
||||||
# remove quotes
|
# remove quotes
|
||||||
|
|
Loading…
Reference in New Issue