* [PATCH 0/3] WIP: Go-lang @ 2016-01-12 16:31 Efraim Flashner 2016-01-12 16:31 ` [PATCH 1/3] gnu: gccgo: Update to 4.9 Efraim Flashner ` (4 more replies) 0 siblings, 5 replies; 19+ messages in thread From: Efraim Flashner @ 2016-01-12 16:31 UTC (permalink / raw) To: guix-devel It seems there's a lot of interest around getting Go packaged in Guix, so I figured I should post my work so far to the mailinglist. Currently go-1.4 does not have cgo enabled, the go binary keeps on trying to link against libgcc_s.so.1 (from gcc:lib) and can't find it in the RUNPATH. Also, the tests are disabled. Nix has a whole slew of changes to the test suite to remove tests that call out to the internet and to change tests that call /bin/{hostname,pwd} and others. Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 it should be working too. I wanted to write the go-build-system before submitting, but everything I know about go I learned while packaging it, so it doesn't seem fair to have everyone wait while I prepare a build system that could be missing crucial features. I still intend to work on the build system; I'm probably just psyching myself out about it :). Efraim Flashner (3): gnu: gccgo: Update to 4.9. gnu: Add go-1.4. gnu: Add go-1.5. gnu-system.am | 1 + gnu/packages/gcc.scm | 4 +- gnu/packages/golang.scm | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/golang.scm -- 2.7.0.rc3 ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 1/3] gnu: gccgo: Update to 4.9. 2016-01-12 16:31 [PATCH 0/3] WIP: Go-lang Efraim Flashner @ 2016-01-12 16:31 ` Efraim Flashner 2016-01-14 15:09 ` Ludovic Courtès 2016-01-12 16:31 ` [PATCH 2/3] gnu: Add go-1.4 Efraim Flashner ` (3 subsequent siblings) 4 siblings, 1 reply; 19+ messages in thread From: Efraim Flashner @ 2016-01-12 16:31 UTC (permalink / raw) To: guix-devel * gnu/packages/gcc.scm (gccgo): Update to 4.9. --- gnu/packages/gcc.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm index 2848e43..e336967 100644 --- a/gnu/packages/gcc.scm +++ b/gnu/packages/gcc.scm @@ -440,8 +440,8 @@ using compilers other than GCC." (define-public gfortran-5 (custom-gcc gcc-5 "gfortran" '("fortran"))) -(define-public gccgo-4.8 - (custom-gcc gcc-4.8 "gccgo" '("go") +(define-public gccgo-4.9 + (custom-gcc gcc-4.9 "gccgo" '("go") ;; Suppress the separate "lib" output, because otherwise the ;; "lib" and "out" outputs would refer to each other, creating ;; a cyclic dependency. <http://debbugs.gnu.org/18101> -- 2.7.0.rc3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 1/3] gnu: gccgo: Update to 4.9. 2016-01-12 16:31 ` [PATCH 1/3] gnu: gccgo: Update to 4.9 Efraim Flashner @ 2016-01-14 15:09 ` Ludovic Courtès 0 siblings, 0 replies; 19+ messages in thread From: Ludovic Courtès @ 2016-01-14 15:09 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Efraim Flashner <efraim@flashner.co.il> skribis: > * gnu/packages/gcc.scm (gccgo): Update to 4.9. OK. Ludo'. ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 2/3] gnu: Add go-1.4. 2016-01-12 16:31 [PATCH 0/3] WIP: Go-lang Efraim Flashner 2016-01-12 16:31 ` [PATCH 1/3] gnu: gccgo: Update to 4.9 Efraim Flashner @ 2016-01-12 16:31 ` Efraim Flashner 2016-01-14 15:12 ` Ludovic Courtès 2016-01-12 16:31 ` [PATCH 3/3] gnu: Add go-1.5 Efraim Flashner ` (2 subsequent siblings) 4 siblings, 1 reply; 19+ messages in thread From: Efraim Flashner @ 2016-01-12 16:31 UTC (permalink / raw) To: guix-devel * gnu/packages/golang.scm: New file. * gnu-system.am (GNU_SYSTEM_MODULES): Add golang.scm. --- gnu-system.am | 1 + gnu/packages/golang.scm | 94 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 gnu/packages/golang.scm diff --git a/gnu-system.am b/gnu-system.am index 7105e13..1b5c1ed 100644 --- a/gnu-system.am +++ b/gnu-system.am @@ -137,6 +137,7 @@ GNU_SYSTEM_MODULES = \ gnu/packages/gnustep.scm \ gnu/packages/gnuzilla.scm \ gnu/packages/gnu-pw-mgr.scm \ + gnu/packages/golang.scm \ gnu/packages/gperf.scm \ gnu/packages/gprolog.scm \ gnu/packages/gps.scm \ diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm new file mode 100644 index 0000000..cb1cbc1 --- /dev/null +++ b/gnu/packages/golang.scm @@ -0,0 +1,94 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 Efraim Flashner <efraim@flashner.co.il> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (gnu packages golang) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix utils) + #:use-module (guix download) + #:use-module (guix packages) + #:use-module (guix build-system gnu) + #:use-module (gnu packages gcc) + #:use-module (gnu packages perl)) + +;; According to https://golang.org/doc/install/gccgo, gccgo-4.8.2 includes a +;; complete go-1.1.2 implementation, gccgo-4.9 includes a complete go-1.2 +;; implementation, and gccgo-5 a complete implementation of go-1.4. Ultimately +;; we hope to build go-1.5 with a bootstrap process using gccgo-5. As of +;; go-1.5, go cannot be bootstrapped without go-1.4, so we need to use go-1.4 or +;; gccgo-5. Mips is not officially supported, but it should work if it is +;; bootstrapped. + +(define-public go-1.4 + (package + (name "go") + (version "1.4.3") + (source + (origin + (method url-fetch) + (uri (string-append "https://storage.googleapis.com/golang/go" + version ".src.tar.gz")) + (sha256 + (base32 + "0na9yqilzpvq0bjndbibfp07wr796gf252y471cip10bbdqgqiwr")))) + (build-system gnu-build-system) + (outputs '("out" "doc" "tests")) + (arguments + `(#:phases + (modify-phases %standard-phases + (delete 'configure) + (add-after 'patch-generated-file-shebangs 'chdir + (lambda _ (chdir "src"))) + (replace 'build + (let* ((bash (assoc-ref %build-inputs "bash")) + (gccgo (assoc-ref %build-inputs "gccgo")) + (output (assoc-ref %outputs "out"))) + (setenv "CC" "gcc") + (setenv "GOROOT" (getcwd)) + (setenv "GOROOT_BOOTSTRAP" gccgo) + (setenv "GOROOT_FINAL" output) + (setenv "CGO_ENABLED" "0") + (lambda _ + ;; all.bash includes the tests, which fail because they require + ;; network access, and access to /bin + (zero? (system* (string-append bash "/bin/bash") "make.bash"))))) + (replace 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((output (assoc-ref outputs "out")) + (docs (assoc-ref outputs "doc")) + (tests (assoc-ref outputs "tests"))) + (copy-recursively "../test" tests) + (delete-file-recursively "../test") + (copy-recursively "../api" (string-append docs "/api")) + (delete-file-recursively "../api") + (copy-recursively "../doc" (string-append docs "/doc")) + (delete-file-recursively "../doc") + (copy-recursively "../" output))))) + #:tests? #f)) + (native-inputs + `(("gccgo" ,gccgo-4.9) + ("perl" ,perl))) + (home-page "https://golang.org/") + (synopsis "Compiled, statically typed language developed by Google") + (description "Go, also commonly referred to as golang, is a programming + language developed at Google. Designed primarily for systems programming, it + is a compiled, statically typed language in the tradition of C and C++, with +garbage collection, various safety features and CSP-style concurrent programming +features added.") + (license license:bsd-3))) + +(define-public go go-1.4) -- 2.7.0.rc3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] gnu: Add go-1.4. 2016-01-12 16:31 ` [PATCH 2/3] gnu: Add go-1.4 Efraim Flashner @ 2016-01-14 15:12 ` Ludovic Courtès 2016-01-14 21:12 ` Efraim Flashner 0 siblings, 1 reply; 19+ messages in thread From: Ludovic Courtès @ 2016-01-14 15:12 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Efraim Flashner <efraim@flashner.co.il> skribis: > * gnu/packages/golang.scm: New file. > * gnu-system.am (GNU_SYSTEM_MODULES): Add golang.scm. [...] > + (replace 'build > + (let* ((bash (assoc-ref %build-inputs "bash")) > + (gccgo (assoc-ref %build-inputs "gccgo")) > + (output (assoc-ref %outputs "out"))) > + (setenv "CC" "gcc") > + (setenv "GOROOT" (getcwd)) > + (setenv "GOROOT_BOOTSTRAP" gccgo) > + (setenv "GOROOT_FINAL" output) > + (setenv "CGO_ENABLED" "0") > + (lambda _ > + ;; all.bash includes the tests, which fail because they require > + ;; network access, and access to /bin > + (zero? (system* (string-append bash "/bin/bash") "make.bash"))))) Why not: (replace 'build (lambda* (#:key inputs #:allow-other-keys) (let ((bash …) …) … (zero? (system* …))))) ? > + (synopsis "Compiled, statically typed language developed by Google") > + (description "Go, also commonly referred to as golang, is a programming > + language developed at Google. Designed primarily for systems programming, it > + is a compiled, statically typed language in the tradition of C and C++, with > +garbage collection, various safety features and CSP-style concurrent programming > +features added.") I would remove “developed by Google” and focus on the technical characteristics. Also, what’s CSP-style? :-) Thanks! Ludo’. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] gnu: Add go-1.4. 2016-01-14 15:12 ` Ludovic Courtès @ 2016-01-14 21:12 ` Efraim Flashner 2016-01-15 16:14 ` Ludovic Courtès 0 siblings, 1 reply; 19+ messages in thread From: Efraim Flashner @ 2016-01-14 21:12 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 2313 bytes --] On Thu, 14 Jan 2016 16:12:35 +0100 ludo@gnu.org (Ludovic Courtès) wrote: > Efraim Flashner <efraim@flashner.co.il> skribis: > > [...] > > [...] > > > + (replace 'build > > + (let* ((bash (assoc-ref %build-inputs "bash")) > > + (gccgo (assoc-ref %build-inputs "gccgo")) > > + (output (assoc-ref %outputs "out"))) > > + (setenv "CC" "gcc") > > + (setenv "GOROOT" (getcwd)) > > + (setenv "GOROOT_BOOTSTRAP" gccgo) > > + (setenv "GOROOT_FINAL" output) > > + (setenv "CGO_ENABLED" "0") > > + (lambda _ > > + ;; all.bash includes the tests, which fail because they require > > + ;; network access, and access to /bin > > + (zero? (system* (string-append bash "/bin/bash") "make.bash"))))) > > Why not: > > (replace 'build > (lambda* (#:key inputs #:allow-other-keys) > (let ((bash …) …) > … > (zero? (system* …))))) > > ? I got that one the same time I changed go-1.5 :) > > + (synopsis "Compiled, statically typed language developed by Google") > > + (description "Go, also commonly referred to as golang, is a programming > > + language developed at Google. Designed primarily for systems programming, it > > + is a compiled, statically typed language in the tradition of C and C++, with > > +garbage collection, various safety features and CSP-style concurrent programming > > +features added.") > > I would remove “developed by Google” and focus on the technical > characteristics. > > Also, what’s CSP-style? :-) I have no idea :) I scanned golang.org but didn't see anything that looked usable, so I hit up Wikipedia and that's what it spit out. It seems wikipedia says: https://en.wikipedia.org/wiki/Communicating_sequential_processes "In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems." > > Thanks! > > Ludo’. :) -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 2/3] gnu: Add go-1.4. 2016-01-14 21:12 ` Efraim Flashner @ 2016-01-15 16:14 ` Ludovic Courtès 0 siblings, 0 replies; 19+ messages in thread From: Ludovic Courtès @ 2016-01-15 16:14 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Efraim Flashner <efraim@flashner.co.il> skribis: > On Thu, 14 Jan 2016 16:12:35 +0100 > ludo@gnu.org (Ludovic Courtès) wrote: [...] >> Also, what’s CSP-style? :-) > > I have no idea :) I scanned golang.org but didn't see anything that looked > usable, so I hit up Wikipedia and that's what it spit out. It seems wikipedia > says: https://en.wikipedia.org/wiki/Communicating_sequential_processes "In > computer science, communicating sequential processes (CSP) is a formal > language for describing patterns of interaction in concurrent systems." Oh, interesting! It might be worth replacing “CSP-style” in the description with “in the style of communicating sequential processes (CSP)”. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 19+ messages in thread
* [PATCH 3/3] gnu: Add go-1.5. 2016-01-12 16:31 [PATCH 0/3] WIP: Go-lang Efraim Flashner 2016-01-12 16:31 ` [PATCH 1/3] gnu: gccgo: Update to 4.9 Efraim Flashner 2016-01-12 16:31 ` [PATCH 2/3] gnu: Add go-1.4 Efraim Flashner @ 2016-01-12 16:31 ` Efraim Flashner 2016-01-12 20:25 ` Ricardo Wurmus 2016-01-14 15:13 ` Ludovic Courtès 2016-01-14 15:08 ` [PATCH 0/3] WIP: Go-lang Ludovic Courtès 2016-01-14 19:17 ` Jeff Mickey 4 siblings, 2 replies; 19+ messages in thread From: Efraim Flashner @ 2016-01-12 16:31 UTC (permalink / raw) To: guix-devel * gnu/packages/golang.scm (go-1.5): New variable. --- gnu/packages/golang.scm | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/gnu/packages/golang.scm b/gnu/packages/golang.scm index cb1cbc1..6f281cf 100644 --- a/gnu/packages/golang.scm +++ b/gnu/packages/golang.scm @@ -91,4 +91,34 @@ garbage collection, various safety features and CSP-style concurrent programming features added.") (license license:bsd-3))) -(define-public go go-1.4) +(define-public go-1.5 + (package (inherit go-1.4) + (version "1.5.2") + (source + (origin + (method url-fetch) + (uri (string-append "https://storage.googleapis.com/golang/go" + version ".src.tar.gz")) + (sha256 + (base32 + "0x3sk32ym93hnc0yk6bnra226f92qvixia6kwcf68q84q0jddpgk")))) + (arguments + (substitute-keyword-arguments (package-arguments go-1.4) + ((#:phases phases) + `(modify-phases ,phases + (replace 'build + (let* ((bash (assoc-ref %build-inputs "bash")) + (go14 (assoc-ref %build-inputs "go-1.4")) + (output (assoc-ref %outputs "out"))) + (setenv "CC" "gcc") + (setenv "GOPATH" (string-append (getcwd) "/go")) + (setenv "GOROOT_BOOTSTRAP" go14) + (setenv "GOROOT_FINAL" output) + (lambda _ + (zero? + (system* (string-append bash "/bin/bash") "make.bash"))))))))) + (native-inputs + `(("go-1.4" ,go-1.4) + ("perl" ,perl))))) + +(define-public go go-1.5) -- 2.7.0.rc3 ^ permalink raw reply related [flat|nested] 19+ messages in thread
* Re: [PATCH 3/3] gnu: Add go-1.5. 2016-01-12 16:31 ` [PATCH 3/3] gnu: Add go-1.5 Efraim Flashner @ 2016-01-12 20:25 ` Ricardo Wurmus 2016-01-13 9:36 ` Efraim Flashner 2016-01-14 15:13 ` Ludovic Courtès 1 sibling, 1 reply; 19+ messages in thread From: Ricardo Wurmus @ 2016-01-12 20:25 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Efraim Flashner <efraim@flashner.co.il> writes: > * gnu/packages/golang.scm (go-1.5): New variable. [...] > + (arguments > + (substitute-keyword-arguments (package-arguments go-1.4) > + ((#:phases phases) > + `(modify-phases ,phases > + (replace 'build > + (let* ((bash (assoc-ref %build-inputs "bash")) > + (go14 (assoc-ref %build-inputs "go-1.4")) > + (output (assoc-ref %outputs "out"))) > + (setenv "CC" "gcc") > + (setenv "GOPATH" (string-append (getcwd) "/go")) > + (setenv "GOROOT_BOOTSTRAP" go14) > + (setenv "GOROOT_FINAL" output) > + (lambda _ > + (zero? > + (system* (string-append bash "/bin/bash") "make.bash"))))))))) This looks weird. Shouldn’t the “let” and the “setenv” be inside the “lambda”? (BTW: this is a perfect usecase for “M-x paredit-convolute-sexp”, after placing point before “(zero?”.) I think you could do this instead: `(modify-phases ,phases (replace 'build (lambda* (#:key inputs outputs #:allow-other-keys) (let ((go14 (assoc-ref inputs "go-1.4")) (output (assoc-ref outputs "out"))) (setenv "CC" "gcc") (setenv "GOPATH" (string-append (getcwd) "/go")) (setenv "GOROOT_BOOTSTRAP" go14) (setenv "GOROOT_FINAL" output) (zero? (system* "bash" "make.bash")))))) ~~ Ricardo ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/3] gnu: Add go-1.5. 2016-01-12 20:25 ` Ricardo Wurmus @ 2016-01-13 9:36 ` Efraim Flashner 0 siblings, 0 replies; 19+ messages in thread From: Efraim Flashner @ 2016-01-13 9:36 UTC (permalink / raw) To: Ricardo Wurmus; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 2001 bytes --] On Tue, 12 Jan 2016 21:25:37 +0100 Ricardo Wurmus <rekado@elephly.net> wrote: > Efraim Flashner <efraim@flashner.co.il> writes: > > [...] > > [...] > > > + (arguments > > + (substitute-keyword-arguments (package-arguments go-1.4) > > + ((#:phases phases) > > + `(modify-phases ,phases > > + (replace 'build > > + (let* ((bash (assoc-ref %build-inputs "bash")) > > + (go14 (assoc-ref %build-inputs "go-1.4")) > > + (output (assoc-ref %outputs "out"))) > > + (setenv "CC" "gcc") > > + (setenv "GOPATH" (string-append (getcwd) "/go")) > > + (setenv "GOROOT_BOOTSTRAP" go14) > > + (setenv "GOROOT_FINAL" output) > > + (lambda _ > > + (zero? > > + (system* (string-append bash "/bin/bash") "make.bash"))))))))) > > This looks weird. Shouldn’t the “let” and the “setenv” be inside the > “lambda”? (BTW: this is a perfect usecase for “M-x > paredit-convolute-sexp”, after placing point before “(zero?”.) > > I think you could do this instead: > > `(modify-phases ,phases > (replace 'build > (lambda* (#:key inputs outputs #:allow-other-keys) > (let ((go14 (assoc-ref inputs "go-1.4")) > (output (assoc-ref outputs "out"))) > (setenv "CC" "gcc") > (setenv "GOPATH" (string-append (getcwd) "/go")) > (setenv "GOROOT_BOOTSTRAP" go14) > (setenv "GOROOT_FINAL" output) > (zero? (system* "bash" "make.bash")))))) > > ~~ Ricardo > This looks better than before, and having the lambda earlier is better/safer. I've applied the same change to go-1.4 also. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 3/3] gnu: Add go-1.5. 2016-01-12 16:31 ` [PATCH 3/3] gnu: Add go-1.5 Efraim Flashner 2016-01-12 20:25 ` Ricardo Wurmus @ 2016-01-14 15:13 ` Ludovic Courtès 1 sibling, 0 replies; 19+ messages in thread From: Ludovic Courtès @ 2016-01-14 15:13 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Efraim Flashner <efraim@flashner.co.il> skribis: > * gnu/packages/golang.scm (go-1.5): New variable. I agree with Ricardo’s comment, nothing to add! Thanks, Ludo’. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-12 16:31 [PATCH 0/3] WIP: Go-lang Efraim Flashner ` (2 preceding siblings ...) 2016-01-12 16:31 ` [PATCH 3/3] gnu: Add go-1.5 Efraim Flashner @ 2016-01-14 15:08 ` Ludovic Courtès 2016-01-14 19:14 ` Jeff Mickey ` (2 more replies) 2016-01-14 19:17 ` Jeff Mickey 4 siblings, 3 replies; 19+ messages in thread From: Ludovic Courtès @ 2016-01-14 15:08 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel Efraim Flashner <efraim@flashner.co.il> skribis: > It seems there's a lot of interest around getting Go packaged in Guix, so I > figured I should post my work so far to the mailinglist. Currently go-1.4 > does not have cgo enabled, the go binary keeps on trying to link against > libgcc_s.so.1 (from gcc:lib) and can't find it in the RUNPATH. In GCC, we have a hack that automatically adds gcc:lib to the RUNPATH (look for “libgcc_s” in gcc.scm.) I guess we need to do something similar here. > Also, the tests are disabled. Nix has a whole slew of changes to the > test suite to remove tests that call out to the internet and to change > tests that call /bin/{hostname,pwd} and others. OTOH, unless I’m mistaken, Nixpkgs does not run the test suite of Go (and of most packages; specifically, ‘stdenv.mkDerivation’ has a ‘doCheck’ parameter, which is unset by default, meaning that the ‘check’ phase is skipped unless ‘doCheck = true’ is explicitly given.) > Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm > pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 > it should be working too. Nice! Thanks for all the work! Ludo’. ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-14 15:08 ` [PATCH 0/3] WIP: Go-lang Ludovic Courtès @ 2016-01-14 19:14 ` Jeff Mickey 2016-01-14 21:40 ` Efraim Flashner 2016-01-14 21:37 ` Leo Famulari 2016-01-14 21:42 ` Efraim Flashner 2 siblings, 1 reply; 19+ messages in thread From: Jeff Mickey @ 2016-01-14 19:14 UTC (permalink / raw) To: Ludovic Courtès, Efraim Flashner; +Cc: guix-devel * Ludovic Courtès <ludo@gnu.org> [2016-01-14 07:08]: > Efraim Flashner <efraim@flashner.co.il> skribis: > >> It seems there's a lot of interest around getting Go packaged in Guix, so I >> figured I should post my work so far to the mailinglist. Currently go-1.4 >> does not have cgo enabled, the go binary keeps on trying to link against >> libgcc_s.so.1 (from gcc:lib) and can't find it in the RUNPATH. > > In GCC, we have a hack that automatically adds gcc:lib to the RUNPATH > (look for “libgcc_s” in gcc.scm.) I guess we need to do something > similar here. Aha - ok, I've had the same problem! I've tried injecting it many ways and it doesn't work due to the intersection of libgcc_s and glibc. Efraim - can you successfully run programs that link against glibc? As in anything that uses os/user, net, etc? Running the tests as part of your build is a big way to pick up on this, I've added the following to my go-1.4.3 attempts in my build steps: ;; these all have specific file locations they look for ;; or in the case of exec_test resets the environment ;; before executing binaries they expect. (for-each delete-file '("src/net/multicast_test.go" "src/net/parse_test.go" "src/net/port_test.go" "src/os/exec/exec_test.go")) (substitute* "src/os/os_test.go" (("/bin/pwd") (which "pwd")) (("/usr/bin") (dirname (which "pwd"))) (("TestHostname") "areturn")) ;; Disable the unix socket test (substitute* "src/net/net_test.go" (("TestShutdownUnix") "areturn")) (substitute* "src/net/lookup_unix.go" (("/etc/protocols") (string-append iana "protocols"))) ;; ParseInLocation fails the test (substitute* "src/time/format_test.go" (("TestParseInSydney") "areturn")) (substitute* "src/time/zoneinfo_unix.go" (("/usr/share/zoneinfo/") tz)) ;; exec.Command on os.Args[0] from go run for whatever ;; reason doesn't work right now. libgcc_s.so link ;; missing crap occurs here as well, this may require ;; that 6l-wrapper for go run to work. (substitute* "src/syscall/syscall_unix_test.go" (("TestPassFD") "areturn")) (substitute* "src/cmd/6l/asm.c" (("char linuxdynld.*$") (string-append "char linuxdynld[] = \"" ld-linux "\";\n"))) I'll be trying this later with your packages. I'd really hesitate on packaging this without runnning the tests, as there are lots of ugly corner cases in go's build system. // codemac ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-14 19:14 ` Jeff Mickey @ 2016-01-14 21:40 ` Efraim Flashner 0 siblings, 0 replies; 19+ messages in thread From: Efraim Flashner @ 2016-01-14 21:40 UTC (permalink / raw) To: Jeff Mickey; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 5314 bytes --] On Thu, 14 Jan 2016 11:14:50 -0800 Jeff Mickey <j@codemac.net> wrote: > * Ludovic Courtès <ludo@gnu.org> [2016-01-14 07:08]: > > Efraim Flashner <efraim@flashner.co.il> skribis: > > > >> It seems there's a lot of interest around getting Go packaged in Guix, so I > >> figured I should post my work so far to the mailinglist. Currently go-1.4 > >> does not have cgo enabled, the go binary keeps on trying to link against > >> libgcc_s.so.1 (from gcc:lib) and can't find it in the RUNPATH. > > > > In GCC, we have a hack that automatically adds gcc:lib to the RUNPATH > > (look for “libgcc_s” in gcc.scm.) I guess we need to do something > > similar here. > > Aha - ok, I've had the same problem! I've tried injecting it many ways > and it doesn't work due to the intersection of libgcc_s and glibc. > > Efraim - can you successfully run programs that link against glibc? As > in anything that uses os/user, net, etc? Running the tests as part of > your build is a big way to pick up on this, I've added the following to > my go-1.4.3 attempts in my build steps: > I haven't ever touched go before, trying to get it packaged was my first time looking at it so I have no way to check. I tried looking at Nix's go-1.4 package for inspiration, and I see they have a lot of sed-magic to remove or modify tests that don't like being sandboxed. FreeBSD's ports system was also great for a template. https://svnweb.freebsd.org/ports/head/lang/go14/Makefile?view=markup https://github.com/NixOS/nixpkgs/blob/788800e437c4a0a25d95e217540bded68804b25e/pkgs/development/compilers/go/1.4.nix # Disabling the 'os/http/net' tests (they want files not available in # chroot builds) rm src/net/{multicast_test.go,parse_test.go,port_test.go} # !!! substituteInPlace does not seems to be effective. # The os test wants to read files in an existing path. Just don't let it be /usr/bin. sed -i 's,/usr/bin,'"`pwd`", src/os/os_test.go sed -i 's,/bin/pwd,'"`type -P pwd`", src/os/os_test.go # Disable the unix socket test sed -i '/TestShutdownUnix/areturn' src/net/net_test.go # Disable the hostname test sed -i '/TestHostname/areturn' src/os/os_test.go # ParseInLocation fails the test sed -i '/TestParseInSydney/areturn' src/time/format_test.go sed -i 's,/etc/protocols,${iana_etc}/etc/protocols,' src/net/lookup_unix.go '' + lib.optionalString stdenv.isLinux '' sed -i 's,/usr/share/zoneinfo/,${tzdata}/share/zoneinfo/,' src/time/zoneinfo_unix.go # Find the loader dynamically LOADER="$(find ${libc}/lib -name ld-linux\* | head -n 1)" # Replace references to the loader find src/cmd -name asm.c -exec sed -i "s,/lib/ld-linux.*\.so\.[0-9],$LOADER," {} \; '' + lib.optionalString stdenv.isDarwin '' sed -i 's,"/etc","'"$TMPDIR"'",' src/os/os_test.go sed -i 's,/_go_os_test,'"$TMPDIR"'/_go_os_test,' src/os/path_test.go sed -i '/TestRead0/areturn' src/os/os_test.go sed -i '/TestSystemRoots/areturn' src/crypto/x509/root_darwin_test.go sed -i '/TestDialDualStackLocalhost/areturn' src/net/dial_test.go # remove IP resolving tests, on darwin they can find fe80::1%lo while expecting ::1 sed -i '/TestResolveIPAddr/areturn' src/net/ipraw_test.go sed -i '/TestResolveTCPAddr/areturn' src/net/tcp_test.go sed -i '/TestResolveUDPAddr/areturn' src/net/udp_test.go > > ;; these all have specific file locations they look for > ;; or in the case of exec_test resets the environment > ;; before executing binaries they expect. > (for-each delete-file '("src/net/multicast_test.go" > "src/net/parse_test.go" > "src/net/port_test.go" > "src/os/exec/exec_test.go")) > (substitute* "src/os/os_test.go" > (("/bin/pwd") (which "pwd")) > (("/usr/bin") (dirname (which "pwd"))) > (("TestHostname") "areturn")) > > ;; Disable the unix socket test > (substitute* "src/net/net_test.go" > (("TestShutdownUnix") "areturn")) > > (substitute* "src/net/lookup_unix.go" > (("/etc/protocols") (string-append iana "protocols"))) > > ;; ParseInLocation fails the test > (substitute* "src/time/format_test.go" > (("TestParseInSydney") "areturn")) > > (substitute* "src/time/zoneinfo_unix.go" > (("/usr/share/zoneinfo/") tz)) > > ;; exec.Command on os.Args[0] from go run for whatever > ;; reason doesn't work right now. libgcc_s.so link > ;; missing crap occurs here as well, this may require > ;; that 6l-wrapper for go run to work. > (substitute* "src/syscall/syscall_unix_test.go" > (("TestPassFD") "areturn")) > > (substitute* "src/cmd/6l/asm.c" > (("char linuxdynld.*$") (string-append "char linuxdynld[] = \"" ld-linux "\";\n"))) > > I'll be trying this later with your packages. > > I'd really hesitate on packaging this without runnning the tests, as > there are lots of ugly corner cases in go's build system. > > // codemac -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-14 15:08 ` [PATCH 0/3] WIP: Go-lang Ludovic Courtès 2016-01-14 19:14 ` Jeff Mickey @ 2016-01-14 21:37 ` Leo Famulari 2016-01-14 21:42 ` Efraim Flashner 2 siblings, 0 replies; 19+ messages in thread From: Leo Famulari @ 2016-01-14 21:37 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel On Thu, Jan 14, 2016 at 04:08:53PM +0100, Ludovic Courtès wrote: > Efraim Flashner <efraim@flashner.co.il> skribis: > > > It seems there's a lot of interest around getting Go packaged in Guix, so I > > figured I should post my work so far to the mailinglist. Currently go-1.4 > > does not have cgo enabled, the go binary keeps on trying to link against > > libgcc_s.so.1 (from gcc:lib) and can't find it in the RUNPATH. > > In GCC, we have a hack that automatically adds gcc:lib to the RUNPATH > (look for “libgcc_s” in gcc.scm.) I guess we need to do something > similar here. > > > Also, the tests are disabled. Nix has a whole slew of changes to the > > test suite to remove tests that call out to the internet and to change > > tests that call /bin/{hostname,pwd} and others. > > OTOH, unless I’m mistaken, Nixpkgs does not run the test suite of Go > (and of most packages; specifically, ‘stdenv.mkDerivation’ has a > ‘doCheck’ parameter, which is unset by default, meaning that the ‘check’ > phase is skipped unless ‘doCheck = true’ is explicitly given.) Wow, this really clears some things up for me! I often refer to nixpkgs when I get stuck and all this time I wondered why their build logs didn't mention the tests very often. > > > Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm > > pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 > > it should be working too. > > Nice! > > Thanks for all the work! > > Ludo’. > ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-14 15:08 ` [PATCH 0/3] WIP: Go-lang Ludovic Courtès 2016-01-14 19:14 ` Jeff Mickey 2016-01-14 21:37 ` Leo Famulari @ 2016-01-14 21:42 ` Efraim Flashner 2 siblings, 0 replies; 19+ messages in thread From: Efraim Flashner @ 2016-01-14 21:42 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1770 bytes --] On Thu, 14 Jan 2016 16:08:53 +0100 ludo@gnu.org (Ludovic Courtès) wrote: > Efraim Flashner <efraim@flashner.co.il> skribis: > > > It seems there's a lot of interest around getting Go packaged in Guix, so I > > figured I should post my work so far to the mailinglist. Currently go-1.4 > > does not have cgo enabled, the go binary keeps on trying to link against > > libgcc_s.so.1 (from gcc:lib) and can't find it in the RUNPATH. > > In GCC, we have a hack that automatically adds gcc:lib to the RUNPATH > (look for “libgcc_s” in gcc.scm.) I guess we need to do something > similar here. I'll take a look at that. That should also help for gccgo-5. > > > Also, the tests are disabled. Nix has a whole slew of changes to the > > test suite to remove tests that call out to the internet and to change > > tests that call /bin/{hostname,pwd} and others. > > OTOH, unless I’m mistaken, Nixpkgs does not run the test suite of Go > (and of most packages; specifically, ‘stdenv.mkDerivation’ has a > ‘doCheck’ parameter, which is unset by default, meaning that the ‘check’ > phase is skipped unless ‘doCheck = true’ is explicitly given.) They do actually run the tests, they call the build with `./all.bash` which builds and then runs the tests. > > > Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm > > pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 > > it should be working too. > > Nice! > > Thanks for all the work! > > Ludo’. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-12 16:31 [PATCH 0/3] WIP: Go-lang Efraim Flashner ` (3 preceding siblings ...) 2016-01-14 15:08 ` [PATCH 0/3] WIP: Go-lang Ludovic Courtès @ 2016-01-14 19:17 ` Jeff Mickey 2016-01-14 21:37 ` Efraim Flashner 4 siblings, 1 reply; 19+ messages in thread From: Jeff Mickey @ 2016-01-14 19:17 UTC (permalink / raw) To: Efraim Flashner, guix-devel * Efraim Flashner <efraim@flashner.co.il> [2016-01-12 08:31]: > Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm > pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 > it should be working too. I'm a bit confused - go-1.4 is not a bootstrapped release, and requires a working C compiler. Exactly what go code is being built with go-1.4? And isn't anything before gcc-5 building a different go runtime than the standard compilers due to gccgo's lack of support for segmented stacks. I would not suggest running much go code with pre-gcc-5 // codemac ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-14 19:17 ` Jeff Mickey @ 2016-01-14 21:37 ` Efraim Flashner 2016-01-14 22:27 ` Jeff Mickey 0 siblings, 1 reply; 19+ messages in thread From: Efraim Flashner @ 2016-01-14 21:37 UTC (permalink / raw) To: Jeff Mickey; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1214 bytes --] On Thu, 14 Jan 2016 11:17:59 -0800 Jeff Mickey <j@codemac.net> wrote: > * Efraim Flashner <efraim@flashner.co.il> [2016-01-12 08:31]: > > Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm > > pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 > > it should be working too. > > I'm a bit confused - go-1.4 is not a bootstrapped release, and requires > a working C compiler. Exactly what go code is being built with go-1.4? > Reading the google group for go, it looks like go-1.5 uses go-1.4 to bootstrap itself, and then it uses that to rebuild itself for a final copy. I was under the impression that the go binary/compiler worked by itself and only needed the C compiler to compile the go binary. > And isn't anything before gcc-5 building a different go runtime than the > standard compilers due to gccgo's lack of support for segmented > stacks. I would not suggest running much go code with pre-gcc-5 > > // codemac -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [PATCH 0/3] WIP: Go-lang 2016-01-14 21:37 ` Efraim Flashner @ 2016-01-14 22:27 ` Jeff Mickey 0 siblings, 0 replies; 19+ messages in thread From: Jeff Mickey @ 2016-01-14 22:27 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel * Efraim Flashner <efraim@flashner.co.il> [2016-01-14 13:37]: > On Thu, 14 Jan 2016 11:17:59 -0800 > Jeff Mickey <j@codemac.net> wrote: > >> * Efraim Flashner <efraim@flashner.co.il> [2016-01-12 08:31]: >> > Go-1.4 is built using gccgo-4.9, and go-1.5 uses go-1.4 to build, so I'm >> > pretty confident that go-1.4 works, and since go-1.5 inherits from go-1.4 >> > it should be working too. >> >> I'm a bit confused - go-1.4 is not a bootstrapped release, and requires >> a working C compiler. Exactly what go code is being built with go-1.4? >> > > Reading the google group for go, it looks like go-1.5 uses go-1.4 to > bootstrap itself, and then it uses that to rebuild itself for a final copy. I > was under the impression that the go binary/compiler worked by itself and > only needed the C compiler to compile the go binary. That's my understanding as well, in your first reply you say "Go-1.4 is built using gccgo-4.9" which is not true, it doesn't use a bootstrap go. It uses gcc and it's own C compiler (8g/6g for x86/x86_64). go-1.5 then uses go-1.4 to bootstrap, which ideally could use gccgo-5 instead of go-1.4, but unfortunately runs into the same libgcc_s issues with glibc linking. // codemac ^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2016-01-15 16:14 UTC | newest] Thread overview: 19+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-01-12 16:31 [PATCH 0/3] WIP: Go-lang Efraim Flashner 2016-01-12 16:31 ` [PATCH 1/3] gnu: gccgo: Update to 4.9 Efraim Flashner 2016-01-14 15:09 ` Ludovic Courtès 2016-01-12 16:31 ` [PATCH 2/3] gnu: Add go-1.4 Efraim Flashner 2016-01-14 15:12 ` Ludovic Courtès 2016-01-14 21:12 ` Efraim Flashner 2016-01-15 16:14 ` Ludovic Courtès 2016-01-12 16:31 ` [PATCH 3/3] gnu: Add go-1.5 Efraim Flashner 2016-01-12 20:25 ` Ricardo Wurmus 2016-01-13 9:36 ` Efraim Flashner 2016-01-14 15:13 ` Ludovic Courtès 2016-01-14 15:08 ` [PATCH 0/3] WIP: Go-lang Ludovic Courtès 2016-01-14 19:14 ` Jeff Mickey 2016-01-14 21:40 ` Efraim Flashner 2016-01-14 21:37 ` Leo Famulari 2016-01-14 21:42 ` Efraim Flashner 2016-01-14 19:17 ` Jeff Mickey 2016-01-14 21:37 ` Efraim Flashner 2016-01-14 22:27 ` Jeff Mickey
Code repositories for project(s) associated with this public inbox https://git.savannah.gnu.org/cgit/guix.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).