]> Cypherpunks.ru repositories - gostls13.git/commitdiff
misc/cgo/testcshared: reapply CL 451816
authorBryan C. Mills <bcmills@google.com>
Tue, 22 Nov 2022 00:45:46 +0000 (19:45 -0500)
committerGopher Robot <gobot@golang.org>
Tue, 22 Nov 2022 02:27:05 +0000 (02:27 +0000)
I accidentally reverted its edits with a bad cherry-pick in CL 452457.

This should re-fix the windows-.*-newcc builders that regressed at
that change.

Updates #47257.
Updates #35006.
Updates #53540.

Change-Id: I5818416af7c4c8c1593c36aa0198331b42b6c7d7
Reviewed-on: https://go-review.googlesource.com/c/go/+/452675
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

misc/cgo/testcshared/cshared_test.go

index 7bb5a2dba56bf62eef107ec086668f8108686a87..2b572498170f1180884549045e879b4944b3dbcf 100644 (file)
@@ -323,30 +323,46 @@ func createHeaders() error {
                if err != nil {
                        return fmt.Errorf("unable to find dlltool path: %v\n%s\n", err, out)
                }
-               args := []string{strings.TrimSpace(string(out)), "-D", args[6], "-l", libgoname, "-d", "libgo.def"}
-
-               // This is an unfortunate workaround for https://github.com/mstorsjo/llvm-mingw/issues/205 in which
-               // we basically reimplement the contents of the dlltool.sh wrapper: https://git.io/JZFlU
-               dlltoolContents, err := os.ReadFile(args[0])
-               if err != nil {
-                       return fmt.Errorf("unable to read dlltool: %v\n", err)
+               dlltoolpath := strings.TrimSpace(string(out))
+               if filepath.Ext(dlltoolpath) == "" {
+                       // Some compilers report slash-separated paths without extensions
+                       // instead of ordinary Windows paths.
+                       // Try to find the canonical name for the path.
+                       if lp, err := exec.LookPath(dlltoolpath); err == nil {
+                               dlltoolpath = lp
+                       }
                }
-               if bytes.HasPrefix(dlltoolContents, []byte("#!/bin/sh")) && bytes.Contains(dlltoolContents, []byte("llvm-dlltool")) {
-                       base, name := filepath.Split(args[0])
-                       args[0] = filepath.Join(base, "llvm-dlltool")
-                       var machine string
-                       switch prefix, _, _ := strings.Cut(name, "-"); prefix {
-                       case "i686":
-                               machine = "i386"
-                       case "x86_64":
-                               machine = "i386:x86-64"
-                       case "armv7":
-                               machine = "arm"
-                       case "aarch64":
-                               machine = "arm64"
+
+               args := []string{dlltoolpath, "-D", args[6], "-l", libgoname, "-d", "libgo.def"}
+
+               if filepath.Ext(dlltoolpath) == "" {
+                       // This is an unfortunate workaround for
+                       // https://github.com/mstorsjo/llvm-mingw/issues/205 in which
+                       // we basically reimplement the contents of the dlltool.sh
+                       // wrapper: https://git.io/JZFlU.
+                       // TODO(thanm): remove this workaround once we can upgrade
+                       // the compilers on the windows-arm64 builder.
+                       dlltoolContents, err := os.ReadFile(args[0])
+                       if err != nil {
+                               return fmt.Errorf("unable to read dlltool: %v\n", err)
                        }
-                       if len(machine) > 0 {
-                               args = append(args, "-m", machine)
+                       if bytes.HasPrefix(dlltoolContents, []byte("#!/bin/sh")) && bytes.Contains(dlltoolContents, []byte("llvm-dlltool")) {
+                               base, name := filepath.Split(args[0])
+                               args[0] = filepath.Join(base, "llvm-dlltool")
+                               var machine string
+                               switch prefix, _, _ := strings.Cut(name, "-"); prefix {
+                               case "i686":
+                                       machine = "i386"
+                               case "x86_64":
+                                       machine = "i386:x86-64"
+                               case "armv7":
+                                       machine = "arm"
+                               case "aarch64":
+                                       machine = "arm64"
+                               }
+                               if len(machine) > 0 {
+                                       args = append(args, "-m", machine)
+                               }
                        }
                }