testsuite: use `pwd -W` to convert from Unix to Windows paths
authorSimon Marchi <simon.marchi@efficios.com>
Wed, 11 Mar 2020 19:21:19 +0000 (15:21 -0400)
committerSimon Marchi <simon.marchi@efficios.com>
Wed, 11 Mar 2020 19:21:19 +0000 (15:21 -0400)
When on a MinGW host, standard_output_file uses a regular expression to
convert Unix-style paths of the form "/c/foo" to "c:/foo".  This is
needed because the paths we pass to GDB (for example, with the "file"
command) need to be in the Windows form.

However, the regexp only works if your binutils-gdb repo is under a
`/[a-z]/...` path (the Unix paths mapping to Windows drives).
Presumably, that works if you clone the repo in Windows, then access it
through `/c/...`.

In my case, I've cloned the repository directly inside my MinGW shell,
so in /home/smarchi.  The regexp therefore doesn't work for me.  The
path doesn't get transformed, and the file command fails when running
any test:

    (gdb) file /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent
    /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent: No such file or directory.

A safer way to do this is to execute `pwd -W` while in the directory we
want the path for, this is what this patch does.

I have also considered using the using the cygpath utility to do the
conversion.  It can be used to convert any MinGW path into its Windows
equivalent.  Despite originally coming from Cygwin, the cygpath utility
is distributed by MinGW-w64 and can be used in that environment.
However, it's not distributed with the non-MinGW-w64 MinGW.

The `pwd -W` trick only works with directories that exist, which is the
case here, so it's sufficient.

With this, the file command in the test succeeds:

    (gdb) file C:/msys64/home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent
    Reading symbols from C:/msys64/home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent...

gdb/testsuite/ChangeLog:

* lib/gdb.exp (standard_output_file): Use `pwd -W` to convert
from Unix to Windows path.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/gdb.exp

index f98edafbc6654d6b312ae15d2efcba6d2bae3bb4..19114c29366797e2666f7092e60bd8a08eb55596 100644 (file)
@@ -1,3 +1,8 @@
+2020-03-11  Simon Marchi  <simon.marchi@efficios.com>
+
+       * lib/gdb.exp (standard_output_file): Use `pwd -W` to convert
+       from Unix to Windows path.
+
 2020-03-11  Tom de Vries  <tdevries@suse.de>
 
        * gdb.ada/minsyms.exp: Set language to ada.
index 9614e8dc87cd1271d8723d32c258e091fa318b44..9e903ba34776a98312236c728fb9c7c4f9fbe996 100644 (file)
@@ -4899,7 +4899,7 @@ proc standard_output_file {basename} {
     file mkdir $dir
     # If running on MinGW, replace /c/foo with c:/foo
     if { [ishost *-*-mingw*] } {
-        set dir [regsub {^/([a-z])/} $dir {\1:/}]
+        set dir [exec sh -c "cd ${dir} && pwd -W"]
     }
     return [file join $dir $basename]
 }