[SciPy-dev] Re: scipy_distutils under cygwin using DF

Pearu Peterson pearu at scipy.org
Wed Mar 31 13:25:37 CST 2004



On Wed, 31 Mar 2004, [ISO-8859-15] Berthold Höllmann wrote:

> I just checke out the latest CVS, and now get:
> 
> ---snip---
> hoel at PC021358 ~/unix/work/CVS/scipy/scipy_core
> $ pwd
> /home/hoel/unix/work/CVS/scipy/scipy_core
> 
> hoel at PC021358 ~/unix/work/CVS/scipy/scipy_core
> $ ls -l /home/hoel/unix
> lrwxrwxrwx    1 hoel     Kein           94 Oct 27 14:52 /home/hoel/unix -> /cygdrive/h
> 
> hoel at PC021358 ~/unix/work/CVS/scipy/scipy_core
> $ python
> Enthought Edition build 1028
> Python 2.3 (#46, Aug 11 2003, 09:34:05) [MSC v.1200 32 bit (Intel)] on win32
> Type "help", "copyright", "credits" or "license" for more information.
> >>> import os.path
> >>> os.path.realpath(r'C:\Programme')
> 'C:\\Programme'
> >>> os.path.realpath(r"C:\Programme\Microsoft Visual Studio")
> 'C:\\Programme\\Microsoft Visual Studio'
> >>> os.path.realpath(r"C:\Programme\Microsoft Visual Studio\\")
> 'C:\\Programme\\Microsoft Visual Studio'
> >>> os.path.realpath(r'"C:\Programme\Microsoft Visual Studio\\"')
> 'h:\\work\\CVS\\scipy\\scipy_core\\"C:\\Programme\\Microsoft Visual Studio\\"'
> >>> ^Z
> $
> ---snip---
> 
> >
> > when python was fired up from the H: disk?
> >
> 
> So the problem seems to be, the executable name got quoted to early (I
> think this was my fault, I moved "quote_arg" to an too early position,
> but on I think now it is called again at a wrong position. What I get
> now under WinXP is
> 
> ---snip---
> customize MSVCCompiler
> customize MSVCCompiler using build_clib
> 0
> customize CompaqVisualFCompiler
> customize CompaqVisualFCompiler using build_clib
> splitcmdline('DF /what')
> running build_ext
> No module named msvccompiler
> customize MSVCCompiler
> customize MSVCCompiler using build_ext
> customize CompaqVisualFCompiler
> customize CompaqVisualFCompiler using build_ext
> splitcmdline('DF /what')
> building 'SXFPyBase' extension
> compling C sources
> C:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe /c /nologo /Ox /MD /W3 /GX /DNDEBUG -DDEBUG -DVISUAL_CPLUSPLUS -Ilib\SXFPyBase -I"f:\DATA\FBE\ESC\Devel\include" -Ibuild\src -Ic:\Python23\include-Ic:\Python23\PC /Tcbuild\src\fortranobject.c /Fobuild\temp.win32-2.3\Release\build\src\fortranobject.obj
> Could not locate executable "C:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe"
> Executable "C:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe" does not exist
> 
> error: Command ""C:\Programme\Microsoft Visual Studio\VC98\BIN\cl.exe" /c /nologo /Ox /MD /W3 /GX /DNDEBUG -DDEBUG -DVISUAL_CPLUSPLUS -Ilib\SXFPyBase -I"f:\DATA\FBE\ESC\Devel\include" -Ibuild\src -Ic:\Python23\include -Ic:\Python23\PC /Tcbuild\src\fortranobject.c /Fobuild\temp.win32-2.3\Release\build\src\fortranobject.obj" failed with exit status 1
> make: *** [build] Error 1
> ---snip---
> 
> The line after "compling C sources" looks wrong (should'nt the word
> "compling" in command/build_clib.py be replaced by "compiling" at 4
> instances?) but it comes from CCompiler_spawn and the cl.exe part goes
> properly quoted to exec_command. Maybe the "_nt_quote_args" and the
> part leading to "log.info" should be exchanged for clarity in
> CCompiler_spawn.
> 
> ---snip---
> # Using customized CCompiler.spawn.
> def CCompiler_spawn(self, cmd, display=None):
>     if type(cmd) is type([]) and os.name == 'nt':
>         cmd = _nt_quote_args(cmd)
>     if display is None:
>         display = cmd
>         if type(display) is type([]): display = ' '.join(display)
>     log.info(display)
>     s,o = exec_command(cmd)
>     if s:
>         if type(cmd) is type([]):
>             cmd = ' '.join(cmd)
>         print o
>         raise DistutilsExecError,\
>               'Command "%s" failed with exit status %d' % (cmd, s)
> CCompiler.spawn = new.instancemethod(CCompiler_spawn,None,CCompiler)
> ---snip---


I fixed this issue by removing quotes in find_executable function.
It is in CVS now and seems to work, I was able to build scipy_core
with MSVC 6.0 compiler!


> Back to my problem: It came out to the definition of the include
> directory '-I"f:\DATA\FBE\ESC\Devel\include"'. The execution via
> "cmd.exe" does not like the quotes (") around the include path, so I
> removed them, just to stumble over the next problem:
> 
> "-If:\DATA\FBE\ESC\Devel\include"
> 
> as an option to DF is interpreted as
> "/iface=\DATA\FBE\ESC\Devel\include" and leads to an syntax error in
> DF. Luckily for me, "f:" is a network directory so I can write
> "\\Glf\Vol1\...", but I guess a general solution should be found.
> 
> > Hmm, Python docs say that  os.path.realpath is available only for Unix. 
> > This could provide a fix.
> >
> >> ---snip---
> >>     s,o=exec_command('echo path=%path%')
> >>     log.debug((s,o))
> >>     assert s==0 and o!='',(s,o)
> >> 
> >>     s,o=exec_command('%s -c "import sys;sys.stderr.write(sys.platform)"' \
> >>                      % pythonexe)
> >>     log.debug((s,o))
> >>     assert s==0 and o=='win32',(s,o)
> >> ---snip---
> >> 
> >> With this I get:
> >> 
> >> ---snip---
> >> $ python scipy_distutils/exec_command.py
> >> ...
> >> AssertionError: (0, 'COMMAND \'c:\\\\Python23\\\\PYTHON.EXE -c "import sys;sys.stderr.write(sys.platform)"\' FAILED: win32')
> >> ---snip---
> >> 
> >> The problem is, the test writes to stderr, but a result on stderr
> >> leads "_exec_command" to generate the "... FAILED ..."
> >
> > I think I have fixed that yesterday.
> >
> >
> >> AssertionError: (0, '$AAA')
> >> ---snip---
> >> 
> >> which I also don't understand
> >
> > Ok, I could reproduce this on Sun and this is now fixed in CVS.
> 
> python scipy_distutils/exec_command.py
> 
> OK on Linux and Solaris (except for the failing svn test, but I have
> no svn installed, so this is expected ;-).
> 
> But on WinXP I still get 
> 
> ---snip---
> hoel at PC021358 ~/unix/work/CVS/scipy/scipy_core
> $ python scipy_distutils/exec_command.py
> splitcmdline('a   b  cc')
> splitcmdline('a')
> splitcmdline('a "  b  cc"')
> splitcmdline('"a bcc"  -h')
> splitcmdline('"\\"a \\" bcc" -h')
> splitcmdline(" 'a bcc'  -h")
> splitcmdline("'\\'a \\' bcc' -h")
> Using cygwin echo in win32 environment is not supported
> splitcmdline('c:\\Python23\\PYTHON.EXE -c "import os;print os.environ.get(\'AAA\',\'\')"')
> splitcmdline('c:\\Python23\\PYTHON.EXE -c "import os;print os.environ.get(\'AAA\')"')
> splitcmdline('c:\\Python23\\PYTHON.EXE -c "import os;print os.environ.get(\'BBB\',\'\')"')
> splitcmdline('c:\\Python23\\PYTHON.EXE -c "import os;print os.environ.get(\'BBB\',\'\')"')
> splitcmdline('c:\\Python23\\PYTHON.EXE -c "import os;print os.environ.get(\'BBB\',\'\')"')
> splitcmdline('echo path=%path%')
> splitcmdline('c:\\Python23\\PYTHON.EXE -c "import sys;sys.stderr.write(sys.platform)"')
> Traceback (most recent call last):
>   File "scipy_distutils/exec_command.py", line 601, in ?
>     test(use_tee=0)
>   File "scipy_distutils/exec_command.py", line 502, in test_nt
>     assert s==0 and o=='win32',(s,o)
> AssertionError: (0, 'COMMAND \'c:\\\\Python23\\\\PYTHON.EXE -c "import sys;sys.stderr.write(sys.platform)"\' FAILED: win32')
> ---snip---
>                                    
> maybe line 502 in exec_command.py could be changed to 
> 
> ---snip---
>     assert s==0 and o[-5:]=='win32',(s,o)
> ---snip---

No, that would be cheating;-) Recent CVS seems to fix this issue as well.

Regards,
Pearu




More information about the Scipy-dev mailing list