Windows fix: normalizes extra_incdir, universal_newlines on preproces…#4
Windows fix: normalizes extra_incdir, universal_newlines on preproces…#4per42 wants to merge 3 commits intotarruda:masterfrom
Conversation
| 'cpp', '-nostdinc', '-D__attribute__(x)=', '-I', BUILTIN_HEADERS_DIR, | ||
| ] + extra_cpp_args + ['-'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) | ||
| proc = subprocess.Popen( | ||
| ['cpp', '-nostdinc', '-D__attribute__(x)=', |
There was a problem hiding this comment.
Please avoid making unnecessary code style/spacing changes.
There was a problem hiding this comment.
I exceeded pep8 max line length with the extra argument. Please suggest the style you prefer.
|
python 3.4 test failing :( |
…sor output. When input is a filename without directory, the dirname is empty, which inserts `-I `, instead of ` -I .`, which breaks the command. Remedied with os.path.normpath On Windows with MinGW gcc, preprocessor output has Windows newlines, which pycparser can't handle. Remedied by universal_newlines=True for subprocess. Py3: universal_newlines=True changes `subprocess.communicate` to take and return strings instead of bytes. Adjusted for this. Current master reads input headers as bytes. This causes `code.encode` to fail. Changed `cli` to open files as text fixes this. Tested with `test.py` on Python 2.7 and 3.5 on Windows 10.
| '-I', BUILTIN_HEADERS_DIR] + | ||
| extra_cpp_args + ['-'], | ||
| stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True) | ||
| result = proc.communicate(input=code)[0] |
There was a problem hiding this comment.
communicate should be called only once. doc:
Read data from stdout and stderr, until end-of-file is reached. Wait for process to terminate.
Use universal_newlines to get platform independent source code strings. Note doc:
The type of input must be bytes or, if universal_newlines was True, a string.
communicate() returns a tuple (stdout_data, stderr_data). The data will be bytes or, if universal_newlines was True, strings.
| @click.command() | ||
| @click.argument('infile', type=click.File('rb'), default=sys.stdin) | ||
| @click.argument('outfile', type=click.File('wb'), default=sys.stdout) | ||
| @click.argument('infile', type=click.File(), default=sys.stdin) |
|
Sorry for the big delay in reviewing/merging this. Do you mind rebasing your PR on top of current master? Thanks. |
…sor output.
When input is a filename without directory, the dirname is empty, which inserts
-I, instead of-I ., which breaks the command.Remedied with os.path.normpath
On Windows with MinGW gcc, preprocessor output has Windows newlines, which pycparser can't handle.
Remedied by universal_newlines=True for subprocess.
Py3: universal_newlines=True changes
subprocess.communicateto take and return strings instead of bytes. Adjusted for this.Current master reads input headers as bytes. This causes
code.encodeto fail. Changedclito open files as text fixes this.Tested with
test.pyon Python 2.7 and 3.5 on Windows 10.