xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Tue Mar 14 15:53:42 UTC 2017


 hw/xfree86/sdksyms.sh |   25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

New commits:
commit bca221609004aecbcc8928382ad29ce319d2eb6f
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Mon Mar 6 17:44:19 2017 +0000

    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 at redhat.com>

diff --git a/hw/xfree86/sdksyms.sh b/hw/xfree86/sdksyms.sh
index 10909d0..767ce21 100755
--- a/hw/xfree86/sdksyms.sh
+++ b/hw/xfree86/sdksyms.sh
@@ -296,7 +296,7 @@ cat > sdksyms.c << EOF
 
 EOF
 
-topdir=$1
+topdir=$(readlink -f $1)
 shift
 LC_ALL=C
 export LC_ALL
@@ -314,11 +314,24 @@ BEGIN {
     printf("sdksyms.c:") > "sdksyms.dep";
 }
 /^# [0-9]+ "/ {
-    #   Process text after a include in a relative path or when the
-    # processed file has a basename matching $top_srcdir.
-    #   Note that indexing starts at 1; 0 means no match, and there
-    # is a starting ".
-    sdk = $3 !~ /^"\// || index($3, topdir) == 2;
+    # Match preprocessor linemarkers which have the form:
+    # # linenum "filename" flags
+    #
+    # Only process text for sdk exports where the linemarker filename has a
+    # 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"$/) {
 	# remove quotes


More information about the xorg-commit mailing list