<pre style='margin:0'>
Mihai Moldovan (Ionic) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/abe46d0764f08fdec9a4923880ce03edbc768a0d">https://github.com/macports/macports-ports/commit/abe46d0764f08fdec9a4923880ce03edbc768a0d</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit abe46d0764f08fdec9a4923880ce03edbc768a0d
</span>Author: Mihai Moldovan <ionic@ionic.de>
AuthorDate: Thu Mar 21 15:52:42 2019 +0100

<span style='display:block; white-space:pre;color:#404040;'>    lang/go: support older OS versions using legacysupport PG.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/58138
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    This adds a simple patch and changes the go build procedure to inject
</span><span style='display:block; white-space:pre;color:#404040;'>    the legacy-support library into all compiled binaries, getting support
</span><span style='display:block; white-space:pre;color:#404040;'>    for 10.9 and probably older OS versions.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Users will have to do the same when compiling go programs, the new note
</span><span style='display:block; white-space:pre;color:#404040;'>    details this process.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    A separate patch is needed to workaround a base bug which won't let
</span><span style='display:block; white-space:pre;color:#404040;'>    ports define environment variables with a quote character in them. Since
</span><span style='display:block; white-space:pre;color:#404040;'>    base is fixed, this is conditional and not used for newer base versions.
</span>---
 lang/go/Portfile                                   | 39 ++++++++++++
 lang/go/files/dist-support-BOOT_GO_LDFLAGS.patch   | 32 ++++++++++
 .../workaround-base-env-issue-GO_EXT_LDFLAGS.patch | 71 ++++++++++++++++++++++
 3 files changed, 142 insertions(+)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/go/Portfile b/lang/go/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index b4326c0..fcc85e0 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/lang/go/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/go/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,6 +2,9 @@
</span> 
 PortSystem          1.0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           legacysupport 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+legacysupport.newest_darwin_requires_legacy 13
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> name                go
 epoch               2
 version             1.12.1
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -62,6 +65,42 @@ build.env           GOROOT_BOOTSTRAP=${prefix}/lib/go-1.4 \
</span>                     GOROOT_FINAL=${GOROOT_FINAL} \
                     CC=${configure.cc}
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+if {${os.platform} eq "darwin" && ${os.major} <= ${legacysupport.newest_darwin_requires_legacy}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # The legacy support PG will not actually change anything in this port directly,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # since go doesn't use the standard CFLAGS/CXXFLAGS.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # We need to patch the build system and set up env variables manually.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append   dist-support-BOOT_GO_LDFLAGS.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[vercmp [macports_version] 2.5.99] >= 0} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        build.env-append  "GO_EXTLINK_ENABLED=1" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          "GO_LDFLAGS=\"-extldflags=${configure.ldflags}\"" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                          "BOOT_GO_LDFLAGS=-extldflags=${configure.ldflags}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        patchfiles-append   workaround-base-env-issue-GO_EXT_LDFLAGS.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        build.env-append    GO_EXTLINK_ENABLED="1" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            GO_EXT_LDFLAGS="${configure.ldflags}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            BOOT_GO_EXT_LDFLAGS="${configure.ldflags}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    notes-append [subst {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    go had to be specially patched and built to work on your platform.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    It likely won't work out of the box when building other projects,\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    so make sure change your environment to use the following variables:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      * GO_EXTLINK_ENABLED="1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    to always force go to use the external gcc or clang linker and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      * GO_LDFLAGS="\\\"-extldflags=${configure.ldflags}\\\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    to force-link any binary against the legacy support library.\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    Use exactly the quoting provided here, even if it may look odd,\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    or compilation will fail.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    Failure to do so will leave you unable to create binaries that use\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    features not natively available on your system, either directly\
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    or through a go core dependency.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> use_parallel_build  no
 
 post-build {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/go/files/dist-support-BOOT_GO_LDFLAGS.patch b/lang/go/files/dist-support-BOOT_GO_LDFLAGS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..f9032bb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/go/files/dist-support-BOOT_GO_LDFLAGS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,32 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/cmd/dist/build.go.old      2019-03-14 20:43:37.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/cmd/dist/build.go  2019-03-19 11:46:25.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -190,6 +190,7 @@ func xinit() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gogcflags = os.Getenv("BOOT_GO_GCFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  goldflags = os.Getenv("BOOT_GO_LDFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   cc, cxx := "gcc", "g++"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if defaultclang {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -646,7 +647,11 @@ func runInstall(dir string, ch chan stru
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           if elem == "go" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   elem = "go_bootstrap"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          link = []string{pathf("%s/link", tooldir), "-o", pathf("%s/%s%s", tooldir, elem, exe)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          link = []string{pathf("%s/link", tooldir)}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if goldflags != "" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  link = append(link, goldflags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          link = append (link, "-o", pathf("%s/%s%s", tooldir, elem, exe))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           targ = len(link) - 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   ttarg := mtime(link[targ])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1237,7 +1242,7 @@ func cmdbootstrap() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  goldflags = os.Getenv("GO_LDFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   goBootstrap := pathf("%s/go_bootstrap", tooldir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   cmdGo := pathf("%s/go", gobin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if debug {
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/lang/go/files/workaround-base-env-issue-GO_EXT_LDFLAGS.patch b/lang/go/files/workaround-base-env-issue-GO_EXT_LDFLAGS.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..ce1c64f
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/lang/go/files/workaround-base-env-issue-GO_EXT_LDFLAGS.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,71 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- src/cmd/dist/build.go.old      2019-03-19 14:24:21.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ src/cmd/dist/build.go  2019-03-19 14:30:14.000000000 +0100
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -38,6 +38,7 @@ var (
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   goextlinkenabled string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gogcflags        string // For running built compiler
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   goldflags        string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  goextldflags     string // Flags passed to external linker, if enabled
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   workdir          string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   tooldir          string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   oldgoos          string
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -191,6 +192,7 @@ func xinit() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gogcflags = os.Getenv("BOOT_GO_GCFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   goldflags = os.Getenv("BOOT_GO_LDFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  goextldflags = os.Getenv("BOOT_GO_EXT_LDFLAGS")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   cc, cxx := "gcc", "g++"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if defaultclang {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -651,6 +653,9 @@ func runInstall(dir string, ch chan stru
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           if goldflags != "" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                   link = append(link, goldflags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          if goextldflags != "" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                  link = append(link, "-extldflags=" + goextldflags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           link = append (link, "-o", pathf("%s/%s%s", tooldir, elem, exe))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           targ = len(link) - 1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1243,6 +1248,7 @@ func cmdbootstrap() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  goextldflags = os.Getenv("GO_EXT_LDFLAGS") // we were using $BOOT_GO_EXT_LDFLAGS until now
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   goBootstrap := pathf("%s/go_bootstrap", tooldir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   cmdGo := pathf("%s/go", gobin)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if debug {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1378,7 +1384,12 @@ func cmdbootstrap() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ func goInstall(goBinary string, args ...string) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  installCmd := []string{goBinary, "install", "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  installCmd := []string{goBinary, "install", "-gcflags=all=" + gogcflags}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if goextldflags != "" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          installCmd = append(installCmd, "-ldflags=all=" + goldflags + " \"-extldflags=" + goextldflags + "\"")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          installCmd = append(installCmd, "-ldflags=all=" + goldflags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if vflag > 0 {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           installCmd = append(installCmd, "-v")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1392,12 +1403,15 @@ func goInstall(goBinary string, args ...
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ func checkNotStale(goBinary string, targets ...string) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  checkCmd := []string{goBinary, "list", "-gcflags=all=" + gogcflags}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  if goextldflags != "" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          checkCmd = append(checkCmd, "-ldflags=all=" + goldflags + " \"-extldflags=" + goextldflags + "\"")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          checkCmd = append(checkCmd, "-ldflags=all=" + goldflags)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  checkCmd = append(checkCmd, "-f={{if .Stale}}\tSTALE {{.ImportPath}}: {{.StaleReason}}{{end}}")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   out := run(goroot, CheckExit,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          append([]string{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  goBinary,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  "list", "-gcflags=all=" + gogcflags, "-ldflags=all=" + goldflags,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                  "-f={{if .Stale}}\tSTALE {{.ImportPath}}: {{.StaleReason}}{{end}}",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-          }, targets...)...)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          append(checkCmd, targets...)...)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if strings.Contains(out, "\tSTALE ") {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           os.Setenv("GODEBUG", "gocachehash=1")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+           for _, target := range []string{"runtime/internal/sys", "cmd/dist", "cmd/link"} {
</span></pre><pre style='margin:0'>

</pre>