From: Mo D. <md...@un...> - 2005-07-29 01:27:42
|
Hello I am trying to use the MSYS-1.0.10.exe release but it seems an env variable related path bug has slipped into the code. The problem is that Win32 paths like "C:/foo" are getting hosed by the msys path conversion code for env vars. Here is an example Makefile that demonstrates the problem. Note that this is execing a native Win32 program that appears on the PATH. $ cat Makefile DIR_NATIVE_BROKEN=C:/msys_new/msys_mingw7/home/Mo/build/thread all: broken broken: TCLLIBPATH="C:/foo $(DIR_NATIVE_BROKEN)" \ tclsh print.tcl $ cat print.tcl puts "env(TCLLIBPATH) is $env(TCLLIBPATH) $ make TCLLIBPATH="C:/foo C:/msys_new/msys_mingw7/home/Mo/build/thread" \ tclsh print.tcl env(TCLLIBPATH) is C;C:\msys_new\msys_mingw7\foo C;C:\msys_new\msys_mingw7\msys_ new\msys_mingw7\home\Mo\build\thread Can anyone suggest a workaround? I can't pass Win32 paths with backslashes to this program. I need for msys to just leave the path alone if it is a valid Win32 native path like "C:/foo". I don't want to have to revert back to msys 1.0.8 (which I know does not contain this bug), but it seems to be my only choice right now. thanks much Mo DeJong |
From: Norman V. <nh...@ca...> - 2005-07-29 01:46:12
|
Mo DeJong writes: > > I am trying to use the MSYS-1.0.10.exe release but it > seems an env variable related path bug has slipped > into the code. The problem is that Win32 paths > like "C:/foo" are getting hosed by the msys path > conversion code for env vars. Here is an example Makefile > that demonstrates the problem. Note that this is execing > a native Win32 program that appears on the PATH. > > > $ make > TCLLIBPATH="C:/foo C:/msys_new/msys_mingw7/home/Mo/build/thread" \ > tclsh print.tcl > env(TCLLIBPATH) is C;C:\msys_new\msys_mingw7\foo C;C:\msys_new\msys_mingw7\msys_ > new\msys_mingw7\home\Mo\build\thread > > > Can anyone suggest a workaround? I can't pass Win32 paths with > backslashes to this program. I need for msys to just > leave the path alone if it is a valid Win32 native path like > "C:/foo". Probably unrelated but ..... I was having similar problems with the gnu autotools munging my path for --build=mingw32 --host=mingw32 projects where I use a mingw32 compiler inside a Cygwin shell I worked around this by modifying one of my cygwin /usr/share/aclocal-1.9 files $ diff -c init.bak init.m4 *** init.bak Sun Jun 26 03:24:26 2005 --- init.m4 Thu Jul 28 09:16:18 2005 *************** *** 39,45 **** # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then ! CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi --- 39,45 ---- # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then ! CYGPATH_W='cygpath -m' else CYGPATH_W=echo fi HTH Norman |
From: Earnie B. <ea...@us...> - 2005-07-29 11:10:50
|
On 1:29:54 am 2005-07-29 Mo DeJong <md...@un...> wrote: > Hello > > I am trying to use the MSYS-1.0.10.exe release but it > seems an env variable related path bug has slipped > into the code. The problem is that Win32 paths > like "C:/foo" are getting hosed by the msys path > conversion code for env vars. Here is an example Makefile > that demonstrates the problem. Note that this is execing > a native Win32 program that appears on the PATH. > > $ cat Makefile > DIR_NATIVE_BROKEN=C:/msys_new/msys_mingw7/home/Mo/build/thread > > all: broken > > broken: > TCLLIBPATH="C:/foo $(DIR_NATIVE_BROKEN)" \ > tclsh print.tcl > > $ cat print.tcl > puts "env(TCLLIBPATH) is $env(TCLLIBPATH) > > > $ make > TCLLIBPATH="C:/foo C:/msys_new/msys_mingw7/home/Mo/build/thread" \ > tclsh print.tcl > env(TCLLIBPATH) is C;C:\msys_new\msys_mingw7\foo C;C:\msys_new\msys_mi > ngw7\msys_ > new\msys_mingw7\home\Mo\build\thread > > > Can anyone suggest a workaround? I can't pass Win32 paths with > backslashes to this program. I need for msys to just > leave the path alone if it is a valid Win32 native path like > "C:/foo". I don't want to have to revert back to msys 1.0.8 > (which I know does not contain this bug), but it seems to be > my only choice right now. > I know where the problem is occurring; it is getting confused in the path list logic. I'll have a look at it. Will having the double quotes as part of the value of TCLLIBPATH work for you? $ make TCLLIBPATH='"c:/foo c:/msys_new/msys_mingw7/home/Mo/build/thread"' \ tclsh print.tcl env(TCLLIBPATH) is "c:/foo c:/msys_new/msys_mingw7/home/Mo/build/thread" Earnie |
From: Earnie B. <ea...@us...> - 2005-07-29 15:48:55
|
On 11:11:23 am 2005-07-29 "Earnie Boyd" <ea...@us...> wrote: > On 1:29:54 am 2005-07-29 Mo DeJong <md...@un...> wrote: > > Hello > > > > I am trying to use the MSYS-1.0.10.exe release but it > > seems an env variable related path bug has slipped > > into the code. The problem is that Win32 paths > > like "C:/foo" are getting hosed by the msys path > > conversion code for env vars. Here is an example Makefile > > that demonstrates the problem. Note that this is execing > > a native Win32 program that appears on the PATH. > > > > $ cat Makefile > > DIR_NATIVE_BROKEN=C:/msys_new/msys_mingw7/home/Mo/build/thread > > > > all: broken > > > > broken: > > TCLLIBPATH="C:/foo $(DIR_NATIVE_BROKEN)" \ > > tclsh print.tcl > > > > $ cat print.tcl > > puts "env(TCLLIBPATH) is $env(TCLLIBPATH) > > > > > > $ make > > TCLLIBPATH="C:/foo C:/msys_new/msys_mingw7/home/Mo/build/thread" \ > > tclsh print.tcl > > env(TCLLIBPATH) is C;C:\msys_new\msys_mingw7\foo > > C;C:\msys_new\msys_mi ngw7\msys_ > > new\msys_mingw7\home\Mo\build\thread > > > > > > Can anyone suggest a workaround? I can't pass Win32 paths with > > backslashes to this program. I need for msys to just > > leave the path alone if it is a valid Win32 native path like > > "C:/foo". I don't want to have to revert back to msys 1.0.8 > > (which I know does not contain this bug), but it seems to be > > my only choice right now. > > > > I know where the problem is occurring; it is getting confused in the > path list logic. I'll have a look at it. > > Will having the double quotes as part of the value of TCLLIBPATH work > for you? > > $ make > TCLLIBPATH='"c:/foo c:/msys_new/msys_mingw7/home/Mo/build/thread"' \ > tclsh print.tcl > env(TCLLIBPATH) is "c:/foo c:/msys_new/msys_mingw7/home/Mo/build/threa > d" > The better work around is to just use \\ instead of /. $ make TCLLIBPATH="c:\\foo c:\\msys_new\\msys_mingw7\\home\\Mo\\build\\thread" \ tclsh print.tcl env(TCLLIBPATH) is c:\foo c:\msys_new\msys_mingw7\home\Mo\build\thread I'm still looking at modifying the code. I now know what to change. Earnie |