diff --git a/pkgs/development/interpreters/pypy/2.0/default.nix b/pkgs/development/interpreters/pypy/2.0/default.nix index 969746d3a34e..f3d1e4e9ade7 100644 --- a/pkgs/development/interpreters/pypy/2.0/default.nix +++ b/pkgs/development/interpreters/pypy/2.0/default.nix @@ -59,6 +59,7 @@ let installPhase = '' mkdir -p $out/bin mkdir -p $out/pypy-c + # TODO: make libPrefix work 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 @@ -68,6 +69,7 @@ let passthru = { inherit zlibSupport; libPrefix = "pypy${majorVersion}"; + executable = "pypy"; }; enableParallelBuilding = true; diff --git a/pkgs/development/interpreters/python/2.6/default.nix b/pkgs/development/interpreters/python/2.6/default.nix index f264e4179e70..61c997206c1a 100644 --- a/pkgs/development/interpreters/python/2.6/default.nix +++ b/pkgs/development/interpreters/python/2.6/default.nix @@ -75,6 +75,7 @@ let passthru = { inherit zlibSupport; libPrefix = "python${majorVersion}"; + executable = "python2.6"; }; enableParallelBuilding = true; diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix index 76ef7399812b..f5a39a3b242b 100644 --- a/pkgs/development/interpreters/python/2.7/default.nix +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -85,6 +85,7 @@ let passthru = { inherit zlibSupport; libPrefix = "python${majorVersion}"; + executable = "python2.7"; }; enableParallelBuilding = true; diff --git a/pkgs/development/interpreters/python/3.2/default.nix b/pkgs/development/interpreters/python/3.2/default.nix index b3f5a17b0641..4c858c992729 100644 --- a/pkgs/development/interpreters/python/3.2/default.nix +++ b/pkgs/development/interpreters/python/3.2/default.nix @@ -32,6 +32,8 @@ stdenv.mkDerivation { sha256 = "0pxs234g08v3lar09lvzxw4vqdpwkbqmvkv894j2w7aklskcjd6v"; }; + NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s"; + preConfigure = '' for i in /usr /sw /opt /pkg; do # improve purity substituteInPlace ./setup.py --replace $i /no-such-path @@ -58,7 +60,8 @@ stdenv.mkDerivation { readlineSupport = readline != null; opensslSupport = openssl != null; tkSupport = (tk != null) && (tcl != null) && (libX11 != null) && (xproto != null); - libPrefix = "python${majorVersion}m"; + libPrefix = "python${majorVersion}"; + executable = "python3.2m"; }; enableParallelBuilding = true; diff --git a/pkgs/development/interpreters/python/3.3/default.nix b/pkgs/development/interpreters/python/3.3/default.nix index 84f4ec184aa6..7d3ede6594f8 100644 --- a/pkgs/development/interpreters/python/3.3/default.nix +++ b/pkgs/development/interpreters/python/3.3/default.nix @@ -32,6 +32,8 @@ stdenv.mkDerivation { sha256 = "16myvina7nakyyg7r5gnjyydk8bzar988vmxsw2k485w5gz04wpp"; }; + NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isLinux "-lgcc_s"; + preConfigure = '' for i in /usr /sw /opt /pkg; do # improve purity substituteInPlace ./setup.py --replace $i /no-such-path @@ -58,7 +60,8 @@ stdenv.mkDerivation { readlineSupport = readline != null; opensslSupport = openssl != null; tkSupport = (tk != null) && (tcl != null) && (libX11 != null) && (xproto != null); - libPrefix = "python${majorVersion}m"; + libPrefix = "python${majorVersion}"; + executable = "python3.3m"; }; enableParallelBuilding = true; diff --git a/pkgs/development/interpreters/python/3.3/setup-hook.sh b/pkgs/development/interpreters/python/3.3/setup-hook.sh index e6fa34bf54ba..c272c87daf1c 100644 --- a/pkgs/development/interpreters/python/3.3/setup-hook.sh +++ b/pkgs/development/interpreters/python/3.3/setup-hook.sh @@ -1,12 +1,12 @@ addPythonPath() { - addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.2/site-packages + addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python3.3/site-packages } toPythonPath() { local paths="$1" local result= for i in $paths; do - p="$i/lib/python3.2/site-packages" + p="$i/lib/python3.3/site-packages" result="${result}${result:+:}$p" done echo $result diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index d32c6818bb26..71b5c1952a05 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -33,7 +33,7 @@ , checkPhase ? '' runHook preCheck - python setup.py test + ${python}/bin/${python.executable} setup.py test runHook postCheck '' diff --git a/pkgs/development/python-modules/setuptools/default.nix b/pkgs/development/python-modules/setuptools/default.nix index 92c39afc249e..3dcaaca4c250 100644 --- a/pkgs/development/python-modules/setuptools/default.nix +++ b/pkgs/development/python-modules/setuptools/default.nix @@ -2,31 +2,37 @@ stdenv.mkDerivation rec { shortName = "setuptools-${version}"; - name = "python-${shortName}"; + name = "${python.executable}-${shortName}"; - version = "0.6c11"; + version = "0.9.8"; src = fetchurl { url = "http://pypi.python.org/packages/source/s/setuptools/${shortName}.tar.gz"; - sha256 = "1lx1hwxkhipyh206bgl90ddnfcnb68bzcvyawczbf833fadyl3v3"; + sha256 = "037b8x3fdhx8s6xafqndi3yr8x2vr42n1kzs7jxk6j9s9fd65gs2"; }; + patches = [ + # https://bitbucket.org/pypa/setuptools/issue/55/1-failure-lc_all-c-python33m-setuppy-test + ./distribute-skip-sdist_with_utf8_encoded_filename.patch + ]; + buildInputs = [ python wrapPython ]; - buildPhase = "python setup.py build --build-base $out"; + buildPhase = "${python}/bin/${python.executable} setup.py build --build-base $out"; installPhase = '' dst=$out/lib/${python.libPrefix}/site-packages mkdir -p $dst - PYTHONPATH=$dst:$PYTHONPATH - python setup.py install --prefix=$out + PYTHONPATH="$dst:$PYTHONPATH" + ${python}/bin/${python.executable} setup.py install --prefix=$out wrapPythonPrograms ''; - doCheck = false; # doesn't work with Python 2.7 - - checkPhase = "python setup.py test"; + doCheck = true; + checkPhase = '' + ${python}/bin/${python.executable} setup.py test + ''; meta = { description = "Utilities to facilitate the installation of Python packages"; diff --git a/pkgs/development/python-modules/setuptools/distribute-skip-sdist_with_utf8_encoded_filename.patch b/pkgs/development/python-modules/setuptools/distribute-skip-sdist_with_utf8_encoded_filename.patch new file mode 100644 index 000000000000..96a4f81ee581 --- /dev/null +++ b/pkgs/development/python-modules/setuptools/distribute-skip-sdist_with_utf8_encoded_filename.patch @@ -0,0 +1,28 @@ +diff -r f5ac515f062a setuptools/tests/test_sdist.py +--- a/setuptools/tests/test_sdist.py Fri Jul 26 09:52:26 2013 +0200 ++++ b/setuptools/tests/test_sdist.py Sat Jul 27 20:22:17 2013 +0200 +@@ -3,12 +3,14 @@ + + + import os ++import locale + import shutil + import sys + import tempfile + import unittest + import unicodedata + ++from setuptools.tests.py26compat import skipIf + from setuptools.compat import StringIO, unicode + from setuptools.command.sdist import sdist + from setuptools.command.egg_info import manifest_maker +@@ -318,6 +320,9 @@ + filename = filename.decode('latin-1') + self.assertFalse(filename in cmd.filelist.files) + ++ ++ @skipIf(sys.version_info >= (3,) and locale.getpreferredencoding() != 'UTF-8', ++ 'Unittest fails if locale is not utf-8 but the manifests is recorded correctly') + def test_sdist_with_utf8_encoded_filename(self): + # Test for #303. + dist = Distribution(SETUP_ATTRS) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 82fb66a89082..90102796ccb1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5750,6 +5750,20 @@ let python = python26; }; + python3Packages = python33Packages; + + python33Packages = import ./python-packages.nix { + inherit pkgs; + inherit (lib) lowPrio; + python = python33; + }; + + python32Packages = import ./python-packages.nix { + inherit pkgs; + inherit (lib) lowPrio; + python = python32; + }; + python27Packages = recurseIntoAttrs (import ./python-packages.nix { inherit pkgs; inherit (lib) lowPrio; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ba6155ffff1b..b5b64843faf2 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -5,8 +5,9 @@ isPy26 = python.majorVersion == "2.6"; isPy27 = python.majorVersion == "2.7"; optional = pkgs.lib.optional; optionals = pkgs.lib.optionals; +modules = python.modules or { readline = null; sqlite3 = null; curses = null; ssl = null; }; -pythonPackages = python.modules // rec { +pythonPackages = modules // rec { inherit python; inherit (pkgs) fetchurl fetchsvn fetchgit stdenv; @@ -444,8 +445,8 @@ pythonPackages = python.modules // rec { pythonPackages.mutagen pythonPackages.munkres pythonPackages.musicbrainzngs - python.modules.sqlite3 - python.modules.readline + modules.sqlite3 + modules.readline ]; meta = { @@ -506,7 +507,7 @@ pythonPackages = python.modules // rec { sha256 = "02dkmsmgy04l33nyw54rlxkjwff0yf3cy2kvdx8s5w344mqkkkv0"; }; - propagatedBuildInputs = [ python.modules.curses pygments ]; + propagatedBuildInputs = [ modules.curses pygments ]; doCheck = false; meta = { @@ -606,7 +607,7 @@ pythonPackages = python.modules // rec { # rev = "refs/tags/0.9.3"; # }; # - # propagatedBuildInputs = [ pythonPackages.argparse python.modules.ssl ]; + # propagatedBuildInputs = [ pythonPackages.argparse modules.ssl ]; # # doCheck = false; # @@ -2387,7 +2388,7 @@ pythonPackages = python.modules // rec { sha256 = "0xfaa6h8css3yhsmx5vcffizrz6mvmgm46q7449z3hq7g3793184"; }; - propagatedBuildInputs = [ python.modules.sqlite3 ]; + propagatedBuildInputs = [ modules.sqlite3 ]; doCheck = false; @@ -2754,7 +2755,7 @@ pythonPackages = python.modules // rec { buildInputs = [ pkgs.unzip ]; - propagatedBuildInputs = [ argparse jinja2 six python.modules.readline ] ++ + propagatedBuildInputs = [ argparse jinja2 six modules.readline ] ++ (optionals isPy26 [ importlib ordereddict ]); meta = { @@ -3273,7 +3274,7 @@ pythonPackages = python.modules // rec { }; buildInputs = [ nose ]; - propagatedBuildInputs = [ dateutil numpy pytz python.modules.sqlite3 ]; + propagatedBuildInputs = [ dateutil numpy pytz modules.sqlite3 ]; # Tests require networking to pass doCheck = false; @@ -4629,7 +4630,7 @@ pythonPackages = python.modules // rec { propagatedBuildInputs = [ recaptcha_client pytz memcached dateutil_1_5 paramiko flup pygments - djblets django_1_3 django_evolution pycrypto python.modules.sqlite3 + djblets django_1_3 django_evolution pycrypto modules.sqlite3 pysvn pil psycopg2 ]; }; @@ -5022,7 +5023,7 @@ pythonPackages = python.modules // rec { buildInputs = [ nose ]; - propagatedBuildInputs = [ python.modules.sqlite3 ]; + propagatedBuildInputs = [ modules.sqlite3 ]; meta = { homepage = http://www.sqlalchemy.org/; @@ -5201,7 +5202,7 @@ pythonPackages = python.modules // rec { PYTHON_EGG_CACHE = "`pwd`/.egg-cache"; - propagatedBuildInputs = [ genshi pkgs.setuptools python.modules.sqlite3 ]; + propagatedBuildInputs = [ genshi pkgs.setuptools modules.sqlite3 ]; meta = { description = "Enhanced wiki and issue tracking system for software development projects"; @@ -5384,9 +5385,12 @@ pythonPackages = python.modules // rec { md5 = "9745c28256c70c76d36adb3767a00212"; }; + inherit recursivePthLoader; + pythonPath = [ recursivePthLoader ]; + patches = [ ../development/python-modules/virtualenv-change-prefix.patch ]; - propagatedBuildInputs = [ python.modules.readline python.modules.sqlite3 ]; + propagatedBuildInputs = [ modules.readline modules.sqlite3 modules.curses ]; buildInputs = [ mock nose ]; @@ -5446,7 +5450,7 @@ pythonPackages = python.modules // rec { md5 = "11825b7074ba7043e157805e4e6e0f55"; }; - propagatedBuildInputs = [ nose python.modules.ssl ]; + propagatedBuildInputs = [ nose modules.ssl ]; meta = { description = "WSGI request and response object"; @@ -6237,7 +6241,7 @@ pythonPackages = python.modules // rec { }; buildInputs = [ pkgs.unzip unittest2 nose mock ]; - propagatedBuildInputs = [ python.modules.curses libarchive ]; + propagatedBuildInputs = [ modules.curses libarchive ]; # two tests fail doCheck = false; @@ -6478,7 +6482,7 @@ pythonPackages = python.modules // rec { sha256 = "1gj8i6j2i172cldqw98395235bn78ciagw6v17fgv01rmind3lag"; }; - buildInputs = [ django pkgs.pycairo ldap memcached python.modules.sqlite3 ]; + buildInputs = [ django pkgs.pycairo ldap memcached modules.sqlite3 ]; # error: invalid command 'test' doCheck = false;