summary refs log tree commit diff
path: root/pkgs/development/compilers/go/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/go/default.nix')
-rw-r--r--pkgs/development/compilers/go/default.nix81
1 files changed, 42 insertions, 39 deletions
diff --git a/pkgs/development/compilers/go/default.nix b/pkgs/development/compilers/go/default.nix
index 143c091a1dc0..1d9765539bfc 100644
--- a/pkgs/development/compilers/go/default.nix
+++ b/pkgs/development/compilers/go/default.nix
@@ -1,50 +1,64 @@
-{ stdenv, fetchhg, bison, glibc, ed, which, bash, coreutils, makeWrapper, perl }:
+{ stdenv, fetchurl, bison, glibc, bash, coreutils, makeWrapper}:
 
 let
-  version = "2010-06-09";
-  sha256 = "b607879b333ef100466c726a13cc69ed143566a3c1af59f6d33a6e90b9d0c917";
-
   loader386 = "${glibc}/lib/ld-linux.so.2";
   loaderAmd64 = "${glibc}/lib/ld-linux-x86-64.so.2";
+  loaderArm = "${glibc}/lib/ld-linux.so.3";
 in
 
 stdenv.mkDerivation {
-  name = "go-" + version;
+  name = "go-1.0.2";
 
-  # No tarball yet.
-  src = fetchhg {
-    url = https://go.googlecode.com/hg/;
-    tag = "release." + version;
-    inherit sha256;
+  src = fetchurl {
+    url = http://go.googlecode.com/files/go1.0.2.src.tar.gz;
+    sha256 = "1a4mpkb3bd9dwp0r3fgrfcyk5lgw0f0cfrbskg2lrhc7a12zpz3h";
   };
 
-  buildInputs = [ bison glibc ed which bash makeWrapper ];
+  buildInputs = [ bison glibc bash makeWrapper ];
+
+  # I'm not sure what go wants from its 'src', but the go installation manual
+  # describes an installation keeping the src.
+  preUnpack = ''
+    mkdir -p $out/share
+    cd $out/share
+  '';
 
   prePatch = ''
+    cd ..
+    if [ ! -d go ]; then
+      mv * go
+    fi
+    cd go
+
     patchShebangs ./ # replace /bin/bash
-    # only for 386 build
     # !!! substituteInPlace does not seems to be effective.
     sed -i 's,/lib/ld-linux.so.2,${loader386},' src/cmd/8l/asm.c
     sed -i 's,/lib64/ld-linux-x86-64.so.2,${loaderAmd64},' src/cmd/6l/asm.c
-    sed -i 's,/usr/share/zoneinfo/,${glibc}/share/zoneinfo/,' src/pkg/time/zoneinfo.go
-    sed -i 's,/bin/ed,${ed}/bin/ed,' src/cmd/6l/mkenam
+    sed -i 's,/lib64/ld-linux-x86-64.so.3,${loaderArm},' src/cmd/5l/asm.c
+    sed -i 's,/usr/share/zoneinfo/,${glibc}/share/zoneinfo/,' src/pkg/time/zoneinfo_unix.go
 
-    sed -i -e 's,/bin/cat,${coreutils}/bin/cat,' \
-      -e 's,/bin/echo,${coreutils}/bin/echo,' \
-      src/pkg/exec/exec_test.go
+    #sed -i -e 's,/bin/cat,${coreutils}/bin/cat,' \
+    #  -e 's,/bin/echo,${coreutils}/bin/echo,' \
+    #  src/pkg/exec/exec_test.go
 
     # Disabling the 'os/http/net' tests (they want files not available in
     # chroot builds)
-    sed -i -e '/^NOTEST=/a\\tos\\\n\thttp\\\n\tnet\\' src/pkg/Makefile
-
-    sed -i -e 's,/bin:/usr/bin:/usr/local/bin,'$PATH, test/run
-    sed -i -e 's,/usr/bin/perl,${perl}/bin/perl,' test/errchk
+    rm src/pkg/net/{multicast_test.go,parse_test.go,port_test.go}
+    # The os test wants to read files in an existing path. Just it don't be /usr/bin.
+    sed -i 's,/usr/bin,'"`pwd`", src/pkg/os/os_test.go
+    sed -i 's,/bin/pwd,'"`type -P pwd`", src/pkg/os/os_test.go
+    # Disable the hostname test
+    sed -i '/TestHostname/areturn' src/pkg/os/os_test.go
   '';
 
+  patches = [ ./cacert.patch ];
+
   GOOS = "linux";
   GOARCH = if (stdenv.system == "i686-linux") then "386"
           else if (stdenv.system == "x86_64-linux") then "amd64"
+          else if (stdenv.system == "armv5tel-linux") then "arm"
           else throw "Unsupported system";
+  GOARM = stdenv.lib.optionalString (stdenv.system == "armv5tel-linux") "5";
 
   installPhase = ''
     mkdir -p "$out/bin"
@@ -55,28 +69,17 @@ stdenv.mkDerivation {
     ./all.bash
     cd -
 
-    # Handle Libraries and make them availabale under /share/go.
-    export GOLIB="pkg/"$GOOS"_"$GOARCH
-    mkdir -p "$out/lib/go/$GOLIB"
-    cp -r ./$GOLIB $out/lib/go/pkg/
-
-    # this line set $AS $CC $GC $LD
-    source ./src/Make.$GOARCH
-
-    # Wrap the compiler and the linker to define the location of the
+    # Wrap the tools to define the location of the
     # libraries.
-    wrapProgram "$out/bin/$GC" \
-      --add-flags "-I" \
-      --add-flags "$out/lib/go/$GOLIB"
-
-    wrapProgram "$out/bin/$LD" \
-      --set "GOROOT" "$out/lib/go/" \
-      --set "GOOS" "$GOOS" \
-      --set "GOARCH" "$GOARCH"
+    for a in go gofmt godoc; do
+	    wrapProgram "$out/bin/$a" \
+	      --set "GOROOT" $out/share/go \
+        ${if (stdenv.system == "armv5tel-linux") then "--set GOARM $GOARM" else ""}
+    done
 
     # Copy the emacs configuration for Go files.
     mkdir -p "$out/share/emacs/site-lisp"
-    cp ./misc/emacs/* $out/share/emacs/site-lisp/ # */
+    cp ./misc/emacs/* $out/share/emacs/site-lisp/
   '';
 
   meta = {