<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>