From c1eb464f3c6300fcf57c06942b07cb7cb66cc408 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 3 Jan 2011 16:25:11 +0000 Subject: [PATCH 01/59] * Build those Python modules in the Python distribution that require additional dependencies (e.g. SQLite, X11, or Tcl/Tk) outside the main Python package (i.e., pythonBase). This makes pythonFull unnecessary: you can just pass the additional modules as buildInputs to packages that require them, e.g. buildInputs = [ pythonModules.sqlite3 ]; svn path=/nixpkgs/branches/modular-python/; revision=25364 --- .../interpreters/python/2.7/modules.nix | 70 +++++++++++++++++++ pkgs/tools/networking/offlineimap/default.nix | 7 +- pkgs/top-level/all-packages.nix | 17 ++--- 3 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 pkgs/development/interpreters/python/2.7/modules.nix diff --git a/pkgs/development/interpreters/python/2.7/modules.nix b/pkgs/development/interpreters/python/2.7/modules.nix new file mode 100644 index 00000000000..fd4c0d9c603 --- /dev/null +++ b/pkgs/development/interpreters/python/2.7/modules.nix @@ -0,0 +1,70 @@ +{ stdenv, python, sqlite, tcl, tk, x11, openssl, readline }: + +with stdenv.lib; + +let + + buildInternalPythonModule = + { moduleName + , internalName ? "_" + moduleName + , deps + }: + stdenv.mkDerivation rec { + name = "python-${moduleName}-${python.version}"; + + src = python.src; + + patches = python.patches; + + buildInputs = [ python ] ++ deps; + + C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); + LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); + + configurePhase = "true"; + + buildPhase = + '' + # Fake the build environment that setup.py expects. + ln -s ${python}/include/python*/pyconfig.h . + ln -s ${python}/lib/python*/config/Setup Modules/ + ln -s ${python}/lib/python*/config/Setup.local Modules/ + + substituteInPlace setup.py --replace 'self.extensions = extensions' \ + 'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]' + + python ./setup.py build_ext + ''; + + installPhase = + '' + dest=$out/lib/${python.libPrefix}/site-packages + mkdir -p $dest + cp -p $(find . -name "*.so") $dest/ + ''; + }; + +in { + + sqlite3 = buildInternalPythonModule { + moduleName = "sqlite3"; + deps = [ sqlite ]; + }; + + tkinter = buildInternalPythonModule { + moduleName = "tkinter"; + deps = [ tcl tk x11 ]; + }; + + ssl = buildInternalPythonModule { + moduleName = "ssl"; + deps = [ openssl ]; + }; + + readline = buildInternalPythonModule { + moduleName = "readline"; + internalName = "readline"; + deps = [ readline ]; + }; + +} diff --git a/pkgs/tools/networking/offlineimap/default.nix b/pkgs/tools/networking/offlineimap/default.nix index bb123d87bdf..8f0dd8e9a6c 100644 --- a/pkgs/tools/networking/offlineimap/default.nix +++ b/pkgs/tools/networking/offlineimap/default.nix @@ -1,4 +1,4 @@ -{fetchurl, buildPythonPackage}: +{ fetchurl, buildPythonPackage, ssl }: buildPythonPackage { name = "offlineimap-6.2.0.2"; @@ -8,10 +8,9 @@ buildPythonPackage { sha256 = "1w69qv1dm37m53k8cd068lk5z3qjlscnjxr397gs8kdsfds67v7c"; }; - doCheck = false; + propagatedBuildInputs = [ ssl ]; - preConfigure = "set -x"; - buildInputs = [ ]; + doCheck = false; meta = { description = "IMAP to local files bridge"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 11dd2f2d456..def2581b89e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -964,17 +964,8 @@ let offlineimap = import ../tools/networking/offlineimap { inherit fetchurl; - # I did not find any better way of reusing buildPythonPackage+setuptools - # for a python with openssl support - buildPythonPackage = assert pythonFull.opensslSupport; - import ../development/python-modules/generic { - inherit makeWrapper lib; - python = pythonFull; - setuptools = builderDefsPackage (import ../development/python-modules/setuptools) { - inherit makeWrapper; - python = pythonFull; - }; - }; + buildPythonPackage = buildPython27Package; + ssl = pythonModules.ssl; }; opendbx = callPackage ../development/libraries/opendbx { }; @@ -2314,6 +2305,10 @@ let inherit (pkgs.xlibs) libX11 xproto; }); + pythonModules = callPackage ../development/interpreters/python/2.7/modules.nix { + python = python27Base; + }; + python31Base = lowPrio (makeOverridable (import ../development/interpreters/python/3.1) { inherit (pkgs) fetchurl stdenv zlib bzip2 gdbm; arch = if stdenv.isDarwin then darwinArchUtility else null; From b7b1fc322a6cf152c2621714e63e0938162a4af9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 4 Jan 2011 14:47:36 +0000 Subject: [PATCH 02/59] * Python 2.7: get rid of most dependencies. svn path=/nixpkgs/branches/modular-python/; revision=25385 --- .../interpreters/python/2.7/default.nix | 77 +++++++------------ pkgs/top-level/all-packages.nix | 16 +--- 2 files changed, 29 insertions(+), 64 deletions(-) diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix index d80e215ce05..88147fef31d 100644 --- a/pkgs/development/interpreters/python/2.7/default.nix +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -1,22 +1,10 @@ { stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2 -, gdbmSupport ? true, gdbm ? null -, sqlite ? null -, db4 ? null -, readline ? null -, openssl ? null -, tk ? null -, tcl ? null -, libX11 ? null -, xproto ? null -, arch ? null -, sw_vers ? null -, ncurses ? null +, darwinArchUtility ? null, darwinSwVersUtility ? null }: assert zlibSupport -> zlib != null; -assert gdbmSupport -> gdbm != null; -assert stdenv.isDarwin -> arch != null; -assert stdenv.isDarwin -> sw_vers != null; +assert stdenv.isDarwin -> darwinArchUtility != null; +assert stdenv.isDarwin -> darwinSwVersUtility != null; with stdenv.lib; @@ -27,25 +15,13 @@ let buildInputs = optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [bzip2] + [ bzip2 ] ++ optional zlibSupport zlib - ++ optional gdbmSupport gdbm - ++ optional (sqlite != null) sqlite - ++ optional (db4 != null) db4 - ++ optional (readline != null) readline - ++ optional (openssl != null) openssl - ++ optional (tk != null) tk - ++ optional (tcl != null) tcl - ++ optional (libX11 != null) libX11 - ++ optional (xproto != null) xproto - ++ optional (arch != null) arch - ++ optional (sw_vers != null) sw_vers - ++ optional (ncurses != null) ncurses - ; + ++ optionals stdenv.isDarwin [ darwinArchUtility darwinSwVersUtility ]; in -stdenv.mkDerivation ( { +stdenv.mkDerivation { name = "python-${version}"; inherit majorVersion version; @@ -54,38 +30,37 @@ stdenv.mkDerivation ( { sha256 = "14i2c7yqa7ljmx2i2bb827n61q33zn23ax96czi8rbkyyny8gqw0"; }; - patches = [ - # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. - ./search-path.patch - ]; + patches = + [ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. + ./search-path.patch + ]; inherit buildInputs; + C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); + configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions"; - preConfigure = '' - # Purity. - for i in /usr /sw /opt /pkg; do - substituteInPlace ./setup.py --replace $i /no-such-path - done - '' + (if readline != null then '' - export NIX_LDFLAGS="$NIX_LDFLAGS -lncurses" - '' else ""); + preConfigure = + '' + # Purity. + for i in /usr /sw /opt /pkg; do + substituteInPlace ./setup.py --replace $i /no-such-path + done + ''; + + NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2"; setupHook = ./setup-hook.sh; - postInstall = '' - rm -rf "$out/lib/python${majorVersion}/test" - ''; + postInstall = + '' + rm -rf "$out/lib/python${majorVersion}/test" + ''; passthru = { inherit zlibSupport; - sqliteSupport = sqlite != null; - db4Support = db4 != null; - readlineSupport = readline != null; - opensslSupport = openssl != null; - tkSupport = (tk != null) && (tcl != null); libPrefix = "python${majorVersion}"; }; @@ -107,4 +82,4 @@ stdenv.mkDerivation ( { platforms = stdenv.lib.platforms.all; maintainers = [ stdenv.lib.maintainers.simons ]; }; -} // (if stdenv.isDarwin then { NIX_CFLAGS_COMPILE = "-msse2" ; patches = [./search-path.patch]; } else {} ) ) +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index def2581b89e..6f3d96fe081 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2267,7 +2267,6 @@ let python = if getConfig ["python" "full"] false then pythonFull else pythonBase; python26 = if getConfig ["python" "full"] false then python26Full else python26Base; - python27 = if getConfig ["python" "full"] false then python27Full else python27Base; pythonBase = python26Base; pythonFull = python26Full; @@ -2294,19 +2293,10 @@ let ncurses = if getConfig ["python" "curses"] true then ncurses else null; }); - python27Base = lowPrio (makeOverridable (import ../development/interpreters/python/2.7) { - inherit (pkgs) fetchurl stdenv zlib bzip2 gdbm; - arch = if stdenv.isDarwin then darwinArchUtility else null; - sw_vers = if stdenv.isDarwin then darwinSwVersUtility else null; - }); + python27 = callPackage ../development/interpreters/python/2.7 { }; - python27Full = lowPrio (python27Base.override { - inherit (pkgs) db4 sqlite readline openssl tcl tk ncurses; - inherit (pkgs.xlibs) libX11 xproto; - }); - - pythonModules = callPackage ../development/interpreters/python/2.7/modules.nix { - python = python27Base; + python27Modules = callPackage ../development/interpreters/python/2.7/modules.nix { + python = python27; }; python31Base = lowPrio (makeOverridable (import ../development/interpreters/python/3.1) { From 4a5042a1a13f97c8163e77283998b6442d8c2af2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 4 Jan 2011 15:10:03 +0000 Subject: [PATCH 03/59] * 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. Yes, this should make Python programs faster. svn path=/nixpkgs/branches/modular-python/; revision=25387 --- pkgs/development/interpreters/python/2.7/default.nix | 6 ++++++ .../interpreters/python/2.7/nix-store-mtime.patch | 12 ++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 pkgs/development/interpreters/python/2.7/nix-store-mtime.patch diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix index 88147fef31d..8b8699db77d 100644 --- a/pkgs/development/interpreters/python/2.7/default.nix +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -33,6 +33,12 @@ stdenv.mkDerivation { 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 ]; inherit buildInputs; diff --git a/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch b/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch new file mode 100644 index 00000000000..044a96e3a8a --- /dev/null +++ b/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch @@ -0,0 +1,12 @@ +diff -ru -x '*~' Python-2.7.1-orig//Python/import.c Python-2.7.1//Python/import.c +--- Python-2.7.1-orig//Python/import.c 2010-05-20 20:37:55.000000000 +0200 ++++ Python-2.7.1//Python/import.c 2011-01-04 15:55:11.000000000 +0100 +@@ -751,7 +751,7 @@ + return NULL; + } + pyc_mtime = PyMarshal_ReadLongFromFile(fp); +- if (pyc_mtime != mtime) { ++ if (pyc_mtime != mtime && mtime != 1) { + if (Py_VerboseFlag) + PySys_WriteStderr("# %s has bad mtime\n", cpathname); + fclose(fp); From dc1ac3c5d9875861b8d5da46ef6c8fa5ab9a1e24 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 4 Jan 2011 16:10:28 +0000 Subject: [PATCH 04/59] * Add some more Python modules. svn path=/nixpkgs/branches/modular-python/; revision=25390 --- .../interpreters/python/2.7/modules.nix | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/pkgs/development/interpreters/python/2.7/modules.nix b/pkgs/development/interpreters/python/2.7/modules.nix index fd4c0d9c603..55d559967fb 100644 --- a/pkgs/development/interpreters/python/2.7/modules.nix +++ b/pkgs/development/interpreters/python/2.7/modules.nix @@ -1,4 +1,4 @@ -{ stdenv, python, sqlite, tcl, tk, x11, openssl, readline }: +{ stdenv, python, sqlite, tcl, tk, x11, openssl, readline, db4, ncurses, gdbm }: with stdenv.lib; @@ -46,25 +46,41 @@ let in { + bsddb = buildInternalPythonModule { + moduleName = "bsddb"; + deps = [ db4 ]; + }; + + curses = buildInternalPythonModule { + moduleName = "curses"; + deps = [ ncurses ]; + }; + + gdbm = buildInternalPythonModule { + moduleName = "gdbm"; + internalName = "gdbm"; + deps = [ gdbm ]; + }; + sqlite3 = buildInternalPythonModule { moduleName = "sqlite3"; deps = [ sqlite ]; }; - tkinter = buildInternalPythonModule { - moduleName = "tkinter"; - deps = [ tcl tk x11 ]; - }; - ssl = buildInternalPythonModule { moduleName = "ssl"; deps = [ openssl ]; }; + tkinter = buildInternalPythonModule { + moduleName = "tkinter"; + deps = [ tcl tk x11 ]; + }; + readline = buildInternalPythonModule { moduleName = "readline"; internalName = "readline"; deps = [ readline ]; }; - + } From e4bfdb2da96852bcfe72181b5438d5047e835b93 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 4 Jan 2011 16:30:54 +0000 Subject: [PATCH 05/59] * Make Python 2.7 the default Python. svn path=/nixpkgs/branches/modular-python/; revision=25394 --- pkgs/top-level/all-packages.nix | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6f3d96fe081..fe32e904972 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2265,7 +2265,8 @@ let polyml = callPackage ../development/compilers/polyml { }; - python = if getConfig ["python" "full"] false then pythonFull else pythonBase; + python = python27; + python26 = if getConfig ["python" "full"] false then python26Full else python26Base; pythonBase = python26Base; pythonFull = python26Full; @@ -4484,17 +4485,11 @@ let inherit fetchurl fetchsvn stdenv pkgconfig freetype fontconfig libxslt expat libdrm libpng zlib perl mesa xkeyboard_config dbus hal libuuid openssl gperf m4 - autoconf libtool xmlto asciidoc udev; + autoconf libtool xmlto asciidoc udev python; # XXX: Update to newer Automake on the next big rebuild; better yet: # remove the dependency on Automake. automake = automake110x; - - # !!! pythonBase is used instead of python because this causes an - # infinite recursion when the flag python.full is set to true. - # Packages contained in the loop are python, tk, xlibs-wrapper, - # libX11, libxcd (and xcb-proto). - python = pythonBase; }); xorgReplacements = callPackage ../servers/x11/xorg/replacements.nix { }; From 9d792e731675c489e760da5322494e8456cbcd8c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 4 Jan 2011 16:44:38 +0000 Subject: [PATCH 06/59] * Mercurial: always build with HTTPS support. svn path=/nixpkgs/branches/modular-python/; revision=25395 --- pkgs/applications/version-management/mercurial/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 5 +---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/version-management/mercurial/default.nix b/pkgs/applications/version-management/mercurial/default.nix index f3d18036d07..061ed596030 100644 --- a/pkgs/applications/version-management/mercurial/default.nix +++ b/pkgs/applications/version-management/mercurial/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, python, makeWrapper -, guiSupport ? false, tk ? null }: +, guiSupport ? false, tk ? null, ssl }: stdenv.mkDerivation rec { name = "mercurial-1.6.4"; @@ -31,7 +31,7 @@ stdenv.mkDerivation rec { '' for i in $(cd $out/bin && ls); do wrapProgram $out/bin/$i \ - --prefix PYTHONPATH : "$(toPythonPath $out)" \ + --prefix PYTHONPATH : "$(toPythonPath "$out ${ssl}")" \ $WRAP_TK done diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fe32e904972..4810ebb4fb6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6194,10 +6194,7 @@ let mercurial = callPackage ../applications/version-management/mercurial { guiSupport = getConfig ["mercurial" "guiSupport"] false; # for hgk (gitk gui for hg) - python = # allow cloning sources from https servers. - if getConfig ["mercurial" "httpsSupport"] true - then pythonFull - else pythonBase; + inherit (python27Modules) ssl; }; merkaartor = callPackage ../applications/misc/merkaartor { From 5caae6450769f9e6799f03786ea7b9aa7c695d28 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 4 Jan 2011 16:46:14 +0000 Subject: [PATCH 07/59] * Drop pythonBase. svn path=/nixpkgs/branches/modular-python/; revision=25396 --- pkgs/top-level/all-packages.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4810ebb4fb6..145f6a5b06f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2268,7 +2268,6 @@ let python = python27; python26 = if getConfig ["python" "full"] false then python26Full else python26Base; - pythonBase = python26Base; pythonFull = python26Full; pythonWrapper = callPackage ../development/interpreters/python/wrapper.nix { }; From c138d8808db843bbab6e88c70bc7e1eb7e59f863 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 16 Mar 2011 09:47:12 +0000 Subject: [PATCH 08/59] * Fix evaluation. svn path=/nixpkgs/branches/modular-python/; revision=26349 --- pkgs/top-level/all-packages.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 42f4f81cb2b..a8c9ca934f3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2267,6 +2267,7 @@ let polyml = callPackage ../development/compilers/polyml { }; python = python27; + pythonModules = python27Modules; python26 = if getConfig ["python" "full"] false then python26Full else python26Base; pythonFull = python26Full; @@ -4393,6 +4394,7 @@ let python = python24; }; + ### SERVERS rdf4store = callPackage ../servers/http/4store { }; From a8334929f10bdebf1f65fed28a866ef5dc6791c4 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 16 Mar 2011 09:56:19 +0000 Subject: [PATCH 09/59] * Delete Python 2.4. It was only used by "zope", which doesn't even build. svn path=/nixpkgs/branches/modular-python/; revision=26350 --- .../interpreters/python/2.4/default.nix | 54 ------------------- .../interpreters/python/2.4/search-path.patch | 27 ---------- .../interpreters/python/2.4/setup-hook.sh | 15 ------ pkgs/top-level/all-packages.nix | 4 +- 4 files changed, 2 insertions(+), 98 deletions(-) delete mode 100644 pkgs/development/interpreters/python/2.4/default.nix delete mode 100644 pkgs/development/interpreters/python/2.4/search-path.patch delete mode 100644 pkgs/development/interpreters/python/2.4/setup-hook.sh diff --git a/pkgs/development/interpreters/python/2.4/default.nix b/pkgs/development/interpreters/python/2.4/default.nix deleted file mode 100644 index f9673cc68d9..00000000000 --- a/pkgs/development/interpreters/python/2.4/default.nix +++ /dev/null @@ -1,54 +0,0 @@ -{stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2}: - -assert zlibSupport -> zlib != null; - -with stdenv.lib; - -let - - buildInputs = - optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [bzip2] ++ - optional zlibSupport zlib; - -in - -stdenv.mkDerivation { - name = "python-2.4.6"; - majorVersion = "2.4"; - version = "2.4.6"; - - src = fetchurl { - url = http://www.python.org/ftp/python/2.4.6/Python-2.4.6.tar.bz2; - sha256 = "021y88a4ki07dgq19yhg6zfvmncfiz7h5b2255438i9zmlwl246s"; - }; - - patches = [ - # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. - ./search-path.patch - ]; - - inherit buildInputs; - C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); - LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - - configureFlags = "--enable-shared"; - - preConfigure = '' - # Purity. - for i in /usr /sw /opt /pkg; do - substituteInPlace ./setup.py --replace $i /no-such-path - done - ''; - - setupHook = ./setup-hook.sh; - - postInstall = '' - rm -rf $out/lib/python2.4/test - ''; - - passthru = { - inherit zlibSupport; - libPrefix = "python2.4"; - }; -} diff --git a/pkgs/development/interpreters/python/2.4/search-path.patch b/pkgs/development/interpreters/python/2.4/search-path.patch deleted file mode 100644 index 2e7b7526c0c..00000000000 --- a/pkgs/development/interpreters/python/2.4/search-path.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff -rc Python-2.4.4-orig/setup.py Python-2.4.4/setup.py -*** Python-2.4.4-orig/setup.py 2006-10-08 19:41:25.000000000 +0200 ---- Python-2.4.4/setup.py 2007-05-27 16:04:54.000000000 +0200 -*************** -*** 279,288 **** - # Check for AtheOS which has libraries in non-standard locations - if platform == 'atheos': - lib_dirs += ['/system/libs', '/atheos/autolnk/lib'] -- lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) - inc_dirs += ['/system/include', '/atheos/autolnk/include'] -- inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) - - # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) - if platform in ['osf1', 'unixware7', 'openunix8']: - lib_dirs += ['/usr/ccs/lib'] ---- 279,289 ---- - # Check for AtheOS which has libraries in non-standard locations - if platform == 'atheos': - lib_dirs += ['/system/libs', '/atheos/autolnk/lib'] - inc_dirs += ['/system/include', '/atheos/autolnk/include'] - -+ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) -+ inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) -+ - # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) - if platform in ['osf1', 'unixware7', 'openunix8']: - lib_dirs += ['/usr/ccs/lib'] diff --git a/pkgs/development/interpreters/python/2.4/setup-hook.sh b/pkgs/development/interpreters/python/2.4/setup-hook.sh deleted file mode 100644 index 8334fbc21a8..00000000000 --- a/pkgs/development/interpreters/python/2.4/setup-hook.sh +++ /dev/null @@ -1,15 +0,0 @@ -addPythonPath() { - addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python2.4/site-packages -} - -toPythonPath() { - local paths="$1" - local result= - for i in $paths; do - p="$i/lib/python2.4/site-packages" - result="${result}${result:+:}$p" - done - echo $result -} - -envHooks=(${envHooks[@]} addPythonPath) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a8c9ca934f3..74e1bfcb727 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2274,8 +2274,6 @@ let pythonWrapper = callPackage ../development/interpreters/python/wrapper.nix { }; - python24 = callPackage ../development/interpreters/python/2.4 { }; - python26Base = lowPrio (makeOverridable (import ../development/interpreters/python/2.6) { inherit (pkgs) fetchurl stdenv zlib bzip2 gdbm; arch = if stdenv.isDarwin then darwinArchUtility else null; @@ -4390,9 +4388,11 @@ let ZopeInterface = pythonPackages.zopeInterface; + /* zope = callPackage ../development/python-modules/zope { python = python24; }; + */ ### SERVERS From f510e6f7e4bf8b1b8f7b4ae2fae259ca71688f86 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 16 Mar 2011 10:40:13 +0000 Subject: [PATCH 10/59] * Blender seems to work fine with Python 2.7. svn path=/nixpkgs/branches/modular-python/; revision=26354 --- pkgs/top-level/all-packages.nix | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 74e1bfcb727..95cf8ebb080 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5606,23 +5606,11 @@ let bibletime = newScope pkgs.kde45 ../applications/misc/bibletime { qt = qt4; - } ; + }; bitlbee = callPackage ../applications/networking/instant-messengers/bitlbee { }; - # commented out because it's using the new configuration style proposal which is unstable - #biew = import ../applications/misc/biew { - # inherit lib stdenv fetchurl ncurses; - #}; - - # only to be able to compile blender - I couldn't compile the default openal software - # Perhaps this can be removed - don't know which one openal{,soft} is better - freealut_soft = callPackage ../development/libraries/freealut { - openal = openalSoft; }; - - blender = callPackage ../applications/misc/blender/2.49.nix { - python = python26Base; - }; + blender = callPackage ../applications/misc/blender/2.49.nix { }; blender_2_50 = lowPrio (import ../applications/misc/blender { inherit stdenv fetchurl cmake mesa gettext libjpeg libpng zlib openal SDL openexr From 8ca5d5d8b641cd0b2afd4e3ebabe8a83b7b7f7ea Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 09:48:57 +0000 Subject: [PATCH 11/59] * Move python/2.7/modules.nix into python/2.7/default.nix. Also remove the pythonModules attribute. The built-in modules are now accessible as (e.g.) "python.modules.ssl" or "pythonPackages.ssl". svn path=/nixpkgs/branches/modular-python/; revision=26559 --- .../interpreters/python/2.7/default.nix | 192 +++++++++++++----- .../interpreters/python/2.7/modules.nix | 86 -------- pkgs/top-level/all-packages.nix | 19 +- pkgs/top-level/python-packages.nix | 6 +- 4 files changed, 150 insertions(+), 153 deletions(-) delete mode 100644 pkgs/development/interpreters/python/2.7/modules.nix diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix index 8b8699db77d..4bb8e72a1a1 100644 --- a/pkgs/development/interpreters/python/2.7/default.nix +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -1,4 +1,5 @@ { stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2 +, sqlite, tcl, tk, x11, openssl, readline, db4, ncurses, gdbm , darwinArchUtility ? null, darwinSwVersUtility ? null }: @@ -13,23 +14,11 @@ let majorVersion = "2.7"; version = "${majorVersion}.1"; - buildInputs = - optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [ bzip2 ] - ++ optional zlibSupport zlib - ++ optionals stdenv.isDarwin [ darwinArchUtility darwinSwVersUtility ]; - -in - -stdenv.mkDerivation { - name = "python-${version}"; - inherit majorVersion version; - src = fetchurl { url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.bz2"; sha256 = "14i2c7yqa7ljmx2i2bb827n61q33zn23ax96czi8rbkyyny8gqw0"; }; - + patches = [ # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. ./search-path.patch @@ -41,51 +30,150 @@ stdenv.mkDerivation { ./nix-store-mtime.patch ]; - inherit buildInputs; - - C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); - LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - - configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions"; + buildInputs = + optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ + [ bzip2 ] + ++ optional zlibSupport zlib + ++ optionals stdenv.isDarwin [ darwinArchUtility darwinSwVersUtility ]; - preConfigure = - '' - # Purity. - for i in /usr /sw /opt /pkg; do - substituteInPlace ./setup.py --replace $i /no-such-path - done - ''; + + # Build the basic Python interpreter without modules that have + # external dependencies. + python = stdenv.mkDerivation { + name = "python-${version}"; + + inherit majorVersion version src patches buildInputs; - NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2"; + C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); + LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - setupHook = ./setup-hook.sh; + configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions"; - postInstall = - '' - rm -rf "$out/lib/python${majorVersion}/test" - ''; + preConfigure = + '' + # Purity. + for i in /usr /sw /opt /pkg; do + substituteInPlace ./setup.py --replace $i /no-such-path + done + ''; - passthru = { - inherit zlibSupport; - libPrefix = "python${majorVersion}"; + NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2"; + + setupHook = ./setup-hook.sh; + + postInstall = + '' + rm -rf "$out/lib/python${majorVersion}/test" + ''; + + passthru = { + inherit zlibSupport; + libPrefix = "python${majorVersion}"; + }; + + enableParallelBuilding = true; + + meta = { + homepage = "http://python.org"; + description = "Python -- a high-level dynamically-typed programming language"; + longDescription = '' + Python is a remarkably powerful dynamic programming language that + is used in a wide variety of application domains. Some of its key + distinguishing features include: clear, readable syntax; strong + introspection capabilities; intuitive object orientation; natural + expression of procedural code; full modularity, supporting + hierarchical packages; exception-based error handling; and very + high level dynamic data types. + ''; + license = "GPLv2"; + platforms = stdenv.lib.platforms.all; + maintainers = [ stdenv.lib.maintainers.simons ]; + }; }; - enableParallelBuilding = true; - meta = { - homepage = "http://python.org"; - description = "Python -- a high-level dynamically-typed programming language"; - longDescription = '' - Python is a remarkably powerful dynamic programming language that - is used in a wide variety of application domains. Some of its key - distinguishing features include: clear, readable syntax; strong - introspection capabilities; intuitive object orientation; natural - expression of procedural code; full modularity, supporting - hierarchical packages; exception-based error handling; and very - high level dynamic data types. - ''; - license = "GPLv2"; - platforms = stdenv.lib.platforms.all; - maintainers = [ stdenv.lib.maintainers.simons ]; + # This function builds a Python module included in the main Python + # distribution in a separate derivation. + buildInternalPythonModule = + { moduleName + , internalName ? "_" + moduleName + , deps + }: + stdenv.mkDerivation rec { + name = "python-${moduleName}-${python.version}"; + + inherit src patches; + + buildInputs = [ python ] ++ deps; + + C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); + LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); + + configurePhase = "true"; + + buildPhase = + '' + # Fake the build environment that setup.py expects. + ln -s ${python}/include/python*/pyconfig.h . + ln -s ${python}/lib/python*/config/Setup Modules/ + ln -s ${python}/lib/python*/config/Setup.local Modules/ + + substituteInPlace setup.py --replace 'self.extensions = extensions' \ + 'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]' + + python ./setup.py build_ext + ''; + + installPhase = + '' + dest=$out/lib/${python.libPrefix}/site-packages + mkdir -p $dest + cp -p $(find . -name "*.so") $dest/ + ''; + }; + + + # The Python modules included in the main Python distribution, built + # as separate derivations. + modules = { + + bsddb = buildInternalPythonModule { + moduleName = "bsddb"; + deps = [ db4 ]; + }; + + curses = buildInternalPythonModule { + moduleName = "curses"; + deps = [ ncurses ]; + }; + + gdbm = buildInternalPythonModule { + moduleName = "gdbm"; + internalName = "gdbm"; + deps = [ gdbm ]; + }; + + sqlite3 = buildInternalPythonModule { + moduleName = "sqlite3"; + deps = [ sqlite ]; + }; + + ssl = buildInternalPythonModule { + moduleName = "ssl"; + deps = [ openssl ]; + }; + + tkinter = buildInternalPythonModule { + moduleName = "tkinter"; + deps = [ tcl tk x11 ]; + }; + + readline = buildInternalPythonModule { + moduleName = "readline"; + internalName = "readline"; + deps = [ readline ]; + }; + }; -} + +in python // { inherit modules; } diff --git a/pkgs/development/interpreters/python/2.7/modules.nix b/pkgs/development/interpreters/python/2.7/modules.nix deleted file mode 100644 index 55d559967fb..00000000000 --- a/pkgs/development/interpreters/python/2.7/modules.nix +++ /dev/null @@ -1,86 +0,0 @@ -{ stdenv, python, sqlite, tcl, tk, x11, openssl, readline, db4, ncurses, gdbm }: - -with stdenv.lib; - -let - - buildInternalPythonModule = - { moduleName - , internalName ? "_" + moduleName - , deps - }: - stdenv.mkDerivation rec { - name = "python-${moduleName}-${python.version}"; - - src = python.src; - - patches = python.patches; - - buildInputs = [ python ] ++ deps; - - C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); - LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - - configurePhase = "true"; - - buildPhase = - '' - # Fake the build environment that setup.py expects. - ln -s ${python}/include/python*/pyconfig.h . - ln -s ${python}/lib/python*/config/Setup Modules/ - ln -s ${python}/lib/python*/config/Setup.local Modules/ - - substituteInPlace setup.py --replace 'self.extensions = extensions' \ - 'self.extensions = [ext for ext in self.extensions if ext.name in ["${internalName}"]]' - - python ./setup.py build_ext - ''; - - installPhase = - '' - dest=$out/lib/${python.libPrefix}/site-packages - mkdir -p $dest - cp -p $(find . -name "*.so") $dest/ - ''; - }; - -in { - - bsddb = buildInternalPythonModule { - moduleName = "bsddb"; - deps = [ db4 ]; - }; - - curses = buildInternalPythonModule { - moduleName = "curses"; - deps = [ ncurses ]; - }; - - gdbm = buildInternalPythonModule { - moduleName = "gdbm"; - internalName = "gdbm"; - deps = [ gdbm ]; - }; - - sqlite3 = buildInternalPythonModule { - moduleName = "sqlite3"; - deps = [ sqlite ]; - }; - - ssl = buildInternalPythonModule { - moduleName = "ssl"; - deps = [ openssl ]; - }; - - tkinter = buildInternalPythonModule { - moduleName = "tkinter"; - deps = [ tcl tk x11 ]; - }; - - readline = buildInternalPythonModule { - moduleName = "readline"; - internalName = "readline"; - deps = [ readline ]; - }; - -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 95cf8ebb080..66084768725 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -992,10 +992,8 @@ let obexftp = callPackage ../tools/bluetooth/obexftp { }; - offlineimap = import ../tools/networking/offlineimap { - inherit fetchurl; - buildPythonPackage = buildPython27Package; - ssl = pythonModules.ssl; + offlineimap = callPackage ../tools/networking/offlineimap { + ssl = pythonPackages.ssl; }; opendbx = callPackage ../development/libraries/opendbx { }; @@ -2267,7 +2265,6 @@ let polyml = callPackage ../development/compilers/polyml { }; python = python27; - pythonModules = python27Modules; python26 = if getConfig ["python" "full"] false then python26Full else python26Base; pythonFull = python26Full; @@ -2295,10 +2292,6 @@ let python27 = callPackage ../development/interpreters/python/2.7 { }; - python27Modules = callPackage ../development/interpreters/python/2.7/modules.nix { - python = python27; - }; - python3 = callPackage ../development/interpreters/python/3.1 { arch = if stdenv.isDarwin then pkgs.darwinArchUtility else null; sw_vers = if stdenv.isDarwin then pkgs.darwinSwVersUtility else null; @@ -4302,9 +4295,7 @@ let ### DEVELOPMENT / PYTHON MODULES - buildPythonPackage = import ../development/python-modules/generic { - inherit python setuptools makeWrapper lib; - }; + buildPythonPackage = buildPython27Package; buildPython26Package = import ../development/python-modules/generic { inherit makeWrapper lib; @@ -4318,7 +4309,7 @@ let setuptools = setuptools.override { python = python27; doCheck = false; }; }; - pythonPackages = python26Packages; + pythonPackages = python27Packages; python26Packages = recurseIntoAttrs (import ./python-packages.nix { inherit pkgs; @@ -6283,7 +6274,7 @@ let mercurial = callPackage ../applications/version-management/mercurial { guiSupport = getConfig ["mercurial" "guiSupport"] false; # for hgk (gitk gui for hg) - inherit (python27Modules) ssl; + inherit (pythonPackages) ssl; }; merkaartor = callPackage ../applications/misc/merkaartor { diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e09978863ae..56059f86ac1 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1,8 +1,12 @@ { pkgs, python, buildPythonPackage }: -rec { +python.modules // rec { + inherit (pkgs) fetchurl fetchsvn stdenv; + inherit (python.modules) ssl; + + argparse = buildPythonPackage (rec { name = "argparse-1.1"; From d449c4db98af36d6881906bab38b3c9163d79add Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 11:50:47 +0000 Subject: [PATCH 12/59] * Remove Python 2.6, since the only remaining package that used it (Calibre) also works with 2.7. svn path=/nixpkgs/branches/modular-python/; revision=26561 --- pkgs/applications/misc/calibre/default.nix | 9 +- .../interpreters/python/2.6/default.nix | 97 ------------------- .../interpreters/python/2.6/search-path.patch | 27 ------ .../interpreters/python/2.6/setup-hook.sh | 15 --- pkgs/top-level/all-packages.nix | 43 +------- 5 files changed, 8 insertions(+), 183 deletions(-) delete mode 100644 pkgs/development/interpreters/python/2.6/default.nix delete mode 100644 pkgs/development/interpreters/python/2.6/search-path.patch delete mode 100644 pkgs/development/interpreters/python/2.6/setup-hook.sh diff --git a/pkgs/applications/misc/calibre/default.nix b/pkgs/applications/misc/calibre/default.nix index 3dc6a427f25..f892cf175c1 100644 --- a/pkgs/applications/misc/calibre/default.nix +++ b/pkgs/applications/misc/calibre/default.nix @@ -1,6 +1,6 @@ { stdenv, fetchurl, python, pyqt4, sip, popplerQt4, pkgconfig, libpng -, imagemagick, libjpeg, fontconfig, podofo, qt4, mechanize, lxml, dateutil -, pil, cssutils, beautifulsoap, makeWrapper, unrar, chmlib +, imagemagick, libjpeg, fontconfig, podofo, qt4 +, pil, makeWrapper, unrar, chmlib, pythonPackages }: stdenv.mkDerivation rec { @@ -15,8 +15,9 @@ stdenv.mkDerivation rec { buildInputs = [ python pyqt4 sip popplerQt4 pkgconfig libpng imagemagick libjpeg - fontconfig podofo qt4 mechanize lxml dateutil pil makeWrapper - cssutils beautifulsoap chmlib + fontconfig podofo qt4 pil makeWrapper chmlib + pythonPackages.mechanize pythonPackages.lxml pythonPackages.dateutil + pythonPackages.cssutils pythonPackages.beautifulsoap pythonPackages.sqlite3 ]; installPhase = '' diff --git a/pkgs/development/interpreters/python/2.6/default.nix b/pkgs/development/interpreters/python/2.6/default.nix deleted file mode 100644 index 53428de33f4..00000000000 --- a/pkgs/development/interpreters/python/2.6/default.nix +++ /dev/null @@ -1,97 +0,0 @@ -{ stdenv, fetchurl, zlib ? null, zlibSupport ? true, bzip2 -, gdbmSupport ? true, gdbm ? null -, sqlite ? null -, db4 ? null -, readline ? null -, openssl ? null -, tk ? null -, tcl ? null -, libX11 ? null -, xproto ? null -, arch ? null -, sw_vers ? null -, ncurses ? null -}: - -assert zlibSupport -> zlib != null; -assert gdbmSupport -> gdbm != null; -assert stdenv.isDarwin -> arch != null; -assert stdenv.isDarwin -> sw_vers != null; - -with stdenv.lib; - -let - - majorVersion = "2.6"; - version = "${majorVersion}.5"; - - buildInputs = - optional (stdenv ? gcc && stdenv.gcc.libc != null) stdenv.gcc.libc ++ - [bzip2] - ++ optional zlibSupport zlib - ++ optional gdbmSupport gdbm - ++ optional (sqlite != null) sqlite - ++ optional (db4 != null) db4 - ++ optional (readline != null) readline - ++ optional (openssl != null) openssl - ++ optional (tk != null) tk - ++ optional (tcl != null) tcl - ++ optional (libX11 != null) libX11 - ++ optional (xproto != null) xproto - ++ optional (arch != null) arch - ++ optional (sw_vers != null) sw_vers - ++ optional (ncurses != null) ncurses - ; - -in - -stdenv.mkDerivation ( { - name = "python-${version}"; - inherit majorVersion version; - - src = fetchurl { - url = "http://www.python.org/ftp/python/${version}/Python-${version}.tar.bz2"; - sha256 = "62da62eb685621ede2be1275f11b89fa0e0be578db8daa5320d0a7855c0a9ebc"; - }; - - patches = [ - # Look in C_INCLUDE_PATH and LIBRARY_PATH for stuff. - ./search-path.patch - ]; - - inherit buildInputs; - C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); - LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - configureFlags = "--enable-shared --with-threads --enable-unicode --with-wctype-functions"; - - preConfigure = '' - # Purity. - for i in /usr /sw /opt /pkg; do - substituteInPlace ./setup.py --replace $i /no-such-path - done - '' + (if readline != null then '' - export NIX_LDFLAGS="$NIX_LDFLAGS -lncurses" - '' else ""); - - setupHook = ./setup-hook.sh; - - postInstall = '' - rm -rf "$out/lib/python${majorVersion}/test" - ''; - - passthru = { - inherit zlibSupport; - sqliteSupport = sqlite != null; - db4Support = db4 != null; - readlineSupport = readline != null; - opensslSupport = openssl != null; - tkSupport = (tk != null) && (tcl != null); - libPrefix = "python${majorVersion}"; - }; - - enableParallelBuilding = true; - - meta = { - platforms = stdenv.lib.platforms.all; - }; -} // (if stdenv.isDarwin then { NIX_CFLAGS_COMPILE = "-msse2" ; patches = [./search-path.patch]; } else {} ) ) diff --git a/pkgs/development/interpreters/python/2.6/search-path.patch b/pkgs/development/interpreters/python/2.6/search-path.patch deleted file mode 100644 index 2e7b7526c0c..00000000000 --- a/pkgs/development/interpreters/python/2.6/search-path.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff -rc Python-2.4.4-orig/setup.py Python-2.4.4/setup.py -*** Python-2.4.4-orig/setup.py 2006-10-08 19:41:25.000000000 +0200 ---- Python-2.4.4/setup.py 2007-05-27 16:04:54.000000000 +0200 -*************** -*** 279,288 **** - # Check for AtheOS which has libraries in non-standard locations - if platform == 'atheos': - lib_dirs += ['/system/libs', '/atheos/autolnk/lib'] -- lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) - inc_dirs += ['/system/include', '/atheos/autolnk/include'] -- inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) - - # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) - if platform in ['osf1', 'unixware7', 'openunix8']: - lib_dirs += ['/usr/ccs/lib'] ---- 279,289 ---- - # Check for AtheOS which has libraries in non-standard locations - if platform == 'atheos': - lib_dirs += ['/system/libs', '/atheos/autolnk/lib'] - inc_dirs += ['/system/include', '/atheos/autolnk/include'] - -+ lib_dirs += os.getenv('LIBRARY_PATH', '').split(os.pathsep) -+ inc_dirs += os.getenv('C_INCLUDE_PATH', '').split(os.pathsep) -+ - # OSF/1 and Unixware have some stuff in /usr/ccs/lib (like -ldb) - if platform in ['osf1', 'unixware7', 'openunix8']: - lib_dirs += ['/usr/ccs/lib'] diff --git a/pkgs/development/interpreters/python/2.6/setup-hook.sh b/pkgs/development/interpreters/python/2.6/setup-hook.sh deleted file mode 100644 index 290525c3571..00000000000 --- a/pkgs/development/interpreters/python/2.6/setup-hook.sh +++ /dev/null @@ -1,15 +0,0 @@ -addPythonPath() { - addToSearchPathWithCustomDelimiter : PYTHONPATH $1/lib/python2.6/site-packages -} - -toPythonPath() { - local paths="$1" - local result= - for i in $paths; do - p="$i/lib/python2.6/site-packages" - result="${result}${result:+:}$p" - done - echo $result -} - -envHooks=(${envHooks[@]} addPythonPath) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 66084768725..b03ea8ef092 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2266,30 +2266,6 @@ let python = python27; - python26 = if getConfig ["python" "full"] false then python26Full else python26Base; - pythonFull = python26Full; - - pythonWrapper = callPackage ../development/interpreters/python/wrapper.nix { }; - - python26Base = lowPrio (makeOverridable (import ../development/interpreters/python/2.6) { - inherit (pkgs) fetchurl stdenv zlib bzip2 gdbm; - arch = if stdenv.isDarwin then darwinArchUtility else null; - sw_vers = if stdenv.isDarwin then darwinSwVersUtility else null; - }); - - python26Full = lowPrio (python26Base.override { - # FIXME: We lack ncurses support, needed, e.g., for `gpsd'. - db4 = if getConfig ["python" "db4Support"] true then db4 else null; - sqlite = if getConfig ["python" "sqliteSupport"] true then sqlite else null; - readline = if getConfig ["python" "readlineSupport"] true then readline else null; - openssl = if getConfig ["python" "opensslSupport"] true then openssl else null; - tk = if getConfig ["python" "tkSupport"] true then tk else null; - tcl = if getConfig ["python" "tkSupport"] true then tcl else null; - libX11 = if getConfig ["python" "tkSupport"] true then xlibs.libX11 else null; - xproto = if getConfig ["python" "tkSupport"] true then xlibs.xproto else null; - ncurses = if getConfig ["python" "curses"] true then ncurses else null; - }); - python27 = callPackage ../development/interpreters/python/2.7 { }; python3 = callPackage ../development/interpreters/python/3.1 { @@ -2297,6 +2273,8 @@ let sw_vers = if stdenv.isDarwin then pkgs.darwinSwVersUtility else null; }; + pythonWrapper = callPackage ../development/interpreters/python/wrapper.nix { }; + pyrex = pyrex095; pyrex095 = callPackage ../development/interpreters/pyrex/0.9.5.nix { }; @@ -4297,12 +4275,6 @@ let buildPythonPackage = buildPython27Package; - buildPython26Package = import ../development/python-modules/generic { - inherit makeWrapper lib; - python = python26; - setuptools = setuptools.override { python = python26; }; - }; - buildPython27Package = import ../development/python-modules/generic { inherit makeWrapper lib; python = python27; @@ -4311,12 +4283,6 @@ let pythonPackages = python27Packages; - python26Packages = recurseIntoAttrs (import ./python-packages.nix { - inherit pkgs; - python = python26; - buildPythonPackage = buildPython26Package; - }); - python27Packages = recurseIntoAttrs (import ./python-packages.nix { inherit pkgs; python = python27; @@ -5620,10 +5586,7 @@ let bvi = callPackage ../applications/editors/bvi { }; - calibre = callPackage ../applications/misc/calibre { - python = python26Full; - inherit (python26Packages) mechanize lxml dateutil cssutils beautifulsoap; - }; + calibre = callPackage ../applications/misc/calibre { }; carrier = builderDefsPackage (import ../applications/networking/instant-messengers/carrier/2.5.0.nix) { inherit fetchurl stdenv pkgconfig perl perlXMLParser libxml2 openssl nss From 3c9f4e6e7230a2e5513021ddc0da764dda9c4b2f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 12:31:56 +0000 Subject: [PATCH 13/59] * For convenience, provide pythonFull as a wrapper around Python that includes all the internal Python modules. svn path=/nixpkgs/branches/modular-python/; revision=26564 --- pkgs/top-level/all-packages.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b03ea8ef092..73e1f5b45fb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2273,7 +2273,9 @@ let sw_vers = if stdenv.isDarwin then pkgs.darwinSwVersUtility else null; }; - pythonWrapper = callPackage ../development/interpreters/python/wrapper.nix { }; + pythonFull = callPackage ../development/interpreters/python/wrapper.nix { + extraLibs = lib.attrValues python.modules; + }; pyrex = pyrex095; From cef7e52b5af177a01d277418d7771d7a983abc58 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 12:40:53 +0000 Subject: [PATCH 14/59] * ipython: simplify. svn path=/nixpkgs/branches/modular-python/; revision=26565 --- pkgs/shells/ipython/default.nix | 4 +++- pkgs/top-level/all-packages.nix | 14 +------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/pkgs/shells/ipython/default.nix b/pkgs/shells/ipython/default.nix index 68064dded3d..92920818db1 100644 --- a/pkgs/shells/ipython/default.nix +++ b/pkgs/shells/ipython/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, buildPythonPackage }: +{ stdenv, fetchurl, buildPythonPackage, pythonPackages }: buildPythonPackage { name = "ipython-0.10.1"; @@ -8,6 +8,8 @@ buildPythonPackage { sha256 = "18zwrg25zn72w4rmcwxzcw11ibgp001fawm2sz189zv86z70fxi2"; }; + propagatedBuildInputs = [ pythonPackages.readline ]; + doCheck = false; meta = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 73e1f5b45fb..63cfe630d08 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1506,19 +1506,7 @@ let dash = callPackage ../shells/dash { }; - ipython = callPackage ../shells/ipython { - # I did not find any better way of reusing buildPythonPackage+setuptools - # for a python with openssl support - buildPythonPackage = assert pythonFull.readlineSupport; - import ../development/python-modules/generic { - inherit makeWrapper lib; - python = pythonFull; - setuptools = builderDefsPackage (import ../development/python-modules/setuptools) { - inherit makeWrapper; - python = pythonFull; - }; - }; - }; + ipython = callPackage ../shells/ipython { }; tcsh = callPackage ../shells/tcsh { }; From f119c267ded19038abad4e43f2077121ba604891 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 13:13:15 +0000 Subject: [PATCH 15/59] * getmail: don't use pythonFull. svn path=/nixpkgs/branches/modular-python/; revision=26566 --- pkgs/shells/ipython/default.nix | 1 + pkgs/tools/networking/getmail/default.nix | 59 +++++++---------------- pkgs/top-level/all-packages.nix | 4 +- 3 files changed, 19 insertions(+), 45 deletions(-) diff --git a/pkgs/shells/ipython/default.nix b/pkgs/shells/ipython/default.nix index 92920818db1..2c029b764b0 100644 --- a/pkgs/shells/ipython/default.nix +++ b/pkgs/shells/ipython/default.nix @@ -2,6 +2,7 @@ buildPythonPackage { name = "ipython-0.10.1"; + namePrefix = ""; src = fetchurl { url = "http://ipython.scipy.org/dist/0.10.1/ipython-0.10.1.tar.gz"; diff --git a/pkgs/tools/networking/getmail/default.nix b/pkgs/tools/networking/getmail/default.nix index 4e10a2b3be1..77bc9a2b9df 100644 --- a/pkgs/tools/networking/getmail/default.nix +++ b/pkgs/tools/networking/getmail/default.nix @@ -1,48 +1,23 @@ -x@{builderDefsPackage - , python, makeWrapper - , ...}: -builderDefsPackage -(a : -let - helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ - []; +{ stdenv, fetchurl, buildPythonPackage, pythonPackages }: - buildInputs = map (n: builtins.getAttr n x) - (builtins.attrNames (builtins.removeAttrs x helperArgNames)); - sourceInfo = rec { - baseName="getmail"; - version="4.20.0"; - name="${baseName}-${version}"; - url="http://pyropus.ca/software/${baseName}/old-versions/${name}.tar.gz"; - hash="17cpyra61virk1d223w8pdwhv2qzhbwdbnrr1ab1znf4cv9m3knn"; - }; -in -rec { - src = a.fetchurl { - url = sourceInfo.url; - sha256 = sourceInfo.hash; +buildPythonPackage rec { + name = "getmail-4.20.0"; + namePrefix = ""; + + src = fetchurl { + url = "http://pyropus.ca/software/getmail/old-versions/${name}.tar.gz"; + sha256 = "17cpyra61virk1d223w8pdwhv2qzhbwdbnrr1ab1znf4cv9m3knn"; }; - inherit (sourceInfo) name version; - inherit buildInputs; + propagatedBuildInputs = [ pythonPackages.ssl ]; - /* doConfigure should be removed if not needed */ - phaseNames = ["installPythonPackage" "patchShebangs" "wrapBinContentsPython"]; - patchShebangs = (a.doPatchShebangs "$out/bin"); - + doCheck = false; + + installCommand = "python setup.py install --prefix=\"\$prefix\""; + meta = { - description = "A program for retrieval of mail"; - maintainers = with a.lib.maintainers; - [ - raskin - ]; - platforms = with a.lib.platforms; - linux; + description = "A program for retrieving mail"; + maintainers = [ stdenv.lib.maintainers.raskin ]; + platforms = stdenv.lib.platforms.linux; }; - passthru = { - updateInfo = { - downloadPage = "http://pyropus.ca/software/getmail/"; - }; - }; -}) x - +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 63cfe630d08..ced195f24e0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -663,9 +663,7 @@ let gengetopt = callPackage ../development/tools/misc/gengetopt { }; - getmail = callPackage ../tools/networking/getmail { - python = pythonFull; - }; + getmail = callPackage ../tools/networking/getmail { }; getopt = callPackage ../tools/misc/getopt { }; From 60c787522f20a777e80ed14bd12d18c4402b93ff Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 13:23:52 +0000 Subject: [PATCH 16/59] * iotop: don't use pythonFull. svn path=/nixpkgs/branches/modular-python/; revision=26567 --- pkgs/os-specific/linux/iotop/default.nix | 55 +++++++----------------- pkgs/top-level/all-packages.nix | 4 +- 2 files changed, 17 insertions(+), 42 deletions(-) diff --git a/pkgs/os-specific/linux/iotop/default.nix b/pkgs/os-specific/linux/iotop/default.nix index 54a6cf8e457..badcbda7b32 100644 --- a/pkgs/os-specific/linux/iotop/default.nix +++ b/pkgs/os-specific/linux/iotop/default.nix @@ -1,46 +1,23 @@ -x@{builderDefsPackage - , python, makeWrapper - , ...}: -builderDefsPackage -(a : -let - helperArgNames = ["stdenv" "fetchurl" "builderDefsPackage"] ++ - []; +{ stdenv, fetchurl, buildPythonPackage, pythonPackages }: - buildInputs = map (n: builtins.getAttr n x) - (builtins.attrNames (builtins.removeAttrs x helperArgNames)); - sourceInfo = rec { - baseName="iotop"; - version="0.4.1"; - name="${baseName}-${version}"; - url="http://guichaz.free.fr/${baseName}/files/${name}.tar.bz2"; - hash="1dfvw3khr2rvqllvs9wad9ca3ld4i7szqf0ibq87rn36ickrf3ll"; - }; -in -rec { - src = a.fetchurl { - url = sourceInfo.url; - sha256 = sourceInfo.hash; +buildPythonPackage rec { + name = "iotop-0.4.1"; + namePrefix = ""; + + src = fetchurl { + url = "http://guichaz.free.fr/iotop/files/${name}.tar.bz2"; + sha256 = "1dfvw3khr2rvqllvs9wad9ca3ld4i7szqf0ibq87rn36ickrf3ll"; }; - inherit (sourceInfo) name version; - inherit buildInputs; + propagatedBuildInputs = [ pythonPackages.curses ]; - phaseNames = ["installPythonPackage" "wrapBinContentsPython"]; - + doCheck = false; + + #installCommand = "python setup.py install --prefix=\"\$prefix\""; + meta = { description = "A tool to find out the processes doing the most IO"; - maintainers = with a.lib.maintainers; - [ - raskin - ]; - platforms = with a.lib.platforms; - linux; + maintainers = [ stdenv.lib.maintainers.raskin ]; + platforms = stdenv.lib.platforms.linux; }; - passthru = { - updateInfo = { - downloadPage = "http://guichaz.free.fr/iotop/"; - }; - }; -}) x - +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ced195f24e0..19412ffa85e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4692,9 +4692,7 @@ let ifplugd = callPackage ../os-specific/linux/ifplugd { }; - iotop = callPackage ../os-specific/linux/iotop { - python = pythonFull; - }; + iotop = callPackage ../os-specific/linux/iotop { }; iproute = callPackage ../os-specific/linux/iproute { }; From db2b2413dbc67a545f02f9cd7bd83454be086a6e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 13:24:21 +0000 Subject: [PATCH 17/59] svn path=/nixpkgs/branches/modular-python/; revision=26568 --- pkgs/os-specific/linux/iotop/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/pkgs/os-specific/linux/iotop/default.nix b/pkgs/os-specific/linux/iotop/default.nix index badcbda7b32..41d07dd4146 100644 --- a/pkgs/os-specific/linux/iotop/default.nix +++ b/pkgs/os-specific/linux/iotop/default.nix @@ -13,8 +13,6 @@ buildPythonPackage rec { doCheck = false; - #installCommand = "python setup.py install --prefix=\"\$prefix\""; - meta = { description = "A tool to find out the processes doing the most IO"; maintainers = [ stdenv.lib.maintainers.raskin ]; From 120d1757fe35b6e518cb02242aefef643bca9ad3 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 15:30:48 +0000 Subject: [PATCH 18/59] * buildPythonPackage: added an argument `pythonPath' to specify Python dependencies that are *not* propagated to the user environment (as opposed to `propagatedBuildInputs'). For instance, if you install `iotop', you typically don't want its Python dependencies polluting the user environment. * buildPythonPackage: some cleanup (e.g. use function argument defaults instead of `if attrs ? foo then attrs.foo else []'). svn path=/nixpkgs/branches/modular-python/; revision=26571 --- .../python-modules/generic/default.nix | 147 +++++++++--------- pkgs/os-specific/linux/iotop/default.nix | 2 +- 2 files changed, 77 insertions(+), 72 deletions(-) diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index 9dad415d835..1152a0aa447 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -5,46 +5,40 @@ { python, setuptools, makeWrapper, lib }: -{ name, namePrefix ? "python-", src, meta, patches ? [] -, installCommand ? "" +{ name, namePrefix ? "python-" + +, buildInputs ? [] + +, # List of packages that should be added to the PYTHONPATH + # environment variable in programs built by this function. Packages + # in the standard `propagatedBuildInputs' variable are also added. + # The difference is that `pythonPath' is not propagated to the user + # environment. This is preferrable for programs because it doesn't + # pollute the user environment. + pythonPath ? [] + +, installCommand ? + '' + easy_install --prefix="$out" . + '' + +, buildPhase ? "true" + , doCheck ? true, checkPhase ? "python setup.py test" + , postInstall ? "" + , ... } @ attrs: -let - defaultInstallCommand = ''easy_install --prefix="$out" .''; +# Keep extra attributes from ATTR, e.g., `patchPhase', etc. +python.stdenv.mkDerivation (attrs // { + inherit doCheck buildPhase checkPhase; - # Return the list of recursively propagated build inputs of PKG. - recursiveBuildInputs = - pkg: - [ pkg ] ++ - (if pkg ? propagatedBuildNativeInputs - then lib.concatLists (map recursiveBuildInputs - pkg.propagatedBuildNativeInputs) - else []); + name = namePrefix + name; -in + buildInputs = [ python makeWrapper setuptools ] ++ buildInputs ++ pythonPath; -python.stdenv.mkDerivation ( - # Keep extra attributes from ATTR, e.g., `patchPhase', etc. - attrs - - // - - (rec { - inherit src meta patches doCheck checkPhase; - - name = namePrefix + attrs.name; - - buildInputs = [ python setuptools makeWrapper ] ++ - (if attrs ? buildInputs then attrs.buildInputs else []); - - propagatedBuildInputs = [ setuptools ] ++ - (if attrs ? propagatedBuildInputs - then attrs.propagatedBuildInputs - else []); - - buildPhase = "true"; + pythonPath = [ setuptools] ++ pythonPath; # XXX: Should we run `easy_install --always-unzip'? It doesn't seem # to have a noticeable impact on small scripts. @@ -53,49 +47,60 @@ python.stdenv.mkDerivation ( echo "installing \`${name}' with \`easy_install'..." export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH" - ${if installCommand == "" then defaultInstallCommand else installCommand} + ${installCommand} ${postInstall} ''; - postFixup = '' - # Wrap scripts that are under `{s,}bin/' so that they get the right - # $PYTHONPATH. - for i in "$out/bin/"* "$out/sbin/"* - do - if head -n1 "$i" | grep -q "${python}" - then - echo "wrapping \`$i'..." + postFixup = + '' + declare -A pythonPathsSeen + + addToPythonPath() { + local dir="$1" + if [ -n "''${pythonPathsSeen[$dir]}" ]; then return; fi + pythonPathsSeen[$dir]=1 + addToSearchPath program_PYTHONPATH $dir/lib/${python.libPrefix}/site-packages + addToSearchPath program_PATH $dir/bin + local prop="$dir/nix-support/propagated-build-native-inputs" + if [ -e $prop ]; then + local i + for i in $(cat $prop); do + addToPythonPath $i + done + fi + } + + wrapPythonPrograms() { + local dir="$1" + local pythonPath="$2" + local i - # Compute a $PATH prefix for the program. - program_PATH="" - ${lib.concatStrings - (map (path: - ''if [ -d "${path}/bin" ] - then - program_PATH="${path}/bin'' + "\$" + ''{program_PATH:+:}$program_PATH" - fi - '') - (lib.concatMap recursiveBuildInputs propagatedBuildInputs))} + pythonPathsSeen=() + program_PYTHONPATH= + program_PATH= + for i in $pythonPath; do + addToPythonPath $i + done - wrapProgram "$i" \ - --prefix PYTHONPATH ":" \ - ${lib.concatStringsSep ":" - ([ "$out/lib/${python.libPrefix}/site-packages" ] ++ - (map (path: path + "/lib/${python.libPrefix}/site-packages") - (lib.concatMap recursiveBuildInputs - propagatedBuildInputs)))} \ - --prefix PATH ":" "$program_PATH" + for i in $(find "$out" -type f -perm +0100); do + if head -n1 "$i" | grep -q "${python}"; then + echo "wrapping \`$i'..." + wrapProgram "$i" \ + --prefix PYTHONPATH ":" $program_PYTHONPATH \ + --prefix PATH ":" $program_PATH + fi + done + } + wrapPythonPrograms $out "$out $pythonPath" + + # If a user installs a Python package, she probably also wants its + # dependencies in the user environment (since Python modules don't + # have something like an RPATH, so the only way to find the + # dependencies is to have them in the PYTHONPATH variable). + if test -e $out/nix-support/propagated-build-inputs; then + ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages fi - done - - # If a user installs a Python package, she probably also wants its - # dependencies in the user environment (since Python modules don't - # have something like an RPATH, so the only way to find the - # dependencies is to have them in the PYTHONPATH variable). - if test -e $out/nix-support/propagated-build-inputs; then - ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages - fi - ''; -})) + ''; +}) diff --git a/pkgs/os-specific/linux/iotop/default.nix b/pkgs/os-specific/linux/iotop/default.nix index 41d07dd4146..e394b612388 100644 --- a/pkgs/os-specific/linux/iotop/default.nix +++ b/pkgs/os-specific/linux/iotop/default.nix @@ -9,7 +9,7 @@ buildPythonPackage rec { sha256 = "1dfvw3khr2rvqllvs9wad9ca3ld4i7szqf0ibq87rn36ickrf3ll"; }; - propagatedBuildInputs = [ pythonPackages.curses ]; + pythonPath = [ pythonPackages.curses ]; doCheck = false; From 641834ddf6aa2e3876378f04ee4f47c3b2153542 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 15:47:50 +0000 Subject: [PATCH 19/59] * Bazaar: update to 2.3.1. svn path=/nixpkgs/branches/modular-python/; revision=26573 --- .../version-management/bazaar/default.nix | 18 ++++++------------ pkgs/tools/networking/getmail/default.nix | 2 +- pkgs/top-level/all-packages.nix | 4 +--- pkgs/top-level/python-packages.nix | 2 ++ 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix index 46a09ccf422..4509d4f9b6e 100644 --- a/pkgs/applications/version-management/bazaar/default.nix +++ b/pkgs/applications/version-management/bazaar/default.nix @@ -1,30 +1,24 @@ -{stdenv, fetchurl, python, makeWrapper}: +{ stdenv, fetchurl, python, pythonPackages, makeWrapper }: stdenv.mkDerivation rec { - version = "2.2"; - release = ".0"; + version = "2.3"; + release = ".1"; name = "bazaar-${version}${release}"; src = fetchurl { url = "http://launchpad.net/bzr/${version}/${version}${release}/+download/bzr-${version}${release}.tar.gz"; - sha256 = "64cd6c23097884e40686adc7f0ad4a8200e2292bdc5e0caba3563b6f5c32bacf"; + sha256 = "07kx41w4gqv68bcykdflsg68wvpmcyqknzyb4vr1zqlf27hahp53"; }; - buildInputs = [python makeWrapper]; + buildInputs = [ python makeWrapper ]; installPhase = '' python setup.py install --prefix=$out - wrapProgram $out/bin/bzr --prefix PYTHONPATH : "$(toPythonPath $out)" + wrapProgram $out/bin/bzr --prefix PYTHONPATH : "$(toPythonPath $out ${pythonPackages.ssl})" ''; - passthru = { - # If someone wants to assert python features.. - inherit python; - }; - meta = { homepage = http://bazaar-vcs.org/; description = "A distributed version control system that Just Works"; }; - } diff --git a/pkgs/tools/networking/getmail/default.nix b/pkgs/tools/networking/getmail/default.nix index 77bc9a2b9df..23fe3ad3674 100644 --- a/pkgs/tools/networking/getmail/default.nix +++ b/pkgs/tools/networking/getmail/default.nix @@ -9,7 +9,7 @@ buildPythonPackage rec { sha256 = "17cpyra61virk1d223w8pdwhv2qzhbwdbnrr1ab1znf4cv9m3knn"; }; - propagatedBuildInputs = [ pythonPackages.ssl ]; + pythonPath = [ pythonPackages.ssl ]; doCheck = false; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 19412ffa85e..9219da5db65 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5534,9 +5534,7 @@ let batik = callPackage ../applications/graphics/batik { }; - bazaar = callPackage ../applications/version-management/bazaar { - python = pythonFull; - }; + bazaar = callPackage ../applications/version-management/bazaar { }; bazaarTools = builderDefsPackage (import ../applications/version-management/bazaar/tools.nix) { inherit bazaar; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 56059f86ac1..7101a51f82c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -582,6 +582,8 @@ python.modules // rec { sha256 = "1hl3lbwdfl2a64q3dxc73kbiks4iwx5cixlbavyryd8xdr7iziww"; }; + doCheck = false; # see http://code.google.com/p/python-nose/issues/detail?id=340 + meta = { description = "A unittest-based testing framework for python that makes writing and running tests easier"; }; From 47adaa80e310ed270b2bccb05cf2c10d30cde453 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 16:33:33 +0000 Subject: [PATCH 20/59] * Move the wrapPythonPrograms function into a separate setup hook (wrapPython). svn path=/nixpkgs/branches/modular-python/; revision=26580 --- .../version-management/bazaar/default.nix | 8 ++-- pkgs/build-support/trivial-builders.nix | 10 +++-- .../python-modules/generic/default.nix | 45 ++----------------- .../python-modules/generic/wrap.sh | 40 +++++++++++++++++ pkgs/top-level/all-packages.nix | 7 ++- 5 files changed, 59 insertions(+), 51 deletions(-) create mode 100644 pkgs/development/python-modules/generic/wrap.sh diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix index 4509d4f9b6e..71572f85fbc 100644 --- a/pkgs/applications/version-management/bazaar/default.nix +++ b/pkgs/applications/version-management/bazaar/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, python, pythonPackages, makeWrapper }: +{ stdenv, fetchurl, python, pythonPackages, wrapPython }: stdenv.mkDerivation rec { version = "2.3"; @@ -10,11 +10,13 @@ stdenv.mkDerivation rec { sha256 = "07kx41w4gqv68bcykdflsg68wvpmcyqknzyb4vr1zqlf27hahp53"; }; - buildInputs = [ python makeWrapper ]; + buildInputs = [ python wrapPython ]; + + pythonPath = [ pythonPackages.ssl ]; installPhase = '' python setup.py install --prefix=$out - wrapProgram $out/bin/bzr --prefix PYTHONPATH : "$(toPythonPath $out ${pythonPackages.ssl})" + wrapPythonPrograms ''; meta = { diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index 992e28476f0..1998d91d126 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -45,12 +45,14 @@ rec { # Make a package that just contains a setup hook with the given contents. - makeSetupHook = script: - runCommand "hook" {} - '' + makeSetupHook = deps: script: + runCommand "hook" { } + ('' ensureDir $out/nix-support cp ${script} $out/nix-support/setup-hook - ''; + '' + stdenv.lib.optionalString (deps != []) '' + echo ${toString deps} > $out/nix-support/propagated-build-native-inputs + ''); # Write the references (i.e. the runtime dependencies in the Nix store) of `path' to a file. diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index 1152a0aa447..146de620d57 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -3,7 +3,7 @@ (http://pypi.python.org/pypi/setuptools/), which represents a large number of Python packages nowadays. */ -{ python, setuptools, makeWrapper, lib }: +{ python, setuptools, wrapPython, lib }: { name, namePrefix ? "python-" @@ -36,7 +36,7 @@ python.stdenv.mkDerivation (attrs // { name = namePrefix + name; - buildInputs = [ python makeWrapper setuptools ] ++ buildInputs ++ pythonPath; + buildInputs = [ python wrapPython setuptools ] ++ buildInputs ++ pythonPath; pythonPath = [ setuptools] ++ pythonPath; @@ -54,47 +54,8 @@ python.stdenv.mkDerivation (attrs // { postFixup = '' - declare -A pythonPathsSeen + wrapPythonPrograms - addToPythonPath() { - local dir="$1" - if [ -n "''${pythonPathsSeen[$dir]}" ]; then return; fi - pythonPathsSeen[$dir]=1 - addToSearchPath program_PYTHONPATH $dir/lib/${python.libPrefix}/site-packages - addToSearchPath program_PATH $dir/bin - local prop="$dir/nix-support/propagated-build-native-inputs" - if [ -e $prop ]; then - local i - for i in $(cat $prop); do - addToPythonPath $i - done - fi - } - - wrapPythonPrograms() { - local dir="$1" - local pythonPath="$2" - local i - - pythonPathsSeen=() - program_PYTHONPATH= - program_PATH= - for i in $pythonPath; do - addToPythonPath $i - done - - for i in $(find "$out" -type f -perm +0100); do - if head -n1 "$i" | grep -q "${python}"; then - echo "wrapping \`$i'..." - wrapProgram "$i" \ - --prefix PYTHONPATH ":" $program_PYTHONPATH \ - --prefix PATH ":" $program_PATH - fi - done - } - - wrapPythonPrograms $out "$out $pythonPath" - # If a user installs a Python package, she probably also wants its # dependencies in the user environment (since Python modules don't # have something like an RPATH, so the only way to find the diff --git a/pkgs/development/python-modules/generic/wrap.sh b/pkgs/development/python-modules/generic/wrap.sh new file mode 100644 index 00000000000..98162c8807f --- /dev/null +++ b/pkgs/development/python-modules/generic/wrap.sh @@ -0,0 +1,40 @@ +wrapPythonPrograms() { + wrapPythonProgramsIn $out "$out $pythonPath" +} + +wrapPythonProgramsIn() { + local dir="$1" + local pythonPath="$2" + local i + + declare -A pythonPathsSeen=() + program_PYTHONPATH= + program_PATH= + for i in $pythonPath; do + _addToPythonPath $i + done + + for i in $(find "$dir" -type f -perm +0100); do + if head -n1 "$i" | grep -q /python; then + echo "wrapping \`$i'..." + wrapProgram "$i" \ + --prefix PYTHONPATH ":" $program_PYTHONPATH \ + --prefix PATH ":" $program_PATH + fi + done +} + +_addToPythonPath() { + local dir="$1" + if [ -n "${pythonPathsSeen[$dir]}" ]; then return; fi + pythonPathsSeen[$dir]=1 + addToSearchPath program_PYTHONPATH $dir/lib/python2.7/site-packages + addToSearchPath program_PATH $dir/bin + local prop="$dir/nix-support/propagated-build-native-inputs" + if [ -e $prop ]; then + local i + for i in $(cat $prop); do + _addToPythonPath $i + done + fi +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9219da5db65..b126367dbce 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -312,7 +312,9 @@ let inherit stdenv perl cpio contents ubootChooser; }; - makeWrapper = makeSetupHook ../build-support/make-wrapper/make-wrapper.sh; + makeWrapper = makeSetupHook [] ../build-support/make-wrapper/make-wrapper.sh; + + wrapPython = makeSetupHook [ makeWrapper ] ../development/python-modules/generic/wrap.sh; makeModulesClosure = {kernel, rootModules, allowMissing ? false}: import ../build-support/kernel/modules-closure.nix { @@ -343,6 +345,7 @@ let }; platforms = import ./platforms.nix; + ### TOOLS @@ -4264,7 +4267,7 @@ let buildPythonPackage = buildPython27Package; buildPython27Package = import ../development/python-modules/generic { - inherit makeWrapper lib; + inherit wrapPython lib; python = python27; setuptools = setuptools.override { python = python27; doCheck = false; }; }; From 0a7b7374acb7b660509054481aae985876f293a2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 16:48:02 +0000 Subject: [PATCH 21/59] * Bazaar: depend on readline. svn path=/nixpkgs/branches/modular-python/; revision=26581 --- pkgs/applications/version-management/bazaar/default.nix | 3 ++- pkgs/applications/version-management/bazaar/tools.nix | 4 ---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix index 71572f85fbc..1bfaf0cbd5d 100644 --- a/pkgs/applications/version-management/bazaar/default.nix +++ b/pkgs/applications/version-management/bazaar/default.nix @@ -12,7 +12,8 @@ stdenv.mkDerivation rec { buildInputs = [ python wrapPython ]; - pythonPath = [ pythonPackages.ssl ]; + # Readline support is needed by bzrtools. + pythonPath = [ pythonPackages.ssl pythonPackages.readline ]; installPhase = '' python setup.py install --prefix=$out diff --git a/pkgs/applications/version-management/bazaar/tools.nix b/pkgs/applications/version-management/bazaar/tools.nix index 5e5292cf130..5a4b706f418 100644 --- a/pkgs/applications/version-management/bazaar/tools.nix +++ b/pkgs/applications/version-management/bazaar/tools.nix @@ -1,9 +1,5 @@ args : with args; -if ! bazaar.python.readlineSupport then - throw "Bazaar Tools require readline support in python." -else - rec { version = "2.2.0"; src = fetchurl { From 7b3bda471d846664c3e7d683c60b3fa0356d3032 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 16:48:31 +0000 Subject: [PATCH 22/59] * keepnote: depend on pythonPackages.sqlite3 rather than pythonFull. svn path=/nixpkgs/branches/modular-python/; revision=26582 --- pkgs/applications/office/keepnote/default.nix | 5 +++-- pkgs/top-level/all-packages.nix | 12 ------------ 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/pkgs/applications/office/keepnote/default.nix b/pkgs/applications/office/keepnote/default.nix index dc7946d1e82..514b8fd3151 100644 --- a/pkgs/applications/office/keepnote/default.nix +++ b/pkgs/applications/office/keepnote/default.nix @@ -1,14 +1,15 @@ -{stdenv, fetchurl, buildPythonPackage, pygtk}: +{ stdenv, fetchurl, buildPythonPackage, pythonPackages, pygtk }: buildPythonPackage { name = "keepnote-0.6.5"; + namePrefix = ""; src = fetchurl { url = http://rasm.ods.org/keepnote/download/keepnote-0.6.5.tar.gz; sha256 = "0kipcy90r50z4m9p8pyy9wi4dknsiwdrgy974xgakris2rh4lafw"; }; - propagatedBuildInputs = [ pygtk ]; + propagatedBuildInputs = [ pythonPackages.sqlite3 pygtk ]; # Testing fails. doCheck = false; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b126367dbce..c9553be7433 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6132,18 +6132,6 @@ let kdevelop = newScope pkgs.kde4 ../applications/editors/kdevelop { }; keepnote = callPackage ../applications/office/keepnote { - # I did not find any better way of reusing buildPythonPackage+setuptools - # for a python with openssl support - buildPythonPackage = assert pythonFull.sqliteSupport; - import ../development/python-modules/generic { - inherit makeWrapper lib; - python = pythonFull; - setuptools = builderDefsPackage (import ../development/python-modules/setuptools) { - inherit makeWrapper; - python = pythonFull; - }; - }; - # How could this pygtk use also pythonFull, I don't know. pygtk = pyGtkGlade; }; From 968496e69bdd4de62fd447f88da2660bd144735f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 17:19:27 +0000 Subject: [PATCH 23/59] * wrapPythonPrograms: rewrite the common "#! .../env python" idiom to "#! .../python". svn path=/nixpkgs/branches/modular-python/; revision=26583 --- .../python-modules/generic/wrap.sh | 7 ++++++ pkgs/servers/gpsd/default.nix | 22 +++++-------------- pkgs/top-level/all-packages.nix | 5 +---- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/pkgs/development/python-modules/generic/wrap.sh b/pkgs/development/python-modules/generic/wrap.sh index 98162c8807f..fb20c5fd723 100644 --- a/pkgs/development/python-modules/generic/wrap.sh +++ b/pkgs/development/python-modules/generic/wrap.sh @@ -5,6 +5,7 @@ wrapPythonPrograms() { wrapPythonProgramsIn() { local dir="$1" local pythonPath="$2" + local python="$(type -p python)" local i declare -A pythonPathsSeen=() @@ -15,6 +16,12 @@ wrapPythonProgramsIn() { done for i in $(find "$dir" -type f -perm +0100); do + + # Rewrite "#! .../env python" to "#! /nix/store/.../python". + if head -n1 "$i" | grep -q '#!.*/env.*python'; then + sed -i "$i" -e "1 s^.*/env[ ]*python^#! $python^" + fi + if head -n1 "$i" | grep -q /python; then echo "wrapping \`$i'..." wrapProgram "$i" \ diff --git a/pkgs/servers/gpsd/default.nix b/pkgs/servers/gpsd/default.nix index 067e7c4446b..c531eafa05a 100644 --- a/pkgs/servers/gpsd/default.nix +++ b/pkgs/servers/gpsd/default.nix @@ -1,6 +1,6 @@ { fetchurl, stdenv, python, pkgconfig, dbus, dbus_glib -, ncurses, libX11, libXt, libXpm, libXaw, libXext, makeWrapper -, libxslt, xmlto, gpsdUser ? "gpsd" }: +, ncurses, libX11, libXt, libXpm, libXaw, libXext, wrapPython +, libxslt, xmlto, gpsdUser ? "gpsd", pythonPackages }: stdenv.mkDerivation rec { name = "gpsd-2.39"; @@ -13,28 +13,18 @@ stdenv.mkDerivation rec { buildInputs = [ python pkgconfig dbus dbus_glib ncurses libX11 libXt libXpm libXaw libXext - makeWrapper libxslt xmlto + wrapPython libxslt xmlto ]; - configureFlags = "--enable-dbus --enable-gpsd-user=${gpsdUser} " + pythonPath = [ pythonPackages.curses ]; + configureFlags = "--enable-dbus --enable-gpsd-user=${gpsdUser} " # Make sure `xgpsspeed' has libXt and libX11 in its RPATH. + "LDFLAGS=-Wl,--rpath=${libXt}/lib:${libX11}/lib"; doCheck = true; - postInstall = '' - for prog in "$out/bin"/* - do - if grep -q python "$prog" - then - echo "patching \`$prog'..." - wrapProgram "$prog" \ - --prefix PATH ":" "${python}/bin" \ - --prefix PYTHONPATH ":" "$out/lib/${python.libPrefix}/site-packages" - fi - done - ''; + postInstall = "wrapPythonPrograms"; meta = { description = "`gpsd', a GPS service daemon"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c9553be7433..e13a998c35a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6017,10 +6017,7 @@ let gpscorrelate = callPackage ../applications/misc/gpscorrelate { }; - gpsd = callPackage ../servers/gpsd { - # We need a Python with NCurses bindings. - python = pythonFull; - }; + gpsd = callPackage ../servers/gpsd { }; guitone = callPackage ../applications/version-management/guitone { }; From c1b64da1c939550e94151dfd9947e1f166a35fd9 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 28 Mar 2011 18:12:32 +0000 Subject: [PATCH 24/59] * xen: use wrapPython. svn path=/nixpkgs/branches/modular-python/; revision=26584 --- .../virtualization/xen/default.nix | 20 +++++-------------- pkgs/top-level/all-packages.nix | 4 +--- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/pkgs/applications/virtualization/xen/default.nix b/pkgs/applications/virtualization/xen/default.nix index 4c93a277e98..b688bf1e310 100644 --- a/pkgs/applications/virtualization/xen/default.nix +++ b/pkgs/applications/virtualization/xen/default.nix @@ -1,6 +1,6 @@ { stdenv, fetchurl, which, zlib, pkgconfig, SDL, openssl, python , libuuid, gettext, ncurses, dev86, iasl, pciutils, bzip2, xz -, lvm2, utillinux, procps, texinfo, perl }: +, lvm2, utillinux, procps, texinfo, perl, wrapPython, pythonPackages }: with stdenv.lib; @@ -51,9 +51,11 @@ stdenv.mkDerivation { buildInputs = [ which zlib pkgconfig SDL openssl python libuuid gettext ncurses - dev86 iasl pciutils bzip2 xz texinfo perl + dev86 iasl pciutils bzip2 xz texinfo perl wrapPython ]; + pythonPath = [ pythonPackages.curses ]; + makeFlags = "PREFIX=$(out) CONFIG_DIR=/etc"; buildFlags = "xen tools stubdom"; @@ -121,19 +123,7 @@ stdenv.mkDerivation { cp -prvd dist/install/boot $out/boot cp -prvd dist/install/etc $out/etc cp -dR docs/man1 docs/man5 $out/share/man/ - ''; # */ - - postFixup = - '' - # Set the Python search path in all Python scripts. - for fn in $(grep -l '#!.*python' $out/bin/* $out/sbin/*); do - sed -i "$fn" -e "1 a import sys\nsys.path = ['$out/lib/python2.6/site-packages'] + sys.path" - done - - # Remove calls to `env'. - for fn in $(grep -l '#!.*/env.*python' $out/bin/* $out/sbin/*); do - sed -i "$fn" -e "1 s^/nix/store/.*/env.*python^${python}/bin/python^" - done + wrapPythonPrograms ''; # */ meta = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e13a998c35a..27098cca708 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6714,9 +6714,7 @@ let xdg_utils = callPackage ../tools/X11/xdg-utils { }; - xen = callPackage ../applications/virtualization/xen { - python = pythonFull; - }; + xen = callPackage ../applications/virtualization/xen { }; xfig = callPackage ../applications/graphics/xfig { stdenv = overrideGCC stdenv gcc34; From 11b67ccee5a2f3c1b12430c7e1f892ac6bccd1c1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 29 Mar 2011 15:02:15 +0000 Subject: [PATCH 25/59] * Move buildPythonPackage and setuptools into python-packages.nix. This ensures that they're built with the same "python" argument. svn path=/nixpkgs/branches/modular-python/; revision=26593 --- .../python-modules/setuptools/default.nix | 49 ++++++------------- pkgs/top-level/all-packages.nix | 13 +---- pkgs/top-level/python-packages.nix | 17 ++++++- 3 files changed, 33 insertions(+), 46 deletions(-) diff --git a/pkgs/development/python-modules/setuptools/default.nix b/pkgs/development/python-modules/setuptools/default.nix index 1cdbb2e2624..50b73aaf8f6 100644 --- a/pkgs/development/python-modules/setuptools/default.nix +++ b/pkgs/development/python-modules/setuptools/default.nix @@ -1,48 +1,29 @@ -a : -let - fetchurl = a.fetchurl; +{ stdenv, fetchurl, python, wrapPython }: - version = a.lib.attrByPath ["version"] "0.6c11" a; - buildInputs = with a; [ - python makeWrapper - ]; -in -rec { - name = "setuptools-" + version; +stdenv.mkDerivation rec { + name = "setuptools-0.6c11"; src = fetchurl { url = "http://pypi.python.org/packages/source/s/setuptools/${name}.tar.gz"; sha256 = "1lx1hwxkhipyh206bgl90ddnfcnb68bzcvyawczbf833fadyl3v3"; }; - inherit buildInputs; - configureFlags = []; + buildInputs = [ python wrapPython ]; - doCheck = true; + buildPhase = "python setup.py build --build-base $out"; - doMakeCheck = a.fullDepEntry ('' - python setup.py test - '') ["minInit" "doUnpack" "addInputs" "doBuild"]; + installPhase = + '' + dst=$out/lib/${python.libPrefix}/site-packages + mkdir -p $dst + PYTHONPATH=$dst:$PYTHONPATH + python setup.py install --prefix=$out + wrapPythonPrograms + ''; - doBuild = a.fullDepEntry('' - python setup.py build --build-base $out - '') ["addInputs" "doUnpack"]; + doCheck = false; # doesn't work with Python 2.7 - doInstall = a.fullDepEntry('' - ensureDir "$out/lib/${a.python.libPrefix}/site-packages" - - PYTHONPATH="$out/lib/${a.python.libPrefix}/site-packages:$PYTHONPATH" \ - python setup.py install --prefix="$out" - - for i in "$out/bin/"* - do - wrapProgram "$i" \ - --prefix PYTHONPATH ":" \ - "$out/lib/${a.python.libPrefix}/site-packages" - done - '') ["doBuild"]; - - phaseNames = ["doBuild" "doInstall"]; + checkPhase = "python setup.py test"; meta = { description = "Utilities to facilitate the installation of Python packages"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4cdd8083556..b0d77d6e066 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4299,20 +4299,13 @@ let ### DEVELOPMENT / PYTHON MODULES - buildPythonPackage = buildPython27Package; - - buildPython27Package = import ../development/python-modules/generic { - inherit wrapPython lib; - python = python27; - setuptools = setuptools.override { python = python27; doCheck = false; }; - }; + buildPythonPackage = pythonPackages.buildPythonPackage; pythonPackages = python27Packages; python27Packages = recurseIntoAttrs (import ./python-packages.nix { inherit pkgs; python = python27; - buildPythonPackage = buildPython27Package; }); foursuite = callPackage ../development/python-modules/4suite { }; @@ -4355,9 +4348,7 @@ let pyxml = callPackage ../development/python-modules/pyxml { }; - setuptools = builderDefsPackage (import ../development/python-modules/setuptools) { - inherit python makeWrapper; - }; + setuptools = pythonPackages.setuptools; wxPython = wxPython26; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f49beee5f18..dcbe03e615c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1,11 +1,26 @@ -{ pkgs, python, buildPythonPackage }: +{ pkgs, python }: python.modules // rec { + inherit python; + inherit (pkgs) fetchurl fetchsvn stdenv; inherit (python.modules) ssl; + + + buildPythonPackage = import ../development/python-modules/generic { + inherit (pkgs) wrapPython lib; + inherit python setuptools; + }; + + setuptools = import ../development/python-modules/setuptools { + inherit (pkgs) stdenv fetchurl wrapPython; + inherit python; + }; + + argparse = buildPythonPackage (rec { name = "argparse-1.1"; From 353d4508672f05965835f7122b1551f08472776c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 29 Mar 2011 15:19:59 +0000 Subject: [PATCH 26/59] * wrapPythonPrograms: don't hard-code the Python library prefix. svn path=/nixpkgs/branches/modular-python/; revision=26594 --- .../version-management/bazaar/default.nix | 4 ++-- pkgs/applications/virtualization/xen/default.nix | 9 +++++---- pkgs/build-support/trivial-builders.nix | 6 ++++-- pkgs/development/python-modules/generic/wrap.sh | 2 +- pkgs/servers/gpsd/default.nix | 12 ++++++------ pkgs/top-level/all-packages.nix | 4 +--- pkgs/top-level/python-packages.nix | 14 ++++++++++---- 7 files changed, 29 insertions(+), 22 deletions(-) diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix index 1bfaf0cbd5d..8eb28ea04c7 100644 --- a/pkgs/applications/version-management/bazaar/default.nix +++ b/pkgs/applications/version-management/bazaar/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, python, pythonPackages, wrapPython }: +{ stdenv, fetchurl, pythonPackages }: stdenv.mkDerivation rec { version = "2.3"; @@ -10,7 +10,7 @@ stdenv.mkDerivation rec { sha256 = "07kx41w4gqv68bcykdflsg68wvpmcyqknzyb4vr1zqlf27hahp53"; }; - buildInputs = [ python wrapPython ]; + buildInputs = [ pythonPackages.python pythonPackages.wrapPython ]; # Readline support is needed by bzrtools. pythonPath = [ pythonPackages.ssl pythonPackages.readline ]; diff --git a/pkgs/applications/virtualization/xen/default.nix b/pkgs/applications/virtualization/xen/default.nix index b688bf1e310..587f0c99f3a 100644 --- a/pkgs/applications/virtualization/xen/default.nix +++ b/pkgs/applications/virtualization/xen/default.nix @@ -1,6 +1,6 @@ -{ stdenv, fetchurl, which, zlib, pkgconfig, SDL, openssl, python +{ stdenv, fetchurl, which, zlib, pkgconfig, SDL, openssl , libuuid, gettext, ncurses, dev86, iasl, pciutils, bzip2, xz -, lvm2, utillinux, procps, texinfo, perl, wrapPython, pythonPackages }: +, lvm2, utillinux, procps, texinfo, perl, pythonPackages }: with stdenv.lib; @@ -50,8 +50,9 @@ stdenv.mkDerivation { ]; buildInputs = - [ which zlib pkgconfig SDL openssl python libuuid gettext ncurses - dev86 iasl pciutils bzip2 xz texinfo perl wrapPython + [ which zlib pkgconfig SDL openssl libuuid gettext ncurses + dev86 iasl pciutils bzip2 xz texinfo perl + pythonPackages.python pythonPackages.wrapPython ]; pythonPath = [ pythonPackages.curses ]; diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix index 1998d91d126..5defdb55b95 100644 --- a/pkgs/build-support/trivial-builders.nix +++ b/pkgs/build-support/trivial-builders.nix @@ -45,13 +45,15 @@ rec { # Make a package that just contains a setup hook with the given contents. - makeSetupHook = deps: script: - runCommand "hook" { } + makeSetupHook = { deps ? [], substitutions ? {} }: script: + runCommand "hook" substitutions ('' ensureDir $out/nix-support cp ${script} $out/nix-support/setup-hook '' + stdenv.lib.optionalString (deps != []) '' echo ${toString deps} > $out/nix-support/propagated-build-native-inputs + '' + stdenv.lib.optionalString (substitutions != {}) '' + substituteAll ${script} $out/nix-support/setup-hook ''); diff --git a/pkgs/development/python-modules/generic/wrap.sh b/pkgs/development/python-modules/generic/wrap.sh index fb20c5fd723..65f3229ca7c 100644 --- a/pkgs/development/python-modules/generic/wrap.sh +++ b/pkgs/development/python-modules/generic/wrap.sh @@ -35,7 +35,7 @@ _addToPythonPath() { local dir="$1" if [ -n "${pythonPathsSeen[$dir]}" ]; then return; fi pythonPathsSeen[$dir]=1 - addToSearchPath program_PYTHONPATH $dir/lib/python2.7/site-packages + addToSearchPath program_PYTHONPATH $dir/lib/@libPrefix@/site-packages addToSearchPath program_PATH $dir/bin local prop="$dir/nix-support/propagated-build-native-inputs" if [ -e $prop ]; then diff --git a/pkgs/servers/gpsd/default.nix b/pkgs/servers/gpsd/default.nix index c531eafa05a..267665f7a8b 100644 --- a/pkgs/servers/gpsd/default.nix +++ b/pkgs/servers/gpsd/default.nix @@ -1,6 +1,6 @@ -{ fetchurl, stdenv, python, pkgconfig, dbus, dbus_glib -, ncurses, libX11, libXt, libXpm, libXaw, libXext, wrapPython -, libxslt, xmlto, gpsdUser ? "gpsd", pythonPackages }: +{ fetchurl, stdenv, pythonPackages, pkgconfig, dbus, dbus_glib +, ncurses, libX11, libXt, libXpm, libXaw, libXext +, libxslt, xmlto, gpsdUser ? "gpsd" }: stdenv.mkDerivation rec { name = "gpsd-2.39"; @@ -11,9 +11,9 @@ stdenv.mkDerivation rec { }; buildInputs = [ - python pkgconfig dbus dbus_glib ncurses - libX11 libXt libXpm libXaw libXext - wrapPython libxslt xmlto + pythonPackages.python pythonPackages.wrapPython + pkgconfig dbus dbus_glib ncurses libX11 libXt libXpm libXaw libXext + libxslt xmlto ]; pythonPath = [ pythonPackages.curses ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b0d77d6e066..de555d4582d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -312,9 +312,7 @@ let inherit stdenv perl cpio contents ubootChooser; }; - makeWrapper = makeSetupHook [] ../build-support/make-wrapper/make-wrapper.sh; - - wrapPython = makeSetupHook [ makeWrapper ] ../development/python-modules/generic/wrap.sh; + makeWrapper = makeSetupHook {} ../build-support/make-wrapper/make-wrapper.sh; makeModulesClosure = {kernel, rootModules, allowMissing ? false}: import ../build-support/kernel/modules-closure.nix { diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index dcbe03e615c..123c427c5f7 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -10,17 +10,23 @@ python.modules // rec { buildPythonPackage = import ../development/python-modules/generic { - inherit (pkgs) wrapPython lib; - inherit python setuptools; + inherit (pkgs) lib; + inherit python wrapPython setuptools; }; setuptools = import ../development/python-modules/setuptools { - inherit (pkgs) stdenv fetchurl wrapPython; - inherit python; + inherit (pkgs) stdenv fetchurl; + inherit python wrapPython; }; + wrapPython = pkgs.makeSetupHook + { deps = pkgs.makeWrapper; + substitutions.libPrefix = python.libPrefix; + } + ../development/python-modules/generic/wrap.sh; + argparse = buildPythonPackage (rec { name = "argparse-1.1"; From 7cec8397c6d78a404b91a877d947d6fbefc23097 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 29 Mar 2011 16:15:08 +0000 Subject: [PATCH 27/59] * Add some more Nova dependencies: anyjson, amqplib, carrot, sqlalchemy. Updated nose to 1.0.0 to fix "make check" on Python 2.7. svn path=/nixpkgs/branches/modular-python/; revision=26595 --- .../openstack-compute/default.nix | 19 +++- pkgs/top-level/python-packages.nix | 89 +++++++++++++++++-- 2 files changed, 97 insertions(+), 11 deletions(-) diff --git a/pkgs/applications/virtualization/openstack-compute/default.nix b/pkgs/applications/virtualization/openstack-compute/default.nix index f00e1a3dda0..4294ea5ec7f 100644 --- a/pkgs/applications/virtualization/openstack-compute/default.nix +++ b/pkgs/applications/virtualization/openstack-compute/default.nix @@ -1,8 +1,10 @@ -{ stdenv, fetchurl, python, setuptools, pythonPackages }: +{ stdenv, fetchurl, pythonPackages }: + +with stdenv.lib; let version = "2011.1"; in -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "openstack-compute-2011.1"; src = fetchurl { @@ -10,10 +12,17 @@ stdenv.mkDerivation { sha256 = "1g8f75mzjpkzhqk91hga5wpjh8d0kbc9fxxjk0px0qjk20qrmb45"; }; - buildInputs = - [ python setuptools pythonPackages.gflags pythonPackages.netaddr pythonPackages.eventlet + pythonPath = + [ pythonPackages.setuptools pythonPackages.eventlet pythonPackages.greenlet + pythonPackages.gflags pythonPackages.netaddr pythonPackages.sqlalchemy + pythonPackages.carrot ]; + buildInputs = + [ pythonPackages.python + pythonPackages.wrapPython + ] ++ pythonPath; + preConfigure = "export HOME=$(pwd)"; buildPhase = "python setup.py build"; @@ -24,6 +33,8 @@ stdenv.mkDerivation { export PYTHONPATH=$p:$PYTHONPATH mkdir -p $p python setup.py install --prefix=$out + + wrapPythonPrograms ''; meta = { diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 123c427c5f7..3627aaaa617 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -28,6 +28,40 @@ python.modules // rec { ../development/python-modules/generic/wrap.sh; + anyjson = buildPythonPackage rec { + name = "anyjson-0.3.1"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/a/anyjson/${name}.tar.gz"; + md5 = "2b53b5d53fc40af4da7268d3c3e35a50"; + }; + + buildInputs = [ nose ]; + + meta = { + homepage = http://pypi.python.org/pypi/anyjson/; + description = "Wrapper that selects the best available JSON implementation"; + }; + }; + + + amqplib = buildPythonPackage rec { + name = "amqplib-0.6.1"; + + src = fetchurl { + url = "http://py-amqplib.googlecode.com/files/${name}.tgz"; + sha1 = "f124e5e4a6644bf6d1734032a01ac44db1b25a29"; + }; + + doCheck = false; + + meta = { + homepage = http://code.google.com/p/py-amqplib/; + description = "Python client for the Advanced Message Queuing Procotol (AMQP)"; + }; + }; + + argparse = buildPythonPackage (rec { name = "argparse-1.1"; @@ -102,6 +136,28 @@ python.modules // rec { }; }); + + carrot = buildPythonPackage rec { + name = "carrot-0.10.7"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/c/carrot/${name}.tar.gz"; + md5 = "530a0614de3a669314c3acd4995c54d5"; + }; + + buildInputs = [ nose ]; + + propagatedBuildInputs = [ amqplib anyjson ]; + + doCheck = false; # depends on the network + + meta = { + homepage = http://pypi.python.org/pypi/carrot; + description = "AMQP Messaging Framework for Python"; + }; + }; + + cherrypy = buildPythonPackage (rec { name = "cherrypy-3.1.2"; @@ -205,14 +261,14 @@ python.modules // rec { md5 = "dfc96ed14b27392fdc529abcafeed880"; }; - buildInputs = [ nose httplib2 ]; + buildInputs = [ nose httplib2 ]; propagatedBuildInputs = [ greenlet ]; # It tries to scribble in ~/.python-eggs. preConfigure = "export HOME=$(pwd)"; - doCheck = false; # !!! fix; test requires ssl support in Python + doCheck = false; # !!! fix; tests access the network meta = { homepage = http://pypi.python.org/pypi/eventlet/; @@ -596,15 +652,13 @@ python.modules // rec { }); nose = buildPythonPackage { - name = "nose-0.11.3"; + name = "nose-1.0.0"; src = fetchurl { - url = http://python-nose.googlecode.com/files/nose-0.11.3.tar.gz; - sha256 = "1hl3lbwdfl2a64q3dxc73kbiks4iwx5cixlbavyryd8xdr7iziww"; + url = http://somethingaboutorange.com/mrl/projects/nose/nose-1.0.0.tar.gz; + sha256 = "0qm6q232h5r071gwfkiszkmfqc60k7abl15bk495lcdkk62m91db"; }; - doCheck = false; # see http://code.google.com/p/python-nose/issues/detail?id=340 - meta = { description = "A unittest-based testing framework for python that makes writing and running tests easier"; }; @@ -1252,6 +1306,26 @@ python.modules // rec { }; }); + + sqlalchemy = buildPythonPackage { + name = "sqlalchemy-0.6.6"; + + src = fetchurl { + url = mirror://sourceforge/sqlalchemy/0.6.6/SQLAlchemy-0.6.6.tar.gz; + sha256 = "0inj9b66pi447cw500mqn7d09dij20ic3k5bnyhj6rpdl2l83a0l"; + }; + + buildInputs = [ nose ]; + + propagatedBuildInputs = [ python.modules.sqlite3 ]; + + meta = { + homepage = http://www.sqlalchemy.org/; + description = "A Python SQL toolkit and Object Relational Mapper"; + }; + }; + + trac = buildPythonPackage { name = "trac-0.11.5"; @@ -1372,4 +1446,5 @@ python.modules // rec { license = "ZPL"; }; }; + } From e379d6d9966f459192cbce582c1294ee4d6e1a8c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 10:02:23 +0000 Subject: [PATCH 28/59] * python-packages.nix: keep it sorted. svn path=/nixpkgs/branches/modular-python/; revision=26599 --- pkgs/top-level/python-packages.nix | 174 +++++++++++++++-------------- 1 file changed, 90 insertions(+), 84 deletions(-) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3627aaaa617..d1575c107e8 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -458,6 +458,27 @@ python.modules // rec { }; }); + + magic = pkgs.stdenv.mkDerivation rec { + name = "python-${pkgs.file.name}"; + + src = pkgs.file.src; + + buildInputs = [ python pkgs.file ]; + + configurePhase = "cd python"; + + buildPhase = "python setup.py build"; + + installPhase = "python setup.py install --prefix=$out"; + + meta = { + description = "A Python wrapper around libmagic"; + homepage = http://www.darwinsys.com/file/; + }; + }; + + matplotlib = buildPythonPackage ( rec { name = "matplotlib-0.99.1.2"; @@ -559,6 +580,26 @@ python.modules // rec { }); + MySQL_python = buildPythonPackage { + name = "MySQL-python-1.2.3"; + + doCheck = false; + + src = fetchurl { + url = mirror://sourceforge/mysql-python/MySQL-python-1.2.3.tar.gz; + sha256 = "0vkyg9dmj29hzk7fy77f42p7bfj28skyzsjsjry4wqr3z6xnzrkx"; + }; + + propagatedBuildInputs = [ pkgs.mysql pkgs.zlib nose ]; + + meta = { + description = "MySQL database binding for Python"; + + homepage = http://sourceforge.net/projects/mysql-python; + }; + }; + + namebench = buildPythonPackage (rec { name = "namebench-1.0.5"; @@ -1039,6 +1080,54 @@ python.modules // rec { }; }); + + pysvn = pkgs.stdenv.mkDerivation { + name = "pysvn-1.7.2"; + + src = fetchurl { + url = "http://pysvn.barrys-emacs.org/source_kits/pysvn-1.7.2.tar.gz"; + sha256 = "2b2980d200515e754e00a12d99dbce25c1ea90fddf8cba2bfa354c9305c5e455"; + }; + + buildInputs = [ python pkgs.subversion pkgs.apr pkgs.aprutil pkgs.expat pkgs.neon pkgs.openssl ] + ++ (if stdenv.isLinux then [pkgs.e2fsprogs] else []); + + # There seems to be no way to pass that path to configure. + NIX_CFLAGS_COMPILE="-I${pkgs.aprutil}/include/apr-1"; + + configurePhase = '' + cd Source + python setup.py backport + python setup.py configure \ + --apr-inc-dir=${pkgs.apr}/include/apr-1 \ + --apr-lib-dir=${pkgs.apr}/lib \ + --svn-root-dir=${pkgs.subversion} + '' + (if !stdenv.isDarwin then "" else '' + sed -i -e 's|libpython2.7.dylib|lib/libpython2.7.dylib|' Makefile + ''); + + # The regression test suite expects locale support, which our glibc + # doesn't have by default. + doCheck = false; + checkPhase = "make -C ../Tests"; + + installPhase = '' + dest=$(toPythonPath $out)/pysvn + ensureDir $dest + cp pysvn/__init__.py $dest/ + cp pysvn/_pysvn*.so $dest/ + ensureDir $out/share/doc + mv -v ../Docs $out/share/doc/pysvn-1.7.2 + rm -v $out/share/doc/pysvn-1.7.2/generate_cpp_docs_from_html_docs.py + ''; + + meta = { + description = "Python bindings for Subversion"; + homepage = "http://pysvn.tigris.org/"; + }; + }; + + pyutil = buildPythonPackage (rec { name = "pyutil-1.7.9"; @@ -1157,90 +1246,7 @@ python.modules // rec { }; }; - pysvn = pkgs.stdenv.mkDerivation { - name = "pysvn-1.7.2"; - - src = fetchurl { - url = "http://pysvn.barrys-emacs.org/source_kits/pysvn-1.7.2.tar.gz"; - sha256 = "2b2980d200515e754e00a12d99dbce25c1ea90fddf8cba2bfa354c9305c5e455"; - }; - - buildInputs = [ python pkgs.subversion pkgs.apr pkgs.aprutil pkgs.expat pkgs.neon pkgs.openssl ] - ++ (if stdenv.isLinux then [pkgs.e2fsprogs] else []); - - # There seems to be no way to pass that path to configure. - NIX_CFLAGS_COMPILE="-I${pkgs.aprutil}/include/apr-1"; - - configurePhase = '' - cd Source - python setup.py backport - python setup.py configure \ - --apr-inc-dir=${pkgs.apr}/include/apr-1 \ - --apr-lib-dir=${pkgs.apr}/lib \ - --svn-root-dir=${pkgs.subversion} - '' + (if !stdenv.isDarwin then "" else '' - sed -i -e 's|libpython2.7.dylib|lib/libpython2.7.dylib|' Makefile - ''); - - # The regression test suite expects locale support, which our glibc - # doesn't have by default. - doCheck = false; - checkPhase = "make -C ../Tests"; - - installPhase = '' - dest=$(toPythonPath $out)/pysvn - ensureDir $dest - cp pysvn/__init__.py $dest/ - cp pysvn/_pysvn*.so $dest/ - ensureDir $out/share/doc - mv -v ../Docs $out/share/doc/pysvn-1.7.2 - rm -v $out/share/doc/pysvn-1.7.2/generate_cpp_docs_from_html_docs.py - ''; - - meta = { - description = "Python bindings for Subversion"; - homepage = "http://pysvn.tigris.org/"; - }; - }; - - magic = pkgs.stdenv.mkDerivation rec { - name = "python-${pkgs.file.name}"; - - src = pkgs.file.src; - - buildInputs = [ python pkgs.file ]; - - configurePhase = "cd python"; - - buildPhase = "python setup.py build"; - - installPhase = "python setup.py install --prefix=$out"; - - meta = { - description = "A Python wrapper around libmagic"; - homepage = http://www.darwinsys.com/file/; - }; - }; - - MySQL_python = buildPythonPackage { - name = "MySQL-python-1.2.3"; - - doCheck = false; - - src = fetchurl { - url = mirror://sourceforge/mysql-python/MySQL-python-1.2.3.tar.gz; - sha256 = "0vkyg9dmj29hzk7fy77f42p7bfj28skyzsjsjry4wqr3z6xnzrkx"; - }; - - propagatedBuildInputs = [ pkgs.mysql pkgs.zlib nose ]; - - meta = { - description = "MySQL database binding for Python"; - - homepage = http://sourceforge.net/projects/mysql-python; - }; - }; - + setuptoolsDarcs = buildPythonPackage { name = "setuptools-darcs-1.2.9"; From cc456b13e558fbc0829b18a45743d7daf9f69ffb Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 11:54:17 +0000 Subject: [PATCH 29/59] * Added Python packages dtopt, IPy, M2Crypto, Paste, PasteDeploy, Routes, WebOb and WebTest. * Updated Boto and Twisted. svn path=/nixpkgs/branches/modular-python/; revision=26601 --- pkgs/top-level/python-packages.nix | 164 +++++++++++++++++++++++++++-- 1 file changed, 158 insertions(+), 6 deletions(-) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d1575c107e8..08662ca8b8e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -114,11 +114,11 @@ python.modules // rec { }); boto = buildPythonPackage (rec { - name = "boto-1.9b"; + name = "boto-2.0b4"; src = fetchurl { url = "http://boto.googlecode.com/files/${name}.tar.gz"; - sha256 = "0kir3ddm79rxdf7wb5czmxpbnqzgj3j966q4mach29kkb98p48wz"; + sha1 = "3e1deab58b8432d01baef1d37f17cbf6fa999f8d"; }; meta = { @@ -253,6 +253,21 @@ python.modules // rec { }); + dtopt = buildPythonPackage rec { + name = "dtopt-0.1"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/d/dtopt/${name}.tar.gz"; + md5 = "9a41317149e926fcc408086aedee6bab"; + }; + + meta = { + description = "Add options to doctest examples while they are running"; + homepage = http://pypi.python.org/pypi/dtopt; + }; + }; + + eventlet = buildPythonPackage rec { name = "eventlet-0.9.14"; @@ -403,6 +418,24 @@ python.modules // rec { }; + ipy = buildPythonPackage rec { + version = "0.74"; + name = "ipy-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/I/IPy/IPy-${version}.tar.gz"; + md5 = "f4f7ddc7c5e55a47222a5cc6c0a87b6d"; + }; + + doCheck = false; + + meta = { + description = "Class and tools for handling of IPv4 and IPv6 addresses and networks"; + homepage = http://pypi.python.org/pypi/IPy; + }; + }; + + jinja2 = buildPythonPackage { name = "jinja2-2.2.1"; @@ -479,6 +512,28 @@ python.modules // rec { }; + m2crypto = buildPythonPackage rec { + version = "0.21.1"; + name = "m2crypto-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/M/M2Crypto/M2Crypto-${version}.tar.gz"; + md5 = "f93d8462ff7646397a9f77a2fe602d17"; + }; + + buildInputs = [ pkgs.swig pkgs.openssl ]; + + buildPhase = "python setup.py build_ext --openssl=${pkgs.openssl}"; + + doCheck = false; # another test that depends on the network. + + meta = { + description = "A Python crypto and SSL toolkit"; + homepage = http://chandlerproject.org/Projects/MeTooCrypto; + }; + }; + + matplotlib = buildPythonPackage ( rec { name = "matplotlib-0.99.1.2"; @@ -835,6 +890,46 @@ python.modules // rec { }; }; + + paste = buildPythonPackage rec { + name = "paste-1.7.5.1"; + + src = fetchurl { + url = http://pypi.python.org/packages/source/P/Paste/Paste-1.7.5.1.tar.gz; + md5 = "7ea5fabed7dca48eb46dc613c4b6c4ed"; + }; + + buildInputs = [ nose ]; + + doCheck = false; # some files required by the test seem to be missing + + meta = { + description = "Tools for using a Web Server Gateway Interface stack"; + homepage = http://pythonpaste.org/; + }; + }; + + + paste_deploy = buildPythonPackage rec { + version = "1.3.4"; + name = "paste-deploy-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/P/PasteDeploy/PasteDeploy-${version}.tar.gz"; + md5 = "eb4b3e2543d54401249c2cbd9f2d014f"; + }; + + buildInputs = [ nose ]; + + doCheck = false; # can't find "FakeEgg.app", apparently missing from the tarball + + meta = { + description = "Load, configure, and compose WSGI applications and servers"; + homepage = http://pythonpaste.org/deploy/; + }; + }; + + pexpect = buildPythonPackage { name = "pexpect-2.3"; @@ -1247,6 +1342,23 @@ python.modules // rec { }; + routes = buildPythonPackage rec { + name = "routes-1.12.3"; + + src = fetchurl { + url = http://pypi.python.org/packages/source/R/Routes/Routes-1.12.3.tar.gz; + md5 = "9740ff424ff6b841632c784a38fb2be3"; + }; + + propagatedBuildInputs = [ paste webtest ]; + + meta = { + description = "A Python re-implementation of the Rails routes system for mapping URLs to application actions"; + homepage = http://routes.groovie.org/; + }; + }; + + setuptoolsDarcs = buildPythonPackage { name = "setuptools-darcs-1.2.9"; @@ -1353,12 +1465,12 @@ python.modules // rec { }; }; - twisted = buildPythonPackage { - name = "twisted-10.1.0"; + twisted = buildPythonPackage rec { + name = "twisted-10.2.0"; src = fetchurl { - url = http://tmrc.mit.edu/mirror/twisted/Twisted/10.1/Twisted-10.1.0.tar.bz2; - sha256 = "eda6e0e9e5ef6f6c19ab75bcb094f83a12ee25fe589fbcddf946e8a655c8070b"; + url = http://tmrc.mit.edu/mirror/twisted/Twisted/10.2/Twisted-10.2.0.tar.bz2; + sha256 = "110c30z622jn14yany1sxfaqj5qx20n9rc9zqacxlwma30fdcbjn"; }; propagatedBuildInputs = [ zopeInterface ]; @@ -1386,6 +1498,46 @@ python.modules // rec { }; }; + + webob = buildPythonPackage rec { + version = "1.0.6"; + name = "webob-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/W/WebOb/WebOb-${version}.zip"; + md5 = "8e46dd755f6998d471bfbcb4def897ff"; + }; + + buildInputs = [ pkgs.unzip ]; + + # The test requires "webtest", which is a cyclic dependency. (WTF?) + doCheck = false; + + meta = { + description = "WSGI request and response object"; + homepage = http://pythonpaste.org/webob/; + }; + }; + + + webtest = buildPythonPackage rec { + version = "1.2.3"; + name = "webtest-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/W/WebTest/WebTest-${version}.tar.gz"; + md5 = "585f9331467e6d99acaba4051c1c5878"; + }; + + propagatedBuildInputs = [ nose webob dtopt ]; + + meta = { + description = "Helper to test WSGI applications"; + homepage = http://pythonpaste.org/webtest/; + }; + }; + + zbase32 = buildPythonPackage (rec { name = "zbase32-1.1.2"; From 69b974bda61c72bd1bc0ec8132b8315269d9e0ae Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 12:27:04 +0000 Subject: [PATCH 30/59] * Generic Python builder: support preCheck and postCheck. svn path=/nixpkgs/branches/modular-python/; revision=26602 --- pkgs/development/python-modules/generic/default.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/generic/default.nix b/pkgs/development/python-modules/generic/default.nix index 146de620d57..46149177320 100644 --- a/pkgs/development/python-modules/generic/default.nix +++ b/pkgs/development/python-modules/generic/default.nix @@ -24,7 +24,14 @@ , buildPhase ? "true" -, doCheck ? true, checkPhase ? "python setup.py test" +, doCheck ? true + +, checkPhase ? + '' + runHook preCheck + python setup.py test + runHook postCheck + '' , postInstall ? "" From 2601071d70170cf6f5df1b2460fea1f136e293c2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 12:27:54 +0000 Subject: [PATCH 31/59] * Added decorator, ScriptTest, sqlalchemy-migrate, tempita and unittest2. svn path=/nixpkgs/branches/modular-python/; revision=26603 --- pkgs/top-level/python-packages.nix | 92 ++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 08662ca8b8e..a80ed0f7125 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -253,6 +253,20 @@ python.modules // rec { }); + decorator = buildPythonPackage rec { + name = "decorator-3.3.0"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/d/decorator/${name}.tar.gz"; + md5 = "0d62c81d9db4923e88e6a94581807cf6"; + }; + + meta = { + homepage = http://pypi.python.org/pypi/decorator; + }; + }; + + dtopt = buildPythonPackage rec { name = "dtopt-0.1"; @@ -1359,6 +1373,24 @@ python.modules // rec { }; + scripttest = buildPythonPackage rec { + version = "1.1.1"; + name = "scripttest-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/S/ScriptTest/ScriptTest-${version}.tar.gz"; + md5 = "592ce890764c3f546d35b4d7c40c32ef"; + }; + + buildInputs = [ nose ]; + + meta = { + description = "A library for testing interactive command-line applications"; + homepage = http://pypi.python.org/pypi/ScriptTest/; + }; + }; + + setuptoolsDarcs = buildPythonPackage { name = "setuptools-darcs-1.2.9"; @@ -1444,6 +1476,51 @@ python.modules // rec { }; + sqlalchemy_migrate = buildPythonPackage rec { + name = "sqlalchemy-migrate-0.6.1"; + + src = fetchurl { + url = "http://sqlalchemy-migrate.googlecode.com/files/${name}.tar.gz"; + sha1 = "17168b5fa066bd56fd93f26345525377e8a83d8a"; + }; + + buildInputs = [ nose unittest2 scripttest ]; + + propagatedBuildInputs = [ tempita decorator sqlalchemy ]; + + preCheck = + '' + echo sqlite:///__tmp__ > test_db.cfg + ''; + + # Some tests fail with "unexpected keyword argument 'script_path'". + doCheck = false; + + meta = { + homepage = http://code.google.com/p/sqlalchemy-migrate/; + description = "Schema migration tools for SQLAlchemy"; + }; + }; + + + tempita = buildPythonPackage rec { + version = "0.4"; + name = "tempita-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/T/Tempita/Tempita-${version}.tar.gz"; + md5 = "0abe015a72e748d0c6284679a497426c"; + }; + + buildInputs = [ nose ]; + + meta = { + homepage = http://pythonpaste.org/tempita/; + description = "A very small text templating language"; + }; + }; + + trac = buildPythonPackage { name = "trac-0.11.5"; @@ -1499,6 +1576,21 @@ python.modules // rec { }; + unittest2 = buildPythonPackage rec { + name = "unittest2-0.5.1"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/u/unittest2/${name}.tar.gz"; + md5 = "a0af5cac92bbbfa0c3b0e99571390e0f"; + }; + + meta = { + description = "A backport of the new features added to the unittest testing framework in Python 2.7"; + homepage = http://pypi.python.org/pypi/unittest2; + }; + }; + + webob = buildPythonPackage rec { version = "1.0.6"; name = "webob-${version}"; From 6c77dc3587e135fcf402a003ca614283cd5d9a25 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 12:51:01 +0000 Subject: [PATCH 32/59] * Add distutils-extra. svn path=/nixpkgs/branches/modular-python/; revision=26604 --- pkgs/top-level/python-packages.nix | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index a80ed0f7125..3600dd752e8 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6,8 +6,6 @@ python.modules // rec { inherit (pkgs) fetchurl fetchsvn stdenv; - inherit (python.modules) ssl; - buildPythonPackage = import ../development/python-modules/generic { inherit (pkgs) lib; @@ -267,6 +265,21 @@ python.modules // rec { }; + distutils_extra = buildPythonPackage rec { + name = "distutils-extra-2.26"; + + src = fetchurl { + url = "http://launchpad.net/python-distutils-extra/trunk/2.26/+download/python-${name}.tar.gz"; + md5 = "7caded30a45907b5cdb10ac4182846eb"; + }; + + meta = { + homepage = https://launchpad.net/python-distutils-extra; + description = "Enhancements to Python's distutils"; + }; + }; + + dtopt = buildPythonPackage rec { name = "dtopt-0.1"; @@ -1432,11 +1445,11 @@ python.modules // rec { }; simplejson = buildPythonPackage (rec { - name = "simplejson-2.1.1"; + name = "simplejson-2.1.3"; src = fetchurl { url = "http://pypi.python.org/packages/source/s/simplejson/${name}.tar.gz"; - sha256 = "8c1c833c5b997bf7b75bf9a02a2d2884b8427816228eac0fb84791be44d2f612"; + md5 = "58d9b1d8fa17ea4ce205cea088607e02"; }; meta = { From b6126a3a0aeaa35a255fe2b4416dffca7df05f77 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 12:51:16 +0000 Subject: [PATCH 33/59] * Nova updated to 2011.1.1. svn path=/nixpkgs/branches/modular-python/; revision=26605 --- .../openstack-compute/default.nix | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/pkgs/applications/virtualization/openstack-compute/default.nix b/pkgs/applications/virtualization/openstack-compute/default.nix index 4294ea5ec7f..d4a3efddbd5 100644 --- a/pkgs/applications/virtualization/openstack-compute/default.nix +++ b/pkgs/applications/virtualization/openstack-compute/default.nix @@ -1,26 +1,27 @@ -{ stdenv, fetchurl, pythonPackages }: +{ stdenv, fetchurl, pythonPackages, intltool }: with stdenv.lib; -let version = "2011.1"; in +let version = "2011.1.1"; in stdenv.mkDerivation rec { - name = "openstack-compute-2011.1"; + name = "openstack-compute-${version}"; src = fetchurl { - url = http://launchpad.net/nova/bexar/2011.1/+download/nova-2011.1.tar.gz; - sha256 = "1g8f75mzjpkzhqk91hga5wpjh8d0kbc9fxxjk0px0qjk20qrmb45"; + url = "http://launchpad.net/nova/bexar/${version}/+download/nova-${version}.tar.gz"; + sha256 = "0xd7cxn60vzhkvjwnj0i6jfcxaggwwyw2pnhl4qnb759q9hvk1b9"; }; - pythonPath = - [ pythonPackages.setuptools pythonPackages.eventlet pythonPackages.greenlet - pythonPackages.gflags pythonPackages.netaddr pythonPackages.sqlalchemy - pythonPackages.carrot + pythonPath = with pythonPackages; + [ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes + paste_deploy m2crypto ipy boto twisted sqlalchemy_migrate + distutils_extra simplejson readline ]; buildInputs = [ pythonPackages.python pythonPackages.wrapPython + intltool ] ++ pythonPath; preConfigure = "export HOME=$(pwd)"; @@ -28,12 +29,22 @@ stdenv.mkDerivation rec { buildPhase = "python setup.py build"; installPhase = - '' + '' p=$(toPythonPath $out) export PYTHONPATH=$p:$PYTHONPATH mkdir -p $p python setup.py install --prefix=$out + # Nova doesn't like to be called ".nova-foo-wrapped" because it + # computes some stuff from its own argv[0]. So call the wrapped + # programs ".nova-foo" by overriding wrapProgram. + wrapProgram() { + local prog="$1" + local hidden="$(dirname "$prog")/.$(basename "$prog")" + mv $prog $hidden + makeWrapper $hidden $prog "$@" + } + wrapPythonPrograms ''; From 8df32943a0e337d73c70bb7ed20704901ba34d90 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 14:17:26 +0000 Subject: [PATCH 34/59] * ec2-api-tools updated to 1.4.2.2. svn path=/nixpkgs/branches/modular-python/; revision=26606 --- pkgs/tools/virtualization/amazon-ec2-api-tools/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/virtualization/amazon-ec2-api-tools/default.nix b/pkgs/tools/virtualization/amazon-ec2-api-tools/default.nix index e242b1e69d1..0160b1bbe19 100644 --- a/pkgs/tools/virtualization/amazon-ec2-api-tools/default.nix +++ b/pkgs/tools/virtualization/amazon-ec2-api-tools/default.nix @@ -1,11 +1,11 @@ { stdenv, fetchurl, unzip, makeWrapper, jre }: stdenv.mkDerivation { - name = "ec2-api-tools-1.3-53907"; + name = "ec2-api-tools-1.4.2.2"; src = fetchurl { url = http://s3.amazonaws.com/ec2-downloads/ec2-api-tools.zip; - sha256 = "1jdkc74a9fmjqwvq1pnbsnfqyxxjg5zgaynybmdms5piinvb204d"; + sha256 = "0qv3dy6zx5yxix3g90agj39k35sry3cifhzlhprv35lapiynsd0j"; }; buildInputs = [ unzip makeWrapper ]; From 45159cdc89701663d3fa8dac9d2e6040d7ca9ab3 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 14:37:53 +0000 Subject: [PATCH 35/59] * Added euca2ools. svn path=/nixpkgs/branches/modular-python/; revision=26607 --- .../virtualization/euca2ools/default.nix | 34 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 pkgs/tools/virtualization/euca2ools/default.nix diff --git a/pkgs/tools/virtualization/euca2ools/default.nix b/pkgs/tools/virtualization/euca2ools/default.nix new file mode 100644 index 00000000000..c846371f108 --- /dev/null +++ b/pkgs/tools/virtualization/euca2ools/default.nix @@ -0,0 +1,34 @@ +{ stdenv, fetchurl, which, pythonPackages }: + +stdenv.mkDerivation rec { + name = "euca2ools-1.3.1"; + namePrefix = ""; + + src = fetchurl { + url = "http://eucalyptussoftware.com/downloads/releases/${name}.tar.gz"; + sha256 = "1k4hakbxqsv2gzcdrf6dbyrpnajcan9yilddhs47cg7lgqw7b41f"; + }; + + makeFlags = "PREFIX=$(out)"; + + buildInputs = [ which pythonPackages.python pythonPackages.wrapPython ]; + + pythonPath = [ pythonPackages.setuptools pythonPackages.boto pythonPackages.m2crypto pythonPackages.ssl ]; + + preBuild = + '' + substituteInPlace Makefile --replace "-o root" "" + + substituteInPlace euca2ools/Makefile \ + --replace 'python setup.py install' "python setup.py install --prefix=$out" + ''; + + postInstall = "wrapPythonPrograms"; + + meta = { + homepage = http://open.eucalyptus.com/downloads; + description = "Tools for interacting with Amazon EC2/S3-compatible cloud computing services"; + maintainers = [ stdenv.lib.maintainers.eelco ]; + platforms = stdenv.lib.platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index de555d4582d..ea1d8435119 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -602,6 +602,8 @@ let ethtool = callPackage ../tools/misc/ethtool { }; + euca2ools = callPackage ../tools/virtualization/euca2ools { }; + exif = callPackage ../tools/graphics/exif { }; exiftags = callPackage ../tools/graphics/exiftags { }; From 83b4c9cd8f98c70d3e1afc76e7adeff05e0de17b Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 14:42:20 +0000 Subject: [PATCH 36/59] * Provide an old version of Boto for euca2ools. svn path=/nixpkgs/branches/modular-python/; revision=26608 --- .../virtualization/euca2ools/default.nix | 3 ++- pkgs/top-level/python-packages.nix | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/pkgs/tools/virtualization/euca2ools/default.nix b/pkgs/tools/virtualization/euca2ools/default.nix index c846371f108..b82f7de1b2a 100644 --- a/pkgs/tools/virtualization/euca2ools/default.nix +++ b/pkgs/tools/virtualization/euca2ools/default.nix @@ -13,7 +13,8 @@ stdenv.mkDerivation rec { buildInputs = [ which pythonPackages.python pythonPackages.wrapPython ]; - pythonPath = [ pythonPackages.setuptools pythonPackages.boto pythonPackages.m2crypto pythonPackages.ssl ]; + # We need boto 1.9 for now. See https://bugs.launchpad.net/euca2ools/devel/+bug/623888 + pythonPath = [ pythonPackages.setuptools pythonPackages.boto_1_9 pythonPackages.m2crypto pythonPackages.ssl ]; preBuild = '' diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3600dd752e8..0f78b2be2ae 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -111,6 +111,32 @@ python.modules // rec { }; }); + + # euca2ools (and maybe Nova) needs boto 1.9, 2.0 doesn't work. + boto_1_9 = buildPythonPackage (rec { + name = "boto-1.9b"; + + src = fetchurl { + url = "http://boto.googlecode.com/files/${name}.tar.gz"; + sha1 = "00a033b0a593c3ca82927867950f73d88b831155"; + }; + + meta = { + homepage = http://code.google.com/p/boto/; + + license = "bsd"; + + description = "Python interface to Amazon Web Services"; + + longDescription = '' + The boto module is an integrated interface to current and + future infrastructural services offered by Amazon Web + Services. This includes S3, SQS, EC2, among others. + ''; + }; + }); + + boto = buildPythonPackage (rec { name = "boto-2.0b4"; From fc99d84ef249de275fa1e020e59bf14d105b07d5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 14:57:51 +0000 Subject: [PATCH 37/59] * Set Nova's state path to /var/lib/nova. svn path=/nixpkgs/branches/modular-python/; revision=26609 --- .../virtualization/openstack-compute/default.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/virtualization/openstack-compute/default.nix b/pkgs/applications/virtualization/openstack-compute/default.nix index d4a3efddbd5..17a6b6eb1c9 100644 --- a/pkgs/applications/virtualization/openstack-compute/default.nix +++ b/pkgs/applications/virtualization/openstack-compute/default.nix @@ -24,7 +24,14 @@ stdenv.mkDerivation rec { intltool ] ++ pythonPath; - preConfigure = "export HOME=$(pwd)"; + preConfigure = + '' + export HOME=$(pwd) + + # Set the built-in state location to something sensible. + sed -i nova/flags.py \ + -e "/DEFINE.*'state_path'/ s|../|/var/lib/nova|" + ''; buildPhase = "python setup.py build"; From 1d6b63afb9462ddeb5ab634ed1c2fc946b4d4bdd Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 15:00:53 +0000 Subject: [PATCH 38/59] * openstack-compute -> nova (upstream doesn't know what to call it either). svn path=/nixpkgs/branches/modular-python/; revision=26610 --- .../virtualization/{openstack-compute => nova}/default.nix | 2 +- pkgs/top-level/all-packages.nix | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename pkgs/applications/virtualization/{openstack-compute => nova}/default.nix (97%) diff --git a/pkgs/applications/virtualization/openstack-compute/default.nix b/pkgs/applications/virtualization/nova/default.nix similarity index 97% rename from pkgs/applications/virtualization/openstack-compute/default.nix rename to pkgs/applications/virtualization/nova/default.nix index 17a6b6eb1c9..fc74065169b 100644 --- a/pkgs/applications/virtualization/openstack-compute/default.nix +++ b/pkgs/applications/virtualization/nova/default.nix @@ -5,7 +5,7 @@ with stdenv.lib; let version = "2011.1.1"; in stdenv.mkDerivation rec { - name = "openstack-compute-${version}"; + name = "nova-${version}"; src = fetchurl { url = "http://launchpad.net/nova/bexar/${version}/+download/nova-${version}.tar.gz"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ea1d8435119..8690ab40eac 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6387,6 +6387,8 @@ let notmuch = callPackage ../applications/networking/mailreaders/notmuch { }; + nova = callPackage ../applications/virtualization/nova { }; + nvi = callPackage ../applications/editors/nvi { }; ocrad = callPackage ../applications/graphics/ocrad { }; @@ -6409,8 +6411,6 @@ let neon = neon029; }; - openstack_compute = callPackage ../applications/virtualization/openstack-compute { }; - opera = callPackage ../applications/networking/browsers/opera { qt = qt3; }; From 65190277dc7ce0a36a7d60f05ad3ee45be857cf0 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 16:17:25 +0000 Subject: [PATCH 39/59] * Nova: install the default nova-api.conf and use Boto 1.9 (2.0 doesn't work). svn path=/nixpkgs/branches/modular-python/; revision=26611 --- pkgs/applications/virtualization/nova/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/virtualization/nova/default.nix b/pkgs/applications/virtualization/nova/default.nix index fc74065169b..236ceaa05f1 100644 --- a/pkgs/applications/virtualization/nova/default.nix +++ b/pkgs/applications/virtualization/nova/default.nix @@ -14,7 +14,7 @@ stdenv.mkDerivation rec { pythonPath = with pythonPackages; [ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes - paste_deploy m2crypto ipy boto twisted sqlalchemy_migrate + paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate distutils_extra simplejson readline ]; @@ -53,6 +53,9 @@ stdenv.mkDerivation rec { } wrapPythonPrograms + + mkdir -p $out/etc + cp etc/nova-api.conf $out/etc/ ''; meta = { From afe8b976c9564163ce7487df4743519a469109be Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 17:03:49 +0000 Subject: [PATCH 40/59] * Added Cheetah, Glance, Markdown and mox. svn path=/nixpkgs/branches/modular-python/; revision=26612 --- pkgs/top-level/python-packages.nix | 77 +++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 0f78b2be2ae..bdf85e8de35 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -182,6 +182,24 @@ python.modules // rec { }; + cheetah = buildPythonPackage rec { + version = "2.4.4"; + name = "cheetah-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/C/Cheetah/Cheetah-${version}.tar.gz"; + md5 = "853917116e731afbc8c8a43c37e6ddba"; + }; + + propagatedBuildInputs = [ markdown ]; + + meta = { + homepage = http://www.cheetahtemplate.org/; + description = "A template engine and code generation tool"; + }; + }; + + cherrypy = buildPythonPackage (rec { name = "cherrypy-3.1.2"; @@ -333,8 +351,7 @@ python.modules // rec { propagatedBuildInputs = [ greenlet ]; - # It tries to scribble in ~/.python-eggs. - preConfigure = "export HOME=$(pwd)"; + PYTHON_EGG_CACHE = "`pwd`/.egg-cache"; doCheck = false; # !!! fix; tests access the network @@ -439,6 +456,27 @@ python.modules // rec { }; + glance = buildPythonPackage rec { + name = "glance-0.1.7"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/g/glance/${name}.tar.gz"; + md5 = "e733713ccd23e4a6253386a47971cfb5"; + }; + + buildInputs = [ nose mox ]; + + propagatedBuildInputs = [ gflags sqlalchemy webob routes eventlet python.modules.ssl ]; + + PYTHON_EGG_CACHE = "`pwd`/.egg-cache"; + + meta = { + homepage = https://launchpad.net/glance; + description = "Services for discovering, registering, and retrieving virtual machine images"; + }; + }; + + greenlet = buildPythonPackage rec { name = "greenlet-0.3.1"; @@ -587,6 +625,23 @@ python.modules // rec { }; + markdown = buildPythonPackage rec { + version = "2.0.3"; + name = "markdown-${version}"; + + src = fetchurl { + url = "http://pypi.python.org/packages/source/M/Markdown/Markdown-2.0.3.tar.gz"; + md5 = "751e8055be2433dfd1a82e0fb1b12f13"; + }; + + doCheck = false; + + meta = { + homepage = http://www.freewisdom.org/projects/python-markdown; + }; + }; + + matplotlib = buildPythonPackage ( rec { name = "matplotlib-0.99.1.2"; @@ -672,6 +727,24 @@ python.modules // rec { }; })); + + mox = buildPythonPackage rec { + name = "mox-0.5.3"; + + src = fetchurl { + url = "http://pymox.googlecode.com/files/${name}.tar.gz"; + sha1 = "b71aeaacf31898c3b38d8b9ca5bcc0664499c0de"; + }; + + doCheck = false; + + meta = { + homepage = http://code.google.com/p/pymox/; + description = "A mock object framework for Python."; + }; + }; + + mutagen = buildPythonPackage (rec { name = "mutagen-1.20"; From cfa011c0264d8765dab5186281e7c31148d2cfe5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 30 Mar 2011 17:04:27 +0000 Subject: [PATCH 41/59] * Getting closer... svn path=/nixpkgs/branches/modular-python/; revision=26613 --- .../applications/virtualization/nova/default.nix | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/virtualization/nova/default.nix b/pkgs/applications/virtualization/nova/default.nix index 236ceaa05f1..79e833ef596 100644 --- a/pkgs/applications/virtualization/nova/default.nix +++ b/pkgs/applications/virtualization/nova/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pythonPackages, intltool }: +{ stdenv, fetchurl, pythonPackages, intltool, libvirt, libxml2Python }: with stdenv.lib; @@ -15,19 +15,23 @@ stdenv.mkDerivation rec { pythonPath = with pythonPackages; [ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate - distutils_extra simplejson readline + distutils_extra simplejson readline glance cheetah + # !!! should libvirt be a build-time dependency? Note that + # libxml2Python is a dependency of libvirt.py. + libvirt libxml2Python ]; buildInputs = [ pythonPackages.python pythonPackages.wrapPython + pythonPackages.mox intltool ] ++ pythonPath; + PYTHON_EGG_CACHE = "`pwd`/.egg-cache"; + preConfigure = '' - export HOME=$(pwd) - # Set the built-in state location to something sensible. sed -i nova/flags.py \ -e "/DEFINE.*'state_path'/ s|../|/var/lib/nova|" @@ -58,6 +62,10 @@ stdenv.mkDerivation rec { cp etc/nova-api.conf $out/etc/ ''; + doCheck = false; # !!! fix + + checkPhase = "python setup.py test"; + meta = { homepage = http://nova.openstack.org/; description = "OpenStack Compute (a.k.a. Nova), a cloud computing fabric controller"; From 4585c62aec5c62ca031d293ba99dbc77e14fecc0 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 08:44:11 +0000 Subject: [PATCH 42/59] * Erlang updated to R14B02. svn path=/nixpkgs/branches/modular-python/; revision=26619 --- pkgs/development/interpreters/erlang/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/interpreters/erlang/default.nix b/pkgs/development/interpreters/erlang/default.nix index ec7438c2341..64c8e7830b3 100644 --- a/pkgs/development/interpreters/erlang/default.nix +++ b/pkgs/development/interpreters/erlang/default.nix @@ -1,13 +1,13 @@ { stdenv, fetchurl, perl, gnum4, ncurses, openssl }: -let version = "R14A"; in +let version = "R14B02"; in stdenv.mkDerivation { name = "erlang-" + version; src = fetchurl { url = "http://www.erlang.org/download/otp_src_" + version + ".tar.gz"; - sha256 = "170n5p6al1bxwngdmafm1c6892xjxppb96gzgki9gfb0mla6li73"; + sha256 = "1g85a85w031jr5pmz9b0x3p11d44glkf7qpy64l9y7l2b45hb7c4"; }; buildInputs = [ perl gnum4 ncurses openssl ]; From 7359ed16713cffe4327c24bc65cb9950dcfe6057 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 11:09:20 +0000 Subject: [PATCH 43/59] * Added rabbitmq-server. svn path=/nixpkgs/branches/modular-python/; revision=26623 --- pkgs/servers/amqp/rabbitmq-server/default.nix | 33 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 pkgs/servers/amqp/rabbitmq-server/default.nix diff --git a/pkgs/servers/amqp/rabbitmq-server/default.nix b/pkgs/servers/amqp/rabbitmq-server/default.nix new file mode 100644 index 00000000000..1d93c0c5f22 --- /dev/null +++ b/pkgs/servers/amqp/rabbitmq-server/default.nix @@ -0,0 +1,33 @@ +{ stdenv, fetchurl, erlang, python, libxml2, libxslt, xmlto +, docbook_xml_dtd_45, docbook_xsl }: + +stdenv.mkDerivation rec { + name = "rabbitmq-server-2.4.0"; + + src = fetchurl { + url = "http://www.rabbitmq.com/releases/rabbitmq-server/v2.4.0/${name}.tar.gz"; + sha256 = "0zvyyqw9kpzi791hvv8qj1aw0fpx5m5cgqfvffxfrdz8daxx3nma"; + }; + + buildInputs = + [ erlang python libxml2 libxslt xmlto docbook_xml_dtd_45 docbook_xsl ]; + + preBuild = + '' + # Fix the "/usr/bin/env" in "calculate-relative". + patchShebangs . + ''; + + installFlags = "TARGET_DIR=$(out)/libexec/rabbitmq SBIN_DIR=$(out)/sbin MAN_DIR=$(out)/share/man"; + + postInstall = + '' + echo 'PATH=${erlang}/bin:${PATH:+:}$PATH' >> $out/sbin/rabbitmq-env + ''; # */ + + meta = { + homepage = http://www.rabbitmq.com/; + description = "An implementation of the AMQP messaging protocol"; + platforms = stdenv.lib.platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8690ab40eac..39c123b7b4e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4379,7 +4379,7 @@ let sabnzbd = callPackage ../servers/sabnzbd { }; - bind = callPackage ../servers/dns/bind/default.nix { + bind = callPackage ../servers/dns/bind { inherit openssl libtool perl; }; @@ -4503,6 +4503,8 @@ let inherit xmpppy python makeWrapper fetchcvs; }; + rabbitmq_server = callPackage ../servers/amqp/rabbitmq-server { }; + radius = callPackage ../servers/radius { }; redstore = callPackage ../servers/http/redstore { }; From 02b20395d56c6817e3af7e4094bca3d4d7746985 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 11:10:00 +0000 Subject: [PATCH 44/59] * Added vlan, which provides the vconfig command. svn path=/nixpkgs/branches/modular-python/; revision=26624 --- pkgs/tools/networking/vlan/default.nix | 29 ++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 31 insertions(+) create mode 100644 pkgs/tools/networking/vlan/default.nix diff --git a/pkgs/tools/networking/vlan/default.nix b/pkgs/tools/networking/vlan/default.nix new file mode 100644 index 00000000000..221d0f17642 --- /dev/null +++ b/pkgs/tools/networking/vlan/default.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchurl }: + +stdenv.mkDerivation rec { + name = "vlan-1.9"; + + src = fetchurl { + url = mirror://gentoo/distfiles/vlan.1.9.tar.gz; + sha256 = "1jjc5f26hj7bk8nkjxsa8znfxcf8pgry2ipnwmj2fr6ky0dhm3rv"; + }; + + preBuild = + '' + # Ouch, the tarball contains pre-compiled binaries. + make clean + ''; + + installPhase = + '' + mkdir -p $out/sbin + cp vconfig $out/sbin/ + + mkdir -p $out/share/man/man8 + cp vconfig.8 $out/share/man/man8/ + ''; + + meta = { + description = "User mode programs to enable VLANs on Ethernet devices"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 39c123b7b4e..37962070361 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1403,6 +1403,8 @@ let uptimed = callPackage ../tools/system/uptimed { }; + vlan = callPackage ../tools/networking/vlan { }; + w3cCSSValidator = callPackage ../tools/misc/w3c-css-validator { tomcat = tomcat6; }; From 5b1ee7a0dae320155448403a11d8d6c0437b7fb1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 11:57:02 +0000 Subject: [PATCH 45/59] * qemu-kvm: install a symlink "qemu-kvm" to "qemu-system-x86_64". Libvirt (and Nova) expects this. svn path=/nixpkgs/branches/modular-python/; revision=26625 --- pkgs/os-specific/linux/qemu-kvm/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/os-specific/linux/qemu-kvm/default.nix b/pkgs/os-specific/linux/qemu-kvm/default.nix index 012e9bb46a7..92ebe93eebe 100644 --- a/pkgs/os-specific/linux/qemu-kvm/default.nix +++ b/pkgs/os-specific/linux/qemu-kvm/default.nix @@ -24,6 +24,11 @@ stdenv.mkDerivation rec { '' # extboot.bin isn't installed due to a bug in the Makefile. cp pc-bios/optionrom/extboot.bin $out/share/qemu/ + + # Libvirt expects us to be called `qemu-kvm'. Otherwise it will + # set the domain type to "qemu" rather than "kvm", which can + # cause architecture selection to misbehave. + ln -s $(cd $out/bin && echo qemu-system-*) $out/bin/qemu-kvm ''; meta = { From bb2bd151afb5e979fdbe0ffa6c44be7e6ff3fed7 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 12:20:22 +0000 Subject: [PATCH 46/59] * Added ebtables. svn path=/nixpkgs/branches/modular-python/; revision=26626 --- pkgs/os-specific/linux/ebtables/default.nix | 27 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 2 files changed, 29 insertions(+) create mode 100644 pkgs/os-specific/linux/ebtables/default.nix diff --git a/pkgs/os-specific/linux/ebtables/default.nix b/pkgs/os-specific/linux/ebtables/default.nix new file mode 100644 index 00000000000..1f0539add93 --- /dev/null +++ b/pkgs/os-specific/linux/ebtables/default.nix @@ -0,0 +1,27 @@ +{ stdenv, fetchurl }: + +stdenv.mkDerivation rec { + name = "ebtables-2.0.9-2"; + + src = fetchurl { + url = mirror://sourceforge/ebtables/ebtables-v2.0.9-2.tar.gz; + sha256 = "18yni9zzhfi1ygkgifzj8qpn95cwwiw7j6b3wsl1bij39mj5z1cq"; + }; + + makeFlags = + "LIBDIR=$(out)/lib BINDIR=$(out)/sbin MANDIR=$(out)/share/man " + + "ETCDIR=$(out)/etc INITDIR=$(TMPDIR) SYSCONFIGDIR=$(out)/etc/sysconfig"; + + preBuild = + '' + substituteInPlace Makefile --replace '-o root -g root' "" + ''; + + preInstall = "mkdir -p $out/etc/sysconfig"; + + meta = { + description = "A filtering tool for Linux-based bridging firewalls"; + homepage = http://ebtables.sourceforge.net/; + platforms = stdenv.lib.platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 37962070361..fec1f6f8ee2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4648,6 +4648,8 @@ let e3cfsprogs = callPackage ../os-specific/linux/e3cfsprogs { }; + ebtables = callPackage ../os-specific/linux/ebtables { }; + eject = callPackage ../os-specific/linux/eject { }; fbterm = builderDefsPackage (import ../os-specific/linux/fbterm) { From 2cf4ac9c333065bf30927d0f3960398eaad53e19 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 13:20:49 +0000 Subject: [PATCH 47/59] * libvirt updated to 0.9.0rc2. Nova likes this one better. svn path=/nixpkgs/branches/modular-python/; revision=26627 --- pkgs/development/libraries/libvirt/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/libvirt/default.nix b/pkgs/development/libraries/libvirt/default.nix index 0e390c06d5b..2a9661b19c8 100644 --- a/pkgs/development/libraries/libvirt/default.nix +++ b/pkgs/development/libraries/libvirt/default.nix @@ -1,16 +1,16 @@ { stdenv, fetchurl, pkgconfig, libxml2, gnutls, devicemapper, perl, python , iproute, iptables, readline, lvm2, utillinux, udev, libpciaccess, gettext -, libtasn1 +, libtasn1, ebtables }: -let version = "0.8.8"; in +let version = "0.9.0-rc2"; in stdenv.mkDerivation { name = "libvirt-${version}"; src = fetchurl { url = "http://libvirt.org/sources/libvirt-${version}.tar.gz"; - sha256 = "04z1757qpi3ssnjv5h2qnw1sds2m50yxk67cbdam6w4i50vyl2h3"; + sha256 = "1blfx5rh8in5qn91944fz1mxv8jyigac4br8qmh7hvrw3wj2wrl9"; }; buildInputs = @@ -20,7 +20,7 @@ stdenv.mkDerivation { preConfigure = '' - PATH=${iproute}/sbin:${iptables}/sbin:${lvm2}/sbin:${udev}/sbin:$PATH + PATH=${iproute}/sbin:${iptables}/sbin:${ebtables}/sbin:${lvm2}/sbin:${udev}/sbin:$PATH ''; configureFlags = "--localstatedir=/var --with-init-script=redhat"; From 50ae7ab68903c0c2c89ba0b36d16de62ca22e256 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 13:21:07 +0000 Subject: [PATCH 48/59] * Some hackery to get Nova to work. svn path=/nixpkgs/branches/modular-python/; revision=26628 --- pkgs/applications/virtualization/nova/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/virtualization/nova/default.nix b/pkgs/applications/virtualization/nova/default.nix index 79e833ef596..e9407332c90 100644 --- a/pkgs/applications/virtualization/nova/default.nix +++ b/pkgs/applications/virtualization/nova/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pythonPackages, intltool, libvirt, libxml2Python }: +{ stdenv, fetchurl, pythonPackages, intltool, libvirt, libxml2Python, curl }: with stdenv.lib; @@ -35,6 +35,8 @@ stdenv.mkDerivation rec { # Set the built-in state location to something sensible. sed -i nova/flags.py \ -e "/DEFINE.*'state_path'/ s|../|/var/lib/nova|" + + substituteInPlace nova/virt/images.py --replace /usr/bin/curl ${curl}/bin/curl ''; buildPhase = "python setup.py build"; @@ -60,6 +62,10 @@ stdenv.mkDerivation rec { mkdir -p $out/etc cp etc/nova-api.conf $out/etc/ + + # Nova makes some weird assumptions about where to find its own + # programs relative to the Python directory. + ln -sfn $out/bin $out/lib/${pythonPackages.python.libPrefix}/site-packages/bin ''; doCheck = false; # !!! fix From 8844b1545a01652c6bf69ea60f30db7dfc5eb15f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 31 Mar 2011 22:09:07 +0000 Subject: [PATCH 49/59] * Libvirt keeps state (such as information about running VMs) in $(sysconfdir). So this needs to be /etc rather than $out/etc. No wonder libvirt forgot about my VMs every time it got upgraded... (I guess it should really be /var, but that's upstream's decision.) svn path=/nixpkgs/branches/modular-python/; revision=26643 --- pkgs/development/libraries/libvirt/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libvirt/default.nix b/pkgs/development/libraries/libvirt/default.nix index 2a9661b19c8..c891b7e4bb5 100644 --- a/pkgs/development/libraries/libvirt/default.nix +++ b/pkgs/development/libraries/libvirt/default.nix @@ -23,9 +23,9 @@ stdenv.mkDerivation { PATH=${iproute}/sbin:${iptables}/sbin:${ebtables}/sbin:${lvm2}/sbin:${udev}/sbin:$PATH ''; - configureFlags = "--localstatedir=/var --with-init-script=redhat"; + configureFlags = "--localstatedir=/var --sysconfdir=/etc --with-init-script=redhat"; - installFlags = "localstatedir=$(TMPDIR)/var"; + installFlags = "localstatedir=$(TMPDIR)/var sysconfdir=$(out)/etc"; postInstall = '' From 1f01ba2ce4b901dbeaac1f116a29f01a66233ff2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 1 Apr 2011 15:03:48 +0000 Subject: [PATCH 50/59] * Install nova-api.conf in the right location. svn path=/nixpkgs/branches/modular-python/; revision=26658 --- pkgs/applications/virtualization/nova/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/virtualization/nova/default.nix b/pkgs/applications/virtualization/nova/default.nix index e9407332c90..a4813b55e66 100644 --- a/pkgs/applications/virtualization/nova/default.nix +++ b/pkgs/applications/virtualization/nova/default.nix @@ -60,8 +60,8 @@ stdenv.mkDerivation rec { wrapPythonPrograms - mkdir -p $out/etc - cp etc/nova-api.conf $out/etc/ + mkdir -p $out/etc/nova + cp etc/nova-api.conf $out/etc/nova/ # Nova makes some weird assumptions about where to find its own # programs relative to the Python directory. From 601aeb1aa8ec79db7dbf027957a0e0f8c1d91830 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 1 Apr 2011 15:04:20 +0000 Subject: [PATCH 51/59] * Make sure that dhclient properly sets the hostname after reboots. svn path=/nixpkgs/branches/modular-python/; revision=26659 --- pkgs/tools/networking/dhcp/default.nix | 5 +++++ pkgs/tools/networking/dhcp/set-hostname.patch | 14 ++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 pkgs/tools/networking/dhcp/set-hostname.patch diff --git a/pkgs/tools/networking/dhcp/default.nix b/pkgs/tools/networking/dhcp/default.nix index 47fec622db0..7fa1fce66a5 100644 --- a/pkgs/tools/networking/dhcp/default.nix +++ b/pkgs/tools/networking/dhcp/default.nix @@ -13,6 +13,11 @@ stdenv.mkDerivation rec { # recover when the wlan interface goes down. Instead just flush # all addresses, routes and neighbours of the interface. ./flush-if.patch + + # Make sure that the hostname gets set on reboot. Without this + # patch, the hostname doesn't get set properly if the old + # hostname (i.e. before reboot) is equal to the new hostname. + ./set-hostname.patch ]; # Fixes "socket.c:591: error: invalid application of 'sizeof' to diff --git a/pkgs/tools/networking/dhcp/set-hostname.patch b/pkgs/tools/networking/dhcp/set-hostname.patch new file mode 100644 index 00000000000..495a8a124be --- /dev/null +++ b/pkgs/tools/networking/dhcp/set-hostname.patch @@ -0,0 +1,14 @@ +diff -ru -x '*~' dhcp-4.1.2-P1-orig//client/scripts/linux dhcp-4.1.2-P1//client/scripts/linux +--- dhcp-4.1.2-P1-orig//client/scripts/linux 2010-09-15 00:49:48.000000000 +0200 ++++ dhcp-4.1.2-P1//client/scripts/linux 2011-04-01 16:08:10.984372269 +0200 +@@ -133,9 +133,7 @@ + [ x$current_hostname = "x(none)" ] || \ + [ x$current_hostname = xlocalhost ] || \ + [ x$current_hostname = x$old_host_name ]; then +- if [ x$new_host_name != x$old_host_name ]; then +- hostname "$new_host_name" +- fi ++ hostname "$new_host_name" + fi + + if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ From fbfb7714d00f5d3807b432ba9beb71920681f666 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 1 Apr 2011 15:53:37 +0000 Subject: [PATCH 52/59] * Apply an upstream patch to prevent dnsmasq from segfaulting due to bad data from nova-dhcpbridge. svn path=/nixpkgs/branches/modular-python/; revision=26661 --- .../virtualization/nova/default.nix | 3 + .../nova/fix-dhcpbridge-output.patch | 124 ++++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 pkgs/applications/virtualization/nova/fix-dhcpbridge-output.patch diff --git a/pkgs/applications/virtualization/nova/default.nix b/pkgs/applications/virtualization/nova/default.nix index a4813b55e66..e28f9012fc6 100644 --- a/pkgs/applications/virtualization/nova/default.nix +++ b/pkgs/applications/virtualization/nova/default.nix @@ -12,6 +12,9 @@ stdenv.mkDerivation rec { sha256 = "0xd7cxn60vzhkvjwnj0i6jfcxaggwwyw2pnhl4qnb759q9hvk1b9"; }; + patches = + [ ./fix-dhcpbridge-output.patch ]; + pythonPath = with pythonPackages; [ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate diff --git a/pkgs/applications/virtualization/nova/fix-dhcpbridge-output.patch b/pkgs/applications/virtualization/nova/fix-dhcpbridge-output.patch new file mode 100644 index 00000000000..cef1473e574 --- /dev/null +++ b/pkgs/applications/virtualization/nova/fix-dhcpbridge-output.patch @@ -0,0 +1,124 @@ +Prevent dnsmasq from segfaulting. + +https://code.launchpad.net/~soren/nova/dnsmasq-leasesfile-init/+merge/52421 + +diff -ru nova-2011.1.1-orig//bin/nova-dhcpbridge nova-2011.1.1//bin/nova-dhcpbridge +--- nova-2011.1.1-orig//bin/nova-dhcpbridge 2011-02-24 19:51:54.000000000 +0100 ++++ nova-2011.1.1//bin/nova-dhcpbridge 2011-04-01 17:49:53.848659259 +0200 +@@ -94,7 +94,7 @@ + """Get the list of hosts for an interface.""" + ctxt = context.get_admin_context() + network_ref = db.network_get_by_bridge(ctxt, interface) +- return linux_net.get_dhcp_hosts(ctxt, network_ref['id']) ++ return linux_net.get_dhcp_leases(ctxt, network_ref['id']) + + + def main(): +diff -ru nova-2011.1.1-orig//nova/network/linux_net.py nova-2011.1.1//nova/network/linux_net.py +--- nova-2011.1.1-orig//nova/network/linux_net.py 2011-02-24 19:51:54.000000000 +0100 ++++ nova-2011.1.1//nova/network/linux_net.py 2011-04-01 17:50:37.315585644 +0200 +@@ -18,6 +18,7 @@ + """ + + import os ++import calendar + + from nova import db + from nova import flags +@@ -48,6 +49,8 @@ + 'location of nova-dhcpbridge') + flags.DEFINE_string('routing_source_ip', '$my_ip', + 'Public IP of network host') ++flags.DEFINE_integer('dhcp_lease_time', 120, ++ 'Lifetime of a DHCP lease') + flags.DEFINE_bool('use_nova_chains', False, + 'use the nova_ routing chains instead of default') + +@@ -218,8 +221,17 @@ + _confirm_rule("FORWARD", "-j nova-local") + + ++def get_dhcp_leases(context, network_id): ++ """Return a network's hosts config in dnsmasq leasefile format""" ++ hosts = [] ++ for fixed_ip_ref in db.network_get_associated_fixed_ips(context, ++ network_id): ++ hosts.append(_host_lease(fixed_ip_ref)) ++ return '\n'.join(hosts) ++ ++ + def get_dhcp_hosts(context, network_id): +- """Get a string containing a network's hosts config in dnsmasq format""" ++ """Get a string containing a network's hosts config in dhcp-host format""" + hosts = [] + for fixed_ip_ref in db.network_get_associated_fixed_ips(context, + network_id): +@@ -310,8 +322,24 @@ + utils.get_my_linklocal(network_ref['bridge'])}) + + ++def _host_lease(fixed_ip_ref): ++ """Return a host string for an address in leasefile format""" ++ instance_ref = fixed_ip_ref['instance'] ++ if instance_ref['updated_at']: ++ timestamp = instance_ref['updated_at'] ++ else: ++ timestamp = instance_ref['created_at'] ++ ++ seconds_since_epoch = calendar.timegm(timestamp.utctimetuple()) ++ ++ return "%d %s %s %s *" % (seconds_since_epoch + FLAGS.dhcp_lease_time, ++ instance_ref['mac_address'], ++ fixed_ip_ref['address'], ++ instance_ref['hostname'] or '*') ++ ++ + def _host_dhcp(fixed_ip_ref): +- """Return a host string for an address""" ++ """Return a host string for an address in dhcp-host format""" + instance_ref = fixed_ip_ref['instance'] + return "%s,%s.novalocal,%s" % (instance_ref['mac_address'], + instance_ref['hostname'], +diff -ru nova-2011.1.1-orig//nova/tests/test_network.py nova-2011.1.1//nova/tests/test_network.py +--- nova-2011.1.1-orig//nova/tests/test_network.py 2011-02-24 19:51:54.000000000 +0100 ++++ nova-2011.1.1//nova/tests/test_network.py 2011-04-01 17:49:53.849659365 +0200 +@@ -20,6 +20,7 @@ + """ + import IPy + import os ++import time + + from nova import context + from nova import db +@@ -320,6 +321,31 @@ + network['id']) + self.assertEqual(ip_count, num_available_ips) + ++ def test_dhcp_lease_output(self): ++ admin_ctxt = context.get_admin_context() ++ address = self._create_address(0, self.instance_id) ++ lease_ip(address) ++ network_ref = db.network_get_by_instance(admin_ctxt, self.instance_id) ++ leases = linux_net.get_dhcp_leases(context.get_admin_context(), ++ network_ref['id']) ++ for line in leases.split('\n'): ++ seconds, mac, ip, hostname, client_id = line.split(' ') ++ self.assertTrue(int(seconds) > time.time(), 'Lease expires in ' ++ 'the past') ++ octets = mac.split(':') ++ self.assertEqual(len(octets), 6, "Wrong number of octets " ++ "in %s" % (max,)) ++ for octet in octets: ++ self.assertEqual(len(octet), 2, "Oddly sized octet: %s" ++ % (octet,)) ++ # This will throw an exception if the octet is invalid ++ int(octet, 16) ++ ++ # And this will raise an exception in case of an invalid IP ++ IPy.IP(ip) ++ ++ release_ip(address) ++ + + def is_allocated_in_project(address, project_id): + """Returns true if address is in specified project""" From 4407e6464f29e9eb1c44cad5e4e8d72f447f5b55 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Apr 2011 13:28:13 +0000 Subject: [PATCH 53/59] * Remove the hard-coded reference to Python 2.6. svn path=/nixpkgs/branches/modular-python/; revision=26676 --- pkgs/development/python-modules/rhpl/builder.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/rhpl/builder.sh b/pkgs/development/python-modules/rhpl/builder.sh index 5c56b70c24f..b37e9081832 100644 --- a/pkgs/development/python-modules/rhpl/builder.sh +++ b/pkgs/development/python-modules/rhpl/builder.sh @@ -4,8 +4,9 @@ rpm2cpio $src | cpio -idv tar xfvj rhpl-*.tar.bz2 rm rhpl-*.tar.bz2 cd rhpl-* -sed -i -e "s@/usr/include/\$(PYTHON)@$python/include/python2.6@" \ - -e "s@PYTHONLIBDIR = /usr/\$(LIBDIR)/\$(PYTHON)/site-packages@PYTHONLIBDIR = $out/lib/python2.6/site-packages@" Makefile.inc +incl=$(echo $python/include/python2.*) +sed -i -e "s@/usr/include/\$(PYTHON)@$incl@" \ + -e "s@PYTHONLIBDIR = /usr/\$(LIBDIR)/\$(PYTHON)/site-packages@PYTHONLIBDIR = $(toPythonPath $out)@" Makefile.inc sed -i -e "s@/usr/bin/install@install@g" \ -e "s@\$(DESTDIR)/usr/share/locale@$out/share/locale@" po/Makefile make PREFIX=$out From f1c1bd7bbff1290f0ce0d2e307c715978fdce84d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Apr 2011 13:31:52 +0000 Subject: [PATCH 54/59] * Update setuptools_trial to get it to build with Python 2.7. svn path=/nixpkgs/branches/modular-python/; revision=26677 --- pkgs/top-level/python-packages.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index bdf85e8de35..015425a0e3e 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1525,11 +1525,11 @@ python.modules // rec { }; setuptoolsTrial = buildPythonPackage { - name = "setuptools-trial-0.5.9"; + name = "setuptools-trial-0.5.12"; src = fetchurl { - url = "http://pypi.python.org/packages/source/s/setuptools_trial/setuptools_trial-0.5.9.tar.gz"; - sha256 = "4e3b5a183b9cf6ff637777c9852dfe8eaab156289e7a578525d68b1cfb3c9f29"; + url = "http://pypi.python.org/packages/source/s/setuptools_trial/setuptools_trial-0.5.12.tar.gz"; + md5 = "f16f4237c9ee483a0cd13208849d96ad"; }; propagatedBuildInputs = [ twisted ]; From 66a2615eeacf721514e1e69361c46703d2a44005 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Apr 2011 13:47:04 +0000 Subject: [PATCH 55/59] * Fix indentation. svn path=/nixpkgs/branches/modular-python/; revision=26680 --- pkgs/stdenv/linux/default.nix | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/pkgs/stdenv/linux/default.nix b/pkgs/stdenv/linux/default.nix index 2203601f836..7e0116e342c 100644 --- a/pkgs/stdenv/linux/default.nix +++ b/pkgs/stdenv/linux/default.nix @@ -212,17 +212,18 @@ rec { }; gccWithStaticLibs = stdenvLinuxBoot3Pkgs.gcc.gcc.override (rec { - ppl = stdenvLinuxBoot3Pkgs.ppl.override { - static = true; - gmpxx = stdenvLinuxBoot3Pkgs.gmpxx.override { - static = true; - }; - }; - cloogppl = stdenvLinuxBoot3Pkgs.cloogppl.override { - inherit ppl; - static = true; - }; - }); + ppl = stdenvLinuxBoot3Pkgs.ppl.override { + static = true; + gmpxx = stdenvLinuxBoot3Pkgs.gmpxx.override { + static = true; + }; + }; + cloogppl = stdenvLinuxBoot3Pkgs.cloogppl.override { + inherit ppl; + static = true; + }; + }); + # 8) Construct a fourth stdenv identical to the second, except that # this one uses the dynamically linked GCC and Binutils from step From 9c16728cd4a4c7c8a3f6e189c4ca33d568369771 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Apr 2011 14:38:53 +0000 Subject: [PATCH 56/59] * Update darcsver and mock. svn path=/nixpkgs/branches/modular-python/; revision=26681 --- pkgs/top-level/all-packages.nix | 3 +- pkgs/top-level/python-packages.nix | 47 ++++++++---------------------- 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 470f87a3ff7..a5b642d448a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6698,8 +6698,7 @@ let tahoelafs = callPackage ../tools/networking/p2p/tahoe-lafs { inherit (pythonPackages) twisted foolscap simplejson nevow zfec pycryptopp pysqlite darcsver setuptoolsTrial setuptoolsDarcs - numpy pyasn1; - mock = pythonPackages.mock060; + numpy pyasn1 mock; }; tailor = builderDefsPackage (import ../applications/version-management/tailor) { diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 015425a0e3e..723f63d1c39 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -256,18 +256,23 @@ python.modules // rec { }); darcsver = buildPythonPackage (rec { - name = "darcsver-1.5.1"; + name = "darcsver-1.7.2"; src = fetchurl { url = "http://pypi.python.org/packages/source/d/darcsver/${name}.tar.gz"; - sha256 = "e643d607f27e4b8cc96565432ff1abdc2af5e9061c70798e2f33e78c07b66b3a"; + md5 = "94ca7e8c9ea0f69c0f3fc6f9fc88f65a"; }; + buildInputs = [ mock ]; + # Note: We don't actually need to provide Darcs as a build input. # Darcsver will DTRT when Darcs isn't available. See news.gmane.org # http://thread.gmane.org/gmane.comp.file-systems.tahoe.devel/3200 for a # discussion. + # Gives "ValueError: Empty module name" with no clue as to why. + doCheck = false; + meta = { description = "Darcsver, generate a version number from Darcs history"; @@ -679,25 +684,16 @@ python.modules // rec { }; }); + mock = buildPythonPackage (rec { - name = "mock-0.1.0"; + name = "mock-0.7.0"; src = fetchurl { - url = "mirror://sourceforge/python-mock/pythonmock-0.1.0.zip"; - sha256 = "0r17f8sjq6pjlfh2sq2x80bd5r6y9sb3n5l05x5sf25iaba7sg9z"; + url = "http://pypi.python.org/packages/source/m/mock/${name}.tar.gz"; + md5 = "be029f8c963c55250a452c400e10cf42"; }; - buildInputs = [ pkgs.unzip ]; - - phases = "unpackPhase"; - - unpackPhase = - '' mkdir "${name}" - unzip "$src" - - ensureDir "$out/lib/${python.libPrefix}/site-packages" - cp -v mock.py "$out/lib/${python.libPrefix}/site-packages" - ''; + buildInputs = [ unittest2 ]; meta = { description = "Mock objects for Python"; @@ -708,25 +704,6 @@ python.modules // rec { }; }); - mock060 = pkgs.lowPrio (buildPythonPackage (rec { - # TODO: This appears to be an unofficially hacked version of 'mock' - # from above. This could probably replace the previous - # package, but I don't have time to test that right now. - name = "mock-0.6.0"; - - src = fetchurl { - url = "http://tahoe-lafs.org/source/tahoe-lafs/deps/tahoe-dep-sdists/${name}.tar.bz2"; - sha256 = "1vwxzr2sjyl3x5jqgz9swpmp6cyhmwmab65akysfglf6acmn3czf"; - }; - doCheck = false; # Package doesn't have any tests. - - meta = { - description = "Mock objects for Python, provided by tahoe-lafs.org"; - homepage = "http://python-mock.sourceforge.net/"; - license = "mBSD"; - }; - })); - mox = buildPythonPackage rec { name = "mox-0.5.3"; From b9293b6c20d2a7673f9fb09699d23c89962ab7fd Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Apr 2011 15:48:58 +0000 Subject: [PATCH 57/59] * `patch' on FreeBSD doesn't like paths with // in them. svn path=/nixpkgs/branches/modular-python/; revision=26682 --- .../interpreters/python/2.7/nix-store-mtime.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch b/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch index 044a96e3a8a..83f3fea1931 100644 --- a/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch +++ b/pkgs/development/interpreters/python/2.7/nix-store-mtime.patch @@ -1,6 +1,6 @@ -diff -ru -x '*~' Python-2.7.1-orig//Python/import.c Python-2.7.1//Python/import.c ---- Python-2.7.1-orig//Python/import.c 2010-05-20 20:37:55.000000000 +0200 -+++ Python-2.7.1//Python/import.c 2011-01-04 15:55:11.000000000 +0100 +diff -ru -x '*~' Python-2.7.1-orig/Python/import.c Python-2.7.1/Python/import.c +--- Python-2.7.1-orig/Python/import.c 2010-05-20 20:37:55.000000000 +0200 ++++ Python-2.7.1/Python/import.c 2011-01-04 15:55:11.000000000 +0100 @@ -751,7 +751,7 @@ return NULL; } From db144edb6062d6516fe38746c317c00ee1e31bd6 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 5 Apr 2011 14:14:39 +0000 Subject: [PATCH 58/59] * libvirt 0.9.0. svn path=/nixpkgs/branches/modular-python/; revision=26693 --- pkgs/development/libraries/libvirt/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libvirt/default.nix b/pkgs/development/libraries/libvirt/default.nix index c891b7e4bb5..ee9fdb1fe7f 100644 --- a/pkgs/development/libraries/libvirt/default.nix +++ b/pkgs/development/libraries/libvirt/default.nix @@ -3,14 +3,14 @@ , libtasn1, ebtables }: -let version = "0.9.0-rc2"; in +let version = "0.9.0"; in stdenv.mkDerivation { name = "libvirt-${version}"; src = fetchurl { url = "http://libvirt.org/sources/libvirt-${version}.tar.gz"; - sha256 = "1blfx5rh8in5qn91944fz1mxv8jyigac4br8qmh7hvrw3wj2wrl9"; + sha256 = "0rlhn08zgj9v0jrh0pq0hfdw6vmw98fg3c573k8mpnwm2byc3gby"; }; buildInputs = From 566d5ab26e0e8f419bfce29fd677ad60b39fecce Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 5 Apr 2011 14:29:11 +0000 Subject: [PATCH 59/59] * Hackery to get Python to build on Cygwin. svn path=/nixpkgs/branches/modular-python/; revision=26694 --- pkgs/development/interpreters/python/2.7/default.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/2.7/default.nix b/pkgs/development/interpreters/python/2.7/default.nix index 4bb8e72a1a1..cefa1d6c917 100644 --- a/pkgs/development/interpreters/python/2.7/default.nix +++ b/pkgs/development/interpreters/python/2.7/default.nix @@ -55,6 +55,12 @@ let for i in /usr /sw /opt /pkg; do substituteInPlace ./setup.py --replace $i /no-such-path done + '' + optionalString stdenv.isCygwin '' + # On Cygwin, `make install' tries to read this Makefile. + mkdir -p $out/lib/python2.7/config + touch $out/lib/python2.7/config/Makefile + mkdir -p $out/include/python2.7 + touch $out/include/python2.7/pyconfig.h ''; NIX_CFLAGS_COMPILE = optionalString stdenv.isDarwin "-msse2"; @@ -128,7 +134,7 @@ let '' dest=$out/lib/${python.libPrefix}/site-packages mkdir -p $dest - cp -p $(find . -name "*.so") $dest/ + cp -p $(find . -name "*.${if stdenv.isCygwin then "dll" else "so"}") $dest/ ''; };