unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [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

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

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

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

* 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

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