From a0bed10ab53da57bd713de11034442bab526441b Mon Sep 17 00:00:00 2001 From: Domen Kozar Date: Tue, 23 Jul 2013 22:41:27 +0200 Subject: [PATCH 1/5] WIP: pypy --- .../interpreters/pypy/2.0/default.nix | 89 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 91 insertions(+) create mode 100644 pkgs/development/interpreters/pypy/2.0/default.nix diff --git a/pkgs/development/interpreters/pypy/2.0/default.nix b/pkgs/development/interpreters/pypy/2.0/default.nix new file mode 100644 index 00000000000..f689ef9db21 --- /dev/null +++ b/pkgs/development/interpreters/pypy/2.0/default.nix @@ -0,0 +1,89 @@ +{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2, pkgconfig, libffi +, sqlite, openssl, ncurses, pythonFull }: + +assert zlibSupport -> zlib != null; + +let + + majorVersion = "2.0"; + version = "${majorVersion}.2"; + + src = fetchurl { + url = "https://bitbucket.org/pypy/pypy/downloads/pypy-${version}-src.tar.bz2"; + sha256 = "0g2cajs6m3yf0lak5f18ccs6j77cf5xvbm4h6y5l1qlqdc6wk48r"; + }; + + #patches = + # [ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. + # ./search-path.patch + + # Python recompiles a Python if the mtime stored *in* the + # pyc/pyo file differs from the mtime of the source file. This + # doesn't work in Nix because Nix changes the mtime of files in + # the Nix store to 1. So treat that as a special case. + # ./nix-store-mtime.patch + + # patch python to put zero timestamp into pyc + # if DETERMINISTIC_BUILD env var is set + # ./deterministic-build.patch + # ]; + #''; + + install = '' + cd ./pypy/pypy/tool/release/ + ${pythonFull}/bin/python package.py ../../.. pypy-my-own-package-name + ''; + + buildInputs = + optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ + [ bzip2 openssl pkgconfig pythonFull libffi ncurses ] + ++ optional zlibSupport zlib; + + pypy = stdenv.mkDerivation rec { + name = "pypy-${version}"; + + inherit majorVersion version src buildInputs; + + C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); + LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); + + preConfigure = '' + substituteInPlace Makefile \ + --replace "-Ojit" "-Ojit --batch" \ + --replace "pypy/goal/targetpypystandalone.py" "pypy/goal/targetpypystandalone.py --withmod-_minimal_curses" + + # we are using cpython and not pypy to do translation + substituteInPlace rpython/bin/rpython \ + --replace "/usr/bin/env pypy" "${pythonFull}/bin/python" + substituteInPlace pypy/goal/targetpypystandalone.py \ + --replace "/usr/bin/env pypy" "${pythonFull}/bin/python" + + # convince pypy to find nix ncurses + substituteInPlace pypy/module/_minimal_curses/fficurses.py \ + --replace "/usr/include/ncurses/curses.h" "${ncurses}/include/curses.h" \ + --replace "ncurses/curses.h" "${ncurses}/include/curses.h" \ + --replace "ncurses/term.h" "${ncurses}/include/term.h" \ + --replace "libraries = ['curses']" "libraries = ['ncurses']" + + #substituteInPlace rpython/translator/platform/__init__.py \ + # --replace "return include_dirs" "return tuple(\"{expat}\", *include_dirs)" \ + # --replace "return library_dirs" "return tuple(\"{expat}\", *library_dirs)" + ''; + + passthru = { + inherit zlibSupport; + libPrefix = "pypy${majorVersion}"; + }; + + enableParallelBuilding = true; + + meta = with stdenv.lib; { + homepage = "http://pypy.org/"; + description = "PyPy is a fast, compliant alternative implementation of the Python language (2.7.3)"; + license = licenses.mit; + platforms = platforms.all; + maintainers = with maintainers; [ iElectric ]; + }; + }; + +in pypy // { inherit modules; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b68c7ee17eb..c689386d357 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3099,6 +3099,8 @@ let libX11 = xlibs.libX11; }; + pypy = callPackage ../development/interpreters/pypy/2.0 { }; + pythonFull = python27Full; python26Full = callPackage ../development/interpreters/python/wrapper.nix { extraLibs = lib.attrValues python26.modules; From e52fc8f431ea0542a34b376e1e63a96681702d80 Mon Sep 17 00:00:00 2001 From: Domen Kozar Date: Tue, 23 Jul 2013 23:24:51 +0200 Subject: [PATCH 2/5] pypy: fix stdenv.lib removal --- pkgs/development/interpreters/pypy/2.0/default.nix | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pkgs/development/interpreters/pypy/2.0/default.nix b/pkgs/development/interpreters/pypy/2.0/default.nix index f689ef9db21..711c27fabf2 100644 --- a/pkgs/development/interpreters/pypy/2.0/default.nix +++ b/pkgs/development/interpreters/pypy/2.0/default.nix @@ -35,18 +35,15 @@ let ''; buildInputs = - optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ + stdenv.lib.optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ [ bzip2 openssl pkgconfig pythonFull libffi ncurses ] - ++ optional zlibSupport zlib; + ++ stdenv.lib.optional zlibSupport zlib; pypy = stdenv.mkDerivation rec { name = "pypy-${version}"; inherit majorVersion version src buildInputs; - C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); - LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - preConfigure = '' substituteInPlace Makefile \ --replace "-Ojit" "-Ojit --batch" \ @@ -86,4 +83,4 @@ let }; }; -in pypy // { inherit modules; } +in pypy From 7a6b6799d9583e61b93971e9f107085d4eb932a2 Mon Sep 17 00:00:00 2001 From: Domen Kozar Date: Thu, 25 Jul 2013 12:38:08 +0200 Subject: [PATCH 3/5] pypy: fix some tests, add install phase --- .../interpreters/pypy/2.0/default.nix | 62 +++++++++---------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/pkgs/development/interpreters/pypy/2.0/default.nix b/pkgs/development/interpreters/pypy/2.0/default.nix index 711c27fabf2..d903dab02c0 100644 --- a/pkgs/development/interpreters/pypy/2.0/default.nix +++ b/pkgs/development/interpreters/pypy/2.0/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2, pkgconfig, libffi -, sqlite, openssl, ncurses, pythonFull }: +, sqlite, openssl, ncurses, pythonFull, expat }: assert zlibSupport -> zlib != null; @@ -8,46 +8,24 @@ let majorVersion = "2.0"; version = "${majorVersion}.2"; - src = fetchurl { - url = "https://bitbucket.org/pypy/pypy/downloads/pypy-${version}-src.tar.bz2"; - sha256 = "0g2cajs6m3yf0lak5f18ccs6j77cf5xvbm4h6y5l1qlqdc6wk48r"; - }; - - #patches = - # [ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. - # ./search-path.patch - - # Python recompiles a Python if the mtime stored *in* the - # pyc/pyo file differs from the mtime of the source file. This - # doesn't work in Nix because Nix changes the mtime of files in - # the Nix store to 1. So treat that as a special case. - # ./nix-store-mtime.patch - - # patch python to put zero timestamp into pyc - # if DETERMINISTIC_BUILD env var is set - # ./deterministic-build.patch - # ]; - #''; - - install = '' - cd ./pypy/pypy/tool/release/ - ${pythonFull}/bin/python package.py ../../.. pypy-my-own-package-name - ''; - - buildInputs = - stdenv.lib.optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [ bzip2 openssl pkgconfig pythonFull libffi ncurses ] - ++ stdenv.lib.optional zlibSupport zlib; - pypy = stdenv.mkDerivation rec { name = "pypy-${version}"; - inherit majorVersion version src buildInputs; + inherit majorVersion version; + + src = fetchurl { + url = "https://bitbucket.org/pypy/pypy/downloads/pypy-${version}-src.tar.bz2"; + sha256 = "0g2cajs6m3yf0lak5f18ccs6j77cf5xvbm4h6y5l1qlqdc6wk48r"; + }; + + buildInputs = [ bzip2 openssl pkgconfig pythonFull libffi ncurses sqlite ] + ++ stdenv.lib.optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc + ++ stdenv.lib.optional zlibSupport zlib; preConfigure = '' substituteInPlace Makefile \ --replace "-Ojit" "-Ojit --batch" \ - --replace "pypy/goal/targetpypystandalone.py" "pypy/goal/targetpypystandalone.py --withmod-_minimal_curses" + --replace "pypy/goal/targetpypystandalone.py" "pypy/goal/targetpypystandalone.py --withmod-_minimal_curses --withmod-unicodedata --withmod-thread --withmod-bz2" # we are using cpython and not pypy to do translation substituteInPlace rpython/bin/rpython \ @@ -67,6 +45,22 @@ let # --replace "return library_dirs" "return tuple(\"{expat}\", *library_dirs)" ''; + TERMINFO = "${ncurses}/share/terminfo/"; + + doCheck = true; + checkPhase = '' + export HOME="$TMPDIR" + ./pypy-c ./pypy/test_all.py --pypy=./pypy-c -k "not shutil" lib-python + ''; + + installPhase = '' + mkdir -p $out/bin + cp -R {include,lib_pypy,lib-python,pypy-c} $out/ + ln -s $out/pypy-c $out/bin/pypy + chmod +x $out/bin/pypy + # TODO: compile python files? + ''; + passthru = { inherit zlibSupport; libPrefix = "pypy${majorVersion}"; From a8f11fcba5e296897388e1eb747749e4e7517ce7 Mon Sep 17 00:00:00 2001 From: Rob Vermaas Date: Thu, 25 Jul 2013 13:42:20 +0200 Subject: [PATCH 4/5] Update pypy build with sqlite and expat support. Fix the installPhase. --- .../development/interpreters/pypy/2.0/default.nix | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pkgs/development/interpreters/pypy/2.0/default.nix b/pkgs/development/interpreters/pypy/2.0/default.nix index d903dab02c0..6be1b5a2b7d 100644 --- a/pkgs/development/interpreters/pypy/2.0/default.nix +++ b/pkgs/development/interpreters/pypy/2.0/default.nix @@ -18,10 +18,14 @@ let sha256 = "0g2cajs6m3yf0lak5f18ccs6j77cf5xvbm4h6y5l1qlqdc6wk48r"; }; - buildInputs = [ bzip2 openssl pkgconfig pythonFull libffi ncurses sqlite ] + buildInputs = [ bzip2 openssl pkgconfig pythonFull libffi ncurses expat sqlite ] ++ stdenv.lib.optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ stdenv.lib.optional zlibSupport zlib; + C_INCLUDE_PATH = stdenv.lib.concatStringsSep ":" (map (p: "${p}/include") buildInputs); + LIBRARY_PATH = stdenv.lib.concatStringsSep ":" (map (p: "${p}/lib") buildInputs); + LD_LIBRARY_PATH = LIBRARY_PATH; + preConfigure = '' substituteInPlace Makefile \ --replace "-Ojit" "-Ojit --batch" \ @@ -39,10 +43,6 @@ let --replace "ncurses/curses.h" "${ncurses}/include/curses.h" \ --replace "ncurses/term.h" "${ncurses}/include/term.h" \ --replace "libraries = ['curses']" "libraries = ['ncurses']" - - #substituteInPlace rpython/translator/platform/__init__.py \ - # --replace "return include_dirs" "return tuple(\"{expat}\", *include_dirs)" \ - # --replace "return library_dirs" "return tuple(\"{expat}\", *library_dirs)" ''; TERMINFO = "${ncurses}/share/terminfo/"; @@ -55,8 +55,9 @@ let installPhase = '' mkdir -p $out/bin - cp -R {include,lib_pypy,lib-python,pypy-c} $out/ - ln -s $out/pypy-c $out/bin/pypy + mkdir -p $out/pypy-c + cp -R {include,lib_pypy,lib-python,pypy-c} $out/pypy-c + ln -s $out/pypy-c/pypy-c $out/bin/pypy chmod +x $out/bin/pypy # TODO: compile python files? ''; From eb0b6f82414ee42fe93a363456271ee15486336f Mon Sep 17 00:00:00 2001 From: Domen Kozar Date: Thu, 25 Jul 2013 16:25:55 +0200 Subject: [PATCH 5/5] pypy: correctly skip tests --- pkgs/development/interpreters/pypy/2.0/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/pypy/2.0/default.nix b/pkgs/development/interpreters/pypy/2.0/default.nix index 6be1b5a2b7d..0f2a34336cf 100644 --- a/pkgs/development/interpreters/pypy/2.0/default.nix +++ b/pkgs/development/interpreters/pypy/2.0/default.nix @@ -50,7 +50,7 @@ let doCheck = true; checkPhase = '' export HOME="$TMPDIR" - ./pypy-c ./pypy/test_all.py --pypy=./pypy-c -k "not shutil" lib-python + ./pypy-c ./pypy/test_all.py --pypy=./pypy-c -m "not shutil" lib-python ''; installPhase = ''