diff options
| -rwxr-xr-x | launcher.c | 8 | ||||
| -rwxr-xr-x | setuptools.txt | 4 | ||||
| -rwxr-xr-x | setuptools/cli.exe | bin | 6656 -> 6656 bytes | |||
| -rwxr-xr-x | setuptools/gui.exe | bin | 6656 -> 6656 bytes | |||
| -rw-r--r-- | setuptools/tests/win_script_wrapper.txt | 11 |
5 files changed, 14 insertions, 9 deletions
@@ -129,6 +129,7 @@ char **parse_argv(char *cmdline, int *argc) char *output = cmdline; char c; int nb = 0; + int iq = 0; *argc = 0; result[0] = output; @@ -136,19 +137,20 @@ char **parse_argv(char *cmdline, int *argc) do { c = *cmdline++; - if (!c || isspace(c)) { + if (!c || (isspace(c) && !iq)) { while (nb) {*output++ = '\\'; nb--; } *output++ = 0; result[++*argc] = output; if (!c) return result; while (isspace(*cmdline)) cmdline++; /* skip leading spaces */ + if (!*cmdline) return result; /* avoid empty arg if trailing ws */ continue; } if (c == '\\') ++nb; /* count \'s */ else { if (c == '"') { - if (!(nb & 1)) c = 0; /* skip " unless odd # of \ */ + if (!(nb & 1)) { iq = !iq; c = 0; } /* skip " unless odd # of \ */ nb = nb >> 1; /* cut \'s in half */ } while (nb) {*output++ = '\\'; nb--; } @@ -160,8 +162,6 @@ char **parse_argv(char *cmdline, int *argc) - - int run(int argc, char **argv, int is_gui) { char python[256]; /* python executable's filename*/ diff --git a/setuptools.txt b/setuptools.txt index 22271f62..795cac3a 100755 --- a/setuptools.txt +++ b/setuptools.txt @@ -2606,6 +2606,10 @@ Release Notes/Change History * Fix "eggsecutables" (such as setuptools' own egg) only being runnable with bash-compatible shells. + * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there + was whitespace inside a quoted argument or at the end of the ``#!`` line + (a regression introduced in 0.6c4). + 0.6c5 * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` packages under Python versions less than 2.5. diff --git a/setuptools/cli.exe b/setuptools/cli.exe Binary files differindex 18f23380..3173b2b2 100755 --- a/setuptools/cli.exe +++ b/setuptools/cli.exe diff --git a/setuptools/gui.exe b/setuptools/gui.exe Binary files differindex 2d0b2f26..96521355 100755 --- a/setuptools/gui.exe +++ b/setuptools/gui.exe diff --git a/setuptools/tests/win_script_wrapper.txt b/setuptools/tests/win_script_wrapper.txt index db1a7c3b..9e4dac93 100644 --- a/setuptools/tests/win_script_wrapper.txt +++ b/setuptools/tests/win_script_wrapper.txt @@ -15,6 +15,7 @@ will illustrate this. Let's create a simple script, foo-script.py:
>>> import os, sys, tempfile
+ >>> from setuptools.command.easy_install import nt_quote_arg
>>> sample_directory = tempfile.mkdtemp()
>>> open(os.path.join(sample_directory, 'foo-script.py'), 'w').write(
... """#!%(python_exe)s
@@ -25,7 +26,7 @@ Let's create a simple script, foo-script.py: ... print input
... if __debug__:
... print 'non-optimized'
- ... """ % dict(python_exe=sys.executable))
+ ... """ % dict(python_exe=nt_quote_arg(sys.executable)))
Note that the script starts with a Unix-style '#!' line saying which
Python executable to run. The wrapper will use this to find the
@@ -46,8 +47,8 @@ named out script the way we did. Now we can run out script by running the wrapper:
>>> import os
- >>> input, output = os.popen4(os.path.join(sample_directory, 'foo.exe')
- ... + r' arg1 "arg 2" "arg \"2\\\"" "arg 4\\" "arg5 a\\b')
+ >>> input, output = os.popen4('"'+nt_quote_arg(os.path.join(sample_directory, 'foo.exe'))
+ ... + r' arg1 "arg 2" "arg \"2\\\"" "arg 4\\" "arg5 a\\b"')
>>> input.write('hello\nworld\n')
>>> input.close()
>>> print output.read(),
@@ -86,9 +87,9 @@ enter the interpreter after running the script, you could use -Oi: ... if __debug__:
... print 'non-optimized'
... sys.ps1 = '---'
- ... """ % dict(python_exe=sys.executable))
+ ... """ % dict(python_exe=nt_quote_arg(sys.executable)))
- >>> input, output = os.popen4(os.path.join(sample_directory, 'foo.exe'))
+ >>> input, output = os.popen4(nt_quote_arg(os.path.join(sample_directory, 'foo.exe')))
>>> input.close()
>>> print output.read(),
\foo-script.py
|
