components/python/pycparser/patches/find-cpp.patch
author Danek Duvall <danek.duvall@oracle.com>
Tue, 22 Apr 2014 11:35:38 -0700
branchs11-update
changeset 3112 a014dcb790bf
permissions -rw-r--r--
PSARC/2014/108 pycparser: complete C99 parser in pure Python 18468557 integrate pycparser
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3112
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     1
Solaris doesn't deliver a /usr/bin/cpp.  We have our own cpp in
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     2
/usr/lib/cpp, and we deliver GNU cpp in /usr/bin/gcpp, but we might not
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     3
find those simply by looking in $PATH.  So if we fail, try extra hard to
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     4
execute another cpp.  We try GNU's first, since it's more likely what folks
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     5
using pycparser will expect (for instance, it handles C++-style comments).
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     6
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     7
--- pycparser-2.10/pycparser/__init__.py	Sat Aug  3 06:05:22 2013
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     8
+++ pycparser-2.10/pycparser/__init__.py	Fri Apr 11 14:58:36 2014
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
     9
@@ -10,6 +10,7 @@
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    10
 __all__ = ['c_lexer', 'c_parser', 'c_ast']
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    11
 __version__ = '2.10'
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    12
 
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    13
+import errno
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    14
 from subprocess import Popen, PIPE
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    15
 from .c_parser import CParser
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    16
 
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    17
@@ -28,29 +29,41 @@
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    18
         When successful, returns the preprocessed file's contents.
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    19
         Errors from cpp will be printed out.
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    20
     """
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    21
-    path_list = [cpp_path]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    22
-    if isinstance(cpp_args, list):
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    23
-        path_list += cpp_args
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    24
-    elif cpp_args != '':
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    25
-        path_list += [cpp_args]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    26
-    path_list += [filename]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    27
+    cpp_list = [cpp_path, "/usr/bin/gcpp", "/usr/lib/cpp"]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    28
 
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    29
-    try:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    30
-        # Note the use of universal_newlines to treat all newlines
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    31
-        # as \n for Python's purpose
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    32
-        #
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    33
-        pipe = Popen(   path_list,
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    34
-                        stdout=PIPE,
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    35
-                        universal_newlines=True)
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    36
-        text = pipe.communicate()[0]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    37
-    except OSError as e:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    38
+    for cpp_path in cpp_list:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    39
+        path_list = [cpp_path]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    40
+        if isinstance(cpp_args, list):
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    41
+            path_list += cpp_args
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    42
+        elif cpp_args != '':
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    43
+            path_list += [cpp_args]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    44
+        path_list += [filename]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    45
+
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    46
+        try:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    47
+            # Note the use of universal_newlines to treat all newlines
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    48
+            # as \n for Python's purpose
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    49
+            #
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    50
+            pipe = Popen(   path_list,
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    51
+                            stdout=PIPE,
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    52
+                            universal_newlines=True)
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    53
+            text = pipe.communicate()[0]
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    54
+        except OSError as e:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    55
+            # If cpp couldn't be found, just try the next one.
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    56
+            if e.errno == errno.ENOENT:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    57
+                continue
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    58
+            # If we ran into some other error, raise a RuntimeError.
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    59
+            raise RuntimeError("Unable to invoke 'cpp'.\n" +
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    60
+                ('Original error: %s' % e))
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    61
+
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    62
+        return text
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    63
+
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    64
+    else:
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    65
+        # If we couldn't find a cpp, then raise a RuntimeError.
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    66
         raise RuntimeError("Unable to invoke 'cpp'.  " +
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    67
             'Make sure its path was passed correctly\n' +
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    68
             ('Original error: %s' % e))
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    69
 
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    70
-    return text
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    71
 
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    72
-
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    73
 def parse_file(filename, use_cpp=False, cpp_path='cpp', cpp_args='',
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    74
                parser=None):
a014dcb790bf PSARC/2014/108 pycparser: complete C99 parser in pure Python
Danek Duvall <danek.duvall@oracle.com>
parents:
diff changeset
    75
     """ Parse a C file using pycparser.