From 3b1aac231be217cce0f379433b33a420fc34c0a3 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 12 Nov 2007 16:17:54 +0000 Subject: [PATCH 001/320] * Binutils 2.18. svn path=/nixpkgs/branches/stdenv-updates/; revision=9656 --- pkgs/development/tools/misc/binutils/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index 9817abd612b8..52112c17b6c2 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, noSysDirs}: stdenv.mkDerivation { - name = "binutils-2.17"; + name = "binutils-2.18"; builder = ./builder.sh; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/binutils-2.17.tar.bz2; - md5 = "e26e2e06b6e4bf3acf1dc8688a94c0d1"; + url = mirror://gnu/binutils/binutils-2.18.tar.bz2; + sha256 = "16zfc7llbjdn69bbdy7kqgg2xa67ypgj7z5qicgwzvghaaj36yj8"; }; inherit noSysDirs; configureFlags = "--disable-werror"; # needed for dietlibc build From b5409b8e98e5d62d383caf996bef124b056e65e7 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 12 Nov 2007 18:01:27 +0000 Subject: [PATCH 002/320] * Glibc 2.7. * Hack to remove the dependency on Perl. * Hack to work around this bug: http://sourceware.org/bugzilla/show_bug.cgi I.e. when gcc is compiled with --with-arch=i686, then the preprocessor symbol `__i686' will be defined to `1'. This causes the symbol __i686.get_pc_thunk.dx to be mangled. The error message for reference: ../sysdeps/i386/fpu/s_frexp.S: Assembler messages: ../sysdeps/i386/fpu/s_frexp.S:66: Error: invalid identifier for ".ifdef" ../sysdeps/i386/fpu/s_frexp.S:66: Error: junk at end of line, first unrecognized character is `1' ... ../sysdeps/i386/fpu/s_frexp.S:66: Error: ".endif" without ".if" ../sysdeps/i386/fpu/s_frexp.S:66: Error: junk `.get_pc_thunk.dx' after expression Now Glibc builds again with GCC 4.x. svn path=/nixpkgs/branches/stdenv-updates/; revision=9660 --- .../libraries/glibc-nptl/builder.sh | 7 ++++++ .../libraries/glibc-nptl/default.nix | 23 +++++++++++-------- pkgs/top-level/all-packages.nix | 3 +-- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/pkgs/development/libraries/glibc-nptl/builder.sh b/pkgs/development/libraries/glibc-nptl/builder.sh index e4f6dec13545..3e874ed891c2 100644 --- a/pkgs/development/libraries/glibc-nptl/builder.sh +++ b/pkgs/development/libraries/glibc-nptl/builder.sh @@ -16,6 +16,13 @@ preConfigure() { --replace "@PWD@" "pwd" done + # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older + # than C-translit.h.in, forcing Make to rebuild it unnecessarily. + # This wouldn't be problem except that it requires Perl, which we + # don't want as a dependency in the Nixpkgs bootstrap. So force + # the output file to be newer. + touch locale/C-translit.h + mkdir ../build cd ../build diff --git a/pkgs/development/libraries/glibc-nptl/default.nix b/pkgs/development/libraries/glibc-nptl/default.nix index 86cc9ecf5657..8a5a84bd2c67 100644 --- a/pkgs/development/libraries/glibc-nptl/default.nix +++ b/pkgs/development/libraries/glibc-nptl/default.nix @@ -1,18 +1,16 @@ -{ stdenv, fetchurl, kernelHeaders -,perl +{ stdenv, fetchurl, kernelHeaders , installLocales ? true , profilingLibraries ? false }: stdenv.mkDerivation { - name = "glibc-2.6.1-nptl"; + name = "glibc-2.7"; builder = ./builder.sh; - src = - fetchurl { - url = http://ftp.gnu.org/gnu/glibc/glibc-2.6.1.tar.bz2; - sha256 = "08pcfsi9zpikjakljklks2ln3hn7544cr9br4kbh5kx27cy3mv9x"; - }; + src = fetchurl { + url = mirror://gnu/glibc/glibc-2.7.tar.bz2; + sha256 = "06j5q20l11x8kcrl9bg15xgb1pw0w82pazikxf4zvq2fmhiaa922"; + }; patches = [ ./glibc-pwd.patch ./glibc-getcwd-param-MAX.patch ]; @@ -20,12 +18,17 @@ stdenv.mkDerivation { inherit (stdenv) is64bit; - buildInputs=[perl]; - # `--with-tls --without-__thread' enables support for TLS but causes # it not to be used. Required if we don't want to barf on 2.4 # kernels. Or something. configureFlags="--enable-add-ons --with-headers=${kernelHeaders}/include ${if profilingLibraries then "--enable-profile" else "--disable-profile"}"; + + # Workaround for this bug: + # http://sourceware.org/bugzilla/show_bug.cgi?id=411 + # I.e. when gcc is compiled with --with-arch=i686, then the + # preprocessor symbol `__i686' will be defined to `1'. This causes + # the symbol __i686.get_pc_thunk.dx to be mangled. + NIX_CFLAGS_COMPILE = "-U__i686"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7dac21186e2d..90e2d4bc7a5f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1747,8 +1747,7 @@ rec { }); glibcNPTL = import ../development/libraries/glibc-nptl { - inherit fetchurl kernelHeaders perl; - stdenv = overrideGCC stdenv gcc34; + inherit fetchurl stdenv kernelHeaders; }; glibmm = import ../development/libraries/gtk-libs-2.6/glibmm { From c121f6746b8e0e7a1b4d719b6c13ec98eacceb53 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 15 Nov 2007 15:19:58 +0000 Subject: [PATCH 003/320] * Default compiler changed to GCC 4.2.2. * Fix for NIXPKGS-60 ("g++ 4.2.0 cannot create dynamically linked executables"). svn path=/nixpkgs/branches/stdenv-updates/; revision=9691 --- .../development/compilers/gcc-4.2/default.nix | 14 ++++++------- .../compilers/gcc-4.2/no-sys-dirs.patch | 20 ------------------- pkgs/top-level/all-packages.nix | 8 ++++---- 3 files changed, 11 insertions(+), 31 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.2/default.nix b/pkgs/development/compilers/gcc-4.2/default.nix index 2681531f2044..df0f3e5c48df 100644 --- a/pkgs/development/compilers/gcc-4.2/default.nix +++ b/pkgs/development/compilers/gcc-4.2/default.nix @@ -9,21 +9,21 @@ assert langC; with import ../../../lib; stdenv.mkDerivation { - name = "gcc-4.2.0"; + name = "gcc-4.2.2"; builder = ./builder.sh; src = optional /*langC*/ true (fetchurl { - url = mirror://gnu/gcc/gcc-4.2.0/gcc-core-4.2.0.tar.bz2; - sha256 = "0ykhzxhr8857dr97z0j9wyybfz1kjr71xk457cfapfw5fjas4ny1"; + url = mirror://gnu/gcc/gcc-4.2.2/gcc-core-4.2.2.tar.bz2; + sha256 = "01hdwd4im2xzg159fk022zqyhlxphqvpmabd25bqb8fjbs2yi80a"; }) ++ optional /*langCC*/ true (fetchurl { - url = mirror://gnu/gcc/gcc-4.2.0/gcc-g++-4.2.0.tar.bz2; - sha256 = "0k5ribrfdp9vmljxrglcgx2j2r7xnycd1rvd8sny2y5cj0l8ps12"; + url = mirror://gnu/gcc/gcc-4.2.2/gcc-g++-4.2.2.tar.bz2; + sha256 = "04xankxi3bi4gvgv8rq9h6w3bdx59bg9zh0zv6lyw373gy26ygmq"; }) ++ optional langF77 (fetchurl { - url = mirror://gnu/gcc/gcc-4.2.0/gcc-fortran-4.2.0.tar.bz2; - sha256 = "0vw07qv6qpa5cgxc0qxraq6li2ibh8zrp65jrg92v4j63ivvi3hh"; + url = mirror://gnu/gcc/gcc-4.2.2/gcc-fortran-4.2.2.tar.bz2; + sha256 = "1fybl88w0l99cqppx18i6hnq5dsrssx3qd7vr2ybmmk3nfx8pziq"; }); patches = diff --git a/pkgs/development/compilers/gcc-4.2/no-sys-dirs.patch b/pkgs/development/compilers/gcc-4.2/no-sys-dirs.patch index d87f54669b7b..f1d429e274a0 100644 --- a/pkgs/development/compilers/gcc-4.2/no-sys-dirs.patch +++ b/pkgs/development/compilers/gcc-4.2/no-sys-dirs.patch @@ -120,26 +120,6 @@ diff -rc gcc-4.2.0-orig/gcc/gcc.c gcc-4.2.0/gcc/gcc.c static const char *md_exec_prefix = MD_EXEC_PREFIX; static const char *md_startfile_prefix = MD_STARTFILE_PREFIX; -diff -rc gcc-4.2.0-orig/ltcf-cxx.sh gcc-4.2.0/ltcf-cxx.sh -*** gcc-4.2.0-orig/ltcf-cxx.sh 2005-07-16 04:30:53.000000000 +0200 ---- gcc-4.2.0/ltcf-cxx.sh 2007-05-20 17:16:44.000000000 +0200 -*************** -*** 989,995 **** - # the conftest object file. - pre_test_object_deps_done=no - -! for p in `eval $output_verbose_link_cmd`; do - - case $p in - ---- 989,995 ---- - # the conftest object file. - pre_test_object_deps_done=no - -! for p in `true`; do - - case $p in - diff -rc gcc-4.2.0-orig/ltconfig gcc-4.2.0/ltconfig *** gcc-4.2.0-orig/ltconfig 2007-02-14 18:08:35.000000000 +0100 --- gcc-4.2.0/ltconfig 2007-05-20 22:16:24.000000000 +0200 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 90e2d4bc7a5f..1b31a9e69a00 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -889,7 +889,7 @@ rec { inherit stdenv; }; - gcc = gcc41; + gcc = gcc42; gcc295 = wrapGCC (import ../development/compilers/gcc-2.95 { inherit fetchurl stdenv noSysDirs; @@ -908,14 +908,14 @@ rec { profiledCompiler = true; }); - gcc41 = useFromStdenv (stdenv ? gcc) stdenv.gcc (wrapGCC (import ../development/compilers/gcc-4.1 { + gcc41 = wrapGCC (import ../development/compilers/gcc-4.1 { inherit fetchurl stdenv noSysDirs; profiledCompiler = false; - })); + }); gcc41NPTL = wrapGCCWithGlibc gcc41.gcc glibcNPTL; - gcc42 = lowPrio (wrapGCC (import ../development/compilers/gcc-4.2 { + gcc42 = useFromStdenv (stdenv ? gcc) stdenv.gcc (wrapGCC (import ../development/compilers/gcc-4.2 { inherit fetchurl stdenv noSysDirs; profiledCompiler = true; })); From 71353ce9293155133cd2ce676027346b51974a6d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 15 Nov 2007 16:15:15 +0000 Subject: [PATCH 004/320] * Perl: make it build with GCC 4.2. svn path=/nixpkgs/branches/stdenv-updates/; revision=9693 --- .../development/interpreters/perl/default.nix | 20 ++++++++++++------- .../interpreters/perl/gcc-4.2.patch | 10 ++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 pkgs/development/interpreters/perl/gcc-4.2.patch diff --git a/pkgs/development/interpreters/perl/default.nix b/pkgs/development/interpreters/perl/default.nix index b9416bcc41f0..f43578cdc335 100644 --- a/pkgs/development/interpreters/perl/default.nix +++ b/pkgs/development/interpreters/perl/default.nix @@ -9,13 +9,19 @@ stdenv.mkDerivation { sha256 = "1j8vzc6lva49mwdxkzhvm78dkxyprqs4n4057amqvsh4kh6i92l1"; }; - # This patch does the following: - # 1) Do use the PATH environment variable to find the `pwd' command. - # By default, Perl will only look for it in /lib and /usr/lib. - # !!! what are the security implications of this? - # 2) Force the use of , not /usr/include/errno.h, on Linux - # systems. (This actually appears to be due to a bug in Perl.) - patches = [./no-sys-dirs.patch]; + patches = [ + # This patch does the following: + # 1) Do use the PATH environment variable to find the `pwd' command. + # By default, Perl will only look for it in /lib and /usr/lib. + # !!! what are the security implications of this? + # 2) Force the use of , not /usr/include/errno.h, on Linux + # systems. (This actually appears to be due to a bug in Perl.) + ./no-sys-dirs.patch + + # Patch to make Perl 5.8.8 build with GCC 4.2. Taken from + # http://www.nntp.perl.org/group/perl.perl5.porters/2006/11/msg117738.html + ./gcc-4.2.patch + ]; setupHook = ./setup-hook.sh; } diff --git a/pkgs/development/interpreters/perl/gcc-4.2.patch b/pkgs/development/interpreters/perl/gcc-4.2.patch new file mode 100644 index 000000000000..679a7abde3b6 --- /dev/null +++ b/pkgs/development/interpreters/perl/gcc-4.2.patch @@ -0,0 +1,10 @@ +--- perl-5.8.x/makedepend.SH 2006-06-13 15:31:22.000000000 -0400 ++++ perl-5.8.x-andy/makedepend.SH 2006-07-25 14:45:11.000000000 -0400 +@@ -167,6 +167,7 @@ + -e '/^#.*/d' \ + -e '/^#.*/d' \ + -e '/^#.*/d' \ ++ -e '/^#.*/d' \ + -e '/^#.*"-"/d' \ + -e '/: file path prefix .* never used$/d' \ + -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \ From 8792fb81c7dfa34f743b959f89a3480f5ced40c7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 16 Nov 2007 21:05:15 +0000 Subject: [PATCH 005/320] Merged with trunk. The following is autogenerated by git: commit 9aaede75e73be646f35069d0717c8c70004ba3f0 Author: raskin Date: Fri Nov 16 18:37:23 2007 +0000 This was needed for me to get a working gnome-doc-utils package git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9726 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 751a9e6d19fc9e6c96b04eca450ea1b836d00865 Author: urkud Date: Fri Nov 16 17:30:34 2007 +0000 gdb upgraded git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9725 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit bb908853924046681d1cd6a85b05273aed14fd9f Author: urkud Date: Fri Nov 16 17:29:11 2007 +0000 gphoto2 upgraded to 2.4.0: all-packages.nix git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9724 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 619c7004d7140d6016927cd1114fd778aca3ecce Author: MarcWeber Date: Fri Nov 16 17:28:53 2007 +0000 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9723 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit f09310ed8403428021d2d751e273fc0add438032 Author: urkud Date: Fri Nov 16 17:28:17 2007 +0000 gphoto2 upgraded to 2.4.0 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9722 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 26d5cc1628e51853fdb9a7d162361b3a13581461 Author: MarcWeber Date: Fri Nov 16 17:27:27 2007 +0000 missing catalog added. Now you can open files git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9721 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 4eb1f68d61077e66b9ca3a0de3c86b1024f06db1 Author: MarcWeber Date: Fri Nov 16 17:09:32 2007 +0000 nix expression creating startup wrapper for jedit git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9720 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 69701148e45d29b1712c9f14628459def54be076 Author: MarcWeber Date: Fri Nov 16 17:06:53 2007 +0000 The nice programmers editor jedit is now built on nix as well. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9719 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 15ecdd411e78b952d8004323ec871ce6c4969c2e Author: wbreejen Date: Fri Nov 16 14:41:15 2007 +0000 Missing gecko now. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9715 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 6975eb6f2a972cca2adb2943190a41880e3bedf7 Author: wbreejen Date: Fri Nov 16 14:36:15 2007 +0000 Fix path of libnotify git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9714 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit ef985f4e88db03a0861fe8ccc8b35ec329ef616a Author: wbreejen Date: Fri Nov 16 14:34:02 2007 +0000 added libnotify git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9713 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 7fb35510feb89fecc9d92810a723baead232dff4 Author: wbreejen Date: Fri Nov 16 14:33:36 2007 +0000 added libnotify git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9712 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 7a9eb1e172ef5b111556d78a30003a87aee7f775 Author: wbreejen Date: Fri Nov 16 14:24:24 2007 +0000 libnotify is missing git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9711 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 433cc0578ce00860ddfac7d7934818ec0584f6e1 Author: wbreejen Date: Fri Nov 16 14:08:04 2007 +0000 Added libsexy git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9710 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 194a84b18965e9a3c8f9fa1305fac57690e683cb Author: wbreejen Date: Fri Nov 16 14:07:30 2007 +0000 Added libsexy git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9709 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 1d832560cf94bfa6793d90ff43f2235415bc3958 Author: wbreejen Date: Fri Nov 16 13:49:02 2007 +0000 Added openftd. Doesnt work (yet) git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9708 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 58e8a73f63a85a22ca45f046579d89bd0359f8ee Author: eelco Date: Fri Nov 16 13:08:20 2007 +0000 * GCC 3.4: pass --disable-multilib to make it build on x86_64. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9704 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 5ff88d858692e89120a4efa4acc2224eaf78d9a9 Author: raskin Date: Fri Nov 16 03:45:42 2007 +0000 bzip2 dependency added in a couple of places git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9702 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 128ac8a7ee8668fc933f4933a66f491c44234379 Author: urkud Date: Thu Nov 15 23:47:03 2007 +0000 Added python to libgsf dependencies git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9699 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 1847defee6331b03ba8a54ae9e3e68033310f7a2 Author: eelco Date: Thu Nov 15 17:05:45 2007 +0000 * Use latest Nix. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9695 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit cb1992780c20cb5885cf4d3932e7352f8b912533 Author: raskin Date: Thu Nov 15 04:23:46 2007 +0000 Added a currently more functional URL for libgcrypt git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9688 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 9d099dbef1a5721065bff5f2edd73844c829f538 Author: urkud Date: Thu Nov 15 00:16:03 2007 +0000 facile: fixed a typo git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9686 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 031c5b7d0797f5eee7be0a06856530c29adee710 Author: urkud Date: Thu Nov 15 00:11:56 2007 +0000 Added kde-4 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9685 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 81b3a7d92f2e9552c46ab47c75a2d3a40e151d43 Author: urkud Date: Thu Nov 15 00:08:58 2007 +0000 Added new kde-4 staff git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9684 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 18edb608ee7822438d4b2dc2a76af7567efd646a Author: urkud Date: Wed Nov 14 23:48:40 2007 +0000 kde-4: removed old staff from kde-4 dir git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9683 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 00d9b75d85f3a7de4db3feb313fe8d2d29f6bc2d Author: urkud Date: Wed Nov 14 23:46:48 2007 +0000 lame: upgrade to 3.97 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9682 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 52f8f699f29b6def41eee392f489c7e8ecd9399d Author: urkud Date: Wed Nov 14 23:44:21 2007 +0000 libgsf: meta written 0.14.7 in my previous commit was a typo: 1.14.7 of course git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9681 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 6e426380fc8c67b7dae57d4404ee7ca76d3e1d62 Author: urkud Date: Wed Nov 14 23:40:39 2007 +0000 libgsf: upgraded to 0.14.7 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9680 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 7787b342945cb13856168a353fdc9b0062e5f32b Author: urkud Date: Wed Nov 14 23:37:51 2007 +0000 clucene: upgrade, kde4: remove clucene-core upgraded to 0.9.20 clucene-contrib removed (can't find any version later than 0.9.16a and don't know whether it's compatible with new clucene-core) kde4: old staff removed, will add new tonight git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9679 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit b4900dece179788dfb8879518b8ec639ba089980 Author: urkud Date: Wed Nov 14 23:25:32 2007 +0000 Strigi removed I'll add a version from kdesupport trunk today git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9678 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit ffad224993440be069d4f15cf5e73ed018979311 Author: urkud Date: Wed Nov 14 23:23:36 2007 +0000 dbus-glib upgraded to 0.74, meta written git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9677 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 6ae133a8d5d472d9f475cacb7f3ff3e6703fb34b Author: urkud Date: Wed Nov 14 23:13:29 2007 +0000 xine-lib: upgraded to 1.1.8 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9676 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit d56f2643e631f8b3ce6e8228c35f2cc19755e2aa Author: urkud Date: Wed Nov 14 23:11:37 2007 +0000 chmlib: upgraded to 0.39 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9675 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit c31c27f328fdd4ae99d48bcc512231639dfcf6e5 Author: urkud Date: Wed Nov 14 23:05:11 2007 +0000 Added facile library git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9674 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 28f915ee41410b6f278faf07b0135bd4e9aeaf2f Author: urkud Date: Wed Nov 14 23:03:29 2007 +0000 libgcrypt-1.3.1 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9673 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit ca314a236b855b73024677f6dc5bc021070c4e72 Author: urkud Date: Wed Nov 14 22:49:24 2007 +0000 Fixed a typo in ocaml-3.10.0 git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9672 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit b3fa79d09289ab61a30f63692e7c475d0aec142e Author: urkud Date: Wed Nov 14 22:39:58 2007 +0000 ocaml: Added 3.10.0, using getVersion staff I've added the latest (3.10.0) version of ocaml and let the user choose default version. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9671 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 853d65d8a9fd65f7bf918c42342baf6690008f54 Author: urkud Date: Wed Nov 14 22:22:06 2007 +0000 Let user to choose python2.4 or python2.5 Currently, there is some code duplication. I'll try to rewrite it without modifying resulting derivations. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9670 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 65567e8e2e96d1a2e62af148fe043c86df0c5b60 Author: urkud Date: Wed Nov 14 21:57:26 2007 +0000 useVersion function added git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9669 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 2e5e12d1fc1faded72235fa66eb8efaa92e597ba Author: urkud Date: Wed Nov 14 21:41:01 2007 +0000 git: upgraded to 1.5.3.5; meta added; nix-expr slightly rewritten git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9668 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit dd564f36bd54d4900aefa759bc94cfac7496d1a2 Author: MarcWeber Date: Wed Nov 14 19:07:38 2007 +0000 added small script fixing the shebang (#!/bin/...) path. It searches the PATH env variable for the same executable. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9667 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 2f9213e49fbaa40634ccb9699e44aec239212aea Author: raskin Date: Wed Nov 14 01:20:17 2007 +0000 Now SVN Nix builds as a purely alternative Nix choice git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9666 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 016b6bfcc67244964251d68d86e1fa6de2062e54 Author: raskin Date: Tue Nov 13 15:52:16 2007 +0000 Added possibility to use non-default Nix. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9663 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 89f53d7b8dae8d4ec537322340be212602524102 Author: MarcWeber Date: Tue Nov 13 01:26:54 2007 +0000 implemented proposal by niksnut. Now you have to use either date= or tag= when specifying cvs revision git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9661 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit ced4ab4c8b5750a0f0a6a685830c8cb5340b6d52 Author: eelco Date: Mon Nov 12 16:45:47 2007 +0000 * Symlink $out/bin to $out/libexec. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9659 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit d454ab8861882e18ed3b79287727890ec6668455 Author: raskin Date: Mon Nov 12 16:42:13 2007 +0000 Beta-version of builderDefs fixes. git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9657 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 959e395c49753d902201d457cee102b40608d3f9 Author: urkud Date: Mon Nov 12 16:12:50 2007 +0000 djview location corrected git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9655 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 52530f607a15017e94225ee50e2698963325ed80 Author: eelco Date: Mon Nov 12 13:51:46 2007 +0000 * Revert the setup hook changes on the trunk (but they remain on the stdenv-updates branch). git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9652 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb commit 977bdfec49557f48bc1e121e3375c21d4991434f Author: skolthof Date: Mon Nov 12 13:48:33 2007 +0000 * added Haskell package gtk2hs git-svn-id: https://svn.cs.uu.nl:12443/repos/trace/nixpkgs/trunk@9651 70bd8c7a-acb8-0310-9f0d-9cc1c95dcdbb svn path=/nixpkgs/branches/stdenv-updates/; revision=9727 --- .../audio/ladspa-plugins/default.nix | 3 +- pkgs/applications/audio/lame/default.nix | 6 +- pkgs/applications/jedit/default.nix | 28 +++ pkgs/applications/jedit/wrapper.nix | 18 ++ pkgs/applications/misc/gphoto2/default.nix | 14 +- pkgs/applications/misc/synergy/default.nix | 2 +- .../networking/browsers/elinks/default.nix | 6 +- .../version-management/git/default.nix | 21 +- pkgs/build-support/fetchcvs/builder.sh | 13 +- pkgs/build-support/fetchcvs/default.nix | 12 +- pkgs/desktops/gnome/default.nix | 2 +- pkgs/desktops/gnome/gnome-doc-utils.nix | 17 +- .../kde-4/{kdebase => base}/builder.sh | 11 +- pkgs/desktops/kde-4/base/default.nix | 14 ++ pkgs/desktops/kde-4/decibel/default.nix | 11 + pkgs/desktops/kde-4/default.nix | 35 ++++ pkgs/desktops/kde-4/edu/default.nix | 20 ++ .../CheckBoostAndPythonCompatible.cmake | 38 ++++ .../edu/myCmakeFiles/FindBoostPython.cmake | 90 ++++++++ .../edu/myCmakeFiles/FindLibfacile.cmake | 45 ++++ .../edu/myCmakeFiles/PythonLibsUtils.cmake | 46 ++++ pkgs/desktops/kde-4/extragear/default.nix | 14 ++ pkgs/desktops/kde-4/games/default.nix | 12 ++ pkgs/desktops/kde-4/graphics/default.nix | 13 ++ pkgs/desktops/kde-4/kdebase/default.nix | 55 ----- pkgs/desktops/kde-4/kdelibs/default.nix | 48 ----- pkgs/desktops/kde-4/kdepim/builder.sh | 18 -- pkgs/desktops/kde-4/kdepim/default.nix | 55 ----- pkgs/desktops/kde-4/kdepimlibs/default.nix | 48 ----- pkgs/desktops/kde-4/libs/FindIlmBase.cmake | 74 +++++++ pkgs/desktops/kde-4/libs/FindOpenEXR.cmake | 68 ++++++ pkgs/desktops/kde-4/libs/default.nix | 27 +++ pkgs/desktops/kde-4/libs/setup.sh | 5 + pkgs/desktops/kde-4/multimedia/default.nix | 13 ++ pkgs/desktops/kde-4/network/default.nix | 12 ++ pkgs/desktops/kde-4/pim/builder.sh | 10 + pkgs/desktops/kde-4/pim/default.nix | 15 ++ pkgs/desktops/kde-4/pimlibs/default.nix | 12 ++ pkgs/desktops/kde-4/runtime/builder.sh | 12 ++ pkgs/desktops/kde-4/runtime/default.nix | 15 ++ pkgs/desktops/kde-4/support/akode.nix | 13 ++ pkgs/desktops/kde-4/support/default.nix | 36 ++++ pkgs/desktops/kde-4/support/eigen.nix | 13 ++ pkgs/desktops/kde-4/support/gmm.nix | 13 ++ pkgs/desktops/kde-4/support/qca.nix | 15 ++ pkgs/desktops/kde-4/support/qimageblitz.nix | 13 ++ pkgs/desktops/kde-4/support/soprano.nix | 14 ++ pkgs/desktops/kde-4/support/strigi.nix | 15 ++ pkgs/desktops/kde-4/support/taglib.nix | 13 ++ pkgs/desktops/kde-4/toys/default.nix | 12 ++ pkgs/desktops/kde-4/utils/default.nix | 13 ++ pkgs/desktops/kde-4/workspace/builder.sh | 12 ++ pkgs/desktops/kde-4/workspace/default.nix | 15 ++ pkgs/development/compilers/gcc-3.4/builder.sh | 12 -- .../development/compilers/gcc-3.4/default.nix | 19 +- .../ocaml/{ocaml-3.08.0.nix => 3.08.0.nix} | 2 +- .../ocaml/{ocaml-3.09.1.nix => 3.09.1.nix} | 2 +- pkgs/development/compilers/ocaml/3.10.0.nix | 23 ++ pkgs/development/compilers/ocaml/default.nix | 8 +- .../interpreters/perl/setup-hook.sh | 4 +- pkgs/development/interpreters/python/2.4.nix | 52 +++++ .../interpreters/python/2.5/setup-hook.sh | 5 +- .../interpreters/python/default.nix | 55 +---- .../interpreters/python/setup-hook.sh | 5 +- pkgs/development/libraries/chmlib/builder.sh | 19 -- pkgs/development/libraries/chmlib/default.nix | 17 +- .../libraries/clucene-contrib/default.nix | 18 -- .../libraries/clucene-core/default.nix | 25 ++- .../libraries/dbus-glib/default.nix | 14 +- pkgs/development/libraries/facile/default.nix | 19 ++ .../libraries/haskell/gtk2hs/default.nix | 18 ++ .../development/libraries/libexif/default.nix | 12 +- .../libraries/libgcrypt/default.nix | 11 +- .../libraries/libgphoto2/default.nix | 17 +- pkgs/development/libraries/libgsf/default.nix | 19 +- .../libraries/libnotify/default.nix | 20 ++ .../development/libraries/libsexy/default.nix | 17 ++ pkgs/development/libraries/libwpd/default.nix | 5 +- .../development/libraries/openssl/default.nix | 3 +- pkgs/development/libraries/strigi/default.nix | 20 -- .../libraries/xine-lib/default.nix | 6 +- .../tools/build-managers/cmake/setup-hook.sh | 15 +- .../tools/misc/automake/setup-hook.sh | 4 +- pkgs/development/tools/misc/gdb/default.nix | 10 +- .../tools/misc/pkgconfig/builder.sh | 10 + .../tools/misc/pkgconfig/default.nix | 12 +- .../tools/misc/pkgconfig/setup-hook.sh | 4 +- pkgs/lib/default.nix | 4 + .../nagios/plugins/official/default.nix | 2 + pkgs/test/openftd/default.nix | 49 +++++ pkgs/tools/misc/shebangfix/default.nix | 20 ++ pkgs/tools/misc/shebangfix/shebangfix.pl | 35 ++++ pkgs/tools/misc/wv/default.nix | 2 +- pkgs/tools/package-management/nix/custom.nix | 45 ++++ .../tools/package-management/nix/unstable.nix | 4 +- pkgs/top-level/all-packages.nix | 197 +++++++++--------- pkgs/top-level/builder-defs.nix | 74 ++++--- 97 files changed, 1501 insertions(+), 608 deletions(-) create mode 100644 pkgs/applications/jedit/default.nix create mode 100644 pkgs/applications/jedit/wrapper.nix rename pkgs/desktops/kde-4/{kdebase => base}/builder.sh (55%) create mode 100644 pkgs/desktops/kde-4/base/default.nix create mode 100644 pkgs/desktops/kde-4/decibel/default.nix create mode 100644 pkgs/desktops/kde-4/default.nix create mode 100644 pkgs/desktops/kde-4/edu/default.nix create mode 100644 pkgs/desktops/kde-4/edu/myCmakeFiles/CheckBoostAndPythonCompatible.cmake create mode 100644 pkgs/desktops/kde-4/edu/myCmakeFiles/FindBoostPython.cmake create mode 100644 pkgs/desktops/kde-4/edu/myCmakeFiles/FindLibfacile.cmake create mode 100644 pkgs/desktops/kde-4/edu/myCmakeFiles/PythonLibsUtils.cmake create mode 100644 pkgs/desktops/kde-4/extragear/default.nix create mode 100644 pkgs/desktops/kde-4/games/default.nix create mode 100644 pkgs/desktops/kde-4/graphics/default.nix delete mode 100644 pkgs/desktops/kde-4/kdebase/default.nix delete mode 100644 pkgs/desktops/kde-4/kdelibs/default.nix delete mode 100755 pkgs/desktops/kde-4/kdepim/builder.sh delete mode 100644 pkgs/desktops/kde-4/kdepim/default.nix delete mode 100644 pkgs/desktops/kde-4/kdepimlibs/default.nix create mode 100644 pkgs/desktops/kde-4/libs/FindIlmBase.cmake create mode 100644 pkgs/desktops/kde-4/libs/FindOpenEXR.cmake create mode 100644 pkgs/desktops/kde-4/libs/default.nix create mode 100755 pkgs/desktops/kde-4/libs/setup.sh create mode 100644 pkgs/desktops/kde-4/multimedia/default.nix create mode 100644 pkgs/desktops/kde-4/network/default.nix create mode 100755 pkgs/desktops/kde-4/pim/builder.sh create mode 100644 pkgs/desktops/kde-4/pim/default.nix create mode 100644 pkgs/desktops/kde-4/pimlibs/default.nix create mode 100755 pkgs/desktops/kde-4/runtime/builder.sh create mode 100644 pkgs/desktops/kde-4/runtime/default.nix create mode 100644 pkgs/desktops/kde-4/support/akode.nix create mode 100644 pkgs/desktops/kde-4/support/default.nix create mode 100644 pkgs/desktops/kde-4/support/eigen.nix create mode 100644 pkgs/desktops/kde-4/support/gmm.nix create mode 100644 pkgs/desktops/kde-4/support/qca.nix create mode 100644 pkgs/desktops/kde-4/support/qimageblitz.nix create mode 100644 pkgs/desktops/kde-4/support/soprano.nix create mode 100644 pkgs/desktops/kde-4/support/strigi.nix create mode 100644 pkgs/desktops/kde-4/support/taglib.nix create mode 100644 pkgs/desktops/kde-4/toys/default.nix create mode 100644 pkgs/desktops/kde-4/utils/default.nix create mode 100755 pkgs/desktops/kde-4/workspace/builder.sh create mode 100644 pkgs/desktops/kde-4/workspace/default.nix rename pkgs/development/compilers/ocaml/{ocaml-3.08.0.nix => 3.08.0.nix} (94%) rename pkgs/development/compilers/ocaml/{ocaml-3.09.1.nix => 3.09.1.nix} (92%) create mode 100644 pkgs/development/compilers/ocaml/3.10.0.nix create mode 100644 pkgs/development/interpreters/python/2.4.nix delete mode 100644 pkgs/development/libraries/chmlib/builder.sh delete mode 100644 pkgs/development/libraries/clucene-contrib/default.nix create mode 100644 pkgs/development/libraries/facile/default.nix create mode 100644 pkgs/development/libraries/haskell/gtk2hs/default.nix create mode 100644 pkgs/development/libraries/libnotify/default.nix create mode 100644 pkgs/development/libraries/libsexy/default.nix delete mode 100644 pkgs/development/libraries/strigi/default.nix create mode 100644 pkgs/development/tools/misc/pkgconfig/builder.sh create mode 100644 pkgs/test/openftd/default.nix create mode 100644 pkgs/tools/misc/shebangfix/default.nix create mode 100644 pkgs/tools/misc/shebangfix/shebangfix.pl create mode 100644 pkgs/tools/package-management/nix/custom.nix diff --git a/pkgs/applications/audio/ladspa-plugins/default.nix b/pkgs/applications/audio/ladspa-plugins/default.nix index 9a033a42b878..70dc36240c65 100644 --- a/pkgs/applications/audio/ladspa-plugins/default.nix +++ b/pkgs/applications/audio/ladspa-plugins/default.nix @@ -17,7 +17,8 @@ in stdenv.mkDerivation { name = "swh-plugins-0.4.15"; builder = writeScript "swh-plugins-0.4.15-builder" - (textClosure [doConfigure doMakeInstall postInstall doForceShare]); + (textClosure [doConfigure doMakeInstall + postInstall doForceShare]); meta = { description = " LADSPA format audio plugins. diff --git a/pkgs/applications/audio/lame/default.nix b/pkgs/applications/audio/lame/default.nix index 503c0c395953..fa0fa679079a 100644 --- a/pkgs/applications/audio/lame/default.nix +++ b/pkgs/applications/audio/lame/default.nix @@ -1,9 +1,9 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "lame-3.96.1"; + name = "lame-3.97"; src = fetchurl { - url = mirror://sourceforge/lame/lame-3.96.1.tar.gz ; - md5 = "e1206c46a5e276feca11a7149e2fc6ac" ; + url = mirror://sourceforge/lame/lame-3.97.tar.gz ; + sha256 = "05xy9lv6m9s013lzlvhxwvr1586c239xaiiwka52k18hs6k388qa"; }; } diff --git a/pkgs/applications/jedit/default.nix b/pkgs/applications/jedit/default.nix new file mode 100644 index 000000000000..3d694ee3ed7e --- /dev/null +++ b/pkgs/applications/jedit/default.nix @@ -0,0 +1,28 @@ +args: +args.stdenv.mkDerivation { + name = "jedit-4.2"; + + src = args.fetchurl { + url = http://kent.dl.sourceforge.net/sourceforge/jedit/jedit42source.tar.gz; + sha256 = "1ckqghsw2r30kfkqfgjl4k47gdwpz8c1h85haw0y0ymq4rqh798j"; + }; + + phases = "unpackPhase buildPhase"; + + buildPhase = " + sed -i 's/\\/org.gjt.sp.jedit.gui.SplashScreen/g' org/gjt/sp/jedit/GUIUtilities.java + ant dist + ensureDir $out/lib + cp jedit.jar $out/lib + ensureDir \$out/lib/modes + cp modes/catalog \$out/lib/modes + "; + + buildInputs =(with args; [ant]); + + meta = { + description = "really nice programmers editor written in Java. Give it a try"; + homepage = http://sourceforge.net/project/showfiles.php?group_id=588; + license = "GPL"; + }; +} diff --git a/pkgs/applications/jedit/wrapper.nix b/pkgs/applications/jedit/wrapper.nix new file mode 100644 index 000000000000..ff8f6abacfc4 --- /dev/null +++ b/pkgs/applications/jedit/wrapper.nix @@ -0,0 +1,18 @@ +args: +args.stdenv.mkDerivation { + name = args.jedit.name+"_startscript"; + + java = args.jre+"/bin/java"; + jeditjar = args.jedit+"/lib/jedit.jar"; + + phases = "buildPhase"; + + buildPhase = " +ensureDir \$out/bin +cat > \$out/bin/${args.jedit.name} << EOF +#!/bin/sh +exec $java -jar $jeditjar \\$* +EOF + chmod +x \$out/bin/${args.jedit.name} +"; +} diff --git a/pkgs/applications/misc/gphoto2/default.nix b/pkgs/applications/misc/gphoto2/default.nix index caab251edd95..ef70b54384a7 100644 --- a/pkgs/applications/misc/gphoto2/default.nix +++ b/pkgs/applications/misc/gphoto2/default.nix @@ -1,10 +1,12 @@ -{stdenv, fetchurl, pkgconfig, libgphoto2, libexif, popt}: +args: with args; -stdenv.mkDerivation { - name = "gphoto2-2.2.0"; +stdenv.mkDerivation rec { + name = "gphoto2-2.4.0"; src = fetchurl { - url = mirror://sourceforge/gphoto/gphoto2-2.2.0.tar.bz2; - md5 = "f5c1f83185db598b4ca52889964a5e84"; + url = "mirror://sourceforge/gphoto/${name}.tar.bz2"; + sha256 = "1rf4w5m35dsi8dkwwnh4wg70xivdi9j79f2dy3rq90p1v8sar9ca"; }; - buildInputs = [pkgconfig libgphoto2 libexif popt]; + buildInputs = [pkgconfig libgphoto2 libexif popt gettext]; +# There is a bug in 2.4.0 configure.ac (in their m4 macroses) + patchPhase = "sed -e 's@_tmp=true@_tmp=false@' -i configure configure.ac"; } diff --git a/pkgs/applications/misc/synergy/default.nix b/pkgs/applications/misc/synergy/default.nix index b2b7af6f0141..7872c6abaaf7 100644 --- a/pkgs/applications/misc/synergy/default.nix +++ b/pkgs/applications/misc/synergy/default.nix @@ -5,7 +5,7 @@ args.stdenv.mkDerivation { src = args.fetchcvs { url = ":pserver:anonymous@synergy2.cvs.sourceforge.net:/cvsroot/synergy2"; module = "synergy"; - tag = "-DNOW"; + date = "NOW"; sha256 = "ef8e2ebfda6e43240051a7af9417092b2af50ece8b5c6c3fbd908ba91c4fe068"; }; diff --git a/pkgs/applications/networking/browsers/elinks/default.nix b/pkgs/applications/networking/browsers/elinks/default.nix index 9804f758ba7d..1e7868481338 100644 --- a/pkgs/applications/networking/browsers/elinks/default.nix +++ b/pkgs/applications/networking/browsers/elinks/default.nix @@ -8,11 +8,7 @@ stdenv.mkDerivation { sha256 = "c10e657fbd884eae4f01b91b32407bbfcbcae0ad5017fb24ea365aebc71d2af1"; }; - preConfigure = " - touch config.log ; rm /tmp/elinks.config.log; ln -f config.log /tmp/elinks.config.log"; - - buildInputs = [python perl ncurses x11 bzip2 zlib openssl spidermonkey guile - libtool]; + buildInputs = [python perl ncurses x11 bzip2 zlib openssl spidermonkey guile]; configureFlags = "--enable-finger --enable-html-highlight --with-guile --with-perl --with-python --enable-gopher --enable-cgi --enable-bittorrent --enable-nntp --with-openssl=${openssl}"; diff --git a/pkgs/applications/version-management/git/default.nix b/pkgs/applications/version-management/git/default.nix index 138b4d614495..c2388f8c1aa4 100644 --- a/pkgs/applications/version-management/git/default.nix +++ b/pkgs/applications/version-management/git/default.nix @@ -1,16 +1,21 @@ -{stdenv, fetchurl, curl, openssl, zlib, expat, perl}: +args: with args; -stdenv.mkDerivation { - name = "git-1.5.1.2"; +stdenv.mkDerivation rec { + name = "git-1.5.3.5"; src = fetchurl { - url = mirror://kernel/software/scm/git/git-1.5.1.2.tar.bz2; - sha256 = "0a7nnw9631h6nxk7sny0cjv89qlibilvsm6947620vr2kgc6p6k2"; + url = "mirror://kernel/software/scm/git/${name}.tar.bz2"; + sha256 = "0ab63s25wzmsl5inp7bykz5ac7xjilqa0ciaz7ydhciymz6gkawj"; }; buildInputs = [curl openssl zlib expat]; - preBuild = " - makeFlagsArray=(prefix=$out PERL_PATH=${perl}/bin/perl SHELL_PATH=${stdenv.shell}) - "; + makeFlags="prefix=\${out} PERL_PATH=${perl}/bin/perl SHELL_PATH=${stdenv.shell}"; + + meta = { + license = "GPL2"; + homepage = http://git.or.cz; + description = "A popular version control system designed to handle very + large projects with speed and efficiency"; + }; } diff --git a/pkgs/build-support/fetchcvs/builder.sh b/pkgs/build-support/fetchcvs/builder.sh index 16aad96116d5..be3e9e46355d 100644 --- a/pkgs/build-support/fetchcvs/builder.sh +++ b/pkgs/build-support/fetchcvs/builder.sh @@ -1,8 +1,5 @@ source $stdenv/setup -if test -z "$tag"; then - tag="-DNOW" -fi # creating the export drictory and checking out there only to be able to # move the content without the root directory into $out ... # cvs -f -d "$url" export $tag -d "$out" "$module" @@ -10,6 +7,16 @@ fi # See als man Page for those options ensureDir $out export +set -x +if [ -n "$tag" ]; then + tag="-r $tag" +else + if [ -n "$date" ]; then + tag="-D $date" + else + tag="-D NOW" + fi +fi cd export; cvs -f -d "$url" export $tag "$module" mv */* $out diff --git a/pkgs/build-support/fetchcvs/default.nix b/pkgs/build-support/fetchcvs/default.nix index 6cd31ddaade7..60463ec56443 100644 --- a/pkgs/build-support/fetchcvs/default.nix +++ b/pkgs/build-support/fetchcvs/default.nix @@ -1,13 +1,13 @@ # example tags: -# "-DNOW" (get current version) -# "-D2007-20-10" (get the last version before given date) -# "-r " (get version by tag name) -{stdenv, cvs, nix}: {url, module, tag, sha256}: +# date="2007-20-10"; (get the last version before given date) +# tag="" (get version by tag name) +# If you don't specify neither one date="NOW" will be used (get latest) + +{stdenv, cvs, nix}: {url, module, tag ? null, date ? null, sha256}: stdenv.mkDerivation { name = "cvs-export"; builder = ./builder.sh; buildInputs = [cvs nix]; - - inherit url module tag sha256; + inherit url module sha256 tag date; } diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix index 6410e9c053ac..9b4c14340bfc 100644 --- a/pkgs/desktops/gnome/default.nix +++ b/pkgs/desktops/gnome/default.nix @@ -210,7 +210,7 @@ rec { gnomedocutils = import ./gnome-doc-utils.nix { inherit stdenv fetchurl pkgconfig perl perlXMLParser python - libxml2 libxslt gettext; + libxml2 libxslt gettext libxml2Python; input = desktop.gnomedocutils; }; diff --git a/pkgs/desktops/gnome/gnome-doc-utils.nix b/pkgs/desktops/gnome/gnome-doc-utils.nix index f1650d9650a8..8a77d96475f3 100644 --- a/pkgs/desktops/gnome/gnome-doc-utils.nix +++ b/pkgs/desktops/gnome/gnome-doc-utils.nix @@ -1,7 +1,4 @@ -{ input, stdenv, fetchurl, pkgconfig, perl, perlXMLParser, python -, libxml2, libxslt, gettext -}: - +args: with args; # !!! xml2po needs to store the path to libxml2 stdenv.mkDerivation { @@ -9,8 +6,18 @@ stdenv.mkDerivation { buildInputs = [ pkgconfig perl perlXMLParser python - libxml2 libxslt gettext + libxml2 libxslt gettext python libxml2Python ]; configureFlags = "--disable-scrollkeeper"; + + postInstall = " + mv \$out/bin/xml2po \$out/bin/.xml2po.orig + pythonPathLibXml2=\"\$(toPythonPath ${libxml2Python})\" + echo -e '#! ${stdenv.shell}\nPYTHONPATH=$PYTHONPATH:'\"\$( toPythonPath \$out )"+ + ":\${pythonPathLibXml2//python2.5/python2.4}"+ + ":\$( toPythonPath ${libxml2Python} )\""+ + "' \$(dirname \$0)/.xml2po.orig \"\$@\"' > \$out/bin/xml2po; + chmod a+x \$out/bin/xml2po + "; } diff --git a/pkgs/desktops/kde-4/kdebase/builder.sh b/pkgs/desktops/kde-4/base/builder.sh similarity index 55% rename from pkgs/desktops/kde-4/kdebase/builder.sh rename to pkgs/desktops/kde-4/base/builder.sh index 41cff761b361..99b357fcf167 100755 --- a/pkgs/desktops/kde-4/kdebase/builder.sh +++ b/pkgs/desktops/kde-4/base/builder.sh @@ -1,21 +1,12 @@ source ${stdenv}/setup -myPreBuild() -{ - for i in ${qt}/include/*; do - NIX_CFLAGS_COMPILE="-I$i ${NIX_CFLAGS_COMPILE}" - done; - echo "${NIX_CFLAGS_COMPILE}" -} -preBuild=myPreBuild - myPatchPhase() { echo "Fixing dbus calls in CMakeLists.txt files" # Trailing slash in sed is essential find .. -name CMakeLists.txt \ | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i - sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h + #sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h } patchPhase=myPatchPhase genericBuild diff --git a/pkgs/desktops/kde-4/base/default.nix b/pkgs/desktops/kde-4/base/default.nix new file mode 100644 index 000000000000..75dbfbf40d4d --- /dev/null +++ b/pkgs/desktops/kde-4/base/default.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdebase-4.0beta4"; + #builder = ./builder.sh; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdebase-3.95.0.tar.bz2; + sha256 = "0qf7bn5jqj70hznjk74vpwb7rvk6f5gx9fxwli930b2hskib3zll"; + }; + + propagatedBuildInputs = [kdepimlibs libusb]; + inherit kdelibs; +} diff --git a/pkgs/desktops/kde-4/decibel/default.nix b/pkgs/desktops/kde-4/decibel/default.nix new file mode 100644 index 000000000000..ff98b48ee6fc --- /dev/null +++ b/pkgs/desktops/kde-4/decibel/default.nix @@ -0,0 +1,11 @@ +args: with args; +stdenv.mkDerivation { + name = "decibel-0.5.0"; + + src = fetchurl { + url = http://decibel.kde.org/fileadmin/downloads/decibel/releases/decibel-0.5.0.tar.gz; + sha256 = "07visasid4mpzm0ba5j9qy0lxxb6451lvbr2gnc1vzfvjagffqz4"; + }; + + buildInputs = [kdelibs kdebase ]; +} diff --git a/pkgs/desktops/kde-4/default.nix b/pkgs/desktops/kde-4/default.nix new file mode 100644 index 000000000000..9732d9e2b2b7 --- /dev/null +++ b/pkgs/desktops/kde-4/default.nix @@ -0,0 +1,35 @@ +args: +rec { + fullargs = args // { kdelibs = libs; kdepimlibs = pimlibs; kdebase = base; kderuntime = runtime; }; + libs = import ./libs (args // { kdesupport = support; }); + pimlibs = import ./pimlibs (args // { kdelibs = libs; }); + graphics = import ./graphics (fullargs // { kdeworkspace = workspace; } ); + multimedia = import ./multimedia (fullargs // { kdeworkspace = workspace; } ); + toys = import ./toys (fullargs // { kdeworkspace = workspace; } ); + network = import ./network (fullargs // { kdeworkspace = workspace; } ); + utils = import ./utils (fullargs // { kdeworkspace = workspace; } ); + games = import ./games (fullargs // { kdeworkspace = workspace; } ); + edu = import ./edu (fullargs // { kdeworkspace = workspace; } ); + base = import ./base fullargs; + runtime = import ./runtime fullargs; + workspace = import ./workspace fullargs; + extragear_plasma = import ./extragear (fullargs // { kdeworkspace = workspace; }); + support = import ./support args; + decibel = import ./decibel fullargs; + pim = import ./pim (fullargs // {kdeworkspace = workspace; }); + + env = with args; runCommand "kde-env" + { + KDEDIRS = lib.concatStringsSep ":" ([ libs pimlibs graphics multimedia + toys network utils games edu base runtime workspace extragear_plasma pim] ++ + support.all); + scriptName = "echo-kde-dirs"; + } + " + ensureDir \${out}/bin + scriptPath=\${out}/bin/\${scriptName} + echo \"#!/bin/sh\" > \${scriptPath} + echo \"echo -n export KDEDIRS=\${KDEDIRS}\" >> \${scriptPath} + chmod +x \${scriptPath} + "; +} diff --git a/pkgs/desktops/kde-4/edu/default.nix b/pkgs/desktops/kde-4/edu/default.nix new file mode 100644 index 000000000000..e69a1a49be63 --- /dev/null +++ b/pkgs/desktops/kde-4/edu/default.nix @@ -0,0 +1,20 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "kdeedu-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdeedu-3.95.0.tar.bz2; + sha256 = "0cydl3pp3l0cbfmf774qh8njyhycaf8yxb27k4xf6mipvw1k9jqf"; + }; + + buildInputs = [kdelibs kdepimlibs kdeworkspace boost readline openbabel ocaml + libusb facile python]; + myCmakeFiles = ./myCmakeFiles; + patchPhase = " + cp ${myCmakeFiles}/* ../cmake/modules + sed -e 's@+facile@\${LIBFACILE_INCLUDE_DIR}@' -i \\ + ../kalzium/src/CMakeOCamlInstructions.cmake + "; + configureFlags = "--debug-trycompile"; +} diff --git a/pkgs/desktops/kde-4/edu/myCmakeFiles/CheckBoostAndPythonCompatible.cmake b/pkgs/desktops/kde-4/edu/myCmakeFiles/CheckBoostAndPythonCompatible.cmake new file mode 100644 index 000000000000..35701ecf5c68 --- /dev/null +++ b/pkgs/desktops/kde-4/edu/myCmakeFiles/CheckBoostAndPythonCompatible.cmake @@ -0,0 +1,38 @@ +include(CheckCXXSourceCompiles) +include(CheckIncludeFileCXX) +include(CheckLibraryExists) + +MACRO(check_boost_and_python_compatible + _bo_inc _bo_ld _bo_py_lib + _py_inc _py_ld _py_lib) + + set(_save_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}") + + set(CMAKE_REQUIRED_FLAGS "-L${_bo_ld} -L${_py_ld}") + set(CMAKE_REQUIRED_INCLUDES ${_py_inc} ${_bo_inc}) + set(CMAKE_REQUIRED_LIBRARIES ${_bo_py_lib} ${_py_lib}) + + check_cxx_source_compiles(" +#include +const char* greet() { return \"Hello world!\"; } +BOOST_PYTHON_MODULE(hello) { boost::python::def(\"greet\", greet); } + +int main() { return 0; } + +// some vars, in case of the compilation fail... +// python include dir: ${_py_inc} +// python lib: ${_py_lib} +// +// boost python lib: ${_bo_py_lib} +// boost include dir: ${_bo_inc} +// boost lib dir: ${_bo_ld} +// +" +BOOST_PYTHON_${_bo_inc}_${_bo_ld}_${_bo_py_lib}_${_py_inc}_${_py_ld}_${_py_lib}_COMPATIBLE ) + + set(CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_INCLUDES) + set(CMAKE_REQUIRED_LIBRARIES) + set(CMAKE_CXX_FLAGS ${_save_CXX_FLAGS}) +ENDMACRO(check_boost_and_python_compatible) diff --git a/pkgs/desktops/kde-4/edu/myCmakeFiles/FindBoostPython.cmake b/pkgs/desktops/kde-4/edu/myCmakeFiles/FindBoostPython.cmake new file mode 100644 index 000000000000..b68959d8a9c9 --- /dev/null +++ b/pkgs/desktops/kde-4/edu/myCmakeFiles/FindBoostPython.cmake @@ -0,0 +1,90 @@ +# - Try to find the a valid boost+python combination +# Once done this will define +# +# Boost_PYTHON_FOUND - system has a valid boost+python combination +# BOOST_PYTHON_INCLUDES - the include directory for boost+python +# BOOST_PYTHON_LIBS - the needed libs for boost+python + +# Copyright (c) 2006, Pino Toscano, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +if(BOOST_PYTHON_INCLUDES AND BOOST_PYTHON_LIBS) + # Already in cache, be silent + set(Boost_PYTHON_FIND_QUIETLY TRUE) +endif(BOOST_PYTHON_INCLUDES AND BOOST_PYTHON_LIBS) + +SET(Boost_PYTHON_LIB_SUFFIXES "-mt" "-gcc-mt") +SET(Boost_KNOWN_VERSIONS "-1_34_1" "-1_34_0" "-1_33_1" "-1_33_0") + +FIND_PACKAGE(Boost) +INCLUDE(PythonLibsUtils) +INCLUDE(CheckBoostAndPythonCompatible) + +IF(Boost_FOUND AND Boost_LIBRARY_DIRS) + + SET(Boost_PYTHON_LIB_NAMES boost_python) + FOREACH(_suffix ${Boost_PYTHON_LIB_SUFFIXES}) + set(Boost_PYTHON_LIB_NAMES ${Boost_PYTHON_LIB_NAMES} + boost_python${_suffix}) + FOREACH(_bo_ver ${Boost_KNOWN_VERSIONS}) + set(Boost_PYTHON_LIB_NAMES ${Boost_PYTHON_LIB_NAMES} + boost_python${_suffix}${_bo_ver}) + ENDFOREACH(_bo_ver) + ENDFOREACH(_suffix) + + SET(_found FALSE) + FOREACH(_boost_python_lib ${Boost_PYTHON_LIB_NAMES}) + IF(NOT _found) + FIND_LIBRARY(Boost_PYTHON_LIB_FULLPATH + NAME ${_boost_python_lib} + PATHS ${Boost_LIBRARY_DIRS} + NO_DEFAULT_PATH + ) + IF(Boost_PYTHON_LIB_FULLPATH) + SET(Boost_PYTHON_LIB ${_boost_python_lib}) + SET(_found TRUE) + ENDIF(Boost_PYTHON_LIB_FULLPATH) + ENDIF(NOT _found) + ENDFOREACH(_boost_python_lib) + + IF(Boost_PYTHON_LIB) + SET(_found FALSE) + FOREACH(_py_ver ${PYTHON_KNOWN_VERSIONS}) + if (NOT _found) + python_find_version(${_py_ver} _py_inc _py_ld _py_lib) + IF(PYTHON_REQ_VERSION_FOUND) + MESSAGE(STATUS " ${Boost_INCLUDE_DIRS} ${Boost_LIBRARY_DIRS} ${Boost_PYTHON_LIB} ${_py_inc} ${_py_ld} ${_py_lib}") + check_boost_and_python_compatible( + "${Boost_INCLUDE_DIRS}" "${Boost_LIBRARY_DIRS}" + "${Boost_PYTHON_LIB}" "${_py_inc}" "${_py_ld}" + "${_py_lib}") + SET(_found + BOOST_PYTHON_${Boost_INCLUDE_DIRS}_${Boost_LIBRARY_DIRS}_${Boost_PYTHON_LIB}_${_py_inc}_${_py_ld}_${_py_lib}_COMPATIBLE) + + IF(BOOST_PYTHON_${Boost_INCLUDE_DIRS}_${Boost_LIBRARY_DIRS}_${Boost_PYTHON_LIB}_${_py_inc}_${_py_ld}_${_py_lib}_COMPATIBLE) + SET(BOOST_PYTHON_INCLUDES ${Boost_INCLUDE_DIRS} ${_py_inc}) + SET(BOOST_PYTHON_LIBS "-l${_py_lib} -L${_py_ld} -l${Boost_PYTHON_LIB}") + SET(BOOST_PYTHON_FOUND TRUE) + SET(_found TRUE) + ENDIF(BOOST_PYTHON_${Boost_INCLUDE_DIRS}_${Boost_LIBRARY_DIRS}_${Boost_PYTHON_LIB}_${_py_inc}_${_py_ld}_${_py_lib}_COMPATIBLE) + ENDIF(PYTHON_REQ_VERSION_FOUND) + ENDIF(NOT _found) + ENDFOREACH(_py_ver) + ENDIF(Boost_PYTHON_LIB) +ENDIF(Boost_FOUND AND Boost_LIBRARY_DIRS) + +if(BOOST_PYTHON_FOUND) + if(NOT BoostPython_FIND_QUIETLY) + message(STATUS "Found Boost+Python: ${BOOST_PYTHON_INCLUDES} ${BOOST_PYTHON_LIBS}") + endif(NOT BoostPython_FIND_QUIETLY) + set(KIG_ENABLE_PYTHON_SCRIPTING 1) +else (BOOST_PYTHON_FOUND) + if (BoostPython_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find Boost+Python") + endif(BoostPython_FIND_REQUIRED) + set(KIG_ENABLE_PYTHON_SCRIPTING 0) +endif(BOOST_PYTHON_FOUND) + +mark_as_advanced(BOOST_PYTHON_INCLUDES BOOST_PYTHON_LIBS) diff --git a/pkgs/desktops/kde-4/edu/myCmakeFiles/FindLibfacile.cmake b/pkgs/desktops/kde-4/edu/myCmakeFiles/FindLibfacile.cmake new file mode 100644 index 000000000000..154531dabc11 --- /dev/null +++ b/pkgs/desktops/kde-4/edu/myCmakeFiles/FindLibfacile.cmake @@ -0,0 +1,45 @@ +# - Try to find Libfacile +# Once done this will define +# +# LIBFACILE_FOUND - system has Libfacile +# LIBFACILE_INCLUDE_DIR - the Libfacile include directory +# LIBFACILE_LIBRARIES - Link these to use Libfacile +# LIBFACILE_DEFINITIONS - Compiler switches required for using Libfacile +# +# Copyright (c) 2006, Carsten Niehaus, +# Copyright (c) 2006, Montel Laurent, +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +find_package(OCaml) + +set(LIBFACILE_FOUND FALSE) + +if( OCAML_FOUND ) + find_file(LIBFACILE_LIBRARIES NAME facile.a + PATHS ${OCAMLC_DIR} ENV CMAKE_LIBRARY_PATH + PATH_SUFFIXES facile ocaml/facile + ) + message(STATUS "LIBFACILE_LIBRARIES :<${LIBFACILE_LIBRARIES}>") + if (LIBFACILE_LIBRARIES) + get_filename_component(LIBFACILE_INCLUDE_DIR ${LIBFACILE_LIBRARIES} PATH) + message(STATUS "LIBFACILE_INCLUDE_DIR <${LIBFACILE_INCLUDE_DIR}>") + set(LIBFACILE_FOUND TRUE) + endif(LIBFACILE_LIBRARIES) +endif(OCAML_FOUND) + + +if(LIBFACILE_FOUND) + if(NOT Libfacile_FIND_QUIETLY) + message(STATUS "Found Libfacile: ${LIBFACILE_LIBRARIES}") + endif(NOT Libfacile_FIND_QUIETLY) +else(LIBFACILE_FOUND) + if(Libfacile_FIND_REQUIRED) + message(FATAL_ERROR "Could not find Libfacile") + endif(Libfacile_FIND_REQUIRED) +endif(LIBFACILE_FOUND) + +# show the LIBFACILE_INCLUDE_DIR and LIBFACILE_LIBRARIES variables only in the advanced view +mark_as_advanced(LIBFACILE_INCLUDE_DIR LIBFACILE_LIBRARIES ) + diff --git a/pkgs/desktops/kde-4/edu/myCmakeFiles/PythonLibsUtils.cmake b/pkgs/desktops/kde-4/edu/myCmakeFiles/PythonLibsUtils.cmake new file mode 100644 index 000000000000..df54324712a1 --- /dev/null +++ b/pkgs/desktops/kde-4/edu/myCmakeFiles/PythonLibsUtils.cmake @@ -0,0 +1,46 @@ +SET(PYTHON_KNOWN_VERSIONS "2.5" "2.4" "2.3" "2.2" "2.1" "2.0" "1.6" "1.5") + +MACRO(python_find_version _py_ver _py_inc _py_ld _py_lib) + STRING(REPLACE "." "" _py_ver_nd "${_py_ver}") + + SET(PY_INSTALL_PATH + [HKEY_LOCAL_MACHINE\\SOFTWARE\\Python\\PythonCore\\${_py_ver}\\InstallPath]) + + SET(_py_libnames "python${_py_ver}" "python${_py_ver_nd}") + + SET(_py_found FALSE) + FOREACH(_py_libname ${_py_libnames}) + IF (NOT _py_found) + SET(_py_lib_full _py_lib_full-NOTFOUND) + + FIND_LIBRARY(_py_lib_full + NAMES "${_py_libname}" + PATHS "${PY_INSTALL_PATH}/libs" + NO_SYSTEM_ENVIRONMENT_PATH + ) + FIND_LIBRARY(_py_lib_full + NAMES "${_py_libname}" + PATHS "${PY_INSTALL_PATH}/libs" + PATH_SUFFIXES "python${_py_ver}/config" + NO_SYSTEM_ENVIRONMENT_PATH + ) + IF(_py_lib_full) + SET(_py_lib "${_py_libname}") + GET_FILENAME_COMPONENT(_py_ld "${_py_lib_full}" PATH) + SET(_py_found TRUE) + ENDIF(_py_lib_full) + ENDIF(NOT _py_found) + ENDFOREACH(_py_libname) + + IF(_py_found) + FIND_PATH(_py_inc + NAMES Python.h + PATHS + ${PY_INSTALL_PATH}/include + PATH_SUFFIXES + "python${_py_ver}" + ) + ENDIF(_py_found) + + SET(PYTHON_REQ_VERSION_FOUND ${_py_found}) +ENDMACRO(python_find_version) diff --git a/pkgs/desktops/kde-4/extragear/default.nix b/pkgs/desktops/kde-4/extragear/default.nix new file mode 100644 index 000000000000..c67d4b8682cb --- /dev/null +++ b/pkgs/desktops/kde-4/extragear/default.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation { + name = "extragear-plasma-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/extragear-plasma-3.95.0.tar.bz2; + sha256 = "1nzfy34ig66gfpgv6kbcmcap13axcy7kvj43srbd0ic6a0giv283"; + }; + + buildInputs = [ kdeworkspace kdebase ]; + patchPhase = " + sed -e 's@ +# Copyright (c) 2007, Yury G. Kudryashov, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +if (ILMBASE_INCLUDE_DIR AND ILMBASE_LIBRARIES) + # in cache already + SET(ILMBASE_FOUND TRUE) + +else (ILMBASE_INCLUDE_DIR AND ILMBASE_LIBRARIES) +IF (NOT WIN32) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + INCLUDE(UsePkgConfig) + + PKGCONFIG(IlmBase _IlmBaseIncDir _IlmBaseLinkDir _IlmBaseLinkFlags _IlmBaseCflags) +ENDIF (NOT WIN32) + FIND_PATH(ILMBASE_INCLUDE_DIR ImathBox.h + ${_IlmBaseIncDir} + ${_IlmBaseIncDir}/OpenEXR/ + ) + + FIND_LIBRARY(ILMBASE_HALF_LIBRARY NAMES Half + PATHS + ${_IlmBaseLinkDir} + NO_DEFAULT_PATH + ) + FIND_LIBRARY(ILMBASE_HALF_LIBRARY NAMES Half ) + + FIND_LIBRARY(ILMBASE_IEX_LIBRARY NAMES Iex + PATHS + ${_IlmBaseLinkDir} + NO_DEFAULT_PATH + ) + FIND_LIBRARY(ILMBASE_IEX_LIBRARY NAMES Iex ) + + FIND_LIBRARY(ILMBASE_IMATH_LIBRARY NAMES Imath + PATHS + ${_IlmBaseLinkDir} + NO_DEFAULT_PATH + ) + FIND_LIBRARY(ILMBASE_IMATH_LIBRARY NAMES Imath ) + + if (ILMBASE_INCLUDE_DIR AND ILMBASE_IMATH_LIBRARY AND ILMBASE_IEX_LIBRARY AND ILMBASE_HALF_LIBRARY) + set(ILMBASE_FOUND TRUE) + set(ILMBASE_LIBRARIES ${ILMBASE_IMATH_LIBRARY} ${ILMBASE_IEX_LIBRARY} ${ILMBASE_HALF_LIBRARY} CACHE STRING "The libraries needed to use IlmBase") + endif (ILMBASE_INCLUDE_DIR AND ILMBASE_IMATH_LIBRARY AND ILMBASE_IEX_LIBRARY AND ILMBASE_HALF_LIBRARY) + + if (ILMBASE_FOUND) + if (NOT IlmBase_FIND_QUIETLY) + message(STATUS "Found ILMBASE: ${ILMBASE_LIBRARIES}") + endif (NOT IlmBase_FIND_QUIETLY) + else (ILMBASE_FOUND) + if (IlmBase_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find ILMBASE") + endif (IlmBase_FIND_REQUIRED) + endif (ILMBASE_FOUND) + + MARK_AS_ADVANCED( + ILMBASE_INCLUDE_DIR + ILMBASE_LIBRARIES + ILMBASE_IMATH_LIBRARY + ILMBASE_IEX_LIBRARY + ILMBASE_HALF_LIBRARY ) + +endif (ILMBASE_INCLUDE_DIR AND ILMBASE_LIBRARIES) diff --git a/pkgs/desktops/kde-4/libs/FindOpenEXR.cmake b/pkgs/desktops/kde-4/libs/FindOpenEXR.cmake new file mode 100644 index 000000000000..b1f590544fa8 --- /dev/null +++ b/pkgs/desktops/kde-4/libs/FindOpenEXR.cmake @@ -0,0 +1,68 @@ +# Try to find the OpenEXR libraries +# This check defines: +# +# OPENEXR_FOUND - system has OpenEXR +# OPENEXR_INCLUDE_DIR - OpenEXR include directory +# OPENEXR_LIBRARIES - Libraries needed to use OpenEXR +# +# Copyright (c) 2006, Alexander Neundorf, +# Copyright (c) 2007, Yury G. Kudryashov, +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + + +if (OPENEXR_INCLUDE_DIR AND OPENEXR_LIBRARIES) + # in cache already + SET(OPENEXR_FOUND TRUE) + +else (OPENEXR_INCLUDE_DIR AND OPENEXR_LIBRARIES) +FIND_PACKAGE(IlmBase) +IF (NOT ILMBASE_FOUND) + SET(OPENEXR_FOUND FALSE) +ELSE (NOT ILMBASE_FOUND) +IF (NOT WIN32) + # use pkg-config to get the directories and then use these values + # in the FIND_PATH() and FIND_LIBRARY() calls + INCLUDE(UsePkgConfig) + + PKGCONFIG(OpenEXR _OpenEXRIncDir _OpenEXRLinkDir _OpenEXRLinkFlags _OpenEXRCflags) +ENDIF (NOT WIN32) + FIND_PATH(OPENEXR_INCLUDE_DIR ImfRgbaFile.h + ${_OpenEXRIncDir} + ${_OpenEXRIncDir}/OpenEXR/ + ) + + FIND_LIBRARY(OPENEXR_ILMIMF_LIBRARY NAMES IlmImf + PATHS + ${_OpenEXRLinkDir} + NO_DEFAULT_PATH + ) + FIND_LIBRARY(OPENEXR_ILMIMF_LIBRARY NAMES IlmImf ) + + if (OPENEXR_INCLUDE_DIR AND OPENEXR_ILMIMF_LIBRARY) + set(OPENEXR_FOUND TRUE) + set(OPENEXR_LIBRARIES ${ILMBASE_LIBRARIES} ${OPENEXR_ILMIMF_LIBRARY} CACHE STRING "The libraries needed to use OpenEXR") + set(OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDE_DIR} ${ILMBASE_INCLUDE_DIR}) + endif (OPENEXR_INCLUDE_DIR AND OPENEXR_ILMIMF_LIBRARY) +ENDIF (NOT ILMBASE_FOUND) + + if (OPENEXR_FOUND) + if (NOT OpenEXR_FIND_QUIETLY) + message(STATUS "Found OPENEXR: ${OPENEXR_LIBRARIES}") + endif (NOT OpenEXR_FIND_QUIETLY) + else (OPENEXR_FOUND) + if (OpenEXR_FIND_REQUIRED) + message(FATAL_ERROR "Could NOT find OPENEXR") + endif (OpenEXR_FIND_REQUIRED) + endif (OPENEXR_FOUND) + + MARK_AS_ADVANCED( + OPENEXR_INCLUDE_DIR + OPENEXR_LIBRARIES + OPENEXR_ILMIMF_LIBRARY + OPENEXR_IMATH_LIBRARY + OPENEXR_IEX_LIBRARY + OPENEXR_HALF_LIBRARY ) + +endif (OPENEXR_INCLUDE_DIR AND OPENEXR_LIBRARIES) diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix new file mode 100644 index 000000000000..844e4a03320f --- /dev/null +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -0,0 +1,27 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "kdelibs-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdelibs-3.95.0.tar.bz2; + sha256 = "0960880wvwrj68r35knqjjxbqq90xzy1lqv526zyaymp7jc24ybc"; + }; + + propagatedBuildInputs = [ + cmake inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto + xineramaproto xproto libICE libX11 libXau libXcomposite libXcursor + libXdamage libXdmcp libXext libXfixes libXft libXi libXpm libXrandr + libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib + perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat + libtool freetype bzip2 shared_mime_info alsaLib libungif cups + gettext enchant openexr aspell stdenv.gcc.libc + ] ++ kdesupport.all; + patchPhase = "cp ${findIlmBase} ../cmake/modules/FindIlmBase.cmake; + cp $findOpenEXR ../cmake/modules/FindOpenEXR.cmake; + sed -e 's@Soprano/DummyModel@Soprano/Util/DummyModel@' -i ../nepomuk/core/resourcemanager.cpp;"; + + findIlmBase = ./FindIlmBase.cmake; + findOpenEXR = ./FindOpenEXR.cmake; + setupHook=./setup.sh; +} diff --git a/pkgs/desktops/kde-4/libs/setup.sh b/pkgs/desktops/kde-4/libs/setup.sh new file mode 100755 index 000000000000..6f899442d27a --- /dev/null +++ b/pkgs/desktops/kde-4/libs/setup.sh @@ -0,0 +1,5 @@ +addKDEDIRS() +{ + addToSearchPath KDEDIRS /share/kde4 /. $1 +} +envHooks=(${envHooks[@]} addKDEDIRS) diff --git a/pkgs/desktops/kde-4/multimedia/default.nix b/pkgs/desktops/kde-4/multimedia/default.nix new file mode 100644 index 000000000000..f0870c1740d4 --- /dev/null +++ b/pkgs/desktops/kde-4/multimedia/default.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdemultimedia-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdemultimedia-3.95.0.tar.bz2; + sha256 = "0vjk5gpn45fh7hm982jw1frd7fr0grff96ksmh29wnkc160rh8va"; + }; + + buildInputs = [kdelibs kdepimlibs kdeworkspace libogg flac cdparanoia lame + libvorbis]; +} diff --git a/pkgs/desktops/kde-4/network/default.nix b/pkgs/desktops/kde-4/network/default.nix new file mode 100644 index 000000000000..21ae2074e068 --- /dev/null +++ b/pkgs/desktops/kde-4/network/default.nix @@ -0,0 +1,12 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdenetwork-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdenetwork-3.95.0.tar.bz2; + sha256 = "118r55aw0pag78kawjfn3vya7aca12n5ypknm1i4khxs747hxqbr"; + }; + + buildInputs = [kdelibs kdepimlibs kdeworkspace sqlite libidn]; +} diff --git a/pkgs/desktops/kde-4/pim/builder.sh b/pkgs/desktops/kde-4/pim/builder.sh new file mode 100755 index 000000000000..8963fae048ca --- /dev/null +++ b/pkgs/desktops/kde-4/pim/builder.sh @@ -0,0 +1,10 @@ +source ${stdenv}/setup + +myPatchPhase() +{ +# They reset CMAKE_MODULE_PATH, not adding to the existing + sed -e '3s/)/ ${CMAKE_MODULE_PATH})/' -i ../CMakeLists.txt +} +patchPhase=myPatchPhase + +genericBuild diff --git a/pkgs/desktops/kde-4/pim/default.nix b/pkgs/desktops/kde-4/pim/default.nix new file mode 100644 index 000000000000..f0f4184d391f --- /dev/null +++ b/pkgs/desktops/kde-4/pim/default.nix @@ -0,0 +1,15 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdepim-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdepim-3.95.0.tar.bz2; + sha256 = "0gzvm4h6ij7i119apmh9w82raygahr18bl0i9m3ynf2mcca0aq94"; + }; + + buildInputs = [libXinerama mesa stdenv.gcc.libc alsaLib kdelibs kdepimlibs + kdeworkspace libusb glib]; + qt4BadIncludes = true; + inherit qt kdelibs; +} diff --git a/pkgs/desktops/kde-4/pimlibs/default.nix b/pkgs/desktops/kde-4/pimlibs/default.nix new file mode 100644 index 000000000000..6d273acc67e0 --- /dev/null +++ b/pkgs/desktops/kde-4/pimlibs/default.nix @@ -0,0 +1,12 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdepimlibs-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdepimlibs-3.95.0.tar.bz2; + sha256 = "1dhn5x3k9myqfymv6ry84v0zm2qwxnrlm1vdlllfvmgbm5nz34mg"; + }; + + propagatedBuildInputs = [kdelibs boost gpgme cyrus_sasl openldap]; +} diff --git a/pkgs/desktops/kde-4/runtime/builder.sh b/pkgs/desktops/kde-4/runtime/builder.sh new file mode 100755 index 000000000000..99b357fcf167 --- /dev/null +++ b/pkgs/desktops/kde-4/runtime/builder.sh @@ -0,0 +1,12 @@ +source ${stdenv}/setup + +myPatchPhase() +{ + echo "Fixing dbus calls in CMakeLists.txt files" +# Trailing slash in sed is essential + find .. -name CMakeLists.txt \ + | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i + #sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h +} +patchPhase=myPatchPhase +genericBuild diff --git a/pkgs/desktops/kde-4/runtime/default.nix b/pkgs/desktops/kde-4/runtime/default.nix new file mode 100644 index 000000000000..f3f241a7ffee --- /dev/null +++ b/pkgs/desktops/kde-4/runtime/default.nix @@ -0,0 +1,15 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdebase-runtime-4.0beta4"; + builder = ./builder.sh; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdebase-runtime-3.95.0.tar.bz2; + sha256 = "1s4fhbz7gpdxmvlr20c7n6cvcb9sn0qxigzpljsxw9524w177ksr"; + }; + + propagatedBuildInputs = [kdepimlibs libusb kdebase xineLib]; + inherit kdelibs; +} + diff --git a/pkgs/desktops/kde-4/support/akode.nix b/pkgs/desktops/kde-4/support/akode.nix new file mode 100644 index 000000000000..1385def6b559 --- /dev/null +++ b/pkgs/desktops/kde-4/support/akode.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "akode-2.0.0dev"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/akode; + rev = 732646; + md5 = "6629ffedc42c020d2e8645910a4efdf5"; + }; + + buildInputs = [ cmake qt openssl gettext cyrus_sasl alsaLib ]; +} diff --git a/pkgs/desktops/kde-4/support/default.nix b/pkgs/desktops/kde-4/support/default.nix new file mode 100644 index 000000000000..af1dc175bedd --- /dev/null +++ b/pkgs/desktops/kde-4/support/default.nix @@ -0,0 +1,36 @@ +args: +rec { + qca = (import ./qca.nix) args; + akode = (import ./akode.nix) args; + gmm = (import ./gmm.nix) args; + eigen = (import ./eigen.nix) args; + taglib = (import ./taglib.nix) args; + soprano = (import ./soprano.nix) args; + strigi = (import ./strigi.nix) args; + qimageblitz = (import ./qimageblitz.nix) args; + all = [qca gmm eigen taglib soprano strigi qimageblitz]; +} +#args: with args; +# +#stdenv.mkDerivation { +# name = "kdesupport-4.0svn-r729462"; +# +# src = fetchsvn { +# url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport; +# rev = 729462; +# md5 = "aa50ec8e5c8d49e1dfd53143345cb4b3"; +# }; +# +# propagatedBuildInputs = [ +# exiv2 +# cmake inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto +# xineramaproto xproto libICE libX11 libXau libXcomposite libXcursor +# libXdamage libXdmcp libXext libXfixes libXft libXi libXpm libXrandr +# libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib +# perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat +# libtool freetype bzip2 shared_mime_info alsaLib libungif cups +# gettext cluceneCore redland stdenv.gcc.libc dbus bison cppunit +# ]; +# CLUCENE_HOME=cluceneCore; +# patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../qca/CMakeLists.txt"; +#} diff --git a/pkgs/desktops/kde-4/support/eigen.nix b/pkgs/desktops/kde-4/support/eigen.nix new file mode 100644 index 000000000000..a3ac9eff3910 --- /dev/null +++ b/pkgs/desktops/kde-4/support/eigen.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "eigen-1.0.5"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/eigen; + rev = 732646; + md5 = "f91ad5d3dd992984fb61107fd9050a36"; + }; + + buildInputs = [ cmake ]; +} diff --git a/pkgs/desktops/kde-4/support/gmm.nix b/pkgs/desktops/kde-4/support/gmm.nix new file mode 100644 index 000000000000..d32c9b9f765e --- /dev/null +++ b/pkgs/desktops/kde-4/support/gmm.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "gmm-svn"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/gmm; + rev = 732646; + md5 = "09ee4cfcbb3c428bc681c2da022648bf"; + }; + + buildInputs = [ cmake ]; +} diff --git a/pkgs/desktops/kde-4/support/qca.nix b/pkgs/desktops/kde-4/support/qca.nix new file mode 100644 index 000000000000..64b00da91ce7 --- /dev/null +++ b/pkgs/desktops/kde-4/support/qca.nix @@ -0,0 +1,15 @@ +args: with args; + +stdenv.mkDerivation { + name = "qca-2.0.0dev"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qca; + rev = 732646; + md5 = "1df54bf3bf327b14ea1948f9080717c3"; + }; + + buildInputs = [ cmake qt openssl gettext cyrus_sasl libgcrypt gnupg ]; + + patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../CMakeLists.txt"; +} diff --git a/pkgs/desktops/kde-4/support/qimageblitz.nix b/pkgs/desktops/kde-4/support/qimageblitz.nix new file mode 100644 index 000000000000..fe6a03ca7c78 --- /dev/null +++ b/pkgs/desktops/kde-4/support/qimageblitz.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "qimageblitz-4.0.0svn"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qimageblitz; + rev = 732646; + md5 = "c37fa505368071ec501e966225e30c78"; + }; + + buildInputs = [cmake qt]; +} diff --git a/pkgs/desktops/kde-4/support/soprano.nix b/pkgs/desktops/kde-4/support/soprano.nix new file mode 100644 index 000000000000..0f453d726d77 --- /dev/null +++ b/pkgs/desktops/kde-4/support/soprano.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation { + name = "soprano-1.9.0svn"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/soprano; + rev = 732646; + md5 = "c3b43544536f0f8061e4afeb9e368072"; + }; + + CLUCENE_HOME=cluceneCore; + buildInputs = [ cmake qt cluceneCore redland ]; +} diff --git a/pkgs/desktops/kde-4/support/strigi.nix b/pkgs/desktops/kde-4/support/strigi.nix new file mode 100644 index 000000000000..f0e0fe614be9 --- /dev/null +++ b/pkgs/desktops/kde-4/support/strigi.nix @@ -0,0 +1,15 @@ +args: with args; + +stdenv.mkDerivation { + name = "strigi-svn"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/strigi; + rev = 732646; + md5 = "15762f5a406ef84bc1cdd776b2ca9a82"; + }; + + CLUCENE_HOME=cluceneCore; + buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus + log4cxx stdenv.gcc.libc exiv2 bison cppunit perl ]; +} diff --git a/pkgs/desktops/kde-4/support/taglib.nix b/pkgs/desktops/kde-4/support/taglib.nix new file mode 100644 index 000000000000..6aecb7a91ef2 --- /dev/null +++ b/pkgs/desktops/kde-4/support/taglib.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "taglib-1.4svn"; + + src = fetchsvn { + url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib; + rev = 732646; + md5 = "647d68a76858cf3a667656c486b0a8c2"; + }; + + buildInputs = [ cmake zlib ]; +} diff --git a/pkgs/desktops/kde-4/toys/default.nix b/pkgs/desktops/kde-4/toys/default.nix new file mode 100644 index 000000000000..19c08c4891bc --- /dev/null +++ b/pkgs/desktops/kde-4/toys/default.nix @@ -0,0 +1,12 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdetoys-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdetoys-3.95.0.tar.bz2; + sha256 = "0qg9ns640v21sa837pg5basnw8clnkyxap2lm7s69ainsg69662v"; + }; + + buildInputs = [kdelibs kdepimlibs kdeworkspace]; +} diff --git a/pkgs/desktops/kde-4/utils/default.nix b/pkgs/desktops/kde-4/utils/default.nix new file mode 100644 index 000000000000..cee61c0e4cdf --- /dev/null +++ b/pkgs/desktops/kde-4/utils/default.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdeutils-4.0beta4"; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdeutils-3.95.0.tar.bz2; + sha256 = "1b8jvdy83qwhnfwqxzx96bxnaxss25psazifymyb0z4ynkqmadlh"; + }; + + buildInputs = [kdelibs kdepimlibs kdeworkspace gmp libzip python ]; +# TODO : tpctl +} diff --git a/pkgs/desktops/kde-4/workspace/builder.sh b/pkgs/desktops/kde-4/workspace/builder.sh new file mode 100755 index 000000000000..648d6175f35a --- /dev/null +++ b/pkgs/desktops/kde-4/workspace/builder.sh @@ -0,0 +1,12 @@ +source ${stdenv}/setup + +myPatchPhase() +{ + echo "Fixing dbus calls in CMakeLists.txt files" +# Trailing slash in sed is essential + find .. -name CMakeLists.txt \ + | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i + sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../kcontrol/randr/randr.h +} +patchPhase=myPatchPhase +genericBuild diff --git a/pkgs/desktops/kde-4/workspace/default.nix b/pkgs/desktops/kde-4/workspace/default.nix new file mode 100644 index 000000000000..829393f67e9f --- /dev/null +++ b/pkgs/desktops/kde-4/workspace/default.nix @@ -0,0 +1,15 @@ +args: with args; + +stdenv.mkDerivation { + name = "kdebase-workspace-4.0beta4"; + builder = ./builder.sh; + + src = fetchurl { + url = mirror://kde/unstable/3.95/src/kdebase-workspace-3.95.0.tar.bz2; + sha256 = "0jripmw8vgs7lxlsif552rr9vqps5kav8jdlfyhmr9c3xw5c99v0"; + }; + + buildInputs = [kdelibs kdepimlibs kdebase kderuntime stdenv.gcc.libc]; + inherit kdelibs; +} + diff --git a/pkgs/development/compilers/gcc-3.4/builder.sh b/pkgs/development/compilers/gcc-3.4/builder.sh index 5a89201377d6..eb1f211dce8f 100644 --- a/pkgs/development/compilers/gcc-3.4/builder.sh +++ b/pkgs/development/compilers/gcc-3.4/builder.sh @@ -37,22 +37,10 @@ fi preConfigure=preConfigure preConfigure() { - - # Determine the frontends to build. - langs="c" - if test -n "$langCC"; then - langs="$langs,c++" - fi - if test -n "$langF77"; then - langs="$langs,f77" - fi - # Perform the build in a different directory. mkdir ../build cd ../build - configureScript=../$sourceRoot/configure - configureFlags="--enable-languages=$langs $configureFlags" } diff --git a/pkgs/development/compilers/gcc-3.4/default.nix b/pkgs/development/compilers/gcc-3.4/default.nix index 4cb834304e3e..de7f079b2d90 100644 --- a/pkgs/development/compilers/gcc-3.4/default.nix +++ b/pkgs/development/compilers/gcc-3.4/default.nix @@ -5,6 +5,8 @@ assert langC; +with import ../../../lib; + stdenv.mkDerivation { name = "gcc-3.4.6"; builder = ./builder.sh; @@ -15,7 +17,22 @@ stdenv.mkDerivation { patches = if noSysDirs then [./no-sys-dirs.patch] else []; - inherit noSysDirs langC langCC langF77 profiledCompiler; + inherit noSysDirs profiledCompiler; + + configureFlags = " + --disable-multilib + --with-system-zlib + --enable-languages=${ + concatStrings (intersperse "," + ( optional langC "c" + ++ optional langCC "c++" + ++ optional langF77 "f77" + ) + ) + } + "; + + passthru = { inherit langC langCC langF77; }; meta = { homepage = "http://gcc.gnu.org/"; diff --git a/pkgs/development/compilers/ocaml/ocaml-3.08.0.nix b/pkgs/development/compilers/ocaml/3.08.0.nix similarity index 94% rename from pkgs/development/compilers/ocaml/ocaml-3.08.0.nix rename to pkgs/development/compilers/ocaml/3.08.0.nix index d063fead4a53..6d4b4ca616ce 100644 --- a/pkgs/development/compilers/ocaml/ocaml-3.08.0.nix +++ b/pkgs/development/compilers/ocaml/3.08.0.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, x11}: +args: with args; stdenv.mkDerivation { name = "ocaml-3.08.0"; diff --git a/pkgs/development/compilers/ocaml/ocaml-3.09.1.nix b/pkgs/development/compilers/ocaml/3.09.1.nix similarity index 92% rename from pkgs/development/compilers/ocaml/ocaml-3.09.1.nix rename to pkgs/development/compilers/ocaml/3.09.1.nix index 996012d6b277..6e9922ccc366 100644 --- a/pkgs/development/compilers/ocaml/ocaml-3.09.1.nix +++ b/pkgs/development/compilers/ocaml/3.09.1.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, x11, ncurses}: +args: with args; stdenv.mkDerivation { name = "ocaml-3.09.1"; diff --git a/pkgs/development/compilers/ocaml/3.10.0.nix b/pkgs/development/compilers/ocaml/3.10.0.nix new file mode 100644 index 000000000000..a26175755b5b --- /dev/null +++ b/pkgs/development/compilers/ocaml/3.10.0.nix @@ -0,0 +1,23 @@ +args: with args; +stdenv.mkDerivation rec { + name = "ocaml-3.10.0"; + src = fetchurl { + url = "http://caml.inria.fr/pub/distrib/ocaml-3.10/${name}.tar.bz2"; + sha256 = "1ihmx1civ78s7k2hfc05z1s9vbyx2qw7fg8lnbxnfd6zxkk8878d"; + }; + prefixKey = "-prefix "; + configureFlags = ["-no-tk" "-x11lib" x11]; + buildFlags = "world bootstrap world.opt"; + buildInputs = [x11 ncurses]; + installTargets = "install installopt"; + patchPhase = " + CAT=$(type -tp cat) + sed -e \"s@/bin/cat@\${CAT}@\" -i config/auto-aux/sharpbang + "; + + meta = { + homepage = http://caml.inria.fr/ocaml; + license = "QPL, LGPL2 (library part)"; + desctiption = "Most popular variant of the Caml language"; + }; +} diff --git a/pkgs/development/compilers/ocaml/default.nix b/pkgs/development/compilers/ocaml/default.nix index 44603f957647..74d1378968cf 100644 --- a/pkgs/development/compilers/ocaml/default.nix +++ b/pkgs/development/compilers/ocaml/default.nix @@ -1 +1,7 @@ -import ./ocaml-3.09.1.nix +args: +rec { + default = v_3_09_1; + v_3_08_0 = import ./3.08.0.nix (args // {stdenv = args.stdenv34;}); + v_3_09_1 = import ./3.09.1.nix args; + v_3_10_0 = import ./3.10.0.nix (args // {stdenv = args.stdenvUsingSetupNew2;}); +} diff --git a/pkgs/development/interpreters/perl/setup-hook.sh b/pkgs/development/interpreters/perl/setup-hook.sh index 6903bddd4199..1f05581df97a 100644 --- a/pkgs/development/interpreters/perl/setup-hook.sh +++ b/pkgs/development/interpreters/perl/setup-hook.sh @@ -1,5 +1,7 @@ addPerlLibPath () { - addToSearchPath PERL5LIB /lib/site_perl "" $1 + if test -d $1/lib/site_perl; then + export PERL5LIB="${PERL5LIB}${PERL5LIB:+:}$1/lib/site_perl" + fi } envHooks=(${envHooks[@]} addPerlLibPath) diff --git a/pkgs/development/interpreters/python/2.4.nix b/pkgs/development/interpreters/python/2.4.nix new file mode 100644 index 000000000000..726d2ac4aa96 --- /dev/null +++ b/pkgs/development/interpreters/python/2.4.nix @@ -0,0 +1,52 @@ +{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.4"; + + src = fetchurl { + url = http://www.python.org/ftp/python/2.4.4/Python-2.4.4.tar.bz2; + md5 = "0ba90c79175c017101100ebf5978e906"; + }; + + 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 + "; + + postInstall = " + ensureDir $out/nix-support + cp ${./setup-hook.sh} $out/nix-support/setup-hook + rm -rf $out/lib/python2.4/test + "; + + passthru = { + inherit zlibSupport; + libPrefix = "python2.4"; + }; +} diff --git a/pkgs/development/interpreters/python/2.5/setup-hook.sh b/pkgs/development/interpreters/python/2.5/setup-hook.sh index 27ad62260301..11551235c1f8 100644 --- a/pkgs/development/interpreters/python/2.5/setup-hook.sh +++ b/pkgs/development/interpreters/python/2.5/setup-hook.sh @@ -1,5 +1,8 @@ addPythonPath() { - addToSearchPathWithCustomDelimiter : PYTHONPATH /lib/python2.5/site-packages "" $1 + local p=$1/lib/python2.5/site-packages + if test -d $p; then + export PYTHONPATH="${PYTHONPATH}${PYTHONPATH:+:}$p" + fi } toPythonPath() { diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 726d2ac4aa96..3ac782e1aee3 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -1,52 +1,5 @@ -{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.4"; - - src = fetchurl { - url = http://www.python.org/ftp/python/2.4.4/Python-2.4.4.tar.bz2; - md5 = "0ba90c79175c017101100ebf5978e906"; - }; - - 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 - "; - - postInstall = " - ensureDir $out/nix-support - cp ${./setup-hook.sh} $out/nix-support/setup-hook - rm -rf $out/lib/python2.4/test - "; - - passthru = { - inherit zlibSupport; - libPrefix = "python2.4"; - }; +args: rec { + default = v_2_4; + v_2_4 = import ./2.4.nix args; + v_2_5 = import ./2.5 args; } diff --git a/pkgs/development/interpreters/python/setup-hook.sh b/pkgs/development/interpreters/python/setup-hook.sh index 58b8d1cab760..3bc86c582298 100644 --- a/pkgs/development/interpreters/python/setup-hook.sh +++ b/pkgs/development/interpreters/python/setup-hook.sh @@ -1,5 +1,8 @@ addPythonPath() { - addToSearchPathWithCustomDelimiter : PYTHONPATH /lib/python2.4/site-packages "" $1 + local p=$1/lib/python2.4/site-packages + if test -d $p; then + export PYTHONPATH="${PYTHONPATH}${PYTHONPATH:+:}$p" + fi } toPythonPath() { diff --git a/pkgs/development/libraries/chmlib/builder.sh b/pkgs/development/libraries/chmlib/builder.sh deleted file mode 100644 index ccdbfc17a767..000000000000 --- a/pkgs/development/libraries/chmlib/builder.sh +++ /dev/null @@ -1,19 +0,0 @@ -source $stdenv/setup - -unpackCmd="tar xvfj $src" - -makeFlags="-f Makefile.simple CC=gcc LD=gcc INSTALLPREFIX=$out" - -postConfigure=postConfigure -postConfigure() { - cd src -} - -preInstall=preInstall -preInstall() { - mkdir $out - mkdir $out/lib - mkdir $out/include -} - -genericBuild \ No newline at end of file diff --git a/pkgs/development/libraries/chmlib/default.nix b/pkgs/development/libraries/chmlib/default.nix index 096f2e0e2295..bd593aaea0a5 100644 --- a/pkgs/development/libraries/chmlib/default.nix +++ b/pkgs/development/libraries/chmlib/default.nix @@ -1,9 +1,16 @@ -{stdenv, fetchurl}: +args: with args; -stdenv.mkDerivation { - name = "chmlib-0.38"; +stdenv.mkDerivation rec { + name = "chmlib-0.39"; src = fetchurl { - url = http://66.93.236.84/~jedwin/projects/chmlib/chmlib-0.38.tar.bz2; - md5 = "d72661526aaea377ed30e9f58a086964"; + url = "${meta.homepage}/${name}.tar.bz2"; + sha256 = "0hgzw121ffmk79wbpkd0394y5ah99c3i85z6scp958mmkr25sc6j"; + }; + + meta = { + homepage = http://www.jedrea.com/chmlib; + license = "LGPL"; + description = "CHLIB is a library for dealing with Microsoft ITSS/CHM + format files"; }; } diff --git a/pkgs/development/libraries/clucene-contrib/default.nix b/pkgs/development/libraries/clucene-contrib/default.nix deleted file mode 100644 index 8938256dec46..000000000000 --- a/pkgs/development/libraries/clucene-contrib/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ stdenv, fetchurl, cluceneCore}: - -stdenv.mkDerivation { - name = "clucene-contrib-0.9.16a"; - - src = fetchurl { - url = ftp://ftp.chg.ru/pub/sourceforge/c/cl/clucene/clucene-contrib-0.9.16a.tar.bz2; - sha256 = "1apk867pggxsflhgvsnhcmy5vz2cvc1b914g4inkcj6s5vn1a1jx"; - }; - inherit cluceneCore; - buildInputs=[cluceneCore]; - configureFlags = "--disable-static --with-clucene=${cluceneCore}"; - - meta = { - description = "CLucene is a port of the very popular Java Lucene text search engine API. Contrib package."; - homepage = http://clucene.sourceforge.net; - }; -} diff --git a/pkgs/development/libraries/clucene-core/default.nix b/pkgs/development/libraries/clucene-core/default.nix index 3d5734d6c2d5..24e133a5de3c 100644 --- a/pkgs/development/libraries/clucene-core/default.nix +++ b/pkgs/development/libraries/clucene-core/default.nix @@ -1,16 +1,15 @@ -{ stdenv, fetchurl }: +args: with args; +stdenv.mkDerivation rec { + name = "clucene-core-0.9.20"; -stdenv.mkDerivation { - name = "clucene-core-0.9.16a"; + src = fetchurl { + url = "mirror://sf/clucene/${name}.tar.bz2"; + sha256 = "1hwq3b4qp1dgygmypgpg3blj68wnksq2rbqkwyxvl5dldn12q7rg"; + }; + configureFlags = "--disable-static"; - src = fetchurl { - url = ftp://ftp.chg.ru/pub/sourceforge/c/cl/clucene/clucene-core-0.9.16a.tar.bz2; - sha256 = "0hv7sp1lbicnj2984hiki8qwrvz5zwn1zhj6azhavgjklanhihjr"; - }; - - meta = { - description = "CLucene is a port of the very popular Java Lucene text search engine API. Core package."; - homepage = http://clucene.sourceforge.net; - }; - configureFlags = "--disable-static"; + meta = { + description = "CLucene is a port of the very popular Java Lucene text search engine API. Core package."; + homepage = http://clucene.sourceforge.net; + }; } diff --git a/pkgs/development/libraries/dbus-glib/default.nix b/pkgs/development/libraries/dbus-glib/default.nix index fb206f9a6f66..e72ca406509d 100644 --- a/pkgs/development/libraries/dbus-glib/default.nix +++ b/pkgs/development/libraries/dbus-glib/default.nix @@ -1,12 +1,18 @@ -{stdenv, fetchurl, pkgconfig, gettext, dbus, glib, expat}: +args: with args; stdenv.mkDerivation { - name = "dbus-glib-0.73"; + name = "dbus-glib-0.74"; src = fetchurl { - url = http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.73.tar.gz; - sha256 = "14ndjhbn6q4m7wrml8s57wghnjbm6a6fqb5jgazjxcn6748gkmyn"; + url = http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.74.tar.gz; + sha256 = "1qmbnd9xgg7vahlfywd8sfd9yqhx8jdyczz3cshfsd4qc76xhw78"; }; inherit dbus glib; buildInputs = [pkgconfig gettext glib expat]; propagatedBuildInputs = [dbus]; + + meta = { + homepage = http://dbus.freedesktop.org; + license = "AFL-2.1 or GPL-2"; + description = "GLib bindings for D-Bus lightweight IPC mechanism"; + }; } diff --git a/pkgs/development/libraries/facile/default.nix b/pkgs/development/libraries/facile/default.nix new file mode 100644 index 000000000000..1890c6d0563c --- /dev/null +++ b/pkgs/development/libraries/facile/default.nix @@ -0,0 +1,19 @@ +args: with args; +stdenv.mkDerivation rec { + name = "facile-1.1"; + src = fetchurl { + url = "${meta.homepage}/distrib/${name}.tar.gz"; + sha256 = "1jp59ankjds8mh4vm0b5h4fd1lcbfn0rd6n151cgh14ihsknnym8"; + }; + dontAddPrefix = 1; + patchPhase = "sed -e 's@mkdir@mkdir -p@' -i Makefile"; + postConfigure = "make -C src .depend"; + makeFlags = "FACILEDIR=\${out}/lib/ocaml/facile"; + buildInputs = [ocaml]; + + meta = { + homepage = http://www.recherche.enac.fr/log/facile; + license = "LGPL"; + description = "A Functional Constraint Library"; + }; +} diff --git a/pkgs/development/libraries/haskell/gtk2hs/default.nix b/pkgs/development/libraries/haskell/gtk2hs/default.nix new file mode 100644 index 000000000000..f4e3a02c73f8 --- /dev/null +++ b/pkgs/development/libraries/haskell/gtk2hs/default.nix @@ -0,0 +1,18 @@ +{stdenv, fetchurl, pkgconfig, ghc, gtk, cairo, GConf, libglade +, glib, libgtkhtml, gtkhtml}: + +stdenv.mkDerivation { + name = "gtk2hs-0.9.12.1"; + src = fetchurl { + url = mirror://sourceforge/gtk2hs/gtk2hs-0.9.12.1.tar.gz; + sha256 = "110z6v9gzhg6nzlz5gs8aafmipbva6rc50b8z1jgq0k2g25hfy22"; + }; + + buildInputs = [pkgconfig ghc gtk glib cairo GConf libglade libgtkhtml gtkhtml]; + + configureFlags = [ + "--enable-cairo" + ]; + + +} diff --git a/pkgs/development/libraries/libexif/default.nix b/pkgs/development/libraries/libexif/default.nix index 0a63ffda2afc..76434d2c30bd 100644 --- a/pkgs/development/libraries/libexif/default.nix +++ b/pkgs/development/libraries/libexif/default.nix @@ -1,12 +1,12 @@ -{stdenv, fetchurl}: +args: with args; -stdenv.mkDerivation { - name = "libexif-0.6.14"; +stdenv.mkDerivation rec { + name = "libexif-0.6.16"; src = fetchurl { - url = mirror://sourceforge/libexif/libexif-0.6.14.tar.bz2; - sha256 = "0pza5ysvbvvliz7al2i8l3yai64w09xwc6ivy2v5cl7k43almz84"; + url = "mirror://sourceforge/libexif/${name}.tar.bz2"; + sha256 = "0hxc3aik3sn8xq4mbmxxb8ycx2lwffmhi5xvz0zjffhfwkaqas6v"; }; - patches = [./no-po.patch]; + buildInputs = [gettext]; } diff --git a/pkgs/development/libraries/libgcrypt/default.nix b/pkgs/development/libraries/libgcrypt/default.nix index bb71e8f8499c..8ea05dc73a32 100644 --- a/pkgs/development/libraries/libgcrypt/default.nix +++ b/pkgs/development/libraries/libgcrypt/default.nix @@ -1,10 +1,13 @@ -{stdenv, fetchurl, libgpgerror}: +args: with args; stdenv.mkDerivation { - name = "libgcrypt-1.2.4"; + name = "libgcrypt-1.3.1"; src = fetchurl { - url = ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.2.4.tar.gz; - sha256 = "1v6rbx2jpwvh9jwf8n91da2p66v2gzmym6s3h1fidfdy7qqkyg6g"; + urls = [ + ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.3.1.tar.bz2 + ftp://ftp.gnupg.org/gcrypt/alpha/libgcrypt/libgcrypt-1.3.1.tar.bz2 + ]; + sha256 = "0ip0bjhnn12lvb050j91x64wfhmpk7xlc3p93mxi9g2qczg413nz"; }; buildInputs = [libgpgerror]; diff --git a/pkgs/development/libraries/libgphoto2/default.nix b/pkgs/development/libraries/libgphoto2/default.nix index 78372330a94f..6e332117a2db 100644 --- a/pkgs/development/libraries/libgphoto2/default.nix +++ b/pkgs/development/libraries/libgphoto2/default.nix @@ -1,14 +1,15 @@ -{stdenv, fetchurl, pkgconfig, libusb}: +args: with args; -stdenv.mkDerivation { - name = "libgphoto2-2.2.1"; +stdenv.mkDerivation rec { + name = "libgphoto2-2.4.0"; src = fetchurl { - url = mirror://sourceforge/gphoto/libgphoto2-2.2.1.tar.bz2; - md5 = "69827311733e39fafa9f77bb05e55b77"; + url = "mirror://sourceforge/gphoto/${name}.tar.bz2"; + sha256 = "0yfvpgfly774jnjrfqjf89h99az3sgvzkfpb9diygpk8hmx6phhd"; }; - buildInputs = [pkgconfig libusb]; + buildInputs = [pkgconfig libusb libtool libexif libjpeg gettext]; - ## remove this patch when 2.2.2 is released - patches = [./libgphoto2-2.2.1.patch]; + meta = { + license = "LGPL-2"; + }; } diff --git a/pkgs/development/libraries/libgsf/default.nix b/pkgs/development/libraries/libgsf/default.nix index 41f946e6606c..6131314a22cd 100644 --- a/pkgs/development/libraries/libgsf/default.nix +++ b/pkgs/development/libraries/libgsf/default.nix @@ -1,10 +1,17 @@ -{stdenv, fetchurl, perl, perlXMLParser, pkgconfig, libxml2, glib, gettext}: +args: with args; -stdenv.mkDerivation { - name = "libgsf-1.14.1"; +stdenv.mkDerivation rec { + name = "libgsf-1.14.7"; src = fetchurl { - url = http://ftp.gnome.org/pub/gnome/sources/libgsf/1.14/libgsf-1.14.1.tar.bz2; - md5 = "00de00b99382d0b7e034e0fffd8951d4"; + url = "http://ftp.gnome.org/pub/gnome/sources/libgsf/1.14/${name}.tar.bz2"; + sha256 = "0vd8arjaavb3qywd9cm2gdn6ngrlyd99nlsj72par8fm60k48bhq"; + }; + buildInputs = [perl perlXMLParser pkgconfig libxml2 glib gettext bzip2 + gnomevfs libbonobo python]; + + meta = { + homepage = http://www.gnome.org/projects/libgsf; + license = "LGPL"; + description = "GNOME Structured File Library"; }; - buildInputs = [perl perlXMLParser pkgconfig libxml2 glib gettext]; } diff --git a/pkgs/development/libraries/libnotify/default.nix b/pkgs/development/libraries/libnotify/default.nix new file mode 100644 index 000000000000..42747db95a1b --- /dev/null +++ b/pkgs/development/libraries/libnotify/default.nix @@ -0,0 +1,20 @@ +{ stdenv, fetchurl +, pkgconfig, dbus, dbus_glib +, gtk, glib +}: + +stdenv.mkDerivation { + name = "libnotify-0.4.4"; + #builder = ./builder.sh; + + src = fetchurl { + url = http://www.galago-project.org/files/releases/source/libnotify/libnotify-0.4.4.tar.gz; + sha256 = "2389a9b8220f776033f728a8d46352cfee5c8705066e34887bfb188f9f0d3856"; + }; + + buildInputs = [ + pkgconfig dbus dbus_glib gtk glib + ]; + + configureFlags=""; +} diff --git a/pkgs/development/libraries/libsexy/default.nix b/pkgs/development/libraries/libsexy/default.nix new file mode 100644 index 000000000000..81a38d399735 --- /dev/null +++ b/pkgs/development/libraries/libsexy/default.nix @@ -0,0 +1,17 @@ +{ stdenv, fetchurl, pkgconfig, libxml2, glib, gtk, pango +}: + +stdenv.mkDerivation { + name = "libsexy-0.1.11"; + #builder = ./builder.sh; + + src = fetchurl { + url = http://releases.chipx86.com/libsexy/libsexy/libsexy-0.1.11.tar.gz; + sha256 = "8c4101a8cda5fccbba85ba1a15f46f2cf75deaa8b3c525ce5b135b9e1a8fe49e"; + }; + + buildInputs = [ pkgconfig libxml2 glib gtk pango + ]; + + #configureFlags=""; +} diff --git a/pkgs/development/libraries/libwpd/default.nix b/pkgs/development/libraries/libwpd/default.nix index 13723fdeb85d..630eb44753bb 100644 --- a/pkgs/development/libraries/libwpd/default.nix +++ b/pkgs/development/libraries/libwpd/default.nix @@ -1,10 +1,9 @@ -{stdenv, fetchurl, pkgconfig, glib, libgsf, libxml2}: - +args: with args; stdenv.mkDerivation { name = "libwpd-0.8.5"; src = fetchurl { url = mirror://sourceforge/libwpd/libwpd-0.8.5.tar.gz; md5 = "6b679e205a2805c3d23f41c65b35e266"; }; - buildInputs = [pkgconfig glib libgsf libxml2]; + buildInputs = [pkgconfig glib libgsf libxml2 bzip2]; } diff --git a/pkgs/development/libraries/openssl/default.nix b/pkgs/development/libraries/openssl/default.nix index e1dbc274aeda..a4f09612f9b5 100644 --- a/pkgs/development/libraries/openssl/default.nix +++ b/pkgs/development/libraries/openssl/default.nix @@ -1,4 +1,4 @@ -args: with args; stdenv.mkDerivation { +{stdenv, fetchurl, perl}: stdenv.mkDerivation { name = "openssl-0.9.8g"; builder = ./builder.sh; src = fetchurl { @@ -6,5 +6,4 @@ args: with args; stdenv.mkDerivation { sha256 = "1w0wj3pgg9ga0hay3jdxs9sl17bfw307b6qvkxn735fy8ml8h9hf"; }; buildInputs = [perl]; - propagatedBuildInputs = [gmp]; } diff --git a/pkgs/development/libraries/strigi/default.nix b/pkgs/development/libraries/strigi/default.nix deleted file mode 100644 index 85f21652b53a..000000000000 --- a/pkgs/development/libraries/strigi/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ stdenv, fetchurl, zlib, bzip2, expat, pkgconfig, cluceneCore, cluceneContrib, -qt, cmake, dbus, libxml2, perl }: - -stdenv.mkDerivation { - name = "strigi-0.5.3dev"; - - src = fetchurl { - url = http://repo.calcforge.org/f8/strigi-0.5.3.tar.bz2; - sha256 = "0rv7l2s4r022hrsw3jw0pvxh0yzlaw53jhmjxi3cbi6mdvc1y2sv"; - }; - - patchPhase="sed -e 's/ iconv / /' -i ../cmake/FindIconv.cmake; - export CLUCENE_HOME=${cluceneCore}"; - buildInputs = [zlib cluceneCore cluceneContrib expat bzip2 pkgconfig qt cmake - stdenv.gcc.libc dbus libxml2 perl]; - - meta = { - description = "Strigi is a fast and light desktop search engine"; - }; -} diff --git a/pkgs/development/libraries/xine-lib/default.nix b/pkgs/development/libraries/xine-lib/default.nix index 191fa13c0ce0..738b21741b5d 100644 --- a/pkgs/development/libraries/xine-lib/default.nix +++ b/pkgs/development/libraries/xine-lib/default.nix @@ -12,11 +12,11 @@ assert encryptedDVDSupport -> libdvdcss != null; assert alsaSupport -> alsaLib != null; (stdenv.mkDerivation { - name = "xine-lib-1.1.7"; + name = "xine-lib-1.1.8"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/xine/xine-lib-1.1.7.tar.bz2; - sha256 = "1aycmhvq95gbb5mqw5skgcxyn4nh5qkzq21yclnqk5yzflpwwvvg"; + url = mirror://sourceforge/xine/xine-lib-1.1.8.tar.bz2; + sha256 = "03iwhgsf9kj0x5b4fgv7lzc1vj3frk4afh2idgrqskvixjyi37vc"; }; buildInputs = [ x11 diff --git a/pkgs/development/tools/build-managers/cmake/setup-hook.sh b/pkgs/development/tools/build-managers/cmake/setup-hook.sh index 4712ef2b6483..f65b09f88d4a 100755 --- a/pkgs/development/tools/build-managers/cmake/setup-hook.sh +++ b/pkgs/development/tools/build-managers/cmake/setup-hook.sh @@ -1,16 +1,15 @@ addCMakeParamsInclude() { - addToSearchPath CMAKE_INCLUDE_PATH /include "" $1 + if [ -d $1/include ]; then + export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH}${CMAKE_INCLUDE_PATH:+:}$1/include" + fi } addCMakeParamsLibs() { - addToSearchPath CMAKE_LIBRARY_PATH /lib "" $1 -} - -addCMakeModulePath() -{ - addToSearchPath CMAKE_MODULE_PATH /share/cmake-2.4/Modules "" $1 + if [ -d $1/lib ]; then + export CMAKE_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}${CMAKE_LIBRARY_PATH:+:}$1/lib" + fi } fixCmakeFiles() @@ -46,4 +45,4 @@ if [ -z "$noCmakeTewaks" ]; then postUnpack="cmakePostUnpack${postUnpack:+; }${postUnpack}" fi; -envHooks=(${envHooks[@]} addCMakeParamsInclude addCMakeParamsLibs addCMakeModulePath) +envHooks=(${envHooks[@]} addCMakeParamsInclude addCMakeParamsLibs) diff --git a/pkgs/development/tools/misc/automake/setup-hook.sh b/pkgs/development/tools/misc/automake/setup-hook.sh index 4489d343510d..097b7b6cbe57 100644 --- a/pkgs/development/tools/misc/automake/setup-hook.sh +++ b/pkgs/development/tools/misc/automake/setup-hook.sh @@ -1,5 +1,7 @@ addAclocals () { - addToSearchPathWithCustomDelimiter : ACLOCAL_PATH /share/aclocal "" $1 + if test -d $1/share/aclocal; then + export ACLOCAL_PATH="$ACLOCAL_PATH${ACLOCAL_PATH:+:}$1/share/aclocal" + fi } envHooks=(${envHooks[@]} addAclocals) diff --git a/pkgs/development/tools/misc/gdb/default.nix b/pkgs/development/tools/misc/gdb/default.nix index e914391ea2f1..c9a47a953efc 100644 --- a/pkgs/development/tools/misc/gdb/default.nix +++ b/pkgs/development/tools/misc/gdb/default.nix @@ -1,10 +1,10 @@ -{stdenv, fetchurl, ncurses}: +args: with args; -stdenv.mkDerivation { - name = "gdb-6.6"; +stdenv.mkDerivation rec { + name = "gdb-6.7.1"; src = fetchurl { - url = http://ftp.gnu.org/gnu/gdb/gdb-6.6.tar.bz2; - md5 = "a4df41d28dd514d64e8ccbfe125fd9a6"; + url = "mirror://gnu/gdb/${name}.tar.bz2"; + sha256 = "0qig8j8hcqpqfhnnp685rzgj8v88bw2fc5igvbiiqkqg88wfr37r"; }; buildInputs = [ncurses]; } diff --git a/pkgs/development/tools/misc/pkgconfig/builder.sh b/pkgs/development/tools/misc/pkgconfig/builder.sh new file mode 100644 index 000000000000..6d281da71e4d --- /dev/null +++ b/pkgs/development/tools/misc/pkgconfig/builder.sh @@ -0,0 +1,10 @@ +source $stdenv/setup + +postInstall() { + test -x $out/nix-support || mkdir $out/nix-support + cp $setupHook $out/nix-support/setup-hook +} +postInstall=postInstall + +genericBuild + diff --git a/pkgs/development/tools/misc/pkgconfig/default.nix b/pkgs/development/tools/misc/pkgconfig/default.nix index 481d2174ebc1..be8c4febe03a 100644 --- a/pkgs/development/tools/misc/pkgconfig/default.nix +++ b/pkgs/development/tools/misc/pkgconfig/default.nix @@ -1,18 +1,14 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "pkgconfig-0.22"; + name = "pkgconfig-0.21"; + builder = ./builder.sh; setupHook = ./setup-hook.sh; src = fetchurl { - url = http://pkgconfig.freedesktop.org/releases/pkg-config-0.22.tar.gz; - sha256 = "1rpb5wygmp0f8nal7y3ga4556i7hkjdslv3wdq04fj30gns621vy"; + url = http://nix.cs.uu.nl/dist/tarballs/pkg-config-0.21.tar.gz; + md5 = "476f45fab1504aac6697aa7785f0ab91"; }; - postInstall = " - ensureDir \$out/nix-support - cp \$setupHook \$out/nix-support/setup-hook - "; - patches = [ # Process Requires.private properly, see # http://bugs.freedesktop.org/show_bug.cgi?id=4738. diff --git a/pkgs/development/tools/misc/pkgconfig/setup-hook.sh b/pkgs/development/tools/misc/pkgconfig/setup-hook.sh index f13a44eb9995..f9e7805ccbf7 100644 --- a/pkgs/development/tools/misc/pkgconfig/setup-hook.sh +++ b/pkgs/development/tools/misc/pkgconfig/setup-hook.sh @@ -1,5 +1,7 @@ addPkgConfigPath () { - addToSearchPath PKG_CONFIG_PATH /lib/pkgconfig "" $1 + if test -d $1/lib/pkgconfig; then + export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$1/lib/pkgconfig" + fi } envHooks=(${envHooks[@]} addPkgConfigPath) diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 33b7b3d6c9e5..ce4fbf12cf46 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -244,4 +244,8 @@ rec { (l + (if l=="" then "" else ".") + s) (builtins.getAttr s attrs))) (builtins.attrNames attrs))))); + innerModifySumArgs = f: x: a: b: if b == null then (f a b) // x else + innerModifySumArgs f x (a // b); + modifySumArgs = f: x: innerModifySumArgs f x {}; + } diff --git a/pkgs/servers/monitoring/nagios/plugins/official/default.nix b/pkgs/servers/monitoring/nagios/plugins/official/default.nix index d415e833742b..29eb7bbb7a08 100644 --- a/pkgs/servers/monitoring/nagios/plugins/official/default.nix +++ b/pkgs/servers/monitoring/nagios/plugins/official/default.nix @@ -20,6 +20,8 @@ stdenv.mkDerivation { ) "; + postInstall = "ln -s libexec $out/bin"; + buildInputs = [openssh]; # !!! make openssh a runtime dependency only meta = { diff --git a/pkgs/test/openftd/default.nix b/pkgs/test/openftd/default.nix new file mode 100644 index 000000000000..34cff9ac93f4 --- /dev/null +++ b/pkgs/test/openftd/default.nix @@ -0,0 +1,49 @@ +/* + +Systeemvereisten + +* libz >= 1.1.4 +* glib >= 2.2.0 +* gtk >= 2.2.0 + +Glib 2 is een 'dependancy' van gtk2. Als je gtk2 op je systeem hebt staan dan heb je ongetwijfeld ook glib2 op je systeem. Zie: www.gtk.org voor meer informatie omtrent Glib/gtk2 +Alhoewel FTD4Linux gtk 2.2 als minimumvereiste heeft raden we toch aan om gtk 2.4 te gebruiken. Dit vanwege een bug in gtk versies 2.2.2 t/m 2.2.4. + +* libxml2 >= 2.2.5 +* libxslt >= 1.0.5 + +* mozilla (gecompileerd met gtk2 support) +Mozilla is de opensource browser die is voortgekomen uit het vrijgeven van de netscape navigator source code. Als je mozilla reeds op je systeem hebt staan zou je even moeten nagaan of deze tegen gtk2 is gelinkt. Dit kun je doen met behulp van het programma ldd. +ldd /usr/X11R6/lib/mozilla-gtk2/libgtkembedmoz.so | grep gtk +/usr/X11R6/lib/mozilla-gtk2/libgtkembedmoz.so: +libgtk-x11-2.0.so.200 => /usr/X11R6/lib/libgtk-x11-2.0.so.200 (0x282c3000) +In de output van het ldd programma kun je zien of er inderdaad wordt gelink tegen gtk2. (libgtk-x11-2.0.so.200). +Heb je geen mozilla, maar heb je wel de firebird/firefox variant geinstalleerd staan dan kun je ook met de mozilla compatible onderdelen van firebird/firefox aan de gang. Je hebt hier echter wel de header (development) bestanden bij nodig. Controleer dus even of jouw firebird/firefox installatie hiermee is geleverd. (gtkembedmoz/gtkmozembed.h) Een 'locate gtkmozembed.h' zou hier snel genoeg uitsluitsel over moeten geven. + +* OpenSSL +* LibCURL + +*/ + +{ stdenv, fetchurl +, zlib, libxml2, libxslt, firefox, openssl, curl +, glib, gtk, libgnomeui, libgtkhtml +, pkgconfig, dbus_glib, realCurl, pcre, libsexy, gtkspell, libnotify +}: + +stdenv.mkDerivation { + name = "openftd-0.98.6"; + #builder = ./builder.sh; + + src = fetchurl { + url = http://speeldoos.eweka.nl/~paul/openftd/openftd-1.0.1.tar.bz2; + sha256 = "e0710865f852fdf209949788a1ced65e9ecf82b4eaa0992a7a1dde1511a3b6e7"; + }; + + buildInputs = [ + zlib libxml2 libxslt firefox openssl curl + glib gtk pkgconfig dbus_glib realCurl pcre libsexy libgnomeui gtkspell libnotify libgtkhtml + ]; + + configureFlags="--with-libcurl-libraries=${curl}/lib --with-libcurl-headers=${curl}/include --with-pcre_libraries=${pcre}/lib --with-pcre_headers=${pcre}/include"; +} diff --git a/pkgs/tools/misc/shebangfix/default.nix b/pkgs/tools/misc/shebangfix/default.nix new file mode 100644 index 000000000000..94ecc1e00f7b --- /dev/null +++ b/pkgs/tools/misc/shebangfix/default.nix @@ -0,0 +1,20 @@ +args: +args.stdenv.mkDerivation { + name = "shebangfix-0.0"; + + buildInputs = [args.perl]; + + file = ./shebangfix.pl; + + phases = "buildPhase"; + + buildPhase = " + ensureDir \$out/bin + s=\$out/bin/shebangfix + cp \$file \$s + chmod +x \$s + perl \$s \$s + "; + + meta = { description = "replaces the #!executable with $#!correctpath/executable "; }; +} diff --git a/pkgs/tools/misc/shebangfix/shebangfix.pl b/pkgs/tools/misc/shebangfix/shebangfix.pl new file mode 100644 index 000000000000..53573f8d36dd --- /dev/null +++ b/pkgs/tools/misc/shebangfix/shebangfix.pl @@ -0,0 +1,35 @@ +#!/bin/perl +use warnings; +use strict; + +#usage PATH=< : separated path list> perl file1 file2 + +print "TODO fix space trouble. This script won't work if your paths contain spaces"; + +sub findInPath{ + my $file = shift(@_); + foreach (split(/:/, $ENV{'PATH'})){ + my $f = "$_/$file"; + if (-x "$f"){ + return $f; + } + } + print "unable to find $file in on of ".$ENV{'PATH'}; + exit 1 +} + +foreach (@ARGV) +{ + my $file = $_; + open(FILE, $file); + my $content = do { local $/; }; + + close(FILE); + + (my $name = $content) =~ /^#![^ ]*\/([^ \n\r]*)/; + my $fullpath = ($1 eq 'sh') ? "/bin/sh" : findInPath($1); + $content =~ s/^#![^ \n\r]*/#!$fullpath/; + open(FILE, ">$file"); + print FILE $content; + close($file); +} diff --git a/pkgs/tools/misc/wv/default.nix b/pkgs/tools/misc/wv/default.nix index 141bf91bee0e..1bf88edef2a6 100644 --- a/pkgs/tools/misc/wv/default.nix +++ b/pkgs/tools/misc/wv/default.nix @@ -9,7 +9,7 @@ args.stdenv.mkDerivation { }; buildInputs =(with args; [zlib imagemagick libpng glib - pkgconfig libgsf libxml2]); + pkgconfig libgsf libxml2 bzip2]); meta = { description = " diff --git a/pkgs/tools/package-management/nix/custom.nix b/pkgs/tools/package-management/nix/custom.nix new file mode 100644 index 000000000000..2cff9f53d877 --- /dev/null +++ b/pkgs/tools/package-management/nix/custom.nix @@ -0,0 +1,45 @@ +{ stdenv, fetchurl, aterm, db4, perl, curl, bzip2, openssl ? null +, storeDir ? "/nix/store" +, stateDir ? "/nix/var" +, src +, preConfigure ? "" +, autoconf ? null, automake ? null, libtool ? null +, bison ? null +, flex ? null +, w3m ? null +, docbook5_xsl ? null, libxslt ? null +, docbook5 ? null, docbook_xml_dtd_43 ? null +, configureFlags ? [] +}: + +stdenv.mkDerivation { + name = "nix-custom"; + + inherit src; + + buildInputs = [perl curl openssl] + ++ (if automake != null then [automake] else []) + ++ (if autoconf != null then [autoconf] else []) + ++ (if libtool != null then [libtool] else []) + ++ (if bison != null then [bison] else []) + ++ (if flex != null then [flex] else []) + ++ (if docbook5_xsl != null then [docbook5_xsl] else []) + ++ (if libxslt != null then [libxslt] else []) + ++ (if docbook5 != null then [docbook5] else []) + ++ (if docbook_xml_dtd_43 != null then [docbook_xml_dtd_43] else []) + ++ (if w3m != null then [w3m] else []) + ; + + inherit preConfigure; + + configureFlags = [" + --with-store-dir=${storeDir} --localstatedir=${stateDir} + --with-aterm=${aterm} --with-bdb=${db4} --with-bzip2=${bzip2} + --disable-init-state"] ++ configureFlags ; + + meta = { + description = "The Nix Deployment System"; + homepage = http://nix.cs.uu.nl/; + license = "LGPL"; + }; +} diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index 9d381198bee0..532863d66eb9 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -3,14 +3,14 @@ , stateDir ? "/nix/var" }: -let version = "0.11pre9570"; in +let version = "0.11pre9692"; in stdenv.mkDerivation { name = "nix-${version}"; src = fetchurl { url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2"; - md5 = "5170f1b1e8feda2adeb2cac3c5ca5ff9"; + md5 = "35c0bc68b81d20c7fb925bcf8faf4827"; }; buildInputs = [perl curl openssl]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1b31a9e69a00..1cf2c2792ce7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -147,6 +147,13 @@ rec { getVersion = name: alts: builtins.getAttr (getConfig [ "environment" "versions" name ] "default") alts; + # The same, another syntax. + # Warning: syntax for configuration.nix changed too + useVersion = name: f: f + { + version = getConfig [ "environment" "versions" name ]; + }; + # Whether user enabled given feature for the given package? getFlag = flag: package: default: getConfig [ "environment" "flags" package flag ] @@ -659,6 +666,11 @@ rec { inherit fetchurl stdenv ncurses; }; + shebangfix = import ../tools/misc/shebangfix { + inherit perl; + stdenv = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh; + }; + smartmontools = import ../tools/system/smartmontools { inherit fetchurl stdenv; }; @@ -743,7 +755,7 @@ rec { wv = import ../tools/misc/wv { inherit fetchurl stdenv libpng zlib imagemagick - pkgconfig libgsf libxml2; + pkgconfig libgsf libxml2 bzip2; inherit (gtkLibs) glib; }; @@ -1063,13 +1075,11 @@ rec { inherit fetchurl stdenv; }; - ocaml = import ../development/compilers/ocaml { - inherit fetchurl stdenv x11 ncurses; - }; + ocaml = getVersion "ocaml" ocaml_alts; - ocaml3080 = import ../development/compilers/ocaml/ocaml-3.08.0.nix { - inherit fetchurl x11; - stdenv = overrideGCC stdenv gcc34; + ocaml_alts = import ../development/compilers/ocaml { + inherit fetchurl stdenv x11 ncurses stdenvUsingSetupNew2; + stdenv34 = overrideGCC stdenv gcc34; }; /* @@ -1096,7 +1106,7 @@ rec { qcmm = import ../development/compilers/qcmm { lua = lua4; - ocaml = ocaml3080; + ocaml = ocaml_alts.v_3_08_0; inherit fetchurl stdenv mk noweb groff; }; @@ -1202,17 +1212,15 @@ rec { }; */ - python = import ../development/interpreters/python { - inherit fetchurl stdenv zlib bzip2; - }; + python = getVersion "python" python_alts; - python25 = import ../development/interpreters/python/2.5 { + python_alts = import ../development/interpreters/python { inherit fetchurl stdenv zlib bzip2; }; pyrexFun = lib.sumArgs (import ../development/interpreters/pyrex) { inherit fetchurl stdenv stringsWithDeps lib builderDefs; - python = python25; + python = python_alts.v_2_5; }; pyrex = pyrexFun { @@ -1605,13 +1613,9 @@ rec { inherit fetchurl stdenv python; }; - cluceneContrib = (import ../development/libraries/clucene-contrib) { - inherit fetchurl stdenv cluceneCore; - }; - - cluceneCore = (import ../development/libraries/clucene-core) { - inherit fetchurl stdenv; - }; + cluceneCore = (import ../development/libraries/clucene-core) { + inherit fetchurl stdenv; + }; coredumper = import ../development/libraries/coredumper { inherit fetchurl stdenv; @@ -1681,6 +1685,13 @@ rec { inherit fetchurl stdenv; }; + facile = import ../development/libraries/facile { + inherit fetchurl; + # Actually, we don't need this version but we need native-code compilation + ocaml = ocaml_alts.v_3_10_0; + stdenv = stdenvUsingSetupNew2; + }; + ffmpeg = import ../development/libraries/ffmpeg { inherit fetchurl stdenv; }; @@ -1939,7 +1950,7 @@ rec { }; libexif = import ../development/libraries/libexif { - inherit fetchurl stdenv; + inherit fetchurl stdenv gettext; }; libgcrypt = import ../development/libraries/libgcrypt { @@ -1951,7 +1962,7 @@ rec { }; libgphoto2 = import ../development/libraries/libgphoto2 { - inherit fetchurl stdenv pkgconfig libusb; + inherit fetchurl stdenv pkgconfig libusb libtool libexif libjpeg gettext; }; # commented out because it's using the new configuration style proposal which is unstable @@ -1960,8 +1971,9 @@ rec { #}; libgsf = import ../development/libraries/libgsf { - inherit fetchurl stdenv perl perlXMLParser pkgconfig libxml2 gettext; - inherit (gnome) glib; + inherit fetchurl stdenv perl perlXMLParser pkgconfig libxml2 gettext bzip2 + python; + inherit (gnome) glib gnomevfs libbonobo; }; libidn = import ../development/libraries/libidn { @@ -2044,7 +2056,7 @@ rec { }; libwpd = import ../development/libraries/libwpd { - inherit fetchurl stdenv pkgconfig libgsf libxml2; + inherit fetchurl stdenv pkgconfig libgsf libxml2 bzip2; inherit (gnome) glib; }; @@ -2145,7 +2157,7 @@ rec { }; openssl = import ../development/libraries/openssl { - inherit fetchurl stdenv perl gmp; + inherit fetchurl stdenv perl; }; pangoxsl = import ../development/libraries/pangoxsl { @@ -2244,12 +2256,6 @@ rec { inherit fetchurl stdenv; }; - strigi = import ../development/libraries/strigi { - inherit stdenv fetchurl zlib cluceneCore cluceneContrib expat bzip2 - pkgconfig cmake dbus libxml2 perl; - qt = qt4; - }; - t1lib = import ../development/libraries/t1lib { inherit fetchurl stdenv x11; inherit (xlibs) libXaw; @@ -2409,6 +2415,11 @@ rec { ### DEVELOPMENT / LIBRARIES / HASKELL + gtk2hs = import ../development/libraries/haskell/gtk2hs { + inherit pkgconfig stdenv fetchurl cairo; + inherit (gnome) gtk glib GConf libglade libgtkhtml gtkhtml; + ghc = ghc661; + }; uulib64 = import ../development/libraries/haskell/uulib { # !!! remove? inherit stdenv fetchurl ghc; @@ -3078,6 +3089,11 @@ rec { libselinux = import ../os-specific/linux/libselinux { inherit fetchurl stdenv libsepol; }; + + libsexy = import ../development/libraries/libsexy { + inherit stdenv fetchurl pkgconfig libxml2; + inherit (gtkLibs) glib gtk pango; + }; librsvg = import ../development/libraries/librsvg { inherit fetchurl stdenv; @@ -3128,6 +3144,11 @@ rec { inherit fetchurl stdenv; }; + libnotify = import ../development/libraries/libnotify { + inherit stdenv fetchurl pkgconfig dbus dbus_glib; + inherit (gtkLibs) gtk glib; + }; + libvolume_id = import ../os-specific/linux/libvolume_id { inherit fetchurl stdenv; }; @@ -3509,7 +3530,7 @@ rec { }; compiz = compizFun { - version = getConfig ["compiz" "version"] "0.5.0"; + version = getConfig ["compiz" "version"] "0.6.2"; extraConfigureFlags = getConfig ["compiz" "extraConfigureFlags"] []; } null; @@ -3578,11 +3599,9 @@ rec { inherit (xlibs) libX11; }; - /* - djview4 = import ../applications/graphics/djview4 { + djview4 = import ../applications/graphics/djview { inherit fetchurl stdenv qt4 djvulibre; }; - */ eclipse = plugins: import ../applications/editors/eclipse { @@ -3598,7 +3617,7 @@ rec { elinks = import ../applications/networking/browsers/elinks { inherit stdenv fetchurl python perl ncurses x11 zlib openssl spidermonkey - guile bzip2 libtool; + guile bzip2; }; emacs = emacs22; @@ -3720,7 +3739,7 @@ rec { } null; gphoto2 = import ../applications/misc/gphoto2 { - inherit fetchurl stdenv pkgconfig libgphoto2 libexif popt; + inherit fetchurl stdenv pkgconfig libgphoto2 libexif popt readline gettext; }; gqview = import ../applications/graphics/gqview { @@ -3789,6 +3808,11 @@ rec { inherit (gtkLibs) glib; }; + jedit = import ../applications/jedit { + inherit fetchurl ant; + stdenv = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh; + }; + joe = import ../applications/editors/joe { inherit stdenv fetchurl; }; @@ -3961,7 +3985,7 @@ rec { pythonmagick = import ../applications/graphics/PythonMagick { inherit fetchurl stdenv pkgconfig imagemagick boost; - python = python25; + python = python_alts.v_2_5; }; ratpoison = import ../applications/window-managers/ratpoison { @@ -4344,71 +4368,28 @@ rec { qt = qt3; }; - kdelibs4 = import ../desktops/kde-4/kdelibs { + kde4 = recurseIntoAttrs (import ../desktops/kde-4 { inherit - fetchurl stdenv zlib perl openssl pcre pkgconfig - libjpeg libpng libtiff libxml2 libxslt libtool - expat freetype bzip2 cmake strigi shared_mime_info alsaLib libungif cups; - inherit (xlibs) - inputproto kbproto scrnsaverproto xextproto xf86miscproto - xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite - libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm - libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc - libxkbfile; + fetchurl fetchsvn zlib perl openssl pcre pkgconfig libjpeg libpng libtiff + libxml2 libxslt libtool libusb expat freetype bzip2 cmake cluceneCore libgcrypt gnupg + cppunit cyrus_sasl openldap enchant openexr exiv2 samba nss log4cxx aspell + shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland + xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline + saneBackends chmlib python libzip gmp sqlite libidn runCommand lib + openbabel ocaml facile; + stdenv = stdenvUsingSetupNew2; + cdparanoia = cdparanoiaIII; + inherit (xlibs) + inputproto kbproto scrnsaverproto xextproto xf86miscproto + xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite + libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm + libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc + libxkbfile libXinerama; + inherit (gtkLibs) glib; qt = qt4; - }; - - kdepimlibs4 = import ../desktops/kde-4/kdepimlibs { - inherit - fetchurl stdenv zlib perl openssl pcre pkgconfig - libjpeg libpng libtiff libxml2 libxslt libtool - expat freetype bzip2 cmake strigi shared_mime_info alsaLib libungif cups - boost gpgme; - inherit (xlibs) - inputproto kbproto scrnsaverproto xextproto xf86miscproto - xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite - libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm - libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc - libxkbfile; - qt = qt4; - kdelibs = kdelibs4; - }; - - kdepim4 = import ../desktops/kde-4/kdepim { - inherit - fetchurl stdenv zlib perl openssl pcre pkgconfig - libjpeg libpng libtiff libxml2 libxslt libtool libusb - expat freetype bzip2 cmake strigi shared_mime_info alsaLib libungif cups - mesa gpgme boost; - inherit (xlibs) - inputproto kbproto scrnsaverproto xextproto xf86miscproto - xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite - libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm - libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc - libxkbfile libXinerama; - inherit (gtkLibs) glib; - qt = qt4; - kdelibs = kdelibs4; - kdepimlibs = kdepimlibs4; - }; - - kdebase4 = import ../desktops/kde-4/kdebase { - inherit - fetchurl stdenv zlib perl openssl pcre pkgconfig - libjpeg libpng libtiff libxml2 libxslt libtool libusb - expat freetype bzip2 cmake strigi shared_mime_info alsaLib libungif cups - mesa; - inherit (xlibs) - inputproto kbproto scrnsaverproto xextproto xf86miscproto - xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite - libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm - libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc - libxkbfile libXinerama; - inherit (gtkLibs) glib; - qt = qt4; - kdelibs = kdelibs4; - kdepimlibs = kdepimlibs4; - }; + dbus = dbus_alts.withX11; + bison = bison23; + }); kdebase = import ../desktops/kde/kdebase { inherit @@ -4520,6 +4501,18 @@ rec { db4 = db45; }; + nixCustomFun = src: preConfigure: configureFlags : + (import ../tools/package-management/nix/custom.nix { + inherit fetchurl stdenv perl curl bzip2 openssl src preConfigure automake + autoconf libtool configureFlags; + bison = bison23; + flex = flex2533; + aterm = aterm242fixes; + db4 = db45; + inherit docbook5_xsl libxslt docbook5 docbook_xml_dtd_43 w3m; + + }); + ntfs3g = import ../misc/ntfs-3g { inherit fetchurl stdenv fuse pkgconfig; }; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index 3337d6dc8a23..ae5224f71011 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -1,5 +1,5 @@ args: with args; with stringsWithDeps; with lib; -rec +(rec { inherit writeScript; @@ -12,30 +12,29 @@ rec else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip" else (abort "unknown archive type : ${s}")); - minInit = noDepEntry (" - set -e - NIX_GCC=${stdenv.gcc} - export SHELL=${stdenv.shell} - # Set up the initial path. - PATH= - for i in \$NIX_GCC ${toString stdenv.initialPath}; do - PATH=\$PATH\${PATH:+:}\$i/bin - done - " + (if ((stdenv ? preHook) && (stdenv.preHook != null) && - ((toString stdenv.preHook) != "")) then - " - param1=${stdenv.param1} - param2=${stdenv.param2} - param3=${stdenv.param3} - param4=${stdenv.param4} - param5=${stdenv.param5} - source ${stdenv.preHook} - - export TZ=UTC - - prefix=${if args ? prefix then (toString args.prefix) else "\$out"} + defAddToSearchPath = FullDepEntry (" + addToSearchPathWithCustomDelimiter() { + local delimiter=\$1 + local varName=\$2 + local needDir=\$3 + local addDir=\${4:-\$needDir} + local prefix=\$5 + if [ -d \$prefix\$needDir ]; then + if [ -z \${!varName} ]; then + eval export \${varName}=\${prefix}\$addDir + else + eval export \${varName}=\${!varName}\${delimiter}\${prefix}\$addDir + fi + fi + } + addToSearchPath() + { + addToSearchPathWithCustomDelimiter \"\${PATH_DELIMITER}\" \"\$@\" + } + ") [defNest]; + defNest = noDepEntry (" nestingLevel=0 startNest() { @@ -62,10 +61,33 @@ rec } trap \"closeNest\" EXIT + "); + minInit = FullDepEntry (" + set -e + NIX_GCC=${stdenv.gcc} + export SHELL=${stdenv.shell} + # Set up the initial path. + PATH= + for i in \$NIX_GCC ${toString stdenv.initialPath}; do + PATH=\$PATH\${PATH:+:}\$i/bin + done + " + (if ((stdenv ? preHook) && (stdenv.preHook != null) && + ((toString stdenv.preHook) != "")) then + " + param1=${stdenv.param1} + param2=${stdenv.param2} + param3=${stdenv.param3} + param4=${stdenv.param4} + param5=${stdenv.param5} + source ${stdenv.preHook} + + export TZ=UTC + + prefix=${if args ? prefix then (toString args.prefix) else "\$out"} " - else "")); + else "")) [defNest defAddToSearchPath]; addInputs = FullDepEntry (" # Recursively find all build inputs. @@ -243,8 +265,8 @@ rec replaceInScript = file: l: (concatStringsSep "\n" ((pairMap (replaceScriptVar file) l))); replaceScripts = l:(concatStringsSep "\n" (pairMap replaceInScript l)); doReplaceScripts = FullDepEntry (replaceScripts (getAttr ["shellReplacements"] [] args)) [minInit]; - makeNest = x:(if x==minInit.text then x else "startNest\n" + x + "\nstopNest\n"); + makeNest = x:(if x==defNest.text then x else "startNest\n" + x + "\nstopNest\n"); textClosure = textClosureMap makeNest; inherit noDepEntry FullDepEntry PackEntry; -} +}) // args From 6b01b5176a0ec1c528b05546a6896e6c94e8de38 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:04:45 +0000 Subject: [PATCH 006/320] Added (optional) perl support to svn-1.4.x svn path=/nixpkgs/branches/stdenv-updates/; revision=9728 --- .../subversion-1.4.x/builder.sh | 12 ++++++++-- .../subversion-1.4.x/default.nix | 11 +++++++--- ...on-respect_CPPFLAGS_in_perl_bindings.patch | 22 +++++++++++++++++++ 3 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 pkgs/applications/version-management/subversion-1.4.x/subversion-respect_CPPFLAGS_in_perl_bindings.patch diff --git a/pkgs/applications/version-management/subversion-1.4.x/builder.sh b/pkgs/applications/version-management/subversion-1.4.x/builder.sh index e91f9f9113d2..9a503a926010 100644 --- a/pkgs/applications/version-management/subversion-1.4.x/builder.sh +++ b/pkgs/applications/version-management/subversion-1.4.x/builder.sh @@ -7,8 +7,16 @@ fi postInstall() { if test "$pythonBindings"; then - make swig-py - make install-swig-py + make swig-py swig_pydir=$(toPythonPath $out) + make install-swig-py swig_pydir=$(toPythonPath $out) + fi + if test "$perlBindings"; then + make swig-pl-lib + make install-swig-pl-lib + cd subversion/bindings/swig/perl/native + perl Makefile.PL PREFIX=$out + make install + cd - fi if test "$javahlBindings"; then mkdir -p subversion/bindings/java/javahl/classes # bug fix diff --git a/pkgs/applications/version-management/subversion-1.4.x/default.nix b/pkgs/applications/version-management/subversion-1.4.x/default.nix index 38333daa2f9b..b2869450c094 100644 --- a/pkgs/applications/version-management/subversion-1.4.x/default.nix +++ b/pkgs/applications/version-management/subversion-1.4.x/default.nix @@ -3,6 +3,7 @@ , sslSupport ? false , compressionSupport ? false , pythonBindings ? false +, perlBindings ? false , javahlBindings ? false , stdenv, fetchurl, apr, aprutil, neon, zlib , httpd ? null, expat, swig ? null, jdk ? null @@ -26,7 +27,9 @@ stdenv.mkDerivation { buildInputs = [expat zlib] - ++ (if pythonBindings then [swig.python] else []); + ++ (if pythonBindings then [swig.python] else []) + ++ (if perlBindings then [swig.perl] else []) + ; configureFlags = " --without-gdbm --disable-static @@ -37,14 +40,16 @@ stdenv.mkDerivation { "--with-apxs=${httpd}/bin/apxs --with-apr=${httpd} --with-apr-util=${httpd}" else "--without-apxs"} - ${if pythonBindings then "--with-swig=${swig}" else "--without-swig"} + ${if (pythonBindings || perlBindings) then "--with-swig=${swig}" else "--without-swig"} ${if javahlBindings then "--enable-javahl --with-jdk=${jdk}" else ""} --disable-neon-version-check "; - inherit httpServer pythonBindings javahlBindings; + inherit httpServer pythonBindings javahlBindings perlBindings; + patches = [ ./subversion-respect_CPPFLAGS_in_perl_bindings.patch ]; meta = { description = "A version control system intended to be a compelling replacement for CVS in the open source community"; }; } + diff --git a/pkgs/applications/version-management/subversion-1.4.x/subversion-respect_CPPFLAGS_in_perl_bindings.patch b/pkgs/applications/version-management/subversion-1.4.x/subversion-respect_CPPFLAGS_in_perl_bindings.patch new file mode 100644 index 000000000000..86c18145c2e7 --- /dev/null +++ b/pkgs/applications/version-management/subversion-1.4.x/subversion-respect_CPPFLAGS_in_perl_bindings.patch @@ -0,0 +1,22 @@ +Index: subversion/bindings/swig/perl/native/Makefile.PL.in +=================================================================== +--- subversion-1.4.5/subversion/bindings/swig/perl/native/Makefile.PL.in (revision 27184) ++++ subversion-1.4.5/subversion/bindings/swig/perl/native/Makefile.PL.in (working copy) +@@ -26,6 +26,7 @@ + my @ldmodules = map {"-lsvn_$_-1"} (@modules, qw/diff subr/); + + my $apr_shlib_path_var = '@SVN_APR_SHLIB_PATH_VAR@'; ++my $cppflags = '@CPPFLAGS@'; + my $apr_cflags = '@SVN_APR_INCLUDES@'; + my $apu_cflags = '@SVN_APRUTIL_INCLUDES@'; + +@@ -38,7 +39,7 @@ + + my %config = ( + ABSTRACT => 'Perl bindings for Subversion', +- INC => join(' ',$apr_cflags, $apu_cflags, ++ INC => join(' ', $cppflags, $apr_cflags, $apu_cflags, + " -I$swig_srcdir/perl/libsvn_swig_perl", + " -I$svnlib_srcdir/include", + " -I$svnlib_builddir", + From 36e8d12df4968284e0f5ead4a9a1d3dce86edeac Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:04:54 +0000 Subject: [PATCH 007/320] Mercurial upgrade svn path=/nixpkgs/branches/stdenv-updates/; revision=9729 --- .../version-management/mercurial/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/version-management/mercurial/default.nix b/pkgs/applications/version-management/mercurial/default.nix index 253907ab4bde..f65a34ec5c45 100644 --- a/pkgs/applications/version-management/mercurial/default.nix +++ b/pkgs/applications/version-management/mercurial/default.nix @@ -1,10 +1,10 @@ -{stdenv, fetchurl, python, makeWrapper}: +args: with args; stdenv.mkDerivation { - name = "mercurial-0.9.4"; + name = "mercurial-0.9.5"; src = fetchurl { - url = http://www.selenic.com/mercurial/release/mercurial-0.9.4.tar.gz; - sha256 = "26996df67d508e129d2f0a264e25072764e5c2d21606e1658d77c8984e6ed64a"; + url = http://www.selenic.com/mercurial/release/mercurial-0.9.5.tar.gz; + sha256 = "1n34yl4z7nc3vmsgpkmqc94hsmy846ny86xgpgv3m371ljm2pq6g"; }; inherit makeWrapper; @@ -16,7 +16,7 @@ stdenv.mkDerivation { "for i in $(cd $out/bin && ls); do" " mv $out/bin/$i $out/bin/.orig-$i;" " makeWrapper $out/bin/.orig-$i $out/bin/$i" - " --set PYTHONPATH \"$(toPythonPath $out):$PYTHONPATH\";" + " --set PYTHONPATH \"$(toPythonPath $out):$PYTHONPATH:\$PYTHONPATH\";" "done" ]; From 7ef042608d561d6f5e4dcea97318420878ff99b5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:05:02 +0000 Subject: [PATCH 008/320] Added some options for choosing kernel svn path=/nixpkgs/branches/stdenv-updates/; revision=9730 --- pkgs/top-level/all-packages.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1cf2c2792ce7..599b4fbdc2cc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2952,9 +2952,9 @@ rec { modules = []; }; - kernel = kernel_2_6_21; + systemKernel = kernel; - systemKernel = (if (getConfig ["kernel" "version"] "2.6.21") == "2.6.22" then + kernel = (if (getConfig ["kernel" "version"] "2.6.21") == "2.6.22" then kernel_2_6_22 else if (getConfig ["kernel" "version"] "2.6.21") == "2.6.23" then kernel_2_6_23 else kernel); @@ -3078,11 +3078,12 @@ rec { }; extraConfig = "CONFIG_FB_SPLASH=y"; } - ]; + ] ++ getConfig ["kernel" "extraPatches"] []; extraConfig = lib.optional (getConfig ["kernel" "timer_stats"] false) "CONFIG_TIMER_STATS=y" ++ lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ [(getConfig ["kernel" "addConfig"] "")]; + kernelConfig = getConfig ["kernel" "configFile"] null; }; @@ -3112,8 +3113,7 @@ rec { }; klibc = import ../os-specific/linux/klibc { - inherit fetchurl stdenv perl bison mktemp; - kernel = systemKernel; + inherit fetchurl stdenv perl bison mktemp kernel; }; kvm = kvm49; From c42b3b374e3b303c2c22c10e7a8dc930dbf8f813 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:05:13 +0000 Subject: [PATCH 009/320] wpa_supplicant upgraded to 0.5.8 svn path=/nixpkgs/branches/stdenv-updates/; revision=9731 --- pkgs/os-specific/linux/wpa_supplicant/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/wpa_supplicant/default.nix b/pkgs/os-specific/linux/wpa_supplicant/default.nix index bf6795f4b1ed..cf529b04637e 100644 --- a/pkgs/os-specific/linux/wpa_supplicant/default.nix +++ b/pkgs/os-specific/linux/wpa_supplicant/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, openssl}: stdenv.mkDerivation { - name = "wpa_supplicant-0.5.7"; + name = "wpa_supplicant-0.5.8"; src = fetchurl { - url = http://hostap.epitest.fi/releases/wpa_supplicant-0.5.7.tar.gz; - sha256 = "0mvb2fpvn7qdjinpn86hvmhfwg2ax1822hdkfrw25wx5dglqns6g"; + url = http://hostap.epitest.fi/releases/wpa_supplicant-0.5.8.tar.gz; + sha256 = "1w37bm42gh1k0v3r8cdmyrvf5rk5fyz9bvsp10w2cvgrwgi5b5rg"; }; preBuild = " From 07091eed111c2ed57b844ba7348a2368e511fef9 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:05:32 +0000 Subject: [PATCH 010/320] Make kernel builder compatible with 2.6.24-rc2 svn path=/nixpkgs/branches/stdenv-updates/; revision=9732 --- pkgs/os-specific/linux/kernel/builder.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/builder.sh b/pkgs/os-specific/linux/kernel/builder.sh index 3512a74c1965..af5aa8de8c20 100644 --- a/pkgs/os-specific/linux/kernel/builder.sh +++ b/pkgs/os-specific/linux/kernel/builder.sh @@ -66,6 +66,7 @@ installPhase() { cp arch/$arch/boot/bzImage $out/vmlinuz fi + sed -e '/-b $(INSTALL_MOD_PATH)/d' -i Makefile # Install the modules in $out/lib/modules with matching paths # in modules.dep (i.e., refererring to $out/lib/modules, not # /lib/modules). The depmod_opts= is to prevent the kernel @@ -95,7 +96,7 @@ installPhase() { if test "$arch" != um; then # copy all Makefiles and Kconfig files ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source - cp --parents `find -type f -name Makefile -o -name "Kconfig*"` $out/lib/modules/$version/build + cp --parents `find -type f -name Makefile-\* -o -name "Kconfig*"` $out/lib/modules/$version/build cp Module.symvers $out/lib/modules/$version/build # weed out unneeded stuff From ebc6bb79cd848cf95903f77ed2e4bafe045347c0 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:05:39 +0000 Subject: [PATCH 011/320] Changed syntax of getVersion svn path=/nixpkgs/branches/stdenv-updates/; revision=9733 --- pkgs/development/libraries/gettext/default.nix | 13 ++++++------- pkgs/top-level/all-packages.nix | 6 +++--- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index 54a0d36cf76e..10d1ced407f3 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -1,8 +1,7 @@ args: -rec { - recurseForDerivations = true; - default = v_0_14_6; - v_0_14_6 = (import ./0.14.6.nix) args; - v_0_15 = (import ./0.15.nix) args; - v_0_16_x = (import ./0.16.x.nix) args; -} +builtins.listToAttrs [ + { name = "recurseForDerivations"; value = true; } + { name = "0.14.6"; value = (import ./0.14.6.nix) args; } + { name = "0.15"; value = (import ./0.15.nix) args; } + { name = "0.16.x"; value = (import ./0.16.x.nix) args; } +] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 599b4fbdc2cc..8afad6b24e20 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -142,10 +142,10 @@ rec { # pkgname = getVersion "name" pkgname_alts; # # user will be able to write in his configuration.nix something like - # environment = { versions = { name = v_0_2; }; }; and pkgname will be equal - # to pkgname_alts.v_0_2. Using alts.default by default. + # name = { version = "0.2"; }; and pkgname will be equal + # to getAttr pkgname_alts "0.2". Using alts.default by default. getVersion = name: alts: builtins.getAttr - (getConfig [ "environment" "versions" name ] "default") alts; + (getConfig [ name "version" ] "default") alts; # The same, another syntax. # Warning: syntax for configuration.nix changed too From 606b413f1f695ee0d11603ad3c66e981b585e655 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:05:55 +0000 Subject: [PATCH 012/320] Rewritten gettext-version stuff. I've added listOfListsToAttrs to lib because I don't like to type "name =" and "value =". svn path=/nixpkgs/branches/stdenv-updates/; revision=9734 --- pkgs/development/libraries/gettext/0.14.6.nix | 3 ++- pkgs/development/libraries/gettext/0.15.nix | 3 ++- pkgs/development/libraries/gettext/0.16.x.nix | 3 ++- pkgs/development/libraries/gettext/default.nix | 11 ++++++----- pkgs/lib/default.nix | 1 + pkgs/top-level/all-packages.nix | 2 +- 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/pkgs/development/libraries/gettext/0.14.6.nix b/pkgs/development/libraries/gettext/0.14.6.nix index fefa8dbe5c78..bceacd318ec6 100644 --- a/pkgs/development/libraries/gettext/0.14.6.nix +++ b/pkgs/development/libraries/gettext/0.14.6.nix @@ -1,4 +1,5 @@ -{stdenv, fetchurl}: stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "gettext-0.14.6"; src = fetchurl { url = mirror://gnu/gettext/gettext-0.14.6.tar.gz; diff --git a/pkgs/development/libraries/gettext/0.15.nix b/pkgs/development/libraries/gettext/0.15.nix index fec9c348afcc..0c417aafe50f 100644 --- a/pkgs/development/libraries/gettext/0.15.nix +++ b/pkgs/development/libraries/gettext/0.15.nix @@ -1,4 +1,5 @@ -{stdenv, fetchurl}: stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "gettext-0.15"; src = fetchurl { url = mirror://gnu/gettext/gettext-0.15.tar.gz; diff --git a/pkgs/development/libraries/gettext/0.16.x.nix b/pkgs/development/libraries/gettext/0.16.x.nix index 9e832889e421..d9b8cabef1da 100644 --- a/pkgs/development/libraries/gettext/0.16.x.nix +++ b/pkgs/development/libraries/gettext/0.16.x.nix @@ -1,4 +1,5 @@ -{stdenv, fetchurl}: stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "gettext-0.16.1"; src = fetchurl { url = mirror://gnu/gettext/gettext-0.16.1.tar.gz; diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index 10d1ced407f3..e98d365022fa 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -1,7 +1,8 @@ args: -builtins.listToAttrs [ - { name = "recurseForDerivations"; value = true; } - { name = "0.14.6"; value = (import ./0.14.6.nix) args; } - { name = "0.15"; value = (import ./0.15.nix) args; } - { name = "0.16.x"; value = (import ./0.16.x.nix) args; } +args.lib.listOfListsToAttrs [ + [ "recurseForDerivations" true ] + [ "0.14.6" (import ./0.14.6.nix args) ] + [ "0.15" (import ./0.15.nix args) ] + [ "0.16.x" (import ./0.16.x.nix args) ] + [ "default" (import ./0.16.x.nix args) ] ] diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index ce4fbf12cf46..87948ad2f6f5 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -8,6 +8,7 @@ let in rec { + listOfListsToAttrs = ll : builtins.listToAttrs (map (l : { name = (head l); value = (head (tail l)); }) ll); innerSumArgs = f : x : y : (if y == null then (f x) else (innerSumArgs f (x // y))); diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8afad6b24e20..0053a061601a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1736,7 +1736,7 @@ rec { gettext = getVersion "gettext" gettext_alts; gettext_alts = import ../development/libraries/gettext { - inherit fetchurl stdenv; + inherit fetchurl stdenv lib; }; gd = import ../development/libraries/gd { From beceee6b912bc9fc6b561cdcc02b5d6b1f071cc7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:06:13 +0000 Subject: [PATCH 013/320] Fixed a typo in kernel selection code svn path=/nixpkgs/branches/stdenv-updates/; revision=9735 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0053a061601a..fe649261641d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2956,7 +2956,7 @@ rec { kernel = (if (getConfig ["kernel" "version"] "2.6.21") == "2.6.22" then kernel_2_6_22 else if (getConfig ["kernel" "version"] "2.6.21") == "2.6.23" then - kernel_2_6_23 else kernel); + kernel_2_6_23 else kernel_2_6_21); kernel_2_6_20 = import ../os-specific/linux/kernel/linux-2.6.20.nix { inherit fetchurl stdenv perl mktemp module_init_tools; From 51a3cde784c9cc7345744f7e3c58fba9bee8b97b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:34:27 +0000 Subject: [PATCH 014/320] Now all the files setup-new-2.sh, setup-new.sh and setup.sh are the same file. svn path=/nixpkgs/branches/stdenv-updates/; revision=9736 --- pkgs/stdenv/generic/setup-new-2.sh | 879 +---------------------------- pkgs/stdenv/generic/setup-new.sh | 831 +-------------------------- pkgs/stdenv/generic/setup.sh | 167 ++++-- 3 files changed, 130 insertions(+), 1747 deletions(-) mode change 100644 => 120000 pkgs/stdenv/generic/setup-new-2.sh mode change 100644 => 120000 pkgs/stdenv/generic/setup-new.sh diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh deleted file mode 100644 index 5e330846a4d6..000000000000 --- a/pkgs/stdenv/generic/setup-new-2.sh +++ /dev/null @@ -1,878 +0,0 @@ -set -e - -test -z $NIX_GCC && NIX_GCC=@gcc@ - -if [ -z ${system##*cygwin*} ]; then - PATH_DELIMITER=';' -else - PATH_DELIMITER=':' -fi - -addToSearchPathWithCustomDelimiter() { - local delimiter=$1 - local varName=$2 - local needDir=$3 - local addDir=${4:-$needDir} - local prefix=$5 - if [ -d $prefix$needDir ]; then - if [ -z ${!varName} ]; then - eval export ${varName}=${prefix}$addDir - else - eval export ${varName}=${!varName}${delimiter}${prefix}$addDir - fi - fi -} - -addToSearchPath() -{ - addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" -} - -# Set up the initial path. -PATH= -for i in $NIX_GCC @initialPath@; do - PATH=$PATH${PATH:+:}$i/bin -done - -if test "$NIX_DEBUG" = "1"; then - echo "Initial path: $PATH" -fi - - -# Execute the pre-hook. -export SHELL=@shell@ -if test -z "$shell"; then - export shell=@shell@ -fi -param1=@param1@ -param2=@param2@ -param3=@param3@ -param4=@param4@ -param5=@param5@ -if test -n "@preHook@"; then - source @preHook@ -fi - - -# Check that the pre-hook initialised SHELL. -if test -z "$SHELL"; then echo "SHELL not set"; exit 1; fi - - -# Hack: run gcc's setup hook. -envHooks=() -if test -f $NIX_GCC/nix-support/setup-hook; then - source $NIX_GCC/nix-support/setup-hook -fi - - -# Ensure that the given directories exists. -ensureDir() { - local dir - for dir in "$@"; do - if ! test -x "$dir"; then mkdir -p "$dir"; fi - done -} - -installBin() { - ensureDir $out/bin - cp "$@" $out/bin -} - -assertEnvExists(){ - if test -z "${!1}"; then - msg=${2:-error: assertion failed: env var $1 is required} - echo $msg >&2; exit 1 - fi -} - -# Called when some build action fails. If $succeedOnFailure is set, -# create the file `$out/nix-support/failed' to signal failure, and -# exit normally. Otherwise, exit with failure. -fail() { - exitCode=$? - if test "$succeedOnFailure" = 1; then - ensureDir "$out/nix-support" - touch "$out/nix-support/failed" - exit 0 - else - exit $? - fi -} - - -# Allow the caller to augment buildInputs (it's not always possible to -# do this before the call to setup.sh, since the PATH is empty at that -# point; here we have a basic Unix environment). -eval "$addInputsHook" - - -# Recursively find all build inputs. -findInputs() -{ - local pkg=$1 - - case $pkgs in - *\ $pkg\ *) - return 0 - ;; - esac - - pkgs="$pkgs $pkg " - - if test -f $pkg/nix-support/setup-hook; then - source $pkg/nix-support/setup-hook - fi - - if test -f $pkg/nix-support/propagated-build-inputs; then - for i in $(cat $pkg/nix-support/propagated-build-inputs); do - findInputs $i - done - fi -} - -pkgs="" -if test -n "$buildinputs"; then - buildInputs="$buildinputs" # compatibility -fi -for i in $buildInputs $propagatedBuildInputs; do - findInputs $i -done - - -# Set the relevant environment variables to point to the build inputs -# found above. -addToEnv() -{ - local pkg=$1 - - if test "$ignoreFailedInputs" != "1" -a -e $1/nix-support/failed; then - echo "failed input $1" >&2 - fail - fi - - if test -d $1/bin; then - export _PATH=$_PATH${_PATH:+:}$1/bin - fi - - for i in "${envHooks[@]}"; do - $i $pkg - done -} - -for i in $pkgs; do - addToEnv $i -done - - -# Add the output as an rpath. -if test "$NIX_NO_SELF_RPATH" != "1"; then - export NIX_LDFLAGS="-rpath $out/lib $NIX_LDFLAGS" -fi - - -# Strip debug information by default. -if test -z "$NIX_STRIP_DEBUG"; then - export NIX_STRIP_DEBUG=1 - export NIX_CFLAGS_STRIP="-g0 -Wl,--strip-debug" -fi - - -assertEnvExists NIX_STORE \ - "Error: you have an old version of Nix that does not set the - NIX_STORE variable. This is required for purity checking. - Please upgrade." - -assertEnvExists NIX_BUILD_TOP \ - "Error: you have an old version of Nix that does not set the - NIX_BUILD_TOP variable. This is required for purity checking. - Please upgrade." - - -# Set the TZ (timezone) environment variable, otherwise commands like -# `date' will complain (e.g., `Tue Mar 9 10:01:47 Local time zone must -# be set--see zic manual page 2004'). -export TZ=UTC - - -# Set the prefix. This is generally $out, but it can be overriden, -# for instance if we just want to perform a test build/install to a -# temporary location and write a build report to $out. -if test -z "$prefix"; then - prefix="$out"; -fi - -if test "$useTempPrefix" = "1"; then - prefix="$NIX_BUILD_TOP/tmp_prefix"; -fi - - -# Execute the post-hook. -if test -n "@postHook@"; then - source @postHook@ -fi - -PATH=$_PATH${_PATH:+:}$PATH -if test "$NIX_DEBUG" = "1"; then - echo "Final path: $PATH" -fi - -stripDirs() { - local dirs="$1" - local stripFlags="$2" - local dirsNew= - - for d in ${dirs}; do - if test -d "$prefix/$d"; then - dirsNew="${dirsNew} $prefix/$d " - fi - done - dirs=${dirsNew} - - if test -n "${dirs}"; then - echo $dirs - find $dirs -type f -print0 | xargs -0 strip $stripFlags || true - fi -} - -###################################################################### -# Textual substitution functions. - - -# Some disgusting hackery to escape replacements in Sed substitutions. -# We should really have a tool that replaces literal values by other -# literal values, without any need for escaping. -escapeSed() { - local s="$1" - # The `tr' hack is to escape newlines. Sed handles newlines very - # badly, so we just replace newlines with the magic character 0xff - # (377 octal). So don't use that character in replacements :-P - echo -n "$1" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g' -} - - -substitute() { - local input="$1" - local output="$2" - - local -a params=("$@") - - local sedScript=$NIX_BUILD_TOP/.sedargs - rm -f $sedScript - touch $sedScript - - local n p pattern replacement varName - - for ((n = 2; n < ${#params[*]}; n += 1)); do - p=${params[$n]} - - if test "$p" = "--replace"; then - pattern="${params[$((n + 1))]}" - replacement="${params[$((n + 2))]}" - n=$((n + 2)) - fi - - if test "$p" = "--subst-var"; then - varName="${params[$((n + 1))]}" - pattern="@$varName@" - replacement="${!varName}" - n=$((n + 1)) - fi - - if test "$p" = "--subst-var-by"; then - pattern="@${params[$((n + 1))]}@" - replacement="${params[$((n + 2))]}" - n=$((n + 2)) - fi - - replacement="$(escapeSed "$replacement")" - - echo "s^$pattern^$replacement^g" >> $sedScript - done - - sed -f $sedScript < "$input" > "$output".tmp - if test -x "$output"; then - chmod +x "$output".tmp - fi - mv -f "$output".tmp "$output" -} - - -substituteInPlace() { - local fileName="$1" - shift - substitute "$fileName" "$fileName" "$@" -} - - -substituteAll() { - local input="$1" - local output="$2" - - # Select all environment variables that start with a lowercase character. - for envVar in $(env | sed "s/^[^a-z].*//" | sed "s/^\([^=]*\)=.*/\1/"); do - if test "$NIX_DEBUG" = "1"; then - echo "$envVar -> ${!envVar}" - fi - args="$args --subst-var $envVar" - done - - substitute "$input" "$output" $args -} - - -###################################################################### -# What follows is the generic builder. - - -nestingLevel=0 - -startNest() { - nestingLevel=$(($nestingLevel + 1)) - echo -en "\e[$1p" -} - -stopNest() { - nestingLevel=$(($nestingLevel - 1)) - echo -en "\e[q" -} - -header() { - startNest "$2" - echo "$1" -} - -# Make sure that even when we exit abnormally, the original nesting -# level is properly restored. -closeNest() { - while test $nestingLevel -gt 0; do - stopNest - done -} - -trap "closeNest" EXIT - - -# This function is useful for debugging broken Nix builds. It dumps -# all environment variables to a file `env-vars' in the build -# directory. If the build fails and the `-K' option is used, you can -# then go to the build directory and source in `env-vars' to reproduce -# the environment used for building. -dumpVars() { - if test "$noDumpEnvVars" != "1"; then - export > $NIX_BUILD_TOP/env-vars - fi -} - - -# Redirect stdout/stderr to a named pipe connected to a `tee' process -# that writes the specified file (and also to our original stdout). -# The original stdout is saved in descriptor 3. -startLog() { - local logFile=${logNr}_$1 - logNr=$((logNr + 1)) - if test "$logPhases" = 1; then - ensureDir $logDir - - exec 3>&1 - - if test "$dontLogThroughTee" != 1; then - # This required named pipes (fifos). - logFifo=$NIX_BUILD_TOP/log_fifo - test -p $logFifo || mkfifo $logFifo - startLogWrite "$logDir/$logFile" "$logFifo" - exec > $logFifo 2>&1 - else - exec > $logDir/$logFile 2>&1 - fi - fi -} - -# Factored into a separate function so that it can be overriden. -startLogWrite() { - tee "$1" < "$2" & - logWriterPid=$! -} - - -if test -z "$logDir"; then - logDir=$out/log -fi - -logNr=0 - -# Restore the original stdout/stderr. -stopLog() { - if test "$logPhases" = 1; then - exec >&3 2>&1 - - # Wait until the tee process has died. Otherwise output from - # different phases may be mixed up. - if test -n "$logWriterPid"; then - wait $logWriterPid - logWriterPid= - rm $logFifo - fi - fi -} - - -# Utility function: return the base name of the given path, with the -# prefix `HASH-' removed, if present. -stripHash() { - strippedName=$(basename $1); - if echo "$strippedName" | grep -q '^[a-z0-9]\{32\}-'; then - strippedName=$(echo "$strippedName" | cut -c34-) - fi -} - - -unpackFile() { - local file=$1 - local cmd - - header "unpacking source archive $file" 3 - - case $file in - *.tar) - tar xvf $file || fail - ;; - *.tar.gz | *.tgz | *.tar.Z) - gunzip < $file | tar xvf - || fail - ;; - *.tar.bz2 | *.tbz2) - bunzip2 < $file | tar xvf - || fail - ;; - *.zip) - unzip $file || fail - ;; - *) - if test -d "$file"; then - stripHash $file - cp -prvd $file $strippedName || fail - else - if test -n "$findUnpacker"; then - $findUnpacker $1; - fi - if test -z "$unpackCmd"; then - echo "source archive $file has unknown type" - exit 1 - fi - eval "$unpackCmd" || fail - fi - ;; - esac - - stopNest -} - - -unpackW() { - if test -n "$unpackPhase"; then - eval "$unpackPhase" - return - fi - - if test -z "$srcs"; then - if test -z "$src"; then - echo 'variable $src or $srcs should point to the source' - exit 1 - fi - srcs="$src" - fi - - # To determine the source directory created by unpacking the - # source archives, we record the contents of the current - # directory, then look below which directory got added. Yeah, - # it's rather hacky. - local dirsBefore="" - for i in *; do - if test -d "$i"; then - dirsBefore="$dirsBefore $i " - fi - done - - # Unpack all source archives. - for i in $srcs; do - unpackFile $i - done - - # Find the source directory. - if test -n "$setSourceRoot"; then - eval "$setSourceRoot" - else - sourceRoot= - for i in *; do - if test -d "$i"; then - case $dirsBefore in - *\ $i\ *) - ;; - *) - if test -n "$sourceRoot"; then - echo "unpacker produced multiple directories" - exit 1 - fi - sourceRoot=$i - ;; - esac - fi - done - fi - - if test -z "$sourceRoot"; then - echo "unpacker appears to have produced no directories" - exit 1 - fi - - echo "source root is $sourceRoot" - - # By default, add write permission to the sources. This is often - # necessary when sources have been copied from other store - # locations. - if test "dontMakeSourcesWritable" != 1; then - chmod -R +w $sourceRoot - fi - - eval "$postUnpack" -} - - -unpackPhase() { - sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource does'nt set sourceRoot - header "unpacking sources" - startLog "unpack" - unpackW - stopLog - stopNest - cd $sourceRoot -} - - -patchW() { - if test -n "$patchPhase"; then - eval "$patchPhase" - return - fi - - if test -z "$patchFlags"; then - patchFlags="-p1" - fi - - for i in $patches; do - header "applying patch $i" 3 - local uncompress=cat - case $i in - *.gz) - uncompress=gunzip - ;; - *.bz2) - uncompress=bunzip2 - ;; - esac - $uncompress < $i | patch $patchFlags || fail - stopNest - done -} - - -patchPhase() { - if test -z "$patchPhase" -a -z "$patches"; then return; fi - header "patching sources" - startLog "patch" - patchW - stopLog - stopNest -} - - -fixLibtool() { - sed 's^eval sys_lib_.*search_path=.*^^' < $1 > $1.tmp - mv $1.tmp $1 -} - - -configureW() { - if test -n "$configurePhase"; then - eval "$configurePhase" - return - fi - - eval "$preConfigure" - - if test -z "$configureScript"; then - configureScript=./configure - if ! test -x $configureScript; then - echo "no configure script, doing nothing" - return - fi - fi - - if test -z "$dontFixLibtool"; then - for i in $(find . -name "ltmain.sh"); do - echo "fixing libtool script $i" - fixLibtool $i - done - fi - - if test -z "$dontAddPrefix"; then - configureFlags="${prefixKey:---prefix=}$prefix $configureFlags" - fi - - echo "configure flags: $configureFlags ${configureFlagsArray[@]}" - $configureScript $configureFlags"${configureFlagsArray[@]}" || fail - - eval "$postConfigure" -} - - -configurePhase() { - header "configuring" - startLog "configure" - configureW - stopLog - stopNest -} - - -buildW() { - if test -n "$buildPhase"; then - eval "$buildPhase" - return - fi - - eval "$preBuild" - - echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}" - make \ - $makeFlags "${makeFlagsArray[@]}" \ - $buildFlags "${buildFlagsArray[@]}" || fail - - eval "$postBuild" -} - - -buildPhase() { - if test "$dontBuild" = 1; then - return - fi - header "building" - startLog "build" - buildW - stopLog - stopNest -} - - -checkW() { - if test -n "$checkPhase"; then - eval "$checkPhase" - return - fi - - if test -z "$checkTarget"; then - checkTarget="check" - fi - - echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}" - make \ - $makeFlags "${makeFlagsArray[@]}" \ - $checkFlags "${checkFlagsArray[@]}" $checkTarget || fail -} - - -checkPhase() { - if test "$doCheck" != 1; then - return - fi - header "checking" - startLog "check" - checkW - stopLog - stopNest -} - - -patchELF() { - # Patch all ELF executables and shared libraries. - header "patching ELF executables and libraries" - find "$prefix" \( \ - \( -type f -a -name "*.so*" \) -o \ - \( -type f -a -perm +0100 \) \ - \) -print -exec patchelf --shrink-rpath {} \; - stopNest -} - - -installW() { - if test -n "$installPhase"; then - eval "$installPhase" - return - fi - - eval "$preInstall" - - ensureDir "$prefix" - - if test -z "$installCommand"; then - if test -z "$installTargets"; then - installTargets=install - fi - echo "install flags: $installTargets $makeFlags ${makeFlagsArray[@]} $installFlags ${installFlagsArray[@]}" - make $installTargets \ - $makeFlags "${makeFlagsArray[@]}" \ - $installFlags "${installFlagsArray[@]}" || fail - else - eval "$installCommand" - fi - - eval "$postInstall" -} - - -installPhase() { - if test "$dontInstall" = 1; then - return - fi - header "installing" - startLog "install" - installW - stopLog - stopNest -} - - -# The fixup phase performs generic, package-independent, Nix-related -# stuff, like running patchelf and setting the -# propagated-build-inputs. It should rarely be overriden. -fixupW() { - if test -n "$fixupPhase"; then - eval "$fixupPhase" - return - fi - - eval "$preFixup" - - forceShare=${forceShare:=man doc info} - if test -n "$forceShare"; then - for d in $forceShare; do - if test -d "$prefix/$d"; then - if test -d "$prefix/share/$d"; then - echo "Both $d/ and share/$d/ exists!" - else - echo Fixing location of $d/ subdirectory - ensureDir $prefix/share - if test -w $prefix/share; then - mv -v $prefix/$d $prefix/share - ln -sv share/$d $prefix - fi - fi - else - echo "No $d/ subdirectory, skipping." - fi - done; - fi - - -# TODO : strip _only_ ELF executables, and return || fail here... - if test -z "$dontStrip"; then - echo "Stripping debuging symbols from files in" - stripDirs "${stripDebugList:-lib}" -S - echo "Stripping all symbols from files in" - stripDirs "${stripAllList:-bin sbin}" -s - fi - - if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then - patchELF "$prefix" - fi - - if test -n "$propagatedBuildInputs"; then - ensureDir "$out/nix-support" - echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" - fi - - if test -n "$setupHook"; then - ensureDir "$out/nix-support" - substituteAll "$setupHook" "$out/nix-support/setup-hook" - fi - - eval "$postFixup" -} - - -fixupPhase() { - if test "$dontFixup" = 1; then - return - fi - header "post-installation fixup" - startLog "fixup" - fixupW - stopLog - stopNest -} - - -distW() { - if test -n "$distPhase"; then - eval "$distPhase" - return - fi - - eval "$preDist" - - if test -z "$distTarget"; then - distTarget="dist" - fi - - echo "dist flags: $distFlags ${distFlagsArray[@]}" - make $distFlags "${distFlagsArray[@]}" $distTarget || fail - - if test "$dontCopyDist" != 1; then - ensureDir "$out/tarballs" - - if test -z "$tarballs"; then - tarballs="*.tar.gz" - fi - - # Note: don't quote $tarballs, since we explicitly permit - # wildcards in there. - cp -pvd $tarballs $out/tarballs - fi - - eval "$postDist" -} - - -distPhase() { - if test "$doDist" != 1; then - return - fi - header "creating distribution" - startLog "dist" - distW - stopLog - stopNest -} - - -genericBuild() { - header "building $out" - - if test -n "$buildCommand"; then - eval "$buildCommand" - return - fi - - if test -z "$phases"; then - phases="unpackPhase patchPhase configurePhase buildPhase checkPhase \ - installPhase fixupPhase distPhase"; - fi - - for i in $phases; do - dumpVars - eval "$i" - done - - stopNest -} - - -dumpVars diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh new file mode 120000 index 000000000000..a645eb3092be --- /dev/null +++ b/pkgs/stdenv/generic/setup-new-2.sh @@ -0,0 +1 @@ +setup.sh \ No newline at end of file diff --git a/pkgs/stdenv/generic/setup-new.sh b/pkgs/stdenv/generic/setup-new.sh deleted file mode 100644 index 68812e428717..000000000000 --- a/pkgs/stdenv/generic/setup-new.sh +++ /dev/null @@ -1,830 +0,0 @@ -set -e - -test -z $NIX_GCC && NIX_GCC=@gcc@ - - -# Set up the initial path. -PATH= -for i in $NIX_GCC @initialPath@; do - PATH=$PATH${PATH:+:}$i/bin -done - -if test "$NIX_DEBUG" = "1"; then - echo "Initial path: $PATH" -fi - - -# Execute the pre-hook. -export SHELL=@shell@ -if test -z "$shell"; then - export shell=@shell@ -fi -param1=@param1@ -param2=@param2@ -param3=@param3@ -param4=@param4@ -param5=@param5@ -if test -n "@preHook@"; then - source @preHook@ -fi - - -# Check that the pre-hook initialised SHELL. -if test -z "$SHELL"; then echo "SHELL not set"; exit 1; fi - - -# Hack: run gcc's setup hook. -envHooks=() -if test -f $NIX_GCC/nix-support/setup-hook; then - source $NIX_GCC/nix-support/setup-hook -fi - - -# Ensure that the given directories exists. -ensureDir() { - local dir - for dir in "$@"; do - if ! test -x "$dir"; then mkdir -p "$dir"; fi - done -} - - -# Called when some build action fails. If $succeedOnFailure is set, -# create the file `$out/nix-support/failed' to signal failure, and -# exit normally. Otherwise, exit with failure. -fail() { - exitCode=$? - if test "$succeedOnFailure" = 1; then - ensureDir "$out/nix-support" - touch "$out/nix-support/failed" - exit 0 - else - exit $? - fi -} - - -# Allow the caller to augment buildInputs (it's not always possible to -# do this before the call to setup.sh, since the PATH is empty at that -# point; here we have a basic Unix environment). -eval "$addInputsHook" - - -# Recursively find all build inputs. -findInputs() -{ - local pkg=$1 - - case $pkgs in - *\ $pkg\ *) - return 0 - ;; - esac - - pkgs="$pkgs $pkg " - - if test -f $pkg/nix-support/setup-hook; then - source $pkg/nix-support/setup-hook - fi - - if test -f $pkg/nix-support/propagated-build-inputs; then - for i in $(cat $pkg/nix-support/propagated-build-inputs); do - findInputs $i - done - fi -} - -pkgs="" -if test -n "$buildinputs"; then - buildInputs="$buildinputs" # compatibility -fi -for i in $buildInputs $propagatedBuildInputs; do - findInputs $i -done - - -# Set the relevant environment variables to point to the build inputs -# found above. -addToEnv() -{ - local pkg=$1 - - if test "$ignoreFailedInputs" != "1" -a -e $1/nix-support/failed; then - echo "failed input $1" >&2 - fail - fi - - if test -d $1/bin; then - export _PATH=$_PATH${_PATH:+:}$1/bin - fi - - for i in "${envHooks[@]}"; do - $i $pkg - done -} - -for i in $pkgs; do - addToEnv $i -done - - -# Add the output as an rpath. -if test "$NIX_NO_SELF_RPATH" != "1"; then - export NIX_LDFLAGS="-rpath $out/lib $NIX_LDFLAGS" -fi - - -# Strip debug information by default. -if test -z "$NIX_STRIP_DEBUG"; then - export NIX_STRIP_DEBUG=1 - export NIX_CFLAGS_STRIP="-g0 -Wl,--strip-debug" -fi - - -# Do we know where the store is? This is required for purity checking. -if test -z "$NIX_STORE"; then - echo "Error: you have an old version of Nix that does not set the" \ - "NIX_STORE variable. Please upgrade." >&2 - exit 1 -fi - - -# We also need to know the root of the build directory for purity checking. -if test -z "$NIX_BUILD_TOP"; then - echo "Error: you have an old version of Nix that does not set the" \ - "NIX_BUILD_TOP variable. Please upgrade." >&2 - exit 1 -fi - - -# Set the TZ (timezone) environment variable, otherwise commands like -# `date' will complain (e.g., `Tue Mar 9 10:01:47 Local time zone must -# be set--see zic manual page 2004'). -export TZ=UTC - - -# Set the prefix. This is generally $out, but it can be overriden, -# for instance if we just want to perform a test build/install to a -# temporary location and write a build report to $out. -if test -z "$prefix"; then - prefix="$out"; -fi - -if test "$useTempPrefix" = "1"; then - prefix="$NIX_BUILD_TOP/tmp_prefix"; -fi - - -# Execute the post-hook. -if test -n "@postHook@"; then - source @postHook@ -fi - -PATH=$_PATH${_PATH:+:}$PATH -if test "$NIX_DEBUG" = "1"; then - echo "Final path: $PATH" -fi - - -###################################################################### -# Textual substitution functions. - - -# Some disgusting hackery to escape replacements in Sed substitutions. -# We should really have a tool that replaces literal values by other -# literal values, without any need for escaping. -escapeSed() { - local s="$1" - # The `tr' hack is to escape newlines. Sed handles newlines very - # badly, so we just replace newlines with the magic character 0xff - # (377 octal). So don't use that character in replacements :-P - echo -n "$1" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g' -} - - -substitute() { - local input="$1" - local output="$2" - - local -a params=("$@") - - local sedScript=$NIX_BUILD_TOP/.sedargs - rm -f $sedScript - touch $sedScript - - local n p pattern replacement varName - - for ((n = 2; n < ${#params[*]}; n += 1)); do - p=${params[$n]} - - if test "$p" = "--replace"; then - pattern="${params[$((n + 1))]}" - replacement="${params[$((n + 2))]}" - n=$((n + 2)) - fi - - if test "$p" = "--subst-var"; then - varName="${params[$((n + 1))]}" - pattern="@$varName@" - replacement="${!varName}" - n=$((n + 1)) - fi - - if test "$p" = "--subst-var-by"; then - pattern="@${params[$((n + 1))]}@" - replacement="${params[$((n + 2))]}" - n=$((n + 2)) - fi - - replacement="$(escapeSed "$replacement")" - - echo "s^$pattern^$replacement^g" >> $sedScript - done - - sed -f $sedScript < "$input" > "$output".tmp - if test -x "$output"; then - chmod +x "$output".tmp - fi - mv -f "$output".tmp "$output" -} - - -substituteInPlace() { - local fileName="$1" - shift - substitute "$fileName" "$fileName" "$@" -} - - -substituteAll() { - local input="$1" - local output="$2" - - # Select all environment variables that start with a lowercase character. - for envVar in $(env | sed "s/^[^a-z].*//" | sed "s/^\([^=]*\)=.*/\1/"); do - if test "$NIX_DEBUG" = "1"; then - echo "$envVar -> ${!envVar}" - fi - args="$args --subst-var $envVar" - done - - substitute "$input" "$output" $args -} - - -###################################################################### -# What follows is the generic builder. - - -nestingLevel=0 - -startNest() { - nestingLevel=$(($nestingLevel + 1)) - echo -en "\e[$1p" -} - -stopNest() { - nestingLevel=$(($nestingLevel - 1)) - echo -en "\e[q" -} - -header() { - startNest "$2" - echo "$1" -} - -# Make sure that even when we exit abnormally, the original nesting -# level is properly restored. -closeNest() { - while test $nestingLevel -gt 0; do - stopNest - done -} - -trap "closeNest" EXIT - - -# This function is useful for debugging broken Nix builds. It dumps -# all environment variables to a file `env-vars' in the build -# directory. If the build fails and the `-K' option is used, you can -# then go to the build directory and source in `env-vars' to reproduce -# the environment used for building. -dumpVars() { - if test "$noDumpEnvVars" != "1"; then - export > $NIX_BUILD_TOP/env-vars - fi -} - - -# Redirect stdout/stderr to a named pipe connected to a `tee' process -# that writes the specified file (and also to our original stdout). -# The original stdout is saved in descriptor 3. -startLog() { - local logFile=${logNr}_$1 - logNr=$((logNr + 1)) - if test "$logPhases" = 1; then - ensureDir $logDir - - exec 3>&1 - - if test "$dontLogThroughTee" != 1; then - # This required named pipes (fifos). - logFifo=$NIX_BUILD_TOP/log_fifo - test -p $logFifo || mkfifo $logFifo - startLogWrite "$logDir/$logFile" "$logFifo" - exec > $logFifo 2>&1 - else - exec > $logDir/$logFile 2>&1 - fi - fi -} - -# Factored into a separate function so that it can be overriden. -startLogWrite() { - tee "$1" < "$2" & - logWriterPid=$! -} - - -if test -z "$logDir"; then - logDir=$out/log -fi - -logNr=0 - -# Restore the original stdout/stderr. -stopLog() { - if test "$logPhases" = 1; then - exec >&3 2>&1 - - # Wait until the tee process has died. Otherwise output from - # different phases may be mixed up. - if test -n "$logWriterPid"; then - wait $logWriterPid - logWriterPid= - rm $logFifo - fi - fi -} - - -# Utility function: return the base name of the given path, with the -# prefix `HASH-' removed, if present. -stripHash() { - strippedName=$(basename $1); - if echo "$strippedName" | grep -q '^[a-z0-9]\{32\}-'; then - strippedName=$(echo "$strippedName" | cut -c34-) - fi -} - - -unpackFile() { - local file=$1 - local cmd - - header "unpacking source archive $file" 3 - - case $file in - *.tar) - tar xvf $file || fail - ;; - *.tar.gz | *.tgz | *.tar.Z) - gunzip < $file | tar xvf - || fail - ;; - *.tar.bz2 | *.tbz2) - bunzip2 < $file | tar xvf - || fail - ;; - *.zip) - unzip $file || fail - ;; - *) - if test -d "$file"; then - stripHash $file - cp -prvd $file $strippedName || fail - else - if test -n "$findUnpacker"; then - $findUnpacker $1; - fi - if test -z "$unpackCmd"; then - echo "source archive $file has unknown type" - exit 1 - fi - eval "$unpackCmd" || fail - fi - ;; - esac - - stopNest -} - - -unpackW() { - if test -n "$unpackPhase"; then - eval "$unpackPhase" - return - fi - - if test -z "$srcs"; then - if test -z "$src"; then - echo 'variable $src or $srcs should point to the source' - exit 1 - fi - srcs="$src" - fi - - # To determine the source directory created by unpacking the - # source archives, we record the contents of the current - # directory, then look below which directory got added. Yeah, - # it's rather hacky. - local dirsBefore="" - for i in *; do - if test -d "$i"; then - dirsBefore="$dirsBefore $i " - fi - done - - # Unpack all source archives. - for i in $srcs; do - unpackFile $i - done - - # Find the source directory. - if test -n "$setSourceRoot"; then - eval "$setSourceRoot" - else - sourceRoot= - for i in *; do - if test -d "$i"; then - case $dirsBefore in - *\ $i\ *) - ;; - *) - if test -n "$sourceRoot"; then - echo "unpacker produced multiple directories" - exit 1 - fi - sourceRoot=$i - ;; - esac - fi - done - fi - - if test -z "$sourceRoot"; then - echo "unpacker appears to have produced no directories" - exit 1 - fi - - echo "source root is $sourceRoot" - - # By default, add write permission to the sources. This is often - # necessary when sources have been copied from other store - # locations. - if test "dontMakeSourcesWritable" != 1; then - chmod -R +w $sourceRoot - fi - - eval "$postUnpack" -} - - -unpackPhase() { - header "unpacking sources" - startLog "unpack" - unpackW - stopLog - stopNest -} - - -patchW() { - if test -n "$patchPhase"; then - eval "$patchPhase" - return - fi - - if test -z "$patchFlags"; then - patchFlags="-p1" - fi - - for i in $patches; do - header "applying patch $i" 3 - local uncompress=cat - case $i in - *.gz) - uncompress=gunzip - ;; - *.bz2) - uncompress=bunzip2 - ;; - esac - $uncompress < $i | patch $patchFlags || fail - stopNest - done -} - - -patchPhase() { - if test -z "$patchPhase" -a -z "$patches"; then return; fi - header "patching sources" - startLog "patch" - patchW - stopLog - stopNest -} - - -fixLibtool() { - sed 's^eval sys_lib_.*search_path=.*^^' < $1 > $1.tmp - mv $1.tmp $1 -} - - -configureW() { - if test -n "$configurePhase"; then - eval "$configurePhase" - return - fi - - eval "$preConfigure" - - if test -z "$configureScript"; then - configureScript=./configure - if ! test -x $configureScript; then - echo "no configure script, doing nothing" - return - fi - fi - - if test -z "$dontFixLibtool"; then - for i in $(find . -name "ltmain.sh"); do - echo "fixing libtool script $i" - fixLibtool $i - done - fi - - if test -z "$dontAddPrefix"; then - configureFlags="--prefix=$prefix $configureFlags" - fi - - echo "configure flags: $configureFlags ${configureFlagsArray[@]}" - $configureScript $configureFlags"${configureFlagsArray[@]}" || fail - - eval "$postConfigure" -} - - -configurePhase() { - header "configuring" - startLog "configure" - configureW - stopLog - stopNest -} - - -buildW() { - if test -n "$buildPhase"; then - eval "$buildPhase" - return - fi - - eval "$preBuild" - - echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}" - make \ - $makeFlags "${makeFlagsArray[@]}" \ - $buildFlags "${buildFlagsArray[@]}" || fail - - eval "$postBuild" -} - - -buildPhase() { - if test "$dontBuild" = 1; then - return - fi - header "building" - startLog "build" - buildW - stopLog - stopNest -} - - -checkW() { - if test -n "$checkPhase"; then - eval "$checkPhase" - return - fi - - if test -z "$checkTarget"; then - checkTarget="check" - fi - - echo "check flags: $makeFlags ${makeFlagsArray[@]} $checkFlags ${checkFlagsArray[@]}" - make \ - $makeFlags "${makeFlagsArray[@]}" \ - $checkFlags "${checkFlagsArray[@]}" $checkTarget || fail -} - - -checkPhase() { - if test "$doCheck" != 1; then - return - fi - header "checking" - startLog "check" - checkW - stopLog - stopNest -} - - -patchELF() { - # Patch all ELF executables and shared libraries. - header "patching ELF executables and libraries" - find "$prefix" \( \ - \( -type f -a -name "*.so*" \) -o \ - \( -type f -a -perm +0100 \) \ - \) -print -exec patchelf --shrink-rpath {} \; - stopNest -} - - -installW() { - if test -n "$installPhase"; then - eval "$installPhase" - return - fi - - eval "$preInstall" - - ensureDir "$prefix" - - if test -z "$installCommand"; then - if test -z "$installTargets"; then - installTargets=install - fi - echo "install flags: $installTargets $makeFlags ${makeFlagsArray[@]} $installFlags ${installFlagsArray[@]}" - make $installTargets \ - $makeFlags "${makeFlagsArray[@]}" \ - $installFlags "${installFlagsArray[@]}" || fail - else - eval "$installCommand" - fi - - eval "$postInstall" -} - - -installPhase() { - if test "$dontInstall" = 1; then - return - fi - header "installing" - startLog "install" - installW - stopLog - stopNest -} - - -# The fixup phase performs generic, package-independent, Nix-related -# stuff, like running patchelf and setting the -# propagated-build-inputs. It should rarely be overriden. -fixupW() { - if test -n "$fixupPhase"; then - eval "$fixupPhase" - return - fi - - eval "$preFixup" - -# TODO : strip _only_ ELF executables, and return || fail here... - if test -z "$dontStrip"; then - test -d "$prefix/lib" && stripDebug="$prefix/lib" - - if test -n "$stripDebug"; then - find "$stripDebug" -type f -print0 | - xargs -0 strip --strip-debug --verbose || true - fi - - test -d "$prefix/bin" && stripAll="$prefix/bin" - test -d "$prefix/sbin" && stripAll="${stripAll} $prefix/sbin" - if test -n "$stripAll"; then - find "$prefix/bin" "$prefix/sbin" -type f -print0 | - xargs -0 strip --strip-all --verbose || true - fi - fi - - if test -z "$dontFixupShare"; then - for dir in doc info man; do - if test -d "$prefix/$dir"; then - if test -d "$prefix/share/$dir"; then - echo Both "$prefix/$dir" and "$prefix/share/$dir" exists! - fail - else - echo Fixing location of $dir/ subdirectory - ensureDir "$prefix/share" - mv -v "$prefix/$dir" "$prefix/share" - ln -sv "share/$dir" "$prefix" - fi - fi - done - fi - - if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then - patchELF "$prefix" - fi - - if test -n "$propagatedBuildInputs"; then - ensureDir "$out/nix-support" - echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" - fi - - eval "$postFixup" -} - - -fixupPhase() { - if test "$dontFixup" = 1; then - return - fi - header "post-installation fixup" - startLog "fixup" - fixupW - stopLog - stopNest -} - - -distW() { - if test -n "$distPhase"; then - eval "$distPhase" - return - fi - - eval "$preDist" - - if test -z "$distTarget"; then - distTarget="dist" - fi - - echo "dist flags: $distFlags ${distFlagsArray[@]}" - make $distFlags "${distFlagsArray[@]}" $distTarget || fail - - if test "$dontCopyDist" != 1; then - ensureDir "$out/tarballs" - - if test -z "$tarballs"; then - tarballs="*.tar.gz" - fi - - # Note: don't quote $tarballs, since we explicitly permit - # wildcards in there. - cp -pvd $tarballs $out/tarballs - fi - - eval "$postDist" -} - - -distPhase() { - if test "$doDist" != 1; then - return - fi - header "creating distribution" - startLog "dist" - distW - stopLog - stopNest -} - - -genericBuild() { - header "building $out" - - if test -n "$buildCommand"; then - eval "$buildCommand" - return - fi - - unpackPhase - cd $sourceRoot - - if test -z "$phases"; then - phases="patchPhase configurePhase buildPhase checkPhase \ - installPhase fixupPhase distPhase"; - fi - - for i in $phases; do - dumpVars - eval "$i" - done - - stopNest -} - - -dumpVars diff --git a/pkgs/stdenv/generic/setup-new.sh b/pkgs/stdenv/generic/setup-new.sh new file mode 120000 index 000000000000..a645eb3092be --- /dev/null +++ b/pkgs/stdenv/generic/setup-new.sh @@ -0,0 +1 @@ +setup.sh \ No newline at end of file diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index b6814aa410f9..5e330846a4d6 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -2,6 +2,31 @@ set -e test -z $NIX_GCC && NIX_GCC=@gcc@ +if [ -z ${system##*cygwin*} ]; then + PATH_DELIMITER=';' +else + PATH_DELIMITER=':' +fi + +addToSearchPathWithCustomDelimiter() { + local delimiter=$1 + local varName=$2 + local needDir=$3 + local addDir=${4:-$needDir} + local prefix=$5 + if [ -d $prefix$needDir ]; then + if [ -z ${!varName} ]; then + eval export ${varName}=${prefix}$addDir + else + eval export ${varName}=${!varName}${delimiter}${prefix}$addDir + fi + fi +} + +addToSearchPath() +{ + addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" +} # Set up the initial path. PATH= @@ -39,7 +64,7 @@ if test -f $NIX_GCC/nix-support/setup-hook; then source $NIX_GCC/nix-support/setup-hook fi - + # Ensure that the given directories exists. ensureDir() { local dir @@ -48,6 +73,17 @@ ensureDir() { done } +installBin() { + ensureDir $out/bin + cp "$@" $out/bin +} + +assertEnvExists(){ + if test -z "${!1}"; then + msg=${2:-error: assertion failed: env var $1 is required} + echo $msg >&2; exit 1 + fi +} # Called when some build action fails. If $succeedOnFailure is set, # create the file `$out/nix-support/failed' to signal failure, and @@ -80,13 +116,13 @@ findInputs() return 0 ;; esac - + pkgs="$pkgs $pkg " if test -f $pkg/nix-support/setup-hook; then source $pkg/nix-support/setup-hook fi - + if test -f $pkg/nix-support/propagated-build-inputs; then for i in $(cat $pkg/nix-support/propagated-build-inputs); do findInputs $i @@ -141,20 +177,15 @@ if test -z "$NIX_STRIP_DEBUG"; then fi -# Do we know where the store is? This is required for purity checking. -if test -z "$NIX_STORE"; then - echo "Error: you have an old version of Nix that does not set the" \ - "NIX_STORE variable. Please upgrade." >&2 - exit 1 -fi +assertEnvExists NIX_STORE \ + "Error: you have an old version of Nix that does not set the + NIX_STORE variable. This is required for purity checking. + Please upgrade." - -# We also need to know the root of the build directory for purity checking. -if test -z "$NIX_BUILD_TOP"; then - echo "Error: you have an old version of Nix that does not set the" \ - "NIX_BUILD_TOP variable. Please upgrade." >&2 - exit 1 -fi +assertEnvExists NIX_BUILD_TOP \ + "Error: you have an old version of Nix that does not set the + NIX_BUILD_TOP variable. This is required for purity checking. + Please upgrade." # Set the TZ (timezone) environment variable, otherwise commands like @@ -185,11 +216,40 @@ if test "$NIX_DEBUG" = "1"; then echo "Final path: $PATH" fi +stripDirs() { + local dirs="$1" + local stripFlags="$2" + local dirsNew= + + for d in ${dirs}; do + if test -d "$prefix/$d"; then + dirsNew="${dirsNew} $prefix/$d " + fi + done + dirs=${dirsNew} + + if test -n "${dirs}"; then + echo $dirs + find $dirs -type f -print0 | xargs -0 strip $stripFlags || true + fi +} ###################################################################### # Textual substitution functions. +# Some disgusting hackery to escape replacements in Sed substitutions. +# We should really have a tool that replaces literal values by other +# literal values, without any need for escaping. +escapeSed() { + local s="$1" + # The `tr' hack is to escape newlines. Sed handles newlines very + # badly, so we just replace newlines with the magic character 0xff + # (377 octal). So don't use that character in replacements :-P + echo -n "$1" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g' +} + + substitute() { local input="$1" local output="$2" @@ -201,31 +261,32 @@ substitute() { touch $sedScript local n p pattern replacement varName - + for ((n = 2; n < ${#params[*]}; n += 1)); do p=${params[$n]} if test "$p" = "--replace"; then - pattern=${params[$((n + 1))]} - replacement=${params[$((n + 2))]} + pattern="${params[$((n + 1))]}" + replacement="${params[$((n + 2))]}" n=$((n + 2)) - echo "s^$pattern^$replacement^g" >> $sedScript - sedArgs=("${sedArgs[@]}" "-e" ) fi if test "$p" = "--subst-var"; then - varName=${params[$((n + 1))]} + varName="${params[$((n + 1))]}" + pattern="@$varName@" + replacement="${!varName}" n=$((n + 1)) - echo "s^@${varName}@^${!varName}^g" >> $sedScript fi if test "$p" = "--subst-var-by"; then - varName=${params[$((n + 1))]} - replacement=${params[$((n + 2))]} + pattern="@${params[$((n + 1))]}@" + replacement="${params[$((n + 2))]}" n=$((n + 2)) - echo "s^@${varName}@^$replacement^g" >> $sedScript fi + replacement="$(escapeSed "$replacement")" + + echo "s^$pattern^$replacement^g" >> $sedScript done sed -f $sedScript < "$input" > "$output".tmp @@ -246,7 +307,7 @@ substituteInPlace() { substituteAll() { local input="$1" local output="$2" - + # Select all environment variables that start with a lowercase character. for envVar in $(env | sed "s/^[^a-z].*//" | sed "s/^\([^=]*\)=.*/\1/"); do if test "$NIX_DEBUG" = "1"; then @@ -256,7 +317,7 @@ substituteAll() { done substitute "$input" "$output" $args -} +} ###################################################################### @@ -476,11 +537,13 @@ unpackW() { unpackPhase() { + sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource does'nt set sourceRoot header "unpacking sources" startLog "unpack" unpackW stopLog stopNest + cd $sourceRoot } @@ -551,7 +614,7 @@ configureW() { fi if test -z "$dontAddPrefix"; then - configureFlags="--prefix=$prefix $configureFlags" + configureFlags="${prefixKey:---prefix=}$prefix $configureFlags" fi echo "configure flags: $configureFlags ${configureFlagsArray[@]}" @@ -577,7 +640,7 @@ buildW() { fi eval "$preBuild" - + echo "make flags: $makeFlags ${makeFlagsArray[@]} $buildFlags ${buildFlagsArray[@]}" make \ $makeFlags "${makeFlagsArray[@]}" \ @@ -688,9 +751,33 @@ fixupW() { eval "$preFixup" - if test -z "$dontStrip" -a "$NIX_STRIP_DEBUG" = 1; then - find "$prefix" -name "*.a" -exec echo stripping {} \; \ - -exec strip -S {} \; || fail + forceShare=${forceShare:=man doc info} + if test -n "$forceShare"; then + for d in $forceShare; do + if test -d "$prefix/$d"; then + if test -d "$prefix/share/$d"; then + echo "Both $d/ and share/$d/ exists!" + else + echo Fixing location of $d/ subdirectory + ensureDir $prefix/share + if test -w $prefix/share; then + mv -v $prefix/$d $prefix/share + ln -sv share/$d $prefix + fi + fi + else + echo "No $d/ subdirectory, skipping." + fi + done; + fi + + +# TODO : strip _only_ ELF executables, and return || fail here... + if test -z "$dontStrip"; then + echo "Stripping debuging symbols from files in" + stripDirs "${stripDebugList:-lib}" -S + echo "Stripping all symbols from files in" + stripDirs "${stripAllList:-bin sbin}" -s fi if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then @@ -702,6 +789,11 @@ fixupW() { echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" fi + if test -n "$setupHook"; then + ensureDir "$out/nix-support" + substituteAll "$setupHook" "$out/nix-support/setup-hook" + fi + eval "$postFixup" } @@ -725,7 +817,7 @@ distW() { fi eval "$preDist" - + if test -z "$distTarget"; then distTarget="dist" fi @@ -769,11 +861,8 @@ genericBuild() { return fi - unpackPhase - cd $sourceRoot - if test -z "$phases"; then - phases="patchPhase configurePhase buildPhase checkPhase \ + phases="unpackPhase patchPhase configurePhase buildPhase checkPhase \ installPhase fixupPhase distPhase"; fi @@ -781,7 +870,7 @@ genericBuild() { dumpVars eval "$i" done - + stopNest } From a4326fe9dc2ce4b4f63af3b40c1b3b7abe3032c3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:34:34 +0000 Subject: [PATCH 015/320] Removed references to setup-new-2.sh and setup-new.sh from all-packages.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=9737 --- pkgs/development/compilers/ocaml/default.nix | 2 +- pkgs/top-level/all-packages.nix | 29 +++++++------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/pkgs/development/compilers/ocaml/default.nix b/pkgs/development/compilers/ocaml/default.nix index 74d1378968cf..c972a992d5f0 100644 --- a/pkgs/development/compilers/ocaml/default.nix +++ b/pkgs/development/compilers/ocaml/default.nix @@ -3,5 +3,5 @@ rec { default = v_3_09_1; v_3_08_0 = import ./3.08.0.nix (args // {stdenv = args.stdenv34;}); v_3_09_1 = import ./3.09.1.nix args; - v_3_10_0 = import ./3.10.0.nix (args // {stdenv = args.stdenvUsingSetupNew2;}); + v_3_10_0 = import ./3.10.0.nix args; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fe649261641d..c6b48e090508 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -297,7 +297,7 @@ rec { stdenvNewSetupScript = overrideSetup stdenv ../stdenv/generic/setup-new.sh; substituteAll = import ../build-support/substitute/substitute-all.nix { - stdenv = stdenvNewSetupScript; + inherit stdenv; }; nukeReferences = import ../build-support/nuke-references/default.nix { @@ -667,8 +667,7 @@ rec { }; shebangfix = import ../tools/misc/shebangfix { - inherit perl; - stdenv = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh; + inherit perl stdenv; }; smartmontools = import ../tools/system/smartmontools { @@ -939,23 +938,20 @@ rec { # This new ghc stuff is under heavy development and might change ! - # usage: see ghcPkgUtil.sh - use setup-new2 because of PATH_DELIMITER ghcPkgUtil = runCommand "ghcPkgUtil-internal" { ghcPkgUtil = ../development/libraries/haskell/generic/ghcPkgUtil.sh; } "mkdir -p $out/nix-support; cp $ghcPkgUtil \$out/nix-support/setup-hook;"; ghcsAndLibs = recurseIntoAttrs (import ../development/compilers/ghcs { - inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline; + inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline stdenv; inherit ghcPkgUtil; - stdenv = stdenvUsingSetupNew2; lib = lib_unstable; }); # creates ghc-X-wl wich adds the passed libraries to the env var GHC_PACKAGE_PATH createGhcWrapper = { ghcPackagedLibs ? false, ghc, libraries, name, suffix ? "ghc_wrapper_${ghc.name}" } : import ../development/compilers/ghc/createGhcWrapper { - inherit ghcPackagedLibs ghc name suffix libraries ghcPkgUtil; - stdenv = stdenvUsingSetupNew2; + inherit ghcPackagedLibs ghc name suffix libraries ghcPkgUtil stdenv; }; # the wrappers basically does one thing: It defines GHC_PACKAGE_PATH before calling ghc{i,-pkg} @@ -1078,7 +1074,7 @@ rec { ocaml = getVersion "ocaml" ocaml_alts; ocaml_alts = import ../development/compilers/ocaml { - inherit fetchurl stdenv x11 ncurses stdenvUsingSetupNew2; + inherit fetchurl stdenv x11 ncurses; stdenv34 = overrideGCC stdenv gcc34; }; @@ -1204,9 +1200,8 @@ rec { # This expression is a quick hack now. But perhaps it helps you adding the configuration flags you need? /* php_unstable = (import ../development/interpreters/php_configurable) { - inherit mkDerivationByConfiguration; + inherit mkDerivationByConfiguration stdenv; lib = lib_unstable; - stdenv = stdenvUsingSetupNew2; inherit fetchurl flex bison apacheHttpd mysql; # gettext; inherit libxml2; }; @@ -1686,10 +1681,9 @@ rec { }; facile = import ../development/libraries/facile { - inherit fetchurl; + inherit fetchurl stdenv; # Actually, we don't need this version but we need native-code compilation ocaml = ocaml_alts.v_3_10_0; - stdenv = stdenvUsingSetupNew2; }; ffmpeg = import ../development/libraries/ffmpeg { @@ -2194,12 +2188,11 @@ rec { qt4 = getVersion "qt4" qt4_alts; qt4_alts = import ../development/libraries/qt-4 { inherit fetchurl fetchsvn zlib libjpeg libpng which mysql mesa openssl cups dbus - fontconfig freetype pkgconfig libtiff; + fontconfig freetype pkgconfig libtiff stdenv; inherit (xlibs) xextproto libXft libXrender libXrandr randrproto libXmu libXinerama xineramaproto libXcursor libICE libSM libX11 libXext inputproto fixesproto libXfixes; inherit (gnome) glib; - stdenv = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh; openglSupport = mesaSupported; mysqlSupport = true; }; @@ -3809,8 +3802,7 @@ rec { }; jedit = import ../applications/jedit { - inherit fetchurl ant; - stdenv = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh; + inherit fetchurl ant stdenv; }; joe = import ../applications/editors/joe { @@ -4376,8 +4368,7 @@ rec { shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib - openbabel ocaml facile; - stdenv = stdenvUsingSetupNew2; + openbabel ocaml facile stdenv; cdparanoia = cdparanoiaIII; inherit (xlibs) inputproto kbproto scrnsaverproto xextproto xf86miscproto From f2b2932ee24ec5d3af2fafa40224ce0f4c8989d1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:34:49 +0000 Subject: [PATCH 016/320] Spacing in setup.sh svn path=/nixpkgs/branches/stdenv-updates/; revision=9738 --- pkgs/stdenv/generic/setup.sh | 106 +++++++++++++++++------------------ 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 5e330846a4d6..8d8be1ece814 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -9,23 +9,23 @@ else fi addToSearchPathWithCustomDelimiter() { - local delimiter=$1 - local varName=$2 - local needDir=$3 - local addDir=${4:-$needDir} - local prefix=$5 - if [ -d $prefix$needDir ]; then - if [ -z ${!varName} ]; then - eval export ${varName}=${prefix}$addDir - else - eval export ${varName}=${!varName}${delimiter}${prefix}$addDir - fi - fi + local delimiter=$1 + local varName=$2 + local needDir=$3 + local addDir=${4:-$needDir} + local prefix=$5 + if [ -d $prefix$needDir ]; then + if [ -z ${!varName} ]; then + eval export ${varName}=${prefix}$addDir + else + eval export ${varName}=${!varName}${delimiter}${prefix}$addDir + fi + fi } addToSearchPath() { - addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" + addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" } # Set up the initial path. @@ -217,21 +217,21 @@ if test "$NIX_DEBUG" = "1"; then fi stripDirs() { - local dirs="$1" - local stripFlags="$2" - local dirsNew= + local dirs="$1" + local stripFlags="$2" + local dirsNew= - for d in ${dirs}; do - if test -d "$prefix/$d"; then - dirsNew="${dirsNew} $prefix/$d " - fi - done - dirs=${dirsNew} + for d in ${dirs}; do + if test -d "$prefix/$d"; then + dirsNew="${dirsNew} $prefix/$d " + fi + done + dirs=${dirsNew} - if test -n "${dirs}"; then - echo $dirs - find $dirs -type f -print0 | xargs -0 strip $stripFlags || true - fi + if test -n "${dirs}"; then + echo $dirs + find $dirs -type f -print0 | xargs -0 strip $stripFlags || true + fi } ###################################################################### @@ -751,33 +751,33 @@ fixupW() { eval "$preFixup" - forceShare=${forceShare:=man doc info} - if test -n "$forceShare"; then - for d in $forceShare; do - if test -d "$prefix/$d"; then - if test -d "$prefix/share/$d"; then - echo "Both $d/ and share/$d/ exists!" - else - echo Fixing location of $d/ subdirectory - ensureDir $prefix/share - if test -w $prefix/share; then - mv -v $prefix/$d $prefix/share - ln -sv share/$d $prefix - fi - fi - else - echo "No $d/ subdirectory, skipping." - fi - done; - fi + forceShare=${forceShare:=man doc info} + if test -n "$forceShare"; then + for d in $forceShare; do + if test -d "$prefix/$d"; then + if test -d "$prefix/share/$d"; then + echo "Both $d/ and share/$d/ exists!" + else + echo Fixing location of $d/ subdirectory + ensureDir $prefix/share + if test -w $prefix/share; then + mv -v $prefix/$d $prefix/share + ln -sv share/$d $prefix + fi + fi + else + echo "No $d/ subdirectory, skipping." + fi + done; + fi # TODO : strip _only_ ELF executables, and return || fail here... if test -z "$dontStrip"; then - echo "Stripping debuging symbols from files in" - stripDirs "${stripDebugList:-lib}" -S - echo "Stripping all symbols from files in" - stripDirs "${stripAllList:-bin sbin}" -s + echo "Stripping debuging symbols from files in" + stripDirs "${stripDebugList:-lib}" -S + echo "Stripping all symbols from files in" + stripDirs "${stripAllList:-bin sbin}" -s fi if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then @@ -789,10 +789,10 @@ fixupW() { echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" fi - if test -n "$setupHook"; then - ensureDir "$out/nix-support" - substituteAll "$setupHook" "$out/nix-support/setup-hook" - fi + if test -n "$setupHook"; then + ensureDir "$out/nix-support" + substituteAll "$setupHook" "$out/nix-support/setup-hook" + fi eval "$postFixup" } From a6797a6f4e163075600fba46a82b0888431838a4 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:34:56 +0000 Subject: [PATCH 017/320] Removed setup-new-2.sh and setup-new.sh symlinks svn path=/nixpkgs/branches/stdenv-updates/; revision=9739 --- pkgs/stdenv/generic/setup-new-2.sh | 1 - pkgs/stdenv/generic/setup-new.sh | 1 - 2 files changed, 2 deletions(-) delete mode 120000 pkgs/stdenv/generic/setup-new-2.sh delete mode 120000 pkgs/stdenv/generic/setup-new.sh diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh deleted file mode 120000 index a645eb3092be..000000000000 --- a/pkgs/stdenv/generic/setup-new-2.sh +++ /dev/null @@ -1 +0,0 @@ -setup.sh \ No newline at end of file diff --git a/pkgs/stdenv/generic/setup-new.sh b/pkgs/stdenv/generic/setup-new.sh deleted file mode 120000 index a645eb3092be..000000000000 --- a/pkgs/stdenv/generic/setup-new.sh +++ /dev/null @@ -1 +0,0 @@ -setup.sh \ No newline at end of file From 3e6713db0601329de91b7c3258c9f31d6c52a9dc Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 14:35:02 +0000 Subject: [PATCH 018/320] Removed stdenvUsingSetupNew2; now stdenvNewSetupScript = stdenv svn path=/nixpkgs/branches/stdenv-updates/; revision=9740 --- pkgs/top-level/all-packages.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c6b48e090508..edb9de934b38 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -244,8 +244,6 @@ rec { } else defaultStdenv; - stdenvUsingSetupNew2 = overrideSetup stdenv ../stdenv/generic/setup-new-2.sh; - ### BUILD SUPPORT @@ -294,7 +292,7 @@ rec { writeScript = name: text: runCommand name {inherit text;} "echo -n \"$text\" > $out; chmod +x $out"; - stdenvNewSetupScript = overrideSetup stdenv ../stdenv/generic/setup-new.sh; + stdenvNewSetupScript = stdenv; substituteAll = import ../build-support/substitute/substitute-all.nix { inherit stdenv; From dd837dae4e367a2b1be102e79d2969f1b1eb40dd Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 15:17:01 +0000 Subject: [PATCH 019/320] Now all the files setup-new-2.sh, setup-new.sh and setup.sh are the same file. svn path=/nixpkgs/branches/stdenv-updates/; revision=9741 --- pkgs/stdenv/generic/setup-new-2.sh | 1 + 1 file changed, 1 insertion(+) create mode 120000 pkgs/stdenv/generic/setup-new-2.sh diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh new file mode 120000 index 000000000000..a645eb3092be --- /dev/null +++ b/pkgs/stdenv/generic/setup-new-2.sh @@ -0,0 +1 @@ +setup.sh \ No newline at end of file From 5adba2d3f3a0e2734e46dbee109beb76b2c5a39a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 15:18:56 +0000 Subject: [PATCH 020/320] Removed setup-new-2.sh and setup-new.sh symlinks svn path=/nixpkgs/branches/stdenv-updates/; revision=9742 --- pkgs/stdenv/generic/setup-new-2.sh | 1 - 1 file changed, 1 deletion(-) delete mode 120000 pkgs/stdenv/generic/setup-new-2.sh diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh deleted file mode 120000 index a645eb3092be..000000000000 --- a/pkgs/stdenv/generic/setup-new-2.sh +++ /dev/null @@ -1 +0,0 @@ -setup.sh \ No newline at end of file From 85ebf00cabb728f91c80f880a99356414cc807df Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 15:19:03 +0000 Subject: [PATCH 021/320] Changed version-related syntax in python, gettext and ocaml svn path=/nixpkgs/branches/stdenv-updates/; revision=9743 --- pkgs/development/compilers/ocaml/default.nix | 12 ++++++------ pkgs/development/interpreters/python/default.nix | 10 +++++----- pkgs/development/libraries/gettext/default.nix | 2 +- pkgs/top-level/all-packages.nix | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkgs/development/compilers/ocaml/default.nix b/pkgs/development/compilers/ocaml/default.nix index c972a992d5f0..678a0a677a23 100644 --- a/pkgs/development/compilers/ocaml/default.nix +++ b/pkgs/development/compilers/ocaml/default.nix @@ -1,7 +1,7 @@ args: -rec { - default = v_3_09_1; - v_3_08_0 = import ./3.08.0.nix (args // {stdenv = args.stdenv34;}); - v_3_09_1 = import ./3.09.1.nix args; - v_3_10_0 = import ./3.10.0.nix args; -} +args.stdenv.lib.listOfListsToAttrs [ + [ "3.08.0" (import ./3.08.0.nix (args // {stdenv = args.stdenv34;})) ] + [ "3.09.1" (import ./3.09.1.nix args) ] + [ "3.10.0" (import ./3.10.0.nix args) ] + [ "default" (import ./3.10.0.nix args) ] +] diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 3ac782e1aee3..1ca85603a1fb 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -1,5 +1,5 @@ -args: rec { - default = v_2_4; - v_2_4 = import ./2.4.nix args; - v_2_5 = import ./2.5 args; -} +args: +args.stdenv.lib.listOfListsToAttrs [ + [ "2.4" (import ./2.4.nix args) ] + [ "2.5" (import ./2.5 args) ] +] diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix index e98d365022fa..b0e64639d87d 100644 --- a/pkgs/development/libraries/gettext/default.nix +++ b/pkgs/development/libraries/gettext/default.nix @@ -1,5 +1,5 @@ args: -args.lib.listOfListsToAttrs [ +args.stdenv.lib.listOfListsToAttrs [ [ "recurseForDerivations" true ] [ "0.14.6" (import ./0.14.6.nix args) ] [ "0.15" (import ./0.15.nix args) ] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index edb9de934b38..2588306c096d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1728,7 +1728,7 @@ rec { gettext = getVersion "gettext" gettext_alts; gettext_alts = import ../development/libraries/gettext { - inherit fetchurl stdenv lib; + inherit fetchurl stdenv; }; gd = import ../development/libraries/gd { From b37d00ce1f89d4da155b6058ed0c19a06ac74d38 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 15:29:42 +0000 Subject: [PATCH 022/320] Now all the files setup-new-2.sh, setup-new.sh and setup.sh are the same file. svn path=/nixpkgs/branches/stdenv-updates/; revision=9744 --- pkgs/stdenv/generic/setup-new-2.sh | 1 + 1 file changed, 1 insertion(+) create mode 120000 pkgs/stdenv/generic/setup-new-2.sh diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh new file mode 120000 index 000000000000..a645eb3092be --- /dev/null +++ b/pkgs/stdenv/generic/setup-new-2.sh @@ -0,0 +1 @@ +setup.sh \ No newline at end of file From 784227b421247657b7a40e7ee816b2383c65ec77 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 15:29:48 +0000 Subject: [PATCH 023/320] Removed setup-new-2.sh and setup-new.sh symlinks svn path=/nixpkgs/branches/stdenv-updates/; revision=9745 --- pkgs/stdenv/generic/setup-new-2.sh | 1 - 1 file changed, 1 deletion(-) delete mode 120000 pkgs/stdenv/generic/setup-new-2.sh diff --git a/pkgs/stdenv/generic/setup-new-2.sh b/pkgs/stdenv/generic/setup-new-2.sh deleted file mode 120000 index a645eb3092be..000000000000 --- a/pkgs/stdenv/generic/setup-new-2.sh +++ /dev/null @@ -1 +0,0 @@ -setup.sh \ No newline at end of file From 76f78aaf577282acad668df5cc1187dcad9dcdd7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 17 Nov 2007 15:30:00 +0000 Subject: [PATCH 024/320] ghc upgraded to 6.8.1 svn path=/nixpkgs/branches/stdenv-updates/; revision=9746 --- .../development/compilers/ghc-6.8/default.nix | 19 +++++++++++-------- pkgs/development/compilers/ghc/boot.nix | 1 + pkgs/top-level/all-packages.nix | 7 ++++--- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pkgs/development/compilers/ghc-6.8/default.nix b/pkgs/development/compilers/ghc-6.8/default.nix index 1e1577ea2927..7588fbb13759 100644 --- a/pkgs/development/compilers/ghc-6.8/default.nix +++ b/pkgs/development/compilers/ghc-6.8/default.nix @@ -1,24 +1,27 @@ -{stdenv, fetchurl, readline, ghc, perl, m4, gmp, ncurses}: +args: with args; stdenv.mkDerivation (rec { - name = "ghc-6.8.0.20071018"; + name = "ghc-6.8.1"; homepage = "http://www.haskell.org/ghc"; src = map fetchurl [ { url = "${homepage}/dist/stable/dist/${name}-src.tar.bz2"; - md5 = "7e61bd2a55c2d6ed5a6d996d19d3f6bf"; + sha256 = "16gr19bwyjv0fmjdrsj79vqpaxxg5hasni94nwv9d6c85n5myivz"; } { url = "${homepage}/dist/stable/dist/${name}-src-extralibs.tar.bz2"; - md5 = "7b155c1d1e7daa492cc2161b3828a377"; + sha256 = "1h3nc6x4g838mdcirymadmv3fsmp1wh062syb3a8aqv6f468akvm"; } ]; - buildInputs = [ghc readline perl m4]; + buildInputs = [ghc readline perl m4 pkgconfig gtk]; + patchPhase = " + sed -e s@/bin/cat@\$(type -p cat)@ -i configure + "; setupHook = ./setup-hook.sh; meta = { - description = "The Glasgow Haskell Compiler v6.8 (snapshot)"; + description = "The Glasgow Haskell Compiler v6.8.1"; }; postInstall = " @@ -29,7 +32,7 @@ stdenv.mkDerivation (rec { cat $setupHook >> $out/nix-support/setup-hook "; - configureFlags="--with-gmp-libraries=$gmp/lib --with-readline-libraries=\"$readline/lib\""; + #configureFlags="--with-gmp-libraries=${gmp}/lib --with-readline-libraries=${readline}/lib"; # the presence of this file makes Cabal cry for happy while generating makefiles ... preConfigure = " @@ -37,5 +40,5 @@ stdenv.mkDerivation (rec { rm libraries/haskell-src/Language/Haskell/Parser.ly "; - inherit readline gmp ncurses; + dontStrip = 1; }) diff --git a/pkgs/development/compilers/ghc/boot.nix b/pkgs/development/compilers/ghc/boot.nix index 50eff51e0630..bcb26327edb4 100644 --- a/pkgs/development/compilers/ghc/boot.nix +++ b/pkgs/development/compilers/ghc/boot.nix @@ -16,5 +16,6 @@ stdenv.mkDerivation { }); buildInputs = [perl]; propagatedBuildInputs = [readline ncurses gmp]; + dontStrip = 1; inherit readline ncurses gmp; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2588306c096d..c9965c3ef634 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -981,11 +981,12 @@ rec { ghc = ghc661; - ghc68 = lowPrio (appendToName "snapshot" (import ../development/compilers/ghc-6.8 { - inherit fetchurl stdenv readline perl gmp ncurses; + ghc68 = lowPrio (import ../development/compilers/ghc-6.8 { + inherit fetchurl stdenv readline perl gmp ncurses libxml2 libxslt pkgconfig; m4 = gnum4; ghc = ghcboot; - })); + inherit (gtkLibs) gtk; + }); ghc661 = import ../development/compilers/ghc-6.6.1 { inherit fetchurl stdenv readline perl gmp ncurses; From b37f50468088d81237173a2a783098f1bf5178aa Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 19 Nov 2007 17:39:19 +0000 Subject: [PATCH 025/320] * Updated various stdenv packages (grep, gawk, tar, cpio, findutils, pcre). svn path=/nixpkgs/branches/stdenv-updates/; revision=9758 --- .../libraries/{glibc => glibc-2.5}/builder.sh | 0 .../{glibc => glibc-2.5}/default.nix | 0 .../glibc-getcwd-param-MAX.patch | 0 .../{glibc-nptl => glibc-2.5}/glibc-pwd.patch | 0 .../{glibc-nptl => glibc-2.7}/builder.sh | 0 .../{glibc-nptl => glibc-2.7}/default.nix | 0 .../glibc-getcwd-param-MAX.patch | 0 .../{glibc => glibc-2.7}/glibc-pwd.patch | 0 pkgs/development/libraries/pcre/default.nix | 17 ++++---- .../{2.6.23.1.nix => 2.6.23.8.nix} | 6 +-- .../linux/kernel-headers/default.nix | 21 ---------- pkgs/tools/archivers/cpio/default.nix | 6 +-- pkgs/tools/archivers/gnutar/default.nix | 8 ++-- .../archivers/gnutar/gnulib-futimens.patch | 42 ------------------- pkgs/tools/misc/findutils/default.nix | 6 +-- pkgs/tools/text/gawk/default.nix | 6 +-- pkgs/tools/text/gnugrep/default.nix | 6 +-- pkgs/top-level/all-packages.nix | 32 +++++--------- 18 files changed, 38 insertions(+), 112 deletions(-) rename pkgs/development/libraries/{glibc => glibc-2.5}/builder.sh (100%) rename pkgs/development/libraries/{glibc => glibc-2.5}/default.nix (100%) rename pkgs/development/libraries/{glibc-nptl => glibc-2.5}/glibc-getcwd-param-MAX.patch (100%) rename pkgs/development/libraries/{glibc-nptl => glibc-2.5}/glibc-pwd.patch (100%) rename pkgs/development/libraries/{glibc-nptl => glibc-2.7}/builder.sh (100%) rename pkgs/development/libraries/{glibc-nptl => glibc-2.7}/default.nix (100%) rename pkgs/development/libraries/{glibc => glibc-2.7}/glibc-getcwd-param-MAX.patch (100%) rename pkgs/development/libraries/{glibc => glibc-2.7}/glibc-pwd.patch (100%) rename pkgs/os-specific/linux/kernel-headers/{2.6.23.1.nix => 2.6.23.8.nix} (74%) delete mode 100644 pkgs/os-specific/linux/kernel-headers/default.nix delete mode 100644 pkgs/tools/archivers/gnutar/gnulib-futimens.patch diff --git a/pkgs/development/libraries/glibc/builder.sh b/pkgs/development/libraries/glibc-2.5/builder.sh similarity index 100% rename from pkgs/development/libraries/glibc/builder.sh rename to pkgs/development/libraries/glibc-2.5/builder.sh diff --git a/pkgs/development/libraries/glibc/default.nix b/pkgs/development/libraries/glibc-2.5/default.nix similarity index 100% rename from pkgs/development/libraries/glibc/default.nix rename to pkgs/development/libraries/glibc-2.5/default.nix diff --git a/pkgs/development/libraries/glibc-nptl/glibc-getcwd-param-MAX.patch b/pkgs/development/libraries/glibc-2.5/glibc-getcwd-param-MAX.patch similarity index 100% rename from pkgs/development/libraries/glibc-nptl/glibc-getcwd-param-MAX.patch rename to pkgs/development/libraries/glibc-2.5/glibc-getcwd-param-MAX.patch diff --git a/pkgs/development/libraries/glibc-nptl/glibc-pwd.patch b/pkgs/development/libraries/glibc-2.5/glibc-pwd.patch similarity index 100% rename from pkgs/development/libraries/glibc-nptl/glibc-pwd.patch rename to pkgs/development/libraries/glibc-2.5/glibc-pwd.patch diff --git a/pkgs/development/libraries/glibc-nptl/builder.sh b/pkgs/development/libraries/glibc-2.7/builder.sh similarity index 100% rename from pkgs/development/libraries/glibc-nptl/builder.sh rename to pkgs/development/libraries/glibc-2.7/builder.sh diff --git a/pkgs/development/libraries/glibc-nptl/default.nix b/pkgs/development/libraries/glibc-2.7/default.nix similarity index 100% rename from pkgs/development/libraries/glibc-nptl/default.nix rename to pkgs/development/libraries/glibc-2.7/default.nix diff --git a/pkgs/development/libraries/glibc/glibc-getcwd-param-MAX.patch b/pkgs/development/libraries/glibc-2.7/glibc-getcwd-param-MAX.patch similarity index 100% rename from pkgs/development/libraries/glibc/glibc-getcwd-param-MAX.patch rename to pkgs/development/libraries/glibc-2.7/glibc-getcwd-param-MAX.patch diff --git a/pkgs/development/libraries/glibc/glibc-pwd.patch b/pkgs/development/libraries/glibc-2.7/glibc-pwd.patch similarity index 100% rename from pkgs/development/libraries/glibc/glibc-pwd.patch rename to pkgs/development/libraries/glibc-2.7/glibc-pwd.patch diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix index 1b4d7fc90933..fef6d239ea0f 100644 --- a/pkgs/development/libraries/pcre/default.nix +++ b/pkgs/development/libraries/pcre/default.nix @@ -1,14 +1,13 @@ args: with args; -stdenv.mkDerivation ({ - name = "pcre-7.1"; +stdenv.mkDerivation { + name = "pcre-7.4"; src = fetchurl { - url = ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.1.tar.bz2; - sha256 = "0rpkcw07jas3fw6ava3ni5zcrmbncwa8xlsa0lzq6z2iph5510li"; + url = ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.4.tar.bz2; + sha256 = "1rdks2h5f3p2d71c4jnxaic1c9gmgsfky80djnafcdbdrhzkiyx5"; }; + configureFlags = + if unicodeSupport then + "--enable-unicode-properties --enable-shared --disable-static" + else ""; } -// (if unicodeSupport then -{ - configureFlags = "--enable-unicode-properties --enable-shared --disable-static"; -} -else {})) diff --git a/pkgs/os-specific/linux/kernel-headers/2.6.23.1.nix b/pkgs/os-specific/linux/kernel-headers/2.6.23.8.nix similarity index 74% rename from pkgs/os-specific/linux/kernel-headers/2.6.23.1.nix rename to pkgs/os-specific/linux/kernel-headers/2.6.23.8.nix index adaa303aa008..b34ec0533be4 100644 --- a/pkgs/os-specific/linux/kernel-headers/2.6.23.1.nix +++ b/pkgs/os-specific/linux/kernel-headers/2.6.23.8.nix @@ -3,11 +3,11 @@ assert stdenv.isLinux; stdenv.mkDerivation { - name = "linux-headers-2.6.23.1"; + name = "linux-headers-2.6.23.8"; builder = ./builder.sh; src = fetchurl { - url = "mirror://kernel/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2"; - sha256 = "0737g83h7jbrlss8782b17mhc3nfn8qfbh5s71flz8pjxmbbmg1m"; + url = "mirror://kernel/linux/kernel/v2.6/linux-2.6.23.8.tar.bz2"; + sha256 = "1sp2ww2ya0wyyyq0vdxbn6ydllv9gpmzw2yz66llgvgv32cix534"; }; platform = diff --git a/pkgs/os-specific/linux/kernel-headers/default.nix b/pkgs/os-specific/linux/kernel-headers/default.nix deleted file mode 100644 index ef94f1b006c7..000000000000 --- a/pkgs/os-specific/linux/kernel-headers/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{stdenv, fetchurl}: - -assert stdenv.isLinux; - -stdenv.mkDerivation { - name = "linux-headers-2.6.20.11"; - builder = ./builder.sh; - src = fetchurl { - url = "mirror://kernel/linux/kernel/v2.6/linux-2.6.20.11.tar.bz2"; - sha256 = "1n0xgqckj64ga3l53l8lk1591lfcn6zcrqg3phz2m0y841ck5qlk"; - }; - - platform = - if stdenv.system == "i686-linux" then "i386" else - if stdenv.system == "x86_64-linux" then "x86_64" else - if stdenv.system == "powerpc-linux" then "powerpc" else - abort "don't know what the kernel include directory is called for this platform"; - - extraIncludeDirs = - if stdenv.system == "powerpc-linux" then ["ppc"] else []; -} diff --git a/pkgs/tools/archivers/cpio/default.nix b/pkgs/tools/archivers/cpio/default.nix index 225bc557350e..3309215fb63d 100644 --- a/pkgs/tools/archivers/cpio/default.nix +++ b/pkgs/tools/archivers/cpio/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "cpio-2.7"; + name = "cpio-2.9"; src = fetchurl { - url = http://ftp.gnu.org/gnu/cpio/cpio-2.7.tar.bz2; - md5 = "69ad6cb3d288aafe5f969f68d9fd0fb7"; + url = mirror://gnu/cpio/cpio-2.9.tar.bz2; + sha256 = "01s7f9hg8kgpis96j99hgkiqgdy53pm7qi7bhm3fzx58jfk5z6mv"; }; patches = [./symlink.patch ./gnulib-futimens.patch]; } diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix index c8d77071123d..9205612f3bce 100644 --- a/pkgs/tools/archivers/gnutar/default.nix +++ b/pkgs/tools/archivers/gnutar/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "gnutar-1.16.1"; + name = "gnutar-1.19"; src = fetchurl { - url = mirror://gnu/tar/tar-1.16.1.tar.bz2; - md5 = "d51593461c5ef1f7e37134f22338bb9e"; + url = mirror://gnu/tar/tar-1.19.tar.bz2; + sha256 = "1d4wh27wlgryz3ld6gp6fn56knh7dmny93bmgixy07kvlxnx9466"; }; - patches = [./implausible.patch ./gnulib-futimens.patch]; + patches = [./implausible.patch]; } diff --git a/pkgs/tools/archivers/gnutar/gnulib-futimens.patch b/pkgs/tools/archivers/gnutar/gnulib-futimens.patch deleted file mode 100644 index 00cdf9322e62..000000000000 --- a/pkgs/tools/archivers/gnutar/gnulib-futimens.patch +++ /dev/null @@ -1,42 +0,0 @@ -now hat glibc-2.6 declares futimens. -http://lists.gnu.org/archive/html/bug-gnulib/2007-05/msg00089.html - -diff -ru cpio-2.7.orig/lib/utimens.c cpio-2.7/lib/utimens.c ---- cpio-2.7.orig/lib/utimens.c 2007-05-20 21:23:57.000000000 +0900 -+++ cpio-2.7/lib/utimens.c 2007-05-21 08:40:22.000000000 +0900 -@@ -73,7 +73,7 @@ - Return 0 on success, -1 (setting errno) on failure. */ - - int --futimens (int fd ATTRIBUTE_UNUSED, -+gl_futimens (int fd ATTRIBUTE_UNUSED, - char const *file, struct timespec const timespec[2]) - { - /* There's currently no interface to set file timestamps with -@@ -166,5 +166,5 @@ - int - utimens (char const *file, struct timespec const timespec[2]) - { -- return futimens (-1, file, timespec); -+ return gl_futimens (-1, file, timespec); - } -diff -ru cpio-2.7.orig/lib/utimens.h cpio-2.7/lib/utimens.h ---- cpio-2.7.orig/lib/utimens.h 2007-05-20 21:23:57.000000000 +0900 -+++ cpio-2.7/lib/utimens.h 2007-05-21 08:39:57.000000000 +0900 -@@ -1,3 +1,3 @@ - #include "timespec.h" --int futimens (int, char const *, struct timespec const [2]); -+int gl_futimens (int, char const *, struct timespec const [2]); - int utimens (char const *, struct timespec const [2]); -diff -ur tar-1.16.1.orig/src/misc.c tar-1.16.1/src/misc.c ---- tar-1.16.1.orig/src/misc.c 2007-05-21 08:57:02.000000000 +0900 -+++ tar-1.16.1/src/misc.c 2007-05-21 08:57:16.000000000 +0900 -@@ -518,7 +518,7 @@ - } - #endif - -- return futimens (fd, file, timespec); -+ return gl_futimens (fd, file, timespec); - } - - /* A description of a working directory. */ diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix index 812b0c78e2cd..5aa28d0c451f 100644 --- a/pkgs/tools/misc/findutils/default.nix +++ b/pkgs/tools/misc/findutils/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, coreutils}: stdenv.mkDerivation { - name = "findutils-4.2.30"; + name = "findutils-4.2.31"; src = fetchurl { - url = mirror://gnu/findutils/findutils-4.2.30.tar.gz; - sha256 = "1x1s0h1gf4hxh6xi6vq336sz8zsh4hvnsslc7607z41l82xrqjrl"; + url = mirror://gnu/findutils/findutils-4.2.31.tar.gz; + sha256 = "01329mrgg7pc2069hdbcl45jzrzvi94nnv1zf2hcrcx0mj7lplz0"; }; buildInputs = [coreutils]; diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix index 2c495f8c2711..b50b3aa9bd06 100644 --- a/pkgs/tools/text/gawk/default.nix +++ b/pkgs/tools/text/gawk/default.nix @@ -1,9 +1,9 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "gawk-3.1.5"; + name = "gawk-3.1.6"; src = fetchurl { - url = ftp://ftp.gnu.org/gnu/gawk/gawk-3.1.5.tar.bz2; - md5 = "5703f72d0eea1d463f735aad8222655f"; + url = mirror://gnu/gawk/gawk-3.1.6.tar.bz2; + sha256 = "0v6ba4hxfiiy3bny5japd3zmzxlh8vdkmswk96yngd6i1dddsgsi"; }; } diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 15a7a5ad2393..6979e4a1b01d 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, pcre}: stdenv.mkDerivation { - name = "gnugrep-2.5.1a"; + name = "gnugrep-2.5.3"; src = fetchurl { - url = http://ftp.gnu.org/gnu/grep/grep-2.5.1a.tar.bz2; - md5 = "52202fe462770fa6be1bb667bd6cf30c"; + url = http://nix.cs.uu.nl/dist/tarballs/grep-2.5.3-with-info.tar.bz2; + sha256 = "0rg9dipksqzbg8v1xalib1n3xkkycc5r1l2gb9cxy1cz3cjip5l8"; }; buildInputs = [pcre]; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c9965c3ef634..0840cfde0597 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -922,8 +922,6 @@ rec { profiledCompiler = false; }); - gcc41NPTL = wrapGCCWithGlibc gcc41.gcc glibcNPTL; - gcc42 = useFromStdenv (stdenv ? gcc) stdenv.gcc (wrapGCC (import ../development/compilers/gcc-4.2 { inherit fetchurl stdenv noSysDirs; profiledCompiler = true; @@ -1745,15 +1743,11 @@ rec { }; glibc = useFromStdenv (stdenv ? glibc) stdenv.glibc - (import ../development/libraries/glibc { + (import ../development/libraries/glibc-2.5 { inherit fetchurl stdenv kernelHeaders; #installLocales = false; }); - glibcNPTL = import ../development/libraries/glibc-nptl { - inherit fetchurl stdenv kernelHeaders; - }; - glibmm = import ../development/libraries/gtk-libs-2.6/glibmm { inherit fetchurl stdenv pkgconfig libsigcxx; inherit (gtkLibs26) glib; @@ -2912,15 +2906,13 @@ rec { inherit fetchurl stdenv bison flex; }; - kernelHeaders = import ../os-specific/linux/kernel-headers { + kernelHeaders = kernelHeaders_2_6_23; + + kernelHeaders_2_6_21 = import ../os-specific/linux/kernel-headers/2.6.21.1.nix { inherit fetchurl stdenv; }; - kernelHeaders_2_6_21 = import ../os-specific/linux/kernel-headers/2.6.21.3.nix { - inherit fetchurl stdenv; - }; - - kernelHeaders_2_6_23 = import ../os-specific/linux/kernel-headers/2.6.23.1.nix { + kernelHeaders_2_6_23 = import ../os-specific/linux/kernel-headers/2.6.23.8.nix { inherit fetchurl stdenv; }; @@ -3436,12 +3428,11 @@ rec { }; audacity = import ../applications/audio/audacity { - inherit fetchurl libogg libvorbis libsndfile libmad - pkgconfig gettext; - inherit (gtkLibs) gtk glib; - wxGTK = wxGTK28deps; - stdenv = overrideGCC stdenv gcc41NPTL; - inherit builderDefs stringsWithDeps; + inherit fetchurl stdenv libogg libvorbis libsndfile libmad + pkgconfig gettext; + inherit (gtkLibs) gtk glib; + wxGTK = wxGTK28deps; + inherit builderDefs stringsWithDeps; }; batik = import ../applications/graphics/batik { @@ -4574,8 +4565,7 @@ rec { }; wine = import ../misc/emulators/wine { - stdenv = overrideGCC stdenv gcc41NPTL; - inherit fetchurl flex bison mesa ncurses + inherit fetchurl stdenv flex bison mesa ncurses libpng libjpeg alsaLib lcms xlibs freetype fontconfig fontforge; }; From c1836bbafcd458a8206840e4ad6f7b2e4e56fec2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 19 Nov 2007 22:29:01 +0000 Subject: [PATCH 026/320] ntfs-3g upgraded to 1.1104 svn path=/nixpkgs/branches/stdenv-updates/; revision=9760 --- pkgs/misc/ntfs-3g/default.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgs/misc/ntfs-3g/default.nix b/pkgs/misc/ntfs-3g/default.nix index a319423e99c7..5f6a0bdbc5fe 100644 --- a/pkgs/misc/ntfs-3g/default.nix +++ b/pkgs/misc/ntfs-3g/default.nix @@ -1,15 +1,16 @@ args: with args; -stdenv.mkDerivation { - name = "ntfs3g-1.826"; +stdenv.mkDerivation rec { + name = "ntfs-3g-1.1104"; src = fetchurl { - url = http://www.ntfs-3g.org/ntfs-3g-1.826.tgz; - sha256 = "0anxg4nzhc8d8wvxgw78bc2pb2ciim8mflxgcac9p8d3djwdsxyp"; + url = "${meta.homepage}/${name}.tgz"; + sha256 = "1m96c3vxm051lpy3kyik9s0m390rj6ngm11xmahfhw61794jzbyp"; }; buildInputs = [fuse pkgconfig]; preConfigure="sed -e 's:/sbin:@sbindir@:' -i src/Makefile.in"; configureFlags="--enable-shared --disable-static --disable-ldconfig --exec-prefix=\${prefix}"; meta = { + homepage = http://www.ntfs-3g.org; description = "FUSE-base ntfs driver with full write support"; }; } From e43ce8f72386e357460a96cf79955712fb74248c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 19 Nov 2007 22:29:08 +0000 Subject: [PATCH 027/320] xorg: deault.nix and generate-expr-from-tarballs.pl synced svn path=/nixpkgs/branches/stdenv-updates/; revision=9761 --- pkgs/servers/x11/xorg/default.nix | 6 +++--- pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl | 10 ++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkgs/servers/x11/xorg/default.nix b/pkgs/servers/x11/xorg/default.nix index 4cd28a1f938d..bad391330a5d 100644 --- a/pkgs/servers/x11/xorg/default.nix +++ b/pkgs/servers/x11/xorg/default.nix @@ -1283,7 +1283,7 @@ rec { url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/setxkbmap-1.0.4.tar.bz2; sha256 = "1b1brw1v98q2rqhr5x7f8mr3clxq62nw5175gpamg5s172916nwv"; }; - buildInputs = [pkgconfig libX11 libxkbfile ]; postInstall = "ln -sfn ${xkeyboard_config}/etc $out/share"; + buildInputs = [pkgconfig libX11 libxkbfile ]; postInstall = "ensureDir $out/share; ln -sfn ${xkeyboard_config}/etc/X11 $out/share/X11"; }) // {inherit libX11 libxkbfile ;}; showfont = (stdenv.mkDerivation { @@ -2216,8 +2216,8 @@ rec { url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/xf86-video-sis-0.9.3.tar.bz2; sha256 = "1xin2hcjjwj2810h7kxhkmqq841plbsvk0swmjl9py7z2vxyi3l9"; }; - buildInputs = [pkgconfig fontsproto libdrm randrproto renderproto videoproto xextproto xf86dgaproto xf86driproto xf86miscproto xineramaproto xorgserver xproto ]; - }) // {inherit fontsproto libdrm randrproto renderproto videoproto xextproto xf86dgaproto xf86driproto xf86miscproto xineramaproto xorgserver xproto ;}; + buildInputs = [pkgconfig fontsproto glproto mesaHeaders libdrm randrproto renderproto videoproto xextproto xf86dgaproto xf86driproto xf86miscproto xineramaproto xorgserver xproto ]; + }) // {inherit fontsproto glproto mesaHeaders libdrm randrproto renderproto videoproto xextproto xf86dgaproto xf86driproto xf86miscproto xineramaproto xorgserver xproto ;}; xf86videosisusb = (stdenv.mkDerivation { name = "xf86-video-sisusb-0.8.1"; diff --git a/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl b/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl index 9bdf7279f523..d68944bf71a2 100755 --- a/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl +++ b/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl @@ -41,16 +41,21 @@ $pcMap{"\$PIXMAN"} = "pixman"; $pcMap{"\$RENDERPROTO"} = "renderproto"; -$extraAttrs{"xorgserver"} = " mesaSrc = mesa.src; x11BuildHook = ./xorgserver.sh; patches = [./xorgserver-dri-path.patch ./xorgserver-xkbcomp-path.patch]; "; +$extraAttrs{"xorgserver"} = " mesaSrc = mesa.src; x11BuildHook = ./xorgserver.sh; patches = [./xorgserver-dri-path.patch ./xorgserver-xkbcomp-path.patch ./xorgserver-xkb-leds.patch ]; "; $extraAttrs{"imake"} = " inherit xorgcffiles; x11BuildHook = ./imake.sh; patches = [./imake.patch]; "; -$extraAttrs{"setxkbmap"} = " postInstall = \"ln -sfn \${xkeyboard_config}/etc \$out/share\"; "; +$extraAttrs{"setxkbmap"} = " postInstall = \"ensureDir \$out/share; ln -sfn \${xkeyboard_config}/etc/X11 \$out/share/X11\";"; $extraAttrs{"fontmiscmisc"} = " postInstall = \"ln -s \${fontalias}/lib/X11/fonts/misc/fonts.alias \$out/lib/X11/fonts/misc/fonts.alias\"; "; $extraAttrs{"mkfontdir"} = " preBuild = \"substituteInPlace mkfontdir.cpp --replace BINDIR \${mkfontscale}/bin\"; "; +$extraAttrs{"xf86inputevdev"} = " + preBuild = \" + sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c + \";"; + my $downloadCache = "./download-cache"; $ENV{'NIX_DOWNLOAD_CACHE'} = $downloadCache; @@ -174,6 +179,7 @@ while (<>) { process \@requires, $1 while $file =~ /XORG_DRIVER_CHECK_EXT\([^,]*,([^\)]*)\)/g; push @requires, "glproto", "mesaHeaders" if $pkg =~ /xf86videoi810/; + push @requires, "glproto", "mesaHeaders" if $pkg =~ /xf86videosis/; push @requires, "glproto", "mesaHeaders" if $pkg =~ /xf86videointel/; push @requires, "zlib" if $pkg =~ /xorgserver/; push @requires, "xf86bigfontproto" if $pkg =~ /xorgserver/; From b8fafa21e6971a9f252d4e97e8151a7e1b3f1bd3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 19 Nov 2007 22:43:29 +0000 Subject: [PATCH 028/320] Merge commit 'trunk' Conflicts: pkgs/development/compilers/ocaml/default.nix pkgs/development/interpreters/python/default.nix pkgs/tools/package-management/nix/unstable.nix pkgs/top-level/all-packages.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=9762 --- pkgs/misc/emulators/wine/default.nix | 6 +- .../linux/bridge_utils/default.nix | 19 + .../linux/kernel/linux-2.6.21_ck.nix | 84 + .../os-specific/linux/kernel/patch-2.6.21-ck1 | 5040 ++++++++++++++++ .../os-specific/linux/kernel/patch-2.6.22-ck1 | 5167 +++++++++++++++++ .../tools/package-management/nix/unstable.nix | 4 +- pkgs/top-level/all-packages.nix | 70 +- 7 files changed, 10382 insertions(+), 8 deletions(-) create mode 100644 pkgs/os-specific/linux/bridge_utils/default.nix create mode 100644 pkgs/os-specific/linux/kernel/linux-2.6.21_ck.nix create mode 100644 pkgs/os-specific/linux/kernel/patch-2.6.21-ck1 create mode 100644 pkgs/os-specific/linux/kernel/patch-2.6.22-ck1 diff --git a/pkgs/misc/emulators/wine/default.nix b/pkgs/misc/emulators/wine/default.nix index 8106390674eb..fc9b97d5af9f 100644 --- a/pkgs/misc/emulators/wine/default.nix +++ b/pkgs/misc/emulators/wine/default.nix @@ -7,11 +7,11 @@ assert stdenv.isLinux; let lib = import ../../../lib/default.nix; in stdenv.mkDerivation { - name = "wine-0.9.46"; + name = "wine-0.9.49"; src = fetchurl { - url = mirror://sourceforge/wine/wine-0.9.46.tar.bz2; - sha256 = "0c5fapw38bivipi8yzci3swxyhl9g67dpicqzslwmffwbi9y9z3i"; + url = mirror://sourceforge/wine/wine-0.9.49.tar.bz2; + sha256 = "d41edd08cf7fd21d7350a633995107533a25f925c8859995d3a6fc131f54b3c1"; }; buildInputs = [ diff --git a/pkgs/os-specific/linux/bridge_utils/default.nix b/pkgs/os-specific/linux/bridge_utils/default.nix new file mode 100644 index 000000000000..3fb80b7484a0 --- /dev/null +++ b/pkgs/os-specific/linux/bridge_utils/default.nix @@ -0,0 +1,19 @@ +args: +args.stdenv.mkDerivation { + name = "bridge-utils-1.2"; + + src = args.fetchurl { + url = http://mirror/sourceforge/bridge/bridge-utils-1.2.tar.gz; + sha256 = "0jg3z51c2c34byg4zi39j9g4b66js5kanjhid77hpa0jdfmryfy9"; + }; + + buildInputs =(with args; [autoconf automake]); + + preConfigure="autoreconf"; + + meta = { + description = "http://sourceforge.net/projects/bridge/"; + homepage = [ "http://www.linux-foundation.org/en/Net:Bridge/" "http://sourceforge.net/projects/bridge/" ]; + license = "GPL"; + }; +} diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.21_ck.nix b/pkgs/os-specific/linux/kernel/linux-2.6.21_ck.nix new file mode 100644 index 000000000000..55748d3e9f54 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/linux-2.6.21_ck.nix @@ -0,0 +1,84 @@ +{ stdenv, fetchurl, perl, mktemp, module_init_tools + + # A list of patches to apply to the kernel. Each element of this list + # should be an attribute set {name, patch} where `name' is a + # symbolic name and `patch' is the actual patch. The patch may + # optionally be compressed with gzip or bzip2. +, kernelPatches ? [] + +, # Whether to build a User-Mode Linux kernel. + userModeLinux ? false + +, # Allows you to set your own kernel version suffix (e.g., + # "-my-kernel"). + localVersion ? "" + +, # Your own kernel configuration file, if you don't want to use the + # default. + kernelConfig ? null + +, # A list of additional statements to be appended to the + # configuration file. + extraConfig ? [] +}: + +assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; + +let + + lib = import ../../../lib; + + version = "2.6.21"; + +in + +stdenv.mkDerivation { + name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; + builder = ./builder.sh; + + src = fetchurl { + url = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2"; + sha256 = "f187b12d70e0a48ce81f0472dfe9504fb5f0f966be339ac9d57dd2b991a74942"; + }; + + patches = map (p: p.patch) kernelPatches; + extraConfig = + let addNewlines = map (s: "\n" + s + "\n"); + configFromPatches = + map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches; + in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig)); + + config = + if kernelConfig != null then kernelConfig else + if userModeLinux then ./config-2.6.21-uml else + if stdenv.system == "i686-linux" then ./config-2.6.21-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.21-x86_64-smp else + abort "No kernel configuration for your platform!"; + + buildInputs = [perl mktemp]; + + arch = + if userModeLinux then "um" else + if stdenv.system == "i686-linux" then "i386" else + if stdenv.system == "x86_64-linux" then "x86_64" else + abort "Platform ${stdenv.system} is not supported."; + + makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else ""; + + inherit module_init_tools; + + allowLocalVersion = false; # don't allow patches to set a suffix + inherit localVersion; # but do allow the user to set one. + + meta = { + description = + (if userModeLinux then + "User-Mode Linux" + else + "The Linux kernel") + + (if kernelPatches == [] then "" else + " (with patches: " + + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches)) + + ")"); + }; +} diff --git a/pkgs/os-specific/linux/kernel/patch-2.6.21-ck1 b/pkgs/os-specific/linux/kernel/patch-2.6.21-ck1 new file mode 100644 index 000000000000..0bf63f5aca37 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/patch-2.6.21-ck1 @@ -0,0 +1,5040 @@ +Index: linux-2.6.21-ck1/Makefile +=================================================================== +--- linux-2.6.21-ck1.orig/Makefile 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/Makefile 2007-05-04 12:21:37.000000000 +1000 +@@ -1,7 +1,7 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 21 +-EXTRAVERSION = ++EXTRAVERSION = -ck1 + NAME = Nocturnal Monster Puppy + + # *DOCUMENTATION* +Index: linux-2.6.21-ck1/kernel/workqueue.c +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/workqueue.c 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/workqueue.c 2007-05-04 12:10:54.000000000 +1000 +@@ -355,8 +355,6 @@ static int worker_thread(void *__cwq) + if (!cwq->freezeable) + current->flags |= PF_NOFREEZE; + +- set_user_nice(current, -5); +- + /* Block and flush all signals */ + sigfillset(&blocked); + sigprocmask(SIG_BLOCK, &blocked, NULL); +Index: linux-2.6.21-ck1/fs/proc/array.c +=================================================================== +--- linux-2.6.21-ck1.orig/fs/proc/array.c 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/fs/proc/array.c 2007-05-04 12:10:54.000000000 +1000 +@@ -165,7 +165,6 @@ static inline char * task_state(struct t + rcu_read_lock(); + buffer += sprintf(buffer, + "State:\t%s\n" +- "SleepAVG:\t%lu%%\n" + "Tgid:\t%d\n" + "Pid:\t%d\n" + "PPid:\t%d\n" +@@ -173,7 +172,6 @@ static inline char * task_state(struct t + "Uid:\t%d\t%d\t%d\t%d\n" + "Gid:\t%d\t%d\t%d\t%d\n", + get_task_state(p), +- (p->sleep_avg/1024)*100/(1020000000/1024), + p->tgid, p->pid, + pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, + pid_alive(p) && p->ptrace ? rcu_dereference(p->parent)->pid : 0, +Index: linux-2.6.21-ck1/include/linux/init_task.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/init_task.h 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/init_task.h 2007-05-04 12:24:19.000000000 +1000 +@@ -102,13 +102,15 @@ extern struct group_info init_groups; + .prio = MAX_PRIO-20, \ + .static_prio = MAX_PRIO-20, \ + .normal_prio = MAX_PRIO-20, \ ++ .rotation = 0, \ + .policy = SCHED_NORMAL, \ + .cpus_allowed = CPU_MASK_ALL, \ + .mm = NULL, \ + .active_mm = &init_mm, \ + .run_list = LIST_HEAD_INIT(tsk.run_list), \ + .ioprio = 0, \ +- .time_slice = HZ, \ ++ .time_slice = 1000000000, \ ++ .quota = 1000000000, \ + .tasks = LIST_HEAD_INIT(tsk.tasks), \ + .ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children), \ + .ptrace_list = LIST_HEAD_INIT(tsk.ptrace_list), \ +@@ -135,6 +137,7 @@ extern struct group_info init_groups; + .signal = {{0}}}, \ + .blocked = {{0}}, \ + .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ ++ .mutexes_held = 0, \ + .journal_info = NULL, \ + .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ + .fs_excl = ATOMIC_INIT(0), \ +Index: linux-2.6.21-ck1/include/linux/sched.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/sched.h 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/sched.h 2007-05-04 12:24:19.000000000 +1000 +@@ -34,9 +34,14 @@ + #define SCHED_FIFO 1 + #define SCHED_RR 2 + #define SCHED_BATCH 3 ++#define SCHED_ISO 4 ++#define SCHED_IDLEPRIO 5 + + #ifdef __KERNEL__ + ++#define SCHED_MAX SCHED_IDLEPRIO ++#define SCHED_RANGE(policy) ((policy) <= SCHED_MAX) ++ + struct sched_param { + int sched_priority; + }; +@@ -149,8 +154,7 @@ extern unsigned long weighted_cpuload(co + #define EXIT_ZOMBIE 16 + #define EXIT_DEAD 32 + /* in tsk->state again */ +-#define TASK_NONINTERACTIVE 64 +-#define TASK_DEAD 128 ++#define TASK_DEAD 64 + + #define __set_task_state(tsk, state_value) \ + do { (tsk)->state = (state_value); } while (0) +@@ -522,14 +526,19 @@ struct signal_struct { + + #define MAX_USER_RT_PRIO 100 + #define MAX_RT_PRIO MAX_USER_RT_PRIO ++#define PRIO_RANGE (40) ++#define ISO_PRIO (MAX_RT_PRIO - 1) + +-#define MAX_PRIO (MAX_RT_PRIO + 40) ++#define MAX_PRIO (MAX_RT_PRIO + PRIO_RANGE) + +-#define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO) ++#define rt_prio(prio) unlikely((prio) < ISO_PRIO) + #define rt_task(p) rt_prio((p)->prio) + #define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) +-#define is_rt_policy(p) ((p) != SCHED_NORMAL && (p) != SCHED_BATCH) ++#define is_rt_policy(policy) ((policy) == SCHED_FIFO || \ ++ (policy) == SCHED_RR) + #define has_rt_policy(p) unlikely(is_rt_policy((p)->policy)) ++#define iso_task(p) unlikely((p)->policy == SCHED_ISO) ++#define idleprio_task(p) unlikely((p)->policy == SCHED_IDLEPRIO) + + /* + * Some day this will be a full-fledged user tracking system.. +@@ -740,6 +749,22 @@ extern unsigned int max_cache_size; + + #endif /* CONFIG_SMP */ + ++/* ++ * A runqueue laden with a single nice 0 task scores a weighted_cpuload of ++ * SCHED_LOAD_SCALE. This function returns 1 if any cpu is laden with a ++ * task of nice 0 or enough lower priority tasks to bring up the ++ * weighted_cpuload ++ */ ++static inline int above_background_load(void) ++{ ++ unsigned long cpu; ++ ++ for_each_online_cpu(cpu) { ++ if (weighted_cpuload(cpu) >= SCHED_LOAD_SCALE) ++ return 1; ++ } ++ return 0; ++} + + struct io_context; /* See blkdev.h */ + struct cpuset; +@@ -788,13 +813,6 @@ struct mempolicy; + struct pipe_inode_info; + struct uts_namespace; + +-enum sleep_type { +- SLEEP_NORMAL, +- SLEEP_NONINTERACTIVE, +- SLEEP_INTERACTIVE, +- SLEEP_INTERRUPTED, +-}; +- + struct prio_array; + + struct task_struct { +@@ -814,20 +832,33 @@ struct task_struct { + int load_weight; /* for niceness load balancing purposes */ + int prio, static_prio, normal_prio; + struct list_head run_list; ++ /* ++ * This bitmap shows what priorities this task has received quota ++ * from for this major priority rotation on its current runqueue. ++ */ ++ DECLARE_BITMAP(bitmap, PRIO_RANGE + 1); + struct prio_array *array; ++ /* Which major runqueue rotation did this task run */ ++ unsigned long rotation; + + unsigned short ioprio; + #ifdef CONFIG_BLK_DEV_IO_TRACE + unsigned int btrace_seq; + #endif +- unsigned long sleep_avg; + unsigned long long timestamp, last_ran; + unsigned long long sched_time; /* sched_clock time spent running */ +- enum sleep_type sleep_type; + + unsigned long policy; + cpumask_t cpus_allowed; +- unsigned int time_slice, first_time_slice; ++ /* ++ * How much this task is entitled to run at the current priority ++ * before being requeued at a lower priority. ++ */ ++ int time_slice; ++ /* Is this the very first time_slice this task has ever run. */ ++ unsigned int first_time_slice; ++ /* How much this task receives at each priority level */ ++ int quota; + + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + struct sched_info sched_info; +@@ -992,6 +1023,7 @@ struct task_struct { + struct held_lock held_locks[MAX_LOCK_DEPTH]; + unsigned int lockdep_recursion; + #endif ++ unsigned long mutexes_held; + + /* journalling filesystem info */ + void *journal_info; +@@ -1156,8 +1188,10 @@ static inline void put_task_struct(struc + #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ + #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ + #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ ++#define PF_ISOREF 0x04000000 /* SCHED_ISO task has used up quota */ + #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ + #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ ++#define PF_NONSLEEP 0x40000000 /* Waiting on in-kernel activity */ + + /* + * Only the _current_ task can read/write to tsk->flags, but other +Index: linux-2.6.21-ck1/kernel/sched.c +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/sched.c 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/sched.c 2007-05-04 12:24:22.000000000 +1000 +@@ -16,6 +16,7 @@ + * by Davide Libenzi, preemptible kernel bits by Robert Love. + * 2003-09-03 Interactivity tuning by Con Kolivas. + * 2004-04-02 Scheduler domains code by Nick Piggin ++ * 2007-03-02 Staircase deadline scheduling policy by Con Kolivas + */ + + #include +@@ -52,6 +53,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -83,126 +85,85 @@ unsigned long long __attribute__((weak)) + #define USER_PRIO(p) ((p)-MAX_RT_PRIO) + #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) + #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) ++#define SCHED_PRIO(p) ((p)+MAX_RT_PRIO) + +-/* +- * Some helpers for converting nanosecond timing to jiffy resolution +- */ +-#define NS_TO_JIFFIES(TIME) ((TIME) / (1000000000 / HZ)) ++/* Some helpers for converting to/from various scales.*/ + #define JIFFIES_TO_NS(TIME) ((TIME) * (1000000000 / HZ)) +- +-/* +- * These are the 'tuning knobs' of the scheduler: +- * +- * Minimum timeslice is 5 msecs (or 1 jiffy, whichever is larger), +- * default timeslice is 100 msecs, maximum timeslice is 800 msecs. +- * Timeslices get refilled after they expire. +- */ +-#define MIN_TIMESLICE max(5 * HZ / 1000, 1) +-#define DEF_TIMESLICE (100 * HZ / 1000) +-#define ON_RUNQUEUE_WEIGHT 30 +-#define CHILD_PENALTY 95 +-#define PARENT_PENALTY 100 +-#define EXIT_WEIGHT 3 +-#define PRIO_BONUS_RATIO 25 +-#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) +-#define INTERACTIVE_DELTA 2 +-#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS) +-#define STARVATION_LIMIT (MAX_SLEEP_AVG) +-#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG)) +- +-/* +- * If a task is 'interactive' then we reinsert it in the active +- * array after it has expired its current timeslice. (it will not +- * continue to run immediately, it will still roundrobin with +- * other interactive tasks.) +- * +- * This part scales the interactivity limit depending on niceness. +- * +- * We scale it linearly, offset by the INTERACTIVE_DELTA delta. +- * Here are a few examples of different nice levels: +- * +- * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0] +- * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0] +- * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0] +- * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0] +- * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0] +- * +- * (the X axis represents the possible -5 ... 0 ... +5 dynamic +- * priority range a task can explore, a value of '1' means the +- * task is rated interactive.) +- * +- * Ie. nice +19 tasks can never get 'interactive' enough to be +- * reinserted into the active array. And only heavily CPU-hog nice -20 +- * tasks will be expired. Default nice 0 tasks are somewhere between, +- * it takes some effort for them to get interactive, but it's not +- * too hard. +- */ +- +-#define CURRENT_BONUS(p) \ +- (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ +- MAX_SLEEP_AVG) +- +-#define GRANULARITY (10 * HZ / 1000 ? : 1) +- +-#ifdef CONFIG_SMP +-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ +- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \ +- num_online_cpus()) +-#else +-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ +- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1))) +-#endif +- +-#define SCALE(v1,v1_max,v2_max) \ +- (v1) * (v2_max) / (v1_max) +- +-#define DELTA(p) \ +- (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \ +- INTERACTIVE_DELTA) +- +-#define TASK_INTERACTIVE(p) \ +- ((p)->prio <= (p)->static_prio - DELTA(p)) +- +-#define INTERACTIVE_SLEEP(p) \ +- (JIFFIES_TO_NS(MAX_SLEEP_AVG * \ +- (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1)) +- +-#define TASK_PREEMPTS_CURR(p, rq) \ +- ((p)->prio < (rq)->curr->prio) +- +-#define SCALE_PRIO(x, prio) \ +- max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) +- +-static unsigned int static_prio_timeslice(int static_prio) +-{ +- if (static_prio < NICE_TO_PRIO(0)) +- return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); +- else +- return SCALE_PRIO(DEF_TIMESLICE, static_prio); +-} +- +-/* +- * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] +- * to time slice values: [800ms ... 100ms ... 5ms] +- * +- * The higher a thread's priority, the bigger timeslices +- * it gets during one round of execution. But even the lowest +- * priority thread gets MIN_TIMESLICE worth of execution time. ++#define MS_TO_NS(TIME) ((TIME) * 1000000) ++#define MS_TO_US(TIME) ((TIME) * 1000) ++#define US_TO_MS(TIME) ((TIME) / 1000) ++ ++#define TASK_PREEMPTS_CURR(p, curr) ((p)->prio < (curr)->prio) ++ ++/* ++ * This is the time all tasks within the same priority round robin. ++ * Value is in ms and set to a minimum of 8ms. Scales with number of cpus. ++ * Tunable via /proc interface. ++ */ ++int rr_interval __read_mostly = 6; ++int sched_interactive __read_mostly = 1; ++ ++/* ++ * sched_iso_cpu - sysctl which determines the cpu percentage SCHED_ISO tasks ++ * are allowed to run (over ISO_PERIOD seconds) as real time tasks. ++ * sched_iso_period - sysctl which determines the number of seconds over ++ * which cpu usage of SCHED_ISO tasks is averaged to determine if they are ++ * exceeding their allowable bandwidth. ++*/ ++int sched_iso_cpu __read_mostly = 80; ++int sched_iso_period __read_mostly = 5; ++ ++#define ISO_PERIOD ((sched_iso_period * HZ) + 1) ++ ++/* ++ * This contains a bitmap for each dynamic priority level with empty slots ++ * for the valid priorities each different nice level can have. It allows ++ * us to stagger the slots where differing priorities run in a way that ++ * keeps latency differences between different nice levels at a minimum. ++ * The purpose of a pre-generated matrix is for rapid lookup of next slot in ++ * O(1) time without having to recalculate every time priority gets demoted. ++ * All nice levels use priority slot 39 as this allows less niced tasks to ++ * get all priority slots better than that before expiration is forced. ++ * ie, where 0 means a slot for that priority, priority running from left to ++ * right is from prio 0 to prio 39: ++ * nice -20 0000000000000000000000000000000000000000 ++ * nice -10 1000100010001000100010001000100010010000 ++ * nice 0 1010101010101010101010101010101010101010 ++ * nice 5 1011010110110101101101011011010110110110 ++ * nice 10 1110111011101110111011101110111011101110 ++ * nice 15 1111111011111110111111101111111011111110 ++ * nice 19 1111111111111111111111111111111111111110 + */ ++static unsigned long prio_matrix[PRIO_RANGE][BITS_TO_LONGS(PRIO_RANGE)] ++ __read_mostly; + +-static inline unsigned int task_timeslice(struct task_struct *p) +-{ +- return static_prio_timeslice(p->static_prio); +-} ++struct rq; + + /* + * These are the runqueue data structures: + */ +- + struct prio_array { +- unsigned int nr_active; +- DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */ +- struct list_head queue[MAX_PRIO]; ++ /* Tasks queued at each priority */ ++ struct list_head queue[MAX_PRIO + 1]; ++ ++ /* ++ * The bitmap of priorities queued for this array. While the expired ++ * array will never have realtime tasks on it, it is simpler to have ++ * equal sized bitmaps for a cheap array swap. Include 1 bit for ++ * delimiter. ++ */ ++ DECLARE_BITMAP(prio_bitmap, MAX_PRIO + 1); ++ ++ /* ++ * The best static priority (of the dynamic priority tasks) queued ++ * this array. ++ */ ++ int best_static_prio; ++ ++#ifdef CONFIG_SMP ++ /* For convenience looks back at rq */ ++ struct rq *rq; ++#endif + }; + + /* +@@ -234,14 +195,28 @@ struct rq { + */ + unsigned long nr_uninterruptible; + +- unsigned long expired_timestamp; + /* Cached timestamp set by update_cpu_clock() */ + unsigned long long most_recent_timestamp; + struct task_struct *curr, *idle; + unsigned long next_balance; + struct mm_struct *prev_mm; +- struct prio_array *active, *expired, arrays[2]; +- int best_expired_prio; ++ ++ struct prio_array *active, *expired, *idleprio, arrays[2]; ++ unsigned long *dyn_bitmap, *exp_bitmap; ++ ++ /* ++ * The current dynamic priority level this runqueue is at per static ++ * priority level. ++ */ ++ int prio_level[PRIO_RANGE]; ++ ++ /* How many times we have rotated the priority queue */ ++ unsigned long prio_rotation; ++ unsigned long iso_ticks; ++ unsigned short iso_refractory; ++ ++ /* Number of idleprio tasks running */ ++ unsigned long nr_idleprio; + atomic_t nr_iowait; + + #ifdef CONFIG_SMP +@@ -579,12 +554,9 @@ static inline struct rq *this_rq_lock(vo + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + /* + * Called when a process is dequeued from the active array and given +- * the cpu. We should note that with the exception of interactive +- * tasks, the expired queue will become the active queue after the active +- * queue is empty, without explicitly dequeuing and requeuing tasks in the +- * expired queue. (Interactive tasks may be requeued directly to the +- * active queue, thus delaying tasks in the expired queue from running; +- * see scheduler_tick()). ++ * the cpu. We should note that the expired queue will become the active ++ * queue after the active queue is empty, without explicitly dequeuing and ++ * requeuing tasks in the expired queue. + * + * This function is only called from sched_info_arrive(), rather than + * dequeue_task(). Even though a task may be queued and dequeued multiple +@@ -682,71 +654,304 @@ sched_info_switch(struct task_struct *pr + #define sched_info_switch(t, next) do { } while (0) + #endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ + ++static int idleprio_suitable(struct task_struct *p) ++{ ++ return (!p->mutexes_held && !freezing(p) && !signal_pending(p) && ++ !(p->flags & (PF_NONSLEEP | PF_EXITING))); ++} ++ ++static int idleprio(const struct task_struct *p) ++{ ++ return (p->prio == MAX_PRIO); ++} ++ ++static inline int task_queued(struct task_struct *task) ++{ ++ return !list_empty(&task->run_list); ++} ++ ++static inline void set_dynamic_bit(struct task_struct *p, struct rq *rq) ++{ ++ __set_bit(p->prio, p->array->prio_bitmap); ++} ++ + /* +- * Adding/removing a task to/from a priority array: ++ * Removing from a runqueue. + */ +-static void dequeue_task(struct task_struct *p, struct prio_array *array) ++static void dequeue_task(struct task_struct *p, struct rq *rq) + { +- array->nr_active--; +- list_del(&p->run_list); +- if (list_empty(array->queue + p->prio)) +- __clear_bit(p->prio, array->bitmap); ++ list_del_init(&p->run_list); ++ if (idleprio_task(p) && idleprio(p)) ++ rq->nr_idleprio--; ++ else if (list_empty(p->array->queue + p->prio)) ++ __clear_bit(p->prio, p->array->prio_bitmap); + } + +-static void enqueue_task(struct task_struct *p, struct prio_array *array) ++static void reset_first_time_slice(struct task_struct *p) + { +- sched_info_queued(p); +- list_add_tail(&p->run_list, array->queue + p->prio); +- __set_bit(p->prio, array->bitmap); +- array->nr_active++; ++ if (unlikely(p->first_time_slice)) ++ p->first_time_slice = 0; ++} ++ ++/* ++ * The task is being queued on a fresh array so it has its entitlement ++ * bitmap cleared. ++ */ ++static void task_new_array(struct task_struct *p, struct rq *rq, ++ struct prio_array *array) ++{ ++ bitmap_zero(p->bitmap, PRIO_RANGE); ++ p->rotation = rq->prio_rotation; ++ p->time_slice = p->quota; + p->array = array; ++ reset_first_time_slice(p); ++} ++ ++/* Find the first slot from the relevant prio_matrix entry */ ++static int first_prio_slot(struct task_struct *p) ++{ ++ if (unlikely(p->policy == SCHED_BATCH)) ++ return p->static_prio; ++ return SCHED_PRIO(find_first_zero_bit( ++ prio_matrix[USER_PRIO(p->static_prio)], PRIO_RANGE)); + } + + /* +- * Put task to the end of the run list without the overhead of dequeue +- * followed by enqueue. ++ * In sched_interactive mode priority allocation occurs per process per rq ++ * array swap. In !sched_interactive mode all waking tasks must obey the ++ * current prio level of all other tasks running per array swap. + */ +-static void requeue_task(struct task_struct *p, struct prio_array *array) ++static int minprio(struct rq *rq, int uprio) + { +- list_move_tail(&p->run_list, array->queue + p->prio); ++ if (sched_interactive) ++ return MAX_RT_PRIO; ++ return rq->prio_level[uprio]; + } + +-static inline void +-enqueue_task_head(struct task_struct *p, struct prio_array *array) ++/* ++ * Find the first unused slot by this task that is also in its prio_matrix ++ * level. SCHED_BATCH tasks do not use the priority matrix. They only take ++ * priority slots from their static_prio and above. ++ */ ++static int next_entitled_slot(struct task_struct *p, struct rq *rq) + { +- list_add(&p->run_list, array->queue + p->prio); +- __set_bit(p->prio, array->bitmap); +- array->nr_active++; +- p->array = array; ++ int search_prio = MAX_RT_PRIO, uprio = USER_PRIO(p->static_prio); ++ struct prio_array *array = rq->active; ++ DECLARE_BITMAP(tmp, PRIO_RANGE); ++ ++ /* ++ * Go straight to expiration if there are higher priority tasks ++ * already expired. ++ */ ++ if (p->static_prio > rq->expired->best_static_prio) ++ return MAX_PRIO; ++ if (!rq->prio_level[uprio]) ++ rq->prio_level[uprio] = MAX_RT_PRIO; ++ /* ++ * Only priorities equal to the prio_level and above for their ++ * static_prio are acceptable, and only if it's not better than ++ * a queued better static_prio's prio_level. ++ */ ++ if (p->static_prio < array->best_static_prio) { ++ if (likely(p->policy != SCHED_BATCH)) ++ array->best_static_prio = p->static_prio; ++ } else if (p->static_prio == array->best_static_prio) { ++ search_prio = minprio(rq, uprio); ++ } else { ++ int i; ++ ++ search_prio = minprio(rq, uprio); ++ /* A bound O(n) function, worst case n is 40 */ ++ for (i = array->best_static_prio; i <= p->static_prio ; i++) { ++ if (!rq->prio_level[USER_PRIO(i)]) ++ rq->prio_level[USER_PRIO(i)] = MAX_RT_PRIO; ++ search_prio = max(search_prio, ++ rq->prio_level[USER_PRIO(i)]); ++ } ++ } ++ if (unlikely(p->policy == SCHED_BATCH)) { ++ search_prio = max(search_prio, p->static_prio); ++ return SCHED_PRIO(find_next_zero_bit(p->bitmap, PRIO_RANGE, ++ USER_PRIO(search_prio))); ++ } ++ bitmap_or(tmp, p->bitmap, prio_matrix[uprio], PRIO_RANGE); ++ return SCHED_PRIO(find_next_zero_bit(tmp, PRIO_RANGE, ++ USER_PRIO(search_prio))); ++} ++ ++static void queue_expired(struct task_struct *p, struct rq *rq) ++{ ++ task_new_array(p, rq, rq->expired); ++ p->prio = p->normal_prio = first_prio_slot(p); ++ if (p->static_prio < rq->expired->best_static_prio) ++ rq->expired->best_static_prio = p->static_prio; ++ reset_first_time_slice(p); + } + ++#ifdef CONFIG_SMP + /* +- * __normal_prio - return the priority that is based on the static +- * priority but is modified by bonuses/penalties. +- * +- * We scale the actual sleep average [0 .... MAX_SLEEP_AVG] +- * into the -5 ... 0 ... +5 bonus/penalty range. +- * +- * We use 25% of the full 0...39 priority range so that: +- * +- * 1) nice +19 interactive tasks do not preempt nice 0 CPU hogs. +- * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks. +- * +- * Both properties are important to certain workloads. ++ * If we're waking up a task that was previously on a different runqueue, ++ * update its data appropriately. Note we may be reading data from src_rq-> ++ * outside of lock, but the occasional inaccurate result should be harmless. + */ ++ static void update_if_moved(struct task_struct *p, struct rq *rq) ++{ ++ struct rq *src_rq = p->array->rq; + +-static inline int __normal_prio(struct task_struct *p) ++ if (src_rq == rq) ++ return; ++ /* ++ * Only need to set p->array when p->rotation == rq->prio_rotation as ++ * they will be set in recalc_task_prio when != rq->prio_rotation. ++ */ ++ if (p->rotation == src_rq->prio_rotation) { ++ p->rotation = rq->prio_rotation; ++ if (p->array == src_rq->expired) ++ p->array = rq->expired; ++ else ++ p->array = rq->active; ++ } else ++ p->rotation = 0; ++} ++#else ++static inline void update_if_moved(struct task_struct *p, struct rq *rq) ++{ ++} ++#endif ++ ++static inline int isoprio_suitable(struct task_struct *p) + { +- int bonus, prio; ++ return !(p->flags & PF_ISOREF); ++} + +- bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; ++static int task_timeslice(struct task_struct *p); + +- prio = p->static_prio - bonus; +- if (prio < MAX_RT_PRIO) +- prio = MAX_RT_PRIO; +- if (prio > MAX_PRIO-1) +- prio = MAX_PRIO-1; +- return prio; ++/* ++ * recalc_task_prio determines what priority a non rt_task will be ++ * queued at. If the task has already been running during this runqueue's ++ * major rotation (rq->prio_rotation) then it continues at the same ++ * priority if it has tick entitlement left. If it does not have entitlement ++ * left, it finds the next priority slot according to its nice value that it ++ * has not extracted quota from. If it has not run during this major ++ * rotation, it starts at the next_entitled_slot and has its bitmap quota ++ * cleared. If it does not have any slots left it has all its slots reset and ++ * is queued on the expired at its first_prio_slot. ++ */ ++static void recalc_task_prio(struct task_struct *p, struct rq *rq) ++{ ++ struct prio_array *array = rq->active; ++ int queue_prio; ++ ++ if (iso_task(p)) { ++ if (isoprio_suitable(p)) { ++ /* ++ * If SCHED_ISO tasks have not used up their real time ++ * quota they have run just better than highest ++ * SCHED_NORMAL priority. Otherwise they run as ++ * SCHED_NORMAL. ++ */ ++ p->prio = p->normal_prio = ISO_PRIO; ++ p->array = rq->active; ++ if (p->time_slice <= 0) ++ p->time_slice = p->quota; ++ return; ++ } else if (p->prio == ISO_PRIO) { ++ /* Just about to be demoted to SCHED_NORMAL */ ++ p->time_slice = 0; ++ } ++ } else if (idleprio_task(p)) { ++ if (idleprio_suitable(p)) { ++ /* ++ * If suitable idleprio_tasks are queued at MAX_PRIO ++ * only on the idleprio array. Their time_slice is ++ * their full task_timeslice as they cooperatively ++ * multitask. ++ */ ++ p->prio = p->normal_prio = MAX_PRIO; ++ p->array = rq->idleprio; ++ if (p->time_slice <= 0) ++ p->time_slice = task_timeslice(p); ++ return; ++ } ++ /* ++ * If unsuitable idleprio_tasks are queued equivalent to ++ * nice 19 tasks on the expired array. ++ */ ++ p->flags &= ~PF_NONSLEEP; ++ p->prio = p->normal_prio = MAX_PRIO - 1; ++ p->array = rq->expired; ++ if (p->time_slice <= 0 || p->time_slice > p->quota) ++ p->time_slice = p->quota; ++ return; ++ } ++ ++ update_if_moved(p, rq); ++ if (p->rotation == rq->prio_rotation) { ++ if (p->array == array) { ++ if (p->time_slice > 0) ++ return; ++ p->time_slice = p->quota; ++ } else if (p->array == rq->expired) { ++ queue_expired(p, rq); ++ return; ++ } else ++ task_new_array(p, rq, array); ++ } else ++ task_new_array(p, rq, array); ++ ++ queue_prio = next_entitled_slot(p, rq); ++ if (queue_prio >= MAX_PRIO) { ++ queue_expired(p, rq); ++ return; ++ } ++ p->prio = p->normal_prio = queue_prio; ++ __set_bit(USER_PRIO(p->prio), p->bitmap); ++} ++ ++/* ++ * Adding to a runqueue. The dynamic priority queue that it is added to is ++ * determined by recalc_task_prio() above. ++ */ ++static inline void __enqueue_task(struct task_struct *p, struct rq *rq) ++{ ++ if (rt_task(p)) ++ p->array = rq->active; ++ else ++ recalc_task_prio(p, rq); ++ ++ if (idleprio_task(p) && idleprio(p)) ++ rq->nr_idleprio++; ++ sched_info_queued(p); ++ set_dynamic_bit(p, rq); ++} ++ ++static void enqueue_task(struct task_struct *p, struct rq *rq) ++{ ++ __enqueue_task(p, rq); ++ list_add_tail(&p->run_list, p->array->queue + p->prio); ++} ++ ++static inline void enqueue_task_head(struct task_struct *p, struct rq *rq) ++{ ++ __enqueue_task(p, rq); ++ list_add(&p->run_list, p->array->queue + p->prio); ++} ++ ++/* ++ * requeue_task is only called when p->static_prio does not change. p->prio ++ * can change with dynamic tasks. ++ */ ++static void requeue_task(struct task_struct *p, struct rq *rq, ++ struct prio_array *old_array, int old_prio) ++{ ++ if (p->array == rq->expired) ++ queue_expired(p, rq); ++ list_move_tail(&p->run_list, p->array->queue + p->prio); ++ if (!rt_task(p)) { ++ if (list_empty(old_array->queue + old_prio)) ++ __clear_bit(old_prio, old_array->prio_bitmap); ++ set_dynamic_bit(p, rq); ++ } + } + + /* +@@ -759,20 +964,29 @@ static inline int __normal_prio(struct t + */ + + /* +- * Assume: static_prio_timeslice(NICE_TO_PRIO(0)) == DEF_TIMESLICE +- * If static_prio_timeslice() is ever changed to break this assumption then +- * this code will need modification +- */ +-#define TIME_SLICE_NICE_ZERO DEF_TIMESLICE +-#define LOAD_WEIGHT(lp) \ +- (((lp) * SCHED_LOAD_SCALE) / TIME_SLICE_NICE_ZERO) +-#define PRIO_TO_LOAD_WEIGHT(prio) \ +- LOAD_WEIGHT(static_prio_timeslice(prio)) +-#define RTPRIO_TO_LOAD_WEIGHT(rp) \ +- (PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp)) ++ * task_timeslice - the total duration a task can run during one major ++ * rotation. Returns value in milliseconds as the smallest value can be 1. ++ */ ++static int task_timeslice(struct task_struct *p) ++{ ++ int slice = p->quota; /* quota is in us */ ++ ++ if (!rt_task(p)) ++ slice += (PRIO_RANGE - 1 - TASK_USER_PRIO(p)) * slice; ++ return US_TO_MS(slice); ++} ++ ++/* ++ * The load weight is basically the task_timeslice in ms. Realtime tasks are ++ * special cased to be proportionately larger than nice -20 by their ++ * rt_priority. The weight for rt tasks can only be arbitrary at best. ++ */ ++#define RTPRIO_TO_LOAD_WEIGHT(rp) (rr_interval * 20 * (40 + rp)) + + static void set_load_weight(struct task_struct *p) + { ++ int load_weight; ++ + if (has_rt_policy(p)) { + #ifdef CONFIG_SMP + if (p == task_rq(p)->migration_thread) +@@ -781,12 +995,19 @@ static void set_load_weight(struct task_ + * Giving its load any weight will skew balancing + * adversely. + */ +- p->load_weight = 0; ++ load_weight = 0; + else + #endif +- p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority); ++ load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority); + } else +- p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio); ++ load_weight = task_timeslice(p); ++ /* ++ * idleprio tasks have much lower weight than SCHED_NORMAL tasks but ++ * still need to be weighted to allow balancing to occur. ++ */ ++ if (likely(!idleprio_task(p))) ++ load_weight *= PRIO_RANGE; ++ p->load_weight = load_weight; + } + + static inline void +@@ -814,28 +1035,38 @@ static inline void dec_nr_running(struct + } + + /* +- * Calculate the expected normal priority: i.e. priority +- * without taking RT-inheritance into account. Might be +- * boosted by interactivity modifiers. Changes upon fork, +- * setprio syscalls, and whenever the interactivity +- * estimator recalculates. ++ * __activate_task - move a task to the runqueue. + */ +-static inline int normal_prio(struct task_struct *p) ++static inline void __activate_task(struct task_struct *p, struct rq *rq) + { +- int prio; ++ enqueue_task(p, rq); ++ inc_nr_running(p, rq); ++} + ++/* ++ * __activate_idle_task - move idle task to the _front_ of runqueue. ++ */ ++static inline void __activate_idle_task(struct task_struct *p, struct rq *rq) ++{ ++ enqueue_task_head(p, rq); ++ inc_nr_running(p, rq); ++} ++ ++static inline int normal_prio(struct task_struct *p) ++{ + if (has_rt_policy(p)) +- prio = MAX_RT_PRIO-1 - p->rt_priority; ++ return MAX_RT_PRIO-1 - p->rt_priority; ++ /* Other tasks all have normal_prio set in recalc_task_prio */ ++ if (likely(p->prio >= MAX_RT_PRIO && p->prio < MAX_PRIO)) ++ return p->prio; + else +- prio = __normal_prio(p); +- return prio; ++ return p->static_prio; + } + + /* + * Calculate the current priority, i.e. the priority + * taken into account by the scheduler. This value might +- * be boosted by RT tasks, or might be boosted by +- * interactivity modifiers. Will be RT if the task got ++ * be boosted by RT tasks as it will be RT if the task got + * RT-boosted. If not then it returns p->normal_prio. + */ + static int effective_prio(struct task_struct *p) +@@ -852,111 +1083,41 @@ static int effective_prio(struct task_st + } + + /* +- * __activate_task - move a task to the runqueue. ++ * All tasks have quotas based on rr_interval. RT tasks all get rr_interval. ++ * From nice 1 to 19 they are smaller than it only if they are at least one ++ * tick still. Below nice 0 they get progressively larger. ++ * ie nice -6..0 = rr_interval. nice -10 = 2.5 * rr_interval ++ * nice -20 = 10 * rr_interval. nice 1-19 = rr_interval / 2. ++ * Value returned is in microseconds. + */ +-static void __activate_task(struct task_struct *p, struct rq *rq) ++static inline unsigned int rr_quota(struct task_struct *p) + { +- struct prio_array *target = rq->active; ++ int nice = TASK_NICE(p), rr = rr_interval; + +- if (batch_task(p)) +- target = rq->expired; +- enqueue_task(p, target); +- inc_nr_running(p, rq); +-} +- +-/* +- * __activate_idle_task - move idle task to the _front_ of runqueue. +- */ +-static inline void __activate_idle_task(struct task_struct *p, struct rq *rq) +-{ +- enqueue_task_head(p, rq->active); +- inc_nr_running(p, rq); ++ if (!rt_task(p)) { ++ if (nice < -6) { ++ rr *= nice * nice; ++ rr /= 40; ++ } else if (nice > 0) ++ rr = rr / 2 ? : 1; ++ } ++ return MS_TO_US(rr); + } + +-/* +- * Recalculate p->normal_prio and p->prio after having slept, +- * updating the sleep-average too: +- */ +-static int recalc_task_prio(struct task_struct *p, unsigned long long now) ++/* Every time we set the quota we need to set the load weight */ ++static void set_quota(struct task_struct *p) + { +- /* Caller must always ensure 'now >= p->timestamp' */ +- unsigned long sleep_time = now - p->timestamp; +- +- if (batch_task(p)) +- sleep_time = 0; +- +- if (likely(sleep_time > 0)) { +- /* +- * This ceiling is set to the lowest priority that would allow +- * a task to be reinserted into the active array on timeslice +- * completion. +- */ +- unsigned long ceiling = INTERACTIVE_SLEEP(p); +- +- if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) { +- /* +- * Prevents user tasks from achieving best priority +- * with one single large enough sleep. +- */ +- p->sleep_avg = ceiling; +- /* +- * Using INTERACTIVE_SLEEP() as a ceiling places a +- * nice(0) task 1ms sleep away from promotion, and +- * gives it 700ms to round-robin with no chance of +- * being demoted. This is more than generous, so +- * mark this sleep as non-interactive to prevent the +- * on-runqueue bonus logic from intervening should +- * this task not receive cpu immediately. +- */ +- p->sleep_type = SLEEP_NONINTERACTIVE; +- } else { +- /* +- * Tasks waking from uninterruptible sleep are +- * limited in their sleep_avg rise as they +- * are likely to be waiting on I/O +- */ +- if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) { +- if (p->sleep_avg >= ceiling) +- sleep_time = 0; +- else if (p->sleep_avg + sleep_time >= +- ceiling) { +- p->sleep_avg = ceiling; +- sleep_time = 0; +- } +- } +- +- /* +- * This code gives a bonus to interactive tasks. +- * +- * The boost works by updating the 'average sleep time' +- * value here, based on ->timestamp. The more time a +- * task spends sleeping, the higher the average gets - +- * and the higher the priority boost gets as well. +- */ +- p->sleep_avg += sleep_time; +- +- } +- if (p->sleep_avg > NS_MAX_SLEEP_AVG) +- p->sleep_avg = NS_MAX_SLEEP_AVG; +- } +- +- return effective_prio(p); ++ p->quota = rr_quota(p); ++ set_load_weight(p); + } + + /* + * activate_task - move a task to the runqueue and do priority recalculation +- * +- * Update all the scheduling statistics stuff. (sleep average +- * calculation, priority modifiers, etc.) + */ + static void activate_task(struct task_struct *p, struct rq *rq, int local) + { +- unsigned long long now; +- +- if (rt_task(p)) +- goto out; ++ unsigned long long now = sched_clock(); + +- now = sched_clock(); + #ifdef CONFIG_SMP + if (!local) { + /* Compensate for drifting sched_clock */ +@@ -977,32 +1138,9 @@ static void activate_task(struct task_st + (now - p->timestamp) >> 20); + } + +- p->prio = recalc_task_prio(p, now); +- +- /* +- * This checks to make sure it's not an uninterruptible task +- * that is now waking up. +- */ +- if (p->sleep_type == SLEEP_NORMAL) { +- /* +- * Tasks which were woken up by interrupts (ie. hw events) +- * are most likely of interactive nature. So we give them +- * the credit of extending their sleep time to the period +- * of time they spend on the runqueue, waiting for execution +- * on a CPU, first time around: +- */ +- if (in_interrupt()) +- p->sleep_type = SLEEP_INTERRUPTED; +- else { +- /* +- * Normal first-time wakeups get a credit too for +- * on-runqueue time, but it will be weighted down: +- */ +- p->sleep_type = SLEEP_INTERACTIVE; +- } +- } ++ set_quota(p); ++ p->prio = effective_prio(p); + p->timestamp = now; +-out: + __activate_task(p, rq); + } + +@@ -1012,8 +1150,7 @@ out: + static void deactivate_task(struct task_struct *p, struct rq *rq) + { + dec_nr_running(p, rq); +- dequeue_task(p, p->array); +- p->array = NULL; ++ dequeue_task(p, rq); + } + + /* +@@ -1095,7 +1232,7 @@ migrate_task(struct task_struct *p, int + * If the task is not on a runqueue (and not running), then + * it is sufficient to simply update the task's cpu field. + */ +- if (!p->array && !task_running(rq, p)) { ++ if (!task_queued(p) && !task_running(rq, p)) { + set_task_cpu(p, dest_cpu); + return 0; + } +@@ -1126,7 +1263,7 @@ void wait_task_inactive(struct task_stru + repeat: + rq = task_rq_lock(p, &flags); + /* Must be off runqueue entirely, not preempted. */ +- if (unlikely(p->array || task_running(rq, p))) { ++ if (unlikely(task_queued(p) || task_running(rq, p))) { + /* If it's preempted, we yield. It could be a while. */ + preempted = !task_running(rq, p); + task_rq_unlock(rq, &flags); +@@ -1391,6 +1528,31 @@ static inline int wake_idle(int cpu, str + } + #endif + ++/* ++ * We need to have a special definition for an idle runqueue when testing ++ * for preemption on CONFIG_HOTPLUG_CPU as the idle task may be scheduled as ++ * a realtime task in sched_idle_next. ++ */ ++#ifdef CONFIG_HOTPLUG_CPU ++#define rq_idle(rq) ((rq)->curr == (rq)->idle && !rt_task((rq)->curr)) ++#else ++#define rq_idle(rq) ((rq)->curr == (rq)->idle) ++#endif ++ ++static inline int task_preempts_curr(struct task_struct *p, struct rq *rq) ++{ ++ struct task_struct *curr = rq->curr; ++ ++ return ((p->array == task_rq(p)->active && ++ TASK_PREEMPTS_CURR(p, curr)) || rq_idle(rq)); ++} ++ ++static inline void try_preempt(struct task_struct *p, struct rq *rq) ++{ ++ if (task_preempts_curr(p, rq)) ++ resched_task(rq->curr); ++} ++ + /*** + * try_to_wake_up - wake up a thread + * @p: the to-be-woken-up thread +@@ -1422,7 +1584,7 @@ static int try_to_wake_up(struct task_st + if (!(old_state & state)) + goto out; + +- if (p->array) ++ if (task_queued(p)) + goto out_running; + + cpu = task_cpu(p); +@@ -1515,7 +1677,7 @@ out_set_cpu: + old_state = p->state; + if (!(old_state & state)) + goto out; +- if (p->array) ++ if (task_queued(p)) + goto out_running; + + this_cpu = smp_processor_id(); +@@ -1524,25 +1686,9 @@ out_set_cpu: + + out_activate: + #endif /* CONFIG_SMP */ +- if (old_state == TASK_UNINTERRUPTIBLE) { ++ if (old_state == TASK_UNINTERRUPTIBLE) + rq->nr_uninterruptible--; +- /* +- * Tasks on involuntary sleep don't earn +- * sleep_avg beyond just interactive state. +- */ +- p->sleep_type = SLEEP_NONINTERACTIVE; +- } else +- +- /* +- * Tasks that have marked their sleep as noninteractive get +- * woken up with their sleep average not weighted in an +- * interactive way. +- */ +- if (old_state & TASK_NONINTERACTIVE) +- p->sleep_type = SLEEP_NONINTERACTIVE; + +- +- activate_task(p, rq, cpu == this_cpu); + /* + * Sync wakeups (i.e. those types of wakeups where the waker + * has indicated that it will leave the CPU in short order) +@@ -1551,15 +1697,22 @@ out_activate: + * the waker guarantees that the freshly woken up task is going + * to be considered on this CPU.) + */ +- if (!sync || cpu != this_cpu) { +- if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); +- } ++ activate_task(p, rq, cpu == this_cpu); ++ if (!sync || cpu != this_cpu) ++ try_preempt(p, rq); + success = 1; + + out_running: + p->state = TASK_RUNNING; + out: ++ /* ++ * Special case when freezing we need to reschedule idleprio tasks ++ * as SCHED_NORMAL or else they'll never freeze ++ */ ++ if (idleprio_task(p) && freezing(p) && idleprio(p)) { ++ dequeue_task(p, rq); ++ enqueue_task(p, rq); ++ } + task_rq_unlock(rq, &flags); + + return success; +@@ -1577,7 +1730,6 @@ int fastcall wake_up_state(struct task_s + return try_to_wake_up(p, state, 0); + } + +-static void task_running_tick(struct rq *rq, struct task_struct *p); + /* + * Perform scheduler related setup for a newly forked process p. + * p is forked by current. +@@ -1605,7 +1757,6 @@ void fastcall sched_fork(struct task_str + p->prio = current->normal_prio; + + INIT_LIST_HEAD(&p->run_list); +- p->array = NULL; + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + if (unlikely(sched_info_on())) + memset(&p->sched_info, 0, sizeof(p->sched_info)); +@@ -1617,30 +1768,31 @@ void fastcall sched_fork(struct task_str + /* Want to start with kernel preemption disabled. */ + task_thread_info(p)->preempt_count = 1; + #endif ++ if (unlikely(p->policy == SCHED_FIFO)) ++ goto out; + /* + * Share the timeslice between parent and child, thus the + * total amount of pending timeslices in the system doesn't change, + * resulting in more scheduling fairness. + */ + local_irq_disable(); +- p->time_slice = (current->time_slice + 1) >> 1; +- /* +- * The remainder of the first timeslice might be recovered by +- * the parent if the child exits early enough. +- */ +- p->first_time_slice = 1; +- current->time_slice >>= 1; +- p->timestamp = sched_clock(); +- if (unlikely(!current->time_slice)) { ++ if (current->time_slice > 0) { ++ current->time_slice /= 2; ++ if (current->time_slice) ++ p->time_slice = current->time_slice; ++ else ++ p->time_slice = 1; + /* +- * This case is rare, it happens when the parent has only +- * a single jiffy left from its timeslice. Taking the +- * runqueue lock is not a problem. ++ * The remainder of the first timeslice might be recovered by ++ * the parent if the child exits early enough. + */ +- current->time_slice = 1; +- task_running_tick(cpu_rq(cpu), current); +- } ++ p->first_time_slice = 1; ++ } else ++ p->time_slice = 0; ++ ++ p->timestamp = sched_clock(); + local_irq_enable(); ++out: + put_cpu(); + } + +@@ -1662,38 +1814,16 @@ void fastcall wake_up_new_task(struct ta + this_cpu = smp_processor_id(); + cpu = task_cpu(p); + +- /* +- * We decrease the sleep average of forking parents +- * and children as well, to keep max-interactive tasks +- * from forking tasks that are max-interactive. The parent +- * (current) is done further down, under its lock. +- */ +- p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) * +- CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); +- +- p->prio = effective_prio(p); +- + if (likely(cpu == this_cpu)) { ++ activate_task(p, rq, 1); + if (!(clone_flags & CLONE_VM)) { + /* + * The VM isn't cloned, so we're in a good position to + * do child-runs-first in anticipation of an exec. This + * usually avoids a lot of COW overhead. + */ +- if (unlikely(!current->array)) +- __activate_task(p, rq); +- else { +- p->prio = current->prio; +- p->normal_prio = current->normal_prio; +- list_add_tail(&p->run_list, ¤t->run_list); +- p->array = current->array; +- p->array->nr_active++; +- inc_nr_running(p, rq); +- } + set_need_resched(); +- } else +- /* Run child last */ +- __activate_task(p, rq); ++ } + /* + * We skip the following code due to cpu == this_cpu + * +@@ -1710,19 +1840,16 @@ void fastcall wake_up_new_task(struct ta + */ + p->timestamp = (p->timestamp - this_rq->most_recent_timestamp) + + rq->most_recent_timestamp; +- __activate_task(p, rq); +- if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ activate_task(p, rq, 0); ++ try_preempt(p, rq); + + /* + * Parent and child are on different CPUs, now get the +- * parent runqueue to update the parent's ->sleep_avg: ++ * parent runqueue to update the parent's ->flags: + */ + task_rq_unlock(rq, &flags); + this_rq = task_rq_lock(current, &flags); + } +- current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) * +- PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); + task_rq_unlock(this_rq, &flags); + } + +@@ -1737,23 +1864,17 @@ void fastcall wake_up_new_task(struct ta + */ + void fastcall sched_exit(struct task_struct *p) + { ++ struct task_struct *parent; + unsigned long flags; + struct rq *rq; + +- /* +- * If the child was a (relative-) CPU hog then decrease +- * the sleep_avg of the parent as well. +- */ +- rq = task_rq_lock(p->parent, &flags); +- if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) { +- p->parent->time_slice += p->time_slice; +- if (unlikely(p->parent->time_slice > task_timeslice(p))) +- p->parent->time_slice = task_timeslice(p); +- } +- if (p->sleep_avg < p->parent->sleep_avg) +- p->parent->sleep_avg = p->parent->sleep_avg / +- (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg / +- (EXIT_WEIGHT + 1); ++ parent = p->parent; ++ rq = task_rq_lock(parent, &flags); ++ if (p->first_time_slice > 0 && task_cpu(p) == task_cpu(parent)) { ++ parent->time_slice += p->time_slice; ++ if (unlikely(parent->time_slice > parent->quota)) ++ parent->time_slice = parent->quota; ++ } + task_rq_unlock(rq, &flags); + } + +@@ -2085,23 +2206,17 @@ void sched_exec(void) + * pull_task - move a task from a remote runqueue to the local runqueue. + * Both runqueues must be locked. + */ +-static void pull_task(struct rq *src_rq, struct prio_array *src_array, +- struct task_struct *p, struct rq *this_rq, +- struct prio_array *this_array, int this_cpu) ++static void pull_task(struct rq *src_rq, struct task_struct *p, ++ struct rq *this_rq, int this_cpu) + { +- dequeue_task(p, src_array); ++ dequeue_task(p, src_rq); + dec_nr_running(p, src_rq); + set_task_cpu(p, this_cpu); + inc_nr_running(p, this_rq); +- enqueue_task(p, this_array); ++ enqueue_task(p, this_rq); + p->timestamp = (p->timestamp - src_rq->most_recent_timestamp) + + this_rq->most_recent_timestamp; +- /* +- * Note that idle threads have a prio of MAX_PRIO, for this test +- * to be always true for them. +- */ +- if (TASK_PREEMPTS_CURR(p, this_rq)) +- resched_task(this_rq->curr); ++ try_preempt(p, this_rq); + } + + /* +@@ -2144,7 +2259,16 @@ int can_migrate_task(struct task_struct + return 1; + } + +-#define rq_best_prio(rq) min((rq)->curr->prio, (rq)->best_expired_prio) ++static inline int rq_best_prio(struct rq *rq) ++{ ++ int best_prio, exp_prio; ++ ++ best_prio = sched_find_first_bit(rq->dyn_bitmap); ++ exp_prio = find_next_bit(rq->exp_bitmap, MAX_PRIO, MAX_RT_PRIO); ++ if (unlikely(best_prio > exp_prio)) ++ best_prio = exp_prio; ++ return best_prio; ++} + + /* + * move_tasks tries to move up to max_nr_move tasks and max_load_move weighted +@@ -2160,7 +2284,7 @@ static int move_tasks(struct rq *this_rq + { + int idx, pulled = 0, pinned = 0, this_best_prio, best_prio, + best_prio_seen, skip_for_load; +- struct prio_array *array, *dst_array; ++ struct prio_array *array; + struct list_head *head, *curr; + struct task_struct *tmp; + long rem_load_move; +@@ -2187,31 +2311,29 @@ static int move_tasks(struct rq *this_rq + * be cache-cold, thus switching CPUs has the least effect + * on them. + */ +- if (busiest->expired->nr_active) { +- array = busiest->expired; +- dst_array = this_rq->expired; +- } else { +- array = busiest->active; +- dst_array = this_rq->active; +- } +- ++ array = busiest->expired; + new_array: +- /* Start searching at priority 0: */ +- idx = 0; ++ /* Expired arrays don't have RT tasks so they're always MAX_RT_PRIO+ */ ++ if (array == busiest->expired) ++ idx = MAX_RT_PRIO; ++ else ++ idx = 0; + skip_bitmap: + if (!idx) +- idx = sched_find_first_bit(array->bitmap); ++ idx = sched_find_first_bit(array->prio_bitmap); + else +- idx = find_next_bit(array->bitmap, MAX_PRIO, idx); +- if (idx >= MAX_PRIO) { +- if (array == busiest->expired && busiest->active->nr_active) { ++ idx = find_next_bit(array->prio_bitmap, MAX_PRIO, idx); ++ if (idx == MAX_PRIO) { ++ if (array == busiest->idleprio && busiest->nr_idleprio) ++ goto found_idleprio; ++ if (array == busiest->expired) { + array = busiest->active; +- dst_array = this_rq->active; + goto new_array; + } + goto out; + } + ++found_idleprio: + head = array->queue + idx; + curr = head->prev; + skip_queue: +@@ -2233,11 +2355,22 @@ skip_queue: + best_prio_seen |= idx == best_prio; + if (curr != head) + goto skip_queue; ++ if (idx == MAX_PRIO) { ++ /* ++ * Occurs either when balancing idleprio tasks or ++ * there really are no more tasks to find. ++ */ ++ if (array == busiest->expired) { ++ array = busiest->active; ++ goto new_array; ++ } ++ goto out; ++ } + idx++; + goto skip_bitmap; + } + +- pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu); ++ pull_task(busiest, tmp, this_rq, this_cpu); + pulled++; + rem_load_move -= tmp->load_weight; + +@@ -2250,6 +2383,13 @@ skip_queue: + this_best_prio = idx; + if (curr != head) + goto skip_queue; ++ if (idx == MAX_PRIO) { ++ if (array == busiest->expired) { ++ array = busiest->active; ++ goto new_array; ++ } ++ goto out; ++ } + idx++; + goto skip_bitmap; + } +@@ -3013,11 +3153,36 @@ EXPORT_PER_CPU_SYMBOL(kstat); + /* + * This is called on clock ticks and on context switches. + * Bank in p->sched_time the ns elapsed since the last tick or switch. ++ * CPU scheduler quota accounting is also performed here in microseconds. ++ * The value returned from sched_clock() occasionally gives bogus values so ++ * some sanity checking is required. + */ +-static inline void +-update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now) ++static void ++update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now, ++ int tick) + { +- p->sched_time += now - p->last_ran; ++ long time_diff = now - p->last_ran; ++ ++ if (tick) { ++ /* ++ * Called from scheduler_tick() there should be less than two ++ * jiffies worth, and not negative/overflow. ++ */ ++ if (time_diff > JIFFIES_TO_NS(2) || time_diff < 0) ++ time_diff = JIFFIES_TO_NS(1); ++ } else { ++ /* ++ * Called from context_switch there should be less than one ++ * jiffy worth, and not negative/overflow. There should be ++ * some time banked here so use a nominal 1us. ++ */ ++ if (time_diff > JIFFIES_TO_NS(1) || time_diff < 1) ++ time_diff = 1000; ++ } ++ /* time_slice accounting is done in usecs to avoid overflow on 32bit */ ++ if (p != rq->idle && p->policy != SCHED_FIFO) ++ p->time_slice -= time_diff / 1000; ++ p->sched_time += time_diff; + p->last_ran = rq->most_recent_timestamp = now; + } + +@@ -3038,27 +3203,6 @@ unsigned long long current_sched_time(co + } + + /* +- * We place interactive tasks back into the active array, if possible. +- * +- * To guarantee that this does not starve expired tasks we ignore the +- * interactivity of a task if the first expired task had to wait more +- * than a 'reasonable' amount of time. This deadline timeout is +- * load-dependent, as the frequency of array switched decreases with +- * increasing number of running tasks. We also ignore the interactivity +- * if a better static_prio task has expired: +- */ +-static inline int expired_starving(struct rq *rq) +-{ +- if (rq->curr->static_prio > rq->best_expired_prio) +- return 1; +- if (!STARVATION_LIMIT || !rq->expired_timestamp) +- return 0; +- if (jiffies - rq->expired_timestamp > STARVATION_LIMIT * rq->nr_running) +- return 1; +- return 0; +-} +- +-/* + * Account user cpu time to a process. + * @p: the process that the cpu time gets accounted to + * @hardirq_offset: the offset to subtract from hardirq_count() +@@ -3073,7 +3217,7 @@ void account_user_time(struct task_struc + + /* Add user time to cpustat. */ + tmp = cputime_to_cputime64(cputime); +- if (TASK_NICE(p) > 0) ++ if (TASK_NICE(p) > 0 || idleprio_task(p)) + cpustat->nice = cputime64_add(cpustat->nice, tmp); + else + cpustat->user = cputime64_add(cpustat->user, tmp); +@@ -3131,87 +3275,94 @@ void account_steal_time(struct task_stru + cpustat->steal = cputime64_add(cpustat->steal, tmp); + } + +-static void task_running_tick(struct rq *rq, struct task_struct *p) ++/* ++ * The task has used up its quota of running in this prio_level so it must be ++ * dropped a priority level, all managed by recalc_task_prio(). ++ */ ++static void task_expired_entitlement(struct rq *rq, struct task_struct *p) + { +- if (p->array != rq->active) { +- /* Task has expired but was not scheduled yet */ +- set_tsk_need_resched(p); ++ int overrun; ++ ++ reset_first_time_slice(p); ++ if (rt_task(p)) { ++ p->time_slice += p->quota; ++ list_move_tail(&p->run_list, p->array->queue + p->prio); + return; + } +- spin_lock(&rq->lock); ++ overrun = p->time_slice; ++ dequeue_task(p, rq); ++ enqueue_task(p, rq); + /* +- * The task was running during this tick - update the +- * time slice counter. Note: we do not update a thread's +- * priority until it either goes to sleep or uses up its +- * timeslice. This makes it possible for interactive tasks +- * to use up their timeslices at their highest priority levels. ++ * Subtract any extra time this task ran over its time_slice; ie ++ * overrun will either be 0 or negative. + */ +- if (rt_task(p)) { +- /* +- * RR tasks need a special form of timeslice management. +- * FIFO tasks have no timeslices. +- */ +- if ((p->policy == SCHED_RR) && !--p->time_slice) { +- p->time_slice = task_timeslice(p); +- p->first_time_slice = 0; +- set_tsk_need_resched(p); ++ p->time_slice += overrun; ++} + +- /* put it at the end of the queue: */ +- requeue_task(p, rq->active); +- } +- goto out_unlock; ++/* ++ * Test if SCHED_ISO tasks have run longer than their alloted period as RT ++ * tasks and set the refractory flag if necessary. There is 10% hysteresis ++ * for unsetting the flag. ++ */ ++static unsigned int test_ret_isorefractory(struct rq *rq) ++{ ++ if (likely(!rq->iso_refractory)) { ++ if (rq->iso_ticks / ISO_PERIOD > sched_iso_cpu) ++ rq->iso_refractory = 1; ++ } else { ++ if (rq->iso_ticks / ISO_PERIOD < (sched_iso_cpu * 90 / 100)) ++ rq->iso_refractory = 0; + } +- if (!--p->time_slice) { +- dequeue_task(p, rq->active); +- set_tsk_need_resched(p); +- p->prio = effective_prio(p); +- p->time_slice = task_timeslice(p); +- p->first_time_slice = 0; ++ return rq->iso_refractory; ++} + +- if (!rq->expired_timestamp) +- rq->expired_timestamp = jiffies; +- if (!TASK_INTERACTIVE(p) || expired_starving(rq)) { +- enqueue_task(p, rq->expired); +- if (p->static_prio < rq->best_expired_prio) +- rq->best_expired_prio = p->static_prio; +- } else +- enqueue_task(p, rq->active); +- } else { +- /* +- * Prevent a too long timeslice allowing a task to monopolize +- * the CPU. We do this by splitting up the timeslice into +- * smaller pieces. +- * +- * Note: this does not mean the task's timeslices expire or +- * get lost in any way, they just might be preempted by +- * another task of equal priority. (one with higher +- * priority would have preempted this task already.) We +- * requeue this task to the end of the list on this priority +- * level, which is in essence a round-robin of tasks with +- * equal priority. +- * +- * This only applies to tasks in the interactive +- * delta range with at least TIMESLICE_GRANULARITY to requeue. +- */ +- if (TASK_INTERACTIVE(p) && !((task_timeslice(p) - +- p->time_slice) % TIMESLICE_GRANULARITY(p)) && +- (p->time_slice >= TIMESLICE_GRANULARITY(p)) && +- (p->array == rq->active)) { ++/* No SCHED_ISO task was running so decrease rq->iso_ticks */ ++static inline void no_iso_tick(struct rq *rq) ++{ ++ rq->iso_ticks = rq->iso_ticks * (ISO_PERIOD - 1) / ISO_PERIOD; ++} + +- requeue_task(p, rq->active); +- set_tsk_need_resched(p); +- } ++/* This manages tasks that have run out of timeslice during a scheduler_tick */ ++static void task_running_tick(struct rq *rq, struct task_struct *p) ++{ ++ /* ++ * If a SCHED_ISO task is running we increment the iso_ticks. In ++ * order to prevent SCHED_ISO tasks from causing starvation in the ++ * presence of true RT tasks we account those as iso_ticks as well. ++ */ ++ if ((rt_task(p) || (iso_task(p) && !rq->iso_refractory))) { ++ if (rq->iso_ticks <= (ISO_PERIOD * 100) - 100) ++ rq->iso_ticks += 100; ++ } else ++ no_iso_tick(rq); ++ ++ if (iso_task(p)) { ++ if (unlikely(test_ret_isorefractory(rq))) { ++ if (isoprio_suitable(p)) { ++ /* ++ * SCHED_ISO task is running as RT and limit ++ * has been hit. Set the PF_ISOREF flag and ++ * force it to reschedule as SCHED_NORMAL ++ * by zeroing its time_slice ++ */ ++ p->flags |= PF_ISOREF; ++ p->time_slice = 0; ++ } ++ } else ++ p->flags &= ~PF_ISOREF; + } +-out_unlock: +- spin_unlock(&rq->lock); ++ /* SCHED_FIFO tasks never run out of timeslice. */ ++ if (p->time_slice > 0 || p->policy == SCHED_FIFO) ++ return; ++ /* p->time_slice <= 0 */ ++ set_tsk_need_resched(p); ++ if (likely(task_queued(p))) ++ task_expired_entitlement(rq, p); + } + + /* + * This function gets called by the timer code, with HZ frequency. + * We call it with interrupts disabled. +- * +- * It also gets called by the fork code, when changing the parent's +- * timeslices. + */ + void scheduler_tick(void) + { +@@ -3220,10 +3371,14 @@ void scheduler_tick(void) + int cpu = smp_processor_id(); + struct rq *rq = cpu_rq(cpu); + +- update_cpu_clock(p, rq, now); ++ update_cpu_clock(p, rq, now, 1); + ++ spin_lock(&rq->lock); + if (p != rq->idle) + task_running_tick(rq, p); ++ else ++ no_iso_tick(rq); ++ spin_unlock(&rq->lock); + #ifdef CONFIG_SMP + update_load(rq); + if (time_after_eq(jiffies, rq->next_balance)) +@@ -3269,10 +3424,80 @@ EXPORT_SYMBOL(sub_preempt_count); + + #endif + +-static inline int interactive_sleep(enum sleep_type sleep_type) ++static void reset_prio_levels(struct rq *rq) ++{ ++ rq->active->best_static_prio = MAX_PRIO - 1; ++ rq->expired->best_static_prio = MAX_PRIO - 1; ++ memset(rq->prio_level, 0, sizeof(int) * PRIO_RANGE); ++} ++ ++/* ++ * Only tasks running are SCHED_IDLEPRIO. Set the active array to the ++ * idleprio array and if it isn't already active ++ */ ++static struct task_struct *next_idleprio_task(struct rq *rq) + { +- return (sleep_type == SLEEP_INTERACTIVE || +- sleep_type == SLEEP_INTERRUPTED); ++ struct prio_array *array = rq->active; ++ struct list_head *queue; ++ ++ if (array != rq->idleprio) { ++ rq->active = rq->idleprio; ++ rq->expired = array; ++ array = rq->active; ++ rq->exp_bitmap = rq->expired->prio_bitmap; ++ rq->dyn_bitmap = rq->active->prio_bitmap; ++ } ++ rq->prio_rotation++; ++ reset_prio_levels(rq); ++ queue = array->queue + MAX_PRIO; ++ return list_entry(queue->next, struct task_struct, run_list); ++} ++ ++/* ++ * next_dynamic_task finds the next suitable dynamic task. ++ */ ++static inline struct task_struct *next_dynamic_task(struct rq *rq, int idx) ++{ ++ struct prio_array *array = rq->active; ++ struct task_struct *next; ++ struct list_head *queue; ++ int nstatic; ++ ++retry: ++ if (unlikely(rq->nr_running == rq->nr_idleprio)) ++ return next_idleprio_task(rq); ++ if (idx >= MAX_PRIO) { ++ /* There are no more tasks in the active array. Swap arrays */ ++ array = rq->expired; ++ rq->expired = rq->active; ++ rq->active = array; ++ rq->exp_bitmap = rq->expired->prio_bitmap; ++ rq->dyn_bitmap = rq->active->prio_bitmap; ++ rq->prio_rotation++; ++ idx = find_next_bit(rq->dyn_bitmap, MAX_PRIO, MAX_RT_PRIO); ++ reset_prio_levels(rq); ++ } ++ queue = array->queue + idx; ++ next = list_entry(queue->next, struct task_struct, run_list); ++ if (unlikely(next->time_slice <= 0 && !(iso_task(next) && ++ isoprio_suitable(next)))) { ++ /* ++ * Unlucky enough that this task ran out of time_slice ++ * before it hit a scheduler_tick so it should have its ++ * priority reassessed and choose another task (possibly ++ * the same one) ++ */ ++ task_expired_entitlement(rq, next); ++ idx = find_next_bit(rq->dyn_bitmap, MAX_PRIO, MAX_RT_PRIO); ++ goto retry; ++ } ++ next->rotation = rq->prio_rotation; ++ nstatic = next->static_prio; ++ if (nstatic < array->best_static_prio) ++ array->best_static_prio = nstatic; ++ if (idx > rq->prio_level[USER_PRIO(nstatic)]) ++ rq->prio_level[USER_PRIO(nstatic)] = idx; ++ return next; + } + + /* +@@ -3281,13 +3506,11 @@ static inline int interactive_sleep(enum + asmlinkage void __sched schedule(void) + { + struct task_struct *prev, *next; +- struct prio_array *array; + struct list_head *queue; + unsigned long long now; +- unsigned long run_time; +- int cpu, idx, new_prio; + long *switch_count; + struct rq *rq; ++ int cpu, idx; + + /* + * Test if we are atomic. Since do_exit() needs to call into +@@ -3323,18 +3546,6 @@ need_resched_nonpreemptible: + + schedstat_inc(rq, sched_cnt); + now = sched_clock(); +- if (likely((long long)(now - prev->timestamp) < NS_MAX_SLEEP_AVG)) { +- run_time = now - prev->timestamp; +- if (unlikely((long long)(now - prev->timestamp) < 0)) +- run_time = 0; +- } else +- run_time = NS_MAX_SLEEP_AVG; +- +- /* +- * Tasks charged proportionately less run_time at high sleep_avg to +- * delay them losing their interactive status +- */ +- run_time /= (CURRENT_BONUS(prev) ? : 1); + + spin_lock_irq(&rq->lock); + +@@ -3345,8 +3556,10 @@ need_resched_nonpreemptible: + unlikely(signal_pending(prev)))) + prev->state = TASK_RUNNING; + else { +- if (prev->state == TASK_UNINTERRUPTIBLE) ++ if (prev->state == TASK_UNINTERRUPTIBLE) { ++ prev->flags |= PF_NONSLEEP; + rq->nr_uninterruptible++; ++ } + deactivate_task(prev, rq); + } + } +@@ -3356,59 +3569,29 @@ need_resched_nonpreemptible: + idle_balance(cpu, rq); + if (!rq->nr_running) { + next = rq->idle; +- rq->expired_timestamp = 0; + goto switch_tasks; + } + } + +- array = rq->active; +- if (unlikely(!array->nr_active)) { +- /* +- * Switch the active and expired arrays. +- */ +- schedstat_inc(rq, sched_switch); +- rq->active = rq->expired; +- rq->expired = array; +- array = rq->active; +- rq->expired_timestamp = 0; +- rq->best_expired_prio = MAX_PRIO; ++ idx = sched_find_first_bit(rq->dyn_bitmap); ++ if (likely(idx > ISO_PRIO)) ++ next = next_dynamic_task(rq, idx); ++ else { ++ queue = rq->active->queue + idx; ++ next = list_entry(queue->next, struct task_struct, run_list); + } +- +- idx = sched_find_first_bit(array->bitmap); +- queue = array->queue + idx; +- next = list_entry(queue->next, struct task_struct, run_list); +- +- if (!rt_task(next) && interactive_sleep(next->sleep_type)) { +- unsigned long long delta = now - next->timestamp; +- if (unlikely((long long)(now - next->timestamp) < 0)) +- delta = 0; +- +- if (next->sleep_type == SLEEP_INTERACTIVE) +- delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128; +- +- array = next->array; +- new_prio = recalc_task_prio(next, next->timestamp + delta); +- +- if (unlikely(next->prio != new_prio)) { +- dequeue_task(next, array); +- next->prio = new_prio; +- enqueue_task(next, array); +- } +- } +- next->sleep_type = SLEEP_NORMAL; + switch_tasks: +- if (next == rq->idle) ++ if (next == rq->idle) { ++ reset_prio_levels(rq); ++ rq->prio_rotation++; + schedstat_inc(rq, sched_goidle); ++ } + prefetch(next); + prefetch_stack(next); + clear_tsk_need_resched(prev); + rcu_qsctr_inc(task_cpu(prev)); + +- update_cpu_clock(prev, rq, now); +- +- prev->sleep_avg -= run_time; +- if ((long)prev->sleep_avg <= 0) +- prev->sleep_avg = 0; ++ update_cpu_clock(prev, rq, now, 0); + prev->timestamp = prev->last_ran = now; + + sched_info_switch(prev, next); +@@ -3844,29 +4027,22 @@ EXPORT_SYMBOL(sleep_on_timeout); + */ + void rt_mutex_setprio(struct task_struct *p, int prio) + { +- struct prio_array *array; + unsigned long flags; ++ int queued, oldprio; + struct rq *rq; +- int oldprio; + + BUG_ON(prio < 0 || prio > MAX_PRIO); + + rq = task_rq_lock(p, &flags); + + oldprio = p->prio; +- array = p->array; +- if (array) +- dequeue_task(p, array); ++ queued = task_queued(p); ++ if (queued) ++ dequeue_task(p, rq); + p->prio = prio; + +- if (array) { +- /* +- * If changing to an RT priority then queue it +- * in the active array! +- */ +- if (rt_task(p)) +- array = rq->active; +- enqueue_task(p, array); ++ if (queued) { ++ enqueue_task(p, rq); + /* + * Reschedule if we are currently running on this runqueue and + * our priority decreased, or if we are not currently running on +@@ -3875,8 +4051,8 @@ void rt_mutex_setprio(struct task_struct + if (task_running(rq, p)) { + if (p->prio > oldprio) + resched_task(rq->curr); +- } else if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ } else ++ try_preempt(p, rq); + } + task_rq_unlock(rq, &flags); + } +@@ -3885,8 +4061,7 @@ void rt_mutex_setprio(struct task_struct + + void set_user_nice(struct task_struct *p, long nice) + { +- struct prio_array *array; +- int old_prio, delta; ++ int queued, old_prio,delta; + unsigned long flags; + struct rq *rq; + +@@ -3907,26 +4082,27 @@ void set_user_nice(struct task_struct *p + p->static_prio = NICE_TO_PRIO(nice); + goto out_unlock; + } +- array = p->array; +- if (array) { +- dequeue_task(p, array); ++ queued = task_queued(p); ++ if (queued) { ++ dequeue_task(p, rq); + dec_raw_weighted_load(rq, p); + } + + p->static_prio = NICE_TO_PRIO(nice); +- set_load_weight(p); + old_prio = p->prio; + p->prio = effective_prio(p); ++ set_quota(p); + delta = p->prio - old_prio; + +- if (array) { +- enqueue_task(p, array); ++ if (queued) { ++ enqueue_task(p, rq); + inc_raw_weighted_load(rq, p); + /* + * If the task increased its priority or is running and + * lowered its priority, then reschedule its CPU: + */ +- if (delta < 0 || (delta > 0 && task_running(rq, p))) ++ if (delta < 0 || ((delta > 0 || idleprio_task(p)) && ++ task_running(rq, p))) + resched_task(rq->curr); + } + out_unlock: +@@ -3996,7 +4172,7 @@ asmlinkage long sys_nice(int increment) + * + * This is the priority value as seen by users in /proc. + * RT tasks are offset by -200. Normal tasks are centered +- * around 0, value goes from -16 to +15. ++ * around 0, value goes from 0 to +39. + */ + int task_prio(const struct task_struct *p) + { +@@ -4043,19 +4219,14 @@ static inline struct task_struct *find_p + /* Actually do priority change: must hold rq lock. */ + static void __setscheduler(struct task_struct *p, int policy, int prio) + { +- BUG_ON(p->array); ++ BUG_ON(task_queued(p)); + + p->policy = policy; + p->rt_priority = prio; + p->normal_prio = normal_prio(p); + /* we are holding p->pi_lock already */ + p->prio = rt_mutex_getprio(p); +- /* +- * SCHED_BATCH tasks are treated as perpetual CPU hogs: +- */ +- if (policy == SCHED_BATCH) +- p->sleep_avg = 0; +- set_load_weight(p); ++ set_quota(p); + } + + /** +@@ -4069,19 +4240,27 @@ static void __setscheduler(struct task_s + int sched_setscheduler(struct task_struct *p, int policy, + struct sched_param *param) + { +- int retval, oldprio, oldpolicy = -1; +- struct prio_array *array; ++ struct sched_param zero_param = { .sched_priority = 0 }; ++ int queued, retval, oldprio, oldpolicy = -1; + unsigned long flags; + struct rq *rq; + + /* may grab non-irq protected spin_locks */ + BUG_ON(in_interrupt()); ++ if (is_rt_policy(policy) && !capable(CAP_SYS_NICE)) { ++ /* ++ * If the caller requested an RT policy without having the ++ * necessary rights, we downgrade the policy to SCHED_ISO. ++ * We also set the parameter to zero to pass the checks. ++ */ ++ policy = SCHED_ISO; ++ param = &zero_param; ++ } + recheck: + /* double check policy once rq lock held */ + if (policy < 0) + policy = oldpolicy = p->policy; +- else if (policy != SCHED_FIFO && policy != SCHED_RR && +- policy != SCHED_NORMAL && policy != SCHED_BATCH) ++ else if (!SCHED_RANGE(policy)) + return -EINVAL; + /* + * Valid priorities for SCHED_FIFO and SCHED_RR are +@@ -4116,6 +4295,31 @@ recheck: + if (param->sched_priority > p->rt_priority && + param->sched_priority > rlim_rtprio) + return -EPERM; ++ } else { ++ switch (p->policy) { ++ /* ++ * Can only downgrade policies but not back to ++ * SCHED_NORMAL ++ */ ++ case SCHED_ISO: ++ if (policy == SCHED_ISO) ++ goto out; ++ if (policy == SCHED_NORMAL) ++ return -EPERM; ++ break; ++ case SCHED_BATCH: ++ if (policy == SCHED_BATCH) ++ goto out; ++ if (policy != SCHED_IDLEPRIO) ++ return -EPERM; ++ break; ++ case SCHED_IDLEPRIO: ++ if (policy == SCHED_IDLEPRIO) ++ goto out; ++ return -EPERM; ++ default: ++ break; ++ } + } + + /* can't change other user's priorities */ +@@ -4124,6 +4328,11 @@ recheck: + return -EPERM; + } + ++ if (!(p->mm) && policy == SCHED_IDLEPRIO) { ++ /* Don't allow kernel threads to be SCHED_IDLEPRIO. */ ++ return -EINVAL; ++ } ++ + retval = security_task_setscheduler(p, policy, param); + if (retval) + return retval; +@@ -4144,12 +4353,12 @@ recheck: + spin_unlock_irqrestore(&p->pi_lock, flags); + goto recheck; + } +- array = p->array; +- if (array) ++ queued = task_queued(p); ++ if (queued) + deactivate_task(p, rq); + oldprio = p->prio; + __setscheduler(p, policy, param->sched_priority); +- if (array) { ++ if (queued) { + __activate_task(p, rq); + /* + * Reschedule if we are currently running on this runqueue and +@@ -4159,14 +4368,15 @@ recheck: + if (task_running(rq, p)) { + if (p->prio > oldprio) + resched_task(rq->curr); +- } else if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ } else ++ try_preempt(p, rq); + } + __task_rq_unlock(rq); + spin_unlock_irqrestore(&p->pi_lock, flags); + + rt_mutex_adjust_pi(p); + ++out: + return 0; + } + EXPORT_SYMBOL_GPL(sched_setscheduler); +@@ -4433,41 +4643,34 @@ asmlinkage long sys_sched_getaffinity(pi + * sys_sched_yield - yield the current processor to other threads. + * + * This function yields the current CPU by moving the calling thread +- * to the expired array. If there are no other threads running on this +- * CPU then this function will return. ++ * to the expired array if SCHED_NORMAL or the end of its current priority ++ * queue if a realtime task. If there are no other threads running on this ++ * cpu this function will return. + */ + asmlinkage long sys_sched_yield(void) + { + struct rq *rq = this_rq_lock(); +- struct prio_array *array = current->array, *target = rq->expired; ++ struct task_struct *p = current; + + schedstat_inc(rq, yld_cnt); +- /* +- * We implement yielding by moving the task into the expired +- * queue. +- * +- * (special rule: RT tasks will just roundrobin in the active +- * array.) +- */ +- if (rt_task(current)) +- target = rq->active; +- +- if (array->nr_active == 1) { +- schedstat_inc(rq, yld_act_empty); +- if (!rq->expired->nr_active) +- schedstat_inc(rq, yld_both_empty); +- } else if (!rq->expired->nr_active) +- schedstat_inc(rq, yld_exp_empty); +- +- if (array != target) { +- dequeue_task(current, array); +- enqueue_task(current, target); +- } else +- /* +- * requeue_task is cheaper so perform that if possible. +- */ +- requeue_task(current, array); ++ if (rq->nr_running == 1) ++ schedstat_inc(rq, yld_both_empty); ++ else { ++ struct prio_array *old_array = p->array; ++ int old_prio = p->prio; ++ ++ if (idleprio_task(p)) { ++ dequeue_task(p, rq); ++ enqueue_task(p, rq); ++ goto out_release; ++ } ++ /* p->prio will be updated in requeue_task via queue_expired */ ++ if (!rt_task(p)) ++ p->array = rq->expired; ++ requeue_task(p, rq, old_array, old_prio); ++ } + ++out_release: + /* + * Since we are going to call schedule() anyway, there's + * no need to preempt or enable interrupts: +@@ -4619,6 +4822,8 @@ asmlinkage long sys_sched_get_priority_m + break; + case SCHED_NORMAL: + case SCHED_BATCH: ++ case SCHED_ISO: ++ case SCHED_IDLEPRIO: + ret = 0; + break; + } +@@ -4643,6 +4848,8 @@ asmlinkage long sys_sched_get_priority_m + break; + case SCHED_NORMAL: + case SCHED_BATCH: ++ case SCHED_ISO: ++ case SCHED_IDLEPRIO: + ret = 0; + } + return ret; +@@ -4676,8 +4883,8 @@ long sys_sched_rr_get_interval(pid_t pid + if (retval) + goto out_unlock; + +- jiffies_to_timespec(p->policy == SCHED_FIFO ? +- 0 : task_timeslice(p), &t); ++ t = ns_to_timespec(p->policy == SCHED_FIFO ? 0 : ++ MS_TO_NS(task_timeslice(p))); + read_unlock(&tasklist_lock); + retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0; + out_nounlock: +@@ -4771,10 +4978,10 @@ void __cpuinit init_idle(struct task_str + struct rq *rq = cpu_rq(cpu); + unsigned long flags; + +- idle->timestamp = sched_clock(); +- idle->sleep_avg = 0; +- idle->array = NULL; +- idle->prio = idle->normal_prio = MAX_PRIO; ++ bitmap_zero(idle->bitmap, PRIO_RANGE); ++ idle->timestamp = idle->last_ran = sched_clock(); ++ idle->array = rq->active; ++ idle->prio = idle->normal_prio = NICE_TO_PRIO(0); + idle->state = TASK_RUNNING; + idle->cpus_allowed = cpumask_of_cpu(cpu); + set_task_cpu(idle, cpu); +@@ -4893,7 +5100,7 @@ static int __migrate_task(struct task_st + goto out; + + set_task_cpu(p, dest_cpu); +- if (p->array) { ++ if (task_queued(p)) { + /* + * Sync timestamp with rq_dest's before activating. + * The same thing could be achieved by doing this step +@@ -4904,8 +5111,7 @@ static int __migrate_task(struct task_st + + rq_dest->most_recent_timestamp; + deactivate_task(p, rq_src); + __activate_task(p, rq_dest); +- if (TASK_PREEMPTS_CURR(p, rq_dest)) +- resched_task(rq_dest->curr); ++ try_preempt(p, rq_dest); + } + ret = 1; + out: +@@ -5194,7 +5400,7 @@ migration_call(struct notifier_block *nf + /* Idle task back to normal (off runqueue, low prio) */ + rq = task_rq_lock(rq->idle, &flags); + deactivate_task(rq->idle, rq); +- rq->idle->static_prio = MAX_PRIO; ++ rq->idle->static_prio = NICE_TO_PRIO(0); + __setscheduler(rq->idle, SCHED_NORMAL, 0); + migrate_dead_tasks(cpu); + task_rq_unlock(rq, &flags); +@@ -6706,6 +6912,13 @@ void __init sched_init_smp(void) + /* Move init over to a non-isolated CPU */ + if (set_cpus_allowed(current, non_isolated_cpus) < 0) + BUG(); ++ ++ /* ++ * Assume that every added cpu gives us slightly less overall latency ++ * allowing us to increase the base rr_interval, but in a non linear ++ * fashion. ++ */ ++ rr_interval *= 1 + ilog2(num_online_cpus()); + } + #else + void __init sched_init_smp(void) +@@ -6727,6 +6940,16 @@ void __init sched_init(void) + { + int i, j, k; + ++ /* Generate the priority matrix */ ++ for (i = 0; i < PRIO_RANGE; i++) { ++ bitmap_fill(prio_matrix[i], PRIO_RANGE); ++ j = PRIO_RANGE * PRIO_RANGE / (PRIO_RANGE - i); ++ for (k = 0; k <= PRIO_RANGE * (PRIO_RANGE - 1); k += j) { ++ __clear_bit(PRIO_RANGE - 1 - (k / PRIO_RANGE), ++ prio_matrix[i]); ++ } ++ } ++ + for_each_possible_cpu(i) { + struct prio_array *array; + struct rq *rq; +@@ -6734,12 +6957,20 @@ void __init sched_init(void) + rq = cpu_rq(i); + spin_lock_init(&rq->lock); + lockdep_set_class(&rq->lock, &rq->rq_lock_key); ++ rq->iso_ticks = 0; + rq->nr_running = 0; ++ rq->nr_idleprio = 0; ++ rq->prio_rotation = 0; + rq->active = rq->arrays; ++ rq->idleprio = rq->active; + rq->expired = rq->arrays + 1; +- rq->best_expired_prio = MAX_PRIO; ++ reset_prio_levels(rq); ++ rq->dyn_bitmap = rq->active->prio_bitmap; ++ rq->exp_bitmap = rq->expired->prio_bitmap; + + #ifdef CONFIG_SMP ++ rq->active->rq = rq; ++ rq->expired->rq = rq; + rq->sd = NULL; + for (j = 1; j < 3; j++) + rq->cpu_load[j] = 0; +@@ -6752,16 +6983,16 @@ void __init sched_init(void) + atomic_set(&rq->nr_iowait, 0); + + for (j = 0; j < 2; j++) { ++ + array = rq->arrays + j; +- for (k = 0; k < MAX_PRIO; k++) { ++ for (k = 0; k <= MAX_PRIO; k++) + INIT_LIST_HEAD(array->queue + k); +- __clear_bit(k, array->bitmap); +- } +- // delimiter for bitsearch +- __set_bit(MAX_PRIO, array->bitmap); ++ bitmap_zero(array->prio_bitmap, MAX_PRIO); ++ /* delimiter for bitsearch */ ++ __set_bit(MAX_PRIO, array->prio_bitmap); + } +- } + ++ } + set_load_weight(&init_task); + + #ifdef CONFIG_SMP +@@ -6815,24 +7046,24 @@ EXPORT_SYMBOL(__might_sleep); + #ifdef CONFIG_MAGIC_SYSRQ + void normalize_rt_tasks(void) + { +- struct prio_array *array; + struct task_struct *p; + unsigned long flags; + struct rq *rq; ++ int queued; + + read_lock_irq(&tasklist_lock); + for_each_process(p) { +- if (!rt_task(p)) ++ if (!rt_task(p) && !iso_task(p)) + continue; + + spin_lock_irqsave(&p->pi_lock, flags); + rq = __task_rq_lock(p); + +- array = p->array; +- if (array) ++ queued = task_queued(p); ++ if (queued) + deactivate_task(p, task_rq(p)); + __setscheduler(p, SCHED_NORMAL, 0); +- if (array) { ++ if (queued) { + __activate_task(p, task_rq(p)); + resched_task(rq->curr); + } +Index: linux-2.6.21-ck1/Documentation/sysctl/kernel.txt +=================================================================== +--- linux-2.6.21-ck1.orig/Documentation/sysctl/kernel.txt 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/Documentation/sysctl/kernel.txt 2007-05-04 12:10:55.000000000 +1000 +@@ -25,6 +25,9 @@ show up in /proc/sys/kernel: + - domainname + - hostname + - hotplug ++- interactive ++- iso_cpu ++- iso_period + - java-appletviewer [ binfmt_java, obsolete ] + - java-interpreter [ binfmt_java, obsolete ] + - kstack_depth_to_print [ X86 only ] +@@ -43,6 +46,7 @@ show up in /proc/sys/kernel: + - printk + - real-root-dev ==> Documentation/initrd.txt + - reboot-cmd [ SPARC only ] ++- rr_interval + - rtsig-max + - rtsig-nr + - sem +@@ -164,6 +168,40 @@ Default value is "/sbin/hotplug". + + ============================================================== + ++interactive: ++ ++The staircase-deadline cpu scheduler can be set in either purely ++forward-looking mode for absolutely rigid fairness and cpu distribution ++according to nice level, or it can allow a small per-process history ++to smooth out cpu usage perturbations common in interactive tasks by ++enabling this sysctl. While small fairness issues can arise with this ++enabled, overall fairness is usually still strongly maintained and ++starvation is never possible. Enabling this can significantly smooth ++out 3d graphics and games. ++ ++Default value is 1 (enabled). ++ ++============================================================== ++ ++iso_cpu: ++ ++This sets the percentage cpu that the unprivileged SCHED_ISO tasks can ++run effectively at realtime priority, averaged over a rolling iso_period ++seconds. ++ ++Set to 80 (percent) by default. ++ ++============================================================== ++ ++iso_period: ++ ++This sets the number of seconds over which SCHED_ISO cpu usage is averaged ++to see if it exceeds its allocated cpu bandwidth. ++ ++Set to 5 (seconds) by default. ++ ++============================================================== ++ + l2cr: (PPC only) + + This flag controls the L2 cache of G3 processor boards. If +@@ -288,6 +326,19 @@ rebooting. ??? + + ============================================================== + ++rr_interval: ++ ++This is the smallest duration that any cpu process scheduling unit ++will run for. Increasing this value can increase throughput of cpu ++bound tasks substantially but at the expense of increased latencies ++overall. This value is in milliseconds and the default value chosen ++depends on the number of cpus available at scheduler initialisation ++with a minimum of 8. ++ ++Valid values are from 1-5000. ++ ++============================================================== ++ + rtsig-max & rtsig-nr: + + The file rtsig-max can be used to tune the maximum number +Index: linux-2.6.21-ck1/kernel/sysctl.c +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/sysctl.c 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/sysctl.c 2007-05-04 12:24:21.000000000 +1000 +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -70,12 +71,17 @@ extern int suid_dumpable; + extern char core_pattern[]; + extern int pid_max; + extern int min_free_kbytes; ++extern int vm_tail_largefiles; + extern int printk_ratelimit_jiffies; + extern int printk_ratelimit_burst; + extern int pid_max_min, pid_max_max; + extern int sysctl_drop_caches; + extern int percpu_pagelist_fraction; + extern int compat_log; ++extern int rr_interval; ++extern int sched_interactive; ++extern int sched_iso_cpu; ++extern int sched_iso_period; + + /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ + static int maxolduid = 65535; +@@ -159,6 +165,14 @@ int sysctl_legacy_va_layout; + #endif + + ++/* Constants for minimum and maximum testing. ++ We use these as one-element integer vectors. */ ++static int __read_mostly zero; ++static int __read_mostly one = 1; ++static int __read_mostly one_hundred = 100; ++static int __read_mostly five_thousand = 5000; ++ ++ + /* The default sysctl tables: */ + + static ctl_table root_table[] = { +@@ -499,6 +513,47 @@ static ctl_table kern_table[] = { + .mode = 0444, + .proc_handler = &proc_dointvec, + }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "rr_interval", ++ .data = &rr_interval, ++ .maxlen = sizeof (int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_minmax, ++ .strategy = &sysctl_intvec, ++ .extra1 = &one, ++ .extra2 = &five_thousand, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "interactive", ++ .data = &sched_interactive, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "iso_cpu", ++ .data = &sched_iso_cpu, ++ .maxlen = sizeof (int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_minmax, ++ .strategy = &sysctl_intvec, ++ .extra1 = &zero, ++ .extra2 = &one_hundred, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "iso_period", ++ .data = &sched_iso_period, ++ .maxlen = sizeof (int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_minmax, ++ .strategy = &sysctl_intvec, ++ .extra1 = &one, ++ .extra2 = &one_hundred, ++ }, + #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) + { + .ctl_name = KERN_UNKNOWN_NMI_PANIC, +@@ -607,12 +662,6 @@ static ctl_table kern_table[] = { + { .ctl_name = 0 } + }; + +-/* Constants for minimum and maximum testing in vm_table. +- We use these as one-element integer vectors. */ +-static int zero; +-static int one_hundred = 100; +- +- + static ctl_table vm_table[] = { + { + .ctl_name = VM_OVERCOMMIT_MEMORY, +@@ -693,16 +742,32 @@ static ctl_table vm_table[] = { + .proc_handler = &proc_dointvec, + }, + { +- .ctl_name = VM_SWAPPINESS, +- .procname = "swappiness", +- .data = &vm_swappiness, +- .maxlen = sizeof(vm_swappiness), ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "mapped", ++ .data = &vm_mapped, ++ .maxlen = sizeof(vm_mapped), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &zero, + .extra2 = &one_hundred, + }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "hardmaplimit", ++ .data = &vm_hardmaplimit, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "tail_largefiles", ++ .data = &vm_tail_largefiles, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, + #ifdef CONFIG_HUGETLB_PAGE + { + .ctl_name = VM_HUGETLB_PAGES, +@@ -859,6 +924,16 @@ static ctl_table vm_table[] = { + .extra1 = &zero, + }, + #endif ++#ifdef CONFIG_SWAP_PREFETCH ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "swap_prefetch", ++ .data = &swap_prefetch, ++ .maxlen = sizeof(swap_prefetch), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++#endif + { .ctl_name = 0 } + }; + +Index: linux-2.6.21-ck1/fs/pipe.c +=================================================================== +--- linux-2.6.21-ck1.orig/fs/pipe.c 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/fs/pipe.c 2007-05-04 12:10:54.000000000 +1000 +@@ -41,12 +41,7 @@ void pipe_wait(struct pipe_inode_info *p + { + DEFINE_WAIT(wait); + +- /* +- * Pipes are system-local resources, so sleeping on them +- * is considered a noninteractive wait: +- */ +- prepare_to_wait(&pipe->wait, &wait, +- TASK_INTERRUPTIBLE | TASK_NONINTERACTIVE); ++ prepare_to_wait(&pipe->wait, &wait, TASK_INTERRUPTIBLE); + if (pipe->inode) + mutex_unlock(&pipe->inode->i_mutex); + schedule(); +Index: linux-2.6.21-ck1/Documentation/sched-design.txt +=================================================================== +--- linux-2.6.21-ck1.orig/Documentation/sched-design.txt 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/Documentation/sched-design.txt 2007-05-04 12:10:54.000000000 +1000 +@@ -1,11 +1,14 @@ +- Goals, Design and Implementation of the +- new ultra-scalable O(1) scheduler ++ Goals, Design and Implementation of the ultra-scalable O(1) scheduler by ++ Ingo Molnar and theStaircase Deadline cpu scheduler policy designed by ++ Con Kolivas. + + +- This is an edited version of an email Ingo Molnar sent to +- lkml on 4 Jan 2002. It describes the goals, design, and +- implementation of Ingo's new ultra-scalable O(1) scheduler. +- Last Updated: 18 April 2002. ++ This was originally an edited version of an email Ingo Molnar sent to ++ lkml on 4 Jan 2002. It describes the goals, design, and implementation ++ of Ingo's ultra-scalable O(1) scheduler. It now contains a description ++ of the Staircase Deadline priority scheduler that was built on this ++ design. ++ Last Updated: Fri, 4 May 2007 + + + Goal +@@ -163,3 +166,222 @@ certain code paths and data constructs. + code is smaller than the old one. + + Ingo ++ ++ ++Staircase Deadline cpu scheduler policy ++================================================ ++ ++Design summary ++============== ++ ++A novel design which incorporates a foreground-background descending priority ++system (the staircase) via a bandwidth allocation matrix according to nice ++level. ++ ++ ++Features ++======== ++ ++A starvation free, strict fairness O(1) scalable design with interactivity ++as good as the above restrictions can provide. There is no interactivity ++estimator, no sleep/run measurements and only simple fixed accounting. ++The design has strict enough a design and accounting that task behaviour ++can be modelled and maximum scheduling latencies can be predicted by ++the virtual deadline mechanism that manages runqueues. The prime concern ++in this design is to maintain fairness at all costs determined by nice level, ++yet to maintain as good interactivity as can be allowed within the ++constraints of strict fairness. ++ ++ ++Design description ++================== ++ ++SD works off the principle of providing each task a quota of runtime that it is ++allowed to run at a number of priority levels determined by its static priority ++(ie. its nice level). If the task uses up its quota it has its priority ++decremented to the next level determined by a priority matrix. Once every ++runtime quota has been consumed of every priority level, a task is queued on the ++"expired" array. When no other tasks exist with quota, the expired array is ++activated and fresh quotas are handed out. This is all done in O(1). ++ ++Design details ++============== ++ ++Each task keeps a record of its own entitlement of cpu time. Most of the rest of ++these details apply to non-realtime tasks as rt task management is straight ++forward. ++ ++Each runqueue keeps a record of what major epoch it is up to in the ++rq->prio_rotation field which is incremented on each major epoch. It also ++keeps a record of the current prio_level for each static priority task. ++ ++Each task keeps a record of what major runqueue epoch it was last running ++on in p->rotation. It also keeps a record of what priority levels it has ++already been allocated quota from during this epoch in a bitmap p->bitmap. ++ ++The only tunable that determines all other details is the RR_INTERVAL. This ++is set to 8ms, and is scaled gently upwards with more cpus. This value is ++tunable via a /proc interface. ++ ++All tasks are initially given a quota based on RR_INTERVAL. This is equal to ++RR_INTERVAL between nice values of -6 and 0, half that size above nice 0, and ++progressively larger for nice values from -1 to -20. This is assigned to ++p->quota and only changes with changes in nice level. ++ ++As a task is first queued, it checks in recalc_task_prio to see if it has run at ++this runqueue's current priority rotation. If it has not, it will have its ++p->prio level set according to the first slot in a "priority matrix" and will be ++given a p->time_slice equal to the p->quota, and has its allocation bitmap bit ++set in p->bitmap for this prio level. It is then queued on the current active ++priority array. ++ ++If a task has already been running during this major epoch, and it has ++p->time_slice left and the rq->prio_quota for the task's p->prio still ++has quota, it will be placed back on the active array, but no more quota ++will be added. ++ ++If a task has been running during this major epoch, but does not have ++p->time_slice left, it will find the next lowest priority in its bitmap that it ++has not been allocated quota from. It then gets the a full quota in ++p->time_slice. It is then queued on the current active priority array at the ++newly determined lower priority. ++ ++If a task has been running during this major epoch, and does not have ++any entitlement left in p->bitmap and no time_slice left, it will have its ++bitmap cleared, and be queued at its best prio again, but on the expired ++priority array. ++ ++When a task is queued, it has its relevant bit set in the array->prio_bitmap. ++ ++p->time_slice is stored in nanosconds and is updated via update_cpu_clock on ++schedule() and scheduler_tick. If p->time_slice is below zero then the ++recalc_task_prio is readjusted and the task rescheduled. ++ ++ ++Priority Matrix ++=============== ++ ++In order to minimise the latencies between tasks of different nice levels ++running concurrently, the dynamic priority slots where different nice levels ++are queued are dithered instead of being sequential. What this means is that ++there are 40 priority slots where a task may run during one major rotation, ++and the allocation of slots is dependant on nice level. In the ++following table, a zero represents a slot where the task may run. ++ ++PRIORITY:0..................20.................39 ++nice -20 0000000000000000000000000000000000000000 ++nice -10 1000100010001000100010001000100010010000 ++nice 0 1010101010101010101010101010101010101010 ++nice 5 1011010110110101101101011011010110110110 ++nice 10 1110111011101110111011101110111011101110 ++nice 15 1111111011111110111111101111111011111110 ++nice 19 1111111111111111111111111111111111111110 ++ ++As can be seen, a nice -20 task runs in every priority slot whereas a nice 19 ++task only runs one slot per major rotation. This dithered table allows for the ++smallest possible maximum latencies between tasks of varying nice levels, thus ++allowing vastly different nice levels to be used. ++ ++SCHED_BATCH tasks are managed slightly differently, receiving only the top ++slots from its priority bitmap giving it equal cpu as SCHED_NORMAL, but ++slightly higher latencies. ++ ++ ++Modelling deadline behaviour ++============================ ++ ++As the accounting in this design is hard and not modified by sleep average ++calculations or interactivity modifiers, it is possible to accurately ++predict the maximum latency that a task may experience under different ++conditions. This is a virtual deadline mechanism enforced by mandatory ++timeslice expiration and not outside bandwidth measurement. ++ ++The maximum duration a task can run during one major epoch is determined by its ++nice value. Nice 0 tasks can run at 19 different priority levels for RR_INTERVAL ++duration during each epoch. Nice 10 tasks can run at 9 priority levels for each ++epoch, and so on. The table in the priority matrix above demonstrates how this ++is enforced. ++ ++Therefore the maximum duration a runqueue epoch can take is determined by ++the number of tasks running, and their nice level. After that, the maximum ++duration it can take before a task can wait before it get scheduled is ++determined by the position of its first slot on the matrix. ++ ++In the following examples, these are _worst case scenarios_ and would rarely ++occur, but can be modelled nonetheless to determine the maximum possible ++latency. ++ ++So for example, if two nice 0 tasks are running, and one has just expired as ++another is activated for the first time receiving a full quota for this ++runqueue rotation, the first task will wait: ++ ++nr_tasks * max_duration + nice_difference * rr_interval ++1 * 19 * RR_INTERVAL + 0 = 152ms ++ ++In the presence of a nice 10 task, a nice 0 task would wait a maximum of ++1 * 10 * RR_INTERVAL + 0 = 80ms ++ ++In the presence of a nice 0 task, a nice 10 task would wait a maximum of ++1 * 19 * RR_INTERVAL + 1 * RR_INTERVAL = 160ms ++ ++More useful than these values, though, are the average latencies which are ++a matter of determining the average distance between priority slots of ++different nice values and multiplying them by the tasks' quota. For example ++in the presence of a nice -10 task, a nice 0 task will wait either one or ++two slots. Given that nice -10 tasks have a quota 2.5 times the RR_INTERVAL, ++this means the latencies will alternate between 2.5 and 5 RR_INTERVALs or ++20 and 40ms respectively (on uniprocessor at 1000HZ). ++ ++ ++Achieving interactivity ++======================= ++ ++A requirement of this scheduler design was to achieve good interactivity ++despite being a completely fair deadline based design. The disadvantage of ++designs that try to achieve interactivity is that they usually do so at ++the expense of maintaining fairness. As cpu speeds increase, the requirement ++for some sort of metered unfairness towards interactive tasks becomes a less ++desirable phenomenon, but low latency and fairness remains mandatory to ++good interactive performance. ++ ++This design relies on the fact that interactive tasks, by their nature, ++sleep often. Most fair scheduling designs end up penalising such tasks ++indirectly giving them less than their fair possible share because of the ++sleep, and have to use a mechanism of bonusing their priority to offset ++this based on the duration they sleep. This becomes increasingly inaccurate ++as the number of running tasks rises and more tasks spend time waiting on ++runqueues rather than sleeping, and it is impossible to tell whether the ++task that's waiting on a runqueue only intends to run for a short period and ++then sleep again after than runqueue wait. Furthermore, all such designs rely ++on a period of time to pass to accumulate some form of statistic on the task ++before deciding on how much to give them preference. The shorter this period, ++the more rapidly bursts of cpu ruin the interactive tasks behaviour. The ++longer this period, the longer it takes for interactive tasks to get low ++scheduling latencies and fair cpu. ++ ++This design does not measure sleep time at all. Interactive tasks that sleep ++often will wake up having consumed very little if any of their quota for ++the current major priority rotation. The longer they have slept, the less ++likely they are to even be on the current major priority rotation. Once ++woken up, though, they get to use up a their full quota for that epoch, ++whether part of a quota remains or a full quota. Overall, however, they ++can still only run as much cpu time for that epoch as any other task of the ++same nice level. This means that two tasks behaving completely differently ++from fully cpu bound to waking/sleeping extremely frequently will still ++get the same quota of cpu, but the latter will be using its quota for that ++epoch in bursts rather than continuously. This guarantees that interactive ++tasks get the same amount of cpu as cpu bound ones. ++ ++The other requirement of interactive tasks is also to obtain low latencies ++for when they are scheduled. Unlike fully cpu bound tasks and the maximum ++latencies possible described in the modelling deadline behaviour section ++above, tasks that sleep will wake up with quota available usually at the ++current runqueue's priority_level or better. This means that the most latency ++they are likely to see is one RR_INTERVAL, and often they will preempt the ++current task if it is not of a sleeping nature. This then guarantees very ++low latency for interactive tasks, and the lowest latencies for the least ++cpu bound tasks. ++ ++ ++Fri, 4 May 2007 ++Con Kolivas +Index: linux-2.6.21-ck1/kernel/softirq.c +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/softirq.c 2007-05-04 12:10:52.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/softirq.c 2007-05-04 12:10:54.000000000 +1000 +@@ -488,7 +488,7 @@ void __init softirq_init(void) + + static int ksoftirqd(void * __bind_cpu) + { +- set_user_nice(current, 19); ++ set_user_nice(current, 15); + current->flags |= PF_NOFREEZE; + + set_current_state(TASK_INTERRUPTIBLE); +Index: linux-2.6.21-ck1/kernel/fork.c +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/fork.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/fork.c 2007-05-04 12:24:19.000000000 +1000 +@@ -1060,6 +1060,7 @@ static struct task_struct *copy_process( + p->io_context = NULL; + p->io_wait = NULL; + p->audit_context = NULL; ++ p->mutexes_held = 0; + cpuset_fork(p); + #ifdef CONFIG_NUMA + p->mempolicy = mpol_copy(p->mempolicy); +Index: linux-2.6.21-ck1/kernel/mutex.c +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/mutex.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/mutex.c 2007-05-04 12:24:19.000000000 +1000 +@@ -60,6 +60,16 @@ EXPORT_SYMBOL(__mutex_init); + static void fastcall noinline __sched + __mutex_lock_slowpath(atomic_t *lock_count); + ++static inline void inc_mutex_count(void) ++{ ++ current->mutexes_held++; ++} ++ ++static inline void dec_mutex_count(void) ++{ ++ current->mutexes_held--; ++} ++ + /*** + * mutex_lock - acquire the mutex + * @lock: the mutex to be acquired +@@ -89,6 +99,7 @@ void inline fastcall __sched mutex_lock( + * 'unlocked' into 'locked' state. + */ + __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath); ++ inc_mutex_count(); + } + + EXPORT_SYMBOL(mutex_lock); +@@ -114,6 +125,7 @@ void fastcall __sched mutex_unlock(struc + * into 'unlocked' state: + */ + __mutex_fastpath_unlock(&lock->count, __mutex_unlock_slowpath); ++ dec_mutex_count(); + } + + EXPORT_SYMBOL(mutex_unlock); +@@ -283,9 +295,14 @@ __mutex_lock_interruptible_slowpath(atom + */ + int fastcall __sched mutex_lock_interruptible(struct mutex *lock) + { ++ int ret; ++ + might_sleep(); +- return __mutex_fastpath_lock_retval ++ ret = __mutex_fastpath_lock_retval + (&lock->count, __mutex_lock_interruptible_slowpath); ++ if (likely(!ret)) ++ inc_mutex_count(); ++ return ret; + } + + EXPORT_SYMBOL(mutex_lock_interruptible); +@@ -340,8 +357,12 @@ static inline int __mutex_trylock_slowpa + */ + int fastcall __sched mutex_trylock(struct mutex *lock) + { +- return __mutex_fastpath_trylock(&lock->count, ++ int ret = __mutex_fastpath_trylock(&lock->count, + __mutex_trylock_slowpath); ++ ++ if (likely(ret)) ++ inc_mutex_count(); ++ return ret; + } + + EXPORT_SYMBOL(mutex_trylock); +Index: linux-2.6.21-ck1/block/cfq-iosched.c +=================================================================== +--- linux-2.6.21-ck1.orig/block/cfq-iosched.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/block/cfq-iosched.c 2007-05-04 12:24:19.000000000 +1000 +@@ -1258,10 +1258,12 @@ static void cfq_init_prio_data(struct cf + printk(KERN_ERR "cfq: bad prio %x\n", ioprio_class); + case IOPRIO_CLASS_NONE: + /* +- * no prio set, place us in the middle of the BE classes ++ * Select class and ioprio according to policy and nice + */ ++ cfqq->ioprio_class = task_policy_ioprio_class(tsk); + cfqq->ioprio = task_nice_ioprio(tsk); +- cfqq->ioprio_class = IOPRIO_CLASS_BE; ++ if (cfqq->ioprio_class == IOPRIO_CLASS_IDLE) ++ cfq_clear_cfqq_idle_window(cfqq); + break; + case IOPRIO_CLASS_RT: + cfqq->ioprio = task_ioprio(tsk); +Index: linux-2.6.21-ck1/include/linux/ioprio.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/ioprio.h 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/ioprio.h 2007-05-04 12:24:19.000000000 +1000 +@@ -22,7 +22,7 @@ + * class, the default for any process. IDLE is the idle scheduling class, it + * is only served when no one else is using the disk. + */ +-enum { ++enum ioprio_class { + IOPRIO_CLASS_NONE, + IOPRIO_CLASS_RT, + IOPRIO_CLASS_BE, +@@ -51,8 +51,25 @@ static inline int task_ioprio(struct tas + return IOPRIO_PRIO_DATA(task->ioprio); + } + ++static inline enum ioprio_class ++ task_policy_ioprio_class(struct task_struct *task) ++{ ++ if (rt_task(task)) ++ return IOPRIO_CLASS_RT; ++ if (idleprio_task(task)) ++ return IOPRIO_CLASS_IDLE; ++ return IOPRIO_CLASS_BE; ++} ++ + static inline int task_nice_ioprio(struct task_struct *task) + { ++ if (rt_task(task)) ++ return (MAX_RT_PRIO - task->rt_priority) * IOPRIO_BE_NR / ++ (MAX_RT_PRIO + 1); ++ if (iso_task(task)) ++ return 0; ++ if (idleprio_task(task)) ++ return IOPRIO_BE_NR - 1; + return (task_nice(task) + 20) / 5; + } + +Index: linux-2.6.21-ck1/Documentation/sysctl/vm.txt +=================================================================== +--- linux-2.6.21-ck1.orig/Documentation/sysctl/vm.txt 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/Documentation/sysctl/vm.txt 2007-05-04 12:24:21.000000000 +1000 +@@ -22,6 +22,8 @@ Currently, these files are in /proc/sys/ + - dirty_background_ratio + - dirty_expire_centisecs + - dirty_writeback_centisecs ++- hardmaplimit ++- mapped + - max_map_count + - min_free_kbytes + - laptop_mode +@@ -31,12 +33,13 @@ Currently, these files are in /proc/sys/ + - min_unmapped_ratio + - min_slab_ratio + - panic_on_oom ++- swap_prefetch + + ============================================================== + + dirty_ratio, dirty_background_ratio, dirty_expire_centisecs, + dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode, +-block_dump, swap_token_timeout, drop-caches: ++block_dump, swap_token_timeout, drop-caches, tail_largefiles: + + See Documentation/filesystems/proc.txt + +@@ -86,6 +89,27 @@ for swap because we only cluster swap da + + ============================================================== + ++hardmaplimit: ++ ++This flag makes the vm adhere to the mapped value as closely as possible ++except in the most extreme vm stress where doing so would provoke an out ++of memory condition (see mapped below). ++ ++Enabled by default. ++ ++============================================================== ++ ++mapped: ++ ++This is the percentage ram that is filled with mapped pages (applications) ++before the vm will start reclaiming mapped pages by moving them to swap. ++It is altered by the relative stress of the vm at the time so is not ++strictly adhered to to prevent provoking out of memory kills. ++ ++Set to 66 by default. ++ ++============================================================== ++ + max_map_count: + + This file contains the maximum number of memory map areas a process +@@ -205,3 +229,14 @@ rather than killing rogue processes, set + + The default value is 0. + ++============================================================== ++ ++swap_prefetch ++ ++This enables or disables the swap prefetching feature. When the virtual ++memory subsystem has been extremely idle for at least 5 seconds it will start ++copying back pages from swap into the swapcache and keep a copy in swap. In ++practice it can take many minutes before the vm is idle enough. ++ ++The default value is 1. ++ +Index: linux-2.6.21-ck1/include/linux/swap.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/swap.h 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/swap.h 2007-05-04 12:24:20.000000000 +1000 +@@ -180,6 +180,7 @@ extern unsigned int nr_free_pagecache_pa + /* linux/mm/swap.c */ + extern void FASTCALL(lru_cache_add(struct page *)); + extern void FASTCALL(lru_cache_add_active(struct page *)); ++extern void FASTCALL(lru_cache_add_tail(struct page *)); + extern void FASTCALL(activate_page(struct page *)); + extern void FASTCALL(mark_page_accessed(struct page *)); + extern void lru_add_drain(void); +@@ -188,9 +189,11 @@ extern int rotate_reclaimable_page(struc + extern void swap_setup(void); + + /* linux/mm/vmscan.c */ +-extern unsigned long try_to_free_pages(struct zone **, gfp_t); ++extern unsigned long try_to_free_pages(struct zone **, gfp_t, ++ struct task_struct *p); + extern unsigned long shrink_all_memory(unsigned long nr_pages); +-extern int vm_swappiness; ++extern int vm_mapped; ++extern int vm_hardmaplimit; + extern int remove_mapping(struct address_space *mapping, struct page *page); + extern long vm_total_pages; + +@@ -237,6 +240,7 @@ extern void free_pages_and_swap_cache(st + extern struct page * lookup_swap_cache(swp_entry_t); + extern struct page * read_swap_cache_async(swp_entry_t, struct vm_area_struct *vma, + unsigned long addr); ++extern int add_to_swap_cache(struct page *page, swp_entry_t entry); + /* linux/mm/swapfile.c */ + extern long total_swap_pages; + extern unsigned int nr_swapfiles; +Index: linux-2.6.21-ck1/init/Kconfig +=================================================================== +--- linux-2.6.21-ck1.orig/init/Kconfig 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/init/Kconfig 2007-05-04 12:24:20.000000000 +1000 +@@ -101,6 +101,28 @@ config SWAP + used to provide more virtual memory than the actual RAM present + in your computer. If unsure say Y. + ++config SWAP_PREFETCH ++ bool "Support for prefetching swapped memory" ++ depends on SWAP ++ default y ++ ---help--- ++ This option will allow the kernel to prefetch swapped memory pages ++ when idle. The pages will be kept on both swap and in swap_cache ++ thus avoiding the need for further I/O if either ram or swap space ++ is required. ++ ++ What this will do on workstations is slowly bring back applications ++ that have swapped out after memory intensive workloads back into ++ physical ram if you have free ram at a later stage and the machine ++ is relatively idle. This means that when you come back to your ++ computer after leaving it idle for a while, applications will come ++ to life faster. Note that your swap usage will appear to increase ++ but these are cached pages, can be dropped freely by the vm, and it ++ should stabilise around 50% swap usage maximum. ++ ++ Workstations and multiuser workstation servers will most likely want ++ to say Y. ++ + config SYSVIPC + bool "System V IPC" + ---help--- +Index: linux-2.6.21-ck1/mm/Makefile +=================================================================== +--- linux-2.6.21-ck1.orig/mm/Makefile 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/mm/Makefile 2007-05-04 12:24:20.000000000 +1000 +@@ -17,6 +17,7 @@ ifeq ($(CONFIG_MMU)$(CONFIG_BLOCK),yy) + obj-y += bounce.o + endif + obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o thrash.o ++obj-$(CONFIG_SWAP_PREFETCH) += swap_prefetch.o + obj-$(CONFIG_HUGETLBFS) += hugetlb.o + obj-$(CONFIG_NUMA) += mempolicy.o + obj-$(CONFIG_SPARSEMEM) += sparse.o +Index: linux-2.6.21-ck1/mm/swap.c +=================================================================== +--- linux-2.6.21-ck1.orig/mm/swap.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/mm/swap.c 2007-05-04 12:24:21.000000000 +1000 +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -176,6 +177,7 @@ EXPORT_SYMBOL(mark_page_accessed); + */ + static DEFINE_PER_CPU(struct pagevec, lru_add_pvecs) = { 0, }; + static DEFINE_PER_CPU(struct pagevec, lru_add_active_pvecs) = { 0, }; ++static DEFINE_PER_CPU(struct pagevec, lru_add_tail_pvecs) = { 0, }; + + void fastcall lru_cache_add(struct page *page) + { +@@ -197,6 +199,31 @@ void fastcall lru_cache_add_active(struc + put_cpu_var(lru_add_active_pvecs); + } + ++static void __pagevec_lru_add_tail(struct pagevec *pvec) ++{ ++ int i; ++ struct zone *zone = NULL; ++ ++ for (i = 0; i < pagevec_count(pvec); i++) { ++ struct page *page = pvec->pages[i]; ++ struct zone *pagezone = page_zone(page); ++ ++ if (pagezone != zone) { ++ if (zone) ++ spin_unlock_irq(&zone->lru_lock); ++ zone = pagezone; ++ spin_lock_irq(&zone->lru_lock); ++ } ++ BUG_ON(PageLRU(page)); ++ SetPageLRU(page); ++ add_page_to_inactive_list_tail(zone, page); ++ } ++ if (zone) ++ spin_unlock_irq(&zone->lru_lock); ++ release_pages(pvec->pages, pvec->nr, pvec->cold); ++ pagevec_reinit(pvec); ++} ++ + static void __lru_add_drain(int cpu) + { + struct pagevec *pvec = &per_cpu(lru_add_pvecs, cpu); +@@ -207,6 +234,9 @@ static void __lru_add_drain(int cpu) + pvec = &per_cpu(lru_add_active_pvecs, cpu); + if (pagevec_count(pvec)) + __pagevec_lru_add_active(pvec); ++ pvec = &per_cpu(lru_add_tail_pvecs, cpu); ++ if (pagevec_count(pvec)) ++ __pagevec_lru_add_tail(pvec); + } + + void lru_add_drain(void) +@@ -403,6 +433,20 @@ void __pagevec_lru_add_active(struct pag + } + + /* ++ * Function used uniquely to put pages back to the lru at the end of the ++ * inactive list to preserve the lru order. ++ */ ++void fastcall lru_cache_add_tail(struct page *page) ++{ ++ struct pagevec *pvec = &get_cpu_var(lru_add_tail_pvecs); ++ ++ page_cache_get(page); ++ if (!pagevec_add(pvec, page)) ++ __pagevec_lru_add_tail(pvec); ++ put_cpu_var(lru_add_pvecs); ++} ++ ++/* + * Try to drop buffers from the pages in a pagevec + */ + void pagevec_strip(struct pagevec *pvec) +@@ -514,6 +558,9 @@ void __init swap_setup(void) + * Right now other parts of the system means that we + * _really_ don't want to cluster much more + */ ++ ++ prepare_swap_prefetch(); ++ + #ifdef CONFIG_HOTPLUG_CPU + hotcpu_notifier(cpu_swap_callback, 0); + #endif +Index: linux-2.6.21-ck1/mm/swap_prefetch.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.21-ck1/mm/swap_prefetch.c 2007-05-04 12:24:20.000000000 +1000 +@@ -0,0 +1,581 @@ ++/* ++ * linux/mm/swap_prefetch.c ++ * ++ * Copyright (C) 2005-2006 Con Kolivas ++ * ++ * Written by Con Kolivas ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* ++ * Time to delay prefetching if vm is busy or prefetching unsuccessful. There ++ * needs to be at least this duration of idle time meaning in practice it can ++ * be much longer ++ */ ++#define PREFETCH_DELAY (HZ * 5) ++ ++/* sysctl - enable/disable swap prefetching */ ++int swap_prefetch __read_mostly = 1; ++ ++struct swapped_root { ++ unsigned long busy; /* vm busy */ ++ spinlock_t lock; /* protects all data */ ++ struct list_head list; /* MRU list of swapped pages */ ++ struct radix_tree_root swap_tree; /* Lookup tree of pages */ ++ unsigned int count; /* Number of entries */ ++ unsigned int maxcount; /* Maximum entries allowed */ ++ struct kmem_cache *cache; /* Of struct swapped_entry */ ++}; ++ ++static struct swapped_root swapped = { ++ .lock = SPIN_LOCK_UNLOCKED, ++ .list = LIST_HEAD_INIT(swapped.list), ++ .swap_tree = RADIX_TREE_INIT(GFP_ATOMIC), ++}; ++ ++static struct task_struct *kprefetchd_task; ++ ++/* ++ * We check to see no part of the vm is busy. If it is this will interrupt ++ * trickle_swap and wait another PREFETCH_DELAY. Purposefully racy. ++ */ ++inline void delay_swap_prefetch(void) ++{ ++ if (!test_bit(0, &swapped.busy)) ++ __set_bit(0, &swapped.busy); ++} ++ ++/* ++ * Drop behind accounting which keeps a list of the most recently used swap ++ * entries. ++ */ ++void add_to_swapped_list(struct page *page) ++{ ++ struct swapped_entry *entry; ++ unsigned long index, flags; ++ int wakeup; ++ ++ if (!swap_prefetch) ++ return; ++ ++ wakeup = 0; ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ if (swapped.count >= swapped.maxcount) { ++ /* ++ * We limit the number of entries to 2/3 of physical ram. ++ * Once the number of entries exceeds this we start removing ++ * the least recently used entries. ++ */ ++ entry = list_entry(swapped.list.next, ++ struct swapped_entry, swapped_list); ++ radix_tree_delete(&swapped.swap_tree, entry->swp_entry.val); ++ list_del(&entry->swapped_list); ++ swapped.count--; ++ } else { ++ entry = kmem_cache_alloc(swapped.cache, GFP_ATOMIC); ++ if (unlikely(!entry)) ++ /* bad, can't allocate more mem */ ++ goto out_locked; ++ } ++ ++ index = page_private(page); ++ entry->swp_entry.val = index; ++ /* ++ * On numa we need to store the node id to ensure that we prefetch to ++ * the same node it came from. ++ */ ++ store_swap_entry_node(entry, page); ++ ++ if (likely(!radix_tree_insert(&swapped.swap_tree, index, entry))) { ++ /* ++ * If this is the first entry, kprefetchd needs to be ++ * (re)started. ++ */ ++ if (!swapped.count) ++ wakeup = 1; ++ list_add(&entry->swapped_list, &swapped.list); ++ swapped.count++; ++ } ++ ++out_locked: ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ ++ /* Do the wakeup outside the lock to shorten lock hold time. */ ++ if (wakeup) ++ wake_up_process(kprefetchd_task); ++ ++ return; ++} ++ ++/* ++ * Removes entries from the swapped_list. The radix tree allows us to quickly ++ * look up the entry from the index without having to iterate over the whole ++ * list. ++ */ ++void remove_from_swapped_list(const unsigned long index) ++{ ++ struct swapped_entry *entry; ++ unsigned long flags; ++ ++ if (list_empty(&swapped.list)) ++ return; ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ entry = radix_tree_delete(&swapped.swap_tree, index); ++ if (likely(entry)) { ++ list_del_init(&entry->swapped_list); ++ swapped.count--; ++ kmem_cache_free(swapped.cache, entry); ++ } ++ spin_unlock_irqrestore(&swapped.lock, flags); ++} ++ ++enum trickle_return { ++ TRICKLE_SUCCESS, ++ TRICKLE_FAILED, ++ TRICKLE_DELAY, ++}; ++ ++struct node_stats { ++ unsigned long last_free; ++ /* Free ram after a cycle of prefetching */ ++ unsigned long current_free; ++ /* Free ram on this cycle of checking prefetch_suitable */ ++ unsigned long prefetch_watermark; ++ /* Maximum amount we will prefetch to */ ++ unsigned long highfree[MAX_NR_ZONES]; ++ /* The amount of free ram before we start prefetching */ ++ unsigned long lowfree[MAX_NR_ZONES]; ++ /* The amount of free ram where we will stop prefetching */ ++ unsigned long *pointfree[MAX_NR_ZONES]; ++ /* highfree or lowfree depending on whether we've hit a watermark */ ++}; ++ ++/* ++ * prefetch_stats stores the free ram data of each node and this is used to ++ * determine if a node is suitable for prefetching into. ++ */ ++struct prefetch_stats { ++ nodemask_t prefetch_nodes; ++ /* Which nodes are currently suited to prefetching */ ++ unsigned long prefetched_pages; ++ /* Total pages we've prefetched on this wakeup of kprefetchd */ ++ struct node_stats node[MAX_NUMNODES]; ++}; ++ ++static struct prefetch_stats sp_stat; ++ ++/* ++ * This tries to read a swp_entry_t into swap cache for swap prefetching. ++ * If it returns TRICKLE_DELAY we should delay further prefetching. ++ */ ++static enum trickle_return trickle_swap_cache_async(const swp_entry_t entry, ++ const int node) ++{ ++ enum trickle_return ret = TRICKLE_FAILED; ++ struct page *page; ++ ++ read_lock_irq(&swapper_space.tree_lock); ++ /* Entry may already exist */ ++ page = radix_tree_lookup(&swapper_space.page_tree, entry.val); ++ read_unlock_irq(&swapper_space.tree_lock); ++ if (page) { ++ remove_from_swapped_list(entry.val); ++ goto out; ++ } ++ ++ /* ++ * Get a new page to read from swap. We have already checked the ++ * watermarks so __alloc_pages will not call on reclaim. ++ */ ++ page = alloc_pages_node(node, GFP_HIGHUSER & ~__GFP_WAIT, 0); ++ if (unlikely(!page)) { ++ ret = TRICKLE_DELAY; ++ goto out; ++ } ++ ++ if (add_to_swap_cache(page, entry)) { ++ /* Failed to add to swap cache */ ++ goto out_release; ++ } ++ ++ /* Add them to the tail of the inactive list to preserve LRU order */ ++ lru_cache_add_tail(page); ++ if (unlikely(swap_readpage(NULL, page))) { ++ ret = TRICKLE_DELAY; ++ goto out_release; ++ } ++ ++ sp_stat.prefetched_pages++; ++ sp_stat.node[node].last_free--; ++ ++ ret = TRICKLE_SUCCESS; ++out_release: ++ page_cache_release(page); ++out: ++ return ret; ++} ++ ++static void clear_last_prefetch_free(void) ++{ ++ int node; ++ ++ /* ++ * Reset the nodes suitable for prefetching to all nodes. We could ++ * update the data to take into account memory hotplug if desired.. ++ */ ++ sp_stat.prefetch_nodes = node_online_map; ++ for_each_node_mask(node, sp_stat.prefetch_nodes) { ++ struct node_stats *ns = &sp_stat.node[node]; ++ ++ ns->last_free = 0; ++ } ++} ++ ++static void clear_current_prefetch_free(void) ++{ ++ int node; ++ ++ sp_stat.prefetch_nodes = node_online_map; ++ for_each_node_mask(node, sp_stat.prefetch_nodes) { ++ struct node_stats *ns = &sp_stat.node[node]; ++ ++ ns->current_free = 0; ++ } ++} ++ ++/* ++ * This updates the high and low watermarks of amount of free ram in each ++ * node used to start and stop prefetching. We prefetch from pages_high * 4 ++ * down to pages_high * 3. ++ */ ++static void examine_free_limits(void) ++{ ++ struct zone *z; ++ ++ for_each_zone(z) { ++ struct node_stats *ns; ++ int idx; ++ ++ if (!populated_zone(z)) ++ continue; ++ ++ ns = &sp_stat.node[z->zone_pgdat->node_id]; ++ idx = zone_idx(z); ++ ns->lowfree[idx] = z->pages_high * 3; ++ ns->highfree[idx] = ns->lowfree[idx] + z->pages_high; ++ ++ if (zone_page_state(z, NR_FREE_PAGES) > ns->highfree[idx]) { ++ /* ++ * We've gotten above the high watermark of free pages ++ * so we can start prefetching till we get to the low ++ * watermark. ++ */ ++ ns->pointfree[idx] = &ns->lowfree[idx]; ++ } ++ } ++} ++ ++/* ++ * We want to be absolutely certain it's ok to start prefetching. ++ */ ++static int prefetch_suitable(void) ++{ ++ unsigned long limit; ++ struct zone *z; ++ int node, ret = 0, test_pagestate = 0; ++ ++ /* Purposefully racy */ ++ if (test_bit(0, &swapped.busy)) { ++ __clear_bit(0, &swapped.busy); ++ goto out; ++ } ++ ++ /* ++ * get_page_state and above_background_load are expensive so we only ++ * perform them every SWAP_CLUSTER_MAX prefetched_pages. ++ * We test to see if we're above_background_load as disk activity ++ * even at low priority can cause interrupt induced scheduling ++ * latencies. ++ */ ++ if (!(sp_stat.prefetched_pages % SWAP_CLUSTER_MAX)) { ++ if (above_background_load()) ++ goto out; ++ test_pagestate = 1; ++ } ++ ++ clear_current_prefetch_free(); ++ ++ /* ++ * Have some hysteresis between where page reclaiming and prefetching ++ * will occur to prevent ping-ponging between them. ++ */ ++ for_each_zone(z) { ++ struct node_stats *ns; ++ unsigned long free; ++ int idx; ++ ++ if (!populated_zone(z)) ++ continue; ++ ++ node = z->zone_pgdat->node_id; ++ ns = &sp_stat.node[node]; ++ idx = zone_idx(z); ++ ++ free = zone_page_state(z, NR_FREE_PAGES); ++ if (free < *ns->pointfree[idx]) { ++ /* ++ * Free pages have dropped below the low watermark so ++ * we won't start prefetching again till we hit the ++ * high watermark of free pages. ++ */ ++ ns->pointfree[idx] = &ns->highfree[idx]; ++ node_clear(node, sp_stat.prefetch_nodes); ++ continue; ++ } ++ ns->current_free += free; ++ } ++ ++ /* ++ * We iterate over each node testing to see if it is suitable for ++ * prefetching and clear the nodemask if it is not. ++ */ ++ for_each_node_mask(node, sp_stat.prefetch_nodes) { ++ struct node_stats *ns = &sp_stat.node[node]; ++ ++ /* ++ * We check to see that pages are not being allocated ++ * elsewhere at any significant rate implying any ++ * degree of memory pressure (eg during file reads) ++ */ ++ if (ns->last_free) { ++ if (ns->current_free + SWAP_CLUSTER_MAX < ++ ns->last_free) { ++ ns->last_free = ns->current_free; ++ node_clear(node, ++ sp_stat.prefetch_nodes); ++ continue; ++ } ++ } else ++ ns->last_free = ns->current_free; ++ ++ if (!test_pagestate) ++ continue; ++ ++ /* We shouldn't prefetch when we are doing writeback */ ++ if (node_page_state(node, NR_WRITEBACK)) { ++ node_clear(node, sp_stat.prefetch_nodes); ++ continue; ++ } ++ ++ /* ++ * >2/3 of the ram on this node is mapped, slab, swapcache or ++ * dirty, we need to leave some free for pagecache. ++ */ ++ limit = node_page_state(node, NR_FILE_PAGES); ++ limit += node_page_state(node, NR_SLAB_RECLAIMABLE); ++ limit += node_page_state(node, NR_SLAB_UNRECLAIMABLE); ++ limit += node_page_state(node, NR_FILE_DIRTY); ++ limit += node_page_state(node, NR_UNSTABLE_NFS); ++ limit += total_swapcache_pages; ++ if (limit > ns->prefetch_watermark) { ++ node_clear(node, sp_stat.prefetch_nodes); ++ continue; ++ } ++ } ++ ++ if (nodes_empty(sp_stat.prefetch_nodes)) ++ goto out; ++ ++ /* Survived all that? Hooray we can prefetch! */ ++ ret = 1; ++out: ++ return ret; ++} ++ ++/* ++ * Get previous swapped entry when iterating over all entries. swapped.lock ++ * should be held and we should already ensure that entry exists. ++ */ ++static inline struct swapped_entry *prev_swapped_entry ++ (struct swapped_entry *entry) ++{ ++ return list_entry(entry->swapped_list.prev->prev, ++ struct swapped_entry, swapped_list); ++} ++ ++/* ++ * trickle_swap is the main function that initiates the swap prefetching. It ++ * first checks to see if the busy flag is set, and does not prefetch if it ++ * is, as the flag implied we are low on memory or swapping in currently. ++ * Otherwise it runs until prefetch_suitable fails which occurs when the ++ * vm is busy, we prefetch to the watermark, or the list is empty or we have ++ * iterated over all entries ++ */ ++static enum trickle_return trickle_swap(void) ++{ ++ enum trickle_return ret = TRICKLE_DELAY; ++ struct swapped_entry *entry; ++ unsigned long flags; ++ ++ /* ++ * If laptop_mode is enabled don't prefetch to avoid hard drives ++ * doing unnecessary spin-ups ++ */ ++ if (!swap_prefetch || laptop_mode) ++ return ret; ++ ++ examine_free_limits(); ++ entry = NULL; ++ ++ for ( ; ; ) { ++ swp_entry_t swp_entry; ++ int node; ++ ++ if (!prefetch_suitable()) ++ break; ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ if (list_empty(&swapped.list)) { ++ ret = TRICKLE_FAILED; ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ break; ++ } ++ ++ if (!entry) { ++ /* ++ * This sets the entry for the first iteration. It ++ * also is a safeguard against the entry disappearing ++ * while the lock is not held. ++ */ ++ entry = list_entry(swapped.list.prev, ++ struct swapped_entry, swapped_list); ++ } else if (entry->swapped_list.prev == swapped.list.next) { ++ /* ++ * If we have iterated over all entries and there are ++ * still entries that weren't swapped out there may ++ * be a reason we could not swap them back in so ++ * delay attempting further prefetching. ++ */ ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ break; ++ } ++ ++ node = get_swap_entry_node(entry); ++ if (!node_isset(node, sp_stat.prefetch_nodes)) { ++ /* ++ * We found an entry that belongs to a node that is ++ * not suitable for prefetching so skip it. ++ */ ++ entry = prev_swapped_entry(entry); ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ continue; ++ } ++ swp_entry = entry->swp_entry; ++ entry = prev_swapped_entry(entry); ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ ++ if (trickle_swap_cache_async(swp_entry, node) == TRICKLE_DELAY) ++ break; ++ } ++ ++ if (sp_stat.prefetched_pages) { ++ lru_add_drain(); ++ sp_stat.prefetched_pages = 0; ++ } ++ return ret; ++} ++ ++static int kprefetchd(void *__unused) ++{ ++ struct sched_param param = { .sched_priority = 0 }; ++ ++ sched_setscheduler(current, SCHED_BATCH, ¶m); ++ set_user_nice(current, 19); ++ /* Set ioprio to lowest if supported by i/o scheduler */ ++ sys_ioprio_set(IOPRIO_WHO_PROCESS, 0, IOPRIO_CLASS_IDLE); ++ ++ /* kprefetchd has nothing to do until it is woken up the first time */ ++ set_current_state(TASK_INTERRUPTIBLE); ++ schedule(); ++ ++ do { ++ try_to_freeze(); ++ ++ /* ++ * TRICKLE_FAILED implies no entries left - we do not schedule ++ * a wakeup, and further delay the next one. ++ */ ++ if (trickle_swap() == TRICKLE_FAILED) { ++ set_current_state(TASK_INTERRUPTIBLE); ++ schedule(); ++ } ++ clear_last_prefetch_free(); ++ schedule_timeout_interruptible(PREFETCH_DELAY); ++ } while (!kthread_should_stop()); ++ ++ return 0; ++} ++ ++/* ++ * Create kmem cache for swapped entries ++ */ ++void __init prepare_swap_prefetch(void) ++{ ++ struct zone *zone; ++ ++ swapped.cache = kmem_cache_create("swapped_entry", ++ sizeof(struct swapped_entry), 0, SLAB_PANIC, NULL, NULL); ++ ++ /* ++ * Set max number of entries to 2/3 the size of physical ram as we ++ * only ever prefetch to consume 2/3 of the ram. ++ */ ++ swapped.maxcount = nr_free_pagecache_pages() / 3 * 2; ++ ++ for_each_zone(zone) { ++ unsigned long present; ++ struct node_stats *ns; ++ int idx; ++ ++ present = zone->present_pages; ++ if (!present) ++ continue; ++ ++ ns = &sp_stat.node[zone->zone_pgdat->node_id]; ++ ns->prefetch_watermark += present / 3 * 2; ++ idx = zone_idx(zone); ++ ns->pointfree[idx] = &ns->highfree[idx]; ++ } ++} ++ ++static int __init kprefetchd_init(void) ++{ ++ kprefetchd_task = kthread_run(kprefetchd, NULL, "kprefetchd"); ++ ++ return 0; ++} ++ ++static void __exit kprefetchd_exit(void) ++{ ++ kthread_stop(kprefetchd_task); ++} ++ ++module_init(kprefetchd_init); ++module_exit(kprefetchd_exit); +Index: linux-2.6.21-ck1/mm/swap_state.c +=================================================================== +--- linux-2.6.21-ck1.orig/mm/swap_state.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/mm/swap_state.c 2007-05-04 12:24:20.000000000 +1000 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -82,6 +83,7 @@ static int __add_to_swap_cache(struct pa + error = radix_tree_insert(&swapper_space.page_tree, + entry.val, page); + if (!error) { ++ remove_from_swapped_list(entry.val); + page_cache_get(page); + SetPageLocked(page); + SetPageSwapCache(page); +@@ -95,11 +97,12 @@ static int __add_to_swap_cache(struct pa + return error; + } + +-static int add_to_swap_cache(struct page *page, swp_entry_t entry) ++int add_to_swap_cache(struct page *page, swp_entry_t entry) + { + int error; + + if (!swap_duplicate(entry)) { ++ remove_from_swapped_list(entry.val); + INC_CACHE_INFO(noent_race); + return -ENOENT; + } +@@ -148,6 +151,9 @@ int add_to_swap(struct page * page, gfp_ + swp_entry_t entry; + int err; + ++ /* Swap prefetching is delayed if we're swapping pages */ ++ delay_swap_prefetch(); ++ + BUG_ON(!PageLocked(page)); + + for (;;) { +@@ -320,6 +326,9 @@ struct page *read_swap_cache_async(swp_e + struct page *found_page, *new_page = NULL; + int err; + ++ /* Swap prefetching is delayed if we're already reading from swap */ ++ delay_swap_prefetch(); ++ + do { + /* + * First check the swap cache. Since this is normally +Index: linux-2.6.21-ck1/mm/vmscan.c +=================================================================== +--- linux-2.6.21-ck1.orig/mm/vmscan.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/mm/vmscan.c 2007-05-04 12:24:21.000000000 +1000 +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -36,6 +37,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -63,7 +65,7 @@ struct scan_control { + * whole list at once. */ + int swap_cluster_max; + +- int swappiness; ++ int mapped; + + int all_unreclaimable; + }; +@@ -110,9 +112,10 @@ struct shrinker { + #endif + + /* +- * From 0 .. 100. Higher means more swappy. ++ * From 0 .. 100. Lower means more swappy. + */ +-int vm_swappiness = 60; ++int vm_mapped __read_mostly = 66; ++int vm_hardmaplimit __read_mostly = 1; + long vm_total_pages; /* The total number of pages which the VM controls */ + + static LIST_HEAD(shrinker_list); +@@ -424,6 +427,7 @@ int remove_mapping(struct address_space + + if (PageSwapCache(page)) { + swp_entry_t swap = { .val = page_private(page) }; ++ add_to_swapped_list(page); + __delete_from_swap_cache(page); + write_unlock_irq(&mapping->tree_lock); + swap_free(swap); +@@ -807,10 +811,14 @@ static void shrink_active_list(unsigned + * The distress ratio is important - we don't want to start + * going oom. + * +- * A 100% value of vm_swappiness overrides this algorithm +- * altogether. ++ * This distress value is ignored if we apply a hardmaplimit except ++ * in extreme distress. ++ * ++ * A 0% value of vm_mapped overrides this algorithm altogether. + */ +- swap_tendency = mapped_ratio / 2 + distress + sc->swappiness; ++ swap_tendency = mapped_ratio * 100 / (sc->mapped + 1); ++ if (!vm_hardmaplimit || distress == 100) ++ swap_tendency += distress; + + /* + * Now use this metric to decide whether to start moving mapped +@@ -959,6 +967,41 @@ static unsigned long shrink_zone(int pri + } + + /* ++ * Helper functions to adjust nice level of kswapd, based on the priority of ++ * the task (p) that called it. If it is already higher priority we do not ++ * demote its nice level since it is still working on behalf of a higher ++ * priority task. With kernel threads we leave it at nice 0. ++ * ++ * We don't ever run kswapd real time, so if a real time task calls kswapd we ++ * set it to highest SCHED_NORMAL priority. ++ */ ++static int effective_sc_prio(struct task_struct *p) ++{ ++ if (likely(p->mm)) { ++ if (rt_task(p)) ++ return -20; ++ if (idleprio_task(p)) ++ return 19; ++ return task_nice(p); ++ } ++ return 0; ++} ++ ++static void set_kswapd_nice(struct task_struct *kswapd, struct task_struct *p, ++ int active) ++{ ++ long nice = effective_sc_prio(p); ++ ++ if (task_nice(kswapd) > nice || !active) ++ set_user_nice(kswapd, nice); ++} ++ ++static int sc_priority(struct task_struct *p) ++{ ++ return (DEF_PRIORITY + (DEF_PRIORITY * effective_sc_prio(p) / 40)); ++} ++ ++/* + * This is the direct reclaim path, for page-allocating processes. We only + * try to reclaim pages from zones which will satisfy the caller's allocation + * request. +@@ -1015,7 +1058,8 @@ static unsigned long shrink_zones(int pr + * holds filesystem locks which prevent writeout this might not work, and the + * allocation attempt will fail. + */ +-unsigned long try_to_free_pages(struct zone **zones, gfp_t gfp_mask) ++unsigned long try_to_free_pages(struct zone **zones, gfp_t gfp_mask, ++ struct task_struct *p) + { + int priority; + int ret = 0; +@@ -1023,15 +1067,20 @@ unsigned long try_to_free_pages(struct z + unsigned long nr_reclaimed = 0; + struct reclaim_state *reclaim_state = current->reclaim_state; + unsigned long lru_pages = 0; +- int i; ++ int i, scan_priority = DEF_PRIORITY; + struct scan_control sc = { + .gfp_mask = gfp_mask, + .may_writepage = !laptop_mode, + .swap_cluster_max = SWAP_CLUSTER_MAX, + .may_swap = 1, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + ++ if (p) ++ scan_priority = sc_priority(p); ++ ++ delay_swap_prefetch(); ++ + count_vm_event(ALLOCSTALL); + + for (i = 0; zones[i] != NULL; i++) { +@@ -1044,7 +1093,7 @@ unsigned long try_to_free_pages(struct z + + zone_page_state(zone, NR_INACTIVE); + } + +- for (priority = DEF_PRIORITY; priority >= 0; priority--) { ++ for (priority = scan_priority; priority >= 0; priority--) { + sc.nr_scanned = 0; + if (!priority) + disable_swap_token(); +@@ -1074,7 +1123,7 @@ unsigned long try_to_free_pages(struct z + } + + /* Take a nap, wait for some writeback to complete */ +- if (sc.nr_scanned && priority < DEF_PRIORITY - 2) ++ if (sc.nr_scanned && priority < scan_priority - 2) + congestion_wait(WRITE, HZ/10); + } + /* top priority shrink_caches still had more to do? don't OOM, then */ +@@ -1124,9 +1173,9 @@ out: + */ + static unsigned long balance_pgdat(pg_data_t *pgdat, int order) + { +- int all_zones_ok; ++ int all_zones_ok = 0; + int priority; +- int i; ++ int i, scan_priority; + unsigned long total_scanned; + unsigned long nr_reclaimed; + struct reclaim_state *reclaim_state = current->reclaim_state; +@@ -1134,7 +1183,7 @@ static unsigned long balance_pgdat(pg_da + .gfp_mask = GFP_KERNEL, + .may_swap = 1, + .swap_cluster_max = SWAP_CLUSTER_MAX, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + /* + * temp_priority is used to remember the scanning priority at which +@@ -1142,6 +1191,8 @@ static unsigned long balance_pgdat(pg_da + */ + int temp_priority[MAX_NR_ZONES]; + ++ scan_priority = sc_priority(pgdat->kswapd); ++ + loop_again: + total_scanned = 0; + nr_reclaimed = 0; +@@ -1149,9 +1200,9 @@ loop_again: + count_vm_event(PAGEOUTRUN); + + for (i = 0; i < pgdat->nr_zones; i++) +- temp_priority[i] = DEF_PRIORITY; ++ temp_priority[i] = scan_priority; + +- for (priority = DEF_PRIORITY; priority >= 0; priority--) { ++ for (priority = scan_priority; priority >= 0; priority--) { + int end_zone = 0; /* Inclusive. 0 = ZONE_DMA */ + unsigned long lru_pages = 0; + +@@ -1167,15 +1218,22 @@ loop_again: + */ + for (i = pgdat->nr_zones - 1; i >= 0; i--) { + struct zone *zone = pgdat->node_zones + i; ++ unsigned long watermark; + + if (!populated_zone(zone)) + continue; + +- if (zone->all_unreclaimable && priority != DEF_PRIORITY) ++ if (zone->all_unreclaimable && priority != scan_priority) + continue; + +- if (!zone_watermark_ok(zone, order, zone->pages_high, +- 0, 0)) { ++ /* ++ * The watermark is relaxed depending on the ++ * level of "priority" till it drops to ++ * pages_high. ++ */ ++ watermark = zone->pages_high + (zone->pages_high * ++ priority / scan_priority); ++ if (!zone_watermark_ok(zone, order, watermark, 0, 0)) { + end_zone = i; + break; + } +@@ -1202,14 +1260,18 @@ loop_again: + for (i = 0; i <= end_zone; i++) { + struct zone *zone = pgdat->node_zones + i; + int nr_slab; ++ unsigned long watermark; + + if (!populated_zone(zone)) + continue; + +- if (zone->all_unreclaimable && priority != DEF_PRIORITY) ++ if (zone->all_unreclaimable && priority != scan_priority) + continue; + +- if (!zone_watermark_ok(zone, order, zone->pages_high, ++ watermark = zone->pages_high + (zone->pages_high * ++ priority / scan_priority); ++ ++ if (!zone_watermark_ok(zone, order, watermark, + end_zone, 0)) + all_zones_ok = 0; + temp_priority[i] = priority; +@@ -1242,7 +1304,7 @@ loop_again: + * OK, kswapd is getting into trouble. Take a nap, then take + * another pass across the zones. + */ +- if (total_scanned && priority < DEF_PRIORITY - 2) ++ if (total_scanned && priority < scan_priority - 2) + congestion_wait(WRITE, HZ/10); + + /* +@@ -1276,6 +1338,8 @@ out: + return nr_reclaimed; + } + ++#define WT_EXPIRY (HZ * 5) /* Time to wakeup watermark_timer */ ++ + /* + * The background pageout daemon, started as a kernel thread + * from the init process. +@@ -1325,6 +1389,8 @@ static int kswapd(void *p) + + try_to_freeze(); + ++ /* kswapd has been busy so delay watermark_timer */ ++ mod_timer(&pgdat->watermark_timer, jiffies + WT_EXPIRY); + prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE); + new_order = pgdat->kswapd_max_order; + pgdat->kswapd_max_order = 0; +@@ -1335,6 +1401,7 @@ static int kswapd(void *p) + */ + order = new_order; + } else { ++ set_user_nice(tsk, 0); + schedule(); + order = pgdat->kswapd_max_order; + } +@@ -1348,9 +1415,10 @@ static int kswapd(void *p) + /* + * A zone is low on free memory, so wake its kswapd task to service it. + */ +-void wakeup_kswapd(struct zone *zone, int order) ++void wakeup_kswapd(struct zone *zone, int order, struct task_struct *p) + { + pg_data_t *pgdat; ++ int active; + + if (!populated_zone(zone)) + return; +@@ -1362,7 +1430,9 @@ void wakeup_kswapd(struct zone *zone, in + pgdat->kswapd_max_order = order; + if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL)) + return; +- if (!waitqueue_active(&pgdat->kswapd_wait)) ++ active = waitqueue_active(&pgdat->kswapd_wait); ++ set_kswapd_nice(pgdat->kswapd, p, active); ++ if (!active) + return; + wake_up_interruptible(&pgdat->kswapd_wait); + } +@@ -1381,6 +1451,8 @@ static unsigned long shrink_all_zones(un + struct zone *zone; + unsigned long nr_to_scan, ret = 0; + ++ delay_swap_prefetch(); ++ + for_each_zone(zone) { + + if (!populated_zone(zone)) +@@ -1440,7 +1512,7 @@ unsigned long shrink_all_memory(unsigned + .may_swap = 0, + .swap_cluster_max = nr_pages, + .may_writepage = 1, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + + current->reclaim_state = &reclaim_state; +@@ -1475,7 +1547,7 @@ unsigned long shrink_all_memory(unsigned + /* Force reclaiming mapped pages in the passes #3 and #4 */ + if (pass > 2) { + sc.may_swap = 1; +- sc.swappiness = 100; ++ sc.mapped = 0; + } + + for (prio = DEF_PRIORITY; prio >= 0; prio--) { +@@ -1539,20 +1611,57 @@ static int __devinit cpu_callback(struct + } + + /* ++ * We wake up kswapd every WT_EXPIRY till free ram is above pages_lots ++ */ ++static void watermark_wakeup(unsigned long data) ++{ ++ pg_data_t *pgdat = (pg_data_t *)data; ++ struct timer_list *wt = &pgdat->watermark_timer; ++ int i; ++ ++ if (!waitqueue_active(&pgdat->kswapd_wait) || above_background_load()) ++ goto out; ++ for (i = pgdat->nr_zones - 1; i >= 0; i--) { ++ struct zone *z = pgdat->node_zones + i; ++ ++ if (!populated_zone(z) || is_highmem(z)) { ++ /* We are better off leaving highmem full */ ++ continue; ++ } ++ if (!zone_watermark_ok(z, 0, z->pages_lots, 0, 0)) { ++ wake_up_interruptible(&pgdat->kswapd_wait); ++ goto out; ++ } ++ } ++out: ++ mod_timer(wt, jiffies + WT_EXPIRY); ++ return; ++} ++ ++/* + * This kswapd start function will be called by init and node-hot-add. + * On node-hot-add, kswapd will moved to proper cpus if cpus are hot-added. + */ + int kswapd_run(int nid) + { + pg_data_t *pgdat = NODE_DATA(nid); ++ struct timer_list *wt; + int ret = 0; + + if (pgdat->kswapd) + return 0; + ++ wt = &pgdat->watermark_timer; ++ init_timer(wt); ++ wt->data = (unsigned long)pgdat; ++ wt->function = watermark_wakeup; ++ wt->expires = jiffies + WT_EXPIRY; ++ add_timer(wt); ++ + pgdat->kswapd = kthread_run(kswapd, pgdat, "kswapd%d", nid); + if (IS_ERR(pgdat->kswapd)) { + /* failure at boot is fatal */ ++ del_timer(wt); + BUG_ON(system_state == SYSTEM_BOOTING); + printk("Failed to start kswapd on node %d\n",nid); + ret = -1; +@@ -1623,7 +1732,7 @@ static int __zone_reclaim(struct zone *z + .swap_cluster_max = max_t(unsigned long, nr_pages, + SWAP_CLUSTER_MAX), + .gfp_mask = gfp_mask, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + unsigned long slab_reclaimable; + +Index: linux-2.6.21-ck1/include/linux/mm_inline.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/mm_inline.h 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/mm_inline.h 2007-05-04 12:24:20.000000000 +1000 +@@ -13,6 +13,13 @@ add_page_to_inactive_list(struct zone *z + } + + static inline void ++add_page_to_inactive_list_tail(struct zone *zone, struct page *page) ++{ ++ list_add_tail(&page->lru, &zone->inactive_list); ++ __inc_zone_state(zone, NR_INACTIVE); ++} ++ ++static inline void + del_page_from_active_list(struct zone *zone, struct page *page) + { + list_del(&page->lru); +Index: linux-2.6.21-ck1/include/linux/swap-prefetch.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.21-ck1/include/linux/swap-prefetch.h 2007-05-04 12:24:20.000000000 +1000 +@@ -0,0 +1,55 @@ ++#ifndef SWAP_PREFETCH_H_INCLUDED ++#define SWAP_PREFETCH_H_INCLUDED ++ ++#ifdef CONFIG_SWAP_PREFETCH ++/* mm/swap_prefetch.c */ ++extern int swap_prefetch; ++struct swapped_entry { ++ swp_entry_t swp_entry; /* The actual swap entry */ ++ struct list_head swapped_list; /* Linked list of entries */ ++#if MAX_NUMNODES > 1 ++ int node; /* Node id */ ++#endif ++} __attribute__((packed)); ++ ++static inline void store_swap_entry_node(struct swapped_entry *entry, ++ struct page *page) ++{ ++#if MAX_NUMNODES > 1 ++ entry->node = page_to_nid(page); ++#endif ++} ++ ++static inline int get_swap_entry_node(struct swapped_entry *entry) ++{ ++#if MAX_NUMNODES > 1 ++ return entry->node; ++#else ++ return 0; ++#endif ++} ++ ++extern void add_to_swapped_list(struct page *page); ++extern void remove_from_swapped_list(const unsigned long index); ++extern void delay_swap_prefetch(void); ++extern void prepare_swap_prefetch(void); ++ ++#else /* CONFIG_SWAP_PREFETCH */ ++static inline void add_to_swapped_list(struct page *__unused) ++{ ++} ++ ++static inline void prepare_swap_prefetch(void) ++{ ++} ++ ++static inline void remove_from_swapped_list(const unsigned long __unused) ++{ ++} ++ ++static inline void delay_swap_prefetch(void) ++{ ++} ++#endif /* CONFIG_SWAP_PREFETCH */ ++ ++#endif /* SWAP_PREFETCH_H_INCLUDED */ +Index: linux-2.6.21-ck1/include/linux/sysctl.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/sysctl.h 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/sysctl.h 2007-05-04 12:24:20.000000000 +1000 +@@ -190,7 +190,7 @@ enum + VM_OVERCOMMIT_RATIO=16, /* percent of RAM to allow overcommit in */ + VM_PAGEBUF=17, /* struct: Control pagebuf parameters */ + VM_HUGETLB_PAGES=18, /* int: Number of available Huge Pages */ +- VM_SWAPPINESS=19, /* Tendency to steal mapped memory */ ++ VM_MAPPED=19, /* percent mapped min while evicting cache */ + VM_LOWMEM_RESERVE_RATIO=20,/* reservation ratio for lower memory zones */ + VM_MIN_FREE_KBYTES=21, /* Minimum free kilobytes to maintain */ + VM_MAX_MAP_COUNT=22, /* int: Maximum number of mmaps/address-space */ +Index: linux-2.6.21-ck1/include/linux/mmzone.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/mmzone.h 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/mmzone.h 2007-05-04 12:24:21.000000000 +1000 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -178,7 +179,7 @@ enum zone_type { + + struct zone { + /* Fields commonly accessed by the page allocator */ +- unsigned long pages_min, pages_low, pages_high; ++ unsigned long pages_min, pages_low, pages_high, pages_lots; + /* + * We don't know if the memory that we're going to allocate will be freeable + * or/and it will be released eventually, so to avoid totally wasting several +@@ -449,6 +450,7 @@ typedef struct pglist_data { + wait_queue_head_t kswapd_wait; + struct task_struct *kswapd; + int kswapd_max_order; ++ struct timer_list watermark_timer; + } pg_data_t; + + #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) +@@ -465,7 +467,7 @@ typedef struct pglist_data { + void get_zone_counts(unsigned long *active, unsigned long *inactive, + unsigned long *free); + void build_all_zonelists(void); +-void wakeup_kswapd(struct zone *zone, int order); ++void wakeup_kswapd(struct zone *zone, int order, struct task_struct *p); + int zone_watermark_ok(struct zone *z, int order, unsigned long mark, + int classzone_idx, int alloc_flags); + enum memmap_context { +Index: linux-2.6.21-ck1/mm/page_alloc.c +=================================================================== +--- linux-2.6.21-ck1.orig/mm/page_alloc.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/mm/page_alloc.c 2007-05-04 12:24:20.000000000 +1000 +@@ -1277,7 +1277,7 @@ restart: + goto nopage; + + for (z = zonelist->zones; *z; z++) +- wakeup_kswapd(*z, order); ++ wakeup_kswapd(*z, order, p); + + /* + * OK, we're below the kswapd watermark and have kicked background +@@ -1341,7 +1341,7 @@ nofail_alloc: + reclaim_state.reclaimed_slab = 0; + p->reclaim_state = &reclaim_state; + +- did_some_progress = try_to_free_pages(zonelist->zones, gfp_mask); ++ did_some_progress = try_to_free_pages(zonelist->zones, gfp_mask, p); + + p->reclaim_state = NULL; + p->flags &= ~PF_MEMALLOC; +@@ -1597,6 +1597,7 @@ void show_free_areas(void) + " min:%lukB" + " low:%lukB" + " high:%lukB" ++ " lots:%lukB" + " active:%lukB" + " inactive:%lukB" + " present:%lukB" +@@ -1608,6 +1609,7 @@ void show_free_areas(void) + K(zone->pages_min), + K(zone->pages_low), + K(zone->pages_high), ++ K(zone->pages_lots), + K(zone_page_state(zone, NR_ACTIVE)), + K(zone_page_state(zone, NR_INACTIVE)), + K(zone->present_pages), +@@ -3146,6 +3148,7 @@ void setup_per_zone_pages_min(void) + + zone->pages_low = zone->pages_min + (tmp >> 2); + zone->pages_high = zone->pages_min + (tmp >> 1); ++ zone->pages_lots = zone->pages_min + tmp; + spin_unlock_irqrestore(&zone->lru_lock, flags); + } + +Index: linux-2.6.21-ck1/fs/buffer.c +=================================================================== +--- linux-2.6.21-ck1.orig/fs/buffer.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/fs/buffer.c 2007-05-04 12:24:20.000000000 +1000 +@@ -363,7 +363,7 @@ static void free_more_memory(void) + for_each_online_pgdat(pgdat) { + zones = pgdat->node_zonelists[gfp_zone(GFP_NOFS)].zones; + if (*zones) +- try_to_free_pages(zones, GFP_NOFS); ++ try_to_free_pages(zones, GFP_NOFS, NULL); + } + } + +Index: linux-2.6.21-ck1/mm/filemap.c +=================================================================== +--- linux-2.6.21-ck1.orig/mm/filemap.c 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/mm/filemap.c 2007-05-04 12:24:21.000000000 +1000 +@@ -466,6 +466,16 @@ int add_to_page_cache_lru(struct page *p + return ret; + } + ++int add_to_page_cache_lru_tail(struct page *page, ++ struct address_space *mapping, pgoff_t offset, gfp_t gfp_mask) ++{ ++ int ret = add_to_page_cache(page, mapping, offset, gfp_mask); ++ ++ if (ret == 0) ++ lru_cache_add_tail(page); ++ return ret; ++} ++ + #ifdef CONFIG_NUMA + struct page *__page_cache_alloc(gfp_t gfp) + { +@@ -836,6 +846,34 @@ static void shrink_readahead_size_eio(st + ra->ra_pages /= 4; + } + ++/* ++ * Sysctl which determines whether we should read from large files to the ++ * tail of the inactive lru list. ++ */ ++int vm_tail_largefiles __read_mostly = 1; ++ ++static inline int nr_mapped(void) ++{ ++ return global_page_state(NR_FILE_MAPPED) + ++ global_page_state(NR_ANON_PAGES); ++} ++ ++/* ++ * This examines how large in pages a file size is and returns 1 if it is ++ * more than half the unmapped ram. Avoid doing read_page_state which is ++ * expensive unless we already know it is likely to be large enough. ++ */ ++static int large_isize(unsigned long nr_pages) ++{ ++ if (nr_pages * 6 > vm_total_pages) { ++ unsigned long unmapped_ram = vm_total_pages - nr_mapped(); ++ ++ if (nr_pages * 2 > unmapped_ram) ++ return 1; ++ } ++ return 0; ++} ++ + /** + * do_generic_mapping_read - generic file read routine + * @mapping: address_space to be read +@@ -1044,8 +1082,19 @@ no_cached_page: + goto out; + } + } +- error = add_to_page_cache_lru(cached_page, mapping, +- index, GFP_KERNEL); ++ ++ /* ++ * If we know the file is large we add the pages read to the ++ * end of the lru as we're unlikely to be able to cache the ++ * whole file in ram so make those pages the first to be ++ * dropped if not referenced soon. ++ */ ++ if (vm_tail_largefiles && large_isize(end_index)) ++ error = add_to_page_cache_lru_tail(cached_page, ++ mapping, index, GFP_KERNEL); ++ else ++ error = add_to_page_cache_lru(cached_page, mapping, ++ index, GFP_KERNEL); + if (error) { + if (error == -EEXIST) + goto find_page; +Index: linux-2.6.21-ck1/Documentation/filesystems/proc.txt +=================================================================== +--- linux-2.6.21-ck1.orig/Documentation/filesystems/proc.txt 2007-05-04 12:24:01.000000000 +1000 ++++ linux-2.6.21-ck1/Documentation/filesystems/proc.txt 2007-05-04 12:24:21.000000000 +1000 +@@ -1325,6 +1325,14 @@ To free pagecache, dentries and inodes: + As this is a non-destructive operation and dirty objects are not freeable, the + user should run `sync' first. + ++tail_largefiles ++--------------- ++ ++When enabled reads from large files to the tail end of the inactive lru list. ++This means that any cache from reading large files is dropped very quickly, ++preventing loss of mapped ram and useful pagecache when large files are read. ++This does, however, make caching less effective when working with large files. ++ + + 2.5 /proc/sys/dev - Device specific parameters + ---------------------------------------------- +Index: linux-2.6.21-ck1/arch/i386/Kconfig +=================================================================== +--- linux-2.6.21-ck1.orig/arch/i386/Kconfig 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/arch/i386/Kconfig 2007-05-04 12:24:21.000000000 +1000 +@@ -546,7 +546,7 @@ endchoice + + choice + depends on EXPERIMENTAL +- prompt "Memory split" if EMBEDDED ++ prompt "Memory split" + default VMSPLIT_3G + help + Select the desired split between kernel and user memory. +@@ -565,14 +565,14 @@ choice + option alone! + + config VMSPLIT_3G +- bool "3G/1G user/kernel split" ++ bool "Default 896MB lowmem (3G/1G user/kernel split)" + config VMSPLIT_3G_OPT + depends on !HIGHMEM +- bool "3G/1G user/kernel split (for full 1G low memory)" ++ bool "1GB lowmem (3G/1G user/kernel split)" + config VMSPLIT_2G +- bool "2G/2G user/kernel split" ++ bool "2GB lowmem (2G/2G user/kernel split)" + config VMSPLIT_1G +- bool "1G/3G user/kernel split" ++ bool "3GB lowmem (1G/3G user/kernel split)" + endchoice + + config PAGE_OFFSET +Index: linux-2.6.21-ck1/kernel/Kconfig.hz +=================================================================== +--- linux-2.6.21-ck1.orig/kernel/Kconfig.hz 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/kernel/Kconfig.hz 2007-05-04 12:24:21.000000000 +1000 +@@ -4,7 +4,7 @@ + + choice + prompt "Timer frequency" +- default HZ_250 ++ default HZ_1000 + help + Allows the configuration of the timer frequency. It is customary + to have the timer interrupt run at 1000 Hz but 100 Hz may be more +@@ -13,8 +13,7 @@ choice + contention and cacheline bounces as a result of timer interrupts. + Note that the timer interrupt occurs on each processor in an SMP + environment leading to NR_CPUS * HZ number of timer interrupts +- per second. +- ++ per second.Laptops may also show improved battery life. + + config HZ_100 + bool "100 HZ" +@@ -23,13 +22,14 @@ choice + with lots of processors that may show reduced performance if + too many timer interrupts are occurring. + +- config HZ_250 ++ config HZ_250_NODEFAULT + bool "250 HZ" + help +- 250 Hz is a good compromise choice allowing server performance +- while also showing good interactive responsiveness even +- on SMP and NUMA systems. If you are going to be using NTSC video +- or multimedia, selected 300Hz instead. ++ 250 HZ is a lousy compromise choice allowing server interactivity ++ while also showing desktop throughput and no extra power saving on ++ laptops. Good for when you can't make up your mind. ++ ++ Recommend 100 or 1000 instead. + + config HZ_300 + bool "300 HZ" +@@ -45,12 +45,76 @@ choice + 1000 Hz is the preferred choice for desktop systems and other + systems requiring fast interactive responses to events. + ++ config HZ_1500 ++ bool "1500 HZ" ++ help ++ 1500 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_2000 ++ bool "2000 HZ" ++ help ++ 2000 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_3000 ++ bool "3000 HZ" ++ help ++ 3000 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_4000 ++ bool "4000 HZ" ++ help ++ 4000 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_5000 ++ bool "5000 HZ" ++ help ++ 5000 Hz is an obscene value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_7500 ++ bool "7500 HZ" ++ help ++ 7500 Hz is an obscene value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_10000 ++ bool "10000 HZ" ++ help ++ 10000 Hz is an obscene value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ + endchoice + + config HZ + int + default 100 if HZ_100 +- default 250 if HZ_250 ++ default 250 if HZ_250_NODEFAULT + default 300 if HZ_300 + default 1000 if HZ_1000 ++ default 1500 if HZ_1500 ++ default 2000 if HZ_2000 ++ default 3000 if HZ_3000 ++ default 4000 if HZ_4000 ++ default 5000 if HZ_5000 ++ default 7500 if HZ_7500 ++ default 10000 if HZ_10000 + +Index: linux-2.6.21-ck1/arch/i386/defconfig +=================================================================== +--- linux-2.6.21-ck1.orig/arch/i386/defconfig 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/arch/i386/defconfig 2007-05-04 12:24:21.000000000 +1000 +@@ -214,10 +214,10 @@ CONFIG_MTRR=y + # CONFIG_IRQBALANCE is not set + CONFIG_SECCOMP=y + # CONFIG_HZ_100 is not set +-CONFIG_HZ_250=y ++# CONFIG_HZ_250 is not set + # CONFIG_HZ_300 is not set +-# CONFIG_HZ_1000 is not set +-CONFIG_HZ=250 ++CONFIG_HZ_1000=y ++CONFIG_HZ=1000 + # CONFIG_KEXEC is not set + # CONFIG_CRASH_DUMP is not set + CONFIG_PHYSICAL_START=0x100000 +Index: linux-2.6.21-ck1/arch/x86_64/defconfig +=================================================================== +--- linux-2.6.21-ck1.orig/arch/x86_64/defconfig 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/arch/x86_64/defconfig 2007-05-04 12:24:21.000000000 +1000 +@@ -178,10 +178,10 @@ CONFIG_PHYSICAL_START=0x200000 + CONFIG_SECCOMP=y + # CONFIG_CC_STACKPROTECTOR is not set + # CONFIG_HZ_100 is not set +-CONFIG_HZ_250=y ++# CONFIG_HZ_250 is not set + # CONFIG_HZ_300 is not set +-# CONFIG_HZ_1000 is not set +-CONFIG_HZ=250 ++CONFIG_HZ_1000=y ++CONFIG_HZ=1000 + # CONFIG_REORDER is not set + CONFIG_K8_NB=y + CONFIG_GENERIC_HARDIRQS=y +Index: linux-2.6.21-ck1/include/linux/jiffies.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/jiffies.h 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/jiffies.h 2007-05-04 12:24:21.000000000 +1000 +@@ -29,6 +29,12 @@ + # define SHIFT_HZ 9 + #elif HZ >= 768 && HZ < 1536 + # define SHIFT_HZ 10 ++#elif HZ >= 1536 && HZ < 3072 ++# define SHIFT_HZ 11 ++#elif HZ >= 3072 && HZ < 6144 ++# define SHIFT_HZ 12 ++#elif HZ >= 6144 && HZ < 12288 ++# define SHIFT_HZ 13 + #else + # error You lose. + #endif +Index: linux-2.6.21-ck1/include/net/inet_timewait_sock.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/net/inet_timewait_sock.h 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/include/net/inet_timewait_sock.h 2007-05-04 12:24:21.000000000 +1000 +@@ -38,8 +38,8 @@ struct inet_hashinfo; + * If time > 4sec, it is "slow" path, no recycling is required, + * so that we select tick to get range about 4 seconds. + */ +-#if HZ <= 16 || HZ > 4096 +-# error Unsupported: HZ <= 16 or HZ > 4096 ++#if HZ <= 16 || HZ > 16384 ++# error Unsupported: HZ <= 16 or HZ > 16384 + #elif HZ <= 32 + # define INET_TWDR_RECYCLE_TICK (5 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) + #elif HZ <= 64 +@@ -54,8 +54,12 @@ struct inet_hashinfo; + # define INET_TWDR_RECYCLE_TICK (10 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) + #elif HZ <= 2048 + # define INET_TWDR_RECYCLE_TICK (11 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) +-#else ++#elif HZ <= 4096 + # define INET_TWDR_RECYCLE_TICK (12 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) ++#elif HZ <= 8192 ++# define INET_TWDR_RECYCLE_TICK (13 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) ++#else ++# define INET_TWDR_RECYCLE_TICK (14 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) + #endif + + /* TIME_WAIT reaping mechanism. */ +Index: linux-2.6.21-ck1/include/net/pkt_sched.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/net/pkt_sched.h 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/include/net/pkt_sched.h 2007-05-04 12:24:21.000000000 +1000 +@@ -78,8 +78,14 @@ typedef long psched_tdiff_t; + #define PSCHED_JSCALE 12 + #elif HZ >= 384 && HZ < 768 + #define PSCHED_JSCALE 11 +-#elif HZ >= 768 ++#elif HZ >= 768 && HZ < 1536 + #define PSCHED_JSCALE 10 ++#elif HZ >= 1536 && HZ < 3072 ++#define PSCHED_JSCALE 9 ++#elif HZ >= 3072 && HZ < 6144 ++#define PSCHED_JSCALE 8 ++#else ++#define PSCHED_JSCALE 7 + #endif + + #define PSCHED_GET_TIME(stamp) ((stamp) = (get_jiffies_64()<loops_per_jiffy/(500000/HZ), +- (c->loops_per_jiffy/(5000/HZ)) % 100); ++ (c->loops_per_jiffy * 10/(50000/HZ)) % 100); + seq_printf(m, "clflush size\t: %u\n\n", c->x86_clflush_size); + + return 0; +Index: linux-2.6.21-ck1/arch/i386/kernel/smpboot.c +=================================================================== +--- linux-2.6.21-ck1.orig/arch/i386/kernel/smpboot.c 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/arch/i386/kernel/smpboot.c 2007-05-04 12:24:21.000000000 +1000 +@@ -1134,7 +1134,7 @@ static void __init smp_boot_cpus(unsigne + "Total of %d processors activated (%lu.%02lu BogoMIPS).\n", + cpucount+1, + bogosum/(500000/HZ), +- (bogosum/(5000/HZ))%100); ++ (bogosum * 10/(50000/HZ))%100); + + Dprintk("Before bogocount - setting activated=1.\n"); + +Index: linux-2.6.21-ck1/include/linux/nfsd/stats.h +=================================================================== +--- linux-2.6.21-ck1.orig/include/linux/nfsd/stats.h 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/include/linux/nfsd/stats.h 2007-05-04 12:24:21.000000000 +1000 +@@ -35,8 +35,8 @@ struct nfsd_stats { + + }; + +-/* thread usage wraps very million seconds (approx one fortnight) */ +-#define NFSD_USAGE_WRAP (HZ*1000000) ++/* thread usage wraps every one hundred thousand seconds (approx one day) */ ++#define NFSD_USAGE_WRAP (HZ*100000) + + #ifdef __KERNEL__ + +Index: linux-2.6.21-ck1/arch/x86_64/kernel/setup.c +=================================================================== +--- linux-2.6.21-ck1.orig/arch/x86_64/kernel/setup.c 2007-05-04 12:24:00.000000000 +1000 ++++ linux-2.6.21-ck1/arch/x86_64/kernel/setup.c 2007-05-04 12:24:22.000000000 +1000 +@@ -1053,7 +1053,7 @@ static int show_cpuinfo(struct seq_file + + seq_printf(m, "\nbogomips\t: %lu.%02lu\n", + c->loops_per_jiffy/(500000/HZ), +- (c->loops_per_jiffy/(5000/HZ)) % 100); ++ (c->loops_per_jiffy * 10/(50000/HZ)) % 100); + + if (c->x86_tlbsize > 0) + seq_printf(m, "TLB size\t: %d 4K pages\n", c->x86_tlbsize); diff --git a/pkgs/os-specific/linux/kernel/patch-2.6.22-ck1 b/pkgs/os-specific/linux/kernel/patch-2.6.22-ck1 new file mode 100644 index 000000000000..81fa14e2abe4 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/patch-2.6.22-ck1 @@ -0,0 +1,5167 @@ +Index: linux-2.6.22-ck1/include/linux/sched.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/sched.h 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/sched.h 2007-07-10 14:55:21.000000000 +1000 +@@ -34,9 +34,14 @@ + #define SCHED_FIFO 1 + #define SCHED_RR 2 + #define SCHED_BATCH 3 ++#define SCHED_ISO 4 ++#define SCHED_IDLEPRIO 5 + + #ifdef __KERNEL__ + ++#define SCHED_MAX SCHED_IDLEPRIO ++#define SCHED_RANGE(policy) ((policy) <= SCHED_MAX) ++ + struct sched_param { + int sched_priority; + }; +@@ -129,7 +134,7 @@ + extern unsigned long nr_active(void); + extern unsigned long nr_iowait(void); + extern unsigned long weighted_cpuload(const int cpu); +- ++extern int above_background_load(void); + + /* + * Task state bitmask. NOTE! These bits are also +@@ -150,8 +155,7 @@ + #define EXIT_ZOMBIE 16 + #define EXIT_DEAD 32 + /* in tsk->state again */ +-#define TASK_NONINTERACTIVE 64 +-#define TASK_DEAD 128 ++#define TASK_DEAD 64 + + #define __set_task_state(tsk, state_value) \ + do { (tsk)->state = (state_value); } while (0) +@@ -537,14 +541,19 @@ + + #define MAX_USER_RT_PRIO 100 + #define MAX_RT_PRIO MAX_USER_RT_PRIO ++#define PRIO_RANGE (40) ++#define ISO_PRIO (MAX_RT_PRIO - 1) + +-#define MAX_PRIO (MAX_RT_PRIO + 40) ++#define MAX_PRIO (MAX_RT_PRIO + PRIO_RANGE) + +-#define rt_prio(prio) unlikely((prio) < MAX_RT_PRIO) ++#define rt_prio(prio) unlikely((prio) < ISO_PRIO) + #define rt_task(p) rt_prio((p)->prio) + #define batch_task(p) (unlikely((p)->policy == SCHED_BATCH)) +-#define is_rt_policy(p) ((p) != SCHED_NORMAL && (p) != SCHED_BATCH) ++#define is_rt_policy(policy) ((policy) == SCHED_FIFO || \ ++ (policy) == SCHED_RR) + #define has_rt_policy(p) unlikely(is_rt_policy((p)->policy)) ++#define iso_task(p) unlikely((p)->policy == SCHED_ISO) ++#define idleprio_task(p) unlikely((p)->policy == SCHED_IDLEPRIO) + + /* + * Some day this will be a full-fledged user tracking system.. +@@ -809,13 +818,6 @@ + struct pipe_inode_info; + struct uts_namespace; + +-enum sleep_type { +- SLEEP_NORMAL, +- SLEEP_NONINTERACTIVE, +- SLEEP_INTERACTIVE, +- SLEEP_INTERRUPTED, +-}; +- + struct prio_array; + + struct task_struct { +@@ -835,20 +837,33 @@ + int load_weight; /* for niceness load balancing purposes */ + int prio, static_prio, normal_prio; + struct list_head run_list; ++ /* ++ * This bitmap shows what priorities this task has received quota ++ * from for this major priority rotation on its current runqueue. ++ */ ++ DECLARE_BITMAP(bitmap, PRIO_RANGE + 1); + struct prio_array *array; ++ /* Which major runqueue rotation did this task run */ ++ unsigned long rotation; + + unsigned short ioprio; + #ifdef CONFIG_BLK_DEV_IO_TRACE + unsigned int btrace_seq; + #endif +- unsigned long sleep_avg; + unsigned long long timestamp, last_ran; + unsigned long long sched_time; /* sched_clock time spent running */ +- enum sleep_type sleep_type; + + unsigned int policy; + cpumask_t cpus_allowed; +- unsigned int time_slice, first_time_slice; ++ /* ++ * How much this task is entitled to run at the current priority ++ * before being requeued at a lower priority. ++ */ ++ int time_slice; ++ /* Is this the very first time_slice this task has ever run. */ ++ unsigned int first_time_slice; ++ /* How much this task receives at each priority level */ ++ int quota; + + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + struct sched_info sched_info; +@@ -1013,6 +1028,7 @@ + struct held_lock held_locks[MAX_LOCK_DEPTH]; + unsigned int lockdep_recursion; + #endif ++ unsigned long mutexes_held; + + /* journalling filesystem info */ + void *journal_info; +@@ -1181,9 +1197,11 @@ + #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */ + #define PF_SPREAD_PAGE 0x01000000 /* Spread page cache over cpuset */ + #define PF_SPREAD_SLAB 0x02000000 /* Spread some slab caches over cpuset */ ++#define PF_ISOREF 0x04000000 /* SCHED_ISO task has used up quota */ + #define PF_MEMPOLICY 0x10000000 /* Non-default NUMA mempolicy */ + #define PF_MUTEX_TESTER 0x20000000 /* Thread belongs to the rt mutex tester */ + #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezeable */ ++#define PF_NONSLEEP 0x80000000 /* Waiting on in-kernel activity */ + + /* + * Only the _current_ task can read/write to tsk->flags, but other +@@ -1253,7 +1271,7 @@ + #endif + + extern void set_user_nice(struct task_struct *p, long nice); +-extern int task_prio(const struct task_struct *p); ++extern int task_prio(struct task_struct *p); + extern int task_nice(const struct task_struct *p); + extern int can_nice(const struct task_struct *p, const int nice); + extern int task_curr(const struct task_struct *p); +Index: linux-2.6.22-ck1/kernel/sched.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/sched.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/sched.c 2007-07-10 14:55:24.000000000 +1000 +@@ -16,6 +16,7 @@ + * by Davide Libenzi, preemptible kernel bits by Robert Love. + * 2003-09-03 Interactivity tuning by Con Kolivas. + * 2004-04-02 Scheduler domains code by Nick Piggin ++ * 2007-03-02 Staircase deadline scheduling policy by Con Kolivas + */ + + #include +@@ -53,8 +54,9 @@ + #include + #include + #include +- ++#include + #include ++ + #include + + /* +@@ -84,147 +86,85 @@ + #define USER_PRIO(p) ((p)-MAX_RT_PRIO) + #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) + #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) ++#define SCHED_PRIO(p) ((p)+MAX_RT_PRIO) + +-/* +- * Some helpers for converting nanosecond timing to jiffy resolution +- */ +-#define NS_TO_JIFFIES(TIME) ((TIME) / (1000000000 / HZ)) ++/* Some helpers for converting to/from various scales.*/ + #define JIFFIES_TO_NS(TIME) ((TIME) * (1000000000 / HZ)) +- +-/* +- * These are the 'tuning knobs' of the scheduler: +- * +- * Minimum timeslice is 5 msecs (or 1 jiffy, whichever is larger), +- * default timeslice is 100 msecs, maximum timeslice is 800 msecs. +- * Timeslices get refilled after they expire. +- */ +-#define MIN_TIMESLICE max(5 * HZ / 1000, 1) +-#define DEF_TIMESLICE (100 * HZ / 1000) +-#define ON_RUNQUEUE_WEIGHT 30 +-#define CHILD_PENALTY 95 +-#define PARENT_PENALTY 100 +-#define EXIT_WEIGHT 3 +-#define PRIO_BONUS_RATIO 25 +-#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100) +-#define INTERACTIVE_DELTA 2 +-#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS) +-#define STARVATION_LIMIT (MAX_SLEEP_AVG) +-#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG)) +- +-/* +- * If a task is 'interactive' then we reinsert it in the active +- * array after it has expired its current timeslice. (it will not +- * continue to run immediately, it will still roundrobin with +- * other interactive tasks.) +- * +- * This part scales the interactivity limit depending on niceness. +- * +- * We scale it linearly, offset by the INTERACTIVE_DELTA delta. +- * Here are a few examples of different nice levels: +- * +- * TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0] +- * TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0] +- * TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0] +- * TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0] +- * TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0] +- * +- * (the X axis represents the possible -5 ... 0 ... +5 dynamic +- * priority range a task can explore, a value of '1' means the +- * task is rated interactive.) +- * +- * Ie. nice +19 tasks can never get 'interactive' enough to be +- * reinserted into the active array. And only heavily CPU-hog nice -20 +- * tasks will be expired. Default nice 0 tasks are somewhere between, +- * it takes some effort for them to get interactive, but it's not +- * too hard. +- */ +- +-#define CURRENT_BONUS(p) \ +- (NS_TO_JIFFIES((p)->sleep_avg) * MAX_BONUS / \ +- MAX_SLEEP_AVG) +- +-#define GRANULARITY (10 * HZ / 1000 ? : 1) +- +-#ifdef CONFIG_SMP +-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ +- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1)) * \ +- num_online_cpus()) +-#else +-#define TIMESLICE_GRANULARITY(p) (GRANULARITY * \ +- (1 << (((MAX_BONUS - CURRENT_BONUS(p)) ? : 1) - 1))) +-#endif +- +-#define SCALE(v1,v1_max,v2_max) \ +- (v1) * (v2_max) / (v1_max) +- +-#define DELTA(p) \ +- (SCALE(TASK_NICE(p) + 20, 40, MAX_BONUS) - 20 * MAX_BONUS / 40 + \ +- INTERACTIVE_DELTA) +- +-#define TASK_INTERACTIVE(p) \ +- ((p)->prio <= (p)->static_prio - DELTA(p)) +- +-#define INTERACTIVE_SLEEP(p) \ +- (JIFFIES_TO_NS(MAX_SLEEP_AVG * \ +- (MAX_BONUS / 2 + DELTA((p)) + 1) / MAX_BONUS - 1)) +- +-#define TASK_PREEMPTS_CURR(p, rq) \ +- ((p)->prio < (rq)->curr->prio) +- +-#define SCALE_PRIO(x, prio) \ +- max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE) +- +-static unsigned int static_prio_timeslice(int static_prio) +-{ +- if (static_prio < NICE_TO_PRIO(0)) +- return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio); +- else +- return SCALE_PRIO(DEF_TIMESLICE, static_prio); +-} +- +-#ifdef CONFIG_SMP +-/* +- * Divide a load by a sched group cpu_power : (load / sg->__cpu_power) +- * Since cpu_power is a 'constant', we can use a reciprocal divide. ++#define MS_TO_NS(TIME) ((TIME) * 1000000) ++#define MS_TO_US(TIME) ((TIME) * 1000) ++#define US_TO_MS(TIME) ((TIME) / 1000) ++ ++#define TASK_PREEMPTS_CURR(p, curr) ((p)->prio < (curr)->prio) ++ ++/* ++ * This is the time all tasks within the same priority round robin. ++ * Value is in ms and set to a minimum of 10ms. Scales with number of cpus. ++ * Tunable via /proc interface. ++ */ ++int rr_interval __read_mostly = 6; ++int sched_interactive __read_mostly = 1; ++ ++/* ++ * sched_iso_cpu - sysctl which determines the cpu percentage SCHED_ISO tasks ++ * are allowed to run (over ISO_PERIOD seconds) as real time tasks. ++ * sched_iso_period - sysctl which determines the number of seconds over ++ * which cpu usage of SCHED_ISO tasks is averaged to determine if they are ++ * exceeding their allowable bandwidth. ++*/ ++int sched_iso_cpu __read_mostly = 80; ++int sched_iso_period __read_mostly = 5; ++ ++#define ISO_PERIOD ((sched_iso_period * HZ) + 1) ++ ++/* ++ * This contains a bitmap for each dynamic priority level with empty slots ++ * for the valid priorities each different nice level can have. It allows ++ * us to stagger the slots where differing priorities run in a way that ++ * keeps latency differences between different nice levels at a minimum. ++ * The purpose of a pre-generated matrix is for rapid lookup of next slot in ++ * O(1) time without having to recalculate every time priority gets demoted. ++ * All nice levels use priority slot 39 as this allows less niced tasks to ++ * get all priority slots better than that before expiration is forced. ++ * ie, where 0 means a slot for that priority, priority running from left to ++ * right is from prio 0 to prio 39: ++ * nice -20 0000000000000000000000000000000000000000 ++ * nice -10 1000100010001000100010001000100010010000 ++ * nice 0 1010101010101010101010101010101010101010 ++ * nice 5 1011010110110101101101011011010110110110 ++ * nice 10 1110111011101110111011101110111011101110 ++ * nice 15 1111111011111110111111101111111011111110 ++ * nice 19 1111111111111111111111111111111111111110 + */ +-static inline u32 sg_div_cpu_power(const struct sched_group *sg, u32 load) +-{ +- return reciprocal_divide(load, sg->reciprocal_cpu_power); +-} ++static unsigned long prio_matrix[PRIO_RANGE][BITS_TO_LONGS(PRIO_RANGE)] ++ __read_mostly; + +-/* +- * Each time a sched group cpu_power is changed, +- * we must compute its reciprocal value +- */ +-static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val) +-{ +- sg->__cpu_power += val; +- sg->reciprocal_cpu_power = reciprocal_value(sg->__cpu_power); +-} +-#endif ++struct rq; + + /* +- * task_timeslice() scales user-nice values [ -20 ... 0 ... 19 ] +- * to time slice values: [800ms ... 100ms ... 5ms] +- * +- * The higher a thread's priority, the bigger timeslices +- * it gets during one round of execution. But even the lowest +- * priority thread gets MIN_TIMESLICE worth of execution time. ++ * These are the runqueue data structures: + */ ++struct prio_array { ++ /* Tasks queued at each priority */ ++ struct list_head queue[MAX_PRIO + 1]; + +-static inline unsigned int task_timeslice(struct task_struct *p) +-{ +- return static_prio_timeslice(p->static_prio); +-} ++ /* ++ * The bitmap of priorities queued for this array. While the expired ++ * array will never have realtime tasks on it, it is simpler to have ++ * equal sized bitmaps for a cheap array swap. Include 1 bit for ++ * delimiter. ++ */ ++ DECLARE_BITMAP(prio_bitmap, MAX_PRIO + 1); + +-/* +- * These are the runqueue data structures: +- */ ++ /* ++ * The best static priority (of the dynamic priority tasks) queued ++ * this array. ++ */ ++ int best_static_prio; + +-struct prio_array { +- unsigned int nr_active; +- DECLARE_BITMAP(bitmap, MAX_PRIO+1); /* include 1 bit for delimiter */ +- struct list_head queue[MAX_PRIO]; ++#ifdef CONFIG_SMP ++ /* For convenience looks back at rq */ ++ struct rq *rq; ++#endif + }; + + /* +@@ -260,14 +200,28 @@ + */ + unsigned long nr_uninterruptible; + +- unsigned long expired_timestamp; + /* Cached timestamp set by update_cpu_clock() */ + unsigned long long most_recent_timestamp; + struct task_struct *curr, *idle; + unsigned long next_balance; + struct mm_struct *prev_mm; +- struct prio_array *active, *expired, arrays[2]; +- int best_expired_prio; ++ ++ struct prio_array *active, *expired, *idleprio, arrays[2]; ++ unsigned long *dyn_bitmap, *exp_bitmap; ++ ++ /* ++ * The current dynamic priority level this runqueue is at per static ++ * priority level. ++ */ ++ int prio_level[PRIO_RANGE]; ++ ++ /* How many times we have rotated the priority queue */ ++ unsigned long prio_rotation; ++ unsigned long iso_ticks; ++ unsigned short iso_refractory; ++ ++ /* Number of idleprio tasks running */ ++ unsigned long nr_idleprio; + atomic_t nr_iowait; + + #ifdef CONFIG_SMP +@@ -606,12 +560,9 @@ + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + /* + * Called when a process is dequeued from the active array and given +- * the cpu. We should note that with the exception of interactive +- * tasks, the expired queue will become the active queue after the active +- * queue is empty, without explicitly dequeuing and requeuing tasks in the +- * expired queue. (Interactive tasks may be requeued directly to the +- * active queue, thus delaying tasks in the expired queue from running; +- * see scheduler_tick()). ++ * the cpu. We should note that the expired queue will become the active ++ * queue after the active queue is empty, without explicitly dequeuing and ++ * requeuing tasks in the expired queue. + * + * This function is only called from sched_info_arrive(), rather than + * dequeue_task(). Even though a task may be queued and dequeued multiple +@@ -709,71 +660,304 @@ + #define sched_info_switch(t, next) do { } while (0) + #endif /* CONFIG_SCHEDSTATS || CONFIG_TASK_DELAY_ACCT */ + ++static int idleprio_suitable(struct task_struct *p) ++{ ++ return (!p->mutexes_held && !freezing(p) && !signal_pending(p) && ++ !(p->flags & (PF_NONSLEEP | PF_EXITING))); ++} ++ ++static int idleprio(const struct task_struct *p) ++{ ++ return (p->prio == MAX_PRIO); ++} ++ ++static inline int task_queued(struct task_struct *task) ++{ ++ return !list_empty(&task->run_list); ++} ++ ++static inline void set_dynamic_bit(struct task_struct *p, struct rq *rq) ++{ ++ __set_bit(p->prio, p->array->prio_bitmap); ++} ++ + /* +- * Adding/removing a task to/from a priority array: ++ * Removing from a runqueue. + */ +-static void dequeue_task(struct task_struct *p, struct prio_array *array) ++static void dequeue_task(struct task_struct *p, struct rq *rq) + { +- array->nr_active--; +- list_del(&p->run_list); +- if (list_empty(array->queue + p->prio)) +- __clear_bit(p->prio, array->bitmap); ++ list_del_init(&p->run_list); ++ if (idleprio_task(p) && idleprio(p)) ++ rq->nr_idleprio--; ++ else if (list_empty(p->array->queue + p->prio)) ++ __clear_bit(p->prio, p->array->prio_bitmap); + } + +-static void enqueue_task(struct task_struct *p, struct prio_array *array) ++static void reset_first_time_slice(struct task_struct *p) + { +- sched_info_queued(p); +- list_add_tail(&p->run_list, array->queue + p->prio); +- __set_bit(p->prio, array->bitmap); +- array->nr_active++; ++ if (unlikely(p->first_time_slice)) ++ p->first_time_slice = 0; ++} ++ ++/* ++ * The task is being queued on a fresh array so it has its entitlement ++ * bitmap cleared. ++ */ ++static void task_new_array(struct task_struct *p, struct rq *rq, ++ struct prio_array *array) ++{ ++ bitmap_zero(p->bitmap, PRIO_RANGE); ++ p->rotation = rq->prio_rotation; ++ p->time_slice = p->quota; + p->array = array; ++ reset_first_time_slice(p); ++} ++ ++/* Find the first slot from the relevant prio_matrix entry */ ++static int first_prio_slot(struct task_struct *p) ++{ ++ if (unlikely(p->policy == SCHED_BATCH)) ++ return p->static_prio; ++ return SCHED_PRIO(find_first_zero_bit( ++ prio_matrix[USER_PRIO(p->static_prio)], PRIO_RANGE)); + } + + /* +- * Put task to the end of the run list without the overhead of dequeue +- * followed by enqueue. ++ * In sched_interactive mode priority allocation occurs per process per rq ++ * array swap. In !sched_interactive mode all waking tasks must obey the ++ * current prio level of all other tasks running per array swap. + */ +-static void requeue_task(struct task_struct *p, struct prio_array *array) ++static int minprio(struct rq *rq, int uprio) + { +- list_move_tail(&p->run_list, array->queue + p->prio); ++ if (sched_interactive) ++ return MAX_RT_PRIO; ++ return rq->prio_level[uprio]; + } + +-static inline void +-enqueue_task_head(struct task_struct *p, struct prio_array *array) ++/* ++ * Find the first unused slot by this task that is also in its prio_matrix ++ * level. SCHED_BATCH tasks do not use the priority matrix. They only take ++ * priority slots from their static_prio and above. ++ */ ++static int next_entitled_slot(struct task_struct *p, struct rq *rq) + { +- list_add(&p->run_list, array->queue + p->prio); +- __set_bit(p->prio, array->bitmap); +- array->nr_active++; +- p->array = array; ++ int search_prio = MAX_RT_PRIO, uprio = USER_PRIO(p->static_prio); ++ struct prio_array *array = rq->active; ++ DECLARE_BITMAP(tmp, PRIO_RANGE); ++ ++ /* ++ * Go straight to expiration if there are higher priority tasks ++ * already expired. ++ */ ++ if (p->static_prio > rq->expired->best_static_prio) ++ return MAX_PRIO; ++ if (!rq->prio_level[uprio]) ++ rq->prio_level[uprio] = MAX_RT_PRIO; ++ /* ++ * Only priorities equal to the prio_level and above for their ++ * static_prio are acceptable, and only if it's not better than ++ * a queued better static_prio's prio_level. ++ */ ++ if (p->static_prio < array->best_static_prio) { ++ if (likely(p->policy != SCHED_BATCH)) ++ array->best_static_prio = p->static_prio; ++ } else if (p->static_prio == array->best_static_prio) { ++ search_prio = minprio(rq, uprio); ++ } else { ++ int i; ++ ++ search_prio = minprio(rq, uprio); ++ /* A bound O(n) function, worst case n is 40 */ ++ for (i = array->best_static_prio; i <= p->static_prio ; i++) { ++ if (!rq->prio_level[USER_PRIO(i)]) ++ rq->prio_level[USER_PRIO(i)] = MAX_RT_PRIO; ++ search_prio = max(search_prio, ++ rq->prio_level[USER_PRIO(i)]); ++ } ++ } ++ if (unlikely(p->policy == SCHED_BATCH)) { ++ search_prio = max(search_prio, p->static_prio); ++ return SCHED_PRIO(find_next_zero_bit(p->bitmap, PRIO_RANGE, ++ USER_PRIO(search_prio))); ++ } ++ bitmap_or(tmp, p->bitmap, prio_matrix[uprio], PRIO_RANGE); ++ return SCHED_PRIO(find_next_zero_bit(tmp, PRIO_RANGE, ++ USER_PRIO(search_prio))); ++} ++ ++static void queue_expired(struct task_struct *p, struct rq *rq) ++{ ++ task_new_array(p, rq, rq->expired); ++ p->prio = p->normal_prio = first_prio_slot(p); ++ if (p->static_prio < rq->expired->best_static_prio) ++ rq->expired->best_static_prio = p->static_prio; ++ reset_first_time_slice(p); + } + ++#ifdef CONFIG_SMP + /* +- * __normal_prio - return the priority that is based on the static +- * priority but is modified by bonuses/penalties. +- * +- * We scale the actual sleep average [0 .... MAX_SLEEP_AVG] +- * into the -5 ... 0 ... +5 bonus/penalty range. +- * +- * We use 25% of the full 0...39 priority range so that: +- * +- * 1) nice +19 interactive tasks do not preempt nice 0 CPU hogs. +- * 2) nice -20 CPU hogs do not get preempted by nice 0 tasks. +- * +- * Both properties are important to certain workloads. ++ * If we're waking up a task that was previously on a different runqueue, ++ * update its data appropriately. Note we may be reading data from src_rq-> ++ * outside of lock, but the occasional inaccurate result should be harmless. + */ ++ static void update_if_moved(struct task_struct *p, struct rq *rq) ++{ ++ struct rq *src_rq = p->array->rq; ++ ++ if (src_rq == rq) ++ return; ++ /* ++ * Only need to set p->array when p->rotation == rq->prio_rotation as ++ * they will be set in recalc_task_prio when != rq->prio_rotation. ++ */ ++ if (p->rotation == src_rq->prio_rotation) { ++ p->rotation = rq->prio_rotation; ++ if (p->array == src_rq->expired) ++ p->array = rq->expired; ++ else ++ p->array = rq->active; ++ } else ++ p->rotation = 0; ++} ++#else ++static inline void update_if_moved(struct task_struct *p, struct rq *rq) ++{ ++} ++#endif + +-static inline int __normal_prio(struct task_struct *p) ++static inline int isoprio_suitable(struct task_struct *p) + { +- int bonus, prio; ++ return !(p->flags & PF_ISOREF); ++} + +- bonus = CURRENT_BONUS(p) - MAX_BONUS / 2; ++static int task_timeslice(struct task_struct *p); + +- prio = p->static_prio - bonus; +- if (prio < MAX_RT_PRIO) +- prio = MAX_RT_PRIO; +- if (prio > MAX_PRIO-1) +- prio = MAX_PRIO-1; +- return prio; ++/* ++ * recalc_task_prio determines what priority a non rt_task will be ++ * queued at. If the task has already been running during this runqueue's ++ * major rotation (rq->prio_rotation) then it continues at the same ++ * priority if it has tick entitlement left. If it does not have entitlement ++ * left, it finds the next priority slot according to its nice value that it ++ * has not extracted quota from. If it has not run during this major ++ * rotation, it starts at the next_entitled_slot and has its bitmap quota ++ * cleared. If it does not have any slots left it has all its slots reset and ++ * is queued on the expired at its first_prio_slot. ++ */ ++static void recalc_task_prio(struct task_struct *p, struct rq *rq) ++{ ++ struct prio_array *array = rq->active; ++ int queue_prio; ++ ++ if (iso_task(p)) { ++ if (isoprio_suitable(p)) { ++ /* ++ * If SCHED_ISO tasks have not used up their real time ++ * quota they have run just better than highest ++ * SCHED_NORMAL priority. Otherwise they run as ++ * SCHED_NORMAL. ++ */ ++ p->prio = p->normal_prio = ISO_PRIO; ++ p->array = rq->active; ++ if (p->time_slice <= 0) ++ p->time_slice = p->quota; ++ return; ++ } else if (p->prio == ISO_PRIO) { ++ /* Just about to be demoted to SCHED_NORMAL */ ++ p->time_slice = 0; ++ } ++ } else if (idleprio_task(p)) { ++ if (idleprio_suitable(p)) { ++ /* ++ * If suitable idleprio_tasks are queued at MAX_PRIO ++ * only on the idleprio array. Their time_slice is ++ * their full task_timeslice as they cooperatively ++ * multitask. ++ */ ++ p->prio = p->normal_prio = MAX_PRIO; ++ p->array = rq->idleprio; ++ if (p->time_slice <= 0) ++ p->time_slice = task_timeslice(p); ++ return; ++ } ++ /* ++ * If unsuitable idleprio_tasks are queued equivalent to ++ * nice 19 tasks on the expired array. ++ */ ++ p->flags &= ~PF_NONSLEEP; ++ p->prio = p->normal_prio = MAX_PRIO - 1; ++ p->array = rq->expired; ++ if (p->time_slice <= 0 || p->time_slice > p->quota) ++ p->time_slice = p->quota; ++ return; ++ } ++ ++ update_if_moved(p, rq); ++ if (p->rotation == rq->prio_rotation) { ++ if (p->array == array) { ++ if (p->time_slice > 0) ++ return; ++ p->time_slice = p->quota; ++ } else if (p->array == rq->expired) { ++ queue_expired(p, rq); ++ return; ++ } else ++ task_new_array(p, rq, array); ++ } else ++ task_new_array(p, rq, array); ++ ++ queue_prio = next_entitled_slot(p, rq); ++ if (queue_prio >= MAX_PRIO) { ++ queue_expired(p, rq); ++ return; ++ } ++ p->prio = p->normal_prio = queue_prio; ++ __set_bit(USER_PRIO(p->prio), p->bitmap); ++} ++ ++/* ++ * Adding to a runqueue. The dynamic priority queue that it is added to is ++ * determined by recalc_task_prio() above. ++ */ ++static inline void __enqueue_task(struct task_struct *p, struct rq *rq) ++{ ++ if (rt_task(p)) ++ p->array = rq->active; ++ else ++ recalc_task_prio(p, rq); ++ ++ if (idleprio_task(p) && idleprio(p)) ++ rq->nr_idleprio++; ++ sched_info_queued(p); ++ set_dynamic_bit(p, rq); ++} ++ ++static void enqueue_task(struct task_struct *p, struct rq *rq) ++{ ++ __enqueue_task(p, rq); ++ list_add_tail(&p->run_list, p->array->queue + p->prio); ++} ++ ++static inline void enqueue_task_head(struct task_struct *p, struct rq *rq) ++{ ++ __enqueue_task(p, rq); ++ list_add(&p->run_list, p->array->queue + p->prio); ++} ++ ++/* ++ * requeue_task is only called when p->static_prio does not change. p->prio ++ * can change with dynamic tasks. ++ */ ++static void requeue_task(struct task_struct *p, struct rq *rq, ++ struct prio_array *old_array, int old_prio) ++{ ++ if (p->array == rq->expired) ++ queue_expired(p, rq); ++ list_move_tail(&p->run_list, p->array->queue + p->prio); ++ if (!rt_task(p)) { ++ if (list_empty(old_array->queue + old_prio)) ++ __clear_bit(old_prio, old_array->prio_bitmap); ++ set_dynamic_bit(p, rq); ++ } + } + + /* +@@ -786,20 +970,29 @@ + */ + + /* +- * Assume: static_prio_timeslice(NICE_TO_PRIO(0)) == DEF_TIMESLICE +- * If static_prio_timeslice() is ever changed to break this assumption then +- * this code will need modification +- */ +-#define TIME_SLICE_NICE_ZERO DEF_TIMESLICE +-#define LOAD_WEIGHT(lp) \ +- (((lp) * SCHED_LOAD_SCALE) / TIME_SLICE_NICE_ZERO) +-#define PRIO_TO_LOAD_WEIGHT(prio) \ +- LOAD_WEIGHT(static_prio_timeslice(prio)) +-#define RTPRIO_TO_LOAD_WEIGHT(rp) \ +- (PRIO_TO_LOAD_WEIGHT(MAX_RT_PRIO) + LOAD_WEIGHT(rp)) ++ * task_timeslice - the total duration a task can run during one major ++ * rotation. Returns value in milliseconds as the smallest value can be 1. ++ */ ++static int task_timeslice(struct task_struct *p) ++{ ++ int slice = p->quota; /* quota is in us */ ++ ++ if (!rt_task(p)) ++ slice += (PRIO_RANGE - 1 - TASK_USER_PRIO(p)) * slice; ++ return US_TO_MS(slice); ++} ++ ++/* ++ * The load weight is basically the task_timeslice in ms. Realtime tasks are ++ * special cased to be proportionately larger than nice -20 by their ++ * rt_priority. The weight for rt tasks can only be arbitrary at best. ++ */ ++#define RTPRIO_TO_LOAD_WEIGHT(rp) (rr_interval * 20 * (40 + rp)) + + static void set_load_weight(struct task_struct *p) + { ++ int load_weight; ++ + if (has_rt_policy(p)) { + #ifdef CONFIG_SMP + if (p == task_rq(p)->migration_thread) +@@ -808,12 +1001,19 @@ + * Giving its load any weight will skew balancing + * adversely. + */ +- p->load_weight = 0; ++ load_weight = 0; + else + #endif +- p->load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority); ++ load_weight = RTPRIO_TO_LOAD_WEIGHT(p->rt_priority); + } else +- p->load_weight = PRIO_TO_LOAD_WEIGHT(p->static_prio); ++ load_weight = task_timeslice(p); ++ /* ++ * idleprio tasks have much lower weight than SCHED_NORMAL tasks but ++ * still need to be weighted to allow balancing to occur. ++ */ ++ if (likely(!idleprio_task(p))) ++ load_weight *= PRIO_RANGE; ++ p->load_weight = load_weight; + } + + static inline void +@@ -841,28 +1041,38 @@ + } + + /* +- * Calculate the expected normal priority: i.e. priority +- * without taking RT-inheritance into account. Might be +- * boosted by interactivity modifiers. Changes upon fork, +- * setprio syscalls, and whenever the interactivity +- * estimator recalculates. ++ * __activate_task - move a task to the runqueue. + */ +-static inline int normal_prio(struct task_struct *p) ++static inline void __activate_task(struct task_struct *p, struct rq *rq) + { +- int prio; ++ enqueue_task(p, rq); ++ inc_nr_running(p, rq); ++} + ++/* ++ * __activate_idle_task - move idle task to the _front_ of runqueue. ++ */ ++static inline void __activate_idle_task(struct task_struct *p, struct rq *rq) ++{ ++ enqueue_task_head(p, rq); ++ inc_nr_running(p, rq); ++} ++ ++static inline int normal_prio(struct task_struct *p) ++{ + if (has_rt_policy(p)) +- prio = MAX_RT_PRIO-1 - p->rt_priority; ++ return MAX_RT_PRIO-1 - p->rt_priority; ++ /* Other tasks all have normal_prio set in recalc_task_prio */ ++ if (likely(p->prio >= MAX_RT_PRIO && p->prio < MAX_PRIO)) ++ return p->prio; + else +- prio = __normal_prio(p); +- return prio; ++ return p->static_prio; + } + + /* + * Calculate the current priority, i.e. the priority + * taken into account by the scheduler. This value might +- * be boosted by RT tasks, or might be boosted by +- * interactivity modifiers. Will be RT if the task got ++ * be boosted by RT tasks as it will be RT if the task got + * RT-boosted. If not then it returns p->normal_prio. + */ + static int effective_prio(struct task_struct *p) +@@ -878,112 +1088,70 @@ + return p->prio; + } + +-/* +- * __activate_task - move a task to the runqueue. +- */ +-static void __activate_task(struct task_struct *p, struct rq *rq) ++static inline unsigned int nice_quota_ms(int nice) + { +- struct prio_array *target = rq->active; ++ unsigned int rr = rr_interval; + +- if (batch_task(p)) +- target = rq->expired; +- enqueue_task(p, target); +- inc_nr_running(p, rq); ++ if (nice < -6) { ++ rr *= nice * nice; ++ rr /= 40; ++ } else if (nice > 0) ++ rr = rr / 2 ? : 1; ++ return rr; + } + ++#define DEFAULT_WEIGHT (nice_quota_ms(0) * 20 * PRIO_RANGE) ++ + /* +- * __activate_idle_task - move idle task to the _front_ of runqueue. ++ * A runqueue laden with a single nice 0 task scores a weighted_cpuload of ++ * SCHED_LOAD_SCALE. This function returns 1 if any cpu is laden with a ++ * task of nice 0 or enough lower priority tasks to bring up the ++ * weighted_cpuload + */ +-static inline void __activate_idle_task(struct task_struct *p, struct rq *rq) ++int above_background_load(void) + { +- enqueue_task_head(p, rq->active); +- inc_nr_running(p, rq); ++ unsigned long cpu; ++ ++ for_each_online_cpu(cpu) { ++ if (weighted_cpuload(cpu) >= DEFAULT_WEIGHT) ++ return 1; ++ } ++ return 0; + } + + /* +- * Recalculate p->normal_prio and p->prio after having slept, +- * updating the sleep-average too: ++ * All tasks have quotas based on rr_interval. RT tasks all get rr_interval. ++ * From nice 1 to 19 they are smaller than it only if they are at least one ++ * tick still. Below nice 0 they get progressively larger. ++ * ie nice -6..0 = rr_interval. nice -10 = 2.5 * rr_interval ++ * nice -20 = 10 * rr_interval. nice 1-19 = rr_interval / 2. ++ * Value returned is in microseconds. + */ +-static int recalc_task_prio(struct task_struct *p, unsigned long long now) ++static inline unsigned int rr_quota(struct task_struct *p) + { +- /* Caller must always ensure 'now >= p->timestamp' */ +- unsigned long sleep_time = now - p->timestamp; ++ unsigned int quota; + +- if (batch_task(p)) +- sleep_time = 0; +- +- if (likely(sleep_time > 0)) { +- /* +- * This ceiling is set to the lowest priority that would allow +- * a task to be reinserted into the active array on timeslice +- * completion. +- */ +- unsigned long ceiling = INTERACTIVE_SLEEP(p); +- +- if (p->mm && sleep_time > ceiling && p->sleep_avg < ceiling) { +- /* +- * Prevents user tasks from achieving best priority +- * with one single large enough sleep. +- */ +- p->sleep_avg = ceiling; +- /* +- * Using INTERACTIVE_SLEEP() as a ceiling places a +- * nice(0) task 1ms sleep away from promotion, and +- * gives it 700ms to round-robin with no chance of +- * being demoted. This is more than generous, so +- * mark this sleep as non-interactive to prevent the +- * on-runqueue bonus logic from intervening should +- * this task not receive cpu immediately. +- */ +- p->sleep_type = SLEEP_NONINTERACTIVE; +- } else { +- /* +- * Tasks waking from uninterruptible sleep are +- * limited in their sleep_avg rise as they +- * are likely to be waiting on I/O +- */ +- if (p->sleep_type == SLEEP_NONINTERACTIVE && p->mm) { +- if (p->sleep_avg >= ceiling) +- sleep_time = 0; +- else if (p->sleep_avg + sleep_time >= +- ceiling) { +- p->sleep_avg = ceiling; +- sleep_time = 0; +- } +- } +- +- /* +- * This code gives a bonus to interactive tasks. +- * +- * The boost works by updating the 'average sleep time' +- * value here, based on ->timestamp. The more time a +- * task spends sleeping, the higher the average gets - +- * and the higher the priority boost gets as well. +- */ +- p->sleep_avg += sleep_time; +- +- } +- if (p->sleep_avg > NS_MAX_SLEEP_AVG) +- p->sleep_avg = NS_MAX_SLEEP_AVG; +- } ++ if (rt_task(p)) ++ quota = rr_interval; ++ else ++ quota = nice_quota_ms(TASK_NICE(p)); ++ return MS_TO_US(quota); ++} + +- return effective_prio(p); ++/* Every time we set the quota we need to set the load weight */ ++static void set_quota(struct task_struct *p) ++{ ++ p->quota = rr_quota(p); ++ set_load_weight(p); + } + + /* + * activate_task - move a task to the runqueue and do priority recalculation +- * +- * Update all the scheduling statistics stuff. (sleep average +- * calculation, priority modifiers, etc.) + */ + static void activate_task(struct task_struct *p, struct rq *rq, int local) + { +- unsigned long long now; +- +- if (rt_task(p)) +- goto out; ++ unsigned long long now = sched_clock(); + +- now = sched_clock(); + #ifdef CONFIG_SMP + if (!local) { + /* Compensate for drifting sched_clock */ +@@ -1004,32 +1172,9 @@ + (now - p->timestamp) >> 20); + } + +- p->prio = recalc_task_prio(p, now); +- +- /* +- * This checks to make sure it's not an uninterruptible task +- * that is now waking up. +- */ +- if (p->sleep_type == SLEEP_NORMAL) { +- /* +- * Tasks which were woken up by interrupts (ie. hw events) +- * are most likely of interactive nature. So we give them +- * the credit of extending their sleep time to the period +- * of time they spend on the runqueue, waiting for execution +- * on a CPU, first time around: +- */ +- if (in_interrupt()) +- p->sleep_type = SLEEP_INTERRUPTED; +- else { +- /* +- * Normal first-time wakeups get a credit too for +- * on-runqueue time, but it will be weighted down: +- */ +- p->sleep_type = SLEEP_INTERACTIVE; +- } +- } ++ set_quota(p); ++ p->prio = effective_prio(p); + p->timestamp = now; +-out: + __activate_task(p, rq); + } + +@@ -1039,8 +1184,7 @@ + static void deactivate_task(struct task_struct *p, struct rq *rq) + { + dec_nr_running(p, rq); +- dequeue_task(p, p->array); +- p->array = NULL; ++ dequeue_task(p, rq); + } + + /* +@@ -1133,7 +1277,7 @@ + * If the task is not on a runqueue (and not running), then + * it is sufficient to simply update the task's cpu field. + */ +- if (!p->array && !task_running(rq, p)) { ++ if (!task_queued(p) && !task_running(rq, p)) { + set_task_cpu(p, dest_cpu); + return 0; + } +@@ -1159,7 +1303,6 @@ + { + unsigned long flags; + struct rq *rq; +- struct prio_array *array; + int running; + + repeat: +@@ -1192,7 +1335,6 @@ + */ + rq = task_rq_lock(p, &flags); + running = task_running(rq, p); +- array = p->array; + task_rq_unlock(rq, &flags); + + /* +@@ -1215,7 +1357,7 @@ + * running right now), it's preempted, and we should + * yield - it could be a while. + */ +- if (unlikely(array)) { ++ if (unlikely(task_queued(p))) { + yield(); + goto repeat; + } +@@ -1294,6 +1436,25 @@ + } + + /* ++ * Divide a load by a sched group cpu_power : (load / sg->__cpu_power) ++ * Since cpu_power is a 'constant', we can use a reciprocal divide. ++ */ ++static inline u32 sg_div_cpu_power(const struct sched_group *sg, u32 load) ++{ ++ return reciprocal_divide(load, sg->reciprocal_cpu_power); ++} ++ ++/* ++ * Each time a sched group cpu_power is changed, ++ * we must compute its reciprocal value ++ */ ++static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val) ++{ ++ sg->__cpu_power += val; ++ sg->reciprocal_cpu_power = reciprocal_value(sg->__cpu_power); ++} ++ ++/* + * find_idlest_group finds and returns the least busy CPU group within the + * domain. + */ +@@ -1490,6 +1651,31 @@ + } + #endif + ++/* ++ * We need to have a special definition for an idle runqueue when testing ++ * for preemption on CONFIG_HOTPLUG_CPU as the idle task may be scheduled as ++ * a realtime task in sched_idle_next. ++ */ ++#ifdef CONFIG_HOTPLUG_CPU ++#define rq_idle(rq) ((rq)->curr == (rq)->idle && !rt_task((rq)->curr)) ++#else ++#define rq_idle(rq) ((rq)->curr == (rq)->idle) ++#endif ++ ++static inline int task_preempts_curr(struct task_struct *p, struct rq *rq) ++{ ++ struct task_struct *curr = rq->curr; ++ ++ return ((p->array == task_rq(p)->active && ++ TASK_PREEMPTS_CURR(p, curr)) || rq_idle(rq)); ++} ++ ++static inline void try_preempt(struct task_struct *p, struct rq *rq) ++{ ++ if (task_preempts_curr(p, rq)) ++ resched_task(rq->curr); ++} ++ + /*** + * try_to_wake_up - wake up a thread + * @p: the to-be-woken-up thread +@@ -1521,7 +1707,7 @@ + if (!(old_state & state)) + goto out; + +- if (p->array) ++ if (task_queued(p)) + goto out_running; + + cpu = task_cpu(p); +@@ -1614,7 +1800,7 @@ + old_state = p->state; + if (!(old_state & state)) + goto out; +- if (p->array) ++ if (task_queued(p)) + goto out_running; + + this_cpu = smp_processor_id(); +@@ -1623,25 +1809,9 @@ + + out_activate: + #endif /* CONFIG_SMP */ +- if (old_state == TASK_UNINTERRUPTIBLE) { ++ if (old_state == TASK_UNINTERRUPTIBLE) + rq->nr_uninterruptible--; +- /* +- * Tasks on involuntary sleep don't earn +- * sleep_avg beyond just interactive state. +- */ +- p->sleep_type = SLEEP_NONINTERACTIVE; +- } else +- +- /* +- * Tasks that have marked their sleep as noninteractive get +- * woken up with their sleep average not weighted in an +- * interactive way. +- */ +- if (old_state & TASK_NONINTERACTIVE) +- p->sleep_type = SLEEP_NONINTERACTIVE; +- + +- activate_task(p, rq, cpu == this_cpu); + /* + * Sync wakeups (i.e. those types of wakeups where the waker + * has indicated that it will leave the CPU in short order) +@@ -1650,15 +1820,22 @@ + * the waker guarantees that the freshly woken up task is going + * to be considered on this CPU.) + */ +- if (!sync || cpu != this_cpu) { +- if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); +- } ++ activate_task(p, rq, cpu == this_cpu); ++ if (!sync || cpu != this_cpu) ++ try_preempt(p, rq); + success = 1; + + out_running: + p->state = TASK_RUNNING; + out: ++ /* ++ * Special case when freezing we need to reschedule idleprio tasks ++ * as SCHED_NORMAL or else they'll never freeze ++ */ ++ if (idleprio_task(p) && freezing(p) && idleprio(p)) { ++ dequeue_task(p, rq); ++ enqueue_task(p, rq); ++ } + task_rq_unlock(rq, &flags); + + return success; +@@ -1676,7 +1853,6 @@ + return try_to_wake_up(p, state, 0); + } + +-static void task_running_tick(struct rq *rq, struct task_struct *p); + /* + * Perform scheduler related setup for a newly forked process p. + * p is forked by current. +@@ -1704,7 +1880,6 @@ + p->prio = current->normal_prio; + + INIT_LIST_HEAD(&p->run_list); +- p->array = NULL; + #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) + if (unlikely(sched_info_on())) + memset(&p->sched_info, 0, sizeof(p->sched_info)); +@@ -1716,30 +1891,31 @@ + /* Want to start with kernel preemption disabled. */ + task_thread_info(p)->preempt_count = 1; + #endif ++ if (unlikely(p->policy == SCHED_FIFO)) ++ goto out; + /* + * Share the timeslice between parent and child, thus the + * total amount of pending timeslices in the system doesn't change, + * resulting in more scheduling fairness. + */ + local_irq_disable(); +- p->time_slice = (current->time_slice + 1) >> 1; +- /* +- * The remainder of the first timeslice might be recovered by +- * the parent if the child exits early enough. +- */ +- p->first_time_slice = 1; +- current->time_slice >>= 1; +- p->timestamp = sched_clock(); +- if (unlikely(!current->time_slice)) { ++ if (current->time_slice > 0) { ++ current->time_slice /= 2; ++ if (current->time_slice) ++ p->time_slice = current->time_slice; ++ else ++ p->time_slice = 1; + /* +- * This case is rare, it happens when the parent has only +- * a single jiffy left from its timeslice. Taking the +- * runqueue lock is not a problem. ++ * The remainder of the first timeslice might be recovered by ++ * the parent if the child exits early enough. + */ +- current->time_slice = 1; +- task_running_tick(cpu_rq(cpu), current); +- } ++ p->first_time_slice = 1; ++ } else ++ p->time_slice = 0; ++ ++ p->timestamp = sched_clock(); + local_irq_enable(); ++out: + put_cpu(); + } + +@@ -1761,38 +1937,16 @@ + this_cpu = smp_processor_id(); + cpu = task_cpu(p); + +- /* +- * We decrease the sleep average of forking parents +- * and children as well, to keep max-interactive tasks +- * from forking tasks that are max-interactive. The parent +- * (current) is done further down, under its lock. +- */ +- p->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(p) * +- CHILD_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); +- +- p->prio = effective_prio(p); +- + if (likely(cpu == this_cpu)) { ++ activate_task(p, rq, 1); + if (!(clone_flags & CLONE_VM)) { + /* + * The VM isn't cloned, so we're in a good position to + * do child-runs-first in anticipation of an exec. This + * usually avoids a lot of COW overhead. + */ +- if (unlikely(!current->array)) +- __activate_task(p, rq); +- else { +- p->prio = current->prio; +- p->normal_prio = current->normal_prio; +- list_add_tail(&p->run_list, ¤t->run_list); +- p->array = current->array; +- p->array->nr_active++; +- inc_nr_running(p, rq); +- } + set_need_resched(); +- } else +- /* Run child last */ +- __activate_task(p, rq); ++ } + /* + * We skip the following code due to cpu == this_cpu + * +@@ -1809,19 +1963,16 @@ + */ + p->timestamp = (p->timestamp - this_rq->most_recent_timestamp) + + rq->most_recent_timestamp; +- __activate_task(p, rq); +- if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ activate_task(p, rq, 0); ++ try_preempt(p, rq); + + /* + * Parent and child are on different CPUs, now get the +- * parent runqueue to update the parent's ->sleep_avg: ++ * parent runqueue to update the parent's ->flags: + */ + task_rq_unlock(rq, &flags); + this_rq = task_rq_lock(current, &flags); + } +- current->sleep_avg = JIFFIES_TO_NS(CURRENT_BONUS(current) * +- PARENT_PENALTY / 100 * MAX_SLEEP_AVG / MAX_BONUS); + task_rq_unlock(this_rq, &flags); + } + +@@ -1836,23 +1987,17 @@ + */ + void fastcall sched_exit(struct task_struct *p) + { ++ struct task_struct *parent; + unsigned long flags; + struct rq *rq; + +- /* +- * If the child was a (relative-) CPU hog then decrease +- * the sleep_avg of the parent as well. +- */ +- rq = task_rq_lock(p->parent, &flags); +- if (p->first_time_slice && task_cpu(p) == task_cpu(p->parent)) { +- p->parent->time_slice += p->time_slice; +- if (unlikely(p->parent->time_slice > task_timeslice(p))) +- p->parent->time_slice = task_timeslice(p); +- } +- if (p->sleep_avg < p->parent->sleep_avg) +- p->parent->sleep_avg = p->parent->sleep_avg / +- (EXIT_WEIGHT + 1) * EXIT_WEIGHT + p->sleep_avg / +- (EXIT_WEIGHT + 1); ++ parent = p->parent; ++ rq = task_rq_lock(parent, &flags); ++ if (p->first_time_slice > 0 && task_cpu(p) == task_cpu(parent)) { ++ parent->time_slice += p->time_slice; ++ if (unlikely(parent->time_slice > parent->quota)) ++ parent->time_slice = parent->quota; ++ } + task_rq_unlock(rq, &flags); + } + +@@ -2184,23 +2329,17 @@ + * pull_task - move a task from a remote runqueue to the local runqueue. + * Both runqueues must be locked. + */ +-static void pull_task(struct rq *src_rq, struct prio_array *src_array, +- struct task_struct *p, struct rq *this_rq, +- struct prio_array *this_array, int this_cpu) ++static void pull_task(struct rq *src_rq, struct task_struct *p, ++ struct rq *this_rq, int this_cpu) + { +- dequeue_task(p, src_array); ++ dequeue_task(p, src_rq); + dec_nr_running(p, src_rq); + set_task_cpu(p, this_cpu); + inc_nr_running(p, this_rq); +- enqueue_task(p, this_array); ++ enqueue_task(p, this_rq); + p->timestamp = (p->timestamp - src_rq->most_recent_timestamp) + + this_rq->most_recent_timestamp; +- /* +- * Note that idle threads have a prio of MAX_PRIO, for this test +- * to be always true for them. +- */ +- if (TASK_PREEMPTS_CURR(p, this_rq)) +- resched_task(this_rq->curr); ++ try_preempt(p, this_rq); + } + + /* +@@ -2243,7 +2382,16 @@ + return 1; + } + +-#define rq_best_prio(rq) min((rq)->curr->prio, (rq)->best_expired_prio) ++static inline int rq_best_prio(struct rq *rq) ++{ ++ int best_prio, exp_prio; ++ ++ best_prio = sched_find_first_bit(rq->dyn_bitmap); ++ exp_prio = find_next_bit(rq->exp_bitmap, MAX_PRIO, MAX_RT_PRIO); ++ if (unlikely(best_prio > exp_prio)) ++ best_prio = exp_prio; ++ return best_prio; ++} + + /* + * move_tasks tries to move up to max_nr_move tasks and max_load_move weighted +@@ -2259,7 +2407,7 @@ + { + int idx, pulled = 0, pinned = 0, this_best_prio, best_prio, + best_prio_seen, skip_for_load; +- struct prio_array *array, *dst_array; ++ struct prio_array *array; + struct list_head *head, *curr; + struct task_struct *tmp; + long rem_load_move; +@@ -2286,31 +2434,29 @@ + * be cache-cold, thus switching CPUs has the least effect + * on them. + */ +- if (busiest->expired->nr_active) { +- array = busiest->expired; +- dst_array = this_rq->expired; +- } else { +- array = busiest->active; +- dst_array = this_rq->active; +- } +- ++ array = busiest->expired; + new_array: +- /* Start searching at priority 0: */ +- idx = 0; ++ /* Expired arrays don't have RT tasks so they're always MAX_RT_PRIO+ */ ++ if (array == busiest->expired) ++ idx = MAX_RT_PRIO; ++ else ++ idx = 0; + skip_bitmap: + if (!idx) +- idx = sched_find_first_bit(array->bitmap); ++ idx = sched_find_first_bit(array->prio_bitmap); + else +- idx = find_next_bit(array->bitmap, MAX_PRIO, idx); +- if (idx >= MAX_PRIO) { +- if (array == busiest->expired && busiest->active->nr_active) { ++ idx = find_next_bit(array->prio_bitmap, MAX_PRIO, idx); ++ if (idx == MAX_PRIO) { ++ if (array == busiest->idleprio && busiest->nr_idleprio) ++ goto found_idleprio; ++ if (array == busiest->expired) { + array = busiest->active; +- dst_array = this_rq->active; + goto new_array; + } + goto out; + } + ++found_idleprio: + head = array->queue + idx; + curr = head->prev; + skip_queue: +@@ -2332,11 +2478,22 @@ + best_prio_seen |= idx == best_prio; + if (curr != head) + goto skip_queue; ++ if (idx == MAX_PRIO) { ++ /* ++ * Occurs either when balancing idleprio tasks or ++ * there really are no more tasks to find. ++ */ ++ if (array == busiest->expired) { ++ array = busiest->active; ++ goto new_array; ++ } ++ goto out; ++ } + idx++; + goto skip_bitmap; + } + +- pull_task(busiest, array, tmp, this_rq, dst_array, this_cpu); ++ pull_task(busiest, tmp, this_rq, this_cpu); + pulled++; + rem_load_move -= tmp->load_weight; + +@@ -2349,6 +2506,13 @@ + this_best_prio = idx; + if (curr != head) + goto skip_queue; ++ if (idx == MAX_PRIO) { ++ if (array == busiest->expired) { ++ array = busiest->active; ++ goto new_array; ++ } ++ goto out; ++ } + idx++; + goto skip_bitmap; + } +@@ -3297,11 +3461,36 @@ + /* + * This is called on clock ticks and on context switches. + * Bank in p->sched_time the ns elapsed since the last tick or switch. ++ * CPU scheduler quota accounting is also performed here in microseconds. ++ * The value returned from sched_clock() occasionally gives bogus values so ++ * some sanity checking is required. + */ +-static inline void +-update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now) ++static void ++update_cpu_clock(struct task_struct *p, struct rq *rq, unsigned long long now, ++ int tick) + { +- p->sched_time += now - p->last_ran; ++ long time_diff = now - p->last_ran; ++ ++ if (tick) { ++ /* ++ * Called from scheduler_tick() there should be less than two ++ * jiffies worth, and not negative/overflow. ++ */ ++ if (time_diff > JIFFIES_TO_NS(2) || time_diff < 0) ++ time_diff = JIFFIES_TO_NS(1); ++ } else { ++ /* ++ * Called from context_switch there should be less than one ++ * jiffy worth, and not negative/overflow. There should be ++ * some time banked here so use a nominal 1us. ++ */ ++ if (time_diff > JIFFIES_TO_NS(1) || time_diff < 1) ++ time_diff = 1000; ++ } ++ /* time_slice accounting is done in usecs to avoid overflow on 32bit */ ++ if (p != rq->idle && p->policy != SCHED_FIFO) ++ p->time_slice -= time_diff / 1000; ++ p->sched_time += time_diff; + p->last_ran = rq->most_recent_timestamp = now; + } + +@@ -3322,27 +3511,6 @@ + } + + /* +- * We place interactive tasks back into the active array, if possible. +- * +- * To guarantee that this does not starve expired tasks we ignore the +- * interactivity of a task if the first expired task had to wait more +- * than a 'reasonable' amount of time. This deadline timeout is +- * load-dependent, as the frequency of array switched decreases with +- * increasing number of running tasks. We also ignore the interactivity +- * if a better static_prio task has expired: +- */ +-static inline int expired_starving(struct rq *rq) +-{ +- if (rq->curr->static_prio > rq->best_expired_prio) +- return 1; +- if (!STARVATION_LIMIT || !rq->expired_timestamp) +- return 0; +- if (jiffies - rq->expired_timestamp > STARVATION_LIMIT * rq->nr_running) +- return 1; +- return 0; +-} +- +-/* + * Account user cpu time to a process. + * @p: the process that the cpu time gets accounted to + * @hardirq_offset: the offset to subtract from hardirq_count() +@@ -3357,7 +3525,7 @@ + + /* Add user time to cpustat. */ + tmp = cputime_to_cputime64(cputime); +- if (TASK_NICE(p) > 0) ++ if (TASK_NICE(p) > 0 || idleprio_task(p)) + cpustat->nice = cputime64_add(cpustat->nice, tmp); + else + cpustat->user = cputime64_add(cpustat->user, tmp); +@@ -3415,87 +3583,94 @@ + cpustat->steal = cputime64_add(cpustat->steal, tmp); + } + +-static void task_running_tick(struct rq *rq, struct task_struct *p) ++/* ++ * The task has used up its quota of running in this prio_level so it must be ++ * dropped a priority level, all managed by recalc_task_prio(). ++ */ ++static void task_expired_entitlement(struct rq *rq, struct task_struct *p) + { +- if (p->array != rq->active) { +- /* Task has expired but was not scheduled yet */ +- set_tsk_need_resched(p); ++ int overrun; ++ ++ reset_first_time_slice(p); ++ if (rt_task(p)) { ++ p->time_slice += p->quota; ++ list_move_tail(&p->run_list, p->array->queue + p->prio); + return; + } +- spin_lock(&rq->lock); ++ overrun = p->time_slice; ++ dequeue_task(p, rq); ++ enqueue_task(p, rq); + /* +- * The task was running during this tick - update the +- * time slice counter. Note: we do not update a thread's +- * priority until it either goes to sleep or uses up its +- * timeslice. This makes it possible for interactive tasks +- * to use up their timeslices at their highest priority levels. ++ * Subtract any extra time this task ran over its time_slice; ie ++ * overrun will either be 0 or negative. + */ +- if (rt_task(p)) { +- /* +- * RR tasks need a special form of timeslice management. +- * FIFO tasks have no timeslices. +- */ +- if ((p->policy == SCHED_RR) && !--p->time_slice) { +- p->time_slice = task_timeslice(p); +- p->first_time_slice = 0; +- set_tsk_need_resched(p); ++ p->time_slice += overrun; ++} + +- /* put it at the end of the queue: */ +- requeue_task(p, rq->active); +- } +- goto out_unlock; ++/* ++ * Test if SCHED_ISO tasks have run longer than their alloted period as RT ++ * tasks and set the refractory flag if necessary. There is 10% hysteresis ++ * for unsetting the flag. ++ */ ++static unsigned int test_ret_isorefractory(struct rq *rq) ++{ ++ if (likely(!rq->iso_refractory)) { ++ if (rq->iso_ticks / ISO_PERIOD > sched_iso_cpu) ++ rq->iso_refractory = 1; ++ } else { ++ if (rq->iso_ticks / ISO_PERIOD < (sched_iso_cpu * 90 / 100)) ++ rq->iso_refractory = 0; + } +- if (!--p->time_slice) { +- dequeue_task(p, rq->active); +- set_tsk_need_resched(p); +- p->prio = effective_prio(p); +- p->time_slice = task_timeslice(p); +- p->first_time_slice = 0; ++ return rq->iso_refractory; ++} + +- if (!rq->expired_timestamp) +- rq->expired_timestamp = jiffies; +- if (!TASK_INTERACTIVE(p) || expired_starving(rq)) { +- enqueue_task(p, rq->expired); +- if (p->static_prio < rq->best_expired_prio) +- rq->best_expired_prio = p->static_prio; +- } else +- enqueue_task(p, rq->active); +- } else { +- /* +- * Prevent a too long timeslice allowing a task to monopolize +- * the CPU. We do this by splitting up the timeslice into +- * smaller pieces. +- * +- * Note: this does not mean the task's timeslices expire or +- * get lost in any way, they just might be preempted by +- * another task of equal priority. (one with higher +- * priority would have preempted this task already.) We +- * requeue this task to the end of the list on this priority +- * level, which is in essence a round-robin of tasks with +- * equal priority. +- * +- * This only applies to tasks in the interactive +- * delta range with at least TIMESLICE_GRANULARITY to requeue. +- */ +- if (TASK_INTERACTIVE(p) && !((task_timeslice(p) - +- p->time_slice) % TIMESLICE_GRANULARITY(p)) && +- (p->time_slice >= TIMESLICE_GRANULARITY(p)) && +- (p->array == rq->active)) { ++/* No SCHED_ISO task was running so decrease rq->iso_ticks */ ++static inline void no_iso_tick(struct rq *rq) ++{ ++ rq->iso_ticks = rq->iso_ticks * (ISO_PERIOD - 1) / ISO_PERIOD; ++} + +- requeue_task(p, rq->active); +- set_tsk_need_resched(p); +- } ++/* This manages tasks that have run out of timeslice during a scheduler_tick */ ++static void task_running_tick(struct rq *rq, struct task_struct *p) ++{ ++ /* ++ * If a SCHED_ISO task is running we increment the iso_ticks. In ++ * order to prevent SCHED_ISO tasks from causing starvation in the ++ * presence of true RT tasks we account those as iso_ticks as well. ++ */ ++ if ((rt_task(p) || (iso_task(p) && !rq->iso_refractory))) { ++ if (rq->iso_ticks <= (ISO_PERIOD * 100) - 100) ++ rq->iso_ticks += 100; ++ } else ++ no_iso_tick(rq); ++ ++ if (iso_task(p)) { ++ if (unlikely(test_ret_isorefractory(rq))) { ++ if (isoprio_suitable(p)) { ++ /* ++ * SCHED_ISO task is running as RT and limit ++ * has been hit. Set the PF_ISOREF flag and ++ * force it to reschedule as SCHED_NORMAL ++ * by zeroing its time_slice ++ */ ++ p->flags |= PF_ISOREF; ++ p->time_slice = 0; ++ } ++ } else ++ p->flags &= ~PF_ISOREF; + } +-out_unlock: +- spin_unlock(&rq->lock); ++ /* SCHED_FIFO tasks never run out of timeslice. */ ++ if (p->time_slice > 0 || p->policy == SCHED_FIFO) ++ return; ++ /* p->time_slice <= 0 */ ++ set_tsk_need_resched(p); ++ if (likely(task_queued(p))) ++ task_expired_entitlement(rq, p); + } + + /* + * This function gets called by the timer code, with HZ frequency. + * We call it with interrupts disabled. +- * +- * It also gets called by the fork code, when changing the parent's +- * timeslices. + */ + void scheduler_tick(void) + { +@@ -3505,10 +3680,14 @@ + int idle_at_tick = idle_cpu(cpu); + struct rq *rq = cpu_rq(cpu); + +- update_cpu_clock(p, rq, now); ++ update_cpu_clock(p, rq, now, 1); + ++ spin_lock(&rq->lock); + if (!idle_at_tick) + task_running_tick(rq, p); ++ else ++ no_iso_tick(rq); ++ spin_unlock(&rq->lock); + #ifdef CONFIG_SMP + update_load(rq); + rq->idle_at_tick = idle_at_tick; +@@ -3554,10 +3733,80 @@ + + #endif + +-static inline int interactive_sleep(enum sleep_type sleep_type) ++static void reset_prio_levels(struct rq *rq) + { +- return (sleep_type == SLEEP_INTERACTIVE || +- sleep_type == SLEEP_INTERRUPTED); ++ rq->active->best_static_prio = MAX_PRIO - 1; ++ rq->expired->best_static_prio = MAX_PRIO - 1; ++ memset(rq->prio_level, 0, sizeof(int) * PRIO_RANGE); ++} ++ ++/* ++ * Only tasks running are SCHED_IDLEPRIO. Set the active array to the ++ * idleprio array and if it isn't already active ++ */ ++static struct task_struct *next_idleprio_task(struct rq *rq) ++{ ++ struct prio_array *array = rq->active; ++ struct list_head *queue; ++ ++ if (array != rq->idleprio) { ++ rq->active = rq->idleprio; ++ rq->expired = array; ++ array = rq->active; ++ rq->exp_bitmap = rq->expired->prio_bitmap; ++ rq->dyn_bitmap = rq->active->prio_bitmap; ++ } ++ rq->prio_rotation++; ++ reset_prio_levels(rq); ++ queue = array->queue + MAX_PRIO; ++ return list_entry(queue->next, struct task_struct, run_list); ++} ++ ++/* ++ * next_dynamic_task finds the next suitable dynamic task. ++ */ ++static inline struct task_struct *next_dynamic_task(struct rq *rq, int idx) ++{ ++ struct prio_array *array = rq->active; ++ struct task_struct *next; ++ struct list_head *queue; ++ int nstatic; ++ ++retry: ++ if (unlikely(rq->nr_running == rq->nr_idleprio)) ++ return next_idleprio_task(rq); ++ if (idx >= MAX_PRIO) { ++ /* There are no more tasks in the active array. Swap arrays */ ++ array = rq->expired; ++ rq->expired = rq->active; ++ rq->active = array; ++ rq->exp_bitmap = rq->expired->prio_bitmap; ++ rq->dyn_bitmap = rq->active->prio_bitmap; ++ rq->prio_rotation++; ++ idx = find_next_bit(rq->dyn_bitmap, MAX_PRIO, MAX_RT_PRIO); ++ reset_prio_levels(rq); ++ } ++ queue = array->queue + idx; ++ next = list_entry(queue->next, struct task_struct, run_list); ++ if (unlikely(next->time_slice <= 0 && !(iso_task(next) && ++ isoprio_suitable(next)))) { ++ /* ++ * Unlucky enough that this task ran out of time_slice ++ * before it hit a scheduler_tick so it should have its ++ * priority reassessed and choose another task (possibly ++ * the same one) ++ */ ++ task_expired_entitlement(rq, next); ++ idx = find_next_bit(rq->dyn_bitmap, MAX_PRIO, MAX_RT_PRIO); ++ goto retry; ++ } ++ next->rotation = rq->prio_rotation; ++ nstatic = next->static_prio; ++ if (nstatic < array->best_static_prio) ++ array->best_static_prio = nstatic; ++ if (idx > rq->prio_level[USER_PRIO(nstatic)]) ++ rq->prio_level[USER_PRIO(nstatic)] = idx; ++ return next; + } + + /* +@@ -3566,13 +3815,11 @@ + asmlinkage void __sched schedule(void) + { + struct task_struct *prev, *next; +- struct prio_array *array; + struct list_head *queue; + unsigned long long now; +- unsigned long run_time; +- int cpu, idx, new_prio; + long *switch_count; + struct rq *rq; ++ int cpu, idx; + + /* + * Test if we are atomic. Since do_exit() needs to call into +@@ -3608,18 +3855,6 @@ + + schedstat_inc(rq, sched_cnt); + now = sched_clock(); +- if (likely((long long)(now - prev->timestamp) < NS_MAX_SLEEP_AVG)) { +- run_time = now - prev->timestamp; +- if (unlikely((long long)(now - prev->timestamp) < 0)) +- run_time = 0; +- } else +- run_time = NS_MAX_SLEEP_AVG; +- +- /* +- * Tasks charged proportionately less run_time at high sleep_avg to +- * delay them losing their interactive status +- */ +- run_time /= (CURRENT_BONUS(prev) ? : 1); + + spin_lock_irq(&rq->lock); + +@@ -3630,8 +3865,10 @@ + unlikely(signal_pending(prev)))) + prev->state = TASK_RUNNING; + else { +- if (prev->state == TASK_UNINTERRUPTIBLE) ++ if (prev->state == TASK_UNINTERRUPTIBLE) { ++ prev->flags |= PF_NONSLEEP; + rq->nr_uninterruptible++; ++ } + deactivate_task(prev, rq); + } + } +@@ -3641,59 +3878,29 @@ + idle_balance(cpu, rq); + if (!rq->nr_running) { + next = rq->idle; +- rq->expired_timestamp = 0; + goto switch_tasks; + } + } + +- array = rq->active; +- if (unlikely(!array->nr_active)) { +- /* +- * Switch the active and expired arrays. +- */ +- schedstat_inc(rq, sched_switch); +- rq->active = rq->expired; +- rq->expired = array; +- array = rq->active; +- rq->expired_timestamp = 0; +- rq->best_expired_prio = MAX_PRIO; +- } +- +- idx = sched_find_first_bit(array->bitmap); +- queue = array->queue + idx; +- next = list_entry(queue->next, struct task_struct, run_list); +- +- if (!rt_task(next) && interactive_sleep(next->sleep_type)) { +- unsigned long long delta = now - next->timestamp; +- if (unlikely((long long)(now - next->timestamp) < 0)) +- delta = 0; +- +- if (next->sleep_type == SLEEP_INTERACTIVE) +- delta = delta * (ON_RUNQUEUE_WEIGHT * 128 / 100) / 128; +- +- array = next->array; +- new_prio = recalc_task_prio(next, next->timestamp + delta); +- +- if (unlikely(next->prio != new_prio)) { +- dequeue_task(next, array); +- next->prio = new_prio; +- enqueue_task(next, array); +- } ++ idx = sched_find_first_bit(rq->dyn_bitmap); ++ if (likely(idx > ISO_PRIO)) ++ next = next_dynamic_task(rq, idx); ++ else { ++ queue = rq->active->queue + idx; ++ next = list_entry(queue->next, struct task_struct, run_list); + } +- next->sleep_type = SLEEP_NORMAL; + switch_tasks: +- if (next == rq->idle) ++ if (next == rq->idle) { ++ reset_prio_levels(rq); ++ rq->prio_rotation++; + schedstat_inc(rq, sched_goidle); ++ } + prefetch(next); + prefetch_stack(next); + clear_tsk_need_resched(prev); + rcu_qsctr_inc(task_cpu(prev)); + +- update_cpu_clock(prev, rq, now); +- +- prev->sleep_avg -= run_time; +- if ((long)prev->sleep_avg <= 0) +- prev->sleep_avg = 0; ++ update_cpu_clock(prev, rq, now, 0); + prev->timestamp = prev->last_ran = now; + + sched_info_switch(prev, next); +@@ -4129,29 +4336,22 @@ + */ + void rt_mutex_setprio(struct task_struct *p, int prio) + { +- struct prio_array *array; + unsigned long flags; ++ int queued, oldprio; + struct rq *rq; +- int oldprio; + + BUG_ON(prio < 0 || prio > MAX_PRIO); + + rq = task_rq_lock(p, &flags); + + oldprio = p->prio; +- array = p->array; +- if (array) +- dequeue_task(p, array); ++ queued = task_queued(p); ++ if (queued) ++ dequeue_task(p, rq); + p->prio = prio; + +- if (array) { +- /* +- * If changing to an RT priority then queue it +- * in the active array! +- */ +- if (rt_task(p)) +- array = rq->active; +- enqueue_task(p, array); ++ if (queued) { ++ enqueue_task(p, rq); + /* + * Reschedule if we are currently running on this runqueue and + * our priority decreased, or if we are not currently running on +@@ -4160,8 +4360,8 @@ + if (task_running(rq, p)) { + if (p->prio > oldprio) + resched_task(rq->curr); +- } else if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ } else ++ try_preempt(p, rq); + } + task_rq_unlock(rq, &flags); + } +@@ -4170,8 +4370,7 @@ + + void set_user_nice(struct task_struct *p, long nice) + { +- struct prio_array *array; +- int old_prio, delta; ++ int queued, old_prio,delta; + unsigned long flags; + struct rq *rq; + +@@ -4192,26 +4391,27 @@ + p->static_prio = NICE_TO_PRIO(nice); + goto out_unlock; + } +- array = p->array; +- if (array) { +- dequeue_task(p, array); ++ queued = task_queued(p); ++ if (queued) { ++ dequeue_task(p, rq); + dec_raw_weighted_load(rq, p); + } + + p->static_prio = NICE_TO_PRIO(nice); +- set_load_weight(p); + old_prio = p->prio; + p->prio = effective_prio(p); ++ set_quota(p); + delta = p->prio - old_prio; + +- if (array) { +- enqueue_task(p, array); ++ if (queued) { ++ enqueue_task(p, rq); + inc_raw_weighted_load(rq, p); + /* + * If the task increased its priority or is running and + * lowered its priority, then reschedule its CPU: + */ +- if (delta < 0 || (delta > 0 && task_running(rq, p))) ++ if (delta < 0 || ((delta > 0 || idleprio_task(p)) && ++ task_running(rq, p))) + resched_task(rq->curr); + } + out_unlock: +@@ -4281,11 +4481,23 @@ + * + * This is the priority value as seen by users in /proc. + * RT tasks are offset by -200. Normal tasks are centered +- * around 0, value goes from -16 to +15. ++ * around 1, value goes from 0 to +79. Values higher than ++ * 39 indicate task is on the expired array. This is done ++ * lockless and may rarely return an active instead of ++ * expired value. + */ +-int task_prio(const struct task_struct *p) ++int task_prio(struct task_struct *p) + { +- return p->prio - MAX_RT_PRIO; ++ int prio = p->prio - MAX_RT_PRIO; ++ ++ if (task_queued(p)) { ++ struct rq *rq = task_rq(p); ++ struct prio_array *array = p->array; ++ ++ if (rq && rq->expired == array) ++ prio += PRIO_RANGE; ++ } ++ return prio; + } + + /** +@@ -4328,19 +4540,14 @@ + /* Actually do priority change: must hold rq lock. */ + static void __setscheduler(struct task_struct *p, int policy, int prio) + { +- BUG_ON(p->array); ++ BUG_ON(task_queued(p)); + + p->policy = policy; + p->rt_priority = prio; + p->normal_prio = normal_prio(p); + /* we are holding p->pi_lock already */ + p->prio = rt_mutex_getprio(p); +- /* +- * SCHED_BATCH tasks are treated as perpetual CPU hogs: +- */ +- if (policy == SCHED_BATCH) +- p->sleep_avg = 0; +- set_load_weight(p); ++ set_quota(p); + } + + /** +@@ -4354,19 +4561,36 @@ + int sched_setscheduler(struct task_struct *p, int policy, + struct sched_param *param) + { +- int retval, oldprio, oldpolicy = -1; +- struct prio_array *array; ++ struct sched_param zero_param = { .sched_priority = 0 }; ++ int queued, retval, oldprio, oldpolicy = -1; ++ unsigned long rlim_rtprio = 0; + unsigned long flags; + struct rq *rq; + + /* may grab non-irq protected spin_locks */ + BUG_ON(in_interrupt()); ++ if (is_rt_policy(policy) && !capable(CAP_SYS_NICE)) { ++ unsigned long lflags; ++ ++ if (!lock_task_sighand(p, &lflags)) ++ return -ESRCH; ++ rlim_rtprio = p->signal->rlim[RLIMIT_RTPRIO].rlim_cur; ++ unlock_task_sighand(p, &lflags); ++ if (rlim_rtprio) ++ goto recheck; ++ /* ++ * If the caller requested an RT policy without having the ++ * necessary rights, we downgrade the policy to SCHED_ISO. ++ * We also set the parameter to zero to pass the checks. ++ */ ++ policy = SCHED_ISO; ++ param = &zero_param; ++ } + recheck: + /* double check policy once rq lock held */ + if (policy < 0) + policy = oldpolicy = p->policy; +- else if (policy != SCHED_FIFO && policy != SCHED_RR && +- policy != SCHED_NORMAL && policy != SCHED_BATCH) ++ else if (!SCHED_RANGE(policy)) + return -EINVAL; + /* + * Valid priorities for SCHED_FIFO and SCHED_RR are +@@ -4385,14 +4609,6 @@ + */ + if (!capable(CAP_SYS_NICE)) { + if (is_rt_policy(policy)) { +- unsigned long rlim_rtprio; +- unsigned long flags; +- +- if (!lock_task_sighand(p, &flags)) +- return -ESRCH; +- rlim_rtprio = p->signal->rlim[RLIMIT_RTPRIO].rlim_cur; +- unlock_task_sighand(p, &flags); +- + /* can't set/change the rt policy */ + if (policy != p->policy && !rlim_rtprio) + return -EPERM; +@@ -4401,6 +4617,31 @@ + if (param->sched_priority > p->rt_priority && + param->sched_priority > rlim_rtprio) + return -EPERM; ++ } else { ++ switch (p->policy) { ++ /* ++ * Can only downgrade policies but not back to ++ * SCHED_NORMAL ++ */ ++ case SCHED_ISO: ++ if (policy == SCHED_ISO) ++ goto out; ++ if (policy == SCHED_NORMAL) ++ return -EPERM; ++ break; ++ case SCHED_BATCH: ++ if (policy == SCHED_BATCH) ++ goto out; ++ if (policy != SCHED_IDLEPRIO) ++ return -EPERM; ++ break; ++ case SCHED_IDLEPRIO: ++ if (policy == SCHED_IDLEPRIO) ++ goto out; ++ return -EPERM; ++ default: ++ break; ++ } + } + + /* can't change other user's priorities */ +@@ -4409,6 +4650,11 @@ + return -EPERM; + } + ++ if (!(p->mm) && policy == SCHED_IDLEPRIO) { ++ /* Don't allow kernel threads to be SCHED_IDLEPRIO. */ ++ return -EINVAL; ++ } ++ + retval = security_task_setscheduler(p, policy, param); + if (retval) + return retval; +@@ -4429,12 +4675,12 @@ + spin_unlock_irqrestore(&p->pi_lock, flags); + goto recheck; + } +- array = p->array; +- if (array) ++ queued = task_queued(p); ++ if (queued) + deactivate_task(p, rq); + oldprio = p->prio; + __setscheduler(p, policy, param->sched_priority); +- if (array) { ++ if (queued) { + __activate_task(p, rq); + /* + * Reschedule if we are currently running on this runqueue and +@@ -4444,14 +4690,15 @@ + if (task_running(rq, p)) { + if (p->prio > oldprio) + resched_task(rq->curr); +- } else if (TASK_PREEMPTS_CURR(p, rq)) +- resched_task(rq->curr); ++ } else ++ try_preempt(p, rq); + } + __task_rq_unlock(rq); + spin_unlock_irqrestore(&p->pi_lock, flags); + + rt_mutex_adjust_pi(p); + ++out: + return 0; + } + EXPORT_SYMBOL_GPL(sched_setscheduler); +@@ -4718,41 +4965,34 @@ + * sys_sched_yield - yield the current processor to other threads. + * + * This function yields the current CPU by moving the calling thread +- * to the expired array. If there are no other threads running on this +- * CPU then this function will return. ++ * to the expired array if SCHED_NORMAL or the end of its current priority ++ * queue if a realtime task. If there are no other threads running on this ++ * cpu this function will return. + */ + asmlinkage long sys_sched_yield(void) + { + struct rq *rq = this_rq_lock(); +- struct prio_array *array = current->array, *target = rq->expired; ++ struct task_struct *p = current; + + schedstat_inc(rq, yld_cnt); +- /* +- * We implement yielding by moving the task into the expired +- * queue. +- * +- * (special rule: RT tasks will just roundrobin in the active +- * array.) +- */ +- if (rt_task(current)) +- target = rq->active; +- +- if (array->nr_active == 1) { +- schedstat_inc(rq, yld_act_empty); +- if (!rq->expired->nr_active) +- schedstat_inc(rq, yld_both_empty); +- } else if (!rq->expired->nr_active) +- schedstat_inc(rq, yld_exp_empty); +- +- if (array != target) { +- dequeue_task(current, array); +- enqueue_task(current, target); +- } else +- /* +- * requeue_task is cheaper so perform that if possible. +- */ +- requeue_task(current, array); ++ if (rq->nr_running == 1) ++ schedstat_inc(rq, yld_both_empty); ++ else { ++ struct prio_array *old_array = p->array; ++ int old_prio = p->prio; ++ ++ if (idleprio_task(p)) { ++ dequeue_task(p, rq); ++ enqueue_task(p, rq); ++ goto out_release; ++ } ++ /* p->prio will be updated in requeue_task via queue_expired */ ++ if (!rt_task(p)) ++ p->array = rq->expired; ++ requeue_task(p, rq, old_array, old_prio); ++ } + ++out_release: + /* + * Since we are going to call schedule() anyway, there's + * no need to preempt or enable interrupts: +@@ -4902,6 +5142,8 @@ + break; + case SCHED_NORMAL: + case SCHED_BATCH: ++ case SCHED_ISO: ++ case SCHED_IDLEPRIO: + ret = 0; + break; + } +@@ -4926,6 +5168,8 @@ + break; + case SCHED_NORMAL: + case SCHED_BATCH: ++ case SCHED_ISO: ++ case SCHED_IDLEPRIO: + ret = 0; + } + return ret; +@@ -4959,8 +5203,8 @@ + if (retval) + goto out_unlock; + +- jiffies_to_timespec(p->policy == SCHED_FIFO ? +- 0 : task_timeslice(p), &t); ++ t = ns_to_timespec(p->policy == SCHED_FIFO ? 0 : ++ MS_TO_NS(task_timeslice(p))); + read_unlock(&tasklist_lock); + retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0; + out_nounlock: +@@ -5056,10 +5300,10 @@ + struct rq *rq = cpu_rq(cpu); + unsigned long flags; + +- idle->timestamp = sched_clock(); +- idle->sleep_avg = 0; +- idle->array = NULL; +- idle->prio = idle->normal_prio = MAX_PRIO; ++ bitmap_zero(idle->bitmap, PRIO_RANGE); ++ idle->timestamp = idle->last_ran = sched_clock(); ++ idle->array = rq->active; ++ idle->prio = idle->normal_prio = NICE_TO_PRIO(0); + idle->state = TASK_RUNNING; + idle->cpus_allowed = cpumask_of_cpu(cpu); + set_task_cpu(idle, cpu); +@@ -5178,7 +5422,7 @@ + goto out; + + set_task_cpu(p, dest_cpu); +- if (p->array) { ++ if (task_queued(p)) { + /* + * Sync timestamp with rq_dest's before activating. + * The same thing could be achieved by doing this step +@@ -5189,8 +5433,7 @@ + + rq_dest->most_recent_timestamp; + deactivate_task(p, rq_src); + __activate_task(p, rq_dest); +- if (TASK_PREEMPTS_CURR(p, rq_dest)) +- resched_task(rq_dest->curr); ++ try_preempt(p, rq_dest); + } + ret = 1; + out: +@@ -5487,7 +5730,7 @@ + /* Idle task back to normal (off runqueue, low prio) */ + rq = task_rq_lock(rq->idle, &flags); + deactivate_task(rq->idle, rq); +- rq->idle->static_prio = MAX_PRIO; ++ rq->idle->static_prio = NICE_TO_PRIO(0); + __setscheduler(rq->idle, SCHED_NORMAL, 0); + migrate_dead_tasks(cpu); + task_rq_unlock(rq, &flags); +@@ -7013,6 +7256,13 @@ + /* Move init over to a non-isolated CPU */ + if (set_cpus_allowed(current, non_isolated_cpus) < 0) + BUG(); ++ ++ /* ++ * Assume that every added cpu gives us slightly less overall latency ++ * allowing us to increase the base rr_interval, but in a non linear ++ * fashion. ++ */ ++ rr_interval *= 1 + ilog2(num_online_cpus()); + } + #else + void __init sched_init_smp(void) +@@ -7035,6 +7285,16 @@ + int i, j, k; + int highest_cpu = 0; + ++ /* Generate the priority matrix */ ++ for (i = 0; i < PRIO_RANGE; i++) { ++ bitmap_fill(prio_matrix[i], PRIO_RANGE); ++ j = PRIO_RANGE * PRIO_RANGE / (PRIO_RANGE - i); ++ for (k = 0; k <= PRIO_RANGE * (PRIO_RANGE - 1); k += j) { ++ __clear_bit(PRIO_RANGE - 1 - (k / PRIO_RANGE), ++ prio_matrix[i]); ++ } ++ } ++ + for_each_possible_cpu(i) { + struct prio_array *array; + struct rq *rq; +@@ -7042,12 +7302,20 @@ + rq = cpu_rq(i); + spin_lock_init(&rq->lock); + lockdep_set_class(&rq->lock, &rq->rq_lock_key); ++ rq->iso_ticks = 0; + rq->nr_running = 0; ++ rq->nr_idleprio = 0; ++ rq->prio_rotation = 0; + rq->active = rq->arrays; ++ rq->idleprio = rq->active; + rq->expired = rq->arrays + 1; +- rq->best_expired_prio = MAX_PRIO; ++ reset_prio_levels(rq); ++ rq->dyn_bitmap = rq->active->prio_bitmap; ++ rq->exp_bitmap = rq->expired->prio_bitmap; + + #ifdef CONFIG_SMP ++ rq->active->rq = rq; ++ rq->expired->rq = rq; + rq->sd = NULL; + for (j = 1; j < 3; j++) + rq->cpu_load[j] = 0; +@@ -7060,17 +7328,16 @@ + atomic_set(&rq->nr_iowait, 0); + + for (j = 0; j < 2; j++) { ++ + array = rq->arrays + j; +- for (k = 0; k < MAX_PRIO; k++) { ++ for (k = 0; k <= MAX_PRIO; k++) + INIT_LIST_HEAD(array->queue + k); +- __clear_bit(k, array->bitmap); +- } +- // delimiter for bitsearch +- __set_bit(MAX_PRIO, array->bitmap); ++ bitmap_zero(array->prio_bitmap, MAX_PRIO); ++ /* delimiter for bitsearch */ ++ __set_bit(MAX_PRIO, array->prio_bitmap); + } + highest_cpu = i; + } +- + set_load_weight(&init_task); + + #ifdef CONFIG_SMP +@@ -7125,25 +7392,25 @@ + #ifdef CONFIG_MAGIC_SYSRQ + void normalize_rt_tasks(void) + { +- struct prio_array *array; + struct task_struct *g, *p; + unsigned long flags; + struct rq *rq; ++ int queued; + + read_lock_irq(&tasklist_lock); + + do_each_thread(g, p) { +- if (!rt_task(p)) ++ if (!rt_task(p) && !iso_task(p)) + continue; + + spin_lock_irqsave(&p->pi_lock, flags); + rq = __task_rq_lock(p); + +- array = p->array; +- if (array) ++ queued = task_queued(p); ++ if (queued) + deactivate_task(p, task_rq(p)); + __setscheduler(p, SCHED_NORMAL, 0); +- if (array) { ++ if (queued) { + __activate_task(p, task_rq(p)); + resched_task(rq->curr); + } +Index: linux-2.6.22-ck1/kernel/sysctl.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/sysctl.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/sysctl.c 2007-07-10 14:55:23.000000000 +1000 +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -70,6 +71,7 @@ + extern char core_pattern[]; + extern int pid_max; + extern int min_free_kbytes; ++extern int vm_tail_largefiles; + extern int printk_ratelimit_jiffies; + extern int printk_ratelimit_burst; + extern int pid_max_min, pid_max_max; +@@ -78,6 +80,10 @@ + extern int compat_log; + extern int maps_protect; + extern int sysctl_stat_interval; ++extern int rr_interval; ++extern int sched_interactive; ++extern int sched_iso_cpu; ++extern int sched_iso_period; + + /* this is needed for the proc_dointvec_minmax for [fs_]overflow UID and GID */ + static int maxolduid = 65535; +@@ -161,6 +167,14 @@ + #endif + + ++/* Constants for minimum and maximum testing. ++ We use these as one-element integer vectors. */ ++static int __read_mostly zero; ++static int __read_mostly one = 1; ++static int __read_mostly one_hundred = 100; ++static int __read_mostly five_thousand = 5000; ++ ++ + /* The default sysctl tables: */ + + static ctl_table root_table[] = { +@@ -501,6 +515,47 @@ + .mode = 0444, + .proc_handler = &proc_dointvec, + }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "rr_interval", ++ .data = &rr_interval, ++ .maxlen = sizeof (int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_minmax, ++ .strategy = &sysctl_intvec, ++ .extra1 = &one, ++ .extra2 = &five_thousand, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "interactive", ++ .data = &sched_interactive, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "iso_cpu", ++ .data = &sched_iso_cpu, ++ .maxlen = sizeof (int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_minmax, ++ .strategy = &sysctl_intvec, ++ .extra1 = &zero, ++ .extra2 = &one_hundred, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "iso_period", ++ .data = &sched_iso_period, ++ .maxlen = sizeof (int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec_minmax, ++ .strategy = &sysctl_intvec, ++ .extra1 = &one, ++ .extra2 = &one_hundred, ++ }, + #if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_X86) + { + .ctl_name = KERN_UNKNOWN_NMI_PANIC, +@@ -619,14 +674,16 @@ + { .ctl_name = 0 } + }; + +-/* Constants for minimum and maximum testing in vm_table. +- We use these as one-element integer vectors. */ +-static int zero; +-static int one_hundred = 100; +- +- + static ctl_table vm_table[] = { + { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "tail_largefiles", ++ .data = &vm_tail_largefiles, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { + .ctl_name = VM_OVERCOMMIT_MEMORY, + .procname = "overcommit_memory", + .data = &sysctl_overcommit_memory, +@@ -705,16 +762,24 @@ + .proc_handler = &proc_dointvec, + }, + { +- .ctl_name = VM_SWAPPINESS, +- .procname = "swappiness", +- .data = &vm_swappiness, +- .maxlen = sizeof(vm_swappiness), ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "mapped", ++ .data = &vm_mapped, ++ .maxlen = sizeof(vm_mapped), + .mode = 0644, + .proc_handler = &proc_dointvec_minmax, + .strategy = &sysctl_intvec, + .extra1 = &zero, + .extra2 = &one_hundred, + }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "hardmaplimit", ++ .data = &vm_hardmaplimit, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, + #ifdef CONFIG_HUGETLB_PAGE + { + .ctl_name = VM_HUGETLB_PAGES, +@@ -882,6 +947,32 @@ + .extra1 = &zero, + }, + #endif ++#ifdef CONFIG_SWAP_PREFETCH ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "swap_prefetch", ++ .data = &swap_prefetch, ++ .maxlen = sizeof(swap_prefetch), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "swap_prefetch_delay", ++ .data = &swap_prefetch_delay, ++ .maxlen = sizeof(swap_prefetch_delay), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { ++ .ctl_name = CTL_UNNUMBERED, ++ .procname = "swap_prefetch_sleep", ++ .data = &swap_prefetch_sleep, ++ .maxlen = sizeof(swap_prefetch_sleep), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++#endif + { .ctl_name = 0 } + }; + +Index: linux-2.6.22-ck1/Documentation/sched-design.txt +=================================================================== +--- linux-2.6.22-ck1.orig/Documentation/sched-design.txt 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/Documentation/sched-design.txt 2007-07-10 14:55:02.000000000 +1000 +@@ -1,11 +1,14 @@ +- Goals, Design and Implementation of the +- new ultra-scalable O(1) scheduler ++ Goals, Design and Implementation of the ultra-scalable O(1) scheduler by ++ Ingo Molnar and theStaircase Deadline cpu scheduler policy designed by ++ Con Kolivas. + + +- This is an edited version of an email Ingo Molnar sent to +- lkml on 4 Jan 2002. It describes the goals, design, and +- implementation of Ingo's new ultra-scalable O(1) scheduler. +- Last Updated: 18 April 2002. ++ This was originally an edited version of an email Ingo Molnar sent to ++ lkml on 4 Jan 2002. It describes the goals, design, and implementation ++ of Ingo's ultra-scalable O(1) scheduler. It now contains a description ++ of the Staircase Deadline priority scheduler that was built on this ++ design. ++ Last Updated: Fri, 4 May 2007 + + + Goal +@@ -163,3 +166,222 @@ + code is smaller than the old one. + + Ingo ++ ++ ++Staircase Deadline cpu scheduler policy ++================================================ ++ ++Design summary ++============== ++ ++A novel design which incorporates a foreground-background descending priority ++system (the staircase) via a bandwidth allocation matrix according to nice ++level. ++ ++ ++Features ++======== ++ ++A starvation free, strict fairness O(1) scalable design with interactivity ++as good as the above restrictions can provide. There is no interactivity ++estimator, no sleep/run measurements and only simple fixed accounting. ++The design has strict enough a design and accounting that task behaviour ++can be modelled and maximum scheduling latencies can be predicted by ++the virtual deadline mechanism that manages runqueues. The prime concern ++in this design is to maintain fairness at all costs determined by nice level, ++yet to maintain as good interactivity as can be allowed within the ++constraints of strict fairness. ++ ++ ++Design description ++================== ++ ++SD works off the principle of providing each task a quota of runtime that it is ++allowed to run at a number of priority levels determined by its static priority ++(ie. its nice level). If the task uses up its quota it has its priority ++decremented to the next level determined by a priority matrix. Once every ++runtime quota has been consumed of every priority level, a task is queued on the ++"expired" array. When no other tasks exist with quota, the expired array is ++activated and fresh quotas are handed out. This is all done in O(1). ++ ++Design details ++============== ++ ++Each task keeps a record of its own entitlement of cpu time. Most of the rest of ++these details apply to non-realtime tasks as rt task management is straight ++forward. ++ ++Each runqueue keeps a record of what major epoch it is up to in the ++rq->prio_rotation field which is incremented on each major epoch. It also ++keeps a record of the current prio_level for each static priority task. ++ ++Each task keeps a record of what major runqueue epoch it was last running ++on in p->rotation. It also keeps a record of what priority levels it has ++already been allocated quota from during this epoch in a bitmap p->bitmap. ++ ++The only tunable that determines all other details is the RR_INTERVAL. This ++is set to 8ms, and is scaled gently upwards with more cpus. This value is ++tunable via a /proc interface. ++ ++All tasks are initially given a quota based on RR_INTERVAL. This is equal to ++RR_INTERVAL between nice values of -6 and 0, half that size above nice 0, and ++progressively larger for nice values from -1 to -20. This is assigned to ++p->quota and only changes with changes in nice level. ++ ++As a task is first queued, it checks in recalc_task_prio to see if it has run at ++this runqueue's current priority rotation. If it has not, it will have its ++p->prio level set according to the first slot in a "priority matrix" and will be ++given a p->time_slice equal to the p->quota, and has its allocation bitmap bit ++set in p->bitmap for this prio level. It is then queued on the current active ++priority array. ++ ++If a task has already been running during this major epoch, and it has ++p->time_slice left and the rq->prio_quota for the task's p->prio still ++has quota, it will be placed back on the active array, but no more quota ++will be added. ++ ++If a task has been running during this major epoch, but does not have ++p->time_slice left, it will find the next lowest priority in its bitmap that it ++has not been allocated quota from. It then gets the a full quota in ++p->time_slice. It is then queued on the current active priority array at the ++newly determined lower priority. ++ ++If a task has been running during this major epoch, and does not have ++any entitlement left in p->bitmap and no time_slice left, it will have its ++bitmap cleared, and be queued at its best prio again, but on the expired ++priority array. ++ ++When a task is queued, it has its relevant bit set in the array->prio_bitmap. ++ ++p->time_slice is stored in nanosconds and is updated via update_cpu_clock on ++schedule() and scheduler_tick. If p->time_slice is below zero then the ++recalc_task_prio is readjusted and the task rescheduled. ++ ++ ++Priority Matrix ++=============== ++ ++In order to minimise the latencies between tasks of different nice levels ++running concurrently, the dynamic priority slots where different nice levels ++are queued are dithered instead of being sequential. What this means is that ++there are 40 priority slots where a task may run during one major rotation, ++and the allocation of slots is dependant on nice level. In the ++following table, a zero represents a slot where the task may run. ++ ++PRIORITY:0..................20.................39 ++nice -20 0000000000000000000000000000000000000000 ++nice -10 1000100010001000100010001000100010010000 ++nice 0 1010101010101010101010101010101010101010 ++nice 5 1011010110110101101101011011010110110110 ++nice 10 1110111011101110111011101110111011101110 ++nice 15 1111111011111110111111101111111011111110 ++nice 19 1111111111111111111111111111111111111110 ++ ++As can be seen, a nice -20 task runs in every priority slot whereas a nice 19 ++task only runs one slot per major rotation. This dithered table allows for the ++smallest possible maximum latencies between tasks of varying nice levels, thus ++allowing vastly different nice levels to be used. ++ ++SCHED_BATCH tasks are managed slightly differently, receiving only the top ++slots from its priority bitmap giving it equal cpu as SCHED_NORMAL, but ++slightly higher latencies. ++ ++ ++Modelling deadline behaviour ++============================ ++ ++As the accounting in this design is hard and not modified by sleep average ++calculations or interactivity modifiers, it is possible to accurately ++predict the maximum latency that a task may experience under different ++conditions. This is a virtual deadline mechanism enforced by mandatory ++timeslice expiration and not outside bandwidth measurement. ++ ++The maximum duration a task can run during one major epoch is determined by its ++nice value. Nice 0 tasks can run at 19 different priority levels for RR_INTERVAL ++duration during each epoch. Nice 10 tasks can run at 9 priority levels for each ++epoch, and so on. The table in the priority matrix above demonstrates how this ++is enforced. ++ ++Therefore the maximum duration a runqueue epoch can take is determined by ++the number of tasks running, and their nice level. After that, the maximum ++duration it can take before a task can wait before it get scheduled is ++determined by the position of its first slot on the matrix. ++ ++In the following examples, these are _worst case scenarios_ and would rarely ++occur, but can be modelled nonetheless to determine the maximum possible ++latency. ++ ++So for example, if two nice 0 tasks are running, and one has just expired as ++another is activated for the first time receiving a full quota for this ++runqueue rotation, the first task will wait: ++ ++nr_tasks * max_duration + nice_difference * rr_interval ++1 * 19 * RR_INTERVAL + 0 = 152ms ++ ++In the presence of a nice 10 task, a nice 0 task would wait a maximum of ++1 * 10 * RR_INTERVAL + 0 = 80ms ++ ++In the presence of a nice 0 task, a nice 10 task would wait a maximum of ++1 * 19 * RR_INTERVAL + 1 * RR_INTERVAL = 160ms ++ ++More useful than these values, though, are the average latencies which are ++a matter of determining the average distance between priority slots of ++different nice values and multiplying them by the tasks' quota. For example ++in the presence of a nice -10 task, a nice 0 task will wait either one or ++two slots. Given that nice -10 tasks have a quota 2.5 times the RR_INTERVAL, ++this means the latencies will alternate between 2.5 and 5 RR_INTERVALs or ++20 and 40ms respectively (on uniprocessor at 1000HZ). ++ ++ ++Achieving interactivity ++======================= ++ ++A requirement of this scheduler design was to achieve good interactivity ++despite being a completely fair deadline based design. The disadvantage of ++designs that try to achieve interactivity is that they usually do so at ++the expense of maintaining fairness. As cpu speeds increase, the requirement ++for some sort of metered unfairness towards interactive tasks becomes a less ++desirable phenomenon, but low latency and fairness remains mandatory to ++good interactive performance. ++ ++This design relies on the fact that interactive tasks, by their nature, ++sleep often. Most fair scheduling designs end up penalising such tasks ++indirectly giving them less than their fair possible share because of the ++sleep, and have to use a mechanism of bonusing their priority to offset ++this based on the duration they sleep. This becomes increasingly inaccurate ++as the number of running tasks rises and more tasks spend time waiting on ++runqueues rather than sleeping, and it is impossible to tell whether the ++task that's waiting on a runqueue only intends to run for a short period and ++then sleep again after than runqueue wait. Furthermore, all such designs rely ++on a period of time to pass to accumulate some form of statistic on the task ++before deciding on how much to give them preference. The shorter this period, ++the more rapidly bursts of cpu ruin the interactive tasks behaviour. The ++longer this period, the longer it takes for interactive tasks to get low ++scheduling latencies and fair cpu. ++ ++This design does not measure sleep time at all. Interactive tasks that sleep ++often will wake up having consumed very little if any of their quota for ++the current major priority rotation. The longer they have slept, the less ++likely they are to even be on the current major priority rotation. Once ++woken up, though, they get to use up a their full quota for that epoch, ++whether part of a quota remains or a full quota. Overall, however, they ++can still only run as much cpu time for that epoch as any other task of the ++same nice level. This means that two tasks behaving completely differently ++from fully cpu bound to waking/sleeping extremely frequently will still ++get the same quota of cpu, but the latter will be using its quota for that ++epoch in bursts rather than continuously. This guarantees that interactive ++tasks get the same amount of cpu as cpu bound ones. ++ ++The other requirement of interactive tasks is also to obtain low latencies ++for when they are scheduled. Unlike fully cpu bound tasks and the maximum ++latencies possible described in the modelling deadline behaviour section ++above, tasks that sleep will wake up with quota available usually at the ++current runqueue's priority_level or better. This means that the most latency ++they are likely to see is one RR_INTERVAL, and often they will preempt the ++current task if it is not of a sleeping nature. This then guarantees very ++low latency for interactive tasks, and the lowest latencies for the least ++cpu bound tasks. ++ ++ ++Fri, 4 May 2007 ++Con Kolivas +Index: linux-2.6.22-ck1/Documentation/sysctl/kernel.txt +=================================================================== +--- linux-2.6.22-ck1.orig/Documentation/sysctl/kernel.txt 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/Documentation/sysctl/kernel.txt 2007-07-10 14:55:20.000000000 +1000 +@@ -25,6 +25,9 @@ + - domainname + - hostname + - hotplug ++- interactive ++- iso_cpu ++- iso_period + - java-appletviewer [ binfmt_java, obsolete ] + - java-interpreter [ binfmt_java, obsolete ] + - kstack_depth_to_print [ X86 only ] +@@ -43,6 +46,7 @@ + - printk + - real-root-dev ==> Documentation/initrd.txt + - reboot-cmd [ SPARC only ] ++- rr_interval + - rtsig-max + - rtsig-nr + - sem +@@ -164,6 +168,40 @@ + + ============================================================== + ++interactive: ++ ++The staircase-deadline cpu scheduler can be set in either purely ++forward-looking mode for absolutely rigid fairness and cpu distribution ++according to nice level, or it can allow a small per-process history ++to smooth out cpu usage perturbations common in interactive tasks by ++enabling this sysctl. While small fairness issues can arise with this ++enabled, overall fairness is usually still strongly maintained and ++starvation is never possible. Enabling this can significantly smooth ++out 3d graphics and games. ++ ++Default value is 1 (enabled). ++ ++============================================================== ++ ++iso_cpu: ++ ++This sets the percentage cpu that the unprivileged SCHED_ISO tasks can ++run effectively at realtime priority, averaged over a rolling iso_period ++seconds. ++ ++Set to 80 (percent) by default. ++ ++============================================================== ++ ++iso_period: ++ ++This sets the number of seconds over which SCHED_ISO cpu usage is averaged ++to see if it exceeds its allocated cpu bandwidth. ++ ++Set to 5 (seconds) by default. ++ ++============================================================== ++ + l2cr: (PPC only) + + This flag controls the L2 cache of G3 processor boards. If +@@ -288,6 +326,19 @@ + + ============================================================== + ++rr_interval: ++ ++This is the smallest duration that any cpu process scheduling unit ++will run for. Increasing this value can increase throughput of cpu ++bound tasks substantially but at the expense of increased latencies ++overall. This value is in milliseconds and the default value chosen ++depends on the number of cpus available at scheduler initialisation ++with a minimum of 8. ++ ++Valid values are from 1-5000. ++ ++============================================================== ++ + rtsig-max & rtsig-nr: + + The file rtsig-max can be used to tune the maximum number +Index: linux-2.6.22-ck1/fs/pipe.c +=================================================================== +--- linux-2.6.22-ck1.orig/fs/pipe.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/fs/pipe.c 2007-07-10 14:55:02.000000000 +1000 +@@ -41,12 +41,7 @@ + { + DEFINE_WAIT(wait); + +- /* +- * Pipes are system-local resources, so sleeping on them +- * is considered a noninteractive wait: +- */ +- prepare_to_wait(&pipe->wait, &wait, +- TASK_INTERRUPTIBLE | TASK_NONINTERACTIVE); ++ prepare_to_wait(&pipe->wait, &wait, TASK_INTERRUPTIBLE); + if (pipe->inode) + mutex_unlock(&pipe->inode->i_mutex); + schedule(); +Index: linux-2.6.22-ck1/fs/proc/array.c +=================================================================== +--- linux-2.6.22-ck1.orig/fs/proc/array.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/fs/proc/array.c 2007-07-10 14:55:02.000000000 +1000 +@@ -165,7 +165,6 @@ + rcu_read_lock(); + buffer += sprintf(buffer, + "State:\t%s\n" +- "SleepAVG:\t%lu%%\n" + "Tgid:\t%d\n" + "Pid:\t%d\n" + "PPid:\t%d\n" +@@ -173,7 +172,6 @@ + "Uid:\t%d\t%d\t%d\t%d\n" + "Gid:\t%d\t%d\t%d\t%d\n", + get_task_state(p), +- (p->sleep_avg/1024)*100/(1020000000/1024), + p->tgid, p->pid, + pid_alive(p) ? rcu_dereference(p->real_parent)->tgid : 0, + pid_alive(p) && p->ptrace ? rcu_dereference(p->parent)->pid : 0, +Index: linux-2.6.22-ck1/include/linux/init_task.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/init_task.h 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/init_task.h 2007-07-10 14:55:20.000000000 +1000 +@@ -125,13 +125,15 @@ + .prio = MAX_PRIO-20, \ + .static_prio = MAX_PRIO-20, \ + .normal_prio = MAX_PRIO-20, \ ++ .rotation = 0, \ + .policy = SCHED_NORMAL, \ + .cpus_allowed = CPU_MASK_ALL, \ + .mm = NULL, \ + .active_mm = &init_mm, \ + .run_list = LIST_HEAD_INIT(tsk.run_list), \ + .ioprio = 0, \ +- .time_slice = HZ, \ ++ .time_slice = 1000000000, \ ++ .quota = 1000000000, \ + .tasks = LIST_HEAD_INIT(tsk.tasks), \ + .ptrace_children= LIST_HEAD_INIT(tsk.ptrace_children), \ + .ptrace_list = LIST_HEAD_INIT(tsk.ptrace_list), \ +@@ -158,6 +160,7 @@ + .signal = {{0}}}, \ + .blocked = {{0}}, \ + .alloc_lock = __SPIN_LOCK_UNLOCKED(tsk.alloc_lock), \ ++ .mutexes_held = 0, \ + .journal_info = NULL, \ + .cpu_timers = INIT_CPU_TIMERS(tsk.cpu_timers), \ + .fs_excl = ATOMIC_INIT(0), \ +Index: linux-2.6.22-ck1/kernel/softirq.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/softirq.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/softirq.c 2007-07-10 14:55:02.000000000 +1000 +@@ -488,7 +488,7 @@ + + static int ksoftirqd(void * __bind_cpu) + { +- set_user_nice(current, 19); ++ set_user_nice(current, 15); + current->flags |= PF_NOFREEZE; + + set_current_state(TASK_INTERRUPTIBLE); +Index: linux-2.6.22-ck1/kernel/workqueue.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/workqueue.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/workqueue.c 2007-07-10 14:55:02.000000000 +1000 +@@ -285,8 +285,6 @@ + if (!cwq->wq->freezeable) + current->flags |= PF_NOFREEZE; + +- set_user_nice(current, -5); +- + for (;;) { + prepare_to_wait(&cwq->more_work, &wait, TASK_INTERRUPTIBLE); + if (!freezing(current) && +Index: linux-2.6.22-ck1/kernel/kthread.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/kthread.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/kthread.c 2007-07-10 14:55:02.000000000 +1000 +@@ -223,7 +223,6 @@ + + ignore_signals(tsk); + +- set_user_nice(tsk, -5); + set_cpus_allowed(tsk, CPU_MASK_ALL); + } + +Index: linux-2.6.22-ck1/kernel/fork.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/fork.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/fork.c 2007-07-10 14:55:20.000000000 +1000 +@@ -1063,6 +1063,7 @@ + p->io_context = NULL; + p->io_wait = NULL; + p->audit_context = NULL; ++ p->mutexes_held = 0; + cpuset_fork(p); + #ifdef CONFIG_NUMA + p->mempolicy = mpol_copy(p->mempolicy); +Index: linux-2.6.22-ck1/kernel/mutex.c +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/mutex.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/mutex.c 2007-07-10 14:55:20.000000000 +1000 +@@ -60,6 +60,16 @@ + static void fastcall noinline __sched + __mutex_lock_slowpath(atomic_t *lock_count); + ++static inline void inc_mutex_count(void) ++{ ++ current->mutexes_held++; ++} ++ ++static inline void dec_mutex_count(void) ++{ ++ current->mutexes_held--; ++} ++ + /*** + * mutex_lock - acquire the mutex + * @lock: the mutex to be acquired +@@ -89,6 +99,7 @@ + * 'unlocked' into 'locked' state. + */ + __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath); ++ inc_mutex_count(); + } + + EXPORT_SYMBOL(mutex_lock); +@@ -114,6 +125,7 @@ + * into 'unlocked' state: + */ + __mutex_fastpath_unlock(&lock->count, __mutex_unlock_slowpath); ++ dec_mutex_count(); + } + + EXPORT_SYMBOL(mutex_unlock); +@@ -283,9 +295,14 @@ + */ + int fastcall __sched mutex_lock_interruptible(struct mutex *lock) + { ++ int ret; ++ + might_sleep(); +- return __mutex_fastpath_lock_retval ++ ret = __mutex_fastpath_lock_retval + (&lock->count, __mutex_lock_interruptible_slowpath); ++ if (likely(!ret)) ++ inc_mutex_count(); ++ return ret; + } + + EXPORT_SYMBOL(mutex_lock_interruptible); +@@ -340,8 +357,12 @@ + */ + int fastcall __sched mutex_trylock(struct mutex *lock) + { +- return __mutex_fastpath_trylock(&lock->count, ++ int ret = __mutex_fastpath_trylock(&lock->count, + __mutex_trylock_slowpath); ++ ++ if (likely(ret)) ++ inc_mutex_count(); ++ return ret; + } + + EXPORT_SYMBOL(mutex_trylock); +Index: linux-2.6.22-ck1/block/cfq-iosched.c +=================================================================== +--- linux-2.6.22-ck1.orig/block/cfq-iosched.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/block/cfq-iosched.c 2007-07-10 14:55:21.000000000 +1000 +@@ -1276,10 +1276,12 @@ + printk(KERN_ERR "cfq: bad prio %x\n", ioprio_class); + case IOPRIO_CLASS_NONE: + /* +- * no prio set, place us in the middle of the BE classes ++ * Select class and ioprio according to policy and nice + */ ++ cfqq->ioprio_class = task_policy_ioprio_class(tsk); + cfqq->ioprio = task_nice_ioprio(tsk); +- cfqq->ioprio_class = IOPRIO_CLASS_BE; ++ if (cfqq->ioprio_class == IOPRIO_CLASS_IDLE) ++ cfq_clear_cfqq_idle_window(cfqq); + break; + case IOPRIO_CLASS_RT: + cfqq->ioprio = task_ioprio(tsk); +Index: linux-2.6.22-ck1/include/linux/ioprio.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/ioprio.h 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/ioprio.h 2007-07-10 14:55:21.000000000 +1000 +@@ -22,7 +22,7 @@ + * class, the default for any process. IDLE is the idle scheduling class, it + * is only served when no one else is using the disk. + */ +-enum { ++enum ioprio_class { + IOPRIO_CLASS_NONE, + IOPRIO_CLASS_RT, + IOPRIO_CLASS_BE, +@@ -51,8 +51,25 @@ + return IOPRIO_PRIO_DATA(task->ioprio); + } + ++static inline enum ioprio_class ++ task_policy_ioprio_class(struct task_struct *task) ++{ ++ if (rt_task(task)) ++ return IOPRIO_CLASS_RT; ++ if (idleprio_task(task)) ++ return IOPRIO_CLASS_IDLE; ++ return IOPRIO_CLASS_BE; ++} ++ + static inline int task_nice_ioprio(struct task_struct *task) + { ++ if (rt_task(task)) ++ return (MAX_RT_PRIO - task->rt_priority) * IOPRIO_BE_NR / ++ (MAX_RT_PRIO + 1); ++ if (iso_task(task)) ++ return 0; ++ if (idleprio_task(task)) ++ return IOPRIO_BE_NR - 1; + return (task_nice(task) + 20) / 5; + } + +Index: linux-2.6.22-ck1/Documentation/sysctl/vm.txt +=================================================================== +--- linux-2.6.22-ck1.orig/Documentation/sysctl/vm.txt 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/Documentation/sysctl/vm.txt 2007-07-10 14:55:23.000000000 +1000 +@@ -22,6 +22,8 @@ + - dirty_background_ratio + - dirty_expire_centisecs + - dirty_writeback_centisecs ++- hardmaplimit ++- mapped + - max_map_count + - min_free_kbytes + - laptop_mode +@@ -31,12 +33,15 @@ + - min_unmapped_ratio + - min_slab_ratio + - panic_on_oom ++- swap_prefetch ++- swap_prefetch_delay ++- swap_prefetch_sleep + + ============================================================== + + dirty_ratio, dirty_background_ratio, dirty_expire_centisecs, + dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode, +-block_dump, swap_token_timeout, drop-caches: ++block_dump, swap_token_timeout, drop-caches, tail_largefiles: + + See Documentation/filesystems/proc.txt + +@@ -86,6 +91,27 @@ + + ============================================================== + ++hardmaplimit: ++ ++This flag makes the vm adhere to the mapped value as closely as possible ++except in the most extreme vm stress where doing so would provoke an out ++of memory condition (see mapped below). ++ ++Enabled by default. ++ ++============================================================== ++ ++mapped: ++ ++This is the percentage ram that is filled with mapped pages (applications) ++before the vm will start reclaiming mapped pages by moving them to swap. ++It is altered by the relative stress of the vm at the time so is not ++strictly adhered to to prevent provoking out of memory kills. ++ ++Set to 66 by default. ++ ++============================================================== ++ + max_map_count: + + This file contains the maximum number of memory map areas a process +@@ -216,3 +242,37 @@ + The default value is 0. + 1 and 2 are for failover of clustering. Please select either + according to your policy of failover. ++ ++============================================================== ++ ++swap_prefetch ++ ++This enables or disables the swap prefetching feature. When the virtual ++memory subsystem has been extremely idle for at least swap_prefetch_sleep ++seconds it will start copying back pages from swap into the swapcache and keep ++a copy in swap. Valid values are 0 - 3. A value of 0 disables swap ++prefetching, 1 enables it unless laptop_mode is enabled, 2 enables it in the ++presence of laptop_mode, and 3 enables it unconditionally, ignoring whether ++the system is idle or not. If set to 0, swap prefetch wil not even try to keep ++record of ram swapped out to have the most minimal impact on performance. ++ ++The default value is 1. ++ ++============================================================== ++ ++swap_prefetch_delay ++ ++This is the time in seconds that swap prefetching is delayed upon finding ++the system is not idle (ie the vm is busy or non-niced cpu load is present). ++ ++The default value is 1. ++ ++============================================================== ++ ++swap_prefetch_sleep ++ ++This is the time in seconds that the swap prefetch kernel thread is put to ++sleep for when the ram is found to be full and it is unable to prefetch ++further. ++ ++The default value is 5. +Index: linux-2.6.22-ck1/include/linux/swap.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/swap.h 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/swap.h 2007-07-10 14:55:22.000000000 +1000 +@@ -180,6 +180,7 @@ + /* linux/mm/swap.c */ + extern void FASTCALL(lru_cache_add(struct page *)); + extern void FASTCALL(lru_cache_add_active(struct page *)); ++extern void FASTCALL(lru_cache_add_tail(struct page *)); + extern void FASTCALL(activate_page(struct page *)); + extern void FASTCALL(mark_page_accessed(struct page *)); + extern void lru_add_drain(void); +@@ -188,9 +189,11 @@ + extern void swap_setup(void); + + /* linux/mm/vmscan.c */ +-extern unsigned long try_to_free_pages(struct zone **, gfp_t); ++extern unsigned long try_to_free_pages(struct zone **, gfp_t, ++ struct task_struct *p); + extern unsigned long shrink_all_memory(unsigned long nr_pages); +-extern int vm_swappiness; ++extern int vm_mapped; ++extern int vm_hardmaplimit; + extern int remove_mapping(struct address_space *mapping, struct page *page); + extern long vm_total_pages; + +@@ -237,6 +240,7 @@ + extern struct page * lookup_swap_cache(swp_entry_t); + extern struct page * read_swap_cache_async(swp_entry_t, struct vm_area_struct *vma, + unsigned long addr); ++extern int add_to_swap_cache(struct page *page, swp_entry_t entry); + /* linux/mm/swapfile.c */ + extern long total_swap_pages; + extern unsigned int nr_swapfiles; +Index: linux-2.6.22-ck1/init/Kconfig +=================================================================== +--- linux-2.6.22-ck1.orig/init/Kconfig 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/init/Kconfig 2007-07-10 14:55:22.000000000 +1000 +@@ -105,6 +105,28 @@ + used to provide more virtual memory than the actual RAM present + in your computer. If unsure say Y. + ++config SWAP_PREFETCH ++ bool "Support for prefetching swapped memory" ++ depends on SWAP ++ default y ++ ---help--- ++ This option will allow the kernel to prefetch swapped memory pages ++ when idle. The pages will be kept on both swap and in swap_cache ++ thus avoiding the need for further I/O if either ram or swap space ++ is required. ++ ++ What this will do on workstations is slowly bring back applications ++ that have swapped out after memory intensive workloads back into ++ physical ram if you have free ram at a later stage and the machine ++ is relatively idle. This means that when you come back to your ++ computer after leaving it idle for a while, applications will come ++ to life faster. Note that your swap usage will appear to increase ++ but these are cached pages, can be dropped freely by the vm, and it ++ should stabilise around 50% swap usage maximum. ++ ++ Workstations and multiuser workstation servers will most likely want ++ to say Y. ++ + config SYSVIPC + bool "System V IPC" + ---help--- +Index: linux-2.6.22-ck1/mm/Makefile +=================================================================== +--- linux-2.6.22-ck1.orig/mm/Makefile 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/mm/Makefile 2007-07-10 14:55:22.000000000 +1000 +@@ -17,6 +17,7 @@ + obj-y += bounce.o + endif + obj-$(CONFIG_SWAP) += page_io.o swap_state.o swapfile.o thrash.o ++obj-$(CONFIG_SWAP_PREFETCH) += swap_prefetch.o + obj-$(CONFIG_HUGETLBFS) += hugetlb.o + obj-$(CONFIG_NUMA) += mempolicy.o + obj-$(CONFIG_SPARSEMEM) += sparse.o +Index: linux-2.6.22-ck1/mm/swap.c +=================================================================== +--- linux-2.6.22-ck1.orig/mm/swap.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/mm/swap.c 2007-07-10 14:55:23.000000000 +1000 +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -176,6 +177,7 @@ + */ + static DEFINE_PER_CPU(struct pagevec, lru_add_pvecs) = { 0, }; + static DEFINE_PER_CPU(struct pagevec, lru_add_active_pvecs) = { 0, }; ++static DEFINE_PER_CPU(struct pagevec, lru_add_tail_pvecs) = { 0, }; + + void fastcall lru_cache_add(struct page *page) + { +@@ -197,6 +199,31 @@ + put_cpu_var(lru_add_active_pvecs); + } + ++static void __pagevec_lru_add_tail(struct pagevec *pvec) ++{ ++ int i; ++ struct zone *zone = NULL; ++ ++ for (i = 0; i < pagevec_count(pvec); i++) { ++ struct page *page = pvec->pages[i]; ++ struct zone *pagezone = page_zone(page); ++ ++ if (pagezone != zone) { ++ if (zone) ++ spin_unlock_irq(&zone->lru_lock); ++ zone = pagezone; ++ spin_lock_irq(&zone->lru_lock); ++ } ++ BUG_ON(PageLRU(page)); ++ SetPageLRU(page); ++ add_page_to_inactive_list_tail(zone, page); ++ } ++ if (zone) ++ spin_unlock_irq(&zone->lru_lock); ++ release_pages(pvec->pages, pvec->nr, pvec->cold); ++ pagevec_reinit(pvec); ++} ++ + static void __lru_add_drain(int cpu) + { + struct pagevec *pvec = &per_cpu(lru_add_pvecs, cpu); +@@ -207,6 +234,9 @@ + pvec = &per_cpu(lru_add_active_pvecs, cpu); + if (pagevec_count(pvec)) + __pagevec_lru_add_active(pvec); ++ pvec = &per_cpu(lru_add_tail_pvecs, cpu); ++ if (pagevec_count(pvec)) ++ __pagevec_lru_add_tail(pvec); + } + + void lru_add_drain(void) +@@ -403,6 +433,20 @@ + } + + /* ++ * Function used uniquely to put pages back to the lru at the end of the ++ * inactive list to preserve the lru order. ++ */ ++void fastcall lru_cache_add_tail(struct page *page) ++{ ++ struct pagevec *pvec = &get_cpu_var(lru_add_tail_pvecs); ++ ++ page_cache_get(page); ++ if (!pagevec_add(pvec, page)) ++ __pagevec_lru_add_tail(pvec); ++ put_cpu_var(lru_add_pvecs); ++} ++ ++/* + * Try to drop buffers from the pages in a pagevec + */ + void pagevec_strip(struct pagevec *pvec) +@@ -514,6 +558,9 @@ + * Right now other parts of the system means that we + * _really_ don't want to cluster much more + */ ++ ++ prepare_swap_prefetch(); ++ + #ifdef CONFIG_HOTPLUG_CPU + hotcpu_notifier(cpu_swap_callback, 0); + #endif +Index: linux-2.6.22-ck1/mm/swap_prefetch.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.22-ck1/mm/swap_prefetch.c 2007-07-10 14:55:22.000000000 +1000 +@@ -0,0 +1,542 @@ ++/* ++ * linux/mm/swap_prefetch.c ++ * ++ * Copyright (C) 2005-2007 Con Kolivas ++ * ++ * Written by Con Kolivas ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 as ++ * published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* ++ * sysctls: ++ * swap_prefetch: 0. Disable swap prefetching ++ * 1. Prefetch only when idle and not with laptop_mode ++ * 2. Prefetch when idle and with laptop_mode ++ * 3. Prefetch at all times. ++ * swap_prefetch_delay: Number of seconds to delay prefetching when system ++ * is not idle. ++ * swap_prefetch_sleep: Number of seconds to put kprefetchd to sleep when ++ * unable to prefetch. ++ */ ++int swap_prefetch __read_mostly = 1; ++int swap_prefetch_delay __read_mostly = 1; ++int swap_prefetch_sleep __read_mostly = 5; ++ ++#define PREFETCH_DELAY (HZ * swap_prefetch_delay) ++#define PREFETCH_SLEEP ((HZ * swap_prefetch_sleep) ? : 1) ++ ++struct swapped_root { ++ unsigned long busy; /* vm busy */ ++ spinlock_t lock; /* protects all data */ ++ struct list_head list; /* MRU list of swapped pages */ ++ struct radix_tree_root swap_tree; /* Lookup tree of pages */ ++ unsigned int count; /* Number of entries */ ++ unsigned int maxcount; /* Maximum entries allowed */ ++ struct kmem_cache *cache; /* Of struct swapped_entry */ ++}; ++ ++static struct swapped_root swapped = { ++ .lock = SPIN_LOCK_UNLOCKED, ++ .list = LIST_HEAD_INIT(swapped.list), ++ .swap_tree = RADIX_TREE_INIT(GFP_ATOMIC), ++}; ++ ++static struct task_struct *kprefetchd_task; ++ ++/* ++ * We check to see no part of the vm is busy. If it is this will interrupt ++ * trickle_swap and wait another PREFETCH_DELAY. Purposefully racy. ++ */ ++inline void delay_swap_prefetch(void) ++{ ++ if (!test_bit(0, &swapped.busy)) ++ __set_bit(0, &swapped.busy); ++} ++ ++/* ++ * If laptop_mode is enabled don't prefetch to avoid hard drives ++ * doing unnecessary spin-ups unless swap_prefetch is explicitly ++ * set to a higher value. ++ */ ++static inline int prefetch_enabled(void) ++{ ++ if (swap_prefetch <= laptop_mode) ++ return 0; ++ return 1; ++} ++ ++static int kprefetchd_awake; ++ ++/* ++ * Drop behind accounting which keeps a list of the most recently used swap ++ * entries. Entries are removed lazily by kprefetchd. ++ */ ++void add_to_swapped_list(struct page *page) ++{ ++ struct swapped_entry *entry; ++ unsigned long index, flags; ++ ++ if (!prefetch_enabled()) ++ goto out; ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ if (swapped.count >= swapped.maxcount) { ++ /* ++ * Once the number of entries exceeds maxcount we start ++ * removing the least recently used entries. ++ */ ++ entry = list_entry(swapped.list.next, ++ struct swapped_entry, swapped_list); ++ radix_tree_delete(&swapped.swap_tree, entry->swp_entry.val); ++ list_del(&entry->swapped_list); ++ swapped.count--; ++ } else { ++ entry = kmem_cache_alloc(swapped.cache, GFP_ATOMIC); ++ if (unlikely(!entry)) ++ /* bad, can't allocate more mem */ ++ goto out_locked; ++ } ++ ++ index = page_private(page); ++ entry->swp_entry.val = index; ++ /* ++ * On numa we need to store the node id to ensure that we prefetch to ++ * the same node it came from. ++ */ ++ store_swap_entry_node(entry, page); ++ ++ if (likely(!radix_tree_insert(&swapped.swap_tree, index, entry))) { ++ list_add(&entry->swapped_list, &swapped.list); ++ swapped.count++; ++ } else ++ kmem_cache_free(swapped.cache, entry); ++ ++out_locked: ++ spin_unlock_irqrestore(&swapped.lock, flags); ++out: ++ if (!kprefetchd_awake) ++ wake_up_process(kprefetchd_task); ++ return; ++} ++ ++/* ++ * Removes entries from the swapped_list. The radix tree allows us to quickly ++ * look up the entry from the index without having to iterate over the whole ++ * list. ++ */ ++static void remove_from_swapped_list(const unsigned long index) ++{ ++ struct swapped_entry *entry; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ entry = radix_tree_delete(&swapped.swap_tree, index); ++ if (likely(entry)) { ++ list_del(&entry->swapped_list); ++ swapped.count--; ++ kmem_cache_free(swapped.cache, entry); ++ } ++ spin_unlock_irqrestore(&swapped.lock, flags); ++} ++ ++enum trickle_return { ++ TRICKLE_SUCCESS, ++ TRICKLE_FAILED, ++ TRICKLE_DELAY, ++}; ++ ++struct node_stats { ++ /* Free ram after a cycle of prefetching */ ++ unsigned long last_free; ++ /* Free ram on this cycle of checking prefetch_suitable */ ++ unsigned long current_free; ++ /* The amount of free ram before we start prefetching */ ++ unsigned long highfree[MAX_NR_ZONES]; ++ /* The amount of free ram where we will stop prefetching */ ++ unsigned long lowfree[MAX_NR_ZONES]; ++ /* highfree or lowfree depending on whether we've hit a watermark */ ++ unsigned long *pointfree[MAX_NR_ZONES]; ++}; ++ ++/* ++ * prefetch_stats stores the free ram data of each node and this is used to ++ * determine if a node is suitable for prefetching into. ++ */ ++struct prefetch_stats { ++ /* Which nodes are currently suited to prefetching */ ++ nodemask_t prefetch_nodes; ++ /* Total pages we've prefetched on this wakeup of kprefetchd */ ++ unsigned long prefetched_pages; ++ struct node_stats node[MAX_NUMNODES]; ++}; ++ ++static struct prefetch_stats sp_stat; ++ ++/* ++ * This tries to read a swp_entry_t into swap cache for swap prefetching. ++ * If it returns TRICKLE_DELAY we should delay further prefetching. ++ */ ++static enum trickle_return trickle_swap_cache_async(const swp_entry_t entry, ++ const int node) ++{ ++ enum trickle_return ret = TRICKLE_FAILED; ++ unsigned long flags; ++ struct page *page; ++ ++ read_lock_irqsave(&swapper_space.tree_lock, flags); ++ /* Entry may already exist */ ++ page = radix_tree_lookup(&swapper_space.page_tree, entry.val); ++ read_unlock_irqrestore(&swapper_space.tree_lock, flags); ++ if (page) ++ goto out; ++ ++ /* ++ * Get a new page to read from swap. We have already checked the ++ * watermarks so __alloc_pages will not call on reclaim. ++ */ ++ page = alloc_pages_node(node, GFP_HIGHUSER & ~__GFP_WAIT, 0); ++ if (unlikely(!page)) { ++ ret = TRICKLE_DELAY; ++ goto out; ++ } ++ ++ if (add_to_swap_cache(page, entry)) { ++ /* Failed to add to swap cache */ ++ goto out_release; ++ } ++ ++ /* Add them to the tail of the inactive list to preserve LRU order */ ++ lru_cache_add_tail(page); ++ if (unlikely(swap_readpage(NULL, page))) ++ goto out_release; ++ ++ sp_stat.prefetched_pages++; ++ sp_stat.node[node].last_free--; ++ ++ ret = TRICKLE_SUCCESS; ++out_release: ++ page_cache_release(page); ++out: ++ /* ++ * All entries are removed here lazily. This avoids the cost of ++ * remove_from_swapped_list during normal swapin. Thus there are ++ * usually many stale entries. ++ */ ++ remove_from_swapped_list(entry.val); ++ return ret; ++} ++ ++static void clear_last_prefetch_free(void) ++{ ++ int node; ++ ++ /* ++ * Reset the nodes suitable for prefetching to all nodes. We could ++ * update the data to take into account memory hotplug if desired.. ++ */ ++ sp_stat.prefetch_nodes = node_online_map; ++ for_each_node_mask(node, sp_stat.prefetch_nodes) { ++ struct node_stats *ns = &sp_stat.node[node]; ++ ++ ns->last_free = 0; ++ } ++} ++ ++static void clear_current_prefetch_free(void) ++{ ++ int node; ++ ++ sp_stat.prefetch_nodes = node_online_map; ++ for_each_node_mask(node, sp_stat.prefetch_nodes) { ++ struct node_stats *ns = &sp_stat.node[node]; ++ ++ ns->current_free = 0; ++ } ++} ++ ++/* ++ * This updates the high and low watermarks of amount of free ram in each ++ * node used to start and stop prefetching. We prefetch from pages_high * 4 ++ * down to pages_high * 3. ++ */ ++static void examine_free_limits(void) ++{ ++ struct zone *z; ++ ++ for_each_zone(z) { ++ struct node_stats *ns; ++ int idx; ++ ++ if (!populated_zone(z)) ++ continue; ++ ++ ns = &sp_stat.node[zone_to_nid(z)]; ++ idx = zone_idx(z); ++ ns->lowfree[idx] = z->pages_high * 3; ++ ns->highfree[idx] = ns->lowfree[idx] + z->pages_high; ++ ++ if (zone_page_state(z, NR_FREE_PAGES) > ns->highfree[idx]) { ++ /* ++ * We've gotten above the high watermark of free pages ++ * so we can start prefetching till we get to the low ++ * watermark. ++ */ ++ ns->pointfree[idx] = &ns->lowfree[idx]; ++ } ++ } ++} ++ ++/* ++ * We want to be absolutely certain it's ok to start prefetching. ++ */ ++static enum trickle_return prefetch_suitable(void) ++{ ++ enum trickle_return ret = TRICKLE_DELAY; ++ struct zone *z; ++ int node; ++ ++ /* ++ * If swap_prefetch is set to a high value we can ignore load ++ * and prefetch whenever we can. Otherwise we test for vm and ++ * cpu activity. ++ */ ++ if (swap_prefetch < 3) { ++ /* Purposefully racy, may return false positive */ ++ if (test_bit(0, &swapped.busy)) { ++ __clear_bit(0, &swapped.busy); ++ goto out; ++ } ++ ++ /* ++ * above_background_load is expensive so we only perform it ++ * every SWAP_CLUSTER_MAX prefetched_pages. ++ * We test to see if we're above_background_load as disk ++ * activity even at low priority can cause interrupt induced ++ * scheduling latencies. ++ */ ++ if (!(sp_stat.prefetched_pages % SWAP_CLUSTER_MAX) && ++ above_background_load()) ++ goto out; ++ } ++ clear_current_prefetch_free(); ++ ++ /* ++ * Have some hysteresis between where page reclaiming and prefetching ++ * will occur to prevent ping-ponging between them. ++ */ ++ for_each_zone(z) { ++ struct node_stats *ns; ++ unsigned long free; ++ int idx; ++ ++ if (!populated_zone(z)) ++ continue; ++ ++ node = zone_to_nid(z); ++ ns = &sp_stat.node[node]; ++ idx = zone_idx(z); ++ ++ free = zone_page_state(z, NR_FREE_PAGES); ++ if (free < *ns->pointfree[idx]) { ++ /* ++ * Free pages have dropped below the low watermark so ++ * we won't start prefetching again till we hit the ++ * high watermark of free pages. ++ */ ++ ns->pointfree[idx] = &ns->highfree[idx]; ++ node_clear(node, sp_stat.prefetch_nodes); ++ continue; ++ } ++ ns->current_free += free; ++ } ++ ++ /* ++ * We iterate over each node testing to see if it is suitable for ++ * prefetching and clear the nodemask if it is not. ++ */ ++ for_each_node_mask(node, sp_stat.prefetch_nodes) { ++ struct node_stats *ns = &sp_stat.node[node]; ++ ++ /* ++ * We check to see that pages are not being allocated ++ * elsewhere at any significant rate implying any ++ * degree of memory pressure (eg during file reads) ++ */ ++ if (ns->last_free) { ++ if (ns->current_free + SWAP_CLUSTER_MAX < ++ ns->last_free) { ++ ns->last_free = ns->current_free; ++ node_clear(node, ++ sp_stat.prefetch_nodes); ++ continue; ++ } ++ } else ++ ns->last_free = ns->current_free; ++ ++ /* We shouldn't prefetch when we are doing writeback */ ++ if (node_page_state(node, NR_WRITEBACK)) ++ node_clear(node, sp_stat.prefetch_nodes); ++ } ++ ++ /* Nothing suitable, put kprefetchd back to sleep */ ++ if (nodes_empty(sp_stat.prefetch_nodes)) ++ return TRICKLE_FAILED; ++ ++ /* Survived all that? Hooray we can prefetch! */ ++ ret = TRICKLE_SUCCESS; ++out: ++ return ret; ++} ++ ++/* ++ * trickle_swap is the main function that initiates the swap prefetching. It ++ * first checks to see if the busy flag is set, and does not prefetch if it ++ * is, as the flag implied we are low on memory or swapping in currently. ++ * Otherwise it runs until prefetch_suitable fails which occurs when the ++ * vm is busy, we prefetch to the watermark, the list is empty or we have ++ * iterated over all entries once. ++ */ ++static enum trickle_return trickle_swap(void) ++{ ++ enum trickle_return suitable, ret = TRICKLE_DELAY; ++ struct swapped_entry *pos, *n; ++ unsigned long flags; ++ ++ if (!prefetch_enabled()) ++ return ret; ++ ++ examine_free_limits(); ++ suitable = prefetch_suitable(); ++ if (suitable != TRICKLE_SUCCESS) ++ return suitable; ++ if (list_empty(&swapped.list)) { ++ kprefetchd_awake = 0; ++ return TRICKLE_FAILED; ++ } ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ list_for_each_entry_safe_reverse(pos, n, &swapped.list, swapped_list) { ++ swp_entry_t swp_entry; ++ int node; ++ ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ cond_resched(); ++ suitable = prefetch_suitable(); ++ if (suitable != TRICKLE_SUCCESS) { ++ ret = suitable; ++ goto out_unlocked; ++ } ++ ++ spin_lock_irqsave(&swapped.lock, flags); ++ if (unlikely(!pos)) ++ continue; ++ node = get_swap_entry_node(pos); ++ if (!node_isset(node, sp_stat.prefetch_nodes)) { ++ /* ++ * We found an entry that belongs to a node that is ++ * not suitable for prefetching so skip it. ++ */ ++ continue; ++ } ++ swp_entry = pos->swp_entry; ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ ++ if (trickle_swap_cache_async(swp_entry, node) == TRICKLE_DELAY) ++ goto out_unlocked; ++ spin_lock_irqsave(&swapped.lock, flags); ++ } ++ spin_unlock_irqrestore(&swapped.lock, flags); ++ ++out_unlocked: ++ if (sp_stat.prefetched_pages) { ++ lru_add_drain(); ++ sp_stat.prefetched_pages = 0; ++ } ++ return ret; ++} ++ ++static int kprefetchd(void *__unused) ++{ ++ struct sched_param param = { .sched_priority = 0 }; ++ ++ sched_setscheduler(current, SCHED_BATCH, ¶m); ++ set_user_nice(current, 19); ++ /* Set ioprio to lowest if supported by i/o scheduler */ ++ sys_ioprio_set(IOPRIO_WHO_PROCESS, IOPRIO_BE_NR - 1, IOPRIO_CLASS_BE); ++ ++ while (!kthread_should_stop()) { ++ try_to_freeze(); ++ ++ if (!kprefetchd_awake) { ++ set_current_state(TASK_INTERRUPTIBLE); ++ schedule(); ++ kprefetchd_awake = 1; ++ } ++ ++ if (trickle_swap() == TRICKLE_FAILED) ++ schedule_timeout_interruptible(PREFETCH_SLEEP); ++ else ++ schedule_timeout_interruptible(PREFETCH_DELAY); ++ clear_last_prefetch_free(); ++ } ++ return 0; ++} ++ ++/* ++ * Create kmem cache for swapped entries ++ */ ++void __init prepare_swap_prefetch(void) ++{ ++ struct zone *zone; ++ ++ swapped.cache = kmem_cache_create("swapped_entry", ++ sizeof(struct swapped_entry), 0, SLAB_PANIC, NULL, NULL); ++ ++ /* ++ * We set the limit to more entries than the physical ram. ++ * We remove entries lazily so we need some headroom. ++ */ ++ swapped.maxcount = nr_free_pagecache_pages() * 2; ++ ++ for_each_zone(zone) { ++ struct node_stats *ns; ++ int idx; ++ ++ if (!populated_zone(zone)) ++ continue; ++ ++ ns = &sp_stat.node[zone_to_nid(zone)]; ++ idx = zone_idx(zone); ++ ns->pointfree[idx] = &ns->highfree[idx]; ++ } ++} ++ ++static int __init kprefetchd_init(void) ++{ ++ kprefetchd_task = kthread_run(kprefetchd, NULL, "kprefetchd"); ++ ++ return 0; ++} ++ ++static void __exit kprefetchd_exit(void) ++{ ++ kthread_stop(kprefetchd_task); ++} ++ ++module_init(kprefetchd_init); ++module_exit(kprefetchd_exit); +Index: linux-2.6.22-ck1/mm/swap_state.c +=================================================================== +--- linux-2.6.22-ck1.orig/mm/swap_state.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/mm/swap_state.c 2007-07-10 14:55:22.000000000 +1000 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -95,7 +96,7 @@ + return error; + } + +-static int add_to_swap_cache(struct page *page, swp_entry_t entry) ++int add_to_swap_cache(struct page *page, swp_entry_t entry) + { + int error; + +@@ -148,6 +149,9 @@ + swp_entry_t entry; + int err; + ++ /* Swap prefetching is delayed if we're swapping pages */ ++ delay_swap_prefetch(); ++ + BUG_ON(!PageLocked(page)); + + for (;;) { +@@ -320,6 +324,9 @@ + struct page *found_page, *new_page = NULL; + int err; + ++ /* Swap prefetching is delayed if we're already reading from swap */ ++ delay_swap_prefetch(); ++ + do { + /* + * First check the swap cache. Since this is normally +Index: linux-2.6.22-ck1/mm/vmscan.c +=================================================================== +--- linux-2.6.22-ck1.orig/mm/vmscan.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/mm/vmscan.c 2007-07-10 14:55:23.000000000 +1000 +@@ -16,6 +16,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -36,6 +37,7 @@ + #include + #include + #include ++#include + #include + + #include +@@ -63,7 +65,7 @@ + * whole list at once. */ + int swap_cluster_max; + +- int swappiness; ++ int mapped; + + int all_unreclaimable; + }; +@@ -110,9 +112,10 @@ + #endif + + /* +- * From 0 .. 100. Higher means more swappy. ++ * From 0 .. 100. Lower means more swappy. + */ +-int vm_swappiness = 60; ++int vm_mapped __read_mostly = 66; ++int vm_hardmaplimit __read_mostly = 1; + long vm_total_pages; /* The total number of pages which the VM controls */ + + static LIST_HEAD(shrinker_list); +@@ -803,10 +806,14 @@ + * The distress ratio is important - we don't want to start + * going oom. + * +- * A 100% value of vm_swappiness overrides this algorithm +- * altogether. ++ * This distress value is ignored if we apply a hardmaplimit except ++ * in extreme distress. ++ * ++ * A 0% value of vm_mapped overrides this algorithm altogether. + */ +- swap_tendency = mapped_ratio / 2 + distress + sc->swappiness; ++ swap_tendency = mapped_ratio * 100 / (sc->mapped + 1); ++ if (!vm_hardmaplimit || distress == 100) ++ swap_tendency += distress; + + /* + * Now use this metric to decide whether to start moving mapped +@@ -955,6 +962,41 @@ + } + + /* ++ * Helper functions to adjust nice level of kswapd, based on the priority of ++ * the task (p) that called it. If it is already higher priority we do not ++ * demote its nice level since it is still working on behalf of a higher ++ * priority task. With kernel threads we leave it at nice 0. ++ * ++ * We don't ever run kswapd real time, so if a real time task calls kswapd we ++ * set it to highest SCHED_NORMAL priority. ++ */ ++static int effective_sc_prio(struct task_struct *p) ++{ ++ if (likely(p->mm)) { ++ if (rt_task(p)) ++ return -20; ++ if (idleprio_task(p)) ++ return 19; ++ return task_nice(p); ++ } ++ return 0; ++} ++ ++static void set_kswapd_nice(struct task_struct *kswapd, struct task_struct *p, ++ int active) ++{ ++ long nice = effective_sc_prio(p); ++ ++ if (task_nice(kswapd) > nice || !active) ++ set_user_nice(kswapd, nice); ++} ++ ++static int sc_priority(struct task_struct *p) ++{ ++ return (DEF_PRIORITY + (DEF_PRIORITY * effective_sc_prio(p) / 40)); ++} ++ ++/* + * This is the direct reclaim path, for page-allocating processes. We only + * try to reclaim pages from zones which will satisfy the caller's allocation + * request. +@@ -1011,7 +1053,8 @@ + * holds filesystem locks which prevent writeout this might not work, and the + * allocation attempt will fail. + */ +-unsigned long try_to_free_pages(struct zone **zones, gfp_t gfp_mask) ++unsigned long try_to_free_pages(struct zone **zones, gfp_t gfp_mask, ++ struct task_struct *p) + { + int priority; + int ret = 0; +@@ -1019,15 +1062,20 @@ + unsigned long nr_reclaimed = 0; + struct reclaim_state *reclaim_state = current->reclaim_state; + unsigned long lru_pages = 0; +- int i; ++ int i, scan_priority = DEF_PRIORITY; + struct scan_control sc = { + .gfp_mask = gfp_mask, + .may_writepage = !laptop_mode, + .swap_cluster_max = SWAP_CLUSTER_MAX, + .may_swap = 1, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + ++ if (p) ++ scan_priority = sc_priority(p); ++ ++ delay_swap_prefetch(); ++ + count_vm_event(ALLOCSTALL); + + for (i = 0; zones[i] != NULL; i++) { +@@ -1040,7 +1088,7 @@ + + zone_page_state(zone, NR_INACTIVE); + } + +- for (priority = DEF_PRIORITY; priority >= 0; priority--) { ++ for (priority = scan_priority; priority >= 0; priority--) { + sc.nr_scanned = 0; + if (!priority) + disable_swap_token(); +@@ -1070,7 +1118,7 @@ + } + + /* Take a nap, wait for some writeback to complete */ +- if (sc.nr_scanned && priority < DEF_PRIORITY - 2) ++ if (sc.nr_scanned && priority < scan_priority - 2) + congestion_wait(WRITE, HZ/10); + } + /* top priority shrink_caches still had more to do? don't OOM, then */ +@@ -1120,9 +1168,9 @@ + */ + static unsigned long balance_pgdat(pg_data_t *pgdat, int order) + { +- int all_zones_ok; ++ int all_zones_ok = 0; + int priority; +- int i; ++ int i, scan_priority; + unsigned long total_scanned; + unsigned long nr_reclaimed; + struct reclaim_state *reclaim_state = current->reclaim_state; +@@ -1130,7 +1178,7 @@ + .gfp_mask = GFP_KERNEL, + .may_swap = 1, + .swap_cluster_max = SWAP_CLUSTER_MAX, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + /* + * temp_priority is used to remember the scanning priority at which +@@ -1138,6 +1186,8 @@ + */ + int temp_priority[MAX_NR_ZONES]; + ++ scan_priority = sc_priority(pgdat->kswapd); ++ + loop_again: + total_scanned = 0; + nr_reclaimed = 0; +@@ -1145,9 +1195,9 @@ + count_vm_event(PAGEOUTRUN); + + for (i = 0; i < pgdat->nr_zones; i++) +- temp_priority[i] = DEF_PRIORITY; ++ temp_priority[i] = scan_priority; + +- for (priority = DEF_PRIORITY; priority >= 0; priority--) { ++ for (priority = scan_priority; priority >= 0; priority--) { + int end_zone = 0; /* Inclusive. 0 = ZONE_DMA */ + unsigned long lru_pages = 0; + +@@ -1163,15 +1213,22 @@ + */ + for (i = pgdat->nr_zones - 1; i >= 0; i--) { + struct zone *zone = pgdat->node_zones + i; ++ unsigned long watermark; + + if (!populated_zone(zone)) + continue; + +- if (zone->all_unreclaimable && priority != DEF_PRIORITY) ++ if (zone->all_unreclaimable && priority != scan_priority) + continue; + +- if (!zone_watermark_ok(zone, order, zone->pages_high, +- 0, 0)) { ++ /* ++ * The watermark is relaxed depending on the ++ * level of "priority" till it drops to ++ * pages_high. ++ */ ++ watermark = zone->pages_high + (zone->pages_high * ++ priority / scan_priority); ++ if (!zone_watermark_ok(zone, order, watermark, 0, 0)) { + end_zone = i; + break; + } +@@ -1198,14 +1255,18 @@ + for (i = 0; i <= end_zone; i++) { + struct zone *zone = pgdat->node_zones + i; + int nr_slab; ++ unsigned long watermark; + + if (!populated_zone(zone)) + continue; + +- if (zone->all_unreclaimable && priority != DEF_PRIORITY) ++ if (zone->all_unreclaimable && priority != scan_priority) + continue; + +- if (!zone_watermark_ok(zone, order, zone->pages_high, ++ watermark = zone->pages_high + (zone->pages_high * ++ priority / scan_priority); ++ ++ if (!zone_watermark_ok(zone, order, watermark, + end_zone, 0)) + all_zones_ok = 0; + temp_priority[i] = priority; +@@ -1238,7 +1299,7 @@ + * OK, kswapd is getting into trouble. Take a nap, then take + * another pass across the zones. + */ +- if (total_scanned && priority < DEF_PRIORITY - 2) ++ if (total_scanned && priority < scan_priority - 2) + congestion_wait(WRITE, HZ/10); + + /* +@@ -1272,6 +1333,8 @@ + return nr_reclaimed; + } + ++#define WT_EXPIRY (HZ * 5) /* Time to wakeup watermark_timer */ ++ + /* + * The background pageout daemon, started as a kernel thread + * from the init process. +@@ -1319,6 +1382,8 @@ + for ( ; ; ) { + unsigned long new_order; + ++ /* kswapd has been busy so delay watermark_timer */ ++ mod_timer(&pgdat->watermark_timer, jiffies + WT_EXPIRY); + prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE); + new_order = pgdat->kswapd_max_order; + pgdat->kswapd_max_order = 0; +@@ -1332,6 +1397,7 @@ + if (!freezing(current)) + schedule(); + ++ set_user_nice(tsk, 0); + order = pgdat->kswapd_max_order; + } + finish_wait(&pgdat->kswapd_wait, &wait); +@@ -1349,9 +1415,10 @@ + /* + * A zone is low on free memory, so wake its kswapd task to service it. + */ +-void wakeup_kswapd(struct zone *zone, int order) ++void wakeup_kswapd(struct zone *zone, int order, struct task_struct *p) + { + pg_data_t *pgdat; ++ int active; + + if (!populated_zone(zone)) + return; +@@ -1363,7 +1430,9 @@ + pgdat->kswapd_max_order = order; + if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL)) + return; +- if (!waitqueue_active(&pgdat->kswapd_wait)) ++ active = waitqueue_active(&pgdat->kswapd_wait); ++ set_kswapd_nice(pgdat->kswapd, p, active); ++ if (!active) + return; + wake_up_interruptible(&pgdat->kswapd_wait); + } +@@ -1382,6 +1451,8 @@ + struct zone *zone; + unsigned long nr_to_scan, ret = 0; + ++ delay_swap_prefetch(); ++ + for_each_zone(zone) { + + if (!populated_zone(zone)) +@@ -1441,7 +1512,7 @@ + .may_swap = 0, + .swap_cluster_max = nr_pages, + .may_writepage = 1, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + + current->reclaim_state = &reclaim_state; +@@ -1476,7 +1547,7 @@ + /* Force reclaiming mapped pages in the passes #3 and #4 */ + if (pass > 2) { + sc.may_swap = 1; +- sc.swappiness = 100; ++ sc.mapped = 0; + } + + for (prio = DEF_PRIORITY; prio >= 0; prio--) { +@@ -1540,20 +1611,57 @@ + } + + /* ++ * We wake up kswapd every WT_EXPIRY till free ram is above pages_lots ++ */ ++static void watermark_wakeup(unsigned long data) ++{ ++ pg_data_t *pgdat = (pg_data_t *)data; ++ struct timer_list *wt = &pgdat->watermark_timer; ++ int i; ++ ++ if (!waitqueue_active(&pgdat->kswapd_wait) || above_background_load()) ++ goto out; ++ for (i = pgdat->nr_zones - 1; i >= 0; i--) { ++ struct zone *z = pgdat->node_zones + i; ++ ++ if (!populated_zone(z) || is_highmem(z)) { ++ /* We are better off leaving highmem full */ ++ continue; ++ } ++ if (!zone_watermark_ok(z, 0, z->pages_lots, 0, 0)) { ++ wake_up_interruptible(&pgdat->kswapd_wait); ++ goto out; ++ } ++ } ++out: ++ mod_timer(wt, jiffies + WT_EXPIRY); ++ return; ++} ++ ++/* + * This kswapd start function will be called by init and node-hot-add. + * On node-hot-add, kswapd will moved to proper cpus if cpus are hot-added. + */ + int kswapd_run(int nid) + { + pg_data_t *pgdat = NODE_DATA(nid); ++ struct timer_list *wt; + int ret = 0; + + if (pgdat->kswapd) + return 0; + ++ wt = &pgdat->watermark_timer; ++ init_timer(wt); ++ wt->data = (unsigned long)pgdat; ++ wt->function = watermark_wakeup; ++ wt->expires = jiffies + WT_EXPIRY; ++ add_timer(wt); ++ + pgdat->kswapd = kthread_run(kswapd, pgdat, "kswapd%d", nid); + if (IS_ERR(pgdat->kswapd)) { + /* failure at boot is fatal */ ++ del_timer(wt); + BUG_ON(system_state == SYSTEM_BOOTING); + printk("Failed to start kswapd on node %d\n",nid); + ret = -1; +@@ -1624,7 +1732,7 @@ + .swap_cluster_max = max_t(unsigned long, nr_pages, + SWAP_CLUSTER_MAX), + .gfp_mask = gfp_mask, +- .swappiness = vm_swappiness, ++ .mapped = vm_mapped, + }; + unsigned long slab_reclaimable; + +Index: linux-2.6.22-ck1/include/linux/mm_inline.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/mm_inline.h 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/mm_inline.h 2007-07-10 14:55:22.000000000 +1000 +@@ -13,6 +13,13 @@ + } + + static inline void ++add_page_to_inactive_list_tail(struct zone *zone, struct page *page) ++{ ++ list_add_tail(&page->lru, &zone->inactive_list); ++ __inc_zone_state(zone, NR_INACTIVE); ++} ++ ++static inline void + del_page_from_active_list(struct zone *zone, struct page *page) + { + list_del(&page->lru); +Index: linux-2.6.22-ck1/include/linux/swap-prefetch.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.22-ck1/include/linux/swap-prefetch.h 2007-07-10 14:55:22.000000000 +1000 +@@ -0,0 +1,53 @@ ++#ifndef SWAP_PREFETCH_H_INCLUDED ++#define SWAP_PREFETCH_H_INCLUDED ++ ++#ifdef CONFIG_SWAP_PREFETCH ++/* mm/swap_prefetch.c */ ++extern int swap_prefetch; ++extern int swap_prefetch_delay; ++extern int swap_prefetch_sleep; ++ ++struct swapped_entry { ++ swp_entry_t swp_entry; /* The actual swap entry */ ++ struct list_head swapped_list; /* Linked list of entries */ ++#if MAX_NUMNODES > 1 ++ int node; /* Node id */ ++#endif ++} __attribute__((packed)); ++ ++static inline void store_swap_entry_node(struct swapped_entry *entry, ++ struct page *page) ++{ ++#if MAX_NUMNODES > 1 ++ entry->node = page_to_nid(page); ++#endif ++} ++ ++static inline int get_swap_entry_node(struct swapped_entry *entry) ++{ ++#if MAX_NUMNODES > 1 ++ return entry->node; ++#else ++ return 0; ++#endif ++} ++ ++extern void add_to_swapped_list(struct page *page); ++extern void delay_swap_prefetch(void); ++extern void prepare_swap_prefetch(void); ++ ++#else /* CONFIG_SWAP_PREFETCH */ ++static inline void add_to_swapped_list(struct page *__unused) ++{ ++} ++ ++static inline void prepare_swap_prefetch(void) ++{ ++} ++ ++static inline void delay_swap_prefetch(void) ++{ ++} ++#endif /* CONFIG_SWAP_PREFETCH */ ++ ++#endif /* SWAP_PREFETCH_H_INCLUDED */ +Index: linux-2.6.22-ck1/mm/page_io.c +=================================================================== +--- linux-2.6.22-ck1.orig/mm/page_io.c 2007-07-10 14:55:00.000000000 +1000 ++++ linux-2.6.22-ck1/mm/page_io.c 2007-07-10 14:55:22.000000000 +1000 +@@ -17,6 +17,7 @@ + #include + #include + #include ++#include + #include + + static struct bio *get_swap_bio(gfp_t gfp_flags, pgoff_t index, +@@ -118,6 +119,7 @@ + ret = -ENOMEM; + goto out; + } ++ add_to_swapped_list(page); + if (wbc->sync_mode == WB_SYNC_ALL) + rw |= (1 << BIO_RW_SYNC); + count_vm_event(PSWPOUT); +Index: linux-2.6.22-ck1/include/linux/sysctl.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/sysctl.h 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/sysctl.h 2007-07-10 14:55:22.000000000 +1000 +@@ -190,7 +190,7 @@ + VM_OVERCOMMIT_RATIO=16, /* percent of RAM to allow overcommit in */ + VM_PAGEBUF=17, /* struct: Control pagebuf parameters */ + VM_HUGETLB_PAGES=18, /* int: Number of available Huge Pages */ +- VM_SWAPPINESS=19, /* Tendency to steal mapped memory */ ++ VM_UNUSED19=19, /* was: Tendency to steal mapped memory */ + VM_LOWMEM_RESERVE_RATIO=20,/* reservation ratio for lower memory zones */ + VM_MIN_FREE_KBYTES=21, /* Minimum free kilobytes to maintain */ + VM_MAX_MAP_COUNT=22, /* int: Maximum number of mmaps/address-space */ +Index: linux-2.6.22-ck1/include/linux/mmzone.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/mmzone.h 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/mmzone.h 2007-07-10 14:55:23.000000000 +1000 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + +@@ -181,7 +182,7 @@ + + struct zone { + /* Fields commonly accessed by the page allocator */ +- unsigned long pages_min, pages_low, pages_high; ++ unsigned long pages_min, pages_low, pages_high, pages_lots; + /* + * We don't know if the memory that we're going to allocate will be freeable + * or/and it will be released eventually, so to avoid totally wasting several +@@ -452,6 +453,7 @@ + wait_queue_head_t kswapd_wait; + struct task_struct *kswapd; + int kswapd_max_order; ++ struct timer_list watermark_timer; + } pg_data_t; + + #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) +@@ -468,7 +470,7 @@ + void get_zone_counts(unsigned long *active, unsigned long *inactive, + unsigned long *free); + void build_all_zonelists(void); +-void wakeup_kswapd(struct zone *zone, int order); ++void wakeup_kswapd(struct zone *zone, int order, struct task_struct *p); + int zone_watermark_ok(struct zone *z, int order, unsigned long mark, + int classzone_idx, int alloc_flags); + enum memmap_context { +Index: linux-2.6.22-ck1/mm/page_alloc.c +=================================================================== +--- linux-2.6.22-ck1.orig/mm/page_alloc.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/mm/page_alloc.c 2007-07-10 14:55:22.000000000 +1000 +@@ -1250,7 +1250,7 @@ + goto nopage; + + for (z = zonelist->zones; *z; z++) +- wakeup_kswapd(*z, order); ++ wakeup_kswapd(*z, order, p); + + /* + * OK, we're below the kswapd watermark and have kicked background +@@ -1314,7 +1314,7 @@ + reclaim_state.reclaimed_slab = 0; + p->reclaim_state = &reclaim_state; + +- did_some_progress = try_to_free_pages(zonelist->zones, gfp_mask); ++ did_some_progress = try_to_free_pages(zonelist->zones, gfp_mask, p); + + p->reclaim_state = NULL; + p->flags &= ~PF_MEMALLOC; +@@ -1570,6 +1570,7 @@ + " min:%lukB" + " low:%lukB" + " high:%lukB" ++ " lots:%lukB" + " active:%lukB" + " inactive:%lukB" + " present:%lukB" +@@ -1581,6 +1582,7 @@ + K(zone->pages_min), + K(zone->pages_low), + K(zone->pages_high), ++ K(zone->pages_lots), + K(zone_page_state(zone, NR_ACTIVE)), + K(zone_page_state(zone, NR_INACTIVE)), + K(zone->present_pages), +@@ -3142,6 +3144,7 @@ + + zone->pages_low = zone->pages_min + (tmp >> 2); + zone->pages_high = zone->pages_min + (tmp >> 1); ++ zone->pages_lots = zone->pages_min + tmp; + spin_unlock_irqrestore(&zone->lru_lock, flags); + } + +Index: linux-2.6.22-ck1/fs/buffer.c +=================================================================== +--- linux-2.6.22-ck1.orig/fs/buffer.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/fs/buffer.c 2007-07-10 14:55:22.000000000 +1000 +@@ -356,7 +356,7 @@ + for_each_online_pgdat(pgdat) { + zones = pgdat->node_zonelists[gfp_zone(GFP_NOFS)].zones; + if (*zones) +- try_to_free_pages(zones, GFP_NOFS); ++ try_to_free_pages(zones, GFP_NOFS, NULL); + } + } + +Index: linux-2.6.22-ck1/mm/filemap.c +=================================================================== +--- linux-2.6.22-ck1.orig/mm/filemap.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/mm/filemap.c 2007-07-10 14:55:23.000000000 +1000 +@@ -466,6 +466,16 @@ + return ret; + } + ++int add_to_page_cache_lru_tail(struct page *page, ++ struct address_space *mapping, pgoff_t offset, gfp_t gfp_mask) ++{ ++ int ret = add_to_page_cache(page, mapping, offset, gfp_mask); ++ ++ if (ret == 0) ++ lru_cache_add_tail(page); ++ return ret; ++} ++ + #ifdef CONFIG_NUMA + struct page *__page_cache_alloc(gfp_t gfp) + { +@@ -839,6 +849,34 @@ + ra->ra_pages /= 4; + } + ++/* ++ * Sysctl which determines whether we should read from large files to the ++ * tail of the inactive lru list. ++ */ ++int vm_tail_largefiles __read_mostly = 1; ++ ++static inline int nr_mapped(void) ++{ ++ return global_page_state(NR_FILE_MAPPED) + ++ global_page_state(NR_ANON_PAGES); ++} ++ ++/* ++ * This examines how large in pages a file size is and returns 1 if it is ++ * more than half the unmapped ram. Avoid doing read_page_state which is ++ * expensive unless we already know it is likely to be large enough. ++ */ ++static int large_isize(unsigned long nr_pages) ++{ ++ if (nr_pages * 6 > vm_total_pages) { ++ unsigned long unmapped_ram = vm_total_pages - nr_mapped(); ++ ++ if (nr_pages * 2 > unmapped_ram) ++ return 1; ++ } ++ return 0; ++} ++ + /** + * do_generic_mapping_read - generic file read routine + * @mapping: address_space to be read +@@ -1051,8 +1089,19 @@ + goto out; + } + } +- error = add_to_page_cache_lru(cached_page, mapping, +- index, GFP_KERNEL); ++ ++ /* ++ * If we know the file is large we add the pages read to the ++ * end of the lru as we're unlikely to be able to cache the ++ * whole file in ram so make those pages the first to be ++ * dropped if not referenced soon. ++ */ ++ if (vm_tail_largefiles && large_isize(end_index)) ++ error = add_to_page_cache_lru_tail(cached_page, ++ mapping, index, GFP_KERNEL); ++ else ++ error = add_to_page_cache_lru(cached_page, mapping, ++ index, GFP_KERNEL); + if (error) { + if (error == -EEXIST) + goto find_page; +Index: linux-2.6.22-ck1/Documentation/filesystems/proc.txt +=================================================================== +--- linux-2.6.22-ck1.orig/Documentation/filesystems/proc.txt 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/Documentation/filesystems/proc.txt 2007-07-10 14:55:23.000000000 +1000 +@@ -1333,6 +1333,14 @@ + As this is a non-destructive operation and dirty objects are not freeable, the + user should run `sync' first. + ++tail_largefiles ++--------------- ++ ++When enabled reads from large files to the tail end of the inactive lru list. ++This means that any cache from reading large files is dropped very quickly, ++preventing loss of mapped ram and useful pagecache when large files are read. ++This does, however, make caching less effective when working with large files. ++ + + 2.5 /proc/sys/dev - Device specific parameters + ---------------------------------------------- +Index: linux-2.6.22-ck1/arch/i386/Kconfig +=================================================================== +--- linux-2.6.22-ck1.orig/arch/i386/Kconfig 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/arch/i386/Kconfig 2007-07-10 14:55:23.000000000 +1000 +@@ -550,7 +550,7 @@ + + choice + depends on EXPERIMENTAL +- prompt "Memory split" if EMBEDDED ++ prompt "Memory split" + default VMSPLIT_3G + help + Select the desired split between kernel and user memory. +@@ -569,17 +569,17 @@ + option alone! + + config VMSPLIT_3G +- bool "3G/1G user/kernel split" ++ bool "Default 896MB lowmem (3G/1G user/kernel split)" + config VMSPLIT_3G_OPT + depends on !HIGHMEM +- bool "3G/1G user/kernel split (for full 1G low memory)" ++ bool "1GB lowmem (3G/1G user/kernel split)" + config VMSPLIT_2G +- bool "2G/2G user/kernel split" ++ bool "2GB lowmem (2G/2G user/kernel split)" + config VMSPLIT_2G_OPT + depends on !HIGHMEM +- bool "2G/2G user/kernel split (for full 2G low memory)" ++ bool "2GB lowmem (2G/2G user/kernel split)" + config VMSPLIT_1G +- bool "1G/3G user/kernel split" ++ bool "3GB lowmem (1G/3G user/kernel split)" + endchoice + + config PAGE_OFFSET +Index: linux-2.6.22-ck1/kernel/Kconfig.hz +=================================================================== +--- linux-2.6.22-ck1.orig/kernel/Kconfig.hz 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/kernel/Kconfig.hz 2007-07-10 14:55:24.000000000 +1000 +@@ -4,7 +4,7 @@ + + choice + prompt "Timer frequency" +- default HZ_250 ++ default HZ_1000 + help + Allows the configuration of the timer frequency. It is customary + to have the timer interrupt run at 1000 Hz but 100 Hz may be more +@@ -13,8 +13,7 @@ + contention and cacheline bounces as a result of timer interrupts. + Note that the timer interrupt occurs on each processor in an SMP + environment leading to NR_CPUS * HZ number of timer interrupts +- per second. +- ++ per second.Laptops may also show improved battery life. + + config HZ_100 + bool "100 HZ" +@@ -23,13 +22,14 @@ + with lots of processors that may show reduced performance if + too many timer interrupts are occurring. + +- config HZ_250 ++ config HZ_250_NODEFAULT + bool "250 HZ" + help +- 250 Hz is a good compromise choice allowing server performance +- while also showing good interactive responsiveness even +- on SMP and NUMA systems. If you are going to be using NTSC video +- or multimedia, selected 300Hz instead. ++ 250 HZ is a lousy compromise choice allowing server interactivity ++ while also showing desktop throughput and no extra power saving on ++ laptops. Good for when you can't make up your mind. ++ ++ Recommend 100 or 1000 instead. + + config HZ_300 + bool "300 HZ" +@@ -45,12 +45,76 @@ + 1000 Hz is the preferred choice for desktop systems and other + systems requiring fast interactive responses to events. + ++ config HZ_1500 ++ bool "1500 HZ" ++ help ++ 1500 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_2000 ++ bool "2000 HZ" ++ help ++ 2000 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_3000 ++ bool "3000 HZ" ++ help ++ 3000 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_4000 ++ bool "4000 HZ" ++ help ++ 4000 Hz is an insane value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_5000 ++ bool "5000 HZ" ++ help ++ 5000 Hz is an obscene value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_7500 ++ bool "7500 HZ" ++ help ++ 7500 Hz is an obscene value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ config HZ_10000 ++ bool "10000 HZ" ++ help ++ 10000 Hz is an obscene value to use to run broken software that is Hz ++ limited. ++ ++ Being over 1000, driver breakage is likely. ++ ++ + endchoice + + config HZ + int + default 100 if HZ_100 +- default 250 if HZ_250 ++ default 250 if HZ_250_NODEFAULT + default 300 if HZ_300 + default 1000 if HZ_1000 ++ default 1500 if HZ_1500 ++ default 2000 if HZ_2000 ++ default 3000 if HZ_3000 ++ default 4000 if HZ_4000 ++ default 5000 if HZ_5000 ++ default 7500 if HZ_7500 ++ default 10000 if HZ_10000 + +Index: linux-2.6.22-ck1/arch/i386/defconfig +=================================================================== +--- linux-2.6.22-ck1.orig/arch/i386/defconfig 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/arch/i386/defconfig 2007-07-10 14:55:23.000000000 +1000 +@@ -226,10 +226,10 @@ + # CONFIG_IRQBALANCE is not set + CONFIG_SECCOMP=y + # CONFIG_HZ_100 is not set +-CONFIG_HZ_250=y ++# CONFIG_HZ_250 is not set + # CONFIG_HZ_300 is not set +-# CONFIG_HZ_1000 is not set +-CONFIG_HZ=250 ++CONFIG_HZ_1000=y ++CONFIG_HZ=1000 + # CONFIG_KEXEC is not set + # CONFIG_CRASH_DUMP is not set + CONFIG_PHYSICAL_START=0x100000 +Index: linux-2.6.22-ck1/arch/x86_64/defconfig +=================================================================== +--- linux-2.6.22-ck1.orig/arch/x86_64/defconfig 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/arch/x86_64/defconfig 2007-07-10 14:55:23.000000000 +1000 +@@ -185,10 +185,10 @@ + CONFIG_SECCOMP=y + # CONFIG_CC_STACKPROTECTOR is not set + # CONFIG_HZ_100 is not set +-CONFIG_HZ_250=y ++# CONFIG_HZ_250 is not set + # CONFIG_HZ_300 is not set +-# CONFIG_HZ_1000 is not set +-CONFIG_HZ=250 ++CONFIG_HZ_1000=y ++CONFIG_HZ=1000 + CONFIG_K8_NB=y + CONFIG_GENERIC_HARDIRQS=y + CONFIG_GENERIC_IRQ_PROBE=y +Index: linux-2.6.22-ck1/include/linux/jiffies.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/jiffies.h 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/jiffies.h 2007-07-10 14:55:24.000000000 +1000 +@@ -29,6 +29,12 @@ + # define SHIFT_HZ 9 + #elif HZ >= 768 && HZ < 1536 + # define SHIFT_HZ 10 ++#elif HZ >= 1536 && HZ < 3072 ++# define SHIFT_HZ 11 ++#elif HZ >= 3072 && HZ < 6144 ++# define SHIFT_HZ 12 ++#elif HZ >= 6144 && HZ < 12288 ++# define SHIFT_HZ 13 + #else + # error You lose. + #endif +Index: linux-2.6.22-ck1/include/net/inet_timewait_sock.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/net/inet_timewait_sock.h 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/include/net/inet_timewait_sock.h 2007-07-10 14:55:24.000000000 +1000 +@@ -38,8 +38,8 @@ + * If time > 4sec, it is "slow" path, no recycling is required, + * so that we select tick to get range about 4 seconds. + */ +-#if HZ <= 16 || HZ > 4096 +-# error Unsupported: HZ <= 16 or HZ > 4096 ++#if HZ <= 16 || HZ > 16384 ++# error Unsupported: HZ <= 16 or HZ > 16384 + #elif HZ <= 32 + # define INET_TWDR_RECYCLE_TICK (5 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) + #elif HZ <= 64 +@@ -54,8 +54,12 @@ + # define INET_TWDR_RECYCLE_TICK (10 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) + #elif HZ <= 2048 + # define INET_TWDR_RECYCLE_TICK (11 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) +-#else ++#elif HZ <= 4096 + # define INET_TWDR_RECYCLE_TICK (12 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) ++#elif HZ <= 8192 ++# define INET_TWDR_RECYCLE_TICK (13 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) ++#else ++# define INET_TWDR_RECYCLE_TICK (14 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG) + #endif + + /* TIME_WAIT reaping mechanism. */ +Index: linux-2.6.22-ck1/init/calibrate.c +=================================================================== +--- linux-2.6.22-ck1.orig/init/calibrate.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/init/calibrate.c 2007-07-10 14:55:24.000000000 +1000 +@@ -122,12 +122,12 @@ + printk("Calibrating delay loop (skipped)... " + "%lu.%02lu BogoMIPS preset\n", + loops_per_jiffy/(500000/HZ), +- (loops_per_jiffy/(5000/HZ)) % 100); ++ (loops_per_jiffy * 10/(50000/HZ)) % 100); + } else if ((loops_per_jiffy = calibrate_delay_direct()) != 0) { + printk("Calibrating delay using timer specific routine.. "); + printk("%lu.%02lu BogoMIPS (lpj=%lu)\n", + loops_per_jiffy/(500000/HZ), +- (loops_per_jiffy/(5000/HZ)) % 100, ++ (loops_per_jiffy * 10/(50000/HZ)) % 100, + loops_per_jiffy); + } else { + loops_per_jiffy = (1<<12); +@@ -166,7 +166,7 @@ + /* Round the value and print it */ + printk("%lu.%02lu BogoMIPS (lpj=%lu)\n", + loops_per_jiffy/(500000/HZ), +- (loops_per_jiffy/(5000/HZ)) % 100, ++ (loops_per_jiffy * 10/(50000/HZ)) % 100, + loops_per_jiffy); + } + +Index: linux-2.6.22-ck1/arch/i386/kernel/cpu/proc.c +=================================================================== +--- linux-2.6.22-ck1.orig/arch/i386/kernel/cpu/proc.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/arch/i386/kernel/cpu/proc.c 2007-07-10 14:55:24.000000000 +1000 +@@ -157,7 +157,7 @@ + + seq_printf(m, "\nbogomips\t: %lu.%02lu\n", + c->loops_per_jiffy/(500000/HZ), +- (c->loops_per_jiffy/(5000/HZ)) % 100); ++ (c->loops_per_jiffy * 10/(50000/HZ)) % 100); + seq_printf(m, "clflush size\t: %u\n\n", c->x86_clflush_size); + + return 0; +Index: linux-2.6.22-ck1/arch/i386/kernel/smpboot.c +=================================================================== +--- linux-2.6.22-ck1.orig/arch/i386/kernel/smpboot.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/arch/i386/kernel/smpboot.c 2007-07-10 14:55:24.000000000 +1000 +@@ -1094,7 +1094,7 @@ + "Total of %d processors activated (%lu.%02lu BogoMIPS).\n", + cpucount+1, + bogosum/(500000/HZ), +- (bogosum/(5000/HZ))%100); ++ (bogosum * 10/(50000/HZ))%100); + + Dprintk("Before bogocount - setting activated=1.\n"); + +Index: linux-2.6.22-ck1/include/linux/nfsd/stats.h +=================================================================== +--- linux-2.6.22-ck1.orig/include/linux/nfsd/stats.h 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/include/linux/nfsd/stats.h 2007-07-10 14:55:24.000000000 +1000 +@@ -35,8 +35,8 @@ + + }; + +-/* thread usage wraps very million seconds (approx one fortnight) */ +-#define NFSD_USAGE_WRAP (HZ*1000000) ++/* thread usage wraps every one hundred thousand seconds (approx one day) */ ++#define NFSD_USAGE_WRAP (HZ*100000) + + #ifdef __KERNEL__ + +Index: linux-2.6.22-ck1/arch/x86_64/kernel/setup.c +=================================================================== +--- linux-2.6.22-ck1.orig/arch/x86_64/kernel/setup.c 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/arch/x86_64/kernel/setup.c 2007-07-10 14:55:24.000000000 +1000 +@@ -1047,7 +1047,7 @@ + + seq_printf(m, "\nbogomips\t: %lu.%02lu\n", + c->loops_per_jiffy/(500000/HZ), +- (c->loops_per_jiffy/(5000/HZ)) % 100); ++ (c->loops_per_jiffy * 10/(50000/HZ)) % 100); + + if (c->x86_tlbsize > 0) + seq_printf(m, "TLB size\t: %d 4K pages\n", c->x86_tlbsize); +Index: linux-2.6.22-ck1/Makefile +=================================================================== +--- linux-2.6.22-ck1.orig/Makefile 2007-07-10 14:54:59.000000000 +1000 ++++ linux-2.6.22-ck1/Makefile 2007-07-10 14:55:24.000000000 +1000 +@@ -1,8 +1,9 @@ + VERSION = 2 + PATCHLEVEL = 6 + SUBLEVEL = 22 +-EXTRAVERSION = +-NAME = Holy Dancing Manatees, Batman! ++EXTRAVERSION = -ck1 ++NAME = So long, and thanks for all the fish ++JANAME = ã•ã‚ˆã†ãªã‚‰ã€ã„ã¾ã¾ã§é­šã‚’ã‚ã‚ŠãŒã¨ã† + + # *DOCUMENTATION* + # To see a list of typical targets execute "make help" diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index 532863d66eb9..30d0b8f345eb 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -3,14 +3,14 @@ , stateDir ? "/nix/var" }: -let version = "0.11pre9692"; in +let version = "0.11pre9718"; in stdenv.mkDerivation { name = "nix-${version}"; src = fetchurl { url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2"; - md5 = "35c0bc68b81d20c7fb925bcf8faf4827"; + md5 = "cae130dcc51a30eff34fc194e17891f2"; }; buildInputs = [perl curl openssl]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0840cfde0597..8bc2c48df0cc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -154,6 +154,13 @@ rec { version = getConfig [ "environment" "versions" name ]; }; + # The same, another syntax. + # Warning: syntax for configuration.nix changed too + useVersion = name: f: f + { + version = getConfig [ "environment" "versions" name ]; + }; + # Whether user enabled given feature for the given package? getFlag = flag: package: default: getConfig [ "environment" "flags" package flag ] @@ -2803,6 +2810,10 @@ rec { inherit fetchurl stdenv; }; + bridge_utils = import ../os-specific/linux/bridge_utils { + inherit fetchurl stdenv autoconf automake; + }; + alsaUtils = import ../os-specific/linux/alsa/utils { inherit fetchurl stdenv alsaLib ncurses gettext; }; @@ -3011,14 +3022,16 @@ rec { kernel_2_6_22 = import ../os-specific/linux/kernel/linux-2.6.22.nix { inherit fetchurl stdenv perl mktemp module_init_tools; kernelPatches = [ - /*{ name = "ext3cow"; - patch = ../os-specific/linux/kernel/linux-2.6.20.3-ext3cow.patch; + /* + { name = "ext3cow"; + patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch; extraConfig = "CONFIG_EXT3COW_FS=m\n" + "CONFIG_EXT3COW_FS_XATTR=y\n" + "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" + "CONFIG_EXT3COW_FS_SECURITY=y\n"; - }*/ + } + */ { name = "paravirt-nvidia"; patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; } @@ -3049,12 +3062,63 @@ rec { [(getConfig ["kernel" "addConfig"] "")]; }; + kernel_2_6_21_ck = import ../os-specific/linux/kernel/linux-2.6.21_ck.nix { + inherit fetchurl stdenv perl mktemp module_init_tools; + kernelPatches = [ + { name = "ext3cow"; + patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch; + extraConfig = + "CONFIG_EXT3COW_FS=m\n" + + "CONFIG_EXT3COW_FS_XATTR=y\n" + + "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" + + "CONFIG_EXT3COW_FS_SECURITY=y\n"; + } + { name = "Con Kolivas Patch"; + patch = ../os-specific/linux/kernel/patch-2.6.21-ck1; + } + { name = "paravirt-nvidia"; + patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch; + } + { name = "skas-2.6.20-v9-pre9"; + patch = fetchurl { + url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; + md5 = "02e619e5b3aaf0f9768f03ac42753e74"; + }; + extraConfig = + "CONFIG_PROC_MM=y\n" + + "# CONFIG_PROC_MM_DUMPABLE is not set\n"; + } + { name = "fbsplash-0.9.2-r5-2.6.21"; + patch = fetchurl { + url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch; + sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + }; + + + kernel_2_6_23 = import ../os-specific/linux/kernel/linux-2.6.23.nix { inherit fetchurl stdenv perl mktemp module_init_tools; kernelPatches = [ { name = "paravirt-nvidia"; patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; } + { # resume with resume=swap:/dev/xx + name = "tux on ice"; # (swsusp2) + patch = fetchurl { + url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc2-for-2.6.23.1.patch.bz2"; + sha256 = "ef86267b6f3d7e309221f5173a881afae1dfa57418be5b3963f2380b0633ca1a"; + }; + extraConfig = " + CONFIG_SUSPEND2=y + CONFIG_SUSPEND2_FILE=y + CONFIG_SUSPEND2_SWAP=y + CONFIG_CRYPTO_LZF=y + "; + } { name = "fbsplash-0.9.2-r5-2.6.21"; patch = fetchurl { url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; From f7070ce80901b04f06f4b1736753031a614f9f66 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 19 Nov 2007 23:08:48 +0000 Subject: [PATCH 029/320] Removed useVersion duplicate svn path=/nixpkgs/branches/stdenv-updates/; revision=9763 --- pkgs/top-level/all-packages.nix | 7 ------- 1 file changed, 7 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8bc2c48df0cc..1a3c616ce1fd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -154,13 +154,6 @@ rec { version = getConfig [ "environment" "versions" name ]; }; - # The same, another syntax. - # Warning: syntax for configuration.nix changed too - useVersion = name: f: f - { - version = getConfig [ "environment" "versions" name ]; - }; - # Whether user enabled given feature for the given package? getFlag = flag: package: default: getConfig [ "environment" "flags" package flag ] From 10d9d4b456be5b4fea96e1a803dabd730c411158 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 21 Nov 2007 15:32:20 +0000 Subject: [PATCH 030/320] * Dietlibc 0.31 svn path=/nixpkgs/branches/stdenv-updates/; revision=9770 --- pkgs/os-specific/linux/dietlibc/default.nix | 16 +++++++++------- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pkgs/os-specific/linux/dietlibc/default.nix b/pkgs/os-specific/linux/dietlibc/default.nix index 9a501188d535..a98c7608820d 100644 --- a/pkgs/os-specific/linux/dietlibc/default.nix +++ b/pkgs/os-specific/linux/dietlibc/default.nix @@ -3,10 +3,10 @@ assert stdenv.isLinux; stdenv.mkDerivation { - name = "dietlibc-0.30"; + name = "dietlibc-0.31"; src = fetchurl { - url = mirror://kernel/linux/libs/dietlibc/dietlibc-0.30.tar.bz2; - md5 = "2465d652fff6f1fad3da3b98e60e83c9"; + url = mirror://kernel/linux/libs/dietlibc/dietlibc-0.31.tar.bz2; + sha256 = "1kanrwjcmqs28z8arj9py9mbgjx5rgvi7il484pgaizpcxm3sqcr"; }; builder = ./builder.sh; @@ -24,14 +24,16 @@ stdenv.mkDerivation { # Remove them. ./no-wchar.patch - # Fix to get DNS resolution to work on 64-bit platforms. Taken - # from 0.31 CVS. - ./dns64.patch - # Get lseek64 working on x86_64. From # http://svn.annvix.org/cgi-bin/viewvc.cgi/packages/releases/2.0-CURRENT/dietlibc/SOURCES ./x86_64-lseek64.patch #./x86_64-stat64.patch ]; + + meta = { + homepage = http://www.fefe.de/dietlibc/; + description = "A small implementation of the C library"; + license = "GPL"; + }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1a3c616ce1fd..a318fdf442d8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2827,7 +2827,7 @@ rec { dietlibc = import ../os-specific/linux/dietlibc { inherit fetchurl glibc; # Dietlibc 0.30 doesn't compile on PPC with GCC 4.1, bus GCC 3.4 works. - stdenv = if stdenv.system == "powerpc-linux" then overrideGCC stdenv gcc34 else stdenv; + stdenv = if stdenv.system == "powerpc-linux" then overrideGCC stdenv gcc34 else stdenv; }; e2fsprogs = import ../os-specific/linux/e2fsprogs { From 8b3186528e6bf253fd55dae9edc181173b6789e3 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 21 Nov 2007 19:28:54 +0000 Subject: [PATCH 031/320] * pcre: don't compile with C++ support when doing a dietlibc build. * GCC 4.2: restore the ability to build a statically linked compiler, needed for the Nixpkgs bootstrap. * GCC 4.2: use symlinks instead of hard links in $out/bin (NIXPKGS-62). svn path=/nixpkgs/branches/stdenv-updates/; revision=9771 --- .../development/compilers/gcc-4.1/default.nix | 12 ++++++------ pkgs/development/compilers/gcc-4.2/builder.sh | 19 +++++++++++++------ .../development/compilers/gcc-4.2/default.nix | 4 ++-- pkgs/development/libraries/pcre/default.nix | 7 ++++--- pkgs/stdenv/linux/make-bootstrap-tools.nix | 3 ++- pkgs/stdenv/linux/make-bootstrap-tools.sh | 2 +- pkgs/top-level/all-packages.nix | 5 +++-- 7 files changed, 31 insertions(+), 21 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.1/default.nix b/pkgs/development/compilers/gcc-4.1/default.nix index e6d5452512e0..621f96e49f95 100644 --- a/pkgs/development/compilers/gcc-4.1/default.nix +++ b/pkgs/development/compilers/gcc-4.1/default.nix @@ -15,18 +15,18 @@ stdenv.mkDerivation ({ builder = if langF77 then ./fortran.sh else ./builder.sh; src = - [(fetchurl { + optional /*langC*/ true (fetchurl { url = mirror://gnu/gcc/gcc-4.1.2/gcc-core-4.1.2.tar.bz2; sha256 = "07binc1hqlr0g387zrg5sp57i12yzd5ja2lgjb83bbh0h3gwbsbv"; - })] ++ - (if /*langCC*/ true then [(fetchurl { + }) ++ + optional /*langCC*/ true (fetchurl { url = mirror://gnu/gcc/gcc-4.1.2/gcc-g++-4.1.2.tar.bz2; sha256 = "1qm2izcxna10jai0v4s41myki0xkw9174qpl6k1rnrqhbx0sl1hc"; - })] else []) ++ - (if langF77 then [(fetchurl { + }) ++ + optional langF77 (fetchurl { url = mirror://gnu/gcc/gcc-4.1.2/gcc-fortran-4.1.2.tar.bz2; sha256 = "0772dhmm4gc10420h0d0mfkk2sirvjmjxz8j0ywm8wp5qf8vdi9z"; - })] else []); + }); patches = optional noSysDirs [./no-sys-dirs.patch]; diff --git a/pkgs/development/compilers/gcc-4.2/builder.sh b/pkgs/development/compilers/gcc-4.2/builder.sh index c17d04037027..4bbf00637ae4 100644 --- a/pkgs/development/compilers/gcc-4.2/builder.sh +++ b/pkgs/development/compilers/gcc-4.2/builder.sh @@ -40,6 +40,7 @@ if test "$noSysDirs" = "1"; then done makeFlagsArray=( \ + "${makeFlagsArray[@]}" \ NATIVE_SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \ SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \ LIMITS_H_TEST=true \ @@ -68,18 +69,24 @@ postInstall() { # Remove `fixincl' to prevent a retained dependency on the # previous gcc. rm -rf $out/libexec/gcc/*/*/install-tools + rm -rf $out/lib/gcc/*/*/install-tools # Get rid of some "fixed" header files rm -rf $out/lib/gcc/*/*/include/root + + # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks. + for i in $out/bin/*-gcc*; do + if cmp -s $out/bin/gcc $i; then + ln -sfn gcc $i + fi + done } -if test -z "$staticCompiler"; then - if test -z "$profiledCompiler"; then - buildFlags="bootstrap $buildFlags" - else - buildFlags="profiledbootstrap $buildFlags" - fi +if test -z "$profiledCompiler"; then + buildFlags="bootstrap $buildFlags" +else + buildFlags="profiledbootstrap $buildFlags" fi genericBuild diff --git a/pkgs/development/compilers/gcc-4.2/default.nix b/pkgs/development/compilers/gcc-4.2/default.nix index df0f3e5c48df..c763f8262c2b 100644 --- a/pkgs/development/compilers/gcc-4.2/default.nix +++ b/pkgs/development/compilers/gcc-4.2/default.nix @@ -17,7 +17,7 @@ stdenv.mkDerivation { url = mirror://gnu/gcc/gcc-4.2.2/gcc-core-4.2.2.tar.bz2; sha256 = "01hdwd4im2xzg159fk022zqyhlxphqvpmabd25bqb8fjbs2yi80a"; }) ++ - optional /*langCC*/ true (fetchurl { + optional langCC (fetchurl { url = mirror://gnu/gcc/gcc-4.2.2/gcc-g++-4.2.2.tar.bz2; sha256 = "04xankxi3bi4gvgv8rq9h6w3bdx59bg9zh0zv6lyw373gy26ygmq"; }) ++ @@ -47,7 +47,7 @@ stdenv.mkDerivation { ${if stdenv.isi686 then "--with-arch=i686" else ""} "; - makeFlags = if staticCompiler then "LDFLAGS=-static" else ""; + NIX_EXTRA_LDFLAGS = if staticCompiler then "-static" else ""; passthru = { inherit langC langCC langF77; }; diff --git a/pkgs/development/libraries/pcre/default.nix b/pkgs/development/libraries/pcre/default.nix index fef6d239ea0f..cba26fae76c0 100644 --- a/pkgs/development/libraries/pcre/default.nix +++ b/pkgs/development/libraries/pcre/default.nix @@ -1,4 +1,4 @@ -args: with args; +{stdenv, fetchurl, unicodeSupport ? false, cplusplusSupport ? true}: stdenv.mkDerivation { name = "pcre-7.4"; @@ -7,7 +7,8 @@ stdenv.mkDerivation { sha256 = "1rdks2h5f3p2d71c4jnxaic1c9gmgsfky80djnafcdbdrhzkiyx5"; }; configureFlags = - if unicodeSupport then + (if unicodeSupport then "--enable-unicode-properties --enable-shared --disable-static" - else ""; + else "") + + (if !cplusplusSupport then "--disable-cpp" else ""); } diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index db7c3d72e114..069b965ad764 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -48,11 +48,12 @@ let then pkgsDiet.gawk else pkgsStatic.gawk; - gcc = import ../../development/compilers/gcc-4.1 { + gcc = import ../../development/compilers/gcc-4.2 { inherit (pkgs) fetchurl stdenv; noSysDirs = true; langCC = false; staticCompiler = true; + profiledCompiled = true; }; curl = pkgsDiet.realCurl; diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index 49bb5afe4770..afc595861ca0 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -46,7 +46,7 @@ cp $findutils/bin/find tools/bin cp $findutils/bin/xargs tools/bin cp $diffutils/bin/* tools/bin cp $gnused/bin/* tools/bin -cp $gnugrep/bin/* tools/bin +cp $gnugrep/bin/grep tools/bin cp $gawk/bin/gawk tools/bin ln -s gawk tools/bin/awk cp $gnutar/bin/* tools/bin diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a318fdf442d8..dc3b0adea320 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2155,11 +2155,12 @@ rec { pcre = import ../development/libraries/pcre { inherit fetchurl stdenv; unicodeSupport = getFlag "unicode" "pcre" false; + cplusplusSupport = !stdenv ? isDietLibC; }; poppler = import ../development/libraries/poppler { - inherit fetchurl stdenv qt4 cairo freetype fontconfig zlib libjpeg; - inherit (gtkLibs) glib gtk; + inherit fetchurl stdenv qt4 cairo freetype fontconfig zlib libjpeg; + inherit (gtkLibs) glib gtk; }; popt = import ../development/libraries/popt { From 3949fff65d53188683b054f692c9bc54beb5aeb2 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 21 Nov 2007 19:30:54 +0000 Subject: [PATCH 032/320] * Symlink g++ as well (NIXPKGS-62). svn path=/nixpkgs/branches/stdenv-updates/; revision=9772 --- pkgs/development/compilers/gcc-4.2/builder.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/development/compilers/gcc-4.2/builder.sh b/pkgs/development/compilers/gcc-4.2/builder.sh index 4bbf00637ae4..ee11e974a404 100644 --- a/pkgs/development/compilers/gcc-4.2/builder.sh +++ b/pkgs/development/compilers/gcc-4.2/builder.sh @@ -80,6 +80,12 @@ postInstall() { ln -sfn gcc $i fi done + + for i in $out/bin/*-c++* $out/bin/*-g++*; do + if cmp -s $out/bin/g++ $i; then + ln -sfn g++ $i + fi + done } From 3237b446b90f3c705a7b61bb381f53da6116b852 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 22 Nov 2007 12:39:51 +0000 Subject: [PATCH 033/320] svn path=/nixpkgs/branches/stdenv-updates/; revision=9775 --- pkgs/stdenv/linux/make-bootstrap-tools.nix | 2 +- pkgs/stdenv/linux/make-bootstrap-tools.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index 069b965ad764..ce81ff0bd8f4 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -53,7 +53,7 @@ let noSysDirs = true; langCC = false; staticCompiler = true; - profiledCompiled = true; + profiledCompiler = true; }; curl = pkgsDiet.realCurl; diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index afc595861ca0..d9d2a2260a4e 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -99,6 +99,7 @@ fi rm -rf gcc/lib/gcc/*/*/install-tools rm -rf gcc/lib/gcc/*/*/include/root rm -rf gcc/lib/gcc/*/*/include/linux +rm -f gcc/lib/libgomp* if test -e gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h; then nukeRefs gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h fi From d0fc2251b41c51b9acb7a0c85d4fe67f81251837 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 26 Nov 2007 13:59:46 +0000 Subject: [PATCH 034/320] * Bash 3.2 patchlevel 25. svn path=/nixpkgs/branches/stdenv-updates/; revision=9795 --- pkgs/shells/bash/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/shells/bash/default.nix b/pkgs/shells/bash/default.nix index 1877080049b3..9e7090472880 100644 --- a/pkgs/shells/bash/default.nix +++ b/pkgs/shells/bash/default.nix @@ -3,11 +3,11 @@ assert interactive -> ncurses != null; stdenv.mkDerivation { - name = "bash-3.2-p17"; + name = "bash-3.2-p25"; src = fetchurl { - url = http://losser.st-lab.cs.uu.nl/~eelco/dist/bash-3.2-p17.tar.bz2; - sha256 = "153gg2z2s3ar7vni3345nnmdisha4b8cxzsj79d8ap6m6i4c35f5"; + url = http://losser.st-lab.cs.uu.nl/~eelco/dist/bash-3.2-p25.tar.bz2; + sha256 = "1x19z386ysvwk00zigzf3nkv1x1xq4kvyckz9ah8qz65a7626cs4"; }; postInstall = "ln -s bash $out/bin/sh"; From 0c78e480fc8bf184a0b87a1f0a33c03e809c5aac Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 26 Nov 2007 14:41:08 +0000 Subject: [PATCH 035/320] * Build a small number of packages to test the stdenv-updates branch. svn path=/nixpkgs/branches/stdenv-updates/; revision=9797 --- pkgs/top-level/build-for-release.nix | 283 +-------------------------- 1 file changed, 3 insertions(+), 280 deletions(-) diff --git a/pkgs/top-level/build-for-release.nix b/pkgs/top-level/build-for-release.nix index 9f9ab69e49ab..18a7074d843e 100644 --- a/pkgs/top-level/build-for-release.nix +++ b/pkgs/top-level/build-for-release.nix @@ -3,236 +3,19 @@ let { allPackages = import ./all-packages.nix; i686LinuxPkgs = {inherit (allPackages {system = "i686-linux";}) - MPlayer - MPlayerPlugin - alsaUtils - apacheAnt - apacheHttpd - aspectj - aspell - aspellDicts aterm - autoconf - automake19x - bash - bashInteractive - batik - binutils - bison23 - bittorrent - bmp - bmp_plugin_musepack - bmp_plugin_wma - bsdiff - bzip2 - cabextract - cdrkit - chatzilla - cksfv - compiz - coreutils - cpio - cron - cups - darcs - db4 - dhcp - dietlibc - diffutils - docbook5 - docbook5_xsl - docbook_xml_dtd_42 - docbook_xml_dtd_43 - docbook_xsl - e2fsprogs - ecj - eclipsesdk - emacs - emacsUnicode - enscript - exult - feh - file - findutils - firefoxWrapper - flex2533 - gawk gcc - gcc34 - gcc42 - gdb - ghc - ghostscript - gimp - gnugrep - gnum4 - gnumake - gnupatch - gnused - gnutar - gqview - graphviz - grub - gzip - hal - hello - iana_etc - iputils - irssi - jakartaregexp - jdkPlugin - jetty - jikes - jing_tools - jrePlugin - jwhois - kbd - kcachegrind - kdebase - keen4 - kernel - klibc - ktorrent - less - lhs2tex - libtool - libxml2 - libxslt - lvm2 - lynx - man - mdadm - mesa - mingetty - mk - mktemp - mod_python - module_init_tools - mono - mysql - #mythtv - nano - netcat - nix nixUnstable - nss_ldap - ntp - nxml - openoffice - openssh - openssl - pam_console - pam_ldap - pam_login - pam_unix2 pan - par2cmdline - pciutils - perl - php - pidgin - pkgconfig - postgresql - postgresql_jdbc - procps - pwdutils - python - qt3 - quake3demo - readline - reiserfsprogs - rogue - rsync - ruby - screen - sdf - slim - spidermonkey - splashutils - ssmtp - strace - strategoxt - strategoxtUtils - su subversion - sudo - swig - sylpheed - sysklogd - syslinux - sysvinit - sysvtools - tetex - texinfo - thunderbird - tightvnc - time - udev - uml - unzip - upstart - utillinux - valgrind - vim - vlc - w3m - wget - wine - wirelesstools - wxHaskell - x11_ssh_askpass - xchm - xfig - xineUI - xkeyboard_config - xmltv - xmms - xorg_sys_opengl - xsel - xterm - zdelta - zip - ; - inherit ((allPackages {system = "i686-linux";}).xorg) - fontbh100dpi - fontbhlucidatypewriter100dpi - fontbhttf - fontcursormisc - fontmiscmisc - iceauth - setxkbmap - xauth - xf86inputkeyboard - xf86inputmouse - xf86videoi810 - xf86videovesa - xkbcomp - xorgserver - xrandr - xrdb - xset - ; - inherit ((allPackages {system = "i686-linux";}).gnome) - gconfeditor - gnomepanel - gnometerminal - gnomeutils - metacity ; }; x86_64LinuxPkgs = {inherit (allPackages {system = "x86_64-linux";}) - aterm242fixes - autoconf - automake19x - bash - binutils - bison23 + aterm gcc - hello - kernel - libtool nixUnstable + pan subversion ; }; @@ -241,69 +24,9 @@ let { aterm ;}; - i686FreeBSDPkgs = {inherit (allPackages {system = "i686-freebsd";}) - aterm - autoconf - automake19x - docbook5 - docbook_xml_dtd_42 - docbook_xml_dtd_43 - docbook_xsl - docbook5_xsl - libtool - libxml2 - libxslt - nxml - realCurl - subversion - unzip - ;}; - - powerpcDarwinPkgs = {inherit (allPackages {system = "powerpc-darwin";}) - apacheHttpd - aterm - autoconf - automake19x - bison23 - docbook5 - docbook_xml_dtd_42 - docbook_xml_dtd_43 - docbook_xsl - docbook5_xsl - libtool - libxml2 - libxslt - nxml - #php - subversion - tetex - unzip - ;}; - - i686DarwinPkgs = {inherit (allPackages {system = "i686-darwin";}) - aterm - autoconf - automake19x - libtool - libxml2 - libxslt - subversion - ;}; - - cygwinPkgs = {inherit (allPackages {system = "i686-cygwin";}) - aterm - gnum4 - readline - ncurses - ;}; - body = [ i686LinuxPkgs x86_64LinuxPkgs - powerpcLinuxPkgs - i686FreeBSDPkgs - powerpcDarwinPkgs -# i686DarwinPkgs - cygwinPkgs +# powerpcLinuxPkgs ]; } From d04b560dc3d543a1c58e219de768c4cbe1567737 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 26 Nov 2007 15:59:07 +0000 Subject: [PATCH 036/320] * fgrep and egrep aren't shell scripts anymore. svn path=/nixpkgs/branches/stdenv-updates/; revision=9802 --- pkgs/stdenv/linux/make-bootstrap-tools.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index d9d2a2260a4e..aa93ec596c4b 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -46,7 +46,7 @@ cp $findutils/bin/find tools/bin cp $findutils/bin/xargs tools/bin cp $diffutils/bin/* tools/bin cp $gnused/bin/* tools/bin -cp $gnugrep/bin/grep tools/bin +cp $gnugrep/bin/* tools/bin cp $gawk/bin/gawk tools/bin ln -s gawk tools/bin/awk cp $gnutar/bin/* tools/bin @@ -62,6 +62,8 @@ nukeRefs tools/bin/sed nukeRefs tools/bin/gawk nukeRefs tools/bin/tar nukeRefs tools/bin/grep +nukeRefs tools/bin/fgrep +nukeRefs tools/bin/egrep nukeRefs tools/bin/patchelf nukeRefs tools/bin/make From ea52300e0b959d7ed34d7c222b3a212df66dc6be Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 26 Nov 2007 16:19:44 +0000 Subject: [PATCH 037/320] svn path=/nixpkgs/branches/stdenv-updates/; revision=9803 --- pkgs/development/interpreters/python/default.nix | 1 + pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/default.nix b/pkgs/development/interpreters/python/default.nix index 1ca85603a1fb..af90018870fb 100644 --- a/pkgs/development/interpreters/python/default.nix +++ b/pkgs/development/interpreters/python/default.nix @@ -1,5 +1,6 @@ args: args.stdenv.lib.listOfListsToAttrs [ + [ "default" (import ./2.4.nix args) ] [ "2.4" (import ./2.4.nix args) ] [ "2.5" (import ./2.5 args) ] ] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dc3b0adea320..4dc606cb10bf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2913,7 +2913,7 @@ rec { kernelHeaders = kernelHeaders_2_6_23; - kernelHeaders_2_6_21 = import ../os-specific/linux/kernel-headers/2.6.21.1.nix { + kernelHeaders_2_6_21 = import ../os-specific/linux/kernel-headers/2.6.21.3.nix { inherit fetchurl stdenv; }; From 29ef9c473ae8bbfa40f2294b25d61fa6b0f9171b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:03:52 +0000 Subject: [PATCH 038/320] typo in kernel builder svn path=/nixpkgs/branches/stdenv-updates/; revision=9814 --- pkgs/os-specific/linux/kernel/builder.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/builder.sh b/pkgs/os-specific/linux/kernel/builder.sh index af5aa8de8c20..123b65e3f070 100644 --- a/pkgs/os-specific/linux/kernel/builder.sh +++ b/pkgs/os-specific/linux/kernel/builder.sh @@ -96,7 +96,7 @@ installPhase() { if test "$arch" != um; then # copy all Makefiles and Kconfig files ln -s $out/lib/modules/$version/build $out/lib/modules/$version/source - cp --parents `find -type f -name Makefile-\* -o -name "Kconfig*"` $out/lib/modules/$version/build + cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $out/lib/modules/$version/build cp Module.symvers $out/lib/modules/$version/build # weed out unneeded stuff From e1d5804f30d1ff27a9a7ca2acef5f2398ed3e385 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:04:00 +0000 Subject: [PATCH 039/320] Installing kernel headers using make headers_install svn path=/nixpkgs/branches/stdenv-updates/; revision=9815 --- .../linux/kernel-headers/builder.sh | 23 +++---------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/pkgs/os-specific/linux/kernel-headers/builder.sh b/pkgs/os-specific/linux/kernel-headers/builder.sh index b2ebbc694853..05392d5fe24b 100644 --- a/pkgs/os-specific/linux/kernel-headers/builder.sh +++ b/pkgs/os-specific/linux/kernel-headers/builder.sh @@ -1,26 +1,9 @@ source $stdenv/setup +patchPhase="sed -i '/scsi/d' include/Kbuild" -buildPhase() { - make include/linux/version.h -} - -buildPhase=buildPhase - - -installPhase() { - mkdir $out - mkdir $out/include - cp -prvd include/linux include/asm-generic $out/include - cp -prvd include/asm-$platform $out/include - ln -s asm-$platform $out/include/asm - for i in $extraIncludeDirs; do - cp -prvd include/asm-$i $out/include - done - echo -n > $out/include/linux/autoconf.h -} - -installPhase=installPhase +buildPhase="make mrproper headers_check"; +installPhase="make INSTALL_HDR_PATH=$out headers_install" genericBuild From 672b4d3002fd1597cb7b5c3802a3001a14614315 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:04:14 +0000 Subject: [PATCH 040/320] switched to glibc-2.7 svn path=/nixpkgs/branches/stdenv-updates/; revision=9816 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4dc606cb10bf..fa2a4be52dbd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1743,7 +1743,7 @@ rec { }; glibc = useFromStdenv (stdenv ? glibc) stdenv.glibc - (import ../development/libraries/glibc-2.5 { + (import ../development/libraries/glibc-2.7 { inherit fetchurl stdenv kernelHeaders; #installLocales = false; }); From a1f7a312c0e91a8f02a7e409460ba54e205674d9 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:04:21 +0000 Subject: [PATCH 041/320] cpio: unneeded patches removed svn path=/nixpkgs/branches/stdenv-updates/; revision=9817 --- pkgs/tools/archivers/cpio/default.nix | 1 - .../archivers/cpio/gnulib-futimens.patch | 30 ------------------- pkgs/tools/archivers/cpio/symlink.patch | 13 -------- 3 files changed, 44 deletions(-) delete mode 100644 pkgs/tools/archivers/cpio/gnulib-futimens.patch delete mode 100644 pkgs/tools/archivers/cpio/symlink.patch diff --git a/pkgs/tools/archivers/cpio/default.nix b/pkgs/tools/archivers/cpio/default.nix index 3309215fb63d..cb9ee9e7f067 100644 --- a/pkgs/tools/archivers/cpio/default.nix +++ b/pkgs/tools/archivers/cpio/default.nix @@ -6,5 +6,4 @@ stdenv.mkDerivation { url = mirror://gnu/cpio/cpio-2.9.tar.bz2; sha256 = "01s7f9hg8kgpis96j99hgkiqgdy53pm7qi7bhm3fzx58jfk5z6mv"; }; - patches = [./symlink.patch ./gnulib-futimens.patch]; } diff --git a/pkgs/tools/archivers/cpio/gnulib-futimens.patch b/pkgs/tools/archivers/cpio/gnulib-futimens.patch deleted file mode 100644 index 11703d5706df..000000000000 --- a/pkgs/tools/archivers/cpio/gnulib-futimens.patch +++ /dev/null @@ -1,30 +0,0 @@ -now hat glibc-2.6 declares futimens. -http://lists.gnu.org/archive/html/bug-gnulib/2007-05/msg00089.html - -diff -ru cpio-2.7.orig/lib/utimens.c cpio-2.7/lib/utimens.c ---- cpio-2.7.orig/lib/utimens.c 2007-05-20 21:23:57.000000000 +0900 -+++ cpio-2.7/lib/utimens.c 2007-05-21 08:40:22.000000000 +0900 -@@ -73,7 +73,7 @@ - Return 0 on success, -1 (setting errno) on failure. */ - - int --futimens (int fd ATTRIBUTE_UNUSED, -+gl_futimens (int fd ATTRIBUTE_UNUSED, - char const *file, struct timespec const timespec[2]) - { - /* There's currently no interface to set file timestamps with -@@ -166,5 +166,5 @@ - int - utimens (char const *file, struct timespec const timespec[2]) - { -- return futimens (-1, file, timespec); -+ return gl_futimens (-1, file, timespec); - } -diff -ru cpio-2.7.orig/lib/utimens.h cpio-2.7/lib/utimens.h ---- cpio-2.7.orig/lib/utimens.h 2007-05-20 21:23:57.000000000 +0900 -+++ cpio-2.7/lib/utimens.h 2007-05-21 08:39:57.000000000 +0900 -@@ -1,3 +1,3 @@ - #include "timespec.h" --int futimens (int, char const *, struct timespec const [2]); -+int gl_futimens (int, char const *, struct timespec const [2]); - int utimens (char const *, struct timespec const [2]); diff --git a/pkgs/tools/archivers/cpio/symlink.patch b/pkgs/tools/archivers/cpio/symlink.patch deleted file mode 100644 index 89f82daa5221..000000000000 --- a/pkgs/tools/archivers/cpio/symlink.patch +++ /dev/null @@ -1,13 +0,0 @@ -http://lists.gnu.org/archive/html/bug-cpio/2006-11/msg00003.html - -diff -Ndpru cpio-2.7/src/copyout.c cpio-2.7.fixed/src/copyout.c ---- cpio-2.7/src/copyout.c 2006-09-27 02:19:44.000000000 -0600 -+++ cpio-2.7.fixed/src/copyout.c 2006-11-12 18:58:25.000000000 -0700 -@@ -806,6 +806,7 @@ process_copy_out () - free (link_name); - continue; - } -+ link_name[link_size] = '\0'; - cpio_safer_name_suffix (link_name, false, - !no_abs_paths_flag, true); - link_size = strlen (link_name); From 6e7217a2daff6c7bc08770e0dc204fb2c9885654 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:04:38 +0000 Subject: [PATCH 042/320] iputils: builder rewritten, open-max.patch added svn path=/nixpkgs/branches/stdenv-updates/; revision=9818 --- pkgs/os-specific/linux/iputils/builder.sh | 20 +++++-------- pkgs/os-specific/linux/iputils/default.nix | 2 +- pkgs/os-specific/linux/iputils/open-max.patch | 30 +++++++++++++++++++ 3 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 pkgs/os-specific/linux/iputils/open-max.patch diff --git a/pkgs/os-specific/linux/iputils/builder.sh b/pkgs/os-specific/linux/iputils/builder.sh index d1b05109aee3..b5219c3fefc7 100644 --- a/pkgs/os-specific/linux/iputils/builder.sh +++ b/pkgs/os-specific/linux/iputils/builder.sh @@ -1,20 +1,11 @@ source $stdenv/setup -tar zxvf $src -cd iputils +makeFlags="KERNEL_INCLUDE=$kernelHeaders/include LIBC_INCLUDE=$glibc/include" -sed -e "s^KERNEL_INCLUDE=.*$^KERNEL_INCLUDE=$kernelHeaders/include^" < Makefile > Makefile.new - -mv Makefile.new Makefile -sed -e "s^LIBC_INCLUDE=.*$^LIBC_INCLUDE=$glibc/include^" < Makefile > Makefile.new -mv Makefile.new Makefile - -#make ping arping tracepath -make - -mkdir -p $out/bin -mkdir -p $out/sbin +preConfigure="sed -e 's@check-kernel @@' -i Makefile" +installPhase=" +mkdir -pv $out/bin $out/sbin install -c arping $out/sbin/ install -c ping $out/bin/ install -c ping6 $out/sbin/ @@ -22,3 +13,6 @@ install -c rdisc $out/sbin/ install -c tracepath $out/sbin/ install -c tracepath6 $out/sbin/ install -c traceroute6 $out/sbin/ +"; + +genericBuild diff --git a/pkgs/os-specific/linux/iputils/default.nix b/pkgs/os-specific/linux/iputils/default.nix index c57cf68fd5dd..354419a4109c 100644 --- a/pkgs/os-specific/linux/iputils/default.nix +++ b/pkgs/os-specific/linux/iputils/default.nix @@ -11,5 +11,5 @@ stdenv.mkDerivation { }; inherit kernelHeaders glibc; - #buildInputs = [bison flex openssl]; + patches = [ ./open-max.patch ]; } diff --git a/pkgs/os-specific/linux/iputils/open-max.patch b/pkgs/os-specific/linux/iputils/open-max.patch new file mode 100644 index 000000000000..26bb95bd9d88 --- /dev/null +++ b/pkgs/os-specific/linux/iputils/open-max.patch @@ -0,0 +1,30 @@ +--- iputils-s20070202/rdisc.c.open-max 2007-08-07 11:34:03.000000000 +0200 ++++ iputils-s20070202/rdisc.c 2007-08-07 11:41:30.000000000 +0200 +@@ -240,14 +240,25 @@ + { + int t; + pid_t pid; +- ++ long open_max; ++ + if (trace) + return; + ++ if ((open_max = sysconf(_SC_OPEN_MAX)) == -1) { ++ if (errno == 0) { ++ (void) fprintf(stderr, "OPEN_MAX is not supported\n"); ++ } ++ else { ++ (void) fprintf(stderr, "sysconf() error\n"); ++ } ++ exit(1); ++ } ++ + if ((pid=fork()) != 0) + exit(0); + +- for (t = 0; t < OPEN_MAX; t++) ++ for (t = 0; t < open_max; t++) + if (t != s) + close(t); + From b2149510dff1f4d301d9352fceb51edb3c5c6c5f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:04:44 +0000 Subject: [PATCH 043/320] sysklogd: upgraded to 1.5 svn path=/nixpkgs/branches/stdenv-updates/; revision=9819 --- pkgs/os-specific/linux/sysklogd/builder.sh | 3 +- pkgs/os-specific/linux/sysklogd/default.nix | 7 +- .../linux/sysklogd/sysklogd-1.4.1-asm.patch | 12 - .../sysklogd-1.4.1-cvs-20050525-local.diff | 901 ------------------ 4 files changed, 5 insertions(+), 918 deletions(-) delete mode 100644 pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-asm.patch delete mode 100644 pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525-local.diff diff --git a/pkgs/os-specific/linux/sysklogd/builder.sh b/pkgs/os-specific/linux/sysklogd/builder.sh index 9f2b8d9282c8..62df45ea7c95 100644 --- a/pkgs/os-specific/linux/sysklogd/builder.sh +++ b/pkgs/os-specific/linux/sysklogd/builder.sh @@ -3,7 +3,8 @@ source $stdenv/setup prefix=$out export prefix -installFlags="BINDIR=$out/sbin MANDIR=$out/share/man" +installFlags="BINDIR=$out/sbin MANDIR=$out/share/man INSTALL=install" +patchPhase="sed -e 's@-o \${MAN_USER} -g \${MAN_GROUP} -m \${MAN_PERMS} @@' -i Makefile" ensureDir "$out/share/man/man8/" ensureDir "$out/share/man/man5/" diff --git a/pkgs/os-specific/linux/sysklogd/default.nix b/pkgs/os-specific/linux/sysklogd/default.nix index d991d7e653e1..2fe27add5bfb 100644 --- a/pkgs/os-specific/linux/sysklogd/default.nix +++ b/pkgs/os-specific/linux/sysklogd/default.nix @@ -1,11 +1,10 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "sysklogd-1.4.1"; + name = "sysklogd-1.5"; builder = ./builder.sh; src = fetchurl { - url = http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.4.1.tar.gz; - md5 = "d214aa40beabf7bdb0c9b3c64432c774"; + url = http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.tar.gz; + sha256 = "0wxpkrznqwz4dy11k90s2sqszwp7d4mlc0ag8288wa193plvhsb1"; }; - patches = [./sysklogd-1.4.1-cvs-20050525-local.diff ./sysklogd-1.4.1-asm.patch]; } diff --git a/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-asm.patch b/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-asm.patch deleted file mode 100644 index a66bf70542b5..000000000000 --- a/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-asm.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -ruN sysklogd-1.4.1/module.h sysklogd-1.4.1.new/module.h ---- sysklogd-1.4.1/module.h 2005-09-28 15:53:58.000000000 +0200 -+++ sysklogd-1.4.1.new/module.h 2005-09-28 15:54:56.000000000 +0200 -@@ -28,7 +28,7 @@ - * recent content from Linux 2.4/2.6. - */ - --#include -+/* #include */ - - #define MODULE_NAME_LEN 60 - diff --git a/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525-local.diff b/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525-local.diff deleted file mode 100644 index 5f36fc5e5358..000000000000 --- a/pkgs/os-specific/linux/sysklogd/sysklogd-1.4.1-cvs-20050525-local.diff +++ /dev/null @@ -1,901 +0,0 @@ -diff -ruN sysklogd-1.4.1/CHANGES sysklogd-1.4.1.new/CHANGES ---- sysklogd-1.4.1/CHANGES 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/CHANGES 2006-03-14 16:22:13.000000000 +0100 -@@ -1,3 +1,42 @@ -+Version 1.4.2 -+ -+ . Dmitry V. Levin -+ - Close file descriptor in FindSymbolFile() in ksym.c in order not to -+ leak file descriptors. -+ . Solar Designer -+ - improve crunch_list() -+ - Prevent potential buffer overflow in reading messages from the -+ kernel log ringbuffer. -+ - Ensure that "len" is not placed in a register, and that the -+ endtty() signal handler is not installed too early which could -+ cause a segmentation fault or worse. -+ . Steve Grubb -+ - fix memory calculation in crunch_list() -+ . Martin Schulze -+ - klogd will reconnect to the logger (mostly syslogd) after it went -+ away -+ - On heavily loaded system syslog will not spit out error messages -+ anymore when recvfrom() results in EAGAIN -+ - Makefile improvements -+ - Local copy of module.h -+ - Improved sysklogd.8 -+ - Always log with syslogd's timezone and locale -+ - Remove trailing newline when forwarding messages -+ . Jon Burgess -+ - Moved the installation of the signal handler up a little bit so it -+ guaranteed to be available when the child is forked, hence, fixing a -+ race condition. This used to create problems with UML and fast -+ machines. -+ . Greg Trounson -+ - Improved README.linux -+ . Ulf Härnhammar -+ - Bondary check for fscanf() in InitKsyms() and CheckMapVersion() -+ . Colin Phipps -+ - Don't block on the network socket in case of package los -+ . Dirk Mueller -+ - Don't crash when filesize limit is reached (e.g. without LFS) -+ -+ - Version 1.4.1 - - . klogd will set the console log level only if `-c' is given on the -@@ -30,3 +69,9 @@ - . Olaf Kirch - - Remove Unix Domain Sockets and switch to Datagram Unix Sockets - . Several bugfixes and improvements, please refer to the .c files -+ -+ -+Local variables: -+mode: indented-text -+fill-column: 72 -+End: -diff -ruN sysklogd-1.4.1/klogd.8 sysklogd-1.4.1.new/klogd.8 ---- sysklogd-1.4.1/klogd.8 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/klogd.8 2006-03-14 16:22:13.000000000 +0100 -@@ -3,8 +3,9 @@ - .\" Sun Jul 30 01:35:55 MET: Martin Schulze: Updates - .\" Sun Nov 19 23:22:21 MET: Martin Schulze: Updates - .\" Mon Aug 19 09:42:08 CDT 1996: Dr. G.W. Wettstein: Updates -+.\" Fri Mar 11 17:11:46 CET 2005: Martin Schulze: sysctl updates - .\" --.TH KLOGD 8 "21 August, 1999" "Version 1.4" "Linux System Administration" -+.TH KLOGD 8 "11 March 2005" "Version 1.4" "Linux System Administration" - .SH NAME - klogd \- Kernel Log Daemon - .LP -@@ -38,6 +39,12 @@ - .TP - .BI "\-c " n - Sets the default log level of console messages to \fIn\fR. -+This should nowardays be configured with the -+.BR sysctl (8) -+program, e.g. via -+.BI "sysctl kernel.printk=" n -+or via -+.IR /etc/sysctl.conf . - .TP - .B "\-d" - Enable debugging mode. This will generate \fBLOTS\fR of output to -@@ -321,7 +328,7 @@ - .B klogd - to reload the module symbol information whenever a protection fault - is detected. Caution should be used before invoking the program in --\'paranoid\' mode. The stability of the kernel and the operating -+\&'paranoid\&' mode. The stability of the kernel and the operating - environment is always under question when a protection fault occurs. - Since the klogd daemon must execute system calls in order to read the - module symbol information there is the possibility that the system may -diff -ruN sysklogd-1.4.1/klogd.c sysklogd-1.4.1.new/klogd.c ---- sysklogd-1.4.1/klogd.c 2001-03-11 20:40:10.000000000 +0100 -+++ sysklogd-1.4.1.new/klogd.c 2006-03-14 16:22:13.000000000 +0100 -@@ -243,6 +243,9 @@ - * people have submitted patches: Troels Walsted Hansen - * , Wolfgang Oertl - * and Thomas Roessler. -+ * Thu Apr 29 15:24:07 2004: Solar Designer -+ * Prevent potential buffer overflow in reading messages from the -+ * kernel log rinbuffer. - */ - - -@@ -938,7 +941,7 @@ - * messages into this fresh buffer. - */ - memset(log_buffer, '\0', sizeof(log_buffer)); -- if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer))) < 0 ) -+ if ( (rdcnt = ksyslog(2, log_buffer, sizeof(log_buffer)-1)) < 0 ) - { - if ( errno == EINTR ) - return; -diff -ruN sysklogd-1.4.1/ksym.c sysklogd-1.4.1.new/ksym.c ---- sysklogd-1.4.1/ksym.c 2000-09-12 23:53:31.000000000 +0200 -+++ sysklogd-1.4.1.new/ksym.c 2006-03-14 16:22:13.000000000 +0100 -@@ -105,6 +105,15 @@ - * - * Tue Sep 12 23:48:12 CEST 2000: Martin Schulze - * Close symbol file in InitKsyms() when an error occurred. -+ * -+ * Thu Apr 29 18:07:16 CEST 2004: Dmitry Levin -+ * Close file descriptor in FindSymbolFile() in order not to leak -+ * file descriptors. -+ * -+ * Fri Jul 16 08:32:49 CEST 2004: Ulf Härnhammar -+ * Added boundary check for fscanf() in InitKsyms() and -+ * CheckMapVersion() to prevent an unintended crash when reading -+ * an incorrect System.map. - */ - - -@@ -236,7 +245,7 @@ - */ - while ( !feof(sym_file) ) - { -- if ( fscanf(sym_file, "%lx %c %s\n", &address, &type, sym) -+ if ( fscanf(sym_file, "%lx %c %511s\n", &address, &type, sym) - != 3 ) - { - Syslog(LOG_ERR, "Error in symbol table input (#1)."); -@@ -344,6 +353,7 @@ - if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { - if (CheckMapVersion(symfile) == 1) - file = symfile; -+ fclose (sym_file); - } - if (sym_file == (FILE *) 0 || file == (char *) 0) { - sprintf (symfile, "%s", *mf); -@@ -352,6 +362,7 @@ - if ( (sym_file = fopen(symfile, "r")) != (FILE *) 0 ) { - if (CheckMapVersion(symfile) == 1) - file = symfile; -+ fclose (sym_file); - } - } - -@@ -533,7 +544,7 @@ - version = 0; - while ( !feof(sym_file) && (version == 0) ) - { -- if ( fscanf(sym_file, "%lx %c %s\n", &address, \ -+ if ( fscanf(sym_file, "%lx %c %511s\n", &address, \ - &type, sym) != 3 ) - { - Syslog(LOG_ERR, "Error in symbol table input (#2)."); -@@ -899,3 +910,11 @@ - return; - } - #endif -+ -+/* -+ * Local variables: -+ * c-indent-level: 8 -+ * c-basic-offset: 8 -+ * tab-width: 8 -+ * End: -+ */ -diff -ruN sysklogd-1.4.1/ksym_mod.c sysklogd-1.4.1.new/ksym_mod.c ---- sysklogd-1.4.1/ksym_mod.c 2000-09-12 23:15:28.000000000 +0200 -+++ sysklogd-1.4.1.new/ksym_mod.c 2006-03-14 16:22:13.000000000 +0100 -@@ -78,6 +78,11 @@ - * - * Tue Sep 12 23:11:13 CEST 2000: Martin Schulze - * Changed llseek() to lseek64() in order to skip a libc warning. -+ * -+ * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze -+ * Removed references to since it doesn't work -+ * anymore with its recent content from Linux 2.4/2.6, created -+ * module.h locally instead. - */ - - -@@ -89,11 +94,12 @@ - #include - #include - #include -+#include "module.h" - #if !defined(__GLIBC__) - #include --#include -+#include - #else /* __GLIBC__ */ --#include -+#include - extern __off64_t lseek64 __P ((int __fd, __off64_t __offset, int __whence)); - extern int get_kernel_syms __P ((struct kernel_sym *__table)); - #endif /* __GLIBC__ */ -@@ -107,7 +113,7 @@ - - #if !defined(__GLIBC__) - /* -- * The following bit uses some kernel/library magic to product what -+ * The following bit uses some kernel/library magic to produce what - * looks like a function call to user level code. This function is - * actually a system call in disguise. The purpose of the getsyms - * call is to return a current copy of the in-kernel symbol table. -diff -ruN sysklogd-1.4.1/Makefile sysklogd-1.4.1.new/Makefile ---- sysklogd-1.4.1/Makefile 1998-10-12 22:25:15.000000000 +0200 -+++ sysklogd-1.4.1.new/Makefile 2006-03-14 16:22:41.000000000 +0100 -@@ -4,12 +4,15 @@ - #CFLAGS= -g -DSYSV -Wall - #LDFLAGS= -g - CFLAGS= $(RPM_OPT_FLAGS) -O3 -DSYSV -fomit-frame-pointer -Wall -fno-strength-reduce -+# -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE - LDFLAGS= -s - - # Look where your install program is. --INSTALL = /usr/bin/install --BINDIR = /usr/sbin --MANDIR = /usr/man -+INSTALL = install -+ -+# Destination paths, set prefix=/opt if required -+BINDIR = $(prefix)/usr/sbin -+MANDIR = $(prefix)/usr/share/man - - # There is one report that under an all ELF system there may be a need to - # explicilty link with libresolv.a. If linking syslogd fails you may wish -@@ -34,8 +37,9 @@ - # The following define establishes ownership for the man pages. - # Avery tells me that there is a difference between Debian and - # Slackware. Rather than choose sides I am leaving it up to the user. --MAN_OWNER = root --# MAN_OWNER = man -+MAN_USER = root -+MAN_GROUP = root -+MAN_PERMS = 644 - - # The following define establishes the name of the pid file for the - # syslogd daemon. The library include file (paths.h) defines the -@@ -116,7 +120,7 @@ - ${INSTALL} -m 500 -s klogd ${BINDIR}/klogd - - install_man: -- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 sysklogd.8 ${MANDIR}/man8/sysklogd.8 -- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 syslogd.8 ${MANDIR}/man8/syslogd.8 -- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 syslog.conf.5 ${MANDIR}/man5/syslog.conf.5 -- ${INSTALL} -o ${MAN_OWNER} -g ${MAN_OWNER} -m 644 klogd.8 ${MANDIR}/man8/klogd.8 -+ ${INSTALL} -m ${MAN_PERMS} sysklogd.8 ${MANDIR}/man8/sysklogd.8 -+ ${INSTALL} -m ${MAN_PERMS} syslogd.8 ${MANDIR}/man8/syslogd.8 -+ ${INSTALL} -m ${MAN_PERMS} syslog.conf.5 ${MANDIR}/man5/syslog.conf.5 -+ ${INSTALL} -m ${MAN_PERMS} klogd.8 ${MANDIR}/man8/klogd.8 -diff -ruN sysklogd-1.4.1/module.h sysklogd-1.4.1.new/module.h ---- sysklogd-1.4.1/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ sysklogd-1.4.1.new/module.h 2006-03-14 16:22:13.000000000 +0100 -@@ -0,0 +1,90 @@ -+/* -+ module.h - Miscellaneous module definitions -+ Copyright (c) 1996 Richard Henderson -+ Copyright (c) 2004 Martin Schulze -+ -+ This file is part of the sysklogd package. -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -+*/ -+ -+/* ChangeLog: -+ * -+ * Wed Mar 31 17:35:01 CEST 2004: Martin Schulze -+ * Created local copy of module.h based on the content of Linux -+ * 2.2 since doesn't work anymore with its -+ * recent content from Linux 2.4/2.6. -+ */ -+ -+#include -+ -+#define MODULE_NAME_LEN 60 -+ -+struct kernel_sym -+{ -+ unsigned long value; -+ char name[MODULE_NAME_LEN]; -+}; -+ -+ -+struct list_head { -+ struct list_head *next, *prev; -+}; -+ -+ -+struct module_info -+{ -+ unsigned long addr; -+ unsigned long size; -+ unsigned long flags; -+ long usecount; -+}; -+ -+ -+struct module -+{ -+ unsigned long size_of_struct; /* == sizeof(module) */ -+ struct module *next; -+ const char *name; -+ unsigned long size; -+ -+ union -+ { -+ int usecount; -+ long pad; -+ } uc; /* Needs to keep its size - so says rth */ -+ -+ unsigned long flags; /* AUTOCLEAN et al */ -+ -+ unsigned nsyms; -+ unsigned ndeps; -+ -+ struct module_symbol *syms; -+ struct module_ref *deps; -+ struct module_ref *refs; -+ int (*init)(void); -+ void (*cleanup)(void); -+ const struct exception_table_entry *ex_table_start; -+ const struct exception_table_entry *ex_table_end; -+#ifdef __alpha__ -+ unsigned long gp; -+#endif -+ /* Members past this point are extensions to the basic -+ module support and are optional. Use mod_opt_member() -+ to examine them. */ -+ const struct module_persist *persist_start; -+ const struct module_persist *persist_end; -+ int (*can_unload)(void); -+}; -diff -ruN sysklogd-1.4.1/pidfile.c sysklogd-1.4.1.new/pidfile.c ---- sysklogd-1.4.1/pidfile.c 1998-02-10 23:37:12.000000000 +0100 -+++ sysklogd-1.4.1.new/pidfile.c 2006-03-14 16:22:13.000000000 +0100 -@@ -87,7 +87,7 @@ - int fd; - int pid; - -- if ( ((fd = open(pidfile, O_RDWR|O_CREAT, 0644)) == -1) -+ if ( ((fd = open(pidfile, O_RDWR|O_CREAT|O_TRUNC, 0644)) == -1) - || ((f = fdopen(fd, "r+")) == NULL) ) { - fprintf(stderr, "Can't open or create %s.\n", pidfile); - return 0; -diff -ruN sysklogd-1.4.1/README.1st sysklogd-1.4.1.new/README.1st ---- sysklogd-1.4.1/README.1st 1997-06-02 19:21:39.000000000 +0200 -+++ sysklogd-1.4.1.new/README.1st 2006-03-14 16:22:13.000000000 +0100 -@@ -1,5 +1,5 @@ --Very important information before using version 1.3 ----------------------------------------------------- -+Important information -+--------------------- - - The included version of syslogd behaves in a slightly different manner - to the one in former releases. Please review the following important -@@ -63,3 +63,10 @@ - these scripts should remove all old .pid files found in /var/run. - This will insure that klogd and syslogd start properly even if prior - executions have been terminated harshly. -+ -+* Large file support, i.e. support to write to log files that are -+ larger than 2 GB is not part of syslogd, but a matter of the Glibc -+ emitting different system calls to the kernel interface. To support -+ large files you'll have to compile syslogd with the compiler defines -+ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE so that glibc adjusts the -+ system calls. -diff -ruN sysklogd-1.4.1/README.linux sysklogd-1.4.1.new/README.linux ---- sysklogd-1.4.1/README.linux 1999-01-19 01:09:12.000000000 +0100 -+++ sysklogd-1.4.1.new/README.linux 2006-03-14 16:22:13.000000000 +0100 -@@ -40,12 +40,17 @@ - a useful addition to the software gene pool. - - There is a mailing list covering this package and syslog in general. --The lists address is sysklogd@Infodrom.North.DE . To subscribe send a --mail to Majordomo@Infodrom.North.DE with a line "subscribe sysklogd" -+The lists address is infodrom-sysklogd@lists.infodrom.org . To subscribe send a -+mail to majordomo@lists.infodrom.org with a line "subscribe infodrom-sysklogd" - in the message body. - --New versions of this package will be available at Joey's ftp server. --ftp://ftp.infodrom.north.de/pub/people/joey/sysklogd/ -+A second mailing list exists as infodrom-sysklogd-cvs@lists.infodrom.org. Only -+CVS messages and diffs are distributed there. Whenever new code is added to -+sysklogd, CVS generates a mail from these changes which will be sent to -+this list. Discussions will take place on the first list. -+ -+The latest version of this software can be found at: -+http://www.infodrom.org/projects/sysklogd/download.php3 - - Best regards, - -@@ -67,6 +72,6 @@ - - Martin Schulze - Infodrom Oldenburg --joey@linux.de -+joey@infodrom.org - --And a host of bug reporters whose contributions cannot be underestimated. -+And a number of bug reporters whose contributions cannot be underestimated. -diff -ruN sysklogd-1.4.1/sysklogd.8 sysklogd-1.4.1.new/sysklogd.8 ---- sysklogd-1.4.1/sysklogd.8 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/sysklogd.8 2006-03-14 16:22:13.000000000 +0100 -@@ -84,7 +84,7 @@ - .B MAXFUNIX - within the syslogd.c source file. An example for a chroot() daemon is - described by the people from OpenBSD at --http://www.psionic.com/papers/dns.html. -+. - .TP - .B "\-d" - Turns on debug mode. Using this the daemon will not proceed a -@@ -117,7 +117,8 @@ - between two \fI-- MARK --\fR lines is 20 minutes. This can be changed - with this option. Setting the - .I interval --to zero turns it off entirely. -+to zero turns it off entirely. Depending on other log messages -+generated these lines may not be written consecutively. - .TP - .B "\-n" - Avoid auto-backgrounding. This is needed especially if the -@@ -364,8 +365,10 @@ - - To avoid this in further times no messages that were received from a - remote host are sent out to another (or the same) remote host --anymore. If there are scenarios where this doesn't make sense, please --drop me (Joey) a line. -+anymore. If you experience are setup in which this doesn't make -+sense, please use the -+.B \-h -+commandline switch. - - If the remote host is located in the same domain as the host, - .B syslogd -diff -ruN sysklogd-1.4.1/syslog.c sysklogd-1.4.1.new/syslog.c ---- sysklogd-1.4.1/syslog.c 2001-03-11 20:35:51.000000000 +0100 -+++ sysklogd-1.4.1.new/syslog.c 2006-03-14 16:22:13.000000000 +0100 -@@ -47,6 +47,9 @@ - * Sun Mar 11 20:23:44 CET 2001: Martin Schulze - * Use SOCK_DGRAM for loggin, renables it to work. - * -+ * Wed Aug 27 17:48:16 CEST 2003: Martin Schulze -+ * Improved patch by Michael Pomraning to -+ * reconnect klogd to the logger after it went away. - */ - - #include -@@ -98,6 +101,7 @@ - register char *p; - time_t now; - int fd, saved_errno; -+ int result; - char tbuf[2048], fmt_cpy[1024], *stdp = (char *) 0; - - saved_errno = errno; -@@ -167,7 +171,16 @@ - } - - /* output the message to the local logger */ -- if (write(LogFile, tbuf, cnt + 1) >= 0 || !(LogStat&LOG_CONS)) -+ result = write(LogFile, tbuf, cnt + 1); -+ -+ if (result == -1 -+ && (errno == ECONNRESET || errno == ENOTCONN || errno == ECONNREFUSED)) { -+ closelog(); -+ openlog(LogTag, LogStat | LOG_NDELAY, LogFacility); -+ result = write(LogFile, tbuf, cnt + 1); -+ } -+ -+ if (result >= 0 || !(LogStat&LOG_CONS)) - return; - - /* -diff -ruN sysklogd-1.4.1/syslog.conf.5 sysklogd-1.4.1.new/syslog.conf.5 ---- sysklogd-1.4.1/syslog.conf.5 1999-08-21 12:49:14.000000000 +0200 -+++ sysklogd-1.4.1.new/syslog.conf.5 2006-03-14 16:22:13.000000000 +0100 -@@ -64,7 +64,7 @@ - The - .I facility - is one of the following keywords: --.BR auth ", " authpriv ", " cron ", " daemon ", " kern ", " lpr ", " -+.BR auth ", " authpriv ", " cron ", " daemon ", " ftp ", " kern ", " lpr ", " - .BR mail ", " mark ", " news ", " security " (same as " auth "), " - .BR syslog ", " user ", " uucp " and " local0 " through " local7 . - The keyword -@@ -121,12 +121,21 @@ - - This - .BR syslogd (8) --has a syntax extension to the original BSD source, that makes its use -+has a syntax extension to the original BSD source, which makes its use - more intuitively. You may precede every priority with an equation sign --(``='') to specify only this single priority and not any of the --above. You may also (both is valid, too) precede the priority with an --exclamation mark (``!'') to ignore all that priorities, either exact --this one or this and any higher priority. If you use both extensions -+(``='') to specify that -+.B syslogd -+should only refer to this single priority and not this priority and -+all higher priorities. -+ -+You may also precide the priority with an exclamation mark (``!'') if -+you want -+.B syslogd -+to ignore this priority and all higher priorities. -+You may even use both, the exclamation mark and the equation sign if -+you want -+.B syslogd -+to ignore only this single priority. If you use both extensions - than the exclamation mark must occur before the equation sign, just - use it intuitively. - -@@ -300,7 +309,7 @@ - .B syslogd - log all messages that come with either the - .BR info " or the " notice --facility into the file -+priority into the file - .IR /var/log/messages , - except for all messages that use the - .B mail -diff -ruN sysklogd-1.4.1/syslogd.c sysklogd-1.4.1.new/syslogd.c ---- sysklogd-1.4.1/syslogd.c 2001-03-11 20:40:10.000000000 +0100 -+++ sysklogd-1.4.1.new/syslogd.c 2006-03-14 16:22:13.000000000 +0100 -@@ -441,6 +441,39 @@ - * Don't return a closed fd if `-a' is called with a wrong path. - * Thanks to Bill Nottingham for providing - * a patch. -+ * Thu Apr 13 05:08:10 CEST 2001: Jon Burgess -+ * Moved the installation of the signal handler up a little bit -+ * so it guaranteed to be available when the child is forked, -+ * hence, fixing a race condition. This used to create problems -+ * with UML and fast machines. -+ * -+ * Sat Apr 17 18:03:05 CEST 2004: Steve Grubb -+ * Correct memory allocation for for commandline arguments in -+ * crunch_list(). -+ * -+ * Thu Apr 29 12:38:39 CEST 2004: Solar Designer -+ * Applied Openwall paranoia patches to improve crunch_list(). -+ * -+ * Tue May 4 16:47:30 CEST 2004: Solar Designer -+ * Ensure that "len" is not placed in a register, and that the -+ * endtty() signal handler is not installed too early which could -+ * cause a segmentation fault or worse. -+ * -+ * Tue May 4 16:52:01 CEST 2004: Solar Designer -+ * Adjust the size of a variable to prevent a buffer overflow -+ * should _PATH_DEV ever contain something different than "/dev/". -+ * -+ * Tue Nov 2 20:28:23 CET 2004: Colin Phipps -+ * Don't block on the network socket, in case a packet gets lost -+ * between select and recv. -+ * -+ * Sun Nov 7 12:28:47 CET 2004: Martin Schulze -+ * Discard any timestamp information found in received syslog -+ * messages. This will affect local messages sent from a -+ * different timezone. -+ * -+ * Sun Nov 7 13:47:00 CET 2004: Martin Schulze -+ * Remove trailing newline when forwarding messages. - */ - - -@@ -890,11 +923,11 @@ - dprintf("Checking pidfile.\n"); - if (!check_pid(PidFile)) - { -+ signal (SIGTERM, doexit); - if (fork()) { - /* - * Parent process - */ -- signal (SIGTERM, doexit); - sleep(300); - /* - * Not reached unless something major went wrong. 5 -@@ -992,6 +1025,7 @@ - (void) signal(SIGCHLD, reapchild); - (void) signal(SIGALRM, domark); - (void) signal(SIGUSR1, Debug ? debug_switch : SIG_IGN); -+ (void) signal(SIGXFSZ, SIG_IGN); - (void) alarm(TIMERINTVL); - - /* Create a partial message table for all file descriptors. */ -@@ -1141,13 +1175,13 @@ - */ - printchopped(from, line, \ - i + 2, finet); -- } else if (i < 0 && errno != EINTR) { -+ } else if (i < 0 && errno != EINTR && errno != EAGAIN) { - dprintf("INET socket error: %d = %s.\n", \ - errno, strerror(errno)); - logerror("recvfrom inet"); - /* should be harmless now that we set - * BSDCOMPAT on the socket */ -- sleep(10); -+ sleep(1); - } - } - #endif -@@ -1216,6 +1250,7 @@ - { - int fd, on = 1; - struct sockaddr_in sin; -+ int sockflags; - - fd = socket(AF_INET, SOCK_DGRAM, 0); - if (fd < 0) { -@@ -1241,6 +1276,24 @@ - close(fd); - return -1; - } -+ /* We must not block on the network socket, in case a packet -+ * gets lost between select and recv, otherise the process -+ * will stall until the timeout, and other processes trying to -+ * log will also stall. -+ */ -+ if ((sockflags = fcntl(fd, F_GETFL)) != -1) { -+ sockflags |= O_NONBLOCK; -+ /* -+ * SETFL could fail too, so get it caught by the subsequent -+ * error check. -+ */ -+ sockflags = fcntl(fd, F_SETFL, sockflags); -+ } -+ if (sockflags == -1) { -+ logerror("fcntl(O_NONBLOCK), suspending inet"); -+ close(fd); -+ return -1; -+ } - if (bind(fd, (struct sockaddr *) &sin, sizeof(sin)) < 0) { - logerror("bind, suspending inet"); - close(fd); -@@ -1254,30 +1307,26 @@ - crunch_list(list) - char *list; - { -- int count, i; -+ int i, m, n; - char *p, *q; - char **result = NULL; - - p = list; - - /* strip off trailing delimiters */ -- while (p[strlen(p)-1] == LIST_DELIMITER) { -- count--; -+ while (*p && p[strlen(p)-1] == LIST_DELIMITER) - p[strlen(p)-1] = '\0'; -- } - /* cut off leading delimiters */ -- while (p[0] == LIST_DELIMITER) { -- count--; -+ while (p[0] == LIST_DELIMITER) - p++; -- } - -- /* count delimiters to calculate elements */ -- for (count=i=0; p[i]; i++) -- if (p[i] == LIST_DELIMITER) count++; -+ /* count delimiters to calculate the number of elements */ -+ for (n = i = 0; p[i]; i++) -+ if (p[i] == LIST_DELIMITER) n++; - -- if ((result = (char **)malloc(sizeof(char *) * count+2)) == NULL) { -+ if ((result = (char **)malloc(sizeof(char *) * (n + 2))) == NULL) { - printf ("Sorry, can't get enough memory, exiting.\n"); -- exit(0); -+ exit(1); - } - - /* -@@ -1285,30 +1334,28 @@ - * characters are different from any delimiters, - * so we don't have to care about this. - */ -- count = 0; -- while ((q=strchr(p, LIST_DELIMITER))) { -- result[count] = (char *) malloc((q - p + 1) * sizeof(char)); -- if (result[count] == NULL) { -+ m = 0; -+ while ((q = strchr(p, LIST_DELIMITER)) && m < n) { -+ result[m] = (char *) malloc((q - p + 1) * sizeof(char)); -+ if (result[m] == NULL) { - printf ("Sorry, can't get enough memory, exiting.\n"); -- exit(0); -+ exit(1); - } -- strncpy(result[count], p, q - p); -- result[count][q - p] = '\0'; -+ memcpy(result[m], p, q - p); -+ result[m][q - p] = '\0'; - p = q; p++; -- count++; -+ m++; - } -- if ((result[count] = \ -- (char *)malloc(sizeof(char) * strlen(p) + 1)) == NULL) { -+ if ((result[m] = strdup(p)) == NULL) { - printf ("Sorry, can't get enough memory, exiting.\n"); -- exit(0); -+ exit(1); - } -- strcpy(result[count],p); -- result[++count] = NULL; -+ result[++m] = NULL; - - #if 0 -- count=0; -- while (result[count]) -- dprintf ("#%d: %s\n", count, StripDomains[count++]); -+ m = 0; -+ while (result[m]) -+ dprintf ("#%d: %s\n", m, result[m++]); - #endif - return result; - } -@@ -1539,30 +1586,48 @@ - int fac, prilev, lognum; - int msglen; - char *timestamp; -+#ifdef __gnu_linux__ -+ sigset_t mask; -+#else -+#ifndef SYSV -+ sigset_t omask; -+#endif -+#endif - - dprintf("logmsg: %s, flags %x, from %s, msg %s\n", textpri(pri), flags, from, msg); - -+#ifdef __gnu_linux__ -+ sigemptyset(&mask); -+ sigaddset(&mask, SIGHUP); -+ sigaddset(&mask, SIGALRM); -+ sigprocmask(SIG_BLOCK, &mask, NULL); -+#else - #ifndef SYSV - omask = sigblock(sigmask(SIGHUP)|sigmask(SIGALRM)); - #endif -+#endif - - /* - * Check to see if msg looks non-standard. -+ * -+ * A message looks like -+ * Nov 17 11:42:33 CRON[ -+ * 01234567890123456 -+ * ^ ^ ^ ^ ^ -+ * -+ * Remote messages are not accompanied by a timestamp. -+ * Local messages are accompanied by a timestamp (program's timezone) - */ - msglen = strlen(msg); -- if (msglen < 16 || msg[3] != ' ' || msg[6] != ' ' || -- msg[9] != ':' || msg[12] != ':' || msg[15] != ' ') -- flags |= ADDDATE; -- -- (void) time(&now); -- if (flags & ADDDATE) -- timestamp = ctime(&now) + 4; -- else { -- timestamp = msg; -+ if (!(msglen < 16 || msg[3] != ' ' || msg[6] != ' ' || -+ msg[9] != ':' || msg[12] != ':' || msg[15] != ' ')) { - msg += 16; - msglen -= 16; - } - -+ (void) time(&now); -+ timestamp = ctime(&now) + 4; -+ - /* extract facility and priority level */ - if (flags & MARK) - fac = LOG_NFACILITIES; -@@ -1581,9 +1646,13 @@ - (void) close(f->f_file); - f->f_file = -1; - } -+#ifdef __gnu_linux__ -+ sigprocmask(SIG_UNBLOCK, &mask, NULL); -+#else - #ifndef SYSV - (void) sigsetmask(omask); - #endif -+#endif - return; - } - #ifdef SYSV -@@ -1646,9 +1715,13 @@ - } - } - } -+#ifdef __gnu_linux__ -+ sigprocmask(SIG_UNBLOCK, &mask, NULL); -+#else - #ifndef SYSV - (void) sigsetmask(omask); - #endif -+#endif - } - #if FALSE - } /* balance parentheses for emacs */ -@@ -1771,7 +1844,7 @@ - dprintf("Not sending message to remote.\n"); - else { - f->f_time = now; -- (void) snprintf(line, sizeof(line), "<%d>%s\n", f->f_prevpri, \ -+ (void) snprintf(line, sizeof(line), "<%d>%s", f->f_prevpri, \ - (char *) iov[4].iov_base); - l = strlen(line); - if (l > MAXLINE) -@@ -1815,7 +1888,7 @@ - v->iov_len = 1; - } - again: -- /* f->f_file == -1 is an indicator that the we couldn't -+ /* f->f_file == -1 is an indicator that we couldn't - open the file at startup. */ - if (f->f_file == -1) - break; -@@ -1852,7 +1925,7 @@ - errno = e; - logerror(f->f_un.f_fname); - } -- } else if (f->f_flags & SYNC_FILE) -+ } else if (f->f_type == F_FILE && (f->f_flags & SYNC_FILE)) - (void) fsync(f->f_file); - break; - -@@ -1891,7 +1964,7 @@ - register struct filed *f; - struct iovec *iov; - { -- char p[6 + UNAMESZ]; -+ char p[sizeof (_PATH_DEV) + UNAMESZ]; - register int i; - int ttyf, len; - static int reenter = 0; -@@ -1899,6 +1972,8 @@ - struct utmp *uptr; - char greetings[200]; - -+ (void) &len; -+ - if (reenter++) - return; - -@@ -1913,7 +1988,6 @@ - if (fork() == 0) { - (void) signal(SIGTERM, SIG_DFL); - (void) alarm(0); -- (void) signal(SIGALRM, endtty); - #ifndef SYSV - (void) signal(SIGTTOU, SIG_IGN); - (void) sigsetmask(0); -@@ -1929,7 +2003,7 @@ - /* is this slot used? */ - if (ut.ut_name[0] == '\0') - continue; -- if (ut.ut_type == LOGIN_PROCESS) -+ if (ut.ut_type != USER_PROCESS) - continue; - if (!(strcmp (ut.ut_name,"LOGIN"))) /* paranoia */ - continue; -@@ -1959,6 +2033,7 @@ - iov[1].iov_len = 0; - } - if (setjmp(ttybuf) == 0) { -+ (void) signal(SIGALRM, endtty); - (void) alarm(15); - /* open the terminal */ - ttyf = open(p, O_WRONLY|O_NOCTTY); From c4640d5f49760a791f91368e7c00fc118826e93b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:05:06 +0000 Subject: [PATCH 044/320] reiserfsprogs: headers-fix.patch added svn path=/nixpkgs/branches/stdenv-updates/; revision=9820 --- .../linux/reiserfsprogs/default.nix | 5 +++-- .../linux/reiserfsprogs/headers-fix.patch | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch diff --git a/pkgs/os-specific/linux/reiserfsprogs/default.nix b/pkgs/os-specific/linux/reiserfsprogs/default.nix index 49d018175d2c..324ba28524c4 100644 --- a/pkgs/os-specific/linux/reiserfsprogs/default.nix +++ b/pkgs/os-specific/linux/reiserfsprogs/default.nix @@ -7,9 +7,10 @@ stdenv.mkDerivation { sha256 = "1gv8gr0l5l2j52540y2wj9c9h7fn0r3vabykf95748ydmr9jr1n0"; }; + patches = [./headers-fix.patch]; + meta = { homepage=http://www.namesys.com/; - description="Reiserfs Utilities"; - license="GPL-2"; + }; } diff --git a/pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch b/pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch new file mode 100644 index 000000000000..2c6693dae75c --- /dev/null +++ b/pkgs/os-specific/linux/reiserfsprogs/headers-fix.patch @@ -0,0 +1,19 @@ +diff -pruN 1:3.6.19-4/include/reiserfs_fs.h 1:3.6.19-4ubuntu2/include/reiserfs_fs.h +--- 1:3.6.19-4/include/reiserfs_fs.h 2004-09-16 08:49:05.000000000 +0100 ++++ 1:3.6.19-4ubuntu2/include/reiserfs_fs.h 2006-12-14 18:08:28.000000000 +0000 +@@ -38,15 +38,10 @@ + # define extern_inline + #endif + +-#include +- + #ifndef get_unaligned +-#if defined(__ppc__) || defined(ppc) || defined(__ppc) || \ +- defined(__PPC) || defined(powerpc) || defined(__powerpc__) + # define get_unaligned(ptr) (*(ptr)) + # define put_unaligned(val,ptr) ((void)(*(ptr) = (val))) + #endif +-#endif + + #define get_leXX(xx,p,field) (le##xx##_to_cpu ((p)->field)) + #define set_leXX(xx,p,field,val) do { (p)->field = cpu_to_le##xx(val); } while (0) From 62676e09ebbc8608ae9fdf295406be9da9511a99 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:05:26 +0000 Subject: [PATCH 045/320] setup-hooks using addToSearchPath I've accidentially reverted setup-hooks while merging with trunk. Correcting it. svn path=/nixpkgs/branches/stdenv-updates/; revision=9821 --- pkgs/development/interpreters/perl/setup-hook.sh | 4 +--- .../interpreters/python/2.5/setup-hook.sh | 5 +---- .../development/interpreters/python/setup-hook.sh | 5 +---- .../tools/build-managers/cmake/setup-hook.sh | 15 ++++++++------- .../development/tools/misc/automake/setup-hook.sh | 4 +--- pkgs/development/tools/misc/pkgconfig/builder.sh | 10 ---------- pkgs/development/tools/misc/pkgconfig/default.nix | 8 ++++---- .../tools/misc/pkgconfig/setup-hook.sh | 4 +--- 8 files changed, 17 insertions(+), 38 deletions(-) delete mode 100644 pkgs/development/tools/misc/pkgconfig/builder.sh diff --git a/pkgs/development/interpreters/perl/setup-hook.sh b/pkgs/development/interpreters/perl/setup-hook.sh index 1f05581df97a..6903bddd4199 100644 --- a/pkgs/development/interpreters/perl/setup-hook.sh +++ b/pkgs/development/interpreters/perl/setup-hook.sh @@ -1,7 +1,5 @@ addPerlLibPath () { - if test -d $1/lib/site_perl; then - export PERL5LIB="${PERL5LIB}${PERL5LIB:+:}$1/lib/site_perl" - fi + addToSearchPath PERL5LIB /lib/site_perl "" $1 } envHooks=(${envHooks[@]} addPerlLibPath) diff --git a/pkgs/development/interpreters/python/2.5/setup-hook.sh b/pkgs/development/interpreters/python/2.5/setup-hook.sh index 11551235c1f8..27ad62260301 100644 --- a/pkgs/development/interpreters/python/2.5/setup-hook.sh +++ b/pkgs/development/interpreters/python/2.5/setup-hook.sh @@ -1,8 +1,5 @@ addPythonPath() { - local p=$1/lib/python2.5/site-packages - if test -d $p; then - export PYTHONPATH="${PYTHONPATH}${PYTHONPATH:+:}$p" - fi + addToSearchPathWithCustomDelimiter : PYTHONPATH /lib/python2.5/site-packages "" $1 } toPythonPath() { diff --git a/pkgs/development/interpreters/python/setup-hook.sh b/pkgs/development/interpreters/python/setup-hook.sh index 3bc86c582298..58b8d1cab760 100644 --- a/pkgs/development/interpreters/python/setup-hook.sh +++ b/pkgs/development/interpreters/python/setup-hook.sh @@ -1,8 +1,5 @@ addPythonPath() { - local p=$1/lib/python2.4/site-packages - if test -d $p; then - export PYTHONPATH="${PYTHONPATH}${PYTHONPATH:+:}$p" - fi + addToSearchPathWithCustomDelimiter : PYTHONPATH /lib/python2.4/site-packages "" $1 } toPythonPath() { diff --git a/pkgs/development/tools/build-managers/cmake/setup-hook.sh b/pkgs/development/tools/build-managers/cmake/setup-hook.sh index f65b09f88d4a..4712ef2b6483 100755 --- a/pkgs/development/tools/build-managers/cmake/setup-hook.sh +++ b/pkgs/development/tools/build-managers/cmake/setup-hook.sh @@ -1,15 +1,16 @@ addCMakeParamsInclude() { - if [ -d $1/include ]; then - export CMAKE_INCLUDE_PATH="${CMAKE_INCLUDE_PATH}${CMAKE_INCLUDE_PATH:+:}$1/include" - fi + addToSearchPath CMAKE_INCLUDE_PATH /include "" $1 } addCMakeParamsLibs() { - if [ -d $1/lib ]; then - export CMAKE_LIBRARY_PATH="${CMAKE_LIBRARY_PATH}${CMAKE_LIBRARY_PATH:+:}$1/lib" - fi + addToSearchPath CMAKE_LIBRARY_PATH /lib "" $1 +} + +addCMakeModulePath() +{ + addToSearchPath CMAKE_MODULE_PATH /share/cmake-2.4/Modules "" $1 } fixCmakeFiles() @@ -45,4 +46,4 @@ if [ -z "$noCmakeTewaks" ]; then postUnpack="cmakePostUnpack${postUnpack:+; }${postUnpack}" fi; -envHooks=(${envHooks[@]} addCMakeParamsInclude addCMakeParamsLibs) +envHooks=(${envHooks[@]} addCMakeParamsInclude addCMakeParamsLibs addCMakeModulePath) diff --git a/pkgs/development/tools/misc/automake/setup-hook.sh b/pkgs/development/tools/misc/automake/setup-hook.sh index 097b7b6cbe57..4489d343510d 100644 --- a/pkgs/development/tools/misc/automake/setup-hook.sh +++ b/pkgs/development/tools/misc/automake/setup-hook.sh @@ -1,7 +1,5 @@ addAclocals () { - if test -d $1/share/aclocal; then - export ACLOCAL_PATH="$ACLOCAL_PATH${ACLOCAL_PATH:+:}$1/share/aclocal" - fi + addToSearchPathWithCustomDelimiter : ACLOCAL_PATH /share/aclocal "" $1 } envHooks=(${envHooks[@]} addAclocals) diff --git a/pkgs/development/tools/misc/pkgconfig/builder.sh b/pkgs/development/tools/misc/pkgconfig/builder.sh deleted file mode 100644 index 6d281da71e4d..000000000000 --- a/pkgs/development/tools/misc/pkgconfig/builder.sh +++ /dev/null @@ -1,10 +0,0 @@ -source $stdenv/setup - -postInstall() { - test -x $out/nix-support || mkdir $out/nix-support - cp $setupHook $out/nix-support/setup-hook -} -postInstall=postInstall - -genericBuild - diff --git a/pkgs/development/tools/misc/pkgconfig/default.nix b/pkgs/development/tools/misc/pkgconfig/default.nix index be8c4febe03a..41a61f600e04 100644 --- a/pkgs/development/tools/misc/pkgconfig/default.nix +++ b/pkgs/development/tools/misc/pkgconfig/default.nix @@ -1,12 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "pkgconfig-0.21"; - builder = ./builder.sh; + name = "pkgconfig-0.22"; setupHook = ./setup-hook.sh; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/pkg-config-0.21.tar.gz; - md5 = "476f45fab1504aac6697aa7785f0ab91"; + url = http://pkgconfig.freedesktop.org/releases/pkg-config-0.22.tar.gz; + sha256 = "1rpb5wygmp0f8nal7y3ga4556i7hkjdslv3wdq04fj30gns621vy"; }; patches = [ @@ -19,3 +18,4 @@ stdenv.mkDerivation { }) ]; } + diff --git a/pkgs/development/tools/misc/pkgconfig/setup-hook.sh b/pkgs/development/tools/misc/pkgconfig/setup-hook.sh index f9e7805ccbf7..f13a44eb9995 100644 --- a/pkgs/development/tools/misc/pkgconfig/setup-hook.sh +++ b/pkgs/development/tools/misc/pkgconfig/setup-hook.sh @@ -1,7 +1,5 @@ addPkgConfigPath () { - if test -d $1/lib/pkgconfig; then - export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$1/lib/pkgconfig" - fi + addToSearchPath PKG_CONFIG_PATH /lib/pkgconfig "" $1 } envHooks=(${envHooks[@]} addPkgConfigPath) From c116932a7ecabb39ddde12d6571d33365cfca0af Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:05:35 +0000 Subject: [PATCH 046/320] swig: upgrade to 1.3.33 svn path=/nixpkgs/branches/stdenv-updates/; revision=9822 --- pkgs/development/tools/misc/swig/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/misc/swig/default.nix b/pkgs/development/tools/misc/swig/default.nix index e8e77924b8c8..ca6aa2d2fced 100644 --- a/pkgs/development/tools/misc/swig/default.nix +++ b/pkgs/development/tools/misc/swig/default.nix @@ -6,12 +6,12 @@ assert pythonSupport -> python != null; assert javaSupport -> jdk != null; stdenv.mkDerivation { - name = "swig-1.3.31"; + name = "swig-1.3.33"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/swig/swig-1.3.31.tar.gz; - sha256 = "01fqf6xvhaqh76kh13bknn5j7axpm1pdnjpzwxsa9d1lbq4n7bf2"; + url = "mirror://sourceforge/swig/swig-1.3.33.tar.gz"; + sha256 = "02rz31i642sbsngny7k98d9hxlkcb9snvbzlnz3sh0qiyr3ciggv"; }; inherit perlSupport pythonSupport javaSupport; From 95f5f51bae89dca29c0c33e1dd5a36237ff14a42 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:05:42 +0000 Subject: [PATCH 047/320] X.Org builder: always autoPropagate buildInputs svn path=/nixpkgs/branches/stdenv-updates/; revision=9823 --- pkgs/servers/x11/xorg/builder.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkgs/servers/x11/xorg/builder.sh b/pkgs/servers/x11/xorg/builder.sh index 8bde2867e10e..0a145cc0a6c5 100644 --- a/pkgs/servers/x11/xorg/builder.sh +++ b/pkgs/servers/x11/xorg/builder.sh @@ -4,11 +4,13 @@ source $stdenv/setup # After installation, automatically add all "Requires" fields in the # pkgconfig files (*.pc) to the propagated build inputs. -origPostInstall=$postInstall -postInstall=postInstall -postInstall() { - if test -n "$origPostInstall"; then eval "$origPostInstall"; fi +if test -n "$postInstall"; then + postInstall="$postInstall; autoPropagateBuildInputs" +else + postInstall=autoPropagateBuildInputs +fi +autoPropagateBuildInputs() { local r p requires requires=$(grep "Requires:" $out/lib/pkgconfig/*.pc | \ sed "s/Requires://" | sed "s/,/ /g") From 216657f62ef53ce8cc8ee6e5a63bba91f4b4bf99 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:29:14 +0000 Subject: [PATCH 048/320] setup-hooks using addToSearchPath I've accidentially reverted setup-hooks while merging with trunk. Correcting it. svn path=/nixpkgs/branches/stdenv-updates/; revision=9824 --- pkgs/development/tools/misc/pkgconfig/default.nix | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/pkgs/development/tools/misc/pkgconfig/default.nix b/pkgs/development/tools/misc/pkgconfig/default.nix index 41a61f600e04..b0bbc1cc5137 100644 --- a/pkgs/development/tools/misc/pkgconfig/default.nix +++ b/pkgs/development/tools/misc/pkgconfig/default.nix @@ -7,15 +7,5 @@ stdenv.mkDerivation { url = http://pkgconfig.freedesktop.org/releases/pkg-config-0.22.tar.gz; sha256 = "1rpb5wygmp0f8nal7y3ga4556i7hkjdslv3wdq04fj30gns621vy"; }; - - patches = [ - # Process Requires.private properly, see - # http://bugs.freedesktop.org/show_bug.cgi?id=4738. - (fetchurl { - name = "pkgconfig-8494.patch"; - url = http://bugs.freedesktop.org/attachment.cgi?id=8494; - sha256 = "1pcrdbb7dypg2biy0yqc7bdxak5zii8agqljdvk7j4wbyghpqzws"; - }) - ]; } From aca855729f6d380ffc35a280f1d9fd4b2e89924b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:29:21 +0000 Subject: [PATCH 049/320] Configuration style of the kernel changed. The main goal is to remove code duplication. Some patches lost during this reorganizing. svn path=/nixpkgs/branches/stdenv-updates/; revision=9825 --- pkgs/os-specific/linux/kernel/2.6.20.nix | 37 + pkgs/os-specific/linux/kernel/2.6.21-ck.nix | 13 + pkgs/os-specific/linux/kernel/2.6.21.nix | 45 + pkgs/os-specific/linux/kernel/2.6.22-ck.nix | 13 + pkgs/os-specific/linux/kernel/2.6.22.nix | 28 + pkgs/os-specific/linux/kernel/2.6.23.1.nix | 41 + .../linux/kernel/config-2.6.23.1-i686-smp | 3756 +++++++++++++++++ pkgs/os-specific/linux/kernel/default.nix | 29 + .../os-specific/linux/kernel/linux-2.6.20.nix | 76 - .../os-specific/linux/kernel/linux-2.6.21.nix | 76 - .../os-specific/linux/kernel/linux-2.6.22.nix | 84 - .../kernel/{linux-2.6.23.nix => meta.nix} | 46 +- pkgs/top-level/all-packages.nix | 182 +- 13 files changed, 3975 insertions(+), 451 deletions(-) create mode 100644 pkgs/os-specific/linux/kernel/2.6.20.nix create mode 100644 pkgs/os-specific/linux/kernel/2.6.21-ck.nix create mode 100644 pkgs/os-specific/linux/kernel/2.6.21.nix create mode 100644 pkgs/os-specific/linux/kernel/2.6.22-ck.nix create mode 100644 pkgs/os-specific/linux/kernel/2.6.22.nix create mode 100644 pkgs/os-specific/linux/kernel/2.6.23.1.nix create mode 100644 pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp create mode 100644 pkgs/os-specific/linux/kernel/default.nix delete mode 100644 pkgs/os-specific/linux/kernel/linux-2.6.20.nix delete mode 100644 pkgs/os-specific/linux/kernel/linux-2.6.21.nix delete mode 100644 pkgs/os-specific/linux/kernel/linux-2.6.22.nix rename pkgs/os-specific/linux/kernel/{linux-2.6.23.nix => meta.nix} (50%) diff --git a/pkgs/os-specific/linux/kernel/2.6.20.nix b/pkgs/os-specific/linux/kernel/2.6.20.nix new file mode 100644 index 000000000000..4b776dcb7062 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.20.nix @@ -0,0 +1,37 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.20.12"; + src_hash = { sha256 = "1s7vdpg2897q5pcyxxypqcnibwpbdawbimkf3pngmahj8wr9c03x"; }; + + systemPatches = [ + { name = "paravirt-nvidia"; + patch = ./2.6.20-paravirt-nvidia.patch; + } + { name = "skas-2.6.20-v9-pre9"; + patch = args.fetchurl { + url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; + md5 = "02e619e5b3aaf0f9768f03ac42753e74"; + }; + extraConfig = + "CONFIG_PROC_MM=y\n" + + "# CONFIG_PROC_MM_DUMPABLE is not set\n"; + } + { name = "fbsplash-0.9.2-r5-2.6.20-rc6"; + patch = args.fetchurl { + url = http://dev.gentoo.org/~spock/projects/gensplash/archive/fbsplash-0.9.2-r5-2.6.20-rc6.patch; + sha256 = "11v4f85f4jnh9sbhqcyn47krb7l1czgzjw3w8wgbq14jm0sp9294"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + + config = with args; + if kernelConfig != null then kernelConfig else + if userModeLinux then ./config-2.6.20-uml else + if stdenv.system == "i686-linux" then ./config-2.6.20-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.20-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) diff --git a/pkgs/os-specific/linux/kernel/2.6.21-ck.nix b/pkgs/os-specific/linux/kernel/2.6.21-ck.nix new file mode 100644 index 000000000000..6352d39edb14 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.21-ck.nix @@ -0,0 +1,13 @@ +args: +(import ./2.6.21.nix) +( args // + { + extraPatches = (if (args ? extraPatches) args.extraPatches else []) ++ + [ + { + name = "Con Kolivas Patch"; + patch = ./patch-2.6.21-ck1; + } + ]; + } +) diff --git a/pkgs/os-specific/linux/kernel/2.6.21.nix b/pkgs/os-specific/linux/kernel/2.6.21.nix new file mode 100644 index 000000000000..7005671bf2db --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.21.nix @@ -0,0 +1,45 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.21.7"; + src_hash = { sha256 = "1c8ndsz35qd8vyng3xsxjjkjv5bnzyvc9b5vd85fz5v0bjp8hx50"; }; + + systemPatches = [ + { name = "ext3cow"; + patch = ./linux-2.6.21.7-ext3cow_wouter.patch; + extraConfig = + "CONFIG_EXT3COW_FS=m\n" + + "CONFIG_EXT3COW_FS_XATTR=y\n" + + "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" + + "CONFIG_EXT3COW_FS_SECURITY=y\n"; + } + { name = "paravirt-nvidia"; + patch = ./2.6.20-paravirt-nvidia.patch; + } + { name = "skas-2.6.20-v9-pre9"; + patch = fetchurl { + url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; + md5 = "02e619e5b3aaf0f9768f03ac42753e74"; + }; + extraConfig = + "CONFIG_PROC_MM=y\n" + + "# CONFIG_PROC_MM_DUMPABLE is not set\n"; + } + { name = "fbsplash-0.9.2-r5-2.6.21"; + patch = fetchurl { + url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch; + sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + + config = with args; + if kernelConfig != null then kernelConfig else + if userModeLinux then ./config-2.6.21-uml else + if stdenv.system == "i686-linux" then ./config-2.6.21-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.21-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) diff --git a/pkgs/os-specific/linux/kernel/2.6.22-ck.nix b/pkgs/os-specific/linux/kernel/2.6.22-ck.nix new file mode 100644 index 000000000000..75352da8dbcd --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.22-ck.nix @@ -0,0 +1,13 @@ +args: +(import ./2.6.22.nix) +( args // + { + extraPatches = (if (args ? extraPatches) args.extraPatches else []) ++ + [ + { + name = "Con Kolivas Patch"; + patch = ./patch-2.6.21-ck1; + } + ]; + } +) diff --git a/pkgs/os-specific/linux/kernel/2.6.22.nix b/pkgs/os-specific/linux/kernel/2.6.22.nix new file mode 100644 index 000000000000..43cbc4852514 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.22.nix @@ -0,0 +1,28 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.22.10"; + src_hash = { sha256 = "0kh196qzm54mvnbrdr9s2q86l9yn2321gnsl5xq44ai2idqp044g"; }; + + systemPatches = [ + { name = "paravirt-nvidia"; + patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; + } + { name = "fbsplash-0.9.2-r5-2.6.21"; + patch = fetchurl { + url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; + sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + + config = with args; + if kernelConfig != null then kernelConfig else + if userModeLinux then ./config-2.6.22-uml else + if stdenv.system == "i686-linux" then ./config-2.6.22-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.22-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) diff --git a/pkgs/os-specific/linux/kernel/2.6.23.1.nix b/pkgs/os-specific/linux/kernel/2.6.23.1.nix new file mode 100644 index 000000000000..9ba12173a115 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.23.1.nix @@ -0,0 +1,41 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.23.1"; + src_hash = { sha256 = "0737g83h7jbrlss8782b17mhc3nfn8qfbh5s71flz8pjxmbbmg1m"; }; + + systemPatches = [ + { name = "paravirt-nvidia"; + patch = ./2.6.22-paravirt-nvidia.patch; + } + { # resume with resume=swap:/dev/xx + name = "tux on ice"; # (swsusp2) + patch = args.fetchurl { + url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc2-for-2.6.23.1.patch.bz2"; + sha256 = "ef86267b6f3d7e309221f5173a881afae1dfa57418be5b3963f2380b0633ca1a"; + }; + extraConfig = " + CONFIG_SUSPEND2=y + CONFIG_SUSPEND2_FILE=y + CONFIG_SUSPEND2_SWAP=y + CONFIG_CRYPTO_LZF=y + "; + } + { name = "fbsplash-0.9.2-r5-2.6.21"; + patch = args.fetchurl { + url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; + sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + + config = with args; + if kernelConfig != null then kernelConfig else + if userModeLinux then ./config-2.6.23.1-uml else + if stdenv.system == "i686-linux" then ./config-2.6.23.1-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.23.1-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) diff --git a/pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp b/pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp new file mode 100644 index 000000000000..5e4729304107 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp @@ -0,0 +1,3756 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.23.1 +# Wed Oct 31 14:47:06 2007 +# +CONFIG_X86_32=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CMOS_UPDATE=y +CONFIG_CLOCKSOURCE_WATCHDOG=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_SEMAPHORE_SLEEPERS=y +CONFIG_X86=y +CONFIG_MMU=y +CONFIG_ZONE_DMA=y +CONFIG_QUICKLIST=y +CONFIG_GENERIC_ISA_DMA=y +CONFIG_GENERIC_IOMAP=y +CONFIG_GENERIC_BUG=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_DMI=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="-default" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +# CONFIG_TASKSTATS is not set +# CONFIG_USER_NS is not set +CONFIG_AUDIT=y +CONFIG_AUDITSYSCALL=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_LOG_BUF_SHIFT=17 +# CONFIG_CPUSETS is not set +# CONFIG_SYSFS_DEPRECATED is not set +CONFIG_RELAY=y +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_SYSCTL=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +CONFIG_RT_MUTEXES=y +# CONFIG_TINY_SHMEM is not set +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SRCVERSION_ALL=y +CONFIG_KMOD=y +CONFIG_STOP_MACHINE=y +CONFIG_BLOCK=y +CONFIG_LBD=y +# CONFIG_BLK_DEV_IO_TRACE is not set +# CONFIG_LSF is not set +# CONFIG_BLK_DEV_BSG is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_IOSCHED_CFQ=y +# CONFIG_DEFAULT_AS is not set +# CONFIG_DEFAULT_DEADLINE is not set +CONFIG_DEFAULT_CFQ=y +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="cfq" + +# +# Processor type and features +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_SMP=y +CONFIG_X86_PC=y +# CONFIG_X86_ELAN is not set +# CONFIG_X86_VOYAGER is not set +# CONFIG_X86_NUMAQ is not set +# CONFIG_X86_SUMMIT is not set +# CONFIG_X86_BIGSMP is not set +# CONFIG_X86_VISWS is not set +# CONFIG_X86_GENERICARCH is not set +# CONFIG_X86_ES7000 is not set +CONFIG_PARAVIRT=y +CONFIG_XEN=y +CONFIG_VMI=y +# CONFIG_M386 is not set +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +CONFIG_M686=y +# CONFIG_MPENTIUMII is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUMM is not set +# CONFIG_MCORE2 is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MEFFICEON is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MGEODEGX1 is not set +# CONFIG_MGEODE_LX is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_MVIAC7 is not set +CONFIG_X86_GENERIC=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_L1_CACHE_SHIFT=7 +CONFIG_X86_XADD=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_X86_PPRO_FENCE=y +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +CONFIG_X86_GOOD_APIC=y +CONFIG_X86_INTEL_USERCOPY=y +CONFIG_X86_USE_PPRO_CHECKSUM=y +CONFIG_X86_TSC=y +CONFIG_X86_CMOV=y +CONFIG_X86_MINIMUM_CPU_FAMILY=4 +CONFIG_HPET_TIMER=y +CONFIG_HPET_EMULATE_RTC=y +CONFIG_NR_CPUS=8 +CONFIG_SCHED_SMT=y +CONFIG_SCHED_MC=y +# CONFIG_PREEMPT_NONE is not set +CONFIG_PREEMPT_VOLUNTARY=y +# CONFIG_PREEMPT is not set +CONFIG_PREEMPT_BKL=y +CONFIG_X86_LOCAL_APIC=y +CONFIG_X86_IO_APIC=y +CONFIG_X86_MCE=y +CONFIG_X86_MCE_NONFATAL=y +CONFIG_X86_MCE_P4THERMAL=y +CONFIG_VM86=y +CONFIG_TOSHIBA=m +CONFIG_I8K=m +CONFIG_X86_REBOOTFIXUPS=y +CONFIG_MICROCODE=m +CONFIG_MICROCODE_OLD_INTERFACE=y +CONFIG_X86_MSR=m +CONFIG_X86_CPUID=m + +# +# Firmware Drivers +# +CONFIG_EDD=m +CONFIG_EFI_VARS=m +CONFIG_DELL_RBU=m +CONFIG_DCDBAS=m +CONFIG_DMIID=y +# CONFIG_NOHIGHMEM is not set +CONFIG_HIGHMEM4G=y +# CONFIG_HIGHMEM64G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_HIGHMEM=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPARSEMEM_STATIC=y +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_RESOURCES_64BIT is not set +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_BOUNCE=y +CONFIG_NR_QUICK=1 +CONFIG_VIRT_TO_BUS=y +CONFIG_HIGHPTE=y +# CONFIG_MATH_EMULATION is not set +CONFIG_MTRR=y +CONFIG_EFI=y +CONFIG_IRQBALANCE=y +CONFIG_BOOT_IOREMAP=y +CONFIG_SECCOMP=y +# CONFIG_HZ_100 is not set +CONFIG_HZ_250=y +# CONFIG_HZ_300 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=250 +CONFIG_KEXEC=y +# CONFIG_CRASH_DUMP is not set +CONFIG_PHYSICAL_START=0x100000 +# CONFIG_RELOCATABLE is not set +CONFIG_PHYSICAL_ALIGN=0x100000 +CONFIG_HOTPLUG_CPU=y +CONFIG_COMPAT_VDSO=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y + +# +# Power management options (ACPI, APM) +# +CONFIG_PM=y +CONFIG_PM_LEGACY=y +# CONFIG_PM_DEBUG is not set +CONFIG_PM_SLEEP_SMP=y +CONFIG_PM_SLEEP=y +CONFIG_SUSPEND_SMP_POSSIBLE=y +CONFIG_SUSPEND=y +CONFIG_HIBERNATION_SMP_POSSIBLE=y +CONFIG_HIBERNATION=y +CONFIG_PM_STD_PARTITION="" +CONFIG_ACPI=y +CONFIG_ACPI_SLEEP=y +CONFIG_ACPI_PROCFS=y +CONFIG_ACPI_PROC_EVENT=y +CONFIG_ACPI_AC=m +CONFIG_ACPI_BATTERY=m +CONFIG_ACPI_BUTTON=m +CONFIG_ACPI_VIDEO=m +CONFIG_ACPI_FAN=m +CONFIG_ACPI_DOCK=m +CONFIG_ACPI_BAY=m +CONFIG_ACPI_PROCESSOR=m +CONFIG_ACPI_HOTPLUG_CPU=y +CONFIG_ACPI_THERMAL=m +CONFIG_ACPI_ASUS=m +CONFIG_ACPI_TOSHIBA=m +# CONFIG_ACPI_CUSTOM_DSDT is not set +CONFIG_ACPI_BLACKLIST_YEAR=2001 +# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_EC=y +CONFIG_ACPI_POWER=y +CONFIG_ACPI_SYSTEM=y +CONFIG_X86_PM_TIMER=y +CONFIG_ACPI_CONTAINER=m +# CONFIG_ACPI_SBS is not set +CONFIG_APM=y +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +CONFIG_APM_DO_ENABLE=y +# CONFIG_APM_CPU_IDLE is not set +CONFIG_APM_DISPLAY_BLANK=y +CONFIG_APM_ALLOW_INTS=y +# CONFIG_APM_REAL_MODE_POWER_OFF is not set + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TABLE=m +# CONFIG_CPU_FREQ_DEBUG is not set +CONFIG_CPU_FREQ_STAT=m +CONFIG_CPU_FREQ_STAT_DETAILS=y +CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=m +CONFIG_CPU_FREQ_GOV_USERSPACE=m +CONFIG_CPU_FREQ_GOV_ONDEMAND=m +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m + +# +# CPUFreq processor drivers +# +CONFIG_X86_ACPI_CPUFREQ=m +CONFIG_X86_POWERNOW_K6=m +CONFIG_X86_POWERNOW_K7=m +CONFIG_X86_POWERNOW_K7_ACPI=y +CONFIG_X86_POWERNOW_K8=m +CONFIG_X86_POWERNOW_K8_ACPI=y +CONFIG_X86_GX_SUSPMOD=m +CONFIG_X86_SPEEDSTEP_CENTRINO=m +CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y +CONFIG_X86_SPEEDSTEP_ICH=m +CONFIG_X86_SPEEDSTEP_SMI=m +CONFIG_X86_P4_CLOCKMOD=m +CONFIG_X86_CPUFREQ_NFORCE2=m +CONFIG_X86_LONGRUN=m +CONFIG_X86_LONGHAUL=m +CONFIG_X86_E_POWERSAVER=m + +# +# shared options +# +# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set +CONFIG_X86_SPEEDSTEP_LIB=m +CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y + +# +# Bus options (PCI, PCMCIA, EISA, MCA, ISA) +# +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +# CONFIG_PCI_GOMMCONFIG is not set +# CONFIG_PCI_GODIRECT is not set +CONFIG_PCI_GOANY=y +CONFIG_PCI_BIOS=y +CONFIG_PCI_DIRECT=y +CONFIG_PCI_MMCONFIG=y +CONFIG_PCIEPORTBUS=y +CONFIG_HOTPLUG_PCI_PCIE=m +# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set +CONFIG_PCIEAER=y +CONFIG_ARCH_SUPPORTS_MSI=y +CONFIG_PCI_MSI=y +# CONFIG_PCI_DEBUG is not set +CONFIG_HT_IRQ=y +CONFIG_ISA_DMA_API=y +CONFIG_ISA=y +# CONFIG_EISA is not set +# CONFIG_MCA is not set +CONFIG_SCx200=m +CONFIG_SCx200HR_TIMER=m +CONFIG_K8_NB=y + +# +# PCCARD (PCMCIA/CardBus) support +# +CONFIG_PCCARD=m +# CONFIG_PCMCIA_DEBUG is not set +CONFIG_PCMCIA=m +CONFIG_PCMCIA_LOAD_CIS=y +CONFIG_PCMCIA_IOCTL=y +CONFIG_CARDBUS=y + +# +# PC-card bridges +# +CONFIG_YENTA=m +CONFIG_YENTA_O2=y +CONFIG_YENTA_RICOH=y +CONFIG_YENTA_TI=y +CONFIG_YENTA_ENE_TUNE=y +CONFIG_YENTA_TOSHIBA=y +CONFIG_PD6729=m +CONFIG_I82092=m +CONFIG_I82365=m +CONFIG_TCIC=m +CONFIG_PCMCIA_PROBE=y +CONFIG_PCCARD_NONSTATIC=m +CONFIG_HOTPLUG_PCI=m +CONFIG_HOTPLUG_PCI_FAKE=m +CONFIG_HOTPLUG_PCI_COMPAQ=m +CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y +CONFIG_HOTPLUG_PCI_IBM=m +CONFIG_HOTPLUG_PCI_ACPI=m +CONFIG_HOTPLUG_PCI_ACPI_IBM=m +CONFIG_HOTPLUG_PCI_CPCI=y +CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m +CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m +CONFIG_HOTPLUG_PCI_SHPC=m + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_AOUT=m +CONFIG_BINFMT_MISC=m + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=m +CONFIG_PACKET_MMAP=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_XFRM_USER=m +# CONFIG_XFRM_SUB_POLICY is not set +# CONFIG_XFRM_MIGRATE is not set +CONFIG_NET_KEY=m +# CONFIG_NET_KEY_MIGRATE is not set +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_ASK_IP_FIB_HASH=y +# CONFIG_IP_FIB_TRIE is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_MULTIPATH=y +CONFIG_IP_ROUTE_VERBOSE=y +# CONFIG_IP_PNP is not set +CONFIG_NET_IPIP=m +CONFIG_NET_IPGRE=m +CONFIG_NET_IPGRE_BROADCAST=y +CONFIG_IP_MROUTE=y +CONFIG_IP_PIMSM_V1=y +CONFIG_IP_PIMSM_V2=y +# CONFIG_ARPD is not set +CONFIG_SYN_COOKIES=y +CONFIG_INET_AH=m +CONFIG_INET_ESP=m +CONFIG_INET_IPCOMP=m +CONFIG_INET_XFRM_TUNNEL=m +CONFIG_INET_TUNNEL=m +CONFIG_INET_XFRM_MODE_TRANSPORT=m +CONFIG_INET_XFRM_MODE_TUNNEL=m +CONFIG_INET_XFRM_MODE_BEET=m +CONFIG_INET_DIAG=m +CONFIG_INET_TCP_DIAG=m +CONFIG_TCP_CONG_ADVANCED=y +CONFIG_TCP_CONG_BIC=m +CONFIG_TCP_CONG_CUBIC=m +CONFIG_TCP_CONG_WESTWOOD=m +CONFIG_TCP_CONG_HTCP=m +CONFIG_TCP_CONG_HSTCP=m +CONFIG_TCP_CONG_HYBLA=m +CONFIG_TCP_CONG_VEGAS=m +CONFIG_TCP_CONG_SCALABLE=m +# CONFIG_TCP_CONG_LP is not set +# CONFIG_TCP_CONG_VENO is not set +CONFIG_TCP_CONG_YEAH=m +CONFIG_TCP_CONG_ILLINOIS=m +# CONFIG_DEFAULT_BIC is not set +# CONFIG_DEFAULT_CUBIC is not set +# CONFIG_DEFAULT_HTCP is not set +# CONFIG_DEFAULT_VEGAS is not set +# CONFIG_DEFAULT_WESTWOOD is not set +CONFIG_DEFAULT_RENO=y +CONFIG_DEFAULT_TCP_CONG="reno" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IP_VS=m +# CONFIG_IP_VS_DEBUG is not set +CONFIG_IP_VS_TAB_BITS=12 + +# +# IPVS transport protocol load balancing support +# +CONFIG_IP_VS_PROTO_TCP=y +CONFIG_IP_VS_PROTO_UDP=y +CONFIG_IP_VS_PROTO_ESP=y +CONFIG_IP_VS_PROTO_AH=y + +# +# IPVS scheduler +# +CONFIG_IP_VS_RR=m +CONFIG_IP_VS_WRR=m +CONFIG_IP_VS_LC=m +CONFIG_IP_VS_WLC=m +CONFIG_IP_VS_LBLC=m +CONFIG_IP_VS_LBLCR=m +CONFIG_IP_VS_DH=m +CONFIG_IP_VS_SH=m +CONFIG_IP_VS_SED=m +CONFIG_IP_VS_NQ=m + +# +# IPVS application helper +# +CONFIG_IP_VS_FTP=m +CONFIG_IPV6=m +CONFIG_IPV6_PRIVACY=y +# CONFIG_IPV6_ROUTER_PREF is not set +# CONFIG_IPV6_OPTIMISTIC_DAD is not set +CONFIG_INET6_AH=m +CONFIG_INET6_ESP=m +CONFIG_INET6_IPCOMP=m +# CONFIG_IPV6_MIP6 is not set +CONFIG_INET6_XFRM_TUNNEL=m +CONFIG_INET6_TUNNEL=m +CONFIG_INET6_XFRM_MODE_TRANSPORT=m +CONFIG_INET6_XFRM_MODE_TUNNEL=m +CONFIG_INET6_XFRM_MODE_BEET=m +# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set +CONFIG_IPV6_SIT=m +CONFIG_IPV6_TUNNEL=m +# CONFIG_IPV6_MULTIPLE_TABLES is not set +# CONFIG_NETLABEL is not set +CONFIG_NETWORK_SECMARK=y +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +CONFIG_BRIDGE_NETFILTER=y + +# +# Core Netfilter Configuration +# +CONFIG_NETFILTER_NETLINK=m +CONFIG_NETFILTER_NETLINK_QUEUE=m +CONFIG_NETFILTER_NETLINK_LOG=m +CONFIG_NF_CONNTRACK_ENABLED=m +CONFIG_NF_CONNTRACK=m +CONFIG_NF_CT_ACCT=y +CONFIG_NF_CONNTRACK_MARK=y +# CONFIG_NF_CONNTRACK_SECMARK is not set +# CONFIG_NF_CONNTRACK_EVENTS is not set +CONFIG_NF_CT_PROTO_GRE=m +CONFIG_NF_CT_PROTO_SCTP=m +CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CONNTRACK_AMANDA=m +CONFIG_NF_CONNTRACK_FTP=m +CONFIG_NF_CONNTRACK_H323=m +CONFIG_NF_CONNTRACK_IRC=m +CONFIG_NF_CONNTRACK_NETBIOS_NS=m +CONFIG_NF_CONNTRACK_PPTP=m +CONFIG_NF_CONNTRACK_SANE=m +CONFIG_NF_CONNTRACK_SIP=m +CONFIG_NF_CONNTRACK_TFTP=m +CONFIG_NF_CT_NETLINK=m +CONFIG_NETFILTER_XTABLES=m +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m +CONFIG_NETFILTER_XT_TARGET_CONNMARK=m +CONFIG_NETFILTER_XT_TARGET_DSCP=m +CONFIG_NETFILTER_XT_TARGET_MARK=m +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m +CONFIG_NETFILTER_XT_TARGET_NFLOG=m +CONFIG_NETFILTER_XT_TARGET_NOTRACK=m +CONFIG_NETFILTER_XT_TARGET_TRACE=m +CONFIG_NETFILTER_XT_TARGET_SECMARK=m +CONFIG_NETFILTER_XT_TARGET_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_COMMENT=m +CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m +CONFIG_NETFILTER_XT_MATCH_CONNMARK=m +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m +CONFIG_NETFILTER_XT_MATCH_DCCP=m +CONFIG_NETFILTER_XT_MATCH_DSCP=m +CONFIG_NETFILTER_XT_MATCH_ESP=m +CONFIG_NETFILTER_XT_MATCH_HELPER=m +CONFIG_NETFILTER_XT_MATCH_LENGTH=m +CONFIG_NETFILTER_XT_MATCH_LIMIT=m +CONFIG_NETFILTER_XT_MATCH_MAC=m +CONFIG_NETFILTER_XT_MATCH_MARK=m +CONFIG_NETFILTER_XT_MATCH_POLICY=m +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m +CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m +CONFIG_NETFILTER_XT_MATCH_QUOTA=m +CONFIG_NETFILTER_XT_MATCH_REALM=m +CONFIG_NETFILTER_XT_MATCH_SCTP=m +CONFIG_NETFILTER_XT_MATCH_STATE=m +CONFIG_NETFILTER_XT_MATCH_STATISTIC=m +CONFIG_NETFILTER_XT_MATCH_STRING=m +CONFIG_NETFILTER_XT_MATCH_TCPMSS=m +CONFIG_NETFILTER_XT_MATCH_U32=m +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m + +# +# IP: Netfilter Configuration +# +CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_CONNTRACK_PROC_COMPAT=y +CONFIG_IP_NF_QUEUE=m +CONFIG_IP_NF_IPTABLES=m +CONFIG_IP_NF_MATCH_IPRANGE=m +CONFIG_IP_NF_MATCH_TOS=m +CONFIG_IP_NF_MATCH_RECENT=m +CONFIG_IP_NF_MATCH_ECN=m +CONFIG_IP_NF_MATCH_AH=m +CONFIG_IP_NF_MATCH_TTL=m +CONFIG_IP_NF_MATCH_OWNER=m +CONFIG_IP_NF_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_IP_NF_TARGET_REJECT=m +CONFIG_IP_NF_TARGET_LOG=m +CONFIG_IP_NF_TARGET_ULOG=m +CONFIG_NF_NAT=m +CONFIG_NF_NAT_NEEDED=y +CONFIG_IP_NF_TARGET_MASQUERADE=m +CONFIG_IP_NF_TARGET_REDIRECT=m +CONFIG_IP_NF_TARGET_NETMAP=m +CONFIG_IP_NF_TARGET_SAME=m +CONFIG_NF_NAT_SNMP_BASIC=m +CONFIG_NF_NAT_PROTO_GRE=m +CONFIG_NF_NAT_FTP=m +CONFIG_NF_NAT_IRC=m +CONFIG_NF_NAT_TFTP=m +CONFIG_NF_NAT_AMANDA=m +CONFIG_NF_NAT_PPTP=m +CONFIG_NF_NAT_H323=m +CONFIG_NF_NAT_SIP=m +CONFIG_IP_NF_MANGLE=m +CONFIG_IP_NF_TARGET_TOS=m +CONFIG_IP_NF_TARGET_ECN=m +CONFIG_IP_NF_TARGET_TTL=m +CONFIG_IP_NF_TARGET_CLUSTERIP=m +CONFIG_IP_NF_RAW=m +# CONFIG_IP_NF_ARPTABLES is not set + +# +# IPv6: Netfilter Configuration (EXPERIMENTAL) +# +CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_IP6_NF_QUEUE=m +CONFIG_IP6_NF_IPTABLES=m +CONFIG_IP6_NF_MATCH_RT=m +CONFIG_IP6_NF_MATCH_OPTS=m +CONFIG_IP6_NF_MATCH_FRAG=m +CONFIG_IP6_NF_MATCH_HL=m +CONFIG_IP6_NF_MATCH_OWNER=m +CONFIG_IP6_NF_MATCH_IPV6HEADER=m +CONFIG_IP6_NF_MATCH_AH=m +CONFIG_IP6_NF_MATCH_MH=m +CONFIG_IP6_NF_MATCH_EUI64=m +CONFIG_IP6_NF_FILTER=m +CONFIG_IP6_NF_TARGET_LOG=m +CONFIG_IP6_NF_TARGET_REJECT=m +CONFIG_IP6_NF_MANGLE=m +CONFIG_IP6_NF_TARGET_HL=m +CONFIG_IP6_NF_RAW=m + +# +# DECnet: Netfilter Configuration +# +CONFIG_DECNET_NF_GRABULATOR=m + +# +# Bridge: Netfilter Configuration +# +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_BROUTE=m +CONFIG_BRIDGE_EBT_T_FILTER=m +CONFIG_BRIDGE_EBT_T_NAT=m +CONFIG_BRIDGE_EBT_802_3=m +CONFIG_BRIDGE_EBT_AMONG=m +CONFIG_BRIDGE_EBT_ARP=m +CONFIG_BRIDGE_EBT_IP=m +CONFIG_BRIDGE_EBT_LIMIT=m +CONFIG_BRIDGE_EBT_MARK=m +CONFIG_BRIDGE_EBT_PKTTYPE=m +CONFIG_BRIDGE_EBT_STP=m +CONFIG_BRIDGE_EBT_VLAN=m +CONFIG_BRIDGE_EBT_ARPREPLY=m +CONFIG_BRIDGE_EBT_DNAT=m +CONFIG_BRIDGE_EBT_MARK_T=m +CONFIG_BRIDGE_EBT_REDIRECT=m +CONFIG_BRIDGE_EBT_SNAT=m +CONFIG_BRIDGE_EBT_LOG=m +CONFIG_BRIDGE_EBT_ULOG=m +# CONFIG_IP_DCCP is not set +CONFIG_IP_SCTP=m +# CONFIG_SCTP_DBG_MSG is not set +# CONFIG_SCTP_DBG_OBJCNT is not set +# CONFIG_SCTP_HMAC_NONE is not set +# CONFIG_SCTP_HMAC_SHA1 is not set +CONFIG_SCTP_HMAC_MD5=y +# CONFIG_TIPC is not set +CONFIG_ATM=m +CONFIG_ATM_CLIP=m +CONFIG_ATM_CLIP_NO_ICMP=y +CONFIG_ATM_LANE=m +CONFIG_ATM_MPOA=m +CONFIG_ATM_BR2684=m +# CONFIG_ATM_BR2684_IPFILTER is not set +CONFIG_BRIDGE=m +CONFIG_VLAN_8021Q=m +CONFIG_DECNET=m +CONFIG_DECNET_ROUTER=y +CONFIG_LLC=y +CONFIG_LLC2=m +CONFIG_IPX=m +# CONFIG_IPX_INTERN is not set +CONFIG_ATALK=m +CONFIG_DEV_APPLETALK=m +CONFIG_LTPC=m +CONFIG_COPS=m +CONFIG_COPS_DAYNA=y +CONFIG_COPS_TANGENT=y +CONFIG_IPDDP=m +CONFIG_IPDDP_ENCAP=y +CONFIG_IPDDP_DECAP=y +CONFIG_X25=m +CONFIG_LAPB=m +CONFIG_ECONET=m +# CONFIG_ECONET_AUNUDP is not set +# CONFIG_ECONET_NATIVE is not set +CONFIG_WAN_ROUTER=m + +# +# QoS and/or fair queueing +# +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_FIFO=y + +# +# Queueing/Scheduling +# +CONFIG_NET_SCH_CBQ=m +CONFIG_NET_SCH_HTB=m +CONFIG_NET_SCH_HFSC=m +CONFIG_NET_SCH_ATM=m +CONFIG_NET_SCH_PRIO=m +CONFIG_NET_SCH_RR=m +CONFIG_NET_SCH_RED=m +CONFIG_NET_SCH_SFQ=m +CONFIG_NET_SCH_TEQL=m +CONFIG_NET_SCH_TBF=m +CONFIG_NET_SCH_GRED=m +CONFIG_NET_SCH_DSMARK=m +CONFIG_NET_SCH_NETEM=m +CONFIG_NET_SCH_INGRESS=m + +# +# Classification +# +CONFIG_NET_CLS=y +CONFIG_NET_CLS_BASIC=m +CONFIG_NET_CLS_TCINDEX=m +CONFIG_NET_CLS_ROUTE4=m +CONFIG_NET_CLS_ROUTE=y +CONFIG_NET_CLS_FW=m +CONFIG_NET_CLS_U32=m +CONFIG_CLS_U32_PERF=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_RSVP=m +CONFIG_NET_CLS_RSVP6=m +# CONFIG_NET_EMATCH is not set +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_POLICE=m +CONFIG_NET_ACT_GACT=m +CONFIG_GACT_PROB=y +CONFIG_NET_ACT_MIRRED=m +CONFIG_NET_ACT_IPT=m +CONFIG_NET_ACT_PEDIT=m +CONFIG_NET_ACT_SIMP=m +# CONFIG_NET_CLS_POLICE is not set +# CONFIG_NET_CLS_IND is not set + +# +# Network testing +# +CONFIG_NET_PKTGEN=m +CONFIG_HAMRADIO=y + +# +# Packet Radio protocols +# +CONFIG_AX25=m +CONFIG_AX25_DAMA_SLAVE=y +CONFIG_NETROM=m +CONFIG_ROSE=m + +# +# AX.25 network device drivers +# +CONFIG_MKISS=m +CONFIG_6PACK=m +CONFIG_BPQETHER=m +CONFIG_SCC=m +CONFIG_SCC_DELAY=y +CONFIG_SCC_TRXECHO=y +CONFIG_BAYCOM_SER_FDX=m +CONFIG_BAYCOM_SER_HDX=m +CONFIG_BAYCOM_PAR=m +CONFIG_BAYCOM_EPP=m +CONFIG_YAM=m +CONFIG_IRDA=m + +# +# IrDA protocols +# +CONFIG_IRLAN=m +CONFIG_IRNET=m +CONFIG_IRCOMM=m +CONFIG_IRDA_ULTRA=y + +# +# IrDA options +# +CONFIG_IRDA_CACHE_LAST_LSAP=y +# CONFIG_IRDA_FAST_RR is not set +# CONFIG_IRDA_DEBUG is not set + +# +# Infrared-port device drivers +# + +# +# SIR device drivers +# +CONFIG_IRTTY_SIR=m + +# +# Dongle support +# +CONFIG_DONGLE=y +CONFIG_ESI_DONGLE=m +CONFIG_ACTISYS_DONGLE=m +CONFIG_TEKRAM_DONGLE=m +# CONFIG_TOIM3232_DONGLE is not set +CONFIG_LITELINK_DONGLE=m +CONFIG_MA600_DONGLE=m +CONFIG_GIRBIL_DONGLE=m +CONFIG_MCP2120_DONGLE=m +CONFIG_OLD_BELKIN_DONGLE=m +CONFIG_ACT200L_DONGLE=m +CONFIG_KINGSUN_DONGLE=m + +# +# Old SIR device drivers +# + +# +# Old Serial dongle support +# + +# +# FIR device drivers +# +CONFIG_USB_IRDA=m +CONFIG_SIGMATEL_FIR=m +CONFIG_NSC_FIR=m +CONFIG_WINBOND_FIR=m +CONFIG_TOSHIBA_FIR=m +CONFIG_SMC_IRCC_FIR=m +CONFIG_ALI_FIR=m +CONFIG_VLSI_FIR=m +CONFIG_VIA_FIR=m +CONFIG_MCS_FIR=m +CONFIG_BT=m +CONFIG_BT_L2CAP=m +CONFIG_BT_SCO=m +CONFIG_BT_RFCOMM=m +CONFIG_BT_RFCOMM_TTY=y +CONFIG_BT_BNEP=m +CONFIG_BT_BNEP_MC_FILTER=y +CONFIG_BT_BNEP_PROTO_FILTER=y +CONFIG_BT_CMTP=m +CONFIG_BT_HIDP=m + +# +# Bluetooth device drivers +# +CONFIG_BT_HCIUSB=m +CONFIG_BT_HCIUSB_SCO=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIDTL1=m +CONFIG_BT_HCIBT3C=m +CONFIG_BT_HCIBLUECARD=m +CONFIG_BT_HCIBTUART=m +CONFIG_BT_HCIVHCI=m +CONFIG_AF_RXRPC=m +# CONFIG_AF_RXRPC_DEBUG is not set +CONFIG_RXKAD=m +CONFIG_FIB_RULES=y + +# +# Wireless +# +CONFIG_CFG80211=m +CONFIG_WIRELESS_EXT=y +CONFIG_MAC80211=m +CONFIG_MAC80211_LEDS=y +# CONFIG_MAC80211_DEBUGFS is not set +# CONFIG_MAC80211_DEBUG is not set +CONFIG_IEEE80211=m +# CONFIG_IEEE80211_DEBUG is not set +CONFIG_IEEE80211_CRYPT_WEP=m +CONFIG_IEEE80211_CRYPT_CCMP=m +CONFIG_IEEE80211_CRYPT_TKIP=m +CONFIG_IEEE80211_SOFTMAC=m +# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set +CONFIG_RFKILL=m +CONFIG_RFKILL_INPUT=m +CONFIG_NET_9P=m +# CONFIG_NET_9P_DEBUG is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +# CONFIG_STANDALONE is not set +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=m +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_SYS_HYPERVISOR is not set +CONFIG_CONNECTOR=m +CONFIG_MTD=m +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_CONCAT=m +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_REDBOOT_PARTS=m +CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 +# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set +# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLKDEVS=m +CONFIG_MTD_BLOCK=m +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_GEN_PROBE=m +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set +# CONFIG_MTD_CFI_GEOMETRY is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +# CONFIG_MTD_CFI_I4 is not set +# CONFIG_MTD_CFI_I8 is not set +# CONFIG_MTD_OTP is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m +CONFIG_MTD_CFI_UTIL=m +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +CONFIG_MTD_ABSENT=m + +# +# Mapping drivers for chip access +# +CONFIG_MTD_COMPLEX_MAPPINGS=y +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=0x8000000 +CONFIG_MTD_PHYSMAP_LEN=0x4000000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=2 +CONFIG_MTD_PNC2000=m +CONFIG_MTD_SC520CDP=m +CONFIG_MTD_NETSC520=m +CONFIG_MTD_TS5500=m +CONFIG_MTD_SBC_GXX=m +CONFIG_MTD_SCx200_DOCFLASH=m +CONFIG_MTD_AMD76XROM=m +CONFIG_MTD_ICHXROM=m +CONFIG_MTD_ESB2ROM=m +CONFIG_MTD_CK804XROM=m +CONFIG_MTD_SCB2_FLASH=m +CONFIG_MTD_NETtel=m +CONFIG_MTD_DILNETPC=m +CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000 +CONFIG_MTD_L440GX=m +CONFIG_MTD_PCI=m +# CONFIG_MTD_PLATRAM is not set + +# +# Self-contained MTD device drivers +# +CONFIG_MTD_PMC551=m +CONFIG_MTD_PMC551_BUGFIX=y +# CONFIG_MTD_PMC551_DEBUG is not set +CONFIG_MTD_DATAFLASH=m +CONFIG_MTD_M25P80=m +CONFIG_MTD_SLRAM=m +CONFIG_MTD_PHRAM=m +CONFIG_MTD_MTDRAM=m +CONFIG_MTDRAM_TOTAL_SIZE=4096 +CONFIG_MTDRAM_ERASE_SIZE=128 +CONFIG_MTD_BLOCK2MTD=m + +# +# Disk-On-Chip Device Drivers +# +CONFIG_MTD_DOC2000=m +CONFIG_MTD_DOC2001=m +CONFIG_MTD_DOC2001PLUS=m +CONFIG_MTD_DOCPROBE=m +CONFIG_MTD_DOCECC=m +CONFIG_MTD_DOCPROBE_ADVANCED=y +CONFIG_MTD_DOCPROBE_ADDRESS=0x0000 +CONFIG_MTD_DOCPROBE_HIGH=y +CONFIG_MTD_DOCPROBE_55AA=y +CONFIG_MTD_NAND=m +# CONFIG_MTD_NAND_VERIFY_WRITE is not set +# CONFIG_MTD_NAND_ECC_SMC is not set +# CONFIG_MTD_NAND_MUSEUM_IDS is not set +CONFIG_MTD_NAND_IDS=m +CONFIG_MTD_NAND_DISKONCHIP=m +# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set +CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 +CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y +CONFIG_MTD_NAND_CAFE=m +# CONFIG_MTD_NAND_CS553X is not set +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_PLATFORM=m +# CONFIG_MTD_ONENAND is not set + +# +# UBI - Unsorted block images +# +CONFIG_MTD_UBI=m +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_RESERVE=1 +# CONFIG_MTD_UBI_GLUEBI is not set + +# +# UBI debugging options +# +# CONFIG_MTD_UBI_DEBUG is not set +CONFIG_PARPORT=m +CONFIG_PARPORT_PC=m +CONFIG_PARPORT_SERIAL=m +CONFIG_PARPORT_PC_FIFO=y +CONFIG_PARPORT_PC_SUPERIO=y +CONFIG_PARPORT_PC_PCMCIA=m +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_AX88796 is not set +CONFIG_PARPORT_1284=y +CONFIG_PARPORT_NOT_PC=y +CONFIG_PNP=y +# CONFIG_PNP_DEBUG is not set + +# +# Protocols +# +CONFIG_ISAPNP=y +# CONFIG_PNPBIOS is not set +CONFIG_PNPACPI=y +CONFIG_BLK_DEV=y +CONFIG_BLK_DEV_FD=y +CONFIG_BLK_DEV_XD=m +CONFIG_PARIDE=m + +# +# Parallel IDE high-level drivers +# +CONFIG_PARIDE_PD=m +CONFIG_PARIDE_PCD=m +CONFIG_PARIDE_PF=m +CONFIG_PARIDE_PT=m +CONFIG_PARIDE_PG=m + +# +# Parallel IDE protocol modules +# +CONFIG_PARIDE_ATEN=m +CONFIG_PARIDE_BPCK=m +CONFIG_PARIDE_BPCK6=m +CONFIG_PARIDE_COMM=m +CONFIG_PARIDE_DSTR=m +CONFIG_PARIDE_FIT2=m +CONFIG_PARIDE_FIT3=m +CONFIG_PARIDE_EPAT=m +CONFIG_PARIDE_EPATC8=y +CONFIG_PARIDE_EPIA=m +CONFIG_PARIDE_FRIQ=m +CONFIG_PARIDE_FRPW=m +CONFIG_PARIDE_KBIC=m +CONFIG_PARIDE_KTTI=m +CONFIG_PARIDE_ON20=m +CONFIG_PARIDE_ON26=m +CONFIG_BLK_CPQ_DA=m +CONFIG_BLK_CPQ_CISS_DA=m +CONFIG_CISS_SCSI_TAPE=y +CONFIG_BLK_DEV_DAC960=m +CONFIG_BLK_DEV_UMEM=m +# CONFIG_BLK_DEV_COW_COMMON is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_CRYPTOLOOP=m +CONFIG_BLK_DEV_NBD=m +CONFIG_BLK_DEV_SX8=m +# CONFIG_BLK_DEV_UB is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=64000 +CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 +CONFIG_CDROM_PKTCDVD=m +CONFIG_CDROM_PKTCDVD_BUFFERS=8 +CONFIG_CDROM_PKTCDVD_WCACHE=y +CONFIG_ATA_OVER_ETH=m +CONFIG_XEN_BLKDEV_FRONTEND=m +CONFIG_MISC_DEVICES=y +CONFIG_IBM_ASM=m +CONFIG_PHANTOM=m +CONFIG_EEPROM_93CX6=m +# CONFIG_SGI_IOC4 is not set +CONFIG_TIFM_CORE=m +CONFIG_TIFM_7XX1=m +CONFIG_ASUS_LAPTOP=m +CONFIG_MSI_LAPTOP=m +CONFIG_SONY_LAPTOP=m +CONFIG_SONYPI_COMPAT=y +CONFIG_THINKPAD_ACPI=m +# CONFIG_THINKPAD_ACPI_DEBUG is not set +CONFIG_THINKPAD_ACPI_BAY=y +CONFIG_IDE=m +CONFIG_BLK_DEV_IDE=m + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_IDE_SATA is not set +# CONFIG_BLK_DEV_HD_IDE is not set +CONFIG_BLK_DEV_IDEDISK=m +CONFIG_IDEDISK_MULTI_MODE=y +CONFIG_BLK_DEV_IDECS=m +CONFIG_BLK_DEV_DELKIN=m +CONFIG_BLK_DEV_IDECD=m +CONFIG_BLK_DEV_IDETAPE=m +CONFIG_BLK_DEV_IDEFLOPPY=m +CONFIG_BLK_DEV_IDESCSI=m +CONFIG_BLK_DEV_IDEACPI=y +# CONFIG_IDE_TASK_IOCTL is not set +CONFIG_IDE_PROC_FS=y + +# +# IDE chipset support/bugfixes +# +CONFIG_IDE_GENERIC=m +CONFIG_BLK_DEV_CMD640=y +CONFIG_BLK_DEV_CMD640_ENHANCED=y +CONFIG_BLK_DEV_IDEPNP=y +CONFIG_BLK_DEV_IDEPCI=y +CONFIG_IDEPCI_SHARE_IRQ=y +# CONFIG_IDEPCI_PCIBUS_ORDER is not set +CONFIG_BLK_DEV_OFFBOARD=y +CONFIG_BLK_DEV_GENERIC=m +CONFIG_BLK_DEV_OPTI621=m +CONFIG_BLK_DEV_RZ1000=m +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_AEC62XX=m +CONFIG_BLK_DEV_ALI15X3=m +# CONFIG_WDC_ALI15X3 is not set +CONFIG_BLK_DEV_AMD74XX=m +CONFIG_BLK_DEV_ATIIXP=m +CONFIG_BLK_DEV_CMD64X=m +CONFIG_BLK_DEV_TRIFLEX=m +CONFIG_BLK_DEV_CY82C693=m +CONFIG_BLK_DEV_CS5520=m +CONFIG_BLK_DEV_CS5530=m +CONFIG_BLK_DEV_CS5535=m +CONFIG_BLK_DEV_HPT34X=m +CONFIG_HPT34X_AUTODMA=y +CONFIG_BLK_DEV_HPT366=m +CONFIG_BLK_DEV_JMICRON=m +CONFIG_BLK_DEV_SC1200=m +CONFIG_BLK_DEV_PIIX=m +CONFIG_BLK_DEV_IT8213=m +CONFIG_BLK_DEV_IT821X=m +CONFIG_BLK_DEV_NS87415=m +CONFIG_BLK_DEV_PDC202XX_OLD=m +CONFIG_PDC202XX_BURST=y +CONFIG_BLK_DEV_PDC202XX_NEW=m +CONFIG_BLK_DEV_SVWKS=m +CONFIG_BLK_DEV_SIIMAGE=m +CONFIG_BLK_DEV_SIS5513=m +CONFIG_BLK_DEV_SLC90E66=m +CONFIG_BLK_DEV_TRM290=m +CONFIG_BLK_DEV_VIA82CXXX=m +CONFIG_BLK_DEV_TC86C001=m +# CONFIG_IDE_ARM is not set +CONFIG_IDE_CHIPSETS=y + +# +# Note: most of these also require special kernel boot parameters +# +CONFIG_BLK_DEV_4DRIVES=y +CONFIG_BLK_DEV_ALI14XX=m +CONFIG_BLK_DEV_DTC2278=m +CONFIG_BLK_DEV_HT6560B=m +CONFIG_BLK_DEV_QD65XX=m +CONFIG_BLK_DEV_UMC8672=m +CONFIG_BLK_DEV_IDEDMA=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI device support +# +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI=m +CONFIG_SCSI_DMA=y +CONFIG_SCSI_TGT=m +CONFIG_SCSI_NETLINK=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_CHR_DEV_ST=m +CONFIG_CHR_DEV_OSST=m +CONFIG_BLK_DEV_SR=m +# CONFIG_BLK_DEV_SR_VENDOR is not set +CONFIG_CHR_DEV_SG=m +CONFIG_CHR_DEV_SCH=m + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +CONFIG_SCSI_MULTI_LUN=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +# CONFIG_SCSI_SCAN_ASYNC is not set +CONFIG_SCSI_WAIT_SCAN=m + +# +# SCSI Transports +# +CONFIG_SCSI_SPI_ATTRS=m +CONFIG_SCSI_FC_ATTRS=m +CONFIG_SCSI_ISCSI_ATTRS=m +CONFIG_SCSI_SAS_ATTRS=m +CONFIG_SCSI_SAS_LIBSAS=m +# CONFIG_SCSI_SAS_ATA is not set +# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set +CONFIG_SCSI_LOWLEVEL=y +CONFIG_ISCSI_TCP=m +CONFIG_BLK_DEV_3W_XXXX_RAID=m +CONFIG_SCSI_3W_9XXX=m +CONFIG_SCSI_7000FASST=m +CONFIG_SCSI_ACARD=m +CONFIG_SCSI_AHA152X=m +CONFIG_SCSI_AHA1542=m +CONFIG_SCSI_AACRAID=m +CONFIG_SCSI_AIC7XXX=m +CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 +CONFIG_AIC7XXX_RESET_DELAY_MS=5000 +# CONFIG_AIC7XXX_DEBUG_ENABLE is not set +CONFIG_AIC7XXX_DEBUG_MASK=0 +CONFIG_AIC7XXX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC7XXX_OLD=m +CONFIG_SCSI_AIC79XX=m +CONFIG_AIC79XX_CMDS_PER_DEVICE=32 +CONFIG_AIC79XX_RESET_DELAY_MS=15000 +# CONFIG_AIC79XX_DEBUG_ENABLE is not set +CONFIG_AIC79XX_DEBUG_MASK=0 +CONFIG_AIC79XX_REG_PRETTY_PRINT=y +CONFIG_SCSI_AIC94XX=m +# CONFIG_AIC94XX_DEBUG is not set +CONFIG_SCSI_DPT_I2O=m +CONFIG_SCSI_ADVANSYS=m +CONFIG_SCSI_IN2000=m +CONFIG_SCSI_ARCMSR=m +CONFIG_MEGARAID_NEWGEN=y +CONFIG_MEGARAID_MM=m +CONFIG_MEGARAID_MAILBOX=m +CONFIG_MEGARAID_LEGACY=m +CONFIG_MEGARAID_SAS=m +CONFIG_SCSI_HPTIOP=m +CONFIG_SCSI_BUSLOGIC=m +# CONFIG_SCSI_OMIT_FLASHPOINT is not set +CONFIG_SCSI_DMX3191D=m +CONFIG_SCSI_DTC3280=m +CONFIG_SCSI_EATA=m +CONFIG_SCSI_EATA_TAGGED_QUEUE=y +CONFIG_SCSI_EATA_LINKED_COMMANDS=y +CONFIG_SCSI_EATA_MAX_TAGS=16 +CONFIG_SCSI_FUTURE_DOMAIN=m +CONFIG_SCSI_GDTH=m +CONFIG_SCSI_GENERIC_NCR5380=m +CONFIG_SCSI_GENERIC_NCR5380_MMIO=m +CONFIG_SCSI_GENERIC_NCR53C400=y +CONFIG_SCSI_IPS=m +CONFIG_SCSI_INITIO=m +CONFIG_SCSI_INIA100=m +CONFIG_SCSI_PPA=m +CONFIG_SCSI_IMM=m +# CONFIG_SCSI_IZIP_EPP16 is not set +# CONFIG_SCSI_IZIP_SLOW_CTR is not set +CONFIG_SCSI_NCR53C406A=m +CONFIG_SCSI_STEX=m +CONFIG_SCSI_SYM53C8XX_2=m +CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 +CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 +CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 +CONFIG_SCSI_SYM53C8XX_MMIO=y +CONFIG_SCSI_IPR=m +# CONFIG_SCSI_IPR_TRACE is not set +# CONFIG_SCSI_IPR_DUMP is not set +CONFIG_SCSI_PAS16=m +CONFIG_SCSI_PSI240I=m +CONFIG_SCSI_QLOGIC_FAS=m +CONFIG_SCSI_QLOGIC_1280=m +CONFIG_SCSI_QLA_FC=m +CONFIG_SCSI_QLA_ISCSI=m +CONFIG_SCSI_LPFC=m +CONFIG_SCSI_SEAGATE=m +CONFIG_SCSI_SYM53C416=m +CONFIG_SCSI_DC395x=m +CONFIG_SCSI_DC390T=m +CONFIG_SCSI_T128=m +CONFIG_SCSI_U14_34F=m +CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y +CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y +CONFIG_SCSI_U14_34F_MAX_TAGS=8 +CONFIG_SCSI_ULTRASTOR=m +CONFIG_SCSI_NSP32=m +CONFIG_SCSI_DEBUG=m +CONFIG_SCSI_SRP=m +CONFIG_SCSI_LOWLEVEL_PCMCIA=y +CONFIG_PCMCIA_AHA152X=m +CONFIG_PCMCIA_FDOMAIN=m +CONFIG_PCMCIA_NINJA_SCSI=m +CONFIG_PCMCIA_QLOGIC=m +CONFIG_PCMCIA_SYM53C500=m +CONFIG_ATA=m +# CONFIG_ATA_NONSTANDARD is not set +CONFIG_ATA_ACPI=y +CONFIG_SATA_AHCI=m +CONFIG_SATA_SVW=m +CONFIG_ATA_PIIX=m +# CONFIG_SATA_MV is not set +CONFIG_SATA_NV=m +CONFIG_PDC_ADMA=m +CONFIG_SATA_QSTOR=m +CONFIG_SATA_PROMISE=m +CONFIG_SATA_SX4=m +CONFIG_SATA_SIL=m +CONFIG_SATA_SIL24=m +CONFIG_SATA_SIS=m +CONFIG_SATA_ULI=m +CONFIG_SATA_VIA=m +CONFIG_SATA_VITESSE=m +CONFIG_SATA_INIC162X=m +CONFIG_PATA_ALI=m +CONFIG_PATA_AMD=m +CONFIG_PATA_ARTOP=m +CONFIG_PATA_ATIIXP=m +# CONFIG_PATA_CMD640_PCI is not set +# CONFIG_PATA_CMD64X is not set +CONFIG_PATA_CS5520=m +CONFIG_PATA_CS5530=m +CONFIG_PATA_CS5535=m +# CONFIG_PATA_CYPRESS is not set +CONFIG_PATA_EFAR=m +CONFIG_ATA_GENERIC=m +CONFIG_PATA_HPT366=m +CONFIG_PATA_HPT37X=m +CONFIG_PATA_HPT3X2N=m +CONFIG_PATA_HPT3X3=m +# CONFIG_PATA_HPT3X3_DMA is not set +# CONFIG_PATA_ISAPNP is not set +CONFIG_PATA_IT821X=m +CONFIG_PATA_IT8213=m +CONFIG_PATA_JMICRON=m +# CONFIG_PATA_LEGACY is not set +CONFIG_PATA_TRIFLEX=m +CONFIG_PATA_MARVELL=m +CONFIG_PATA_MPIIX=m +CONFIG_PATA_OLDPIIX=m +CONFIG_PATA_NETCELL=m +CONFIG_PATA_NS87410=m +# CONFIG_PATA_OPTI is not set +# CONFIG_PATA_OPTIDMA is not set +CONFIG_PATA_PCMCIA=m +# CONFIG_PATA_PDC_OLD is not set +CONFIG_PATA_QDI=m +# CONFIG_PATA_RADISYS is not set +CONFIG_PATA_RZ1000=m +CONFIG_PATA_SC1200=m +CONFIG_PATA_SERVERWORKS=m +CONFIG_PATA_PDC2027X=m +CONFIG_PATA_SIL680=m +CONFIG_PATA_SIS=m +CONFIG_PATA_VIA=m +CONFIG_PATA_WINBOND=m +CONFIG_PATA_WINBOND_VLB=m +CONFIG_MD=y +CONFIG_BLK_DEV_MD=y +CONFIG_MD_LINEAR=m +CONFIG_MD_RAID0=m +CONFIG_MD_RAID1=m +CONFIG_MD_RAID10=m +CONFIG_MD_RAID456=m +# CONFIG_MD_RAID5_RESHAPE is not set +CONFIG_MD_MULTIPATH=m +CONFIG_MD_FAULTY=m +CONFIG_BLK_DEV_DM=m +# CONFIG_DM_DEBUG is not set +CONFIG_DM_CRYPT=m +CONFIG_DM_SNAPSHOT=m +CONFIG_DM_MIRROR=m +CONFIG_DM_ZERO=m +CONFIG_DM_MULTIPATH=m +CONFIG_DM_MULTIPATH_EMC=m +CONFIG_DM_MULTIPATH_RDAC=m +# CONFIG_DM_DELAY is not set + +# +# Fusion MPT device support +# +CONFIG_FUSION=y +CONFIG_FUSION_SPI=m +CONFIG_FUSION_FC=m +CONFIG_FUSION_SAS=m +CONFIG_FUSION_MAX_SGE=128 +CONFIG_FUSION_CTL=m +CONFIG_FUSION_LAN=m +# CONFIG_FUSION_LOGGING is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_FIREWIRE is not set +CONFIG_IEEE1394=m + +# +# Subsystem Options +# +# CONFIG_IEEE1394_VERBOSEDEBUG is not set + +# +# Controllers +# +CONFIG_IEEE1394_PCILYNX=m +CONFIG_IEEE1394_OHCI1394=m + +# +# Protocols +# +CONFIG_IEEE1394_VIDEO1394=m +CONFIG_IEEE1394_SBP2=m +# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set +CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y +CONFIG_IEEE1394_ETH1394=m +CONFIG_IEEE1394_DV1394=m +CONFIG_IEEE1394_RAWIO=m +CONFIG_I2O=m +CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y +CONFIG_I2O_EXT_ADAPTEC=y +CONFIG_I2O_CONFIG=m +CONFIG_I2O_CONFIG_OLD_IOCTL=y +CONFIG_I2O_BUS=m +CONFIG_I2O_BLOCK=m +CONFIG_I2O_SCSI=m +CONFIG_I2O_PROC=m +CONFIG_MACINTOSH_DRIVERS=y +CONFIG_MAC_EMUMOUSEBTN=y +CONFIG_NETDEVICES=y +# CONFIG_NETDEVICES_MULTIQUEUE is not set +# CONFIG_IFB is not set +CONFIG_DUMMY=m +CONFIG_BONDING=m +# CONFIG_MACVLAN is not set +CONFIG_EQUALIZER=m +CONFIG_TUN=m +CONFIG_NET_SB1000=m +CONFIG_ARCNET=m +CONFIG_ARCNET_1201=m +CONFIG_ARCNET_1051=m +CONFIG_ARCNET_RAW=m +CONFIG_ARCNET_CAP=m +CONFIG_ARCNET_COM90xx=m +CONFIG_ARCNET_COM90xxIO=m +CONFIG_ARCNET_RIM_I=m +# CONFIG_ARCNET_COM20020 is not set +CONFIG_PHYLIB=m + +# +# MII PHY device drivers +# +CONFIG_MARVELL_PHY=m +CONFIG_DAVICOM_PHY=m +CONFIG_QSEMI_PHY=m +CONFIG_LXT_PHY=m +CONFIG_CICADA_PHY=m +CONFIG_VITESSE_PHY=m +CONFIG_SMSC_PHY=m +CONFIG_BROADCOM_PHY=m +CONFIG_ICPLUS_PHY=m +CONFIG_FIXED_PHY=m +# CONFIG_FIXED_MII_10_FDX is not set +# CONFIG_FIXED_MII_100_FDX is not set +CONFIG_NET_ETHERNET=y +CONFIG_MII=m +CONFIG_HAPPYMEAL=m +CONFIG_SUNGEM=m +CONFIG_CASSINI=m +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +CONFIG_3C515=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_SMC9194=m +CONFIG_NET_VENDOR_RACAL=y +CONFIG_NI52=m +CONFIG_NI65=m +CONFIG_NET_TULIP=y +CONFIG_DE2104X=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +CONFIG_TULIP_NAPI=y +CONFIG_TULIP_NAPI_HW_MITIGATION=y +CONFIG_DE4X5=m +CONFIG_WINBOND_840=m +CONFIG_DM9102=m +CONFIG_ULI526X=m +CONFIG_PCMCIA_XIRCOM=m +CONFIG_AT1700=m +CONFIG_DEPCA=m +CONFIG_HP100=m +CONFIG_NET_ISA=y +CONFIG_E2100=m +CONFIG_EWRK3=m +CONFIG_EEXPRESS=m +CONFIG_EEXPRESS_PRO=m +CONFIG_HPLAN_PLUS=m +CONFIG_HPLAN=m +CONFIG_LP486E=m +CONFIG_ETH16I=m +CONFIG_NE2000=m +CONFIG_ZNET=m +CONFIG_SEEQ8005=m +CONFIG_NET_PCI=y +CONFIG_PCNET32=m +# CONFIG_PCNET32_NAPI is not set +CONFIG_AMD8111_ETH=m +# CONFIG_AMD8111E_NAPI is not set +CONFIG_ADAPTEC_STARFIRE=m +CONFIG_ADAPTEC_STARFIRE_NAPI=y +CONFIG_AC3200=m +CONFIG_APRICOT=m +CONFIG_B44=m +CONFIG_FORCEDETH=m +# CONFIG_FORCEDETH_NAPI is not set +CONFIG_CS89x0=m +CONFIG_DGRS=m +CONFIG_EEPRO100=m +CONFIG_E100=m +CONFIG_FEALNX=m +CONFIG_NATSEMI=m +CONFIG_NE2K_PCI=m +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +CONFIG_8139TOO_8129=y +# CONFIG_8139_OLD_RX_RESET is not set +CONFIG_SIS900=m +CONFIG_EPIC100=m +CONFIG_SUNDANCE=m +# CONFIG_SUNDANCE_MMIO is not set +CONFIG_TLAN=m +CONFIG_VIA_RHINE=m +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_VIA_RHINE_NAPI is not set +CONFIG_SC92031=m +CONFIG_NET_POCKET=y +CONFIG_ATP=m +CONFIG_DE600=m +CONFIG_DE620=m +CONFIG_NETDEV_1000=y +CONFIG_ACENIC=m +# CONFIG_ACENIC_OMIT_TIGON_I is not set +CONFIG_DL2K=m +CONFIG_E1000=m +CONFIG_E1000_NAPI=y +# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set +CONFIG_NS83820=m +CONFIG_HAMACHI=m +CONFIG_YELLOWFIN=m +CONFIG_R8169=m +# CONFIG_R8169_NAPI is not set +CONFIG_R8169_VLAN=y +CONFIG_SIS190=m +CONFIG_SKGE=m +# CONFIG_SKY2 is not set +CONFIG_SK98LIN=m +CONFIG_VIA_VELOCITY=m +CONFIG_TIGON3=m +CONFIG_BNX2=m +CONFIG_QLA3XXX=m +CONFIG_ATL1=m +CONFIG_NETDEV_10000=y +CONFIG_CHELSIO_T1=m +CONFIG_CHELSIO_T1_1G=y +CONFIG_CHELSIO_T1_NAPI=y +CONFIG_CHELSIO_T3=m +CONFIG_IXGB=m +CONFIG_IXGB_NAPI=y +CONFIG_S2IO=m +CONFIG_S2IO_NAPI=y +CONFIG_MYRI10GE=m +CONFIG_NETXEN_NIC=m +CONFIG_MLX4_CORE=m +CONFIG_MLX4_DEBUG=y +CONFIG_TR=y +CONFIG_IBMTR=m +CONFIG_IBMOL=m +CONFIG_IBMLS=m +CONFIG_3C359=m +CONFIG_TMS380TR=m +CONFIG_TMSPCI=m +CONFIG_SKISA=m +CONFIG_PROTEON=m +CONFIG_ABYSS=m +CONFIG_SMCTR=m + +# +# Wireless LAN +# +# CONFIG_WLAN_PRE80211 is not set +CONFIG_WLAN_80211=y +CONFIG_PCMCIA_RAYCS=m +CONFIG_IPW2100=m +CONFIG_IPW2100_MONITOR=y +# CONFIG_IPW2100_DEBUG is not set +CONFIG_IPW2200=m +CONFIG_IPW2200_MONITOR=y +CONFIG_IPW2200_RADIOTAP=y +CONFIG_IPW2200_PROMISCUOUS=y +CONFIG_IPW2200_QOS=y +# CONFIG_IPW2200_DEBUG is not set +CONFIG_LIBERTAS=m +CONFIG_LIBERTAS_USB=m +# CONFIG_LIBERTAS_DEBUG is not set +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_NORTEL_HERMES=m +CONFIG_PCI_HERMES=m +CONFIG_ATMEL=m +CONFIG_PCI_ATMEL=m +CONFIG_PCMCIA_HERMES=m +CONFIG_PCMCIA_SPECTRUM=m +CONFIG_AIRO_CS=m +CONFIG_PCMCIA_ATMEL=m +CONFIG_PCMCIA_WL3501=m +CONFIG_PRISM54=m +CONFIG_USB_ZD1201=m +CONFIG_RTL8187=m +CONFIG_HOSTAP=m +CONFIG_HOSTAP_FIRMWARE=y +CONFIG_HOSTAP_FIRMWARE_NVRAM=y +CONFIG_HOSTAP_PLX=m +CONFIG_HOSTAP_PCI=m +CONFIG_HOSTAP_CS=m +CONFIG_BCM43XX=m +CONFIG_BCM43XX_DEBUG=y +CONFIG_BCM43XX_DMA=y +CONFIG_BCM43XX_PIO=y +CONFIG_BCM43XX_DMA_AND_PIO_MODE=y +# CONFIG_BCM43XX_DMA_MODE is not set +# CONFIG_BCM43XX_PIO_MODE is not set +CONFIG_ZD1211RW=m +# CONFIG_ZD1211RW_DEBUG is not set + +# +# USB Network Adapters +# +CONFIG_USB_CATC=m +CONFIG_USB_KAWETH=m +CONFIG_USB_PEGASUS=m +CONFIG_USB_RTL8150=m +CONFIG_USB_USBNET_MII=m +CONFIG_USB_USBNET=m +CONFIG_USB_NET_AX8817X=m +CONFIG_USB_NET_CDCETHER=m +CONFIG_USB_NET_DM9601=m +CONFIG_USB_NET_GL620A=m +CONFIG_USB_NET_NET1080=m +CONFIG_USB_NET_PLUSB=m +CONFIG_USB_NET_MCS7830=m +CONFIG_USB_NET_RNDIS_HOST=m +CONFIG_USB_NET_CDC_SUBSET=m +CONFIG_USB_ALI_M5632=y +CONFIG_USB_AN2720=y +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +# CONFIG_USB_EPSON2888 is not set +# CONFIG_USB_KC2190 is not set +CONFIG_USB_NET_ZAURUS=m +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_AXNET=m +CONFIG_PCMCIA_IBMTR=m +CONFIG_WAN=y +CONFIG_HOSTESS_SV11=m +# CONFIG_COSA is not set +CONFIG_LANMEDIA=m +CONFIG_SEALEVEL_4021=m +CONFIG_HDLC=m +CONFIG_HDLC_RAW=m +CONFIG_HDLC_RAW_ETH=m +CONFIG_HDLC_CISCO=m +CONFIG_HDLC_FR=m +CONFIG_HDLC_PPP=m +CONFIG_HDLC_X25=m +CONFIG_PCI200SYN=m +CONFIG_WANXL=m +# CONFIG_PC300 is not set +# CONFIG_PC300TOO is not set +CONFIG_N2=m +CONFIG_C101=m +CONFIG_FARSYNC=m +# CONFIG_DSCC4 is not set +CONFIG_DLCI=m +CONFIG_DLCI_MAX=8 +CONFIG_SDLA=m +# CONFIG_WAN_ROUTER_DRIVERS is not set +CONFIG_LAPBETHER=m +CONFIG_X25_ASY=m +# CONFIG_SBNI is not set +CONFIG_ATM_DRIVERS=y +# CONFIG_ATM_DUMMY is not set +CONFIG_ATM_TCP=m +CONFIG_ATM_LANAI=m +CONFIG_ATM_ENI=m +# CONFIG_ATM_ENI_DEBUG is not set +# CONFIG_ATM_ENI_TUNE_BURST is not set +CONFIG_ATM_FIRESTREAM=m +CONFIG_ATM_ZATM=m +# CONFIG_ATM_ZATM_DEBUG is not set +CONFIG_ATM_NICSTAR=m +CONFIG_ATM_NICSTAR_USE_SUNI=y +CONFIG_ATM_NICSTAR_USE_IDT77105=y +CONFIG_ATM_IDT77252=m +# CONFIG_ATM_IDT77252_DEBUG is not set +CONFIG_ATM_IDT77252_RCV_ALL=y +CONFIG_ATM_IDT77252_USE_SUNI=y +# CONFIG_ATM_AMBASSADOR is not set +CONFIG_ATM_HORIZON=m +# CONFIG_ATM_HORIZON_DEBUG is not set +CONFIG_ATM_IA=m +# CONFIG_ATM_IA_DEBUG is not set +CONFIG_ATM_FORE200E_MAYBE=m +CONFIG_ATM_FORE200E_PCA=y +CONFIG_ATM_FORE200E_PCA_DEFAULT_FW=y +CONFIG_ATM_FORE200E_USE_TASKLET=y +CONFIG_ATM_FORE200E_TX_RETRY=16 +CONFIG_ATM_FORE200E_DEBUG=0 +CONFIG_ATM_FORE200E=m +CONFIG_ATM_HE=m +CONFIG_ATM_HE_USE_SUNI=y +CONFIG_XEN_NETDEV_FRONTEND=m +CONFIG_FDDI=y +CONFIG_DEFXX=m +# CONFIG_DEFXX_MMIO is not set +CONFIG_SKFP=m +CONFIG_HIPPI=y +CONFIG_ROADRUNNER=m +CONFIG_ROADRUNNER_LARGE_RINGS=y +CONFIG_PLIP=m +CONFIG_PPP=m +CONFIG_PPP_MULTILINK=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_ASYNC=m +CONFIG_PPP_SYNC_TTY=m +CONFIG_PPP_DEFLATE=m +CONFIG_PPP_BSDCOMP=m +CONFIG_PPP_MPPE=m +CONFIG_PPPOE=m +CONFIG_PPPOATM=m +# CONFIG_PPPOL2TP is not set +CONFIG_SLIP=m +CONFIG_SLIP_COMPRESSED=y +CONFIG_SLHC=m +CONFIG_SLIP_SMART=y +CONFIG_SLIP_MODE_SLIP6=y +CONFIG_NET_FC=y +CONFIG_SHAPER=m +CONFIG_NETCONSOLE=m +CONFIG_NETPOLL=y +CONFIG_NETPOLL_TRAP=y +CONFIG_NET_POLL_CONTROLLER=y +CONFIG_ISDN=m +CONFIG_ISDN_I4L=m +CONFIG_ISDN_PPP=y +CONFIG_ISDN_PPP_VJ=y +CONFIG_ISDN_MPP=y +CONFIG_IPPP_FILTER=y +CONFIG_ISDN_PPP_BSDCOMP=m +CONFIG_ISDN_AUDIO=y +CONFIG_ISDN_TTY_FAX=y +CONFIG_ISDN_X25=y + +# +# ISDN feature submodules +# +CONFIG_ISDN_DIVERSION=m + +# +# ISDN4Linux hardware drivers +# + +# +# Passive cards +# +CONFIG_ISDN_DRV_HISAX=m + +# +# D-channel protocol features +# +CONFIG_HISAX_EURO=y +CONFIG_DE_AOC=y +# CONFIG_HISAX_NO_SENDCOMPLETE is not set +# CONFIG_HISAX_NO_LLC is not set +# CONFIG_HISAX_NO_KEYPAD is not set +CONFIG_HISAX_1TR6=y +CONFIG_HISAX_NI1=y +CONFIG_HISAX_MAX_CARDS=8 + +# +# HiSax supported cards +# +CONFIG_HISAX_16_0=y +CONFIG_HISAX_16_3=y +CONFIG_HISAX_TELESPCI=y +CONFIG_HISAX_S0BOX=y +CONFIG_HISAX_AVM_A1=y +CONFIG_HISAX_FRITZPCI=y +CONFIG_HISAX_AVM_A1_PCMCIA=y +CONFIG_HISAX_ELSA=y +CONFIG_HISAX_IX1MICROR2=y +CONFIG_HISAX_DIEHLDIVA=y +CONFIG_HISAX_ASUSCOM=y +CONFIG_HISAX_TELEINT=y +CONFIG_HISAX_HFCS=y +CONFIG_HISAX_SEDLBAUER=y +CONFIG_HISAX_SPORTSTER=y +CONFIG_HISAX_MIC=y +CONFIG_HISAX_NETJET=y +CONFIG_HISAX_NETJET_U=y +CONFIG_HISAX_NICCY=y +CONFIG_HISAX_ISURF=y +CONFIG_HISAX_HSTSAPHIR=y +CONFIG_HISAX_BKM_A4T=y +CONFIG_HISAX_SCT_QUADRO=y +CONFIG_HISAX_GAZEL=y +CONFIG_HISAX_HFC_PCI=y +CONFIG_HISAX_W6692=y +CONFIG_HISAX_HFC_SX=y +CONFIG_HISAX_ENTERNOW_PCI=y +CONFIG_HISAX_DEBUG=y + +# +# HiSax PCMCIA card service modules +# +CONFIG_HISAX_SEDLBAUER_CS=m +CONFIG_HISAX_ELSA_CS=m +CONFIG_HISAX_AVM_A1_CS=m +CONFIG_HISAX_TELES_CS=m + +# +# HiSax sub driver modules +# +CONFIG_HISAX_ST5481=m +CONFIG_HISAX_HFCUSB=m +CONFIG_HISAX_HFC4S8S=m +CONFIG_HISAX_FRITZ_PCIPNP=m +CONFIG_HISAX_HDLC=y + +# +# Active cards +# +CONFIG_ISDN_DRV_ICN=m +CONFIG_ISDN_DRV_PCBIT=m +CONFIG_ISDN_DRV_SC=m +CONFIG_ISDN_DRV_ACT2000=m +# CONFIG_ISDN_DRV_GIGASET is not set +CONFIG_ISDN_CAPI=m +CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y +CONFIG_CAPI_TRACE=y +CONFIG_ISDN_CAPI_MIDDLEWARE=y +CONFIG_ISDN_CAPI_CAPI20=m +CONFIG_ISDN_CAPI_CAPIFS_BOOL=y +CONFIG_ISDN_CAPI_CAPIFS=m +CONFIG_ISDN_CAPI_CAPIDRV=m + +# +# CAPI hardware drivers +# +CONFIG_CAPI_AVM=y +CONFIG_ISDN_DRV_AVMB1_B1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCI=m +CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y +CONFIG_ISDN_DRV_AVMB1_T1ISA=m +CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m +CONFIG_ISDN_DRV_AVMB1_AVM_CS=m +CONFIG_ISDN_DRV_AVMB1_T1PCI=m +CONFIG_ISDN_DRV_AVMB1_C4=m +CONFIG_CAPI_EICON=y +CONFIG_ISDN_DIVAS=m +CONFIG_ISDN_DIVAS_BRIPCI=y +CONFIG_ISDN_DIVAS_PRIPCI=y +CONFIG_ISDN_DIVAS_DIVACAPI=m +CONFIG_ISDN_DIVAS_USERIDI=m +CONFIG_ISDN_DIVAS_MAINT=m +CONFIG_PHONE=m +CONFIG_PHONE_IXJ=m +CONFIG_PHONE_IXJ_PCMCIA=m + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_FF_MEMLESS=m +CONFIG_INPUT_POLLDEV=m + +# +# Userland interfaces +# +CONFIG_INPUT_MOUSEDEV=y +CONFIG_INPUT_MOUSEDEV_PSAUX=y +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +CONFIG_INPUT_JOYDEV=m +CONFIG_INPUT_TSDEV=m +CONFIG_INPUT_TSDEV_SCREEN_X=240 +CONFIG_INPUT_TSDEV_SCREEN_Y=320 +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +CONFIG_KEYBOARD_ATKBD=y +CONFIG_KEYBOARD_SUNKBD=m +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_XTKBD=m +CONFIG_KEYBOARD_NEWTON=m +CONFIG_KEYBOARD_STOWAWAY=m +CONFIG_INPUT_MOUSE=y +CONFIG_MOUSE_PS2=y +CONFIG_MOUSE_PS2_ALPS=y +CONFIG_MOUSE_PS2_LOGIPS2PP=y +CONFIG_MOUSE_PS2_SYNAPTICS=y +CONFIG_MOUSE_PS2_LIFEBOOK=y +CONFIG_MOUSE_PS2_TRACKPOINT=y +# CONFIG_MOUSE_PS2_TOUCHKIT is not set +CONFIG_MOUSE_SERIAL=m +CONFIG_MOUSE_APPLETOUCH=m +CONFIG_MOUSE_INPORT=m +CONFIG_MOUSE_ATIXL=y +CONFIG_MOUSE_LOGIBM=m +CONFIG_MOUSE_PC110PAD=m +# CONFIG_MOUSE_VSXXXAA is not set +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_ANALOG=m +CONFIG_JOYSTICK_A3D=m +CONFIG_JOYSTICK_ADI=m +CONFIG_JOYSTICK_COBRA=m +CONFIG_JOYSTICK_GF2K=m +CONFIG_JOYSTICK_GRIP=m +CONFIG_JOYSTICK_GRIP_MP=m +CONFIG_JOYSTICK_GUILLEMOT=m +CONFIG_JOYSTICK_INTERACT=m +CONFIG_JOYSTICK_SIDEWINDER=m +CONFIG_JOYSTICK_TMDC=m +CONFIG_JOYSTICK_IFORCE=m +CONFIG_JOYSTICK_IFORCE_USB=y +CONFIG_JOYSTICK_IFORCE_232=y +CONFIG_JOYSTICK_WARRIOR=m +CONFIG_JOYSTICK_MAGELLAN=m +CONFIG_JOYSTICK_SPACEORB=m +CONFIG_JOYSTICK_SPACEBALL=m +CONFIG_JOYSTICK_STINGER=m +CONFIG_JOYSTICK_TWIDJOY=m +CONFIG_JOYSTICK_DB9=m +CONFIG_JOYSTICK_GAMECON=m +CONFIG_JOYSTICK_TURBOGRAFX=m +CONFIG_JOYSTICK_JOYDUMP=m +CONFIG_JOYSTICK_XPAD=m +CONFIG_JOYSTICK_XPAD_FF=y +CONFIG_JOYSTICK_XPAD_LEDS=y +CONFIG_INPUT_TABLET=y +CONFIG_TABLET_USB_ACECAD=m +CONFIG_TABLET_USB_AIPTEK=m +CONFIG_TABLET_USB_GTCO=m +CONFIG_TABLET_USB_KBTAB=m +CONFIG_TABLET_USB_WACOM=m +CONFIG_INPUT_TOUCHSCREEN=y +CONFIG_TOUCHSCREEN_ADS7846=m +CONFIG_TOUCHSCREEN_FUJITSU=m +CONFIG_TOUCHSCREEN_GUNZE=m +CONFIG_TOUCHSCREEN_ELO=m +CONFIG_TOUCHSCREEN_MTOUCH=m +CONFIG_TOUCHSCREEN_MK712=m +CONFIG_TOUCHSCREEN_PENMOUNT=m +CONFIG_TOUCHSCREEN_TOUCHRIGHT=m +CONFIG_TOUCHSCREEN_TOUCHWIN=m +CONFIG_TOUCHSCREEN_UCB1400=m +CONFIG_TOUCHSCREEN_USB_COMPOSITE=m +CONFIG_TOUCHSCREEN_USB_EGALAX=y +CONFIG_TOUCHSCREEN_USB_PANJIT=y +CONFIG_TOUCHSCREEN_USB_3M=y +CONFIG_TOUCHSCREEN_USB_ITM=y +CONFIG_TOUCHSCREEN_USB_ETURBO=y +CONFIG_TOUCHSCREEN_USB_GUNZE=y +CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y +CONFIG_TOUCHSCREEN_USB_IRTOUCH=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_PCSPKR=y +CONFIG_INPUT_WISTRON_BTNS=m +CONFIG_INPUT_ATLAS_BTNS=m +CONFIG_INPUT_ATI_REMOTE=m +CONFIG_INPUT_ATI_REMOTE2=m +CONFIG_INPUT_KEYSPAN_REMOTE=m +CONFIG_INPUT_POWERMATE=m +CONFIG_INPUT_YEALINK=m +CONFIG_INPUT_UINPUT=m + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_I8042=y +CONFIG_SERIO_SERPORT=m +CONFIG_SERIO_CT82C710=m +CONFIG_SERIO_PARKBD=m +CONFIG_SERIO_PCIPS2=m +CONFIG_SERIO_LIBPS2=y +CONFIG_SERIO_RAW=m +CONFIG_GAMEPORT=m +CONFIG_GAMEPORT_NS558=m +CONFIG_GAMEPORT_L4=m +CONFIG_GAMEPORT_EMU10K1=m +CONFIG_GAMEPORT_FM801=m + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y +# CONFIG_VT_HW_CONSOLE_BINDING is not set +CONFIG_SERIAL_NONSTANDARD=y +# CONFIG_COMPUTONE is not set +CONFIG_ROCKETPORT=m +CONFIG_CYCLADES=m +# CONFIG_CYZ_INTR is not set +CONFIG_DIGIEPCA=m +# CONFIG_ESPSERIAL is not set +# CONFIG_MOXA_INTELLIO is not set +CONFIG_MOXA_SMARTIO=m +CONFIG_MOXA_SMARTIO_NEW=m +# CONFIG_ISI is not set +CONFIG_SYNCLINK=m +CONFIG_SYNCLINKMP=m +CONFIG_SYNCLINK_GT=m +CONFIG_N_HDLC=m +# CONFIG_SPECIALIX is not set +CONFIG_SX=m +CONFIG_RIO=m +CONFIG_RIO_OLDPCI=y +CONFIG_STALDRV=y + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_SERIAL_8250_PCI=y +CONFIG_SERIAL_8250_PNP=y +CONFIG_SERIAL_8250_CS=m +CONFIG_SERIAL_8250_NR_UARTS=8 +CONFIG_SERIAL_8250_RUNTIME_UARTS=4 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +CONFIG_SERIAL_8250_FOURPORT=m +CONFIG_SERIAL_8250_ACCENT=m +CONFIG_SERIAL_8250_BOCA=m +CONFIG_SERIAL_8250_EXAR_ST16C554=m +CONFIG_SERIAL_8250_HUB6=m +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +CONFIG_SERIAL_8250_RSA=y + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_SERIAL_JSM=m +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +CONFIG_PRINTER=m +# CONFIG_LP_CONSOLE is not set +CONFIG_PPDEV=m +CONFIG_TIPAR=m +CONFIG_HVC_DRIVER=y +CONFIG_HVC_XEN=y +CONFIG_IPMI_HANDLER=m +CONFIG_IPMI_PANIC_EVENT=y +CONFIG_IPMI_PANIC_STRING=y +CONFIG_IPMI_DEVICE_INTERFACE=m +CONFIG_IPMI_SI=m +CONFIG_IPMI_WATCHDOG=m +CONFIG_IPMI_POWEROFF=m +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set + +# +# Watchdog Device Drivers +# +CONFIG_SOFT_WATCHDOG=m +CONFIG_ACQUIRE_WDT=m +CONFIG_ADVANTECH_WDT=m +CONFIG_ALIM1535_WDT=m +CONFIG_ALIM7101_WDT=m +CONFIG_SC520_WDT=m +CONFIG_EUROTECH_WDT=m +CONFIG_IB700_WDT=m +CONFIG_IBMASR=m +CONFIG_WAFER_WDT=m +CONFIG_I6300ESB_WDT=m +CONFIG_ITCO_WDT=m +CONFIG_ITCO_VENDOR_SUPPORT=y +CONFIG_SC1200_WDT=m +CONFIG_SCx200_WDT=m +CONFIG_PC87413_WDT=m +CONFIG_60XX_WDT=m +CONFIG_SBC8360_WDT=m +CONFIG_CPU5_WDT=m +CONFIG_SMSC37B787_WDT=m +CONFIG_W83627HF_WDT=m +CONFIG_W83697HF_WDT=m +CONFIG_W83877F_WDT=m +CONFIG_W83977F_WDT=m +CONFIG_MACHZ_WDT=m +CONFIG_SBC_EPX_C3_WATCHDOG=m + +# +# ISA-based Watchdog Cards +# +CONFIG_PCWATCHDOG=m +CONFIG_MIXCOMWD=m +CONFIG_WDT=m +CONFIG_WDT_501=y + +# +# PCI-based Watchdog Cards +# +CONFIG_PCIPCWATCHDOG=m +CONFIG_WDTPCI=m +CONFIG_WDT_501_PCI=y + +# +# USB-based Watchdog Cards +# +CONFIG_USBPCWATCHDOG=m +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_INTEL=m +CONFIG_HW_RANDOM_AMD=m +CONFIG_HW_RANDOM_GEODE=m +CONFIG_HW_RANDOM_VIA=m +CONFIG_NVRAM=m +CONFIG_RTC=y +CONFIG_DTLK=m +CONFIG_R3964=m +CONFIG_APPLICOM=m +CONFIG_SONYPI=m +CONFIG_AGP=m +CONFIG_AGP_ALI=m +CONFIG_AGP_ATI=m +CONFIG_AGP_AMD=m +CONFIG_AGP_AMD64=m +CONFIG_AGP_INTEL=m +CONFIG_AGP_NVIDIA=m +CONFIG_AGP_SIS=m +CONFIG_AGP_SWORKS=m +CONFIG_AGP_VIA=m +CONFIG_AGP_EFFICEON=m +CONFIG_DRM=m +CONFIG_DRM_TDFX=m +CONFIG_DRM_R128=m +CONFIG_DRM_RADEON=m +CONFIG_DRM_I810=m +CONFIG_DRM_I830=m +CONFIG_DRM_I915=m +CONFIG_DRM_MGA=m +CONFIG_DRM_SIS=m +CONFIG_DRM_VIA=m +CONFIG_DRM_SAVAGE=m + +# +# PCMCIA character devices +# +CONFIG_SYNCLINK_CS=m +CONFIG_CARDMAN_4000=m +CONFIG_CARDMAN_4040=m +CONFIG_MWAVE=m +CONFIG_SCx200_GPIO=m +CONFIG_PC8736x_GPIO=m +CONFIG_NSC_GPIO=m +CONFIG_CS5535_GPIO=m +CONFIG_RAW_DRIVER=m +CONFIG_MAX_RAW_DEVS=4096 +CONFIG_HPET=y +# CONFIG_HPET_RTC_IRQ is not set +CONFIG_HPET_MMAP=y +CONFIG_HANGCHECK_TIMER=m +CONFIG_TCG_TPM=m +CONFIG_TCG_TIS=m +CONFIG_TCG_NSC=m +CONFIG_TCG_ATMEL=m +CONFIG_TCG_INFINEON=m +CONFIG_TELCLOCK=m +CONFIG_DEVPORT=y +CONFIG_I2C=m +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=m + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=m +CONFIG_I2C_ALGOPCF=m +CONFIG_I2C_ALGOPCA=m + +# +# I2C Hardware Bus support +# +CONFIG_I2C_ALI1535=m +CONFIG_I2C_ALI1563=m +CONFIG_I2C_ALI15X3=m +CONFIG_I2C_AMD756=m +CONFIG_I2C_AMD756_S4882=m +CONFIG_I2C_AMD8111=m +CONFIG_I2C_I801=m +CONFIG_I2C_I810=m +CONFIG_I2C_PIIX4=m +CONFIG_I2C_NFORCE2=m +CONFIG_I2C_OCORES=m +CONFIG_I2C_PARPORT=m +CONFIG_I2C_PARPORT_LIGHT=m +CONFIG_I2C_PROSAVAGE=m +CONFIG_I2C_SAVAGE4=m +CONFIG_I2C_SIMTEC=m +CONFIG_SCx200_I2C=m +CONFIG_SCx200_I2C_SCL=12 +CONFIG_SCx200_I2C_SDA=13 +CONFIG_SCx200_ACB=m +CONFIG_I2C_SIS5595=m +CONFIG_I2C_SIS630=m +CONFIG_I2C_SIS96X=m +CONFIG_I2C_TAOS_EVM=m +CONFIG_I2C_STUB=m +CONFIG_I2C_TINY_USB=m +CONFIG_I2C_VIA=m +CONFIG_I2C_VIAPRO=m +CONFIG_I2C_VOODOO3=m +CONFIG_I2C_PCA_ISA=m + +# +# Miscellaneous I2C Chip support +# +CONFIG_SENSORS_DS1337=m +CONFIG_SENSORS_DS1374=m +CONFIG_DS1682=m +CONFIG_SENSORS_EEPROM=m +CONFIG_SENSORS_PCF8574=m +CONFIG_SENSORS_PCA9539=m +CONFIG_SENSORS_PCF8591=m +CONFIG_SENSORS_MAX6875=m +CONFIG_SENSORS_TSL2550=m +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# CONFIG_I2C_DEBUG_CHIP is not set + +# +# SPI support +# +CONFIG_SPI=y +# CONFIG_SPI_DEBUG is not set +CONFIG_SPI_MASTER=y + +# +# SPI Master Controller Drivers +# +CONFIG_SPI_BITBANG=m +# CONFIG_SPI_BUTTERFLY is not set +CONFIG_SPI_LM70_LLP=m + +# +# SPI Protocol Masters +# +CONFIG_SPI_AT25=m +CONFIG_SPI_SPIDEV=m +CONFIG_SPI_TLE62X0=m +CONFIG_W1=m +CONFIG_W1_CON=y + +# +# 1-wire Bus Masters +# +CONFIG_W1_MASTER_MATROX=m +CONFIG_W1_MASTER_DS2490=m +CONFIG_W1_MASTER_DS2482=m + +# +# 1-wire Slaves +# +CONFIG_W1_SLAVE_THERM=m +CONFIG_W1_SLAVE_SMEM=m +CONFIG_W1_SLAVE_DS2433=m +# CONFIG_W1_SLAVE_DS2433_CRC is not set +CONFIG_W1_SLAVE_DS2760=m +CONFIG_POWER_SUPPLY=m +# CONFIG_POWER_SUPPLY_DEBUG is not set +# CONFIG_PDA_POWER is not set +# CONFIG_BATTERY_DS2760 is not set +CONFIG_HWMON=m +CONFIG_HWMON_VID=m +CONFIG_SENSORS_ABITUGURU=m +CONFIG_SENSORS_ABITUGURU3=m +CONFIG_SENSORS_AD7418=m +CONFIG_SENSORS_ADM1021=m +CONFIG_SENSORS_ADM1025=m +CONFIG_SENSORS_ADM1026=m +CONFIG_SENSORS_ADM1029=m +CONFIG_SENSORS_ADM1031=m +CONFIG_SENSORS_ADM9240=m +CONFIG_SENSORS_K8TEMP=m +CONFIG_SENSORS_ASB100=m +CONFIG_SENSORS_ATXP1=m +CONFIG_SENSORS_DS1621=m +CONFIG_SENSORS_F71805F=m +CONFIG_SENSORS_FSCHER=m +CONFIG_SENSORS_FSCPOS=m +CONFIG_SENSORS_GL518SM=m +CONFIG_SENSORS_GL520SM=m +CONFIG_SENSORS_CORETEMP=m +CONFIG_SENSORS_IT87=m +CONFIG_SENSORS_LM63=m +CONFIG_SENSORS_LM70=m +CONFIG_SENSORS_LM75=m +CONFIG_SENSORS_LM77=m +CONFIG_SENSORS_LM78=m +CONFIG_SENSORS_LM80=m +CONFIG_SENSORS_LM83=m +CONFIG_SENSORS_LM85=m +CONFIG_SENSORS_LM87=m +CONFIG_SENSORS_LM90=m +CONFIG_SENSORS_LM92=m +CONFIG_SENSORS_LM93=m +CONFIG_SENSORS_MAX1619=m +CONFIG_SENSORS_MAX6650=m +CONFIG_SENSORS_PC87360=m +CONFIG_SENSORS_PC87427=m +CONFIG_SENSORS_SIS5595=m +CONFIG_SENSORS_DME1737=m +CONFIG_SENSORS_SMSC47M1=m +CONFIG_SENSORS_SMSC47M192=m +CONFIG_SENSORS_SMSC47B397=m +CONFIG_SENSORS_THMC50=m +CONFIG_SENSORS_VIA686A=m +CONFIG_SENSORS_VT1211=m +CONFIG_SENSORS_VT8231=m +CONFIG_SENSORS_W83781D=m +CONFIG_SENSORS_W83791D=m +CONFIG_SENSORS_W83792D=m +CONFIG_SENSORS_W83793=m +CONFIG_SENSORS_W83L785TS=m +CONFIG_SENSORS_W83627HF=m +CONFIG_SENSORS_W83627EHF=m +CONFIG_SENSORS_HDAPS=m +CONFIG_SENSORS_APPLESMC=m +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_SM501=m + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m +CONFIG_VIDEO_V4L1=y +CONFIG_VIDEO_V4L1_COMPAT=y +CONFIG_VIDEO_V4L2=y +CONFIG_VIDEO_CAPTURE_DRIVERS=y +# CONFIG_VIDEO_ADV_DEBUG is not set +CONFIG_VIDEO_HELPER_CHIPS_AUTO=y +CONFIG_VIDEO_TVAUDIO=m +CONFIG_VIDEO_TDA7432=m +CONFIG_VIDEO_TDA9840=m +CONFIG_VIDEO_TDA9875=m +CONFIG_VIDEO_TEA6415C=m +CONFIG_VIDEO_TEA6420=m +CONFIG_VIDEO_MSP3400=m +CONFIG_VIDEO_CS53L32A=m +CONFIG_VIDEO_WM8775=m +CONFIG_VIDEO_WM8739=m +CONFIG_VIDEO_BT819=m +CONFIG_VIDEO_BT856=m +CONFIG_VIDEO_OV7670=m +CONFIG_VIDEO_SAA7110=m +CONFIG_VIDEO_SAA7111=m +CONFIG_VIDEO_SAA7114=m +CONFIG_VIDEO_SAA711X=m +CONFIG_VIDEO_TVP5150=m +CONFIG_VIDEO_VPX3220=m +CONFIG_VIDEO_CX25840=m +CONFIG_VIDEO_CX2341X=m +CONFIG_VIDEO_SAA7127=m +CONFIG_VIDEO_SAA7185=m +CONFIG_VIDEO_ADV7170=m +CONFIG_VIDEO_ADV7175=m +CONFIG_VIDEO_UPD64031A=m +CONFIG_VIDEO_UPD64083=m +CONFIG_VIDEO_VIVI=m +CONFIG_VIDEO_BT848=m +CONFIG_VIDEO_BT848_DVB=y +CONFIG_VIDEO_SAA6588=m +CONFIG_VIDEO_PMS=m +CONFIG_VIDEO_BWQCAM=m +CONFIG_VIDEO_CQCAM=m +CONFIG_VIDEO_W9966=m +CONFIG_VIDEO_CPIA=m +CONFIG_VIDEO_CPIA_PP=m +CONFIG_VIDEO_CPIA_USB=m +# CONFIG_VIDEO_CPIA2 is not set +CONFIG_VIDEO_SAA5246A=m +CONFIG_VIDEO_SAA5249=m +CONFIG_TUNER_3036=m +# CONFIG_TUNER_TEA5761 is not set +CONFIG_VIDEO_STRADIS=m +CONFIG_VIDEO_ZORAN_ZR36060=m +CONFIG_VIDEO_ZORAN=m +CONFIG_VIDEO_ZORAN_BUZ=m +CONFIG_VIDEO_ZORAN_DC10=m +CONFIG_VIDEO_ZORAN_DC30=m +CONFIG_VIDEO_ZORAN_LML33=m +CONFIG_VIDEO_ZORAN_LML33R10=m +# CONFIG_VIDEO_ZORAN_AVS6EYES is not set +CONFIG_VIDEO_MEYE=m +CONFIG_VIDEO_SAA7134=m +CONFIG_VIDEO_SAA7134_ALSA=m +# CONFIG_VIDEO_SAA7134_OSS is not set +CONFIG_VIDEO_SAA7134_DVB=m +CONFIG_VIDEO_MXB=m +CONFIG_VIDEO_DPC=m +CONFIG_VIDEO_HEXIUM_ORION=m +CONFIG_VIDEO_HEXIUM_GEMINI=m +CONFIG_VIDEO_CX88=m +CONFIG_VIDEO_CX88_ALSA=m +CONFIG_VIDEO_CX88_BLACKBIRD=m +CONFIG_VIDEO_CX88_DVB=m +CONFIG_VIDEO_CX88_VP3054=m +CONFIG_VIDEO_IVTV=m +CONFIG_VIDEO_CAFE_CCIC=m +CONFIG_V4L_USB_DRIVERS=y +CONFIG_VIDEO_PVRUSB2=m +CONFIG_VIDEO_PVRUSB2_29XXX=y +CONFIG_VIDEO_PVRUSB2_24XXX=y +CONFIG_VIDEO_PVRUSB2_SYSFS=y +# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set +CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_USBVISION=m +CONFIG_VIDEO_USBVIDEO=m +CONFIG_USB_VICAM=m +CONFIG_USB_IBMCAM=m +CONFIG_USB_KONICAWC=m +CONFIG_USB_QUICKCAM_MESSENGER=m +CONFIG_USB_ET61X251=m +CONFIG_VIDEO_OVCAMCHIP=m +CONFIG_USB_W9968CF=m +CONFIG_USB_OV511=m +CONFIG_USB_SE401=m +CONFIG_USB_SN9C102=m +CONFIG_USB_STV680=m +CONFIG_USB_ZC0301=m +CONFIG_USB_PWC=m +# CONFIG_USB_PWC_DEBUG is not set +CONFIG_USB_ZR364XX=m +CONFIG_RADIO_ADAPTERS=y +CONFIG_RADIO_CADET=m +CONFIG_RADIO_RTRACK=m +CONFIG_RADIO_RTRACK2=m +CONFIG_RADIO_AZTECH=m +CONFIG_RADIO_GEMTEK=m +CONFIG_RADIO_GEMTEK_PCI=m +CONFIG_RADIO_MAXIRADIO=m +CONFIG_RADIO_MAESTRO=m +CONFIG_RADIO_SF16FMI=m +CONFIG_RADIO_SF16FMR2=m +CONFIG_RADIO_TERRATEC=m +CONFIG_RADIO_TRUST=m +CONFIG_RADIO_TYPHOON=m +CONFIG_RADIO_TYPHOON_PROC_FS=y +CONFIG_RADIO_ZOLTRIX=m +CONFIG_USB_DSBR=m +CONFIG_DVB_CORE=m +CONFIG_DVB_CORE_ATTACH=y +CONFIG_DVB_CAPTURE_DRIVERS=y + +# +# Supported SAA7146 based PCI Adapters +# +CONFIG_DVB_AV7110=m +# CONFIG_DVB_AV7110_FIRMWARE is not set +CONFIG_DVB_AV7110_OSD=y +CONFIG_DVB_BUDGET=m +CONFIG_DVB_BUDGET_CI=m +CONFIG_DVB_BUDGET_AV=m +CONFIG_DVB_BUDGET_PATCH=m + +# +# Supported USB Adapters +# +CONFIG_DVB_USB=m +# CONFIG_DVB_USB_DEBUG is not set +CONFIG_DVB_USB_A800=m +CONFIG_DVB_USB_DIBUSB_MB=m +# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set +CONFIG_DVB_USB_DIBUSB_MC=m +CONFIG_DVB_USB_DIB0700=m +CONFIG_DVB_USB_UMT_010=m +CONFIG_DVB_USB_CXUSB=m +CONFIG_DVB_USB_M920X=m +CONFIG_DVB_USB_GL861=m +CONFIG_DVB_USB_AU6610=m +CONFIG_DVB_USB_DIGITV=m +CONFIG_DVB_USB_VP7045=m +CONFIG_DVB_USB_VP702X=m +CONFIG_DVB_USB_GP8PSK=m +CONFIG_DVB_USB_NOVA_T_USB2=m +CONFIG_DVB_USB_TTUSB2=m +CONFIG_DVB_USB_DTT200U=m +CONFIG_DVB_USB_OPERA1=m +CONFIG_DVB_USB_AF9005=m +CONFIG_DVB_USB_AF9005_REMOTE=m +CONFIG_DVB_TTUSB_BUDGET=m +CONFIG_DVB_TTUSB_DEC=m +CONFIG_DVB_CINERGYT2=m +# CONFIG_DVB_CINERGYT2_TUNING is not set + +# +# Supported FlexCopII (B2C2) Adapters +# +CONFIG_DVB_B2C2_FLEXCOP=m +CONFIG_DVB_B2C2_FLEXCOP_PCI=m +CONFIG_DVB_B2C2_FLEXCOP_USB=m +# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set + +# +# Supported BT878 Adapters +# +CONFIG_DVB_BT8XX=m + +# +# Supported Pluto2 Adapters +# +# CONFIG_DVB_PLUTO2 is not set + +# +# Supported DVB Frontends +# + +# +# Customise DVB Frontends +# +# CONFIG_DVB_FE_CUSTOMISE is not set + +# +# DVB-S (satellite) frontends +# +CONFIG_DVB_STV0299=m +CONFIG_DVB_CX24110=m +CONFIG_DVB_CX24123=m +CONFIG_DVB_TDA8083=m +CONFIG_DVB_MT312=m +CONFIG_DVB_VES1X93=m +CONFIG_DVB_S5H1420=m +CONFIG_DVB_TDA10086=m + +# +# DVB-T (terrestrial) frontends +# +CONFIG_DVB_SP8870=m +CONFIG_DVB_SP887X=m +CONFIG_DVB_CX22700=m +CONFIG_DVB_CX22702=m +CONFIG_DVB_L64781=m +CONFIG_DVB_TDA1004X=m +CONFIG_DVB_NXT6000=m +CONFIG_DVB_MT352=m +CONFIG_DVB_ZL10353=m +CONFIG_DVB_DIB3000MB=m +CONFIG_DVB_DIB3000MC=m +CONFIG_DVB_DIB7000M=m +CONFIG_DVB_DIB7000P=m + +# +# DVB-C (cable) frontends +# +CONFIG_DVB_VES1820=m +CONFIG_DVB_TDA10021=m +CONFIG_DVB_TDA10023=m +CONFIG_DVB_STV0297=m + +# +# ATSC (North American/Korean Terrestrial/Cable DTV) frontends +# +CONFIG_DVB_NXT200X=m +CONFIG_DVB_OR51211=m +CONFIG_DVB_OR51132=m +CONFIG_DVB_BCM3510=m +CONFIG_DVB_LGDT330X=m + +# +# Tuners/PLL support +# +CONFIG_DVB_PLL=m +CONFIG_DVB_TDA826X=m +CONFIG_DVB_TDA827X=m +CONFIG_DVB_TUNER_QT1010=m +CONFIG_DVB_TUNER_MT2060=m + +# +# Miscellaneous devices +# +CONFIG_DVB_LNBP21=m +CONFIG_DVB_ISL6421=m +CONFIG_DVB_TUA6100=m +CONFIG_VIDEO_SAA7146=m +CONFIG_VIDEO_SAA7146_VV=m +CONFIG_VIDEO_TUNER=m +CONFIG_VIDEO_BUF=m +CONFIG_VIDEO_BUF_DVB=m +CONFIG_VIDEO_BTCX=m +CONFIG_VIDEO_IR_I2C=m +CONFIG_VIDEO_IR=m +CONFIG_VIDEO_TVEEPROM=m +CONFIG_DAB=y +CONFIG_USB_DABUSB=m + +# +# Graphics support +# +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_LCD_CLASS_DEVICE=m +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_BACKLIGHT_PROGEAR=m +CONFIG_BACKLIGHT_CARILLO_RANCH=m + +# +# Display device support +# +CONFIG_DISPLAY_SUPPORT=m + +# +# Display hardware drivers +# +CONFIG_VGASTATE=m +CONFIG_VIDEO_OUTPUT_CONTROL=m +CONFIG_FB=y +CONFIG_FIRMWARE_EDID=y +CONFIG_FB_DDC=m +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SYS_FILLRECT=m +CONFIG_FB_SYS_COPYAREA=m +CONFIG_FB_SYS_IMAGEBLIT=m +CONFIG_FB_SYS_FOPS=m +CONFIG_FB_DEFERRED_IO=y +# CONFIG_FB_SVGALIB is not set +# CONFIG_FB_MACMODES is not set +CONFIG_FB_BACKLIGHT=y +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +CONFIG_FB_CIRRUS=m +CONFIG_FB_PM2=m +CONFIG_FB_PM2_FIFO_DISCONNECT=y +CONFIG_FB_CYBER2000=m +CONFIG_FB_ARC=m +# CONFIG_FB_ASILIANT is not set +CONFIG_FB_IMSTT=y +CONFIG_FB_VGA16=m +CONFIG_FB_VESA=y +CONFIG_FB_IMAC=y +CONFIG_FB_HECUBA=m +CONFIG_FB_HGA=m +CONFIG_FB_HGA_ACCEL=y +CONFIG_FB_S1D13XXX=m +CONFIG_FB_NVIDIA=m +CONFIG_FB_NVIDIA_I2C=y +# CONFIG_FB_NVIDIA_DEBUG is not set +CONFIG_FB_NVIDIA_BACKLIGHT=y +CONFIG_FB_RIVA=m +CONFIG_FB_RIVA_I2C=y +# CONFIG_FB_RIVA_DEBUG is not set +CONFIG_FB_RIVA_BACKLIGHT=y +CONFIG_FB_I810=m +CONFIG_FB_I810_GTF=y +CONFIG_FB_I810_I2C=y +CONFIG_FB_LE80578=m +CONFIG_FB_CARILLO_RANCH=m +CONFIG_FB_INTEL=m +# CONFIG_FB_INTEL_DEBUG is not set +CONFIG_FB_INTEL_I2C=y +# CONFIG_FB_MATROX is not set +CONFIG_FB_RADEON=m +CONFIG_FB_RADEON_I2C=y +CONFIG_FB_RADEON_BACKLIGHT=y +# CONFIG_FB_RADEON_DEBUG is not set +# CONFIG_FB_ATY128 is not set +CONFIG_FB_ATY=m +CONFIG_FB_ATY_CT=y +CONFIG_FB_ATY_GENERIC_LCD=y +CONFIG_FB_ATY_GX=y +CONFIG_FB_ATY_BACKLIGHT=y +# CONFIG_FB_S3 is not set +CONFIG_FB_SAVAGE=m +CONFIG_FB_SAVAGE_I2C=y +CONFIG_FB_SAVAGE_ACCEL=y +CONFIG_FB_SIS=m +CONFIG_FB_SIS_300=y +CONFIG_FB_SIS_315=y +CONFIG_FB_NEOMAGIC=m +CONFIG_FB_KYRO=m +CONFIG_FB_3DFX=m +CONFIG_FB_3DFX_ACCEL=y +CONFIG_FB_VOODOO1=m +# CONFIG_FB_VT8623 is not set +CONFIG_FB_CYBLA=m +CONFIG_FB_TRIDENT=m +CONFIG_FB_TRIDENT_ACCEL=y +# CONFIG_FB_ARK is not set +CONFIG_FB_PM3=m +CONFIG_FB_GEODE=y +CONFIG_FB_GEODE_LX=m +CONFIG_FB_GEODE_GX=m +# CONFIG_FB_GEODE_GX_SET_FBSIZE is not set +CONFIG_FB_GEODE_GX1=m +CONFIG_FB_SM501=m +# CONFIG_FB_VIRTUAL is not set + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VGACON_SOFT_SCROLLBACK is not set +CONFIG_VIDEO_SELECT=y +CONFIG_MDA_CONSOLE=m +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set +# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +# CONFIG_LOGO is not set + +# +# Sound +# +CONFIG_SOUND=m + +# +# Advanced Linux Sound Architecture +# +CONFIG_SND=m +CONFIG_SND_TIMER=m +CONFIG_SND_PCM=m +CONFIG_SND_HWDEP=m +CONFIG_SND_RAWMIDI=m +CONFIG_SND_SEQUENCER=m +CONFIG_SND_SEQ_DUMMY=m +CONFIG_SND_OSSEMUL=y +CONFIG_SND_MIXER_OSS=m +CONFIG_SND_PCM_OSS=m +CONFIG_SND_PCM_OSS_PLUGINS=y +CONFIG_SND_SEQUENCER_OSS=y +CONFIG_SND_RTCTIMER=m +CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y +# CONFIG_SND_DYNAMIC_MINORS is not set +CONFIG_SND_SUPPORT_OLD_API=y +CONFIG_SND_VERBOSE_PROCFS=y +CONFIG_SND_VERBOSE_PRINTK=y +CONFIG_SND_DEBUG=y +# CONFIG_SND_DEBUG_DETECT is not set +# CONFIG_SND_PCM_XRUN_DEBUG is not set + +# +# Generic devices +# +CONFIG_SND_MPU401_UART=m +CONFIG_SND_OPL3_LIB=m +CONFIG_SND_OPL4_LIB=m +CONFIG_SND_VX_LIB=m +CONFIG_SND_AC97_CODEC=m +CONFIG_SND_DUMMY=m +CONFIG_SND_VIRMIDI=m +CONFIG_SND_MTPAV=m +CONFIG_SND_MTS64=m +CONFIG_SND_SERIAL_U16550=m +CONFIG_SND_MPU401=m +CONFIG_SND_PORTMAN2X4=m +CONFIG_SND_AD1848_LIB=m +CONFIG_SND_CS4231_LIB=m +CONFIG_SND_SB_COMMON=m +CONFIG_SND_SB8_DSP=m +CONFIG_SND_SB16_DSP=m + +# +# ISA devices +# +# CONFIG_SND_ADLIB is not set +CONFIG_SND_AD1816A=m +CONFIG_SND_AD1848=m +CONFIG_SND_ALS100=m +CONFIG_SND_AZT2320=m +CONFIG_SND_CMI8330=m +CONFIG_SND_CS4231=m +CONFIG_SND_CS4232=m +CONFIG_SND_CS4236=m +CONFIG_SND_DT019X=m +CONFIG_SND_ES968=m +CONFIG_SND_ES1688=m +CONFIG_SND_ES18XX=m +CONFIG_SND_GUS_SYNTH=m +CONFIG_SND_GUSCLASSIC=m +CONFIG_SND_GUSEXTREME=m +CONFIG_SND_GUSMAX=m +CONFIG_SND_INTERWAVE=m +CONFIG_SND_INTERWAVE_STB=m +CONFIG_SND_OPL3SA2=m +CONFIG_SND_OPTI92X_AD1848=m +CONFIG_SND_OPTI92X_CS4231=m +CONFIG_SND_OPTI93X=m +CONFIG_SND_MIRO=m +CONFIG_SND_SB8=m +CONFIG_SND_SB16=m +CONFIG_SND_SBAWE=m +CONFIG_SND_SB16_CSP=y +CONFIG_SND_SB16_CSP_FIRMWARE_IN_KERNEL=y +CONFIG_SND_SGALAXY=m +CONFIG_SND_SSCAPE=m +CONFIG_SND_WAVEFRONT=m +CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL=y + +# +# PCI devices +# +CONFIG_SND_AD1889=m +CONFIG_SND_ALS300=m +CONFIG_SND_ALS4000=m +CONFIG_SND_ALI5451=m +CONFIG_SND_ATIIXP=m +CONFIG_SND_ATIIXP_MODEM=m +CONFIG_SND_AU8810=m +CONFIG_SND_AU8820=m +CONFIG_SND_AU8830=m +CONFIG_SND_AZT3328=m +CONFIG_SND_BT87X=m +# CONFIG_SND_BT87X_OVERCLOCK is not set +CONFIG_SND_CA0106=m +CONFIG_SND_CMIPCI=m +CONFIG_SND_CS4281=m +CONFIG_SND_CS46XX=m +CONFIG_SND_CS46XX_NEW_DSP=y +CONFIG_SND_CS5530=m +CONFIG_SND_CS5535AUDIO=m +CONFIG_SND_DARLA20=m +CONFIG_SND_GINA20=m +CONFIG_SND_LAYLA20=m +CONFIG_SND_DARLA24=m +CONFIG_SND_GINA24=m +CONFIG_SND_LAYLA24=m +CONFIG_SND_MONA=m +CONFIG_SND_MIA=m +CONFIG_SND_ECHO3G=m +CONFIG_SND_INDIGO=m +CONFIG_SND_INDIGOIO=m +CONFIG_SND_INDIGODJ=m +CONFIG_SND_EMU10K1=m +CONFIG_SND_EMU10K1X=m +CONFIG_SND_ENS1370=m +CONFIG_SND_ENS1371=m +CONFIG_SND_ES1938=m +CONFIG_SND_ES1968=m +CONFIG_SND_FM801=m +CONFIG_SND_FM801_TEA575X_BOOL=y +CONFIG_SND_FM801_TEA575X=m +CONFIG_SND_HDA_INTEL=m +CONFIG_SND_HDSP=m +CONFIG_SND_HDSPM=m +CONFIG_SND_ICE1712=m +CONFIG_SND_ICE1724=m +CONFIG_SND_INTEL8X0=m +CONFIG_SND_INTEL8X0M=m +CONFIG_SND_KORG1212=m +CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y +CONFIG_SND_MAESTRO3=m +CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y +CONFIG_SND_MIXART=m +CONFIG_SND_NM256=m +CONFIG_SND_PCXHR=m +CONFIG_SND_RIPTIDE=m +CONFIG_SND_RME32=m +CONFIG_SND_RME96=m +CONFIG_SND_RME9652=m +CONFIG_SND_SONICVIBES=m +CONFIG_SND_TRIDENT=m +CONFIG_SND_VIA82XX=m +CONFIG_SND_VIA82XX_MODEM=m +CONFIG_SND_VX222=m +CONFIG_SND_YMFPCI=m +CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y +CONFIG_SND_AC97_POWER_SAVE=y + +# +# USB devices +# +CONFIG_SND_USB_AUDIO=m +CONFIG_SND_USB_USX2Y=m +CONFIG_SND_USB_CAIAQ=m +CONFIG_SND_USB_CAIAQ_INPUT=y + +# +# PCMCIA devices +# +CONFIG_SND_VXPOCKET=m +CONFIG_SND_PDAUDIOCF=m + +# +# System on Chip audio support +# +# CONFIG_SND_SOC is not set + +# +# SoC Audio support for SuperH +# + +# +# Open Sound System +# +CONFIG_SOUND_PRIME=m +CONFIG_SOUND_TRIDENT=m +# CONFIG_SOUND_MSNDCLAS is not set +# CONFIG_SOUND_MSNDPIN is not set +CONFIG_SOUND_OSS=m +CONFIG_SOUND_TRACEINIT=y +CONFIG_SOUND_DMAP=y +CONFIG_SOUND_SSCAPE=m +CONFIG_SOUND_VMIDI=m +CONFIG_SOUND_TRIX=m +CONFIG_SOUND_MSS=m +CONFIG_SOUND_MPU401=m +CONFIG_SOUND_PAS=m +CONFIG_SOUND_PSS=m +CONFIG_PSS_MIXER=y +# CONFIG_PSS_HAVE_BOOT is not set +CONFIG_SOUND_SB=m +CONFIG_SOUND_YM3812=m +CONFIG_SOUND_UART6850=m +CONFIG_SOUND_AEDSP16=m +CONFIG_SC6600=y +CONFIG_SC6600_JOY=y +CONFIG_SC6600_CDROM=4 +CONFIG_SC6600_CDROMBASE=0x0 +# CONFIG_AEDSP16_MSS is not set +# CONFIG_AEDSP16_SBPRO is not set +CONFIG_SOUND_KAHLUA=m +CONFIG_AC97_BUS=m +CONFIG_HID_SUPPORT=y +CONFIG_HID=y +# CONFIG_HID_DEBUG is not set + +# +# USB Input Devices +# +CONFIG_USB_HID=m +CONFIG_USB_HIDINPUT_POWERBOOK=y +CONFIG_HID_FF=y +CONFIG_HID_PID=y +CONFIG_LOGITECH_FF=y +CONFIG_PANTHERLORD_FF=y +CONFIG_THRUSTMASTER_FF=y +CONFIG_ZEROPLUS_FF=y +CONFIG_USB_HIDDEV=y + +# +# USB HID Boot Protocol drivers +# +# CONFIG_USB_KBD is not set +# CONFIG_USB_MOUSE is not set +CONFIG_USB_SUPPORT=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB_ARCH_HAS_OHCI=y +CONFIG_USB_ARCH_HAS_EHCI=y +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +CONFIG_USB_DEVICE_CLASS=y +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_SUSPEND=y +# CONFIG_USB_PERSIST is not set +# CONFIG_USB_OTG is not set + +# +# USB Host Controller Drivers +# +CONFIG_USB_EHCI_HCD=m +CONFIG_USB_EHCI_SPLIT_ISO=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +# CONFIG_USB_EHCI_TT_NEWSCHED is not set +CONFIG_USB_ISP116X_HCD=m +CONFIG_USB_OHCI_HCD=m +# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set +# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_UHCI_HCD=m +CONFIG_USB_U132_HCD=m +CONFIG_USB_SL811_HCD=m +CONFIG_USB_SL811_CS=m +CONFIG_USB_R8A66597_HCD=m + +# +# USB Device Class drivers +# +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# may also be needed; see USB_STORAGE Help for more information +# +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +CONFIG_USB_STORAGE_DATAFAB=y +CONFIG_USB_STORAGE_FREECOM=y +CONFIG_USB_STORAGE_ISD200=y +CONFIG_USB_STORAGE_DPCM=y +CONFIG_USB_STORAGE_USBAT=y +CONFIG_USB_STORAGE_SDDR09=y +CONFIG_USB_STORAGE_SDDR55=y +CONFIG_USB_STORAGE_JUMPSHOT=y +# CONFIG_USB_STORAGE_ALAUDA is not set +CONFIG_USB_STORAGE_KARMA=y +# CONFIG_USB_LIBUSUAL is not set + +# +# USB Imaging devices +# +CONFIG_USB_MDC800=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_MON=y + +# +# USB port drivers +# +CONFIG_USB_USS720=m + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_AIRCABLE is not set +CONFIG_USB_SERIAL_AIRPRIME=m +CONFIG_USB_SERIAL_ARK3116=m +CONFIG_USB_SERIAL_BELKIN=m +CONFIG_USB_SERIAL_WHITEHEAT=m +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +CONFIG_USB_SERIAL_CP2101=m +CONFIG_USB_SERIAL_CYPRESS_M8=m +CONFIG_USB_SERIAL_EMPEG=m +CONFIG_USB_SERIAL_FTDI_SIO=m +# CONFIG_USB_SERIAL_FUNSOFT is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +CONFIG_USB_SERIAL_IR=m +CONFIG_USB_SERIAL_EDGEPORT=m +CONFIG_USB_SERIAL_EDGEPORT_TI=m +CONFIG_USB_SERIAL_GARMIN=m +CONFIG_USB_SERIAL_IPW=m +CONFIG_USB_SERIAL_KEYSPAN_PDA=m +CONFIG_USB_SERIAL_KEYSPAN=m +CONFIG_USB_SERIAL_KEYSPAN_MPR=y +CONFIG_USB_SERIAL_KEYSPAN_USA28=y +CONFIG_USB_SERIAL_KEYSPAN_USA28X=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y +CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y +CONFIG_USB_SERIAL_KEYSPAN_USA19=y +CONFIG_USB_SERIAL_KEYSPAN_USA18X=y +CONFIG_USB_SERIAL_KEYSPAN_USA19W=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y +CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y +CONFIG_USB_SERIAL_KEYSPAN_USA49W=y +CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y +CONFIG_USB_SERIAL_KLSI=m +CONFIG_USB_SERIAL_KOBIL_SCT=m +CONFIG_USB_SERIAL_MCT_U232=m +CONFIG_USB_SERIAL_MOS7720=m +CONFIG_USB_SERIAL_MOS7840=m +CONFIG_USB_SERIAL_NAVMAN=m +CONFIG_USB_SERIAL_PL2303=m +CONFIG_USB_SERIAL_OTI6858=m +CONFIG_USB_SERIAL_HP4X=m +CONFIG_USB_SERIAL_SAFE=m +CONFIG_USB_SERIAL_SAFE_PADDED=y +CONFIG_USB_SERIAL_SIERRAWIRELESS=m +CONFIG_USB_SERIAL_TI=m +CONFIG_USB_SERIAL_CYBERJACK=m +CONFIG_USB_SERIAL_XIRCOM=m +CONFIG_USB_SERIAL_OPTION=m +CONFIG_USB_SERIAL_OMNINET=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_EZUSB=y + +# +# USB Miscellaneous drivers +# +CONFIG_USB_EMI62=m +CONFIG_USB_EMI26=m +CONFIG_USB_ADUTUX=m +CONFIG_USB_AUERSWALD=m +CONFIG_USB_RIO500=m +CONFIG_USB_LEGOTOWER=m +CONFIG_USB_LCD=m +CONFIG_USB_BERRY_CHARGE=m +CONFIG_USB_LED=m +CONFIG_USB_CYPRESS_CY7C63=m +CONFIG_USB_CYTHERM=m +CONFIG_USB_PHIDGET=m +CONFIG_USB_PHIDGETKIT=m +CONFIG_USB_PHIDGETMOTORCONTROL=m +CONFIG_USB_PHIDGETSERVO=m +CONFIG_USB_IDMOUSE=m +CONFIG_USB_FTDI_ELAN=m +CONFIG_USB_APPLEDISPLAY=m +CONFIG_USB_SISUSBVGA=m +# CONFIG_USB_SISUSBVGA_CON is not set +CONFIG_USB_LD=m +CONFIG_USB_TRANCEVIBRATOR=m +CONFIG_USB_IOWARRIOR=m +# CONFIG_USB_TEST is not set + +# +# USB DSL modem support +# +CONFIG_USB_ATM=m +CONFIG_USB_SPEEDTOUCH=m +CONFIG_USB_CXACRU=m +CONFIG_USB_UEAGLEATM=m +CONFIG_USB_XUSBATM=m + +# +# USB Gadget Support +# +# CONFIG_USB_GADGET is not set +CONFIG_MMC=m +# CONFIG_MMC_DEBUG is not set +# CONFIG_MMC_UNSAFE_RESUME is not set + +# +# MMC/SD Card Drivers +# +CONFIG_MMC_BLOCK=m +CONFIG_MMC_BLOCK_BOUNCE=y + +# +# MMC/SD Host Controller Drivers +# +# CONFIG_MMC_SDHCI is not set +CONFIG_MMC_WBSD=m +CONFIG_MMC_TIFM_SD=m +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=m + +# +# LED drivers +# +CONFIG_LEDS_NET48XX=m +CONFIG_LEDS_WRAP=m + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=m +CONFIG_LEDS_TRIGGER_IDE_DISK=y +CONFIG_LEDS_TRIGGER_HEARTBEAT=m +CONFIG_INFINIBAND=m +CONFIG_INFINIBAND_USER_MAD=m +CONFIG_INFINIBAND_USER_ACCESS=m +CONFIG_INFINIBAND_USER_MEM=y +CONFIG_INFINIBAND_ADDR_TRANS=y +CONFIG_INFINIBAND_MTHCA=m +CONFIG_INFINIBAND_MTHCA_DEBUG=y +CONFIG_INFINIBAND_AMSO1100=m +# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set +CONFIG_INFINIBAND_CXGB3=m +# CONFIG_INFINIBAND_CXGB3_DEBUG is not set +CONFIG_MLX4_INFINIBAND=m +CONFIG_INFINIBAND_IPOIB=m +# CONFIG_INFINIBAND_IPOIB_CM is not set +CONFIG_INFINIBAND_IPOIB_DEBUG=y +# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set +# CONFIG_INFINIBAND_SRP is not set +# CONFIG_INFINIBAND_ISER is not set +# CONFIG_EDAC is not set +CONFIG_RTC_LIB=m +CONFIG_RTC_CLASS=m + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_DS1307=m +CONFIG_RTC_DRV_DS1672=m +CONFIG_RTC_DRV_MAX6900=m +CONFIG_RTC_DRV_RS5C372=m +CONFIG_RTC_DRV_ISL1208=m +CONFIG_RTC_DRV_X1205=m +CONFIG_RTC_DRV_PCF8563=m +CONFIG_RTC_DRV_PCF8583=m +CONFIG_RTC_DRV_M41T80=m +CONFIG_RTC_DRV_M41T80_WDT=y + +# +# SPI RTC drivers +# +CONFIG_RTC_DRV_RS5C348=m +CONFIG_RTC_DRV_MAX6902=m + +# +# Platform RTC drivers +# +CONFIG_RTC_DRV_CMOS=m +CONFIG_RTC_DRV_DS1553=m +CONFIG_RTC_DRV_STK17TA8=m +CONFIG_RTC_DRV_DS1742=m +CONFIG_RTC_DRV_M48T86=m +CONFIG_RTC_DRV_M48T59=m +CONFIG_RTC_DRV_V3020=m + +# +# on-CPU RTC drivers +# + +# +# DMA Engine support +# +CONFIG_DMA_ENGINE=y + +# +# DMA Clients +# +CONFIG_NET_DMA=y + +# +# DMA Devices +# +CONFIG_INTEL_IOATDMA=m +CONFIG_AUXDISPLAY=y +CONFIG_KS0108=m +CONFIG_KS0108_PORT=0x378 +CONFIG_KS0108_DELAY=2 +CONFIG_CFAG12864B=m +CONFIG_CFAG12864B_RATE=20 +CONFIG_VIRTUALIZATION=y +CONFIG_KVM=m +CONFIG_KVM_INTEL=m +CONFIG_KVM_AMD=m + +# +# Userspace I/O +# +CONFIG_UIO=m +CONFIG_UIO_CIF=m +# CONFIG_LGUEST is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +CONFIG_EXT2_FS_XATTR=y +CONFIG_EXT2_FS_POSIX_ACL=y +CONFIG_EXT2_FS_SECURITY=y +CONFIG_EXT2_FS_XIP=y +CONFIG_FS_XIP=y +CONFIG_EXT3_FS=m +CONFIG_EXT3_FS_XATTR=y +CONFIG_EXT3_FS_POSIX_ACL=y +CONFIG_EXT3_FS_SECURITY=y +# CONFIG_EXT4DEV_FS is not set +CONFIG_JBD=m +CONFIG_JBD_DEBUG=y +CONFIG_FS_MBCACHE=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +CONFIG_REISERFS_FS_XATTR=y +CONFIG_REISERFS_FS_POSIX_ACL=y +CONFIG_REISERFS_FS_SECURITY=y +CONFIG_JFS_FS=m +CONFIG_JFS_POSIX_ACL=y +CONFIG_JFS_SECURITY=y +# CONFIG_JFS_DEBUG is not set +CONFIG_JFS_STATISTICS=y +CONFIG_FS_POSIX_ACL=y +CONFIG_XFS_FS=m +CONFIG_XFS_QUOTA=y +CONFIG_XFS_SECURITY=y +CONFIG_XFS_POSIX_ACL=y +CONFIG_XFS_RT=y +CONFIG_GFS2_FS=m +CONFIG_GFS2_FS_LOCKING_NOLOCK=m +CONFIG_GFS2_FS_LOCKING_DLM=m +CONFIG_OCFS2_FS=m +# CONFIG_OCFS2_DEBUG_MASKLOG is not set +CONFIG_MINIX_FS=y +CONFIG_ROMFS_FS=m +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_QUOTA=y +CONFIG_QFMT_V1=m +CONFIG_QFMT_V2=m +CONFIG_QUOTACTL=y +CONFIG_DNOTIFY=y +CONFIG_AUTOFS_FS=m +CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m +CONFIG_GENERIC_ACL=y + +# +# CD-ROM/DVD Filesystems +# +CONFIG_ISO9660_FS=y +CONFIG_JOLIET=y +CONFIG_ZISOFS=y +CONFIG_UDF_FS=m +CONFIG_UDF_NLS=y + +# +# DOS/FAT/NT Filesystems +# +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_VFAT_FS=m +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +CONFIG_NTFS_FS=m +# CONFIG_NTFS_DEBUG is not set +CONFIG_NTFS_RW=y + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_HUGETLBFS=y +CONFIG_HUGETLB_PAGE=y +CONFIG_RAMFS=y +CONFIG_CONFIGFS_FS=m + +# +# Miscellaneous filesystems +# +CONFIG_ADFS_FS=m +# CONFIG_ADFS_FS_RW is not set +CONFIG_AFFS_FS=m +CONFIG_ECRYPT_FS=m +CONFIG_HFS_FS=m +CONFIG_HFSPLUS_FS=m +CONFIG_BEFS_FS=m +# CONFIG_BEFS_DEBUG is not set +CONFIG_BFS_FS=m +CONFIG_EFS_FS=m +CONFIG_JFFS2_FS=m +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +# CONFIG_JFFS2_SUMMARY is not set +# CONFIG_JFFS2_FS_XATTR is not set +CONFIG_JFFS2_COMPRESSION_OPTIONS=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +# CONFIG_JFFS2_RUBIN is not set +# CONFIG_JFFS2_CMODE_NONE is not set +CONFIG_JFFS2_CMODE_PRIORITY=y +# CONFIG_JFFS2_CMODE_SIZE is not set +CONFIG_CRAMFS=m +CONFIG_VXFS_FS=m +CONFIG_HPFS_FS=m +CONFIG_QNX4FS_FS=m +CONFIG_SYSV_FS=m +CONFIG_UFS_FS=m +# CONFIG_UFS_FS_WRITE is not set +# CONFIG_UFS_DEBUG is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +CONFIG_NFS_DIRECTIO=y +CONFIG_NFSD=m +CONFIG_NFSD_V2_ACL=y +CONFIG_NFSD_V3=y +CONFIG_NFSD_V3_ACL=y +CONFIG_NFSD_V4=y +CONFIG_NFSD_TCP=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_EXPORTFS=m +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +# CONFIG_SUNRPC_BIND34 is not set +CONFIG_RPCSEC_GSS_KRB5=y +CONFIG_RPCSEC_GSS_SPKM3=m +CONFIG_SMB_FS=m +CONFIG_SMB_NLS_DEFAULT=y +CONFIG_SMB_NLS_REMOTE="cp850" +CONFIG_CIFS=m +CONFIG_CIFS_STATS=y +# CONFIG_CIFS_STATS2 is not set +CONFIG_CIFS_WEAK_PW_HASH=y +CONFIG_CIFS_XATTR=y +CONFIG_CIFS_POSIX=y +# CONFIG_CIFS_DEBUG2 is not set +# CONFIG_CIFS_EXPERIMENTAL is not set +CONFIG_NCP_FS=m +CONFIG_NCPFS_PACKET_SIGNING=y +CONFIG_NCPFS_IOCTL_LOCKING=y +CONFIG_NCPFS_STRONG=y +CONFIG_NCPFS_NFS_NS=y +CONFIG_NCPFS_OS2_NS=y +CONFIG_NCPFS_SMALLDOS=y +CONFIG_NCPFS_NLS=y +CONFIG_NCPFS_EXTRAS=y +CONFIG_CODA_FS=m +# CONFIG_CODA_FS_OLD_API is not set +CONFIG_AFS_FS=m +# CONFIG_AFS_DEBUG is not set +CONFIG_9P_FS=m + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +CONFIG_OSF_PARTITION=y +# CONFIG_AMIGA_PARTITION is not set +CONFIG_ATARI_PARTITION=y +CONFIG_MAC_PARTITION=y +CONFIG_MSDOS_PARTITION=y +CONFIG_BSD_DISKLABEL=y +# CONFIG_MINIX_SUBPARTITION is not set +CONFIG_SOLARIS_X86_PARTITION=y +CONFIG_UNIXWARE_DISKLABEL=y +CONFIG_LDM_PARTITION=y +# CONFIG_LDM_DEBUG is not set +CONFIG_SGI_PARTITION=y +CONFIG_ULTRIX_PARTITION=y +CONFIG_SUN_PARTITION=y +CONFIG_KARMA_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_SYSV68_PARTITION=y + +# +# Native Language Support +# +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="utf8" +CONFIG_NLS_CODEPAGE_437=m +CONFIG_NLS_CODEPAGE_737=m +CONFIG_NLS_CODEPAGE_775=m +CONFIG_NLS_CODEPAGE_850=m +CONFIG_NLS_CODEPAGE_852=m +CONFIG_NLS_CODEPAGE_855=m +CONFIG_NLS_CODEPAGE_857=m +CONFIG_NLS_CODEPAGE_860=m +CONFIG_NLS_CODEPAGE_861=m +CONFIG_NLS_CODEPAGE_862=m +CONFIG_NLS_CODEPAGE_863=m +CONFIG_NLS_CODEPAGE_864=m +CONFIG_NLS_CODEPAGE_865=m +CONFIG_NLS_CODEPAGE_866=m +CONFIG_NLS_CODEPAGE_869=m +CONFIG_NLS_CODEPAGE_936=m +CONFIG_NLS_CODEPAGE_950=m +CONFIG_NLS_CODEPAGE_932=m +CONFIG_NLS_CODEPAGE_949=m +CONFIG_NLS_CODEPAGE_874=m +CONFIG_NLS_ISO8859_8=m +CONFIG_NLS_CODEPAGE_1250=m +CONFIG_NLS_CODEPAGE_1251=m +CONFIG_NLS_ASCII=m +CONFIG_NLS_ISO8859_1=m +CONFIG_NLS_ISO8859_2=m +CONFIG_NLS_ISO8859_3=m +CONFIG_NLS_ISO8859_4=m +CONFIG_NLS_ISO8859_5=m +CONFIG_NLS_ISO8859_6=m +CONFIG_NLS_ISO8859_7=m +CONFIG_NLS_ISO8859_9=m +CONFIG_NLS_ISO8859_13=m +CONFIG_NLS_ISO8859_14=m +CONFIG_NLS_ISO8859_15=m +CONFIG_NLS_KOI8_R=m +CONFIG_NLS_KOI8_U=m +CONFIG_NLS_UTF8=m + +# +# Distributed Lock Manager +# +CONFIG_DLM=m +CONFIG_DLM_DEBUG=y +CONFIG_INSTRUMENTATION=y +CONFIG_PROFILING=y +CONFIG_OPROFILE=m +# CONFIG_KPROBES is not set + +# +# Kernel hacking +# +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +# CONFIG_PRINTK_TIME is not set +CONFIG_ENABLE_MUST_CHECK=y +CONFIG_MAGIC_SYSRQ=y +CONFIG_UNUSED_SYMBOLS=y +CONFIG_DEBUG_FS=y +# CONFIG_HEADERS_CHECK is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SHIRQ is not set +CONFIG_DETECT_SOFTLOCKUP=y +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# CONFIG_TIMER_STATS is not set +# CONFIG_DEBUG_SLAB is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_RT_MUTEX_TESTER is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_DEBUG_KOBJECT is not set +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_DEBUG_BUGVERBOSE=y +# CONFIG_DEBUG_INFO is not set +# CONFIG_DEBUG_VM is not set +# CONFIG_DEBUG_LIST is not set +# CONFIG_FRAME_POINTER is not set +# CONFIG_FORCED_INLINING is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_EARLY_PRINTK=y +CONFIG_DEBUG_STACKOVERFLOW=y +# CONFIG_DEBUG_STACK_USAGE is not set + +# +# Page alloc debug is incompatible with Software Suspend on i386 +# +# CONFIG_DEBUG_RODATA is not set +# CONFIG_4KSTACKS is not set +CONFIG_X86_FIND_SMP_CONFIG=y +CONFIG_X86_MPPARSE=y +CONFIG_DOUBLEFAULT=y + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_DEBUG_PROC_KEYS is not set +CONFIG_SECURITY=y +CONFIG_SECURITY_NETWORK=y +# CONFIG_SECURITY_NETWORK_XFRM is not set +CONFIG_SECURITY_CAPABILITIES=m +CONFIG_SECURITY_ROOTPLUG=m +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SELINUX_BOOTPARAM=y +CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 +CONFIG_SECURITY_SELINUX_DISABLE=y +CONFIG_SECURITY_SELINUX_DEVELOP=y +CONFIG_SECURITY_SELINUX_AVC_STATS=y +CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 +# CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT is not set +# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set +CONFIG_XOR_BLOCKS=m +CONFIG_ASYNC_CORE=m +CONFIG_ASYNC_MEMCPY=m +CONFIG_ASYNC_XOR=m +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ABLKCIPHER=m +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_HMAC=y +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_NULL=m +CONFIG_CRYPTO_MD4=m +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_SHA1=m +CONFIG_CRYPTO_SHA256=m +CONFIG_CRYPTO_SHA512=m +CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_TGR192=m +CONFIG_CRYPTO_GF128MUL=m +CONFIG_CRYPTO_ECB=m +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_PCBC=m +CONFIG_CRYPTO_LRW=m +CONFIG_CRYPTO_CRYPTD=m +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_TWOFISH_586=m +CONFIG_CRYPTO_SERPENT=m +CONFIG_CRYPTO_AES=m +CONFIG_CRYPTO_AES_586=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_ANUBIS=m +CONFIG_CRYPTO_DEFLATE=m +CONFIG_CRYPTO_MICHAEL_MIC=m +CONFIG_CRYPTO_CRC32C=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_TEST=m +CONFIG_CRYPTO_HW=y +CONFIG_CRYPTO_DEV_PADLOCK=m +CONFIG_CRYPTO_DEV_PADLOCK_AES=m +CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_GEODE=m + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC_CCITT=m +CONFIG_CRC16=m +CONFIG_CRC_ITU_T=m +CONFIG_CRC32=y +CONFIG_CRC7=m +CONFIG_LIBCRC32C=m +CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=m +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_REED_SOLOMON=m +CONFIG_REED_SOLOMON_DEC16=y +CONFIG_TEXTSEARCH=y +CONFIG_TEXTSEARCH_KMP=m +CONFIG_TEXTSEARCH_BM=m +CONFIG_TEXTSEARCH_FSM=m +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y +CONFIG_CHECK_SIGNATURE=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_PENDING_IRQ=y +CONFIG_X86_SMP=y +CONFIG_X86_HT=y +CONFIG_X86_BIOS_REBOOT=y +CONFIG_X86_TRAMPOLINE=y +CONFIG_KTIME_SCALAR=y diff --git a/pkgs/os-specific/linux/kernel/default.nix b/pkgs/os-specific/linux/kernel/default.nix new file mode 100644 index 000000000000..115870b771eb --- /dev/null +++ b/pkgs/os-specific/linux/kernel/default.nix @@ -0,0 +1,29 @@ +args: +let + getValue = aSet: aName: default: + (if (aSet ? aName) then (builtins.getAttr aSet aName) else default); +in + +let + newArgs = (args // + { + userModeLinux = getValue args "userModeLinux" false; + + localVersion = getValue args "localVersion" ""; + + config = getValue args "configFile" null; + + extraPatches = getValue args "extraPatches" []; + + extraConfig = getValue args "extraConfig" []; + }); +in +args.stdenv.lib.listOfListsToAttrs [ + [ "recurseForDerivations" true ] + [ "2.6.20" (import ./2.6.20.nix newArgs) ] + [ "2.6.21" (import ./2.6.21.nix newArgs) ] + [ "2.6.21-ck" (import ./2.6.21-ck.nix newArgs) ] + [ "2.6.22" (import ./2.6.22.nix newArgs) ] + [ "2.6.22-ck" (import ./2.6.22-ck.nix newArgs) ] + [ "2.6.23.1" (import ./2.6.23.1.nix newArgs) ] +] diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.20.nix b/pkgs/os-specific/linux/kernel/linux-2.6.20.nix deleted file mode 100644 index 3299ba5a3cbe..000000000000 --- a/pkgs/os-specific/linux/kernel/linux-2.6.20.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ stdenv, fetchurl, perl, mktemp, module_init_tools - - # A list of patches to apply to the kernel. Each element of this list - # should be an attribute set {name, patch} where `name' is a - # symbolic name and `patch' is the actual patch. The patch may - # optionally be compressed with gzip or bzip2. -, kernelPatches ? [] - -, # Whether to build a User-Mode Linux kernel. - userModeLinux ? false - -, # Allows you to set your own kernel version suffix (e.g., - # "-my-kernel"). - localVersion ? "" - -, # Your own kernel configuration file, if you don't want to use the - # default. - kernelConfig ? null -}: - -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; - -let - - lib = import ../../../lib; - - version = "2.6.20.12"; - -in - -stdenv.mkDerivation { - name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; - builder = ./builder.sh; - - src = fetchurl { - url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "1s7vdpg2897q5pcyxxypqcnibwpbdawbimkf3pngmahj8wr9c03x"; - }; - - patches = map (p: p.patch) kernelPatches; - extraConfig = lib.concatStrings (map (p: "\n" + (if p ? extraConfig then p.extraConfig else "") + "\n") kernelPatches); - - config = - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.20-uml else - if stdenv.system == "i686-linux" then ./config-2.6.20-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.20-x86_64-smp else - abort "No kernel configuration for your platform!"; - - buildInputs = [perl mktemp]; - - arch = - if userModeLinux then "um" else - if stdenv.system == "i686-linux" then "i386" else - if stdenv.system == "x86_64-linux" then "x86_64" else - abort "Platform ${stdenv.system} is not supported."; - - makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else ""; - - inherit module_init_tools; - - allowLocalVersion = false; # don't allow patches to set a suffix - inherit localVersion; # but do allow the user to set one. - - meta = { - description = - (if userModeLinux then - "User-Mode Linux" - else - "The Linux kernel") + - (if kernelPatches == [] then "" else - " (with patches: " - + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches)) - + ")"); - }; -} diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.21.nix b/pkgs/os-specific/linux/kernel/linux-2.6.21.nix deleted file mode 100644 index e7fc2943a5cd..000000000000 --- a/pkgs/os-specific/linux/kernel/linux-2.6.21.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ stdenv, fetchurl, perl, mktemp, module_init_tools - - # A list of patches to apply to the kernel. Each element of this list - # should be an attribute set {name, patch} where `name' is a - # symbolic name and `patch' is the actual patch. The patch may - # optionally be compressed with gzip or bzip2. -, kernelPatches ? [] - -, # Whether to build a User-Mode Linux kernel. - userModeLinux ? false - -, # Allows you to set your own kernel version suffix (e.g., - # "-my-kernel"). - localVersion ? "" - -, # Your own kernel configuration file, if you don't want to use the - # default. - kernelConfig ? null -}: - -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; - -let - - lib = import ../../../lib; - - version = "2.6.21.7"; - -in - -stdenv.mkDerivation { - name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; - builder = ./builder.sh; - - src = fetchurl { - url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "1c8ndsz35qd8vyng3xsxjjkjv5bnzyvc9b5vd85fz5v0bjp8hx50"; - }; - - patches = map (p: p.patch) kernelPatches; - extraConfig = lib.concatStrings (map (p: "\n" + (if p ? extraConfig then p.extraConfig else "") + "\n") kernelPatches); - - config = - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.21-uml else - if stdenv.system == "i686-linux" then ./config-2.6.21-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.21-x86_64-smp else - abort "No kernel configuration for your platform!"; - - buildInputs = [perl mktemp]; - - arch = - if userModeLinux then "um" else - if stdenv.system == "i686-linux" then "i386" else - if stdenv.system == "x86_64-linux" then "x86_64" else - abort "Platform ${stdenv.system} is not supported."; - - makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else ""; - - inherit module_init_tools; - - allowLocalVersion = false; # don't allow patches to set a suffix - inherit localVersion; # but do allow the user to set one. - - meta = { - description = - (if userModeLinux then - "User-Mode Linux" - else - "The Linux kernel") + - (if kernelPatches == [] then "" else - " (with patches: " - + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches)) - + ")"); - }; -} diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.22.nix b/pkgs/os-specific/linux/kernel/linux-2.6.22.nix deleted file mode 100644 index bb51a5f6b524..000000000000 --- a/pkgs/os-specific/linux/kernel/linux-2.6.22.nix +++ /dev/null @@ -1,84 +0,0 @@ -{ stdenv, fetchurl, perl, mktemp, module_init_tools - - # A list of patches to apply to the kernel. Each element of this list - # should be an attribute set {name, patch} where `name' is a - # symbolic name and `patch' is the actual patch. The patch may - # optionally be compressed with gzip or bzip2. -, kernelPatches ? [] - -, # Whether to build a User-Mode Linux kernel. - userModeLinux ? false - -, # Allows you to set your own kernel version suffix (e.g., - # "-my-kernel"). - localVersion ? "" - -, # Your own kernel configuration file, if you don't want to use the - # default. - kernelConfig ? null - -, # A list of additional statements to be appended to the - # configuration file. - extraConfig ? [] -}: - -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; - -let - - lib = import ../../../lib; - - version = "2.6.22.10"; - -in - -stdenv.mkDerivation { - name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; - builder = ./builder.sh; - - src = fetchurl { - url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "0kh196qzm54mvnbrdr9s2q86l9yn2321gnsl5xq44ai2idqp044g"; - }; - - patches = map (p: p.patch) kernelPatches; - extraConfig = - let addNewlines = map (s: "\n" + s + "\n"); - configFromPatches = - map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches; - in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig)); - - config = - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.22-uml else - if stdenv.system == "i686-linux" then ./config-2.6.22-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.22-x86_64-smp else - abort "No kernel configuration for your platform!"; - - buildInputs = [perl mktemp]; - - arch = - if userModeLinux then "um" else - if stdenv.system == "i686-linux" then "i386" else - if stdenv.system == "x86_64-linux" then "x86_64" else - abort "Platform ${stdenv.system} is not supported."; - - makeFlags = if userModeLinux then "ARCH=um SHELL=bash" else ""; - - inherit module_init_tools; - - allowLocalVersion = false; # don't allow patches to set a suffix - inherit localVersion; # but do allow the user to set one. - - meta = { - description = - (if userModeLinux then - "User-Mode Linux" - else - "The Linux kernel") + - (if kernelPatches == [] then "" else - " (with patches: " - + lib.concatStrings (lib.intersperse ", " (map (x: x.name) kernelPatches)) - + ")"); - }; -} diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.23.nix b/pkgs/os-specific/linux/kernel/meta.nix similarity index 50% rename from pkgs/os-specific/linux/kernel/linux-2.6.23.nix rename to pkgs/os-specific/linux/kernel/meta.nix index 1d034e897cce..b52c0b55c52f 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.23.nix +++ b/pkgs/os-specific/linux/kernel/meta.nix @@ -1,34 +1,12 @@ -{ stdenv, fetchurl, perl, mktemp, module_init_tools - - # A list of patches to apply to the kernel. Each element of this list - # should be an attribute set {name, patch} where `name' is a - # symbolic name and `patch' is the actual patch. The patch may - # optionally be compressed with gzip or bzip2. -, kernelPatches ? [] - -, # Whether to build a User-Mode Linux kernel. - userModeLinux ? false - -, # Allows you to set your own kernel version suffix (e.g., - # "-my-kernel"). - localVersion ? "" - -, # Your own kernel configuration file, if you don't want to use the - # default. - kernelConfig ? null - -, # A list of additional statements to be appended to the - # configuration file. - extraConfig ? [] -}: +args: with args; assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; let - lib = import ../../../lib; - - version = "2.6.23.1"; + lib = stdenv.lib; + addNewlines = map (s: "\n" + s + "\n"); + kernelPatches = systemPatches ++ extraPatches; in @@ -36,24 +14,18 @@ stdenv.mkDerivation { name = if userModeLinux then "user-mode-linux-${version}" else "linux-${version}"; builder = ./builder.sh; - src = fetchurl { + src = fetchurl ( { url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "0737g83h7jbrlss8782b17mhc3nfn8qfbh5s71flz8pjxmbbmg1m"; - }; + } // src_hash ); patches = map (p: p.patch) kernelPatches; + extraConfig = - let addNewlines = map (s: "\n" + s + "\n"); - configFromPatches = + let configFromPatches = map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches; in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig)); - config = - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.23-uml else - if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else - abort "No kernel configuration for your platform!"; + config = configFile; buildInputs = [perl mktemp]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fa2a4be52dbd..aba0a005846a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2943,192 +2943,18 @@ rec { systemKernel = kernel; - kernel = (if (getConfig ["kernel" "version"] "2.6.21") == "2.6.22" then - kernel_2_6_22 else if (getConfig ["kernel" "version"] "2.6.21") == "2.6.23" then - kernel_2_6_23 else kernel_2_6_21); + kernel = getVersion "kernel" kernel_alts; - kernel_2_6_20 = import ../os-specific/linux/kernel/linux-2.6.20.nix { + kernel_alts = import ../os-specific/linux/kernel { inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "paravirt-nvidia"; - patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch; - } - { name = "skas-2.6.20-v9-pre9"; - patch = fetchurl { - url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; - md5 = "02e619e5b3aaf0f9768f03ac42753e74"; - }; - extraConfig = - "CONFIG_PROC_MM=y\n" + - "# CONFIG_PROC_MM_DUMPABLE is not set\n"; - } - { name = "fbsplash-0.9.2-r5-2.6.20-rc6"; - patch = fetchurl { - url = http://dev.gentoo.org/~spock/projects/gensplash/archive/fbsplash-0.9.2-r5-2.6.20-rc6.patch; - sha256 = "11v4f85f4jnh9sbhqcyn47krb7l1czgzjw3w8wgbq14jm0sp9294"; - }; - extraConfig = "CONFIG_FB_SPLASH=y"; - } - ]; - }; - - kernel_2_6_21 = import ../os-specific/linux/kernel/linux-2.6.21.nix { - inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "ext3cow"; - patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch; - extraConfig = - "CONFIG_EXT3COW_FS=m\n" + - "CONFIG_EXT3COW_FS_XATTR=y\n" + - "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" + - "CONFIG_EXT3COW_FS_SECURITY=y\n"; - } - /* commented out because only acer users have need for it.. - It takes quite a while to create the patch when unpacking the kernel sources only for that task - { name = "acerhk"; - patch = kernel_module_acerhk + "/acerhk-patch.tar.bz2" ; - extraConfig = - "CONFIG_ACERHK=m\n"; - } - */ - { name = "paravirt-nvidia"; - patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch; - } - { name = "skas-2.6.20-v9-pre9"; - patch = fetchurl { - url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; - md5 = "02e619e5b3aaf0f9768f03ac42753e74"; - }; - extraConfig = - "CONFIG_PROC_MM=y\n" + - "# CONFIG_PROC_MM_DUMPABLE is not set\n"; - } - { name = "fbsplash-0.9.2-r5-2.6.21"; - patch = fetchurl { - url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch; - sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8"; - }; - extraConfig = "CONFIG_FB_SPLASH=y"; - } - ]; - }; - - kernel_2_6_22 = import ../os-specific/linux/kernel/linux-2.6.22.nix { - inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - /* - { name = "ext3cow"; - patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch; - extraConfig = - "CONFIG_EXT3COW_FS=m\n" + - "CONFIG_EXT3COW_FS_XATTR=y\n" + - "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" + - "CONFIG_EXT3COW_FS_SECURITY=y\n"; - } - */ - { name = "paravirt-nvidia"; - patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; - } - /* - { name = "skas-2.6.20-v9-pre9"; - patch = fetchurl { - url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; - md5 = "02e619e5b3aaf0f9768f03ac42753e74"; - }; - extraConfig = - "CONFIG_PROC_MM=y\n" + - "# CONFIG_PROC_MM_DUMPABLE is not set\n"; - } - */ - { name = "fbsplash-0.9.2-r5-2.6.21"; - patch = fetchurl { - url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; - sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; - }; - extraConfig = "CONFIG_FB_SPLASH=y"; - } - ]; - extraConfig = - lib.optional (getConfig ["kernel" "no_hz"] false) "CONFIG_NO_HZ=y" ++ - lib.optional (getConfig ["kernel" "timer_stats"] false) "CONFIG_TIMER_STATS=y" ++ - lib.optional (getConfig ["kernel" "usb_suspend"] false) "CONFIG_USB_SUSPEND=y" ++ - lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ - [(getConfig ["kernel" "addConfig"] "")]; - }; - - kernel_2_6_21_ck = import ../os-specific/linux/kernel/linux-2.6.21_ck.nix { - inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "ext3cow"; - patch = ../os-specific/linux/kernel/linux-2.6.21.7-ext3cow_wouter.patch; - extraConfig = - "CONFIG_EXT3COW_FS=m\n" + - "CONFIG_EXT3COW_FS_XATTR=y\n" + - "CONFIG_EXT3COW_FS_POSIX_ACL=y\n" + - "CONFIG_EXT3COW_FS_SECURITY=y\n"; - } - { name = "Con Kolivas Patch"; - patch = ../os-specific/linux/kernel/patch-2.6.21-ck1; - } - { name = "paravirt-nvidia"; - patch = ../os-specific/linux/kernel/2.6.20-paravirt-nvidia.patch; - } - { name = "skas-2.6.20-v9-pre9"; - patch = fetchurl { - url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; - md5 = "02e619e5b3aaf0f9768f03ac42753e74"; - }; - extraConfig = - "CONFIG_PROC_MM=y\n" + - "# CONFIG_PROC_MM_DUMPABLE is not set\n"; - } - { name = "fbsplash-0.9.2-r5-2.6.21"; - patch = fetchurl { - url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch; - sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8"; - }; - extraConfig = "CONFIG_FB_SPLASH=y"; - } - ]; - }; - - - - kernel_2_6_23 = import ../os-specific/linux/kernel/linux-2.6.23.nix { - inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "paravirt-nvidia"; - patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; - } - { # resume with resume=swap:/dev/xx - name = "tux on ice"; # (swsusp2) - patch = fetchurl { - url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc2-for-2.6.23.1.patch.bz2"; - sha256 = "ef86267b6f3d7e309221f5173a881afae1dfa57418be5b3963f2380b0633ca1a"; - }; - extraConfig = " - CONFIG_SUSPEND2=y - CONFIG_SUSPEND2_FILE=y - CONFIG_SUSPEND2_SWAP=y - CONFIG_CRYPTO_LZF=y - "; - } - { name = "fbsplash-0.9.2-r5-2.6.21"; - patch = fetchurl { - url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; - sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; - }; - extraConfig = "CONFIG_FB_SPLASH=y"; - } - ] ++ getConfig ["kernel" "extraPatches"] []; + extraPatches = getConfig ["kernel" "extraPatches"] []; extraConfig = lib.optional (getConfig ["kernel" "timer_stats"] false) "CONFIG_TIMER_STATS=y" ++ lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ [(getConfig ["kernel" "addConfig"] "")]; - kernelConfig = getConfig ["kernel" "configFile"] null; + configFile = getConfig ["kernel" "configFile"] null; }; - libselinux = import ../os-specific/linux/libselinux { inherit fetchurl stdenv libsepol; }; From 691115bd209c183387e222dee71a5553cdba70f3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:29:37 +0000 Subject: [PATCH 050/320] Typo in kernel's default.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=9826 --- pkgs/os-specific/linux/kernel/2.6.23.nix | 17 +++++++++++++++++ pkgs/os-specific/linux/kernel/default.nix | 3 ++- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 pkgs/os-specific/linux/kernel/2.6.23.nix diff --git a/pkgs/os-specific/linux/kernel/2.6.23.nix b/pkgs/os-specific/linux/kernel/2.6.23.nix new file mode 100644 index 000000000000..ad06bc4f7eba --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.23.nix @@ -0,0 +1,17 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.23"; + src_hash = { sha256 = "1nyv7004w40l4adzq2b0hrvk3f4iqwngkgrlh8as9cpz6l4prrnl"; }; + + systemPatches = [ ]; + + config = with args; + if kernelConfig != null then kernelConfig else + if userModeLinux then ./config-2.6.23.1-uml else + if stdenv.system == "i686-linux" then ./config-2.6.23.1-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.23.1-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) diff --git a/pkgs/os-specific/linux/kernel/default.nix b/pkgs/os-specific/linux/kernel/default.nix index 115870b771eb..36a7552352ea 100644 --- a/pkgs/os-specific/linux/kernel/default.nix +++ b/pkgs/os-specific/linux/kernel/default.nix @@ -1,7 +1,7 @@ args: let getValue = aSet: aName: default: - (if (aSet ? aName) then (builtins.getAttr aSet aName) else default); + (if (builtins.hasAttr aName aSet) then (builtins.getAttr aName aSet) else default); in let @@ -25,5 +25,6 @@ args.stdenv.lib.listOfListsToAttrs [ [ "2.6.21-ck" (import ./2.6.21-ck.nix newArgs) ] [ "2.6.22" (import ./2.6.22.nix newArgs) ] [ "2.6.22-ck" (import ./2.6.22-ck.nix newArgs) ] + [ "2.6.23" (import ./2.6.23.nix newArgs) ] [ "2.6.23.1" (import ./2.6.23.1.nix newArgs) ] ] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aba0a005846a..781e1e9f165e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2788,7 +2788,7 @@ rec { # this creates a patch which can be applied to the kernel to integrate this module.. kernel_module_acerhk = import ../os-specific/linux/kernel/acerhk { inherit fetchurl stdenv gnupatch; - kernel = kernel_2_6_21; + kernel = builtins.getAttr kernel "2.6.21"; debug = true; }; From 13c5a3a17a31e685e437fa0a252082e3f09cda82 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 1 Dec 2007 20:29:42 +0000 Subject: [PATCH 051/320] Revert "setup-hooks using addToSearchPath" This reverts commit af60b70e57ba79f9ebf0f944ba0698e5661bc4dc. (introduced by wrong merge strategy during git rebase) svn path=/nixpkgs/branches/stdenv-updates/; revision=9827 --- pkgs/development/tools/misc/pkgconfig/default.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkgs/development/tools/misc/pkgconfig/default.nix b/pkgs/development/tools/misc/pkgconfig/default.nix index b0bbc1cc5137..41a61f600e04 100644 --- a/pkgs/development/tools/misc/pkgconfig/default.nix +++ b/pkgs/development/tools/misc/pkgconfig/default.nix @@ -7,5 +7,15 @@ stdenv.mkDerivation { url = http://pkgconfig.freedesktop.org/releases/pkg-config-0.22.tar.gz; sha256 = "1rpb5wygmp0f8nal7y3ga4556i7hkjdslv3wdq04fj30gns621vy"; }; + + patches = [ + # Process Requires.private properly, see + # http://bugs.freedesktop.org/show_bug.cgi?id=4738. + (fetchurl { + name = "pkgconfig-8494.patch"; + url = http://bugs.freedesktop.org/attachment.cgi?id=8494; + sha256 = "1pcrdbb7dypg2biy0yqc7bdxak5zii8agqljdvk7j4wbyghpqzws"; + }) + ]; } From 08154f031c8d7966e826ff56ca64bb3525c09e0f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 3 Dec 2007 12:14:40 +0000 Subject: [PATCH 052/320] * Revert dietlibc to 0.30. 0.31 breaks sed. svn path=/nixpkgs/branches/stdenv-updates/; revision=9833 --- pkgs/os-specific/linux/dietlibc/default.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/dietlibc/default.nix b/pkgs/os-specific/linux/dietlibc/default.nix index a98c7608820d..b795cb60da6e 100644 --- a/pkgs/os-specific/linux/dietlibc/default.nix +++ b/pkgs/os-specific/linux/dietlibc/default.nix @@ -3,10 +3,10 @@ assert stdenv.isLinux; stdenv.mkDerivation { - name = "dietlibc-0.31"; + name = "dietlibc-0.30"; src = fetchurl { - url = mirror://kernel/linux/libs/dietlibc/dietlibc-0.31.tar.bz2; - sha256 = "1kanrwjcmqs28z8arj9py9mbgjx5rgvi7il484pgaizpcxm3sqcr"; + url = mirror://kernel/linux/libs/dietlibc/dietlibc-0.30.tar.bz2; + md5 = "2465d652fff6f1fad3da3b98e60e83c9"; }; builder = ./builder.sh; @@ -24,6 +24,10 @@ stdenv.mkDerivation { # Remove them. ./no-wchar.patch + # Fix to get DNS resolution to work on 64-bit platforms. Taken + # from 0.31 CVS. + ./dns64.patch + # Get lseek64 working on x86_64. From # http://svn.annvix.org/cgi-bin/viewvc.cgi/packages/releases/2.0-CURRENT/dietlibc/SOURCES ./x86_64-lseek64.patch From 9a89e4487011a162fd5a36b14bcb08c865f8e5a0 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 3 Dec 2007 12:15:35 +0000 Subject: [PATCH 053/320] * Use gzip/bzip2 instead of gunzip/bunzip2 in the bootstrap binaries. svn path=/nixpkgs/branches/stdenv-updates/; revision=9834 --- pkgs/stdenv/linux/make-bootstrap-tools.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index aa93ec596c4b..1b848c06fb8e 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -24,7 +24,7 @@ nukeRefs() { # necessary for the absolute first stage of the bootstrap. cp $bash/bin/bash $out/in-nixpkgs nukeRefs $out/in-nixpkgs/bash -cp $bzip2/bin/bunzip2 $out/in-nixpkgs +cp $bzip2/bin/bzip2 $out/in-nixpkgs cp $coreutils/bin/cp $out/in-nixpkgs cp $gnutar/bin/tar $out/in-nixpkgs nukeRefs $out/in-nixpkgs/tar @@ -51,8 +51,7 @@ cp $gawk/bin/gawk tools/bin ln -s gawk tools/bin/awk cp $gnutar/bin/* tools/bin cp $gzip/bin/gzip tools/bin -ln -s gzip tools/bin/gunzip -cp $bzip2/bin/bunzip2 tools/bin +cp $bzip2/bin/bzip2 tools/bin cp $gnumake/bin/* tools/bin cp $patch/bin/* tools/bin cp $patchelf/bin/* tools/bin From 31034cb3d122b6a2315ec1e2082fc06acac96f3f Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 3 Dec 2007 15:40:29 +0000 Subject: [PATCH 054/320] * Some fixes for rebuilding the bootstrap binaries on x86_64. svn path=/nixpkgs/branches/stdenv-updates/; revision=9836 --- pkgs/stdenv/linux/make-bootstrap-tools.nix | 8 +++++--- pkgs/stdenv/linux/make-bootstrap-tools.sh | 3 +-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.nix b/pkgs/stdenv/linux/make-bootstrap-tools.nix index ce81ff0bd8f4..6358855464b7 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.nix +++ b/pkgs/stdenv/linux/make-bootstrap-tools.nix @@ -1,6 +1,8 @@ +{system ? builtins.currentSystem}: + let - pkgs = import ../../top-level/all-packages.nix {}; + pkgs = import ../../top-level/all-packages.nix {inherit system;}; # Have to do removeAttrs to prevent all-packages from copying @@ -37,14 +39,14 @@ let gnutar = # Tar seems to be broken on dietlibc on x86_64. - if pkgs.stdenv.system != "x86_64-linux" + if system != "x86_64-linux" then pkgsDiet.gnutar151 # 1.16 is broken else pkgsStatic.gnutar; gawk = # Dietlibc only provides sufficient math functions (fmod, sin, # cos, etc.) on i686. On other platforms, use Glibc. - if pkgs.stdenv.system == "i686-linux" + if system == "i686-linux" then pkgsDiet.gawk else pkgsStatic.gawk; diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index 1b848c06fb8e..0ec0435fce9e 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -88,7 +88,6 @@ cp -prd $gcc/libexec gcc chmod -R +w gcc nukeRefs gcc/libexec/gcc/*/*/cc1 nukeRefs gcc/libexec/gcc/*/*/collect2 -rm -f gcc/lib/libmud* gcc/lib/libiberty* gcc/lib/libssp* if test -e gcc/lib/libgcc_s.so.1; then nukeRefs gcc/lib/libgcc_s.so.1 fi @@ -97,10 +96,10 @@ if test -e $gcc/lib64; then chmod -R +w gcc/lib64 nukeRefs gcc/lib64/libgcc_s.so.1 fi +rm -f gcc/lib*/libmud* gcc/lib*/libiberty* gcc/lib*/libssp* gcc/lib*/libgomp* rm -rf gcc/lib/gcc/*/*/install-tools rm -rf gcc/lib/gcc/*/*/include/root rm -rf gcc/lib/gcc/*/*/include/linux -rm -f gcc/lib/libgomp* if test -e gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h; then nukeRefs gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h fi From ff95bc3eea28f7e7c07fa640bce47ce4788ccfcf Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 3 Dec 2007 17:55:41 +0000 Subject: [PATCH 055/320] * Use gzip -d / bzip2 -d instead of gunzip / bunzip2. svn path=/nixpkgs/branches/stdenv-updates/; revision=9839 --- pkgs/stdenv/generic/setup.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 8d8be1ece814..e91a9ce4dfd8 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -437,10 +437,10 @@ unpackFile() { tar xvf $file || fail ;; *.tar.gz | *.tgz | *.tar.Z) - gunzip < $file | tar xvf - || fail + gzip -d < $file | tar xvf - || fail ;; *.tar.bz2 | *.tbz2) - bunzip2 < $file | tar xvf - || fail + bzip2 -d < $file | tar xvf - || fail ;; *.zip) unzip $file || fail @@ -562,10 +562,10 @@ patchW() { local uncompress=cat case $i in *.gz) - uncompress=gunzip + uncompress="gzip -d" ;; *.bz2) - uncompress=bunzip2 + uncompress="bzip2 -d" ;; esac $uncompress < $i | patch $patchFlags || fail From f516036cbb4c5f2a79cfdb1fdc70287331c46ed5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 3 Dec 2007 17:56:44 +0000 Subject: [PATCH 056/320] * Updated bootstrap binaries except for bash which now somehow segfaults totally randomly. svn path=/nixpkgs/branches/stdenv-updates/; revision=9840 --- pkgs/stdenv/linux/bootstrap/i686/bunzip2 | Bin 69060 -> 0 bytes pkgs/stdenv/linux/bootstrap/i686/bzip2 | Bin 0 -> 73860 bytes pkgs/stdenv/linux/bootstrap/i686/cp | Bin 51124 -> 50964 bytes pkgs/stdenv/linux/bootstrap/i686/curl.bz2 | Bin 147746 -> 112642 bytes pkgs/stdenv/linux/bootstrap/i686/default.nix | 24 +++++++++--------- pkgs/stdenv/linux/bootstrap/i686/tar.bz2 | Bin 94989 -> 95513 bytes pkgs/stdenv/linux/bootstrap/x86_64/bunzip2 | Bin 74624 -> 0 bytes pkgs/stdenv/linux/bootstrap/x86_64/bzip2 | Bin 0 -> 75744 bytes pkgs/stdenv/linux/bootstrap/x86_64/cp | Bin 59568 -> 59472 bytes pkgs/stdenv/linux/bootstrap/x86_64/curl.bz2 | Bin 152587 -> 119172 bytes .../stdenv/linux/bootstrap/x86_64/default.nix | 18 ++++++------- pkgs/stdenv/linux/bootstrap/x86_64/tar.bz2 | Bin 425936 -> 431598 bytes pkgs/stdenv/linux/default.nix | 4 +-- pkgs/stdenv/linux/scripts/unpack-curl.sh | 2 +- pkgs/stdenv/linux/scripts/unpack.sh | 4 +-- 15 files changed, 26 insertions(+), 26 deletions(-) delete mode 100755 pkgs/stdenv/linux/bootstrap/i686/bunzip2 create mode 100755 pkgs/stdenv/linux/bootstrap/i686/bzip2 delete mode 100755 pkgs/stdenv/linux/bootstrap/x86_64/bunzip2 create mode 100755 pkgs/stdenv/linux/bootstrap/x86_64/bzip2 diff --git a/pkgs/stdenv/linux/bootstrap/i686/bunzip2 b/pkgs/stdenv/linux/bootstrap/i686/bunzip2 deleted file mode 100755 index 3f3f810e77ee2808cb9d83ecf76bf9d00e1b6888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69060 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
J!70IG7VQH$BLv`br!VC^FK)v>M~w2 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 EAE>$9@&Et; diff --git a/pkgs/stdenv/linux/bootstrap/i686/bzip2 b/pkgs/stdenv/linux/bootstrap/i686/bzip2 new file mode 100755 index 0000000000000000000000000000000000000000..ea45149fa4d34385e23b3eb60bcfdc55235567ef GIT binary patch literal 73860 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 VZX_;JXC&(65R0}f^3WsQ{{gU4%h><` literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/i686/cp b/pkgs/stdenv/linux/bootstrap/i686/cp index 06de68ad9a857dd2157608a3db6241c8ecbfcd3b..55142a9e0b89986e2088300a30db5f7bc54a14de 100755 GIT binary patch literal 50964 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 AGynhq literal 51124 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%0DBDoS< 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 LA{709LgW7dvoXo# diff --git a/pkgs/stdenv/linux/bootstrap/i686/curl.bz2 b/pkgs/stdenv/linux/bootstrap/i686/curl.bz2 index 8db4439e4b8d8943840ee114b185425ba24d2913..b7434ff5b9ed90242a37359a1b8aab51739c2564 100755 GIT binary patch literal 112642 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 s#)e=mtZ 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 Date: Mon, 3 Dec 2007 21:59:10 +0000 Subject: [PATCH 057/320] 2.6.23.1 is default kernel svn path=/nixpkgs/branches/stdenv-updates/; revision=9841 --- pkgs/os-specific/linux/kernel/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/os-specific/linux/kernel/default.nix b/pkgs/os-specific/linux/kernel/default.nix index 36a7552352ea..c07bc4c81fb0 100644 --- a/pkgs/os-specific/linux/kernel/default.nix +++ b/pkgs/os-specific/linux/kernel/default.nix @@ -27,4 +27,5 @@ args.stdenv.lib.listOfListsToAttrs [ [ "2.6.22-ck" (import ./2.6.22-ck.nix newArgs) ] [ "2.6.23" (import ./2.6.23.nix newArgs) ] [ "2.6.23.1" (import ./2.6.23.1.nix newArgs) ] + [ "default" (import ./2.6.23.1.nix newArgs) ] ] From c3a8c454318e964de61c12a1036adbb1700e5c1f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 22:10:59 +0000 Subject: [PATCH 058/320] Fixed some typos in -ck kernels svn path=/nixpkgs/branches/stdenv-updates/; revision=9842 --- pkgs/os-specific/linux/kernel/2.6.21-ck.nix | 2 +- pkgs/os-specific/linux/kernel/2.6.22-ck.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/2.6.21-ck.nix b/pkgs/os-specific/linux/kernel/2.6.21-ck.nix index 6352d39edb14..0fb902c695e4 100644 --- a/pkgs/os-specific/linux/kernel/2.6.21-ck.nix +++ b/pkgs/os-specific/linux/kernel/2.6.21-ck.nix @@ -2,7 +2,7 @@ args: (import ./2.6.21.nix) ( args // { - extraPatches = (if (args ? extraPatches) args.extraPatches else []) ++ + extraPatches = (if (args ? extraPatches) then args.extraPatches else []) ++ [ { name = "Con Kolivas Patch"; diff --git a/pkgs/os-specific/linux/kernel/2.6.22-ck.nix b/pkgs/os-specific/linux/kernel/2.6.22-ck.nix index 75352da8dbcd..23a134cfc77d 100644 --- a/pkgs/os-specific/linux/kernel/2.6.22-ck.nix +++ b/pkgs/os-specific/linux/kernel/2.6.22-ck.nix @@ -2,7 +2,7 @@ args: (import ./2.6.22.nix) ( args // { - extraPatches = (if (args ? extraPatches) args.extraPatches else []) ++ + extraPatches = (if (args ? extraPatches) then args.extraPatches else []) ++ [ { name = "Con Kolivas Patch"; From 1893bbb8605cbcce5c01167b55af070c3b551693 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 22:26:36 +0000 Subject: [PATCH 059/320] More typos svn path=/nixpkgs/branches/stdenv-updates/; revision=9843 --- pkgs/os-specific/linux/kernel/2.6.21.nix | 4 ++-- pkgs/os-specific/linux/kernel/2.6.22.nix | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/2.6.21.nix b/pkgs/os-specific/linux/kernel/2.6.21.nix index 7005671bf2db..1e822fa1627a 100644 --- a/pkgs/os-specific/linux/kernel/2.6.21.nix +++ b/pkgs/os-specific/linux/kernel/2.6.21.nix @@ -18,7 +18,7 @@ args: patch = ./2.6.20-paravirt-nvidia.patch; } { name = "skas-2.6.20-v9-pre9"; - patch = fetchurl { + patch = args.fetchurl { url = http://www.user-mode-linux.org/~blaisorblade/patches/skas3-2.6/skas-2.6.20-v9-pre9/skas-2.6.20-v9-pre9.patch.bz2; md5 = "02e619e5b3aaf0f9768f03ac42753e74"; }; @@ -27,7 +27,7 @@ args: "# CONFIG_PROC_MM_DUMPABLE is not set\n"; } { name = "fbsplash-0.9.2-r5-2.6.21"; - patch = fetchurl { + patch = args.fetchurl { url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.21/4200_fbsplash-0.9.2-r5.patch; sha256 = "00s8074fzsly2zpir885zqkvq267qyzg6vhsn7n1z2v1z78avxd8"; }; diff --git a/pkgs/os-specific/linux/kernel/2.6.22.nix b/pkgs/os-specific/linux/kernel/2.6.22.nix index 43cbc4852514..6725d069381b 100644 --- a/pkgs/os-specific/linux/kernel/2.6.22.nix +++ b/pkgs/os-specific/linux/kernel/2.6.22.nix @@ -10,7 +10,7 @@ args: patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; } { name = "fbsplash-0.9.2-r5-2.6.21"; - patch = fetchurl { + patch = args.fetchurl { url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; }; From 22d52c456a8d48254c62c7d2f8bacad8b2a9873f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 22:48:03 +0000 Subject: [PATCH 060/320] More typos in kernel-related exprs svn path=/nixpkgs/branches/stdenv-updates/; revision=9844 --- pkgs/os-specific/linux/kernel/2.6.20.nix | 2 +- pkgs/os-specific/linux/kernel/2.6.21.nix | 2 +- pkgs/os-specific/linux/kernel/2.6.22.nix | 2 +- pkgs/os-specific/linux/kernel/2.6.23.1.nix | 8 ++++---- pkgs/os-specific/linux/kernel/2.6.23.nix | 2 +- pkgs/os-specific/linux/kernel/meta.nix | 2 +- pkgs/top-level/all-packages.nix | 4 ++-- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/2.6.20.nix b/pkgs/os-specific/linux/kernel/2.6.20.nix index 4b776dcb7062..b6c0c70b5805 100644 --- a/pkgs/os-specific/linux/kernel/2.6.20.nix +++ b/pkgs/os-specific/linux/kernel/2.6.20.nix @@ -28,7 +28,7 @@ args: ]; config = with args; - if kernelConfig != null then kernelConfig else + if config != null then config else if userModeLinux then ./config-2.6.20-uml else if stdenv.system == "i686-linux" then ./config-2.6.20-i686-smp else if stdenv.system == "x86_64-linux" then ./config-2.6.20-x86_64-smp else diff --git a/pkgs/os-specific/linux/kernel/2.6.21.nix b/pkgs/os-specific/linux/kernel/2.6.21.nix index 1e822fa1627a..da7ef60e096f 100644 --- a/pkgs/os-specific/linux/kernel/2.6.21.nix +++ b/pkgs/os-specific/linux/kernel/2.6.21.nix @@ -36,7 +36,7 @@ args: ]; config = with args; - if kernelConfig != null then kernelConfig else + if config != null then config else if userModeLinux then ./config-2.6.21-uml else if stdenv.system == "i686-linux" then ./config-2.6.21-i686-smp else if stdenv.system == "x86_64-linux" then ./config-2.6.21-x86_64-smp else diff --git a/pkgs/os-specific/linux/kernel/2.6.22.nix b/pkgs/os-specific/linux/kernel/2.6.22.nix index 6725d069381b..63943cd98939 100644 --- a/pkgs/os-specific/linux/kernel/2.6.22.nix +++ b/pkgs/os-specific/linux/kernel/2.6.22.nix @@ -19,7 +19,7 @@ args: ]; config = with args; - if kernelConfig != null then kernelConfig else + if config != null then config else if userModeLinux then ./config-2.6.22-uml else if stdenv.system == "i686-linux" then ./config-2.6.22-i686-smp else if stdenv.system == "x86_64-linux" then ./config-2.6.22-x86_64-smp else diff --git a/pkgs/os-specific/linux/kernel/2.6.23.1.nix b/pkgs/os-specific/linux/kernel/2.6.23.1.nix index 9ba12173a115..3d4244a74dae 100644 --- a/pkgs/os-specific/linux/kernel/2.6.23.1.nix +++ b/pkgs/os-specific/linux/kernel/2.6.23.1.nix @@ -32,10 +32,10 @@ args: ]; config = with args; - if kernelConfig != null then kernelConfig else - if userModeLinux then ./config-2.6.23.1-uml else - if stdenv.system == "i686-linux" then ./config-2.6.23.1-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.23.1-x86_64-smp else + if config != null then config else + if userModeLinux then ./config-2.6.23-uml else + if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else abort "No kernel configuration for your platform!"; } ) diff --git a/pkgs/os-specific/linux/kernel/2.6.23.nix b/pkgs/os-specific/linux/kernel/2.6.23.nix index ad06bc4f7eba..ddbd56c92aff 100644 --- a/pkgs/os-specific/linux/kernel/2.6.23.nix +++ b/pkgs/os-specific/linux/kernel/2.6.23.nix @@ -8,7 +8,7 @@ args: systemPatches = [ ]; config = with args; - if kernelConfig != null then kernelConfig else + if config != null then config else if userModeLinux then ./config-2.6.23.1-uml else if stdenv.system == "i686-linux" then ./config-2.6.23.1-i686-smp else if stdenv.system == "x86_64-linux" then ./config-2.6.23.1-x86_64-smp else diff --git a/pkgs/os-specific/linux/kernel/meta.nix b/pkgs/os-specific/linux/kernel/meta.nix index b52c0b55c52f..8dcdcecab526 100644 --- a/pkgs/os-specific/linux/kernel/meta.nix +++ b/pkgs/os-specific/linux/kernel/meta.nix @@ -25,7 +25,7 @@ stdenv.mkDerivation { map (p: if p ? extraConfig then p.extraConfig else "") kernelPatches; in lib.concatStrings (addNewlines (configFromPatches ++ extraConfig)); - config = configFile; + inherit config; buildInputs = [perl mktemp]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 781e1e9f165e..4c9f5af28b88 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3162,10 +3162,10 @@ rec { inherit fetchurl stdenv; }; - uml = import ../os-specific/linux/kernel/linux-2.6.20.nix { + uml = (import ../os-specific/linux/kernel { inherit fetchurl stdenv perl mktemp module_init_tools; userModeLinux = true; - }; + }).default; umlutilities = import ../os-specific/linux/uml-utilities { inherit fetchurl kernelHeaders stdenv; From d6027b718be0cf0850a5453ad46ea7266e79bf80 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 23:01:17 +0000 Subject: [PATCH 061/320] Typo in acerhk module svn path=/nixpkgs/branches/stdenv-updates/; revision=9845 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4c9f5af28b88..cabf527ea35d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2788,7 +2788,7 @@ rec { # this creates a patch which can be applied to the kernel to integrate this module.. kernel_module_acerhk = import ../os-specific/linux/kernel/acerhk { inherit fetchurl stdenv gnupatch; - kernel = builtins.getAttr kernel "2.6.21"; + kernel = builtins.getAttr "2.6.21" kernel; debug = true; }; From 2be10fd095a9dabb79b61ebbb157d22bab33a654 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 23:07:22 +0000 Subject: [PATCH 062/320] Another typo in acerhk svn path=/nixpkgs/branches/stdenv-updates/; revision=9846 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cabf527ea35d..2d128df38fb5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2788,7 +2788,7 @@ rec { # this creates a patch which can be applied to the kernel to integrate this module.. kernel_module_acerhk = import ../os-specific/linux/kernel/acerhk { inherit fetchurl stdenv gnupatch; - kernel = builtins.getAttr "2.6.21" kernel; + kernel = builtins.getAttr "2.6.21" kernel_alts; debug = true; }; From 29b6f99016b891ea4b410f5c3e56546ea54315a5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 23:12:54 +0000 Subject: [PATCH 063/320] typo in facile svn path=/nixpkgs/branches/stdenv-updates/; revision=9847 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2d128df38fb5..aa0d18e44552 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1680,7 +1680,7 @@ rec { facile = import ../development/libraries/facile { inherit fetchurl stdenv; # Actually, we don't need this version but we need native-code compilation - ocaml = ocaml_alts.v_3_10_0; + ocaml = builtins.getAttr "3.10.0" ocaml_alts; }; ffmpeg = import ../development/libraries/ffmpeg { From c05319d084d7a73e4d94e8f21844fd739ca989b1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 23:27:53 +0000 Subject: [PATCH 064/320] Typo in path to the patch svn path=/nixpkgs/branches/stdenv-updates/; revision=9848 --- pkgs/os-specific/linux/kernel/2.6.22.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/kernel/2.6.22.nix b/pkgs/os-specific/linux/kernel/2.6.22.nix index 63943cd98939..c3d167f6b19f 100644 --- a/pkgs/os-specific/linux/kernel/2.6.22.nix +++ b/pkgs/os-specific/linux/kernel/2.6.22.nix @@ -7,7 +7,7 @@ args: systemPatches = [ { name = "paravirt-nvidia"; - patch = ../os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch; + patch = ./2.6.22-paravirt-nvidia.patch; } { name = "fbsplash-0.9.2-r5-2.6.21"; patch = args.fetchurl { From 19991467680019f249ead4f025228c1cd4554210 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 23:33:53 +0000 Subject: [PATCH 065/320] Removed v_*_* getVersion syntax svn path=/nixpkgs/branches/stdenv-updates/; revision=9849 --- pkgs/top-level/all-packages.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index aa0d18e44552..207965a62174 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1099,7 +1099,7 @@ rec { qcmm = import ../development/compilers/qcmm { lua = lua4; - ocaml = ocaml_alts.v_3_08_0; + ocaml = builtins.getAttr "3.08.0" ocaml_alts; inherit fetchurl stdenv mk noweb groff; }; @@ -1212,7 +1212,7 @@ rec { pyrexFun = lib.sumArgs (import ../development/interpreters/pyrex) { inherit fetchurl stdenv stringsWithDeps lib builderDefs; - python = python_alts.v_2_5; + python = builtins.getAttr "2.5" python_alts; }; pyrex = pyrexFun { @@ -3851,7 +3851,7 @@ rec { pythonmagick = import ../applications/graphics/PythonMagick { inherit fetchurl stdenv pkgconfig imagemagick boost; - python = python_alts.v_2_5; + python = builtins.getAttr "2.5" python_alts; }; ratpoison = import ../applications/window-managers/ratpoison { From 6f5e75b1020a358fd7fd5e1e572522a481aec960 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 3 Dec 2007 23:40:46 +0000 Subject: [PATCH 066/320] Kernel: Removed unneeded config (it was a copy of 2.6.23); fixed one more typo. svn path=/nixpkgs/branches/stdenv-updates/; revision=9850 --- pkgs/os-specific/linux/kernel/2.6.23.nix | 6 +- .../linux/kernel/config-2.6.23.1-i686-smp | 3756 ----------------- 2 files changed, 3 insertions(+), 3759 deletions(-) delete mode 100644 pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp diff --git a/pkgs/os-specific/linux/kernel/2.6.23.nix b/pkgs/os-specific/linux/kernel/2.6.23.nix index ddbd56c92aff..3b8c2c469a75 100644 --- a/pkgs/os-specific/linux/kernel/2.6.23.nix +++ b/pkgs/os-specific/linux/kernel/2.6.23.nix @@ -9,9 +9,9 @@ args: config = with args; if config != null then config else - if userModeLinux then ./config-2.6.23.1-uml else - if stdenv.system == "i686-linux" then ./config-2.6.23.1-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.23.1-x86_64-smp else + if userModeLinux then ./config-2.6.23-uml else + if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else abort "No kernel configuration for your platform!"; } ) diff --git a/pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp b/pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp deleted file mode 100644 index 5e4729304107..000000000000 --- a/pkgs/os-specific/linux/kernel/config-2.6.23.1-i686-smp +++ /dev/null @@ -1,3756 +0,0 @@ -# -# Automatically generated make config: don't edit -# Linux kernel version: 2.6.23.1 -# Wed Oct 31 14:47:06 2007 -# -CONFIG_X86_32=y -CONFIG_GENERIC_TIME=y -CONFIG_GENERIC_CMOS_UPDATE=y -CONFIG_CLOCKSOURCE_WATCHDOG=y -CONFIG_GENERIC_CLOCKEVENTS=y -CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y -CONFIG_LOCKDEP_SUPPORT=y -CONFIG_STACKTRACE_SUPPORT=y -CONFIG_SEMAPHORE_SLEEPERS=y -CONFIG_X86=y -CONFIG_MMU=y -CONFIG_ZONE_DMA=y -CONFIG_QUICKLIST=y -CONFIG_GENERIC_ISA_DMA=y -CONFIG_GENERIC_IOMAP=y -CONFIG_GENERIC_BUG=y -CONFIG_GENERIC_HWEIGHT=y -CONFIG_ARCH_MAY_HAVE_PC_FDC=y -CONFIG_DMI=y -CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" - -# -# General setup -# -CONFIG_EXPERIMENTAL=y -CONFIG_LOCK_KERNEL=y -CONFIG_INIT_ENV_ARG_LIMIT=32 -CONFIG_LOCALVERSION="-default" -# CONFIG_LOCALVERSION_AUTO is not set -CONFIG_SWAP=y -CONFIG_SYSVIPC=y -CONFIG_SYSVIPC_SYSCTL=y -CONFIG_POSIX_MQUEUE=y -CONFIG_BSD_PROCESS_ACCT=y -CONFIG_BSD_PROCESS_ACCT_V3=y -# CONFIG_TASKSTATS is not set -# CONFIG_USER_NS is not set -CONFIG_AUDIT=y -CONFIG_AUDITSYSCALL=y -CONFIG_IKCONFIG=y -CONFIG_IKCONFIG_PROC=y -CONFIG_LOG_BUF_SHIFT=17 -# CONFIG_CPUSETS is not set -# CONFIG_SYSFS_DEPRECATED is not set -CONFIG_RELAY=y -CONFIG_BLK_DEV_INITRD=y -CONFIG_INITRAMFS_SOURCE="" -# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set -CONFIG_SYSCTL=y -# CONFIG_EMBEDDED is not set -CONFIG_UID16=y -CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_ALL is not set -# CONFIG_KALLSYMS_EXTRA_PASS is not set -CONFIG_HOTPLUG=y -CONFIG_PRINTK=y -CONFIG_BUG=y -CONFIG_ELF_CORE=y -CONFIG_BASE_FULL=y -CONFIG_FUTEX=y -CONFIG_ANON_INODES=y -CONFIG_EPOLL=y -CONFIG_SIGNALFD=y -CONFIG_EVENTFD=y -CONFIG_SHMEM=y -CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLAB=y -# CONFIG_SLUB is not set -# CONFIG_SLOB is not set -CONFIG_RT_MUTEXES=y -# CONFIG_TINY_SHMEM is not set -CONFIG_BASE_SMALL=0 -CONFIG_MODULES=y -CONFIG_MODULE_UNLOAD=y -CONFIG_MODULE_FORCE_UNLOAD=y -CONFIG_MODVERSIONS=y -CONFIG_MODULE_SRCVERSION_ALL=y -CONFIG_KMOD=y -CONFIG_STOP_MACHINE=y -CONFIG_BLOCK=y -CONFIG_LBD=y -# CONFIG_BLK_DEV_IO_TRACE is not set -# CONFIG_LSF is not set -# CONFIG_BLK_DEV_BSG is not set - -# -# IO Schedulers -# -CONFIG_IOSCHED_NOOP=y -CONFIG_IOSCHED_AS=y -CONFIG_IOSCHED_DEADLINE=y -CONFIG_IOSCHED_CFQ=y -# CONFIG_DEFAULT_AS is not set -# CONFIG_DEFAULT_DEADLINE is not set -CONFIG_DEFAULT_CFQ=y -# CONFIG_DEFAULT_NOOP is not set -CONFIG_DEFAULT_IOSCHED="cfq" - -# -# Processor type and features -# -CONFIG_TICK_ONESHOT=y -CONFIG_NO_HZ=y -CONFIG_HIGH_RES_TIMERS=y -CONFIG_SMP=y -CONFIG_X86_PC=y -# CONFIG_X86_ELAN is not set -# CONFIG_X86_VOYAGER is not set -# CONFIG_X86_NUMAQ is not set -# CONFIG_X86_SUMMIT is not set -# CONFIG_X86_BIGSMP is not set -# CONFIG_X86_VISWS is not set -# CONFIG_X86_GENERICARCH is not set -# CONFIG_X86_ES7000 is not set -CONFIG_PARAVIRT=y -CONFIG_XEN=y -CONFIG_VMI=y -# CONFIG_M386 is not set -# CONFIG_M486 is not set -# CONFIG_M586 is not set -# CONFIG_M586TSC is not set -# CONFIG_M586MMX is not set -CONFIG_M686=y -# CONFIG_MPENTIUMII is not set -# CONFIG_MPENTIUMIII is not set -# CONFIG_MPENTIUMM is not set -# CONFIG_MCORE2 is not set -# CONFIG_MPENTIUM4 is not set -# CONFIG_MK6 is not set -# CONFIG_MK7 is not set -# CONFIG_MK8 is not set -# CONFIG_MCRUSOE is not set -# CONFIG_MEFFICEON is not set -# CONFIG_MWINCHIPC6 is not set -# CONFIG_MWINCHIP2 is not set -# CONFIG_MWINCHIP3D is not set -# CONFIG_MGEODEGX1 is not set -# CONFIG_MGEODE_LX is not set -# CONFIG_MCYRIXIII is not set -# CONFIG_MVIAC3_2 is not set -# CONFIG_MVIAC7 is not set -CONFIG_X86_GENERIC=y -CONFIG_X86_CMPXCHG=y -CONFIG_X86_L1_CACHE_SHIFT=7 -CONFIG_X86_XADD=y -CONFIG_RWSEM_XCHGADD_ALGORITHM=y -# CONFIG_ARCH_HAS_ILOG2_U32 is not set -# CONFIG_ARCH_HAS_ILOG2_U64 is not set -CONFIG_GENERIC_CALIBRATE_DELAY=y -CONFIG_X86_PPRO_FENCE=y -CONFIG_X86_WP_WORKS_OK=y -CONFIG_X86_INVLPG=y -CONFIG_X86_BSWAP=y -CONFIG_X86_POPAD_OK=y -CONFIG_X86_GOOD_APIC=y -CONFIG_X86_INTEL_USERCOPY=y -CONFIG_X86_USE_PPRO_CHECKSUM=y -CONFIG_X86_TSC=y -CONFIG_X86_CMOV=y -CONFIG_X86_MINIMUM_CPU_FAMILY=4 -CONFIG_HPET_TIMER=y -CONFIG_HPET_EMULATE_RTC=y -CONFIG_NR_CPUS=8 -CONFIG_SCHED_SMT=y -CONFIG_SCHED_MC=y -# CONFIG_PREEMPT_NONE is not set -CONFIG_PREEMPT_VOLUNTARY=y -# CONFIG_PREEMPT is not set -CONFIG_PREEMPT_BKL=y -CONFIG_X86_LOCAL_APIC=y -CONFIG_X86_IO_APIC=y -CONFIG_X86_MCE=y -CONFIG_X86_MCE_NONFATAL=y -CONFIG_X86_MCE_P4THERMAL=y -CONFIG_VM86=y -CONFIG_TOSHIBA=m -CONFIG_I8K=m -CONFIG_X86_REBOOTFIXUPS=y -CONFIG_MICROCODE=m -CONFIG_MICROCODE_OLD_INTERFACE=y -CONFIG_X86_MSR=m -CONFIG_X86_CPUID=m - -# -# Firmware Drivers -# -CONFIG_EDD=m -CONFIG_EFI_VARS=m -CONFIG_DELL_RBU=m -CONFIG_DCDBAS=m -CONFIG_DMIID=y -# CONFIG_NOHIGHMEM is not set -CONFIG_HIGHMEM4G=y -# CONFIG_HIGHMEM64G is not set -CONFIG_PAGE_OFFSET=0xC0000000 -CONFIG_HIGHMEM=y -CONFIG_ARCH_FLATMEM_ENABLE=y -CONFIG_ARCH_SPARSEMEM_ENABLE=y -CONFIG_ARCH_SELECT_MEMORY_MODEL=y -CONFIG_ARCH_POPULATES_NODE_MAP=y -CONFIG_SELECT_MEMORY_MODEL=y -CONFIG_FLATMEM_MANUAL=y -# CONFIG_DISCONTIGMEM_MANUAL is not set -# CONFIG_SPARSEMEM_MANUAL is not set -CONFIG_FLATMEM=y -CONFIG_FLAT_NODE_MEM_MAP=y -CONFIG_SPARSEMEM_STATIC=y -CONFIG_SPLIT_PTLOCK_CPUS=4096 -# CONFIG_RESOURCES_64BIT is not set -CONFIG_ZONE_DMA_FLAG=1 -CONFIG_BOUNCE=y -CONFIG_NR_QUICK=1 -CONFIG_VIRT_TO_BUS=y -CONFIG_HIGHPTE=y -# CONFIG_MATH_EMULATION is not set -CONFIG_MTRR=y -CONFIG_EFI=y -CONFIG_IRQBALANCE=y -CONFIG_BOOT_IOREMAP=y -CONFIG_SECCOMP=y -# CONFIG_HZ_100 is not set -CONFIG_HZ_250=y -# CONFIG_HZ_300 is not set -# CONFIG_HZ_1000 is not set -CONFIG_HZ=250 -CONFIG_KEXEC=y -# CONFIG_CRASH_DUMP is not set -CONFIG_PHYSICAL_START=0x100000 -# CONFIG_RELOCATABLE is not set -CONFIG_PHYSICAL_ALIGN=0x100000 -CONFIG_HOTPLUG_CPU=y -CONFIG_COMPAT_VDSO=y -CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y - -# -# Power management options (ACPI, APM) -# -CONFIG_PM=y -CONFIG_PM_LEGACY=y -# CONFIG_PM_DEBUG is not set -CONFIG_PM_SLEEP_SMP=y -CONFIG_PM_SLEEP=y -CONFIG_SUSPEND_SMP_POSSIBLE=y -CONFIG_SUSPEND=y -CONFIG_HIBERNATION_SMP_POSSIBLE=y -CONFIG_HIBERNATION=y -CONFIG_PM_STD_PARTITION="" -CONFIG_ACPI=y -CONFIG_ACPI_SLEEP=y -CONFIG_ACPI_PROCFS=y -CONFIG_ACPI_PROC_EVENT=y -CONFIG_ACPI_AC=m -CONFIG_ACPI_BATTERY=m -CONFIG_ACPI_BUTTON=m -CONFIG_ACPI_VIDEO=m -CONFIG_ACPI_FAN=m -CONFIG_ACPI_DOCK=m -CONFIG_ACPI_BAY=m -CONFIG_ACPI_PROCESSOR=m -CONFIG_ACPI_HOTPLUG_CPU=y -CONFIG_ACPI_THERMAL=m -CONFIG_ACPI_ASUS=m -CONFIG_ACPI_TOSHIBA=m -# CONFIG_ACPI_CUSTOM_DSDT is not set -CONFIG_ACPI_BLACKLIST_YEAR=2001 -# CONFIG_ACPI_DEBUG is not set -CONFIG_ACPI_EC=y -CONFIG_ACPI_POWER=y -CONFIG_ACPI_SYSTEM=y -CONFIG_X86_PM_TIMER=y -CONFIG_ACPI_CONTAINER=m -# CONFIG_ACPI_SBS is not set -CONFIG_APM=y -# CONFIG_APM_IGNORE_USER_SUSPEND is not set -CONFIG_APM_DO_ENABLE=y -# CONFIG_APM_CPU_IDLE is not set -CONFIG_APM_DISPLAY_BLANK=y -CONFIG_APM_ALLOW_INTS=y -# CONFIG_APM_REAL_MODE_POWER_OFF is not set - -# -# CPU Frequency scaling -# -CONFIG_CPU_FREQ=y -CONFIG_CPU_FREQ_TABLE=m -# CONFIG_CPU_FREQ_DEBUG is not set -CONFIG_CPU_FREQ_STAT=m -CONFIG_CPU_FREQ_STAT_DETAILS=y -CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y -# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -CONFIG_CPU_FREQ_GOV_POWERSAVE=m -CONFIG_CPU_FREQ_GOV_USERSPACE=m -CONFIG_CPU_FREQ_GOV_ONDEMAND=m -CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m - -# -# CPUFreq processor drivers -# -CONFIG_X86_ACPI_CPUFREQ=m -CONFIG_X86_POWERNOW_K6=m -CONFIG_X86_POWERNOW_K7=m -CONFIG_X86_POWERNOW_K7_ACPI=y -CONFIG_X86_POWERNOW_K8=m -CONFIG_X86_POWERNOW_K8_ACPI=y -CONFIG_X86_GX_SUSPMOD=m -CONFIG_X86_SPEEDSTEP_CENTRINO=m -CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y -CONFIG_X86_SPEEDSTEP_ICH=m -CONFIG_X86_SPEEDSTEP_SMI=m -CONFIG_X86_P4_CLOCKMOD=m -CONFIG_X86_CPUFREQ_NFORCE2=m -CONFIG_X86_LONGRUN=m -CONFIG_X86_LONGHAUL=m -CONFIG_X86_E_POWERSAVER=m - -# -# shared options -# -# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set -CONFIG_X86_SPEEDSTEP_LIB=m -CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y - -# -# Bus options (PCI, PCMCIA, EISA, MCA, ISA) -# -CONFIG_PCI=y -# CONFIG_PCI_GOBIOS is not set -# CONFIG_PCI_GOMMCONFIG is not set -# CONFIG_PCI_GODIRECT is not set -CONFIG_PCI_GOANY=y -CONFIG_PCI_BIOS=y -CONFIG_PCI_DIRECT=y -CONFIG_PCI_MMCONFIG=y -CONFIG_PCIEPORTBUS=y -CONFIG_HOTPLUG_PCI_PCIE=m -# CONFIG_HOTPLUG_PCI_PCIE_POLL_EVENT_MODE is not set -CONFIG_PCIEAER=y -CONFIG_ARCH_SUPPORTS_MSI=y -CONFIG_PCI_MSI=y -# CONFIG_PCI_DEBUG is not set -CONFIG_HT_IRQ=y -CONFIG_ISA_DMA_API=y -CONFIG_ISA=y -# CONFIG_EISA is not set -# CONFIG_MCA is not set -CONFIG_SCx200=m -CONFIG_SCx200HR_TIMER=m -CONFIG_K8_NB=y - -# -# PCCARD (PCMCIA/CardBus) support -# -CONFIG_PCCARD=m -# CONFIG_PCMCIA_DEBUG is not set -CONFIG_PCMCIA=m -CONFIG_PCMCIA_LOAD_CIS=y -CONFIG_PCMCIA_IOCTL=y -CONFIG_CARDBUS=y - -# -# PC-card bridges -# -CONFIG_YENTA=m -CONFIG_YENTA_O2=y -CONFIG_YENTA_RICOH=y -CONFIG_YENTA_TI=y -CONFIG_YENTA_ENE_TUNE=y -CONFIG_YENTA_TOSHIBA=y -CONFIG_PD6729=m -CONFIG_I82092=m -CONFIG_I82365=m -CONFIG_TCIC=m -CONFIG_PCMCIA_PROBE=y -CONFIG_PCCARD_NONSTATIC=m -CONFIG_HOTPLUG_PCI=m -CONFIG_HOTPLUG_PCI_FAKE=m -CONFIG_HOTPLUG_PCI_COMPAQ=m -CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y -CONFIG_HOTPLUG_PCI_IBM=m -CONFIG_HOTPLUG_PCI_ACPI=m -CONFIG_HOTPLUG_PCI_ACPI_IBM=m -CONFIG_HOTPLUG_PCI_CPCI=y -CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m -CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m -CONFIG_HOTPLUG_PCI_SHPC=m - -# -# Executable file formats -# -CONFIG_BINFMT_ELF=y -CONFIG_BINFMT_AOUT=m -CONFIG_BINFMT_MISC=m - -# -# Networking -# -CONFIG_NET=y - -# -# Networking options -# -CONFIG_PACKET=m -CONFIG_PACKET_MMAP=y -CONFIG_UNIX=y -CONFIG_XFRM=y -CONFIG_XFRM_USER=m -# CONFIG_XFRM_SUB_POLICY is not set -# CONFIG_XFRM_MIGRATE is not set -CONFIG_NET_KEY=m -# CONFIG_NET_KEY_MIGRATE is not set -CONFIG_INET=y -CONFIG_IP_MULTICAST=y -CONFIG_IP_ADVANCED_ROUTER=y -CONFIG_ASK_IP_FIB_HASH=y -# CONFIG_IP_FIB_TRIE is not set -CONFIG_IP_FIB_HASH=y -CONFIG_IP_MULTIPLE_TABLES=y -CONFIG_IP_ROUTE_MULTIPATH=y -CONFIG_IP_ROUTE_VERBOSE=y -# CONFIG_IP_PNP is not set -CONFIG_NET_IPIP=m -CONFIG_NET_IPGRE=m -CONFIG_NET_IPGRE_BROADCAST=y -CONFIG_IP_MROUTE=y -CONFIG_IP_PIMSM_V1=y -CONFIG_IP_PIMSM_V2=y -# CONFIG_ARPD is not set -CONFIG_SYN_COOKIES=y -CONFIG_INET_AH=m -CONFIG_INET_ESP=m -CONFIG_INET_IPCOMP=m -CONFIG_INET_XFRM_TUNNEL=m -CONFIG_INET_TUNNEL=m -CONFIG_INET_XFRM_MODE_TRANSPORT=m -CONFIG_INET_XFRM_MODE_TUNNEL=m -CONFIG_INET_XFRM_MODE_BEET=m -CONFIG_INET_DIAG=m -CONFIG_INET_TCP_DIAG=m -CONFIG_TCP_CONG_ADVANCED=y -CONFIG_TCP_CONG_BIC=m -CONFIG_TCP_CONG_CUBIC=m -CONFIG_TCP_CONG_WESTWOOD=m -CONFIG_TCP_CONG_HTCP=m -CONFIG_TCP_CONG_HSTCP=m -CONFIG_TCP_CONG_HYBLA=m -CONFIG_TCP_CONG_VEGAS=m -CONFIG_TCP_CONG_SCALABLE=m -# CONFIG_TCP_CONG_LP is not set -# CONFIG_TCP_CONG_VENO is not set -CONFIG_TCP_CONG_YEAH=m -CONFIG_TCP_CONG_ILLINOIS=m -# CONFIG_DEFAULT_BIC is not set -# CONFIG_DEFAULT_CUBIC is not set -# CONFIG_DEFAULT_HTCP is not set -# CONFIG_DEFAULT_VEGAS is not set -# CONFIG_DEFAULT_WESTWOOD is not set -CONFIG_DEFAULT_RENO=y -CONFIG_DEFAULT_TCP_CONG="reno" -# CONFIG_TCP_MD5SIG is not set -CONFIG_IP_VS=m -# CONFIG_IP_VS_DEBUG is not set -CONFIG_IP_VS_TAB_BITS=12 - -# -# IPVS transport protocol load balancing support -# -CONFIG_IP_VS_PROTO_TCP=y -CONFIG_IP_VS_PROTO_UDP=y -CONFIG_IP_VS_PROTO_ESP=y -CONFIG_IP_VS_PROTO_AH=y - -# -# IPVS scheduler -# -CONFIG_IP_VS_RR=m -CONFIG_IP_VS_WRR=m -CONFIG_IP_VS_LC=m -CONFIG_IP_VS_WLC=m -CONFIG_IP_VS_LBLC=m -CONFIG_IP_VS_LBLCR=m -CONFIG_IP_VS_DH=m -CONFIG_IP_VS_SH=m -CONFIG_IP_VS_SED=m -CONFIG_IP_VS_NQ=m - -# -# IPVS application helper -# -CONFIG_IP_VS_FTP=m -CONFIG_IPV6=m -CONFIG_IPV6_PRIVACY=y -# CONFIG_IPV6_ROUTER_PREF is not set -# CONFIG_IPV6_OPTIMISTIC_DAD is not set -CONFIG_INET6_AH=m -CONFIG_INET6_ESP=m -CONFIG_INET6_IPCOMP=m -# CONFIG_IPV6_MIP6 is not set -CONFIG_INET6_XFRM_TUNNEL=m -CONFIG_INET6_TUNNEL=m -CONFIG_INET6_XFRM_MODE_TRANSPORT=m -CONFIG_INET6_XFRM_MODE_TUNNEL=m -CONFIG_INET6_XFRM_MODE_BEET=m -# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -CONFIG_IPV6_SIT=m -CONFIG_IPV6_TUNNEL=m -# CONFIG_IPV6_MULTIPLE_TABLES is not set -# CONFIG_NETLABEL is not set -CONFIG_NETWORK_SECMARK=y -CONFIG_NETFILTER=y -# CONFIG_NETFILTER_DEBUG is not set -CONFIG_BRIDGE_NETFILTER=y - -# -# Core Netfilter Configuration -# -CONFIG_NETFILTER_NETLINK=m -CONFIG_NETFILTER_NETLINK_QUEUE=m -CONFIG_NETFILTER_NETLINK_LOG=m -CONFIG_NF_CONNTRACK_ENABLED=m -CONFIG_NF_CONNTRACK=m -CONFIG_NF_CT_ACCT=y -CONFIG_NF_CONNTRACK_MARK=y -# CONFIG_NF_CONNTRACK_SECMARK is not set -# CONFIG_NF_CONNTRACK_EVENTS is not set -CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -CONFIG_NF_CT_PROTO_UDPLITE=m -CONFIG_NF_CONNTRACK_AMANDA=m -CONFIG_NF_CONNTRACK_FTP=m -CONFIG_NF_CONNTRACK_H323=m -CONFIG_NF_CONNTRACK_IRC=m -CONFIG_NF_CONNTRACK_NETBIOS_NS=m -CONFIG_NF_CONNTRACK_PPTP=m -CONFIG_NF_CONNTRACK_SANE=m -CONFIG_NF_CONNTRACK_SIP=m -CONFIG_NF_CONNTRACK_TFTP=m -CONFIG_NF_CT_NETLINK=m -CONFIG_NETFILTER_XTABLES=m -CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m -CONFIG_NETFILTER_XT_TARGET_CONNMARK=m -CONFIG_NETFILTER_XT_TARGET_DSCP=m -CONFIG_NETFILTER_XT_TARGET_MARK=m -CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m -CONFIG_NETFILTER_XT_TARGET_NFLOG=m -CONFIG_NETFILTER_XT_TARGET_NOTRACK=m -CONFIG_NETFILTER_XT_TARGET_TRACE=m -CONFIG_NETFILTER_XT_TARGET_SECMARK=m -CONFIG_NETFILTER_XT_TARGET_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_COMMENT=m -CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m -CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m -CONFIG_NETFILTER_XT_MATCH_CONNMARK=m -CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m -CONFIG_NETFILTER_XT_MATCH_DCCP=m -CONFIG_NETFILTER_XT_MATCH_DSCP=m -CONFIG_NETFILTER_XT_MATCH_ESP=m -CONFIG_NETFILTER_XT_MATCH_HELPER=m -CONFIG_NETFILTER_XT_MATCH_LENGTH=m -CONFIG_NETFILTER_XT_MATCH_LIMIT=m -CONFIG_NETFILTER_XT_MATCH_MAC=m -CONFIG_NETFILTER_XT_MATCH_MARK=m -CONFIG_NETFILTER_XT_MATCH_POLICY=m -CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m -CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m -CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m -CONFIG_NETFILTER_XT_MATCH_QUOTA=m -CONFIG_NETFILTER_XT_MATCH_REALM=m -CONFIG_NETFILTER_XT_MATCH_SCTP=m -CONFIG_NETFILTER_XT_MATCH_STATE=m -CONFIG_NETFILTER_XT_MATCH_STATISTIC=m -CONFIG_NETFILTER_XT_MATCH_STRING=m -CONFIG_NETFILTER_XT_MATCH_TCPMSS=m -CONFIG_NETFILTER_XT_MATCH_U32=m -CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m - -# -# IP: Netfilter Configuration -# -CONFIG_NF_CONNTRACK_IPV4=m -CONFIG_NF_CONNTRACK_PROC_COMPAT=y -CONFIG_IP_NF_QUEUE=m -CONFIG_IP_NF_IPTABLES=m -CONFIG_IP_NF_MATCH_IPRANGE=m -CONFIG_IP_NF_MATCH_TOS=m -CONFIG_IP_NF_MATCH_RECENT=m -CONFIG_IP_NF_MATCH_ECN=m -CONFIG_IP_NF_MATCH_AH=m -CONFIG_IP_NF_MATCH_TTL=m -CONFIG_IP_NF_MATCH_OWNER=m -CONFIG_IP_NF_MATCH_ADDRTYPE=m -CONFIG_IP_NF_FILTER=m -CONFIG_IP_NF_TARGET_REJECT=m -CONFIG_IP_NF_TARGET_LOG=m -CONFIG_IP_NF_TARGET_ULOG=m -CONFIG_NF_NAT=m -CONFIG_NF_NAT_NEEDED=y -CONFIG_IP_NF_TARGET_MASQUERADE=m -CONFIG_IP_NF_TARGET_REDIRECT=m -CONFIG_IP_NF_TARGET_NETMAP=m -CONFIG_IP_NF_TARGET_SAME=m -CONFIG_NF_NAT_SNMP_BASIC=m -CONFIG_NF_NAT_PROTO_GRE=m -CONFIG_NF_NAT_FTP=m -CONFIG_NF_NAT_IRC=m -CONFIG_NF_NAT_TFTP=m -CONFIG_NF_NAT_AMANDA=m -CONFIG_NF_NAT_PPTP=m -CONFIG_NF_NAT_H323=m -CONFIG_NF_NAT_SIP=m -CONFIG_IP_NF_MANGLE=m -CONFIG_IP_NF_TARGET_TOS=m -CONFIG_IP_NF_TARGET_ECN=m -CONFIG_IP_NF_TARGET_TTL=m -CONFIG_IP_NF_TARGET_CLUSTERIP=m -CONFIG_IP_NF_RAW=m -# CONFIG_IP_NF_ARPTABLES is not set - -# -# IPv6: Netfilter Configuration (EXPERIMENTAL) -# -CONFIG_NF_CONNTRACK_IPV6=m -CONFIG_IP6_NF_QUEUE=m -CONFIG_IP6_NF_IPTABLES=m -CONFIG_IP6_NF_MATCH_RT=m -CONFIG_IP6_NF_MATCH_OPTS=m -CONFIG_IP6_NF_MATCH_FRAG=m -CONFIG_IP6_NF_MATCH_HL=m -CONFIG_IP6_NF_MATCH_OWNER=m -CONFIG_IP6_NF_MATCH_IPV6HEADER=m -CONFIG_IP6_NF_MATCH_AH=m -CONFIG_IP6_NF_MATCH_MH=m -CONFIG_IP6_NF_MATCH_EUI64=m -CONFIG_IP6_NF_FILTER=m -CONFIG_IP6_NF_TARGET_LOG=m -CONFIG_IP6_NF_TARGET_REJECT=m -CONFIG_IP6_NF_MANGLE=m -CONFIG_IP6_NF_TARGET_HL=m -CONFIG_IP6_NF_RAW=m - -# -# DECnet: Netfilter Configuration -# -CONFIG_DECNET_NF_GRABULATOR=m - -# -# Bridge: Netfilter Configuration -# -CONFIG_BRIDGE_NF_EBTABLES=m -CONFIG_BRIDGE_EBT_BROUTE=m -CONFIG_BRIDGE_EBT_T_FILTER=m -CONFIG_BRIDGE_EBT_T_NAT=m -CONFIG_BRIDGE_EBT_802_3=m -CONFIG_BRIDGE_EBT_AMONG=m -CONFIG_BRIDGE_EBT_ARP=m -CONFIG_BRIDGE_EBT_IP=m -CONFIG_BRIDGE_EBT_LIMIT=m -CONFIG_BRIDGE_EBT_MARK=m -CONFIG_BRIDGE_EBT_PKTTYPE=m -CONFIG_BRIDGE_EBT_STP=m -CONFIG_BRIDGE_EBT_VLAN=m -CONFIG_BRIDGE_EBT_ARPREPLY=m -CONFIG_BRIDGE_EBT_DNAT=m -CONFIG_BRIDGE_EBT_MARK_T=m -CONFIG_BRIDGE_EBT_REDIRECT=m -CONFIG_BRIDGE_EBT_SNAT=m -CONFIG_BRIDGE_EBT_LOG=m -CONFIG_BRIDGE_EBT_ULOG=m -# CONFIG_IP_DCCP is not set -CONFIG_IP_SCTP=m -# CONFIG_SCTP_DBG_MSG is not set -# CONFIG_SCTP_DBG_OBJCNT is not set -# CONFIG_SCTP_HMAC_NONE is not set -# CONFIG_SCTP_HMAC_SHA1 is not set -CONFIG_SCTP_HMAC_MD5=y -# CONFIG_TIPC is not set -CONFIG_ATM=m -CONFIG_ATM_CLIP=m -CONFIG_ATM_CLIP_NO_ICMP=y -CONFIG_ATM_LANE=m -CONFIG_ATM_MPOA=m -CONFIG_ATM_BR2684=m -# CONFIG_ATM_BR2684_IPFILTER is not set -CONFIG_BRIDGE=m -CONFIG_VLAN_8021Q=m -CONFIG_DECNET=m -CONFIG_DECNET_ROUTER=y -CONFIG_LLC=y -CONFIG_LLC2=m -CONFIG_IPX=m -# CONFIG_IPX_INTERN is not set -CONFIG_ATALK=m -CONFIG_DEV_APPLETALK=m -CONFIG_LTPC=m -CONFIG_COPS=m -CONFIG_COPS_DAYNA=y -CONFIG_COPS_TANGENT=y -CONFIG_IPDDP=m -CONFIG_IPDDP_ENCAP=y -CONFIG_IPDDP_DECAP=y -CONFIG_X25=m -CONFIG_LAPB=m -CONFIG_ECONET=m -# CONFIG_ECONET_AUNUDP is not set -# CONFIG_ECONET_NATIVE is not set -CONFIG_WAN_ROUTER=m - -# -# QoS and/or fair queueing -# -CONFIG_NET_SCHED=y -CONFIG_NET_SCH_FIFO=y - -# -# Queueing/Scheduling -# -CONFIG_NET_SCH_CBQ=m -CONFIG_NET_SCH_HTB=m -CONFIG_NET_SCH_HFSC=m -CONFIG_NET_SCH_ATM=m -CONFIG_NET_SCH_PRIO=m -CONFIG_NET_SCH_RR=m -CONFIG_NET_SCH_RED=m -CONFIG_NET_SCH_SFQ=m -CONFIG_NET_SCH_TEQL=m -CONFIG_NET_SCH_TBF=m -CONFIG_NET_SCH_GRED=m -CONFIG_NET_SCH_DSMARK=m -CONFIG_NET_SCH_NETEM=m -CONFIG_NET_SCH_INGRESS=m - -# -# Classification -# -CONFIG_NET_CLS=y -CONFIG_NET_CLS_BASIC=m -CONFIG_NET_CLS_TCINDEX=m -CONFIG_NET_CLS_ROUTE4=m -CONFIG_NET_CLS_ROUTE=y -CONFIG_NET_CLS_FW=m -CONFIG_NET_CLS_U32=m -CONFIG_CLS_U32_PERF=y -CONFIG_CLS_U32_MARK=y -CONFIG_NET_CLS_RSVP=m -CONFIG_NET_CLS_RSVP6=m -# CONFIG_NET_EMATCH is not set -CONFIG_NET_CLS_ACT=y -CONFIG_NET_ACT_POLICE=m -CONFIG_NET_ACT_GACT=m -CONFIG_GACT_PROB=y -CONFIG_NET_ACT_MIRRED=m -CONFIG_NET_ACT_IPT=m -CONFIG_NET_ACT_PEDIT=m -CONFIG_NET_ACT_SIMP=m -# CONFIG_NET_CLS_POLICE is not set -# CONFIG_NET_CLS_IND is not set - -# -# Network testing -# -CONFIG_NET_PKTGEN=m -CONFIG_HAMRADIO=y - -# -# Packet Radio protocols -# -CONFIG_AX25=m -CONFIG_AX25_DAMA_SLAVE=y -CONFIG_NETROM=m -CONFIG_ROSE=m - -# -# AX.25 network device drivers -# -CONFIG_MKISS=m -CONFIG_6PACK=m -CONFIG_BPQETHER=m -CONFIG_SCC=m -CONFIG_SCC_DELAY=y -CONFIG_SCC_TRXECHO=y -CONFIG_BAYCOM_SER_FDX=m -CONFIG_BAYCOM_SER_HDX=m -CONFIG_BAYCOM_PAR=m -CONFIG_BAYCOM_EPP=m -CONFIG_YAM=m -CONFIG_IRDA=m - -# -# IrDA protocols -# -CONFIG_IRLAN=m -CONFIG_IRNET=m -CONFIG_IRCOMM=m -CONFIG_IRDA_ULTRA=y - -# -# IrDA options -# -CONFIG_IRDA_CACHE_LAST_LSAP=y -# CONFIG_IRDA_FAST_RR is not set -# CONFIG_IRDA_DEBUG is not set - -# -# Infrared-port device drivers -# - -# -# SIR device drivers -# -CONFIG_IRTTY_SIR=m - -# -# Dongle support -# -CONFIG_DONGLE=y -CONFIG_ESI_DONGLE=m -CONFIG_ACTISYS_DONGLE=m -CONFIG_TEKRAM_DONGLE=m -# CONFIG_TOIM3232_DONGLE is not set -CONFIG_LITELINK_DONGLE=m -CONFIG_MA600_DONGLE=m -CONFIG_GIRBIL_DONGLE=m -CONFIG_MCP2120_DONGLE=m -CONFIG_OLD_BELKIN_DONGLE=m -CONFIG_ACT200L_DONGLE=m -CONFIG_KINGSUN_DONGLE=m - -# -# Old SIR device drivers -# - -# -# Old Serial dongle support -# - -# -# FIR device drivers -# -CONFIG_USB_IRDA=m -CONFIG_SIGMATEL_FIR=m -CONFIG_NSC_FIR=m -CONFIG_WINBOND_FIR=m -CONFIG_TOSHIBA_FIR=m -CONFIG_SMC_IRCC_FIR=m -CONFIG_ALI_FIR=m -CONFIG_VLSI_FIR=m -CONFIG_VIA_FIR=m -CONFIG_MCS_FIR=m -CONFIG_BT=m -CONFIG_BT_L2CAP=m -CONFIG_BT_SCO=m -CONFIG_BT_RFCOMM=m -CONFIG_BT_RFCOMM_TTY=y -CONFIG_BT_BNEP=m -CONFIG_BT_BNEP_MC_FILTER=y -CONFIG_BT_BNEP_PROTO_FILTER=y -CONFIG_BT_CMTP=m -CONFIG_BT_HIDP=m - -# -# Bluetooth device drivers -# -CONFIG_BT_HCIUSB=m -CONFIG_BT_HCIUSB_SCO=y -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m -CONFIG_BT_HCIBFUSB=m -CONFIG_BT_HCIDTL1=m -CONFIG_BT_HCIBT3C=m -CONFIG_BT_HCIBLUECARD=m -CONFIG_BT_HCIBTUART=m -CONFIG_BT_HCIVHCI=m -CONFIG_AF_RXRPC=m -# CONFIG_AF_RXRPC_DEBUG is not set -CONFIG_RXKAD=m -CONFIG_FIB_RULES=y - -# -# Wireless -# -CONFIG_CFG80211=m -CONFIG_WIRELESS_EXT=y -CONFIG_MAC80211=m -CONFIG_MAC80211_LEDS=y -# CONFIG_MAC80211_DEBUGFS is not set -# CONFIG_MAC80211_DEBUG is not set -CONFIG_IEEE80211=m -# CONFIG_IEEE80211_DEBUG is not set -CONFIG_IEEE80211_CRYPT_WEP=m -CONFIG_IEEE80211_CRYPT_CCMP=m -CONFIG_IEEE80211_CRYPT_TKIP=m -CONFIG_IEEE80211_SOFTMAC=m -# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set -CONFIG_RFKILL=m -CONFIG_RFKILL_INPUT=m -CONFIG_NET_9P=m -# CONFIG_NET_9P_DEBUG is not set - -# -# Device Drivers -# - -# -# Generic Driver Options -# -# CONFIG_STANDALONE is not set -CONFIG_PREVENT_FIRMWARE_BUILD=y -CONFIG_FW_LOADER=m -# CONFIG_DEBUG_DRIVER is not set -# CONFIG_DEBUG_DEVRES is not set -# CONFIG_SYS_HYPERVISOR is not set -CONFIG_CONNECTOR=m -CONFIG_MTD=m -# CONFIG_MTD_DEBUG is not set -CONFIG_MTD_CONCAT=m -CONFIG_MTD_PARTITIONS=y -CONFIG_MTD_REDBOOT_PARTS=m -CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 -# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set -# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set - -# -# User Modules And Translation Layers -# -CONFIG_MTD_CHAR=m -CONFIG_MTD_BLKDEVS=m -CONFIG_MTD_BLOCK=m -# CONFIG_MTD_BLOCK_RO is not set -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -# CONFIG_INFTL is not set -# CONFIG_RFD_FTL is not set -# CONFIG_SSFDC is not set - -# -# RAM/ROM/Flash chip drivers -# -CONFIG_MTD_CFI=m -CONFIG_MTD_JEDECPROBE=m -CONFIG_MTD_GEN_PROBE=m -CONFIG_MTD_CFI_ADV_OPTIONS=y -CONFIG_MTD_CFI_NOSWAP=y -# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set -# CONFIG_MTD_CFI_GEOMETRY is not set -CONFIG_MTD_MAP_BANK_WIDTH_1=y -CONFIG_MTD_MAP_BANK_WIDTH_2=y -CONFIG_MTD_MAP_BANK_WIDTH_4=y -# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set -# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set -CONFIG_MTD_CFI_I1=y -CONFIG_MTD_CFI_I2=y -# CONFIG_MTD_CFI_I4 is not set -# CONFIG_MTD_CFI_I8 is not set -# CONFIG_MTD_OTP is not set -CONFIG_MTD_CFI_INTELEXT=m -CONFIG_MTD_CFI_AMDSTD=m -CONFIG_MTD_CFI_STAA=m -CONFIG_MTD_CFI_UTIL=m -# CONFIG_MTD_RAM is not set -# CONFIG_MTD_ROM is not set -CONFIG_MTD_ABSENT=m - -# -# Mapping drivers for chip access -# -CONFIG_MTD_COMPLEX_MAPPINGS=y -CONFIG_MTD_PHYSMAP=m -CONFIG_MTD_PHYSMAP_START=0x8000000 -CONFIG_MTD_PHYSMAP_LEN=0x4000000 -CONFIG_MTD_PHYSMAP_BANKWIDTH=2 -CONFIG_MTD_PNC2000=m -CONFIG_MTD_SC520CDP=m -CONFIG_MTD_NETSC520=m -CONFIG_MTD_TS5500=m -CONFIG_MTD_SBC_GXX=m -CONFIG_MTD_SCx200_DOCFLASH=m -CONFIG_MTD_AMD76XROM=m -CONFIG_MTD_ICHXROM=m -CONFIG_MTD_ESB2ROM=m -CONFIG_MTD_CK804XROM=m -CONFIG_MTD_SCB2_FLASH=m -CONFIG_MTD_NETtel=m -CONFIG_MTD_DILNETPC=m -CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000 -CONFIG_MTD_L440GX=m -CONFIG_MTD_PCI=m -# CONFIG_MTD_PLATRAM is not set - -# -# Self-contained MTD device drivers -# -CONFIG_MTD_PMC551=m -CONFIG_MTD_PMC551_BUGFIX=y -# CONFIG_MTD_PMC551_DEBUG is not set -CONFIG_MTD_DATAFLASH=m -CONFIG_MTD_M25P80=m -CONFIG_MTD_SLRAM=m -CONFIG_MTD_PHRAM=m -CONFIG_MTD_MTDRAM=m -CONFIG_MTDRAM_TOTAL_SIZE=4096 -CONFIG_MTDRAM_ERASE_SIZE=128 -CONFIG_MTD_BLOCK2MTD=m - -# -# Disk-On-Chip Device Drivers -# -CONFIG_MTD_DOC2000=m -CONFIG_MTD_DOC2001=m -CONFIG_MTD_DOC2001PLUS=m -CONFIG_MTD_DOCPROBE=m -CONFIG_MTD_DOCECC=m -CONFIG_MTD_DOCPROBE_ADVANCED=y -CONFIG_MTD_DOCPROBE_ADDRESS=0x0000 -CONFIG_MTD_DOCPROBE_HIGH=y -CONFIG_MTD_DOCPROBE_55AA=y -CONFIG_MTD_NAND=m -# CONFIG_MTD_NAND_VERIFY_WRITE is not set -# CONFIG_MTD_NAND_ECC_SMC is not set -# CONFIG_MTD_NAND_MUSEUM_IDS is not set -CONFIG_MTD_NAND_IDS=m -CONFIG_MTD_NAND_DISKONCHIP=m -# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set -CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 -CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y -CONFIG_MTD_NAND_CAFE=m -# CONFIG_MTD_NAND_CS553X is not set -CONFIG_MTD_NAND_NANDSIM=m -CONFIG_MTD_NAND_PLATFORM=m -# CONFIG_MTD_ONENAND is not set - -# -# UBI - Unsorted block images -# -CONFIG_MTD_UBI=m -CONFIG_MTD_UBI_WL_THRESHOLD=4096 -CONFIG_MTD_UBI_BEB_RESERVE=1 -# CONFIG_MTD_UBI_GLUEBI is not set - -# -# UBI debugging options -# -# CONFIG_MTD_UBI_DEBUG is not set -CONFIG_PARPORT=m -CONFIG_PARPORT_PC=m -CONFIG_PARPORT_SERIAL=m -CONFIG_PARPORT_PC_FIFO=y -CONFIG_PARPORT_PC_SUPERIO=y -CONFIG_PARPORT_PC_PCMCIA=m -# CONFIG_PARPORT_GSC is not set -# CONFIG_PARPORT_AX88796 is not set -CONFIG_PARPORT_1284=y -CONFIG_PARPORT_NOT_PC=y -CONFIG_PNP=y -# CONFIG_PNP_DEBUG is not set - -# -# Protocols -# -CONFIG_ISAPNP=y -# CONFIG_PNPBIOS is not set -CONFIG_PNPACPI=y -CONFIG_BLK_DEV=y -CONFIG_BLK_DEV_FD=y -CONFIG_BLK_DEV_XD=m -CONFIG_PARIDE=m - -# -# Parallel IDE high-level drivers -# -CONFIG_PARIDE_PD=m -CONFIG_PARIDE_PCD=m -CONFIG_PARIDE_PF=m -CONFIG_PARIDE_PT=m -CONFIG_PARIDE_PG=m - -# -# Parallel IDE protocol modules -# -CONFIG_PARIDE_ATEN=m -CONFIG_PARIDE_BPCK=m -CONFIG_PARIDE_BPCK6=m -CONFIG_PARIDE_COMM=m -CONFIG_PARIDE_DSTR=m -CONFIG_PARIDE_FIT2=m -CONFIG_PARIDE_FIT3=m -CONFIG_PARIDE_EPAT=m -CONFIG_PARIDE_EPATC8=y -CONFIG_PARIDE_EPIA=m -CONFIG_PARIDE_FRIQ=m -CONFIG_PARIDE_FRPW=m -CONFIG_PARIDE_KBIC=m -CONFIG_PARIDE_KTTI=m -CONFIG_PARIDE_ON20=m -CONFIG_PARIDE_ON26=m -CONFIG_BLK_CPQ_DA=m -CONFIG_BLK_CPQ_CISS_DA=m -CONFIG_CISS_SCSI_TAPE=y -CONFIG_BLK_DEV_DAC960=m -CONFIG_BLK_DEV_UMEM=m -# CONFIG_BLK_DEV_COW_COMMON is not set -CONFIG_BLK_DEV_LOOP=y -CONFIG_BLK_DEV_CRYPTOLOOP=m -CONFIG_BLK_DEV_NBD=m -CONFIG_BLK_DEV_SX8=m -# CONFIG_BLK_DEV_UB is not set -CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_COUNT=16 -CONFIG_BLK_DEV_RAM_SIZE=64000 -CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 -CONFIG_CDROM_PKTCDVD=m -CONFIG_CDROM_PKTCDVD_BUFFERS=8 -CONFIG_CDROM_PKTCDVD_WCACHE=y -CONFIG_ATA_OVER_ETH=m -CONFIG_XEN_BLKDEV_FRONTEND=m -CONFIG_MISC_DEVICES=y -CONFIG_IBM_ASM=m -CONFIG_PHANTOM=m -CONFIG_EEPROM_93CX6=m -# CONFIG_SGI_IOC4 is not set -CONFIG_TIFM_CORE=m -CONFIG_TIFM_7XX1=m -CONFIG_ASUS_LAPTOP=m -CONFIG_MSI_LAPTOP=m -CONFIG_SONY_LAPTOP=m -CONFIG_SONYPI_COMPAT=y -CONFIG_THINKPAD_ACPI=m -# CONFIG_THINKPAD_ACPI_DEBUG is not set -CONFIG_THINKPAD_ACPI_BAY=y -CONFIG_IDE=m -CONFIG_BLK_DEV_IDE=m - -# -# Please see Documentation/ide.txt for help/info on IDE drives -# -# CONFIG_BLK_DEV_IDE_SATA is not set -# CONFIG_BLK_DEV_HD_IDE is not set -CONFIG_BLK_DEV_IDEDISK=m -CONFIG_IDEDISK_MULTI_MODE=y -CONFIG_BLK_DEV_IDECS=m -CONFIG_BLK_DEV_DELKIN=m -CONFIG_BLK_DEV_IDECD=m -CONFIG_BLK_DEV_IDETAPE=m -CONFIG_BLK_DEV_IDEFLOPPY=m -CONFIG_BLK_DEV_IDESCSI=m -CONFIG_BLK_DEV_IDEACPI=y -# CONFIG_IDE_TASK_IOCTL is not set -CONFIG_IDE_PROC_FS=y - -# -# IDE chipset support/bugfixes -# -CONFIG_IDE_GENERIC=m -CONFIG_BLK_DEV_CMD640=y -CONFIG_BLK_DEV_CMD640_ENHANCED=y -CONFIG_BLK_DEV_IDEPNP=y -CONFIG_BLK_DEV_IDEPCI=y -CONFIG_IDEPCI_SHARE_IRQ=y -# CONFIG_IDEPCI_PCIBUS_ORDER is not set -CONFIG_BLK_DEV_OFFBOARD=y -CONFIG_BLK_DEV_GENERIC=m -CONFIG_BLK_DEV_OPTI621=m -CONFIG_BLK_DEV_RZ1000=m -CONFIG_BLK_DEV_IDEDMA_PCI=y -# CONFIG_BLK_DEV_IDEDMA_FORCED is not set -# CONFIG_IDEDMA_ONLYDISK is not set -CONFIG_BLK_DEV_AEC62XX=m -CONFIG_BLK_DEV_ALI15X3=m -# CONFIG_WDC_ALI15X3 is not set -CONFIG_BLK_DEV_AMD74XX=m -CONFIG_BLK_DEV_ATIIXP=m -CONFIG_BLK_DEV_CMD64X=m -CONFIG_BLK_DEV_TRIFLEX=m -CONFIG_BLK_DEV_CY82C693=m -CONFIG_BLK_DEV_CS5520=m -CONFIG_BLK_DEV_CS5530=m -CONFIG_BLK_DEV_CS5535=m -CONFIG_BLK_DEV_HPT34X=m -CONFIG_HPT34X_AUTODMA=y -CONFIG_BLK_DEV_HPT366=m -CONFIG_BLK_DEV_JMICRON=m -CONFIG_BLK_DEV_SC1200=m -CONFIG_BLK_DEV_PIIX=m -CONFIG_BLK_DEV_IT8213=m -CONFIG_BLK_DEV_IT821X=m -CONFIG_BLK_DEV_NS87415=m -CONFIG_BLK_DEV_PDC202XX_OLD=m -CONFIG_PDC202XX_BURST=y -CONFIG_BLK_DEV_PDC202XX_NEW=m -CONFIG_BLK_DEV_SVWKS=m -CONFIG_BLK_DEV_SIIMAGE=m -CONFIG_BLK_DEV_SIS5513=m -CONFIG_BLK_DEV_SLC90E66=m -CONFIG_BLK_DEV_TRM290=m -CONFIG_BLK_DEV_VIA82CXXX=m -CONFIG_BLK_DEV_TC86C001=m -# CONFIG_IDE_ARM is not set -CONFIG_IDE_CHIPSETS=y - -# -# Note: most of these also require special kernel boot parameters -# -CONFIG_BLK_DEV_4DRIVES=y -CONFIG_BLK_DEV_ALI14XX=m -CONFIG_BLK_DEV_DTC2278=m -CONFIG_BLK_DEV_HT6560B=m -CONFIG_BLK_DEV_QD65XX=m -CONFIG_BLK_DEV_UMC8672=m -CONFIG_BLK_DEV_IDEDMA=y -# CONFIG_IDEDMA_IVB is not set -# CONFIG_BLK_DEV_HD is not set - -# -# SCSI device support -# -# CONFIG_RAID_ATTRS is not set -CONFIG_SCSI=m -CONFIG_SCSI_DMA=y -CONFIG_SCSI_TGT=m -CONFIG_SCSI_NETLINK=y -CONFIG_SCSI_PROC_FS=y - -# -# SCSI support type (disk, tape, CD-ROM) -# -CONFIG_BLK_DEV_SD=m -CONFIG_CHR_DEV_ST=m -CONFIG_CHR_DEV_OSST=m -CONFIG_BLK_DEV_SR=m -# CONFIG_BLK_DEV_SR_VENDOR is not set -CONFIG_CHR_DEV_SG=m -CONFIG_CHR_DEV_SCH=m - -# -# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -# -CONFIG_SCSI_MULTI_LUN=y -CONFIG_SCSI_CONSTANTS=y -CONFIG_SCSI_LOGGING=y -# CONFIG_SCSI_SCAN_ASYNC is not set -CONFIG_SCSI_WAIT_SCAN=m - -# -# SCSI Transports -# -CONFIG_SCSI_SPI_ATTRS=m -CONFIG_SCSI_FC_ATTRS=m -CONFIG_SCSI_ISCSI_ATTRS=m -CONFIG_SCSI_SAS_ATTRS=m -CONFIG_SCSI_SAS_LIBSAS=m -# CONFIG_SCSI_SAS_ATA is not set -# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set -CONFIG_SCSI_LOWLEVEL=y -CONFIG_ISCSI_TCP=m -CONFIG_BLK_DEV_3W_XXXX_RAID=m -CONFIG_SCSI_3W_9XXX=m -CONFIG_SCSI_7000FASST=m -CONFIG_SCSI_ACARD=m -CONFIG_SCSI_AHA152X=m -CONFIG_SCSI_AHA1542=m -CONFIG_SCSI_AACRAID=m -CONFIG_SCSI_AIC7XXX=m -CONFIG_AIC7XXX_CMDS_PER_DEVICE=32 -CONFIG_AIC7XXX_RESET_DELAY_MS=5000 -# CONFIG_AIC7XXX_DEBUG_ENABLE is not set -CONFIG_AIC7XXX_DEBUG_MASK=0 -CONFIG_AIC7XXX_REG_PRETTY_PRINT=y -CONFIG_SCSI_AIC7XXX_OLD=m -CONFIG_SCSI_AIC79XX=m -CONFIG_AIC79XX_CMDS_PER_DEVICE=32 -CONFIG_AIC79XX_RESET_DELAY_MS=15000 -# CONFIG_AIC79XX_DEBUG_ENABLE is not set -CONFIG_AIC79XX_DEBUG_MASK=0 -CONFIG_AIC79XX_REG_PRETTY_PRINT=y -CONFIG_SCSI_AIC94XX=m -# CONFIG_AIC94XX_DEBUG is not set -CONFIG_SCSI_DPT_I2O=m -CONFIG_SCSI_ADVANSYS=m -CONFIG_SCSI_IN2000=m -CONFIG_SCSI_ARCMSR=m -CONFIG_MEGARAID_NEWGEN=y -CONFIG_MEGARAID_MM=m -CONFIG_MEGARAID_MAILBOX=m -CONFIG_MEGARAID_LEGACY=m -CONFIG_MEGARAID_SAS=m -CONFIG_SCSI_HPTIOP=m -CONFIG_SCSI_BUSLOGIC=m -# CONFIG_SCSI_OMIT_FLASHPOINT is not set -CONFIG_SCSI_DMX3191D=m -CONFIG_SCSI_DTC3280=m -CONFIG_SCSI_EATA=m -CONFIG_SCSI_EATA_TAGGED_QUEUE=y -CONFIG_SCSI_EATA_LINKED_COMMANDS=y -CONFIG_SCSI_EATA_MAX_TAGS=16 -CONFIG_SCSI_FUTURE_DOMAIN=m -CONFIG_SCSI_GDTH=m -CONFIG_SCSI_GENERIC_NCR5380=m -CONFIG_SCSI_GENERIC_NCR5380_MMIO=m -CONFIG_SCSI_GENERIC_NCR53C400=y -CONFIG_SCSI_IPS=m -CONFIG_SCSI_INITIO=m -CONFIG_SCSI_INIA100=m -CONFIG_SCSI_PPA=m -CONFIG_SCSI_IMM=m -# CONFIG_SCSI_IZIP_EPP16 is not set -# CONFIG_SCSI_IZIP_SLOW_CTR is not set -CONFIG_SCSI_NCR53C406A=m -CONFIG_SCSI_STEX=m -CONFIG_SCSI_SYM53C8XX_2=m -CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1 -CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16 -CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64 -CONFIG_SCSI_SYM53C8XX_MMIO=y -CONFIG_SCSI_IPR=m -# CONFIG_SCSI_IPR_TRACE is not set -# CONFIG_SCSI_IPR_DUMP is not set -CONFIG_SCSI_PAS16=m -CONFIG_SCSI_PSI240I=m -CONFIG_SCSI_QLOGIC_FAS=m -CONFIG_SCSI_QLOGIC_1280=m -CONFIG_SCSI_QLA_FC=m -CONFIG_SCSI_QLA_ISCSI=m -CONFIG_SCSI_LPFC=m -CONFIG_SCSI_SEAGATE=m -CONFIG_SCSI_SYM53C416=m -CONFIG_SCSI_DC395x=m -CONFIG_SCSI_DC390T=m -CONFIG_SCSI_T128=m -CONFIG_SCSI_U14_34F=m -CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y -CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y -CONFIG_SCSI_U14_34F_MAX_TAGS=8 -CONFIG_SCSI_ULTRASTOR=m -CONFIG_SCSI_NSP32=m -CONFIG_SCSI_DEBUG=m -CONFIG_SCSI_SRP=m -CONFIG_SCSI_LOWLEVEL_PCMCIA=y -CONFIG_PCMCIA_AHA152X=m -CONFIG_PCMCIA_FDOMAIN=m -CONFIG_PCMCIA_NINJA_SCSI=m -CONFIG_PCMCIA_QLOGIC=m -CONFIG_PCMCIA_SYM53C500=m -CONFIG_ATA=m -# CONFIG_ATA_NONSTANDARD is not set -CONFIG_ATA_ACPI=y -CONFIG_SATA_AHCI=m -CONFIG_SATA_SVW=m -CONFIG_ATA_PIIX=m -# CONFIG_SATA_MV is not set -CONFIG_SATA_NV=m -CONFIG_PDC_ADMA=m -CONFIG_SATA_QSTOR=m -CONFIG_SATA_PROMISE=m -CONFIG_SATA_SX4=m -CONFIG_SATA_SIL=m -CONFIG_SATA_SIL24=m -CONFIG_SATA_SIS=m -CONFIG_SATA_ULI=m -CONFIG_SATA_VIA=m -CONFIG_SATA_VITESSE=m -CONFIG_SATA_INIC162X=m -CONFIG_PATA_ALI=m -CONFIG_PATA_AMD=m -CONFIG_PATA_ARTOP=m -CONFIG_PATA_ATIIXP=m -# CONFIG_PATA_CMD640_PCI is not set -# CONFIG_PATA_CMD64X is not set -CONFIG_PATA_CS5520=m -CONFIG_PATA_CS5530=m -CONFIG_PATA_CS5535=m -# CONFIG_PATA_CYPRESS is not set -CONFIG_PATA_EFAR=m -CONFIG_ATA_GENERIC=m -CONFIG_PATA_HPT366=m -CONFIG_PATA_HPT37X=m -CONFIG_PATA_HPT3X2N=m -CONFIG_PATA_HPT3X3=m -# CONFIG_PATA_HPT3X3_DMA is not set -# CONFIG_PATA_ISAPNP is not set -CONFIG_PATA_IT821X=m -CONFIG_PATA_IT8213=m -CONFIG_PATA_JMICRON=m -# CONFIG_PATA_LEGACY is not set -CONFIG_PATA_TRIFLEX=m -CONFIG_PATA_MARVELL=m -CONFIG_PATA_MPIIX=m -CONFIG_PATA_OLDPIIX=m -CONFIG_PATA_NETCELL=m -CONFIG_PATA_NS87410=m -# CONFIG_PATA_OPTI is not set -# CONFIG_PATA_OPTIDMA is not set -CONFIG_PATA_PCMCIA=m -# CONFIG_PATA_PDC_OLD is not set -CONFIG_PATA_QDI=m -# CONFIG_PATA_RADISYS is not set -CONFIG_PATA_RZ1000=m -CONFIG_PATA_SC1200=m -CONFIG_PATA_SERVERWORKS=m -CONFIG_PATA_PDC2027X=m -CONFIG_PATA_SIL680=m -CONFIG_PATA_SIS=m -CONFIG_PATA_VIA=m -CONFIG_PATA_WINBOND=m -CONFIG_PATA_WINBOND_VLB=m -CONFIG_MD=y -CONFIG_BLK_DEV_MD=y -CONFIG_MD_LINEAR=m -CONFIG_MD_RAID0=m -CONFIG_MD_RAID1=m -CONFIG_MD_RAID10=m -CONFIG_MD_RAID456=m -# CONFIG_MD_RAID5_RESHAPE is not set -CONFIG_MD_MULTIPATH=m -CONFIG_MD_FAULTY=m -CONFIG_BLK_DEV_DM=m -# CONFIG_DM_DEBUG is not set -CONFIG_DM_CRYPT=m -CONFIG_DM_SNAPSHOT=m -CONFIG_DM_MIRROR=m -CONFIG_DM_ZERO=m -CONFIG_DM_MULTIPATH=m -CONFIG_DM_MULTIPATH_EMC=m -CONFIG_DM_MULTIPATH_RDAC=m -# CONFIG_DM_DELAY is not set - -# -# Fusion MPT device support -# -CONFIG_FUSION=y -CONFIG_FUSION_SPI=m -CONFIG_FUSION_FC=m -CONFIG_FUSION_SAS=m -CONFIG_FUSION_MAX_SGE=128 -CONFIG_FUSION_CTL=m -CONFIG_FUSION_LAN=m -# CONFIG_FUSION_LOGGING is not set - -# -# IEEE 1394 (FireWire) support -# -# CONFIG_FIREWIRE is not set -CONFIG_IEEE1394=m - -# -# Subsystem Options -# -# CONFIG_IEEE1394_VERBOSEDEBUG is not set - -# -# Controllers -# -CONFIG_IEEE1394_PCILYNX=m -CONFIG_IEEE1394_OHCI1394=m - -# -# Protocols -# -CONFIG_IEEE1394_VIDEO1394=m -CONFIG_IEEE1394_SBP2=m -# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set -CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y -CONFIG_IEEE1394_ETH1394=m -CONFIG_IEEE1394_DV1394=m -CONFIG_IEEE1394_RAWIO=m -CONFIG_I2O=m -CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y -CONFIG_I2O_EXT_ADAPTEC=y -CONFIG_I2O_CONFIG=m -CONFIG_I2O_CONFIG_OLD_IOCTL=y -CONFIG_I2O_BUS=m -CONFIG_I2O_BLOCK=m -CONFIG_I2O_SCSI=m -CONFIG_I2O_PROC=m -CONFIG_MACINTOSH_DRIVERS=y -CONFIG_MAC_EMUMOUSEBTN=y -CONFIG_NETDEVICES=y -# CONFIG_NETDEVICES_MULTIQUEUE is not set -# CONFIG_IFB is not set -CONFIG_DUMMY=m -CONFIG_BONDING=m -# CONFIG_MACVLAN is not set -CONFIG_EQUALIZER=m -CONFIG_TUN=m -CONFIG_NET_SB1000=m -CONFIG_ARCNET=m -CONFIG_ARCNET_1201=m -CONFIG_ARCNET_1051=m -CONFIG_ARCNET_RAW=m -CONFIG_ARCNET_CAP=m -CONFIG_ARCNET_COM90xx=m -CONFIG_ARCNET_COM90xxIO=m -CONFIG_ARCNET_RIM_I=m -# CONFIG_ARCNET_COM20020 is not set -CONFIG_PHYLIB=m - -# -# MII PHY device drivers -# -CONFIG_MARVELL_PHY=m -CONFIG_DAVICOM_PHY=m -CONFIG_QSEMI_PHY=m -CONFIG_LXT_PHY=m -CONFIG_CICADA_PHY=m -CONFIG_VITESSE_PHY=m -CONFIG_SMSC_PHY=m -CONFIG_BROADCOM_PHY=m -CONFIG_ICPLUS_PHY=m -CONFIG_FIXED_PHY=m -# CONFIG_FIXED_MII_10_FDX is not set -# CONFIG_FIXED_MII_100_FDX is not set -CONFIG_NET_ETHERNET=y -CONFIG_MII=m -CONFIG_HAPPYMEAL=m -CONFIG_SUNGEM=m -CONFIG_CASSINI=m -CONFIG_NET_VENDOR_3COM=y -CONFIG_EL1=m -CONFIG_EL2=m -CONFIG_ELPLUS=m -CONFIG_EL16=m -CONFIG_EL3=m -CONFIG_3C515=m -CONFIG_VORTEX=m -CONFIG_TYPHOON=m -CONFIG_LANCE=m -CONFIG_NET_VENDOR_SMC=y -CONFIG_WD80x3=m -CONFIG_ULTRA=m -CONFIG_SMC9194=m -CONFIG_NET_VENDOR_RACAL=y -CONFIG_NI52=m -CONFIG_NI65=m -CONFIG_NET_TULIP=y -CONFIG_DE2104X=m -CONFIG_TULIP=m -# CONFIG_TULIP_MWI is not set -# CONFIG_TULIP_MMIO is not set -CONFIG_TULIP_NAPI=y -CONFIG_TULIP_NAPI_HW_MITIGATION=y -CONFIG_DE4X5=m -CONFIG_WINBOND_840=m -CONFIG_DM9102=m -CONFIG_ULI526X=m -CONFIG_PCMCIA_XIRCOM=m -CONFIG_AT1700=m -CONFIG_DEPCA=m -CONFIG_HP100=m -CONFIG_NET_ISA=y -CONFIG_E2100=m -CONFIG_EWRK3=m -CONFIG_EEXPRESS=m -CONFIG_EEXPRESS_PRO=m -CONFIG_HPLAN_PLUS=m -CONFIG_HPLAN=m -CONFIG_LP486E=m -CONFIG_ETH16I=m -CONFIG_NE2000=m -CONFIG_ZNET=m -CONFIG_SEEQ8005=m -CONFIG_NET_PCI=y -CONFIG_PCNET32=m -# CONFIG_PCNET32_NAPI is not set -CONFIG_AMD8111_ETH=m -# CONFIG_AMD8111E_NAPI is not set -CONFIG_ADAPTEC_STARFIRE=m -CONFIG_ADAPTEC_STARFIRE_NAPI=y -CONFIG_AC3200=m -CONFIG_APRICOT=m -CONFIG_B44=m -CONFIG_FORCEDETH=m -# CONFIG_FORCEDETH_NAPI is not set -CONFIG_CS89x0=m -CONFIG_DGRS=m -CONFIG_EEPRO100=m -CONFIG_E100=m -CONFIG_FEALNX=m -CONFIG_NATSEMI=m -CONFIG_NE2K_PCI=m -CONFIG_8139CP=m -CONFIG_8139TOO=m -# CONFIG_8139TOO_PIO is not set -# CONFIG_8139TOO_TUNE_TWISTER is not set -CONFIG_8139TOO_8129=y -# CONFIG_8139_OLD_RX_RESET is not set -CONFIG_SIS900=m -CONFIG_EPIC100=m -CONFIG_SUNDANCE=m -# CONFIG_SUNDANCE_MMIO is not set -CONFIG_TLAN=m -CONFIG_VIA_RHINE=m -# CONFIG_VIA_RHINE_MMIO is not set -# CONFIG_VIA_RHINE_NAPI is not set -CONFIG_SC92031=m -CONFIG_NET_POCKET=y -CONFIG_ATP=m -CONFIG_DE600=m -CONFIG_DE620=m -CONFIG_NETDEV_1000=y -CONFIG_ACENIC=m -# CONFIG_ACENIC_OMIT_TIGON_I is not set -CONFIG_DL2K=m -CONFIG_E1000=m -CONFIG_E1000_NAPI=y -# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set -CONFIG_NS83820=m -CONFIG_HAMACHI=m -CONFIG_YELLOWFIN=m -CONFIG_R8169=m -# CONFIG_R8169_NAPI is not set -CONFIG_R8169_VLAN=y -CONFIG_SIS190=m -CONFIG_SKGE=m -# CONFIG_SKY2 is not set -CONFIG_SK98LIN=m -CONFIG_VIA_VELOCITY=m -CONFIG_TIGON3=m -CONFIG_BNX2=m -CONFIG_QLA3XXX=m -CONFIG_ATL1=m -CONFIG_NETDEV_10000=y -CONFIG_CHELSIO_T1=m -CONFIG_CHELSIO_T1_1G=y -CONFIG_CHELSIO_T1_NAPI=y -CONFIG_CHELSIO_T3=m -CONFIG_IXGB=m -CONFIG_IXGB_NAPI=y -CONFIG_S2IO=m -CONFIG_S2IO_NAPI=y -CONFIG_MYRI10GE=m -CONFIG_NETXEN_NIC=m -CONFIG_MLX4_CORE=m -CONFIG_MLX4_DEBUG=y -CONFIG_TR=y -CONFIG_IBMTR=m -CONFIG_IBMOL=m -CONFIG_IBMLS=m -CONFIG_3C359=m -CONFIG_TMS380TR=m -CONFIG_TMSPCI=m -CONFIG_SKISA=m -CONFIG_PROTEON=m -CONFIG_ABYSS=m -CONFIG_SMCTR=m - -# -# Wireless LAN -# -# CONFIG_WLAN_PRE80211 is not set -CONFIG_WLAN_80211=y -CONFIG_PCMCIA_RAYCS=m -CONFIG_IPW2100=m -CONFIG_IPW2100_MONITOR=y -# CONFIG_IPW2100_DEBUG is not set -CONFIG_IPW2200=m -CONFIG_IPW2200_MONITOR=y -CONFIG_IPW2200_RADIOTAP=y -CONFIG_IPW2200_PROMISCUOUS=y -CONFIG_IPW2200_QOS=y -# CONFIG_IPW2200_DEBUG is not set -CONFIG_LIBERTAS=m -CONFIG_LIBERTAS_USB=m -# CONFIG_LIBERTAS_DEBUG is not set -CONFIG_AIRO=m -CONFIG_HERMES=m -CONFIG_PLX_HERMES=m -CONFIG_TMD_HERMES=m -CONFIG_NORTEL_HERMES=m -CONFIG_PCI_HERMES=m -CONFIG_ATMEL=m -CONFIG_PCI_ATMEL=m -CONFIG_PCMCIA_HERMES=m -CONFIG_PCMCIA_SPECTRUM=m -CONFIG_AIRO_CS=m -CONFIG_PCMCIA_ATMEL=m -CONFIG_PCMCIA_WL3501=m -CONFIG_PRISM54=m -CONFIG_USB_ZD1201=m -CONFIG_RTL8187=m -CONFIG_HOSTAP=m -CONFIG_HOSTAP_FIRMWARE=y -CONFIG_HOSTAP_FIRMWARE_NVRAM=y -CONFIG_HOSTAP_PLX=m -CONFIG_HOSTAP_PCI=m -CONFIG_HOSTAP_CS=m -CONFIG_BCM43XX=m -CONFIG_BCM43XX_DEBUG=y -CONFIG_BCM43XX_DMA=y -CONFIG_BCM43XX_PIO=y -CONFIG_BCM43XX_DMA_AND_PIO_MODE=y -# CONFIG_BCM43XX_DMA_MODE is not set -# CONFIG_BCM43XX_PIO_MODE is not set -CONFIG_ZD1211RW=m -# CONFIG_ZD1211RW_DEBUG is not set - -# -# USB Network Adapters -# -CONFIG_USB_CATC=m -CONFIG_USB_KAWETH=m -CONFIG_USB_PEGASUS=m -CONFIG_USB_RTL8150=m -CONFIG_USB_USBNET_MII=m -CONFIG_USB_USBNET=m -CONFIG_USB_NET_AX8817X=m -CONFIG_USB_NET_CDCETHER=m -CONFIG_USB_NET_DM9601=m -CONFIG_USB_NET_GL620A=m -CONFIG_USB_NET_NET1080=m -CONFIG_USB_NET_PLUSB=m -CONFIG_USB_NET_MCS7830=m -CONFIG_USB_NET_RNDIS_HOST=m -CONFIG_USB_NET_CDC_SUBSET=m -CONFIG_USB_ALI_M5632=y -CONFIG_USB_AN2720=y -CONFIG_USB_BELKIN=y -CONFIG_USB_ARMLINUX=y -# CONFIG_USB_EPSON2888 is not set -# CONFIG_USB_KC2190 is not set -CONFIG_USB_NET_ZAURUS=m -CONFIG_NET_PCMCIA=y -CONFIG_PCMCIA_3C589=m -CONFIG_PCMCIA_3C574=m -CONFIG_PCMCIA_FMVJ18X=m -CONFIG_PCMCIA_PCNET=m -CONFIG_PCMCIA_NMCLAN=m -CONFIG_PCMCIA_SMC91C92=m -CONFIG_PCMCIA_XIRC2PS=m -CONFIG_PCMCIA_AXNET=m -CONFIG_PCMCIA_IBMTR=m -CONFIG_WAN=y -CONFIG_HOSTESS_SV11=m -# CONFIG_COSA is not set -CONFIG_LANMEDIA=m -CONFIG_SEALEVEL_4021=m -CONFIG_HDLC=m -CONFIG_HDLC_RAW=m -CONFIG_HDLC_RAW_ETH=m -CONFIG_HDLC_CISCO=m -CONFIG_HDLC_FR=m -CONFIG_HDLC_PPP=m -CONFIG_HDLC_X25=m -CONFIG_PCI200SYN=m -CONFIG_WANXL=m -# CONFIG_PC300 is not set -# CONFIG_PC300TOO is not set -CONFIG_N2=m -CONFIG_C101=m -CONFIG_FARSYNC=m -# CONFIG_DSCC4 is not set -CONFIG_DLCI=m -CONFIG_DLCI_MAX=8 -CONFIG_SDLA=m -# CONFIG_WAN_ROUTER_DRIVERS is not set -CONFIG_LAPBETHER=m -CONFIG_X25_ASY=m -# CONFIG_SBNI is not set -CONFIG_ATM_DRIVERS=y -# CONFIG_ATM_DUMMY is not set -CONFIG_ATM_TCP=m -CONFIG_ATM_LANAI=m -CONFIG_ATM_ENI=m -# CONFIG_ATM_ENI_DEBUG is not set -# CONFIG_ATM_ENI_TUNE_BURST is not set -CONFIG_ATM_FIRESTREAM=m -CONFIG_ATM_ZATM=m -# CONFIG_ATM_ZATM_DEBUG is not set -CONFIG_ATM_NICSTAR=m -CONFIG_ATM_NICSTAR_USE_SUNI=y -CONFIG_ATM_NICSTAR_USE_IDT77105=y -CONFIG_ATM_IDT77252=m -# CONFIG_ATM_IDT77252_DEBUG is not set -CONFIG_ATM_IDT77252_RCV_ALL=y -CONFIG_ATM_IDT77252_USE_SUNI=y -# CONFIG_ATM_AMBASSADOR is not set -CONFIG_ATM_HORIZON=m -# CONFIG_ATM_HORIZON_DEBUG is not set -CONFIG_ATM_IA=m -# CONFIG_ATM_IA_DEBUG is not set -CONFIG_ATM_FORE200E_MAYBE=m -CONFIG_ATM_FORE200E_PCA=y -CONFIG_ATM_FORE200E_PCA_DEFAULT_FW=y -CONFIG_ATM_FORE200E_USE_TASKLET=y -CONFIG_ATM_FORE200E_TX_RETRY=16 -CONFIG_ATM_FORE200E_DEBUG=0 -CONFIG_ATM_FORE200E=m -CONFIG_ATM_HE=m -CONFIG_ATM_HE_USE_SUNI=y -CONFIG_XEN_NETDEV_FRONTEND=m -CONFIG_FDDI=y -CONFIG_DEFXX=m -# CONFIG_DEFXX_MMIO is not set -CONFIG_SKFP=m -CONFIG_HIPPI=y -CONFIG_ROADRUNNER=m -CONFIG_ROADRUNNER_LARGE_RINGS=y -CONFIG_PLIP=m -CONFIG_PPP=m -CONFIG_PPP_MULTILINK=y -CONFIG_PPP_FILTER=y -CONFIG_PPP_ASYNC=m -CONFIG_PPP_SYNC_TTY=m -CONFIG_PPP_DEFLATE=m -CONFIG_PPP_BSDCOMP=m -CONFIG_PPP_MPPE=m -CONFIG_PPPOE=m -CONFIG_PPPOATM=m -# CONFIG_PPPOL2TP is not set -CONFIG_SLIP=m -CONFIG_SLIP_COMPRESSED=y -CONFIG_SLHC=m -CONFIG_SLIP_SMART=y -CONFIG_SLIP_MODE_SLIP6=y -CONFIG_NET_FC=y -CONFIG_SHAPER=m -CONFIG_NETCONSOLE=m -CONFIG_NETPOLL=y -CONFIG_NETPOLL_TRAP=y -CONFIG_NET_POLL_CONTROLLER=y -CONFIG_ISDN=m -CONFIG_ISDN_I4L=m -CONFIG_ISDN_PPP=y -CONFIG_ISDN_PPP_VJ=y -CONFIG_ISDN_MPP=y -CONFIG_IPPP_FILTER=y -CONFIG_ISDN_PPP_BSDCOMP=m -CONFIG_ISDN_AUDIO=y -CONFIG_ISDN_TTY_FAX=y -CONFIG_ISDN_X25=y - -# -# ISDN feature submodules -# -CONFIG_ISDN_DIVERSION=m - -# -# ISDN4Linux hardware drivers -# - -# -# Passive cards -# -CONFIG_ISDN_DRV_HISAX=m - -# -# D-channel protocol features -# -CONFIG_HISAX_EURO=y -CONFIG_DE_AOC=y -# CONFIG_HISAX_NO_SENDCOMPLETE is not set -# CONFIG_HISAX_NO_LLC is not set -# CONFIG_HISAX_NO_KEYPAD is not set -CONFIG_HISAX_1TR6=y -CONFIG_HISAX_NI1=y -CONFIG_HISAX_MAX_CARDS=8 - -# -# HiSax supported cards -# -CONFIG_HISAX_16_0=y -CONFIG_HISAX_16_3=y -CONFIG_HISAX_TELESPCI=y -CONFIG_HISAX_S0BOX=y -CONFIG_HISAX_AVM_A1=y -CONFIG_HISAX_FRITZPCI=y -CONFIG_HISAX_AVM_A1_PCMCIA=y -CONFIG_HISAX_ELSA=y -CONFIG_HISAX_IX1MICROR2=y -CONFIG_HISAX_DIEHLDIVA=y -CONFIG_HISAX_ASUSCOM=y -CONFIG_HISAX_TELEINT=y -CONFIG_HISAX_HFCS=y -CONFIG_HISAX_SEDLBAUER=y -CONFIG_HISAX_SPORTSTER=y -CONFIG_HISAX_MIC=y -CONFIG_HISAX_NETJET=y -CONFIG_HISAX_NETJET_U=y -CONFIG_HISAX_NICCY=y -CONFIG_HISAX_ISURF=y -CONFIG_HISAX_HSTSAPHIR=y -CONFIG_HISAX_BKM_A4T=y -CONFIG_HISAX_SCT_QUADRO=y -CONFIG_HISAX_GAZEL=y -CONFIG_HISAX_HFC_PCI=y -CONFIG_HISAX_W6692=y -CONFIG_HISAX_HFC_SX=y -CONFIG_HISAX_ENTERNOW_PCI=y -CONFIG_HISAX_DEBUG=y - -# -# HiSax PCMCIA card service modules -# -CONFIG_HISAX_SEDLBAUER_CS=m -CONFIG_HISAX_ELSA_CS=m -CONFIG_HISAX_AVM_A1_CS=m -CONFIG_HISAX_TELES_CS=m - -# -# HiSax sub driver modules -# -CONFIG_HISAX_ST5481=m -CONFIG_HISAX_HFCUSB=m -CONFIG_HISAX_HFC4S8S=m -CONFIG_HISAX_FRITZ_PCIPNP=m -CONFIG_HISAX_HDLC=y - -# -# Active cards -# -CONFIG_ISDN_DRV_ICN=m -CONFIG_ISDN_DRV_PCBIT=m -CONFIG_ISDN_DRV_SC=m -CONFIG_ISDN_DRV_ACT2000=m -# CONFIG_ISDN_DRV_GIGASET is not set -CONFIG_ISDN_CAPI=m -CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y -CONFIG_CAPI_TRACE=y -CONFIG_ISDN_CAPI_MIDDLEWARE=y -CONFIG_ISDN_CAPI_CAPI20=m -CONFIG_ISDN_CAPI_CAPIFS_BOOL=y -CONFIG_ISDN_CAPI_CAPIFS=m -CONFIG_ISDN_CAPI_CAPIDRV=m - -# -# CAPI hardware drivers -# -CONFIG_CAPI_AVM=y -CONFIG_ISDN_DRV_AVMB1_B1ISA=m -CONFIG_ISDN_DRV_AVMB1_B1PCI=m -CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y -CONFIG_ISDN_DRV_AVMB1_T1ISA=m -CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m -CONFIG_ISDN_DRV_AVMB1_AVM_CS=m -CONFIG_ISDN_DRV_AVMB1_T1PCI=m -CONFIG_ISDN_DRV_AVMB1_C4=m -CONFIG_CAPI_EICON=y -CONFIG_ISDN_DIVAS=m -CONFIG_ISDN_DIVAS_BRIPCI=y -CONFIG_ISDN_DIVAS_PRIPCI=y -CONFIG_ISDN_DIVAS_DIVACAPI=m -CONFIG_ISDN_DIVAS_USERIDI=m -CONFIG_ISDN_DIVAS_MAINT=m -CONFIG_PHONE=m -CONFIG_PHONE_IXJ=m -CONFIG_PHONE_IXJ_PCMCIA=m - -# -# Input device support -# -CONFIG_INPUT=y -CONFIG_INPUT_FF_MEMLESS=m -CONFIG_INPUT_POLLDEV=m - -# -# Userland interfaces -# -CONFIG_INPUT_MOUSEDEV=y -CONFIG_INPUT_MOUSEDEV_PSAUX=y -CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -CONFIG_INPUT_JOYDEV=m -CONFIG_INPUT_TSDEV=m -CONFIG_INPUT_TSDEV_SCREEN_X=240 -CONFIG_INPUT_TSDEV_SCREEN_Y=320 -CONFIG_INPUT_EVDEV=y -# CONFIG_INPUT_EVBUG is not set - -# -# Input Device Drivers -# -CONFIG_INPUT_KEYBOARD=y -CONFIG_KEYBOARD_ATKBD=y -CONFIG_KEYBOARD_SUNKBD=m -# CONFIG_KEYBOARD_LKKBD is not set -CONFIG_KEYBOARD_XTKBD=m -CONFIG_KEYBOARD_NEWTON=m -CONFIG_KEYBOARD_STOWAWAY=m -CONFIG_INPUT_MOUSE=y -CONFIG_MOUSE_PS2=y -CONFIG_MOUSE_PS2_ALPS=y -CONFIG_MOUSE_PS2_LOGIPS2PP=y -CONFIG_MOUSE_PS2_SYNAPTICS=y -CONFIG_MOUSE_PS2_LIFEBOOK=y -CONFIG_MOUSE_PS2_TRACKPOINT=y -# CONFIG_MOUSE_PS2_TOUCHKIT is not set -CONFIG_MOUSE_SERIAL=m -CONFIG_MOUSE_APPLETOUCH=m -CONFIG_MOUSE_INPORT=m -CONFIG_MOUSE_ATIXL=y -CONFIG_MOUSE_LOGIBM=m -CONFIG_MOUSE_PC110PAD=m -# CONFIG_MOUSE_VSXXXAA is not set -CONFIG_INPUT_JOYSTICK=y -CONFIG_JOYSTICK_ANALOG=m -CONFIG_JOYSTICK_A3D=m -CONFIG_JOYSTICK_ADI=m -CONFIG_JOYSTICK_COBRA=m -CONFIG_JOYSTICK_GF2K=m -CONFIG_JOYSTICK_GRIP=m -CONFIG_JOYSTICK_GRIP_MP=m -CONFIG_JOYSTICK_GUILLEMOT=m -CONFIG_JOYSTICK_INTERACT=m -CONFIG_JOYSTICK_SIDEWINDER=m -CONFIG_JOYSTICK_TMDC=m -CONFIG_JOYSTICK_IFORCE=m -CONFIG_JOYSTICK_IFORCE_USB=y -CONFIG_JOYSTICK_IFORCE_232=y -CONFIG_JOYSTICK_WARRIOR=m -CONFIG_JOYSTICK_MAGELLAN=m -CONFIG_JOYSTICK_SPACEORB=m -CONFIG_JOYSTICK_SPACEBALL=m -CONFIG_JOYSTICK_STINGER=m -CONFIG_JOYSTICK_TWIDJOY=m -CONFIG_JOYSTICK_DB9=m -CONFIG_JOYSTICK_GAMECON=m -CONFIG_JOYSTICK_TURBOGRAFX=m -CONFIG_JOYSTICK_JOYDUMP=m -CONFIG_JOYSTICK_XPAD=m -CONFIG_JOYSTICK_XPAD_FF=y -CONFIG_JOYSTICK_XPAD_LEDS=y -CONFIG_INPUT_TABLET=y -CONFIG_TABLET_USB_ACECAD=m -CONFIG_TABLET_USB_AIPTEK=m -CONFIG_TABLET_USB_GTCO=m -CONFIG_TABLET_USB_KBTAB=m -CONFIG_TABLET_USB_WACOM=m -CONFIG_INPUT_TOUCHSCREEN=y -CONFIG_TOUCHSCREEN_ADS7846=m -CONFIG_TOUCHSCREEN_FUJITSU=m -CONFIG_TOUCHSCREEN_GUNZE=m -CONFIG_TOUCHSCREEN_ELO=m -CONFIG_TOUCHSCREEN_MTOUCH=m -CONFIG_TOUCHSCREEN_MK712=m -CONFIG_TOUCHSCREEN_PENMOUNT=m -CONFIG_TOUCHSCREEN_TOUCHRIGHT=m -CONFIG_TOUCHSCREEN_TOUCHWIN=m -CONFIG_TOUCHSCREEN_UCB1400=m -CONFIG_TOUCHSCREEN_USB_COMPOSITE=m -CONFIG_TOUCHSCREEN_USB_EGALAX=y -CONFIG_TOUCHSCREEN_USB_PANJIT=y -CONFIG_TOUCHSCREEN_USB_3M=y -CONFIG_TOUCHSCREEN_USB_ITM=y -CONFIG_TOUCHSCREEN_USB_ETURBO=y -CONFIG_TOUCHSCREEN_USB_GUNZE=y -CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y -CONFIG_TOUCHSCREEN_USB_IRTOUCH=y -CONFIG_INPUT_MISC=y -CONFIG_INPUT_PCSPKR=y -CONFIG_INPUT_WISTRON_BTNS=m -CONFIG_INPUT_ATLAS_BTNS=m -CONFIG_INPUT_ATI_REMOTE=m -CONFIG_INPUT_ATI_REMOTE2=m -CONFIG_INPUT_KEYSPAN_REMOTE=m -CONFIG_INPUT_POWERMATE=m -CONFIG_INPUT_YEALINK=m -CONFIG_INPUT_UINPUT=m - -# -# Hardware I/O ports -# -CONFIG_SERIO=y -CONFIG_SERIO_I8042=y -CONFIG_SERIO_SERPORT=m -CONFIG_SERIO_CT82C710=m -CONFIG_SERIO_PARKBD=m -CONFIG_SERIO_PCIPS2=m -CONFIG_SERIO_LIBPS2=y -CONFIG_SERIO_RAW=m -CONFIG_GAMEPORT=m -CONFIG_GAMEPORT_NS558=m -CONFIG_GAMEPORT_L4=m -CONFIG_GAMEPORT_EMU10K1=m -CONFIG_GAMEPORT_FM801=m - -# -# Character devices -# -CONFIG_VT=y -CONFIG_VT_CONSOLE=y -CONFIG_HW_CONSOLE=y -# CONFIG_VT_HW_CONSOLE_BINDING is not set -CONFIG_SERIAL_NONSTANDARD=y -# CONFIG_COMPUTONE is not set -CONFIG_ROCKETPORT=m -CONFIG_CYCLADES=m -# CONFIG_CYZ_INTR is not set -CONFIG_DIGIEPCA=m -# CONFIG_ESPSERIAL is not set -# CONFIG_MOXA_INTELLIO is not set -CONFIG_MOXA_SMARTIO=m -CONFIG_MOXA_SMARTIO_NEW=m -# CONFIG_ISI is not set -CONFIG_SYNCLINK=m -CONFIG_SYNCLINKMP=m -CONFIG_SYNCLINK_GT=m -CONFIG_N_HDLC=m -# CONFIG_SPECIALIX is not set -CONFIG_SX=m -CONFIG_RIO=m -CONFIG_RIO_OLDPCI=y -CONFIG_STALDRV=y - -# -# Serial drivers -# -CONFIG_SERIAL_8250=y -CONFIG_SERIAL_8250_CONSOLE=y -CONFIG_FIX_EARLYCON_MEM=y -CONFIG_SERIAL_8250_PCI=y -CONFIG_SERIAL_8250_PNP=y -CONFIG_SERIAL_8250_CS=m -CONFIG_SERIAL_8250_NR_UARTS=8 -CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -CONFIG_SERIAL_8250_EXTENDED=y -CONFIG_SERIAL_8250_MANY_PORTS=y -CONFIG_SERIAL_8250_FOURPORT=m -CONFIG_SERIAL_8250_ACCENT=m -CONFIG_SERIAL_8250_BOCA=m -CONFIG_SERIAL_8250_EXAR_ST16C554=m -CONFIG_SERIAL_8250_HUB6=m -CONFIG_SERIAL_8250_SHARE_IRQ=y -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -CONFIG_SERIAL_8250_RSA=y - -# -# Non-8250 serial port support -# -CONFIG_SERIAL_CORE=y -CONFIG_SERIAL_CORE_CONSOLE=y -CONFIG_SERIAL_JSM=m -CONFIG_UNIX98_PTYS=y -CONFIG_LEGACY_PTYS=y -CONFIG_LEGACY_PTY_COUNT=256 -CONFIG_PRINTER=m -# CONFIG_LP_CONSOLE is not set -CONFIG_PPDEV=m -CONFIG_TIPAR=m -CONFIG_HVC_DRIVER=y -CONFIG_HVC_XEN=y -CONFIG_IPMI_HANDLER=m -CONFIG_IPMI_PANIC_EVENT=y -CONFIG_IPMI_PANIC_STRING=y -CONFIG_IPMI_DEVICE_INTERFACE=m -CONFIG_IPMI_SI=m -CONFIG_IPMI_WATCHDOG=m -CONFIG_IPMI_POWEROFF=m -CONFIG_WATCHDOG=y -# CONFIG_WATCHDOG_NOWAYOUT is not set - -# -# Watchdog Device Drivers -# -CONFIG_SOFT_WATCHDOG=m -CONFIG_ACQUIRE_WDT=m -CONFIG_ADVANTECH_WDT=m -CONFIG_ALIM1535_WDT=m -CONFIG_ALIM7101_WDT=m -CONFIG_SC520_WDT=m -CONFIG_EUROTECH_WDT=m -CONFIG_IB700_WDT=m -CONFIG_IBMASR=m -CONFIG_WAFER_WDT=m -CONFIG_I6300ESB_WDT=m -CONFIG_ITCO_WDT=m -CONFIG_ITCO_VENDOR_SUPPORT=y -CONFIG_SC1200_WDT=m -CONFIG_SCx200_WDT=m -CONFIG_PC87413_WDT=m -CONFIG_60XX_WDT=m -CONFIG_SBC8360_WDT=m -CONFIG_CPU5_WDT=m -CONFIG_SMSC37B787_WDT=m -CONFIG_W83627HF_WDT=m -CONFIG_W83697HF_WDT=m -CONFIG_W83877F_WDT=m -CONFIG_W83977F_WDT=m -CONFIG_MACHZ_WDT=m -CONFIG_SBC_EPX_C3_WATCHDOG=m - -# -# ISA-based Watchdog Cards -# -CONFIG_PCWATCHDOG=m -CONFIG_MIXCOMWD=m -CONFIG_WDT=m -CONFIG_WDT_501=y - -# -# PCI-based Watchdog Cards -# -CONFIG_PCIPCWATCHDOG=m -CONFIG_WDTPCI=m -CONFIG_WDT_501_PCI=y - -# -# USB-based Watchdog Cards -# -CONFIG_USBPCWATCHDOG=m -CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_INTEL=m -CONFIG_HW_RANDOM_AMD=m -CONFIG_HW_RANDOM_GEODE=m -CONFIG_HW_RANDOM_VIA=m -CONFIG_NVRAM=m -CONFIG_RTC=y -CONFIG_DTLK=m -CONFIG_R3964=m -CONFIG_APPLICOM=m -CONFIG_SONYPI=m -CONFIG_AGP=m -CONFIG_AGP_ALI=m -CONFIG_AGP_ATI=m -CONFIG_AGP_AMD=m -CONFIG_AGP_AMD64=m -CONFIG_AGP_INTEL=m -CONFIG_AGP_NVIDIA=m -CONFIG_AGP_SIS=m -CONFIG_AGP_SWORKS=m -CONFIG_AGP_VIA=m -CONFIG_AGP_EFFICEON=m -CONFIG_DRM=m -CONFIG_DRM_TDFX=m -CONFIG_DRM_R128=m -CONFIG_DRM_RADEON=m -CONFIG_DRM_I810=m -CONFIG_DRM_I830=m -CONFIG_DRM_I915=m -CONFIG_DRM_MGA=m -CONFIG_DRM_SIS=m -CONFIG_DRM_VIA=m -CONFIG_DRM_SAVAGE=m - -# -# PCMCIA character devices -# -CONFIG_SYNCLINK_CS=m -CONFIG_CARDMAN_4000=m -CONFIG_CARDMAN_4040=m -CONFIG_MWAVE=m -CONFIG_SCx200_GPIO=m -CONFIG_PC8736x_GPIO=m -CONFIG_NSC_GPIO=m -CONFIG_CS5535_GPIO=m -CONFIG_RAW_DRIVER=m -CONFIG_MAX_RAW_DEVS=4096 -CONFIG_HPET=y -# CONFIG_HPET_RTC_IRQ is not set -CONFIG_HPET_MMAP=y -CONFIG_HANGCHECK_TIMER=m -CONFIG_TCG_TPM=m -CONFIG_TCG_TIS=m -CONFIG_TCG_NSC=m -CONFIG_TCG_ATMEL=m -CONFIG_TCG_INFINEON=m -CONFIG_TELCLOCK=m -CONFIG_DEVPORT=y -CONFIG_I2C=m -CONFIG_I2C_BOARDINFO=y -CONFIG_I2C_CHARDEV=m - -# -# I2C Algorithms -# -CONFIG_I2C_ALGOBIT=m -CONFIG_I2C_ALGOPCF=m -CONFIG_I2C_ALGOPCA=m - -# -# I2C Hardware Bus support -# -CONFIG_I2C_ALI1535=m -CONFIG_I2C_ALI1563=m -CONFIG_I2C_ALI15X3=m -CONFIG_I2C_AMD756=m -CONFIG_I2C_AMD756_S4882=m -CONFIG_I2C_AMD8111=m -CONFIG_I2C_I801=m -CONFIG_I2C_I810=m -CONFIG_I2C_PIIX4=m -CONFIG_I2C_NFORCE2=m -CONFIG_I2C_OCORES=m -CONFIG_I2C_PARPORT=m -CONFIG_I2C_PARPORT_LIGHT=m -CONFIG_I2C_PROSAVAGE=m -CONFIG_I2C_SAVAGE4=m -CONFIG_I2C_SIMTEC=m -CONFIG_SCx200_I2C=m -CONFIG_SCx200_I2C_SCL=12 -CONFIG_SCx200_I2C_SDA=13 -CONFIG_SCx200_ACB=m -CONFIG_I2C_SIS5595=m -CONFIG_I2C_SIS630=m -CONFIG_I2C_SIS96X=m -CONFIG_I2C_TAOS_EVM=m -CONFIG_I2C_STUB=m -CONFIG_I2C_TINY_USB=m -CONFIG_I2C_VIA=m -CONFIG_I2C_VIAPRO=m -CONFIG_I2C_VOODOO3=m -CONFIG_I2C_PCA_ISA=m - -# -# Miscellaneous I2C Chip support -# -CONFIG_SENSORS_DS1337=m -CONFIG_SENSORS_DS1374=m -CONFIG_DS1682=m -CONFIG_SENSORS_EEPROM=m -CONFIG_SENSORS_PCF8574=m -CONFIG_SENSORS_PCA9539=m -CONFIG_SENSORS_PCF8591=m -CONFIG_SENSORS_MAX6875=m -CONFIG_SENSORS_TSL2550=m -# CONFIG_I2C_DEBUG_CORE is not set -# CONFIG_I2C_DEBUG_ALGO is not set -# CONFIG_I2C_DEBUG_BUS is not set -# CONFIG_I2C_DEBUG_CHIP is not set - -# -# SPI support -# -CONFIG_SPI=y -# CONFIG_SPI_DEBUG is not set -CONFIG_SPI_MASTER=y - -# -# SPI Master Controller Drivers -# -CONFIG_SPI_BITBANG=m -# CONFIG_SPI_BUTTERFLY is not set -CONFIG_SPI_LM70_LLP=m - -# -# SPI Protocol Masters -# -CONFIG_SPI_AT25=m -CONFIG_SPI_SPIDEV=m -CONFIG_SPI_TLE62X0=m -CONFIG_W1=m -CONFIG_W1_CON=y - -# -# 1-wire Bus Masters -# -CONFIG_W1_MASTER_MATROX=m -CONFIG_W1_MASTER_DS2490=m -CONFIG_W1_MASTER_DS2482=m - -# -# 1-wire Slaves -# -CONFIG_W1_SLAVE_THERM=m -CONFIG_W1_SLAVE_SMEM=m -CONFIG_W1_SLAVE_DS2433=m -# CONFIG_W1_SLAVE_DS2433_CRC is not set -CONFIG_W1_SLAVE_DS2760=m -CONFIG_POWER_SUPPLY=m -# CONFIG_POWER_SUPPLY_DEBUG is not set -# CONFIG_PDA_POWER is not set -# CONFIG_BATTERY_DS2760 is not set -CONFIG_HWMON=m -CONFIG_HWMON_VID=m -CONFIG_SENSORS_ABITUGURU=m -CONFIG_SENSORS_ABITUGURU3=m -CONFIG_SENSORS_AD7418=m -CONFIG_SENSORS_ADM1021=m -CONFIG_SENSORS_ADM1025=m -CONFIG_SENSORS_ADM1026=m -CONFIG_SENSORS_ADM1029=m -CONFIG_SENSORS_ADM1031=m -CONFIG_SENSORS_ADM9240=m -CONFIG_SENSORS_K8TEMP=m -CONFIG_SENSORS_ASB100=m -CONFIG_SENSORS_ATXP1=m -CONFIG_SENSORS_DS1621=m -CONFIG_SENSORS_F71805F=m -CONFIG_SENSORS_FSCHER=m -CONFIG_SENSORS_FSCPOS=m -CONFIG_SENSORS_GL518SM=m -CONFIG_SENSORS_GL520SM=m -CONFIG_SENSORS_CORETEMP=m -CONFIG_SENSORS_IT87=m -CONFIG_SENSORS_LM63=m -CONFIG_SENSORS_LM70=m -CONFIG_SENSORS_LM75=m -CONFIG_SENSORS_LM77=m -CONFIG_SENSORS_LM78=m -CONFIG_SENSORS_LM80=m -CONFIG_SENSORS_LM83=m -CONFIG_SENSORS_LM85=m -CONFIG_SENSORS_LM87=m -CONFIG_SENSORS_LM90=m -CONFIG_SENSORS_LM92=m -CONFIG_SENSORS_LM93=m -CONFIG_SENSORS_MAX1619=m -CONFIG_SENSORS_MAX6650=m -CONFIG_SENSORS_PC87360=m -CONFIG_SENSORS_PC87427=m -CONFIG_SENSORS_SIS5595=m -CONFIG_SENSORS_DME1737=m -CONFIG_SENSORS_SMSC47M1=m -CONFIG_SENSORS_SMSC47M192=m -CONFIG_SENSORS_SMSC47B397=m -CONFIG_SENSORS_THMC50=m -CONFIG_SENSORS_VIA686A=m -CONFIG_SENSORS_VT1211=m -CONFIG_SENSORS_VT8231=m -CONFIG_SENSORS_W83781D=m -CONFIG_SENSORS_W83791D=m -CONFIG_SENSORS_W83792D=m -CONFIG_SENSORS_W83793=m -CONFIG_SENSORS_W83L785TS=m -CONFIG_SENSORS_W83627HF=m -CONFIG_SENSORS_W83627EHF=m -CONFIG_SENSORS_HDAPS=m -CONFIG_SENSORS_APPLESMC=m -# CONFIG_HWMON_DEBUG_CHIP is not set - -# -# Multifunction device drivers -# -CONFIG_MFD_SM501=m - -# -# Multimedia devices -# -CONFIG_VIDEO_DEV=m -CONFIG_VIDEO_V4L1=y -CONFIG_VIDEO_V4L1_COMPAT=y -CONFIG_VIDEO_V4L2=y -CONFIG_VIDEO_CAPTURE_DRIVERS=y -# CONFIG_VIDEO_ADV_DEBUG is not set -CONFIG_VIDEO_HELPER_CHIPS_AUTO=y -CONFIG_VIDEO_TVAUDIO=m -CONFIG_VIDEO_TDA7432=m -CONFIG_VIDEO_TDA9840=m -CONFIG_VIDEO_TDA9875=m -CONFIG_VIDEO_TEA6415C=m -CONFIG_VIDEO_TEA6420=m -CONFIG_VIDEO_MSP3400=m -CONFIG_VIDEO_CS53L32A=m -CONFIG_VIDEO_WM8775=m -CONFIG_VIDEO_WM8739=m -CONFIG_VIDEO_BT819=m -CONFIG_VIDEO_BT856=m -CONFIG_VIDEO_OV7670=m -CONFIG_VIDEO_SAA7110=m -CONFIG_VIDEO_SAA7111=m -CONFIG_VIDEO_SAA7114=m -CONFIG_VIDEO_SAA711X=m -CONFIG_VIDEO_TVP5150=m -CONFIG_VIDEO_VPX3220=m -CONFIG_VIDEO_CX25840=m -CONFIG_VIDEO_CX2341X=m -CONFIG_VIDEO_SAA7127=m -CONFIG_VIDEO_SAA7185=m -CONFIG_VIDEO_ADV7170=m -CONFIG_VIDEO_ADV7175=m -CONFIG_VIDEO_UPD64031A=m -CONFIG_VIDEO_UPD64083=m -CONFIG_VIDEO_VIVI=m -CONFIG_VIDEO_BT848=m -CONFIG_VIDEO_BT848_DVB=y -CONFIG_VIDEO_SAA6588=m -CONFIG_VIDEO_PMS=m -CONFIG_VIDEO_BWQCAM=m -CONFIG_VIDEO_CQCAM=m -CONFIG_VIDEO_W9966=m -CONFIG_VIDEO_CPIA=m -CONFIG_VIDEO_CPIA_PP=m -CONFIG_VIDEO_CPIA_USB=m -# CONFIG_VIDEO_CPIA2 is not set -CONFIG_VIDEO_SAA5246A=m -CONFIG_VIDEO_SAA5249=m -CONFIG_TUNER_3036=m -# CONFIG_TUNER_TEA5761 is not set -CONFIG_VIDEO_STRADIS=m -CONFIG_VIDEO_ZORAN_ZR36060=m -CONFIG_VIDEO_ZORAN=m -CONFIG_VIDEO_ZORAN_BUZ=m -CONFIG_VIDEO_ZORAN_DC10=m -CONFIG_VIDEO_ZORAN_DC30=m -CONFIG_VIDEO_ZORAN_LML33=m -CONFIG_VIDEO_ZORAN_LML33R10=m -# CONFIG_VIDEO_ZORAN_AVS6EYES is not set -CONFIG_VIDEO_MEYE=m -CONFIG_VIDEO_SAA7134=m -CONFIG_VIDEO_SAA7134_ALSA=m -# CONFIG_VIDEO_SAA7134_OSS is not set -CONFIG_VIDEO_SAA7134_DVB=m -CONFIG_VIDEO_MXB=m -CONFIG_VIDEO_DPC=m -CONFIG_VIDEO_HEXIUM_ORION=m -CONFIG_VIDEO_HEXIUM_GEMINI=m -CONFIG_VIDEO_CX88=m -CONFIG_VIDEO_CX88_ALSA=m -CONFIG_VIDEO_CX88_BLACKBIRD=m -CONFIG_VIDEO_CX88_DVB=m -CONFIG_VIDEO_CX88_VP3054=m -CONFIG_VIDEO_IVTV=m -CONFIG_VIDEO_CAFE_CCIC=m -CONFIG_V4L_USB_DRIVERS=y -CONFIG_VIDEO_PVRUSB2=m -CONFIG_VIDEO_PVRUSB2_29XXX=y -CONFIG_VIDEO_PVRUSB2_24XXX=y -CONFIG_VIDEO_PVRUSB2_SYSFS=y -# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set -CONFIG_VIDEO_EM28XX=m -CONFIG_VIDEO_USBVISION=m -CONFIG_VIDEO_USBVIDEO=m -CONFIG_USB_VICAM=m -CONFIG_USB_IBMCAM=m -CONFIG_USB_KONICAWC=m -CONFIG_USB_QUICKCAM_MESSENGER=m -CONFIG_USB_ET61X251=m -CONFIG_VIDEO_OVCAMCHIP=m -CONFIG_USB_W9968CF=m -CONFIG_USB_OV511=m -CONFIG_USB_SE401=m -CONFIG_USB_SN9C102=m -CONFIG_USB_STV680=m -CONFIG_USB_ZC0301=m -CONFIG_USB_PWC=m -# CONFIG_USB_PWC_DEBUG is not set -CONFIG_USB_ZR364XX=m -CONFIG_RADIO_ADAPTERS=y -CONFIG_RADIO_CADET=m -CONFIG_RADIO_RTRACK=m -CONFIG_RADIO_RTRACK2=m -CONFIG_RADIO_AZTECH=m -CONFIG_RADIO_GEMTEK=m -CONFIG_RADIO_GEMTEK_PCI=m -CONFIG_RADIO_MAXIRADIO=m -CONFIG_RADIO_MAESTRO=m -CONFIG_RADIO_SF16FMI=m -CONFIG_RADIO_SF16FMR2=m -CONFIG_RADIO_TERRATEC=m -CONFIG_RADIO_TRUST=m -CONFIG_RADIO_TYPHOON=m -CONFIG_RADIO_TYPHOON_PROC_FS=y -CONFIG_RADIO_ZOLTRIX=m -CONFIG_USB_DSBR=m -CONFIG_DVB_CORE=m -CONFIG_DVB_CORE_ATTACH=y -CONFIG_DVB_CAPTURE_DRIVERS=y - -# -# Supported SAA7146 based PCI Adapters -# -CONFIG_DVB_AV7110=m -# CONFIG_DVB_AV7110_FIRMWARE is not set -CONFIG_DVB_AV7110_OSD=y -CONFIG_DVB_BUDGET=m -CONFIG_DVB_BUDGET_CI=m -CONFIG_DVB_BUDGET_AV=m -CONFIG_DVB_BUDGET_PATCH=m - -# -# Supported USB Adapters -# -CONFIG_DVB_USB=m -# CONFIG_DVB_USB_DEBUG is not set -CONFIG_DVB_USB_A800=m -CONFIG_DVB_USB_DIBUSB_MB=m -# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set -CONFIG_DVB_USB_DIBUSB_MC=m -CONFIG_DVB_USB_DIB0700=m -CONFIG_DVB_USB_UMT_010=m -CONFIG_DVB_USB_CXUSB=m -CONFIG_DVB_USB_M920X=m -CONFIG_DVB_USB_GL861=m -CONFIG_DVB_USB_AU6610=m -CONFIG_DVB_USB_DIGITV=m -CONFIG_DVB_USB_VP7045=m -CONFIG_DVB_USB_VP702X=m -CONFIG_DVB_USB_GP8PSK=m -CONFIG_DVB_USB_NOVA_T_USB2=m -CONFIG_DVB_USB_TTUSB2=m -CONFIG_DVB_USB_DTT200U=m -CONFIG_DVB_USB_OPERA1=m -CONFIG_DVB_USB_AF9005=m -CONFIG_DVB_USB_AF9005_REMOTE=m -CONFIG_DVB_TTUSB_BUDGET=m -CONFIG_DVB_TTUSB_DEC=m -CONFIG_DVB_CINERGYT2=m -# CONFIG_DVB_CINERGYT2_TUNING is not set - -# -# Supported FlexCopII (B2C2) Adapters -# -CONFIG_DVB_B2C2_FLEXCOP=m -CONFIG_DVB_B2C2_FLEXCOP_PCI=m -CONFIG_DVB_B2C2_FLEXCOP_USB=m -# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set - -# -# Supported BT878 Adapters -# -CONFIG_DVB_BT8XX=m - -# -# Supported Pluto2 Adapters -# -# CONFIG_DVB_PLUTO2 is not set - -# -# Supported DVB Frontends -# - -# -# Customise DVB Frontends -# -# CONFIG_DVB_FE_CUSTOMISE is not set - -# -# DVB-S (satellite) frontends -# -CONFIG_DVB_STV0299=m -CONFIG_DVB_CX24110=m -CONFIG_DVB_CX24123=m -CONFIG_DVB_TDA8083=m -CONFIG_DVB_MT312=m -CONFIG_DVB_VES1X93=m -CONFIG_DVB_S5H1420=m -CONFIG_DVB_TDA10086=m - -# -# DVB-T (terrestrial) frontends -# -CONFIG_DVB_SP8870=m -CONFIG_DVB_SP887X=m -CONFIG_DVB_CX22700=m -CONFIG_DVB_CX22702=m -CONFIG_DVB_L64781=m -CONFIG_DVB_TDA1004X=m -CONFIG_DVB_NXT6000=m -CONFIG_DVB_MT352=m -CONFIG_DVB_ZL10353=m -CONFIG_DVB_DIB3000MB=m -CONFIG_DVB_DIB3000MC=m -CONFIG_DVB_DIB7000M=m -CONFIG_DVB_DIB7000P=m - -# -# DVB-C (cable) frontends -# -CONFIG_DVB_VES1820=m -CONFIG_DVB_TDA10021=m -CONFIG_DVB_TDA10023=m -CONFIG_DVB_STV0297=m - -# -# ATSC (North American/Korean Terrestrial/Cable DTV) frontends -# -CONFIG_DVB_NXT200X=m -CONFIG_DVB_OR51211=m -CONFIG_DVB_OR51132=m -CONFIG_DVB_BCM3510=m -CONFIG_DVB_LGDT330X=m - -# -# Tuners/PLL support -# -CONFIG_DVB_PLL=m -CONFIG_DVB_TDA826X=m -CONFIG_DVB_TDA827X=m -CONFIG_DVB_TUNER_QT1010=m -CONFIG_DVB_TUNER_MT2060=m - -# -# Miscellaneous devices -# -CONFIG_DVB_LNBP21=m -CONFIG_DVB_ISL6421=m -CONFIG_DVB_TUA6100=m -CONFIG_VIDEO_SAA7146=m -CONFIG_VIDEO_SAA7146_VV=m -CONFIG_VIDEO_TUNER=m -CONFIG_VIDEO_BUF=m -CONFIG_VIDEO_BUF_DVB=m -CONFIG_VIDEO_BTCX=m -CONFIG_VIDEO_IR_I2C=m -CONFIG_VIDEO_IR=m -CONFIG_VIDEO_TVEEPROM=m -CONFIG_DAB=y -CONFIG_USB_DABUSB=m - -# -# Graphics support -# -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=m -CONFIG_BACKLIGHT_CLASS_DEVICE=y -CONFIG_BACKLIGHT_PROGEAR=m -CONFIG_BACKLIGHT_CARILLO_RANCH=m - -# -# Display device support -# -CONFIG_DISPLAY_SUPPORT=m - -# -# Display hardware drivers -# -CONFIG_VGASTATE=m -CONFIG_VIDEO_OUTPUT_CONTROL=m -CONFIG_FB=y -CONFIG_FIRMWARE_EDID=y -CONFIG_FB_DDC=m -CONFIG_FB_CFB_FILLRECT=y -CONFIG_FB_CFB_COPYAREA=y -CONFIG_FB_CFB_IMAGEBLIT=y -CONFIG_FB_SYS_FILLRECT=m -CONFIG_FB_SYS_COPYAREA=m -CONFIG_FB_SYS_IMAGEBLIT=m -CONFIG_FB_SYS_FOPS=m -CONFIG_FB_DEFERRED_IO=y -# CONFIG_FB_SVGALIB is not set -# CONFIG_FB_MACMODES is not set -CONFIG_FB_BACKLIGHT=y -CONFIG_FB_MODE_HELPERS=y -# CONFIG_FB_TILEBLITTING is not set - -# -# Frame buffer hardware drivers -# -CONFIG_FB_CIRRUS=m -CONFIG_FB_PM2=m -CONFIG_FB_PM2_FIFO_DISCONNECT=y -CONFIG_FB_CYBER2000=m -CONFIG_FB_ARC=m -# CONFIG_FB_ASILIANT is not set -CONFIG_FB_IMSTT=y -CONFIG_FB_VGA16=m -CONFIG_FB_VESA=y -CONFIG_FB_IMAC=y -CONFIG_FB_HECUBA=m -CONFIG_FB_HGA=m -CONFIG_FB_HGA_ACCEL=y -CONFIG_FB_S1D13XXX=m -CONFIG_FB_NVIDIA=m -CONFIG_FB_NVIDIA_I2C=y -# CONFIG_FB_NVIDIA_DEBUG is not set -CONFIG_FB_NVIDIA_BACKLIGHT=y -CONFIG_FB_RIVA=m -CONFIG_FB_RIVA_I2C=y -# CONFIG_FB_RIVA_DEBUG is not set -CONFIG_FB_RIVA_BACKLIGHT=y -CONFIG_FB_I810=m -CONFIG_FB_I810_GTF=y -CONFIG_FB_I810_I2C=y -CONFIG_FB_LE80578=m -CONFIG_FB_CARILLO_RANCH=m -CONFIG_FB_INTEL=m -# CONFIG_FB_INTEL_DEBUG is not set -CONFIG_FB_INTEL_I2C=y -# CONFIG_FB_MATROX is not set -CONFIG_FB_RADEON=m -CONFIG_FB_RADEON_I2C=y -CONFIG_FB_RADEON_BACKLIGHT=y -# CONFIG_FB_RADEON_DEBUG is not set -# CONFIG_FB_ATY128 is not set -CONFIG_FB_ATY=m -CONFIG_FB_ATY_CT=y -CONFIG_FB_ATY_GENERIC_LCD=y -CONFIG_FB_ATY_GX=y -CONFIG_FB_ATY_BACKLIGHT=y -# CONFIG_FB_S3 is not set -CONFIG_FB_SAVAGE=m -CONFIG_FB_SAVAGE_I2C=y -CONFIG_FB_SAVAGE_ACCEL=y -CONFIG_FB_SIS=m -CONFIG_FB_SIS_300=y -CONFIG_FB_SIS_315=y -CONFIG_FB_NEOMAGIC=m -CONFIG_FB_KYRO=m -CONFIG_FB_3DFX=m -CONFIG_FB_3DFX_ACCEL=y -CONFIG_FB_VOODOO1=m -# CONFIG_FB_VT8623 is not set -CONFIG_FB_CYBLA=m -CONFIG_FB_TRIDENT=m -CONFIG_FB_TRIDENT_ACCEL=y -# CONFIG_FB_ARK is not set -CONFIG_FB_PM3=m -CONFIG_FB_GEODE=y -CONFIG_FB_GEODE_LX=m -CONFIG_FB_GEODE_GX=m -# CONFIG_FB_GEODE_GX_SET_FBSIZE is not set -CONFIG_FB_GEODE_GX1=m -CONFIG_FB_SM501=m -# CONFIG_FB_VIRTUAL is not set - -# -# Console display driver support -# -CONFIG_VGA_CONSOLE=y -# CONFIG_VGACON_SOFT_SCROLLBACK is not set -CONFIG_VIDEO_SELECT=y -CONFIG_MDA_CONSOLE=m -CONFIG_DUMMY_CONSOLE=y -CONFIG_FRAMEBUFFER_CONSOLE=y -# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set -# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set -# CONFIG_FONTS is not set -CONFIG_FONT_8x8=y -CONFIG_FONT_8x16=y -# CONFIG_LOGO is not set - -# -# Sound -# -CONFIG_SOUND=m - -# -# Advanced Linux Sound Architecture -# -CONFIG_SND=m -CONFIG_SND_TIMER=m -CONFIG_SND_PCM=m -CONFIG_SND_HWDEP=m -CONFIG_SND_RAWMIDI=m -CONFIG_SND_SEQUENCER=m -CONFIG_SND_SEQ_DUMMY=m -CONFIG_SND_OSSEMUL=y -CONFIG_SND_MIXER_OSS=m -CONFIG_SND_PCM_OSS=m -CONFIG_SND_PCM_OSS_PLUGINS=y -CONFIG_SND_SEQUENCER_OSS=y -CONFIG_SND_RTCTIMER=m -CONFIG_SND_SEQ_RTCTIMER_DEFAULT=y -# CONFIG_SND_DYNAMIC_MINORS is not set -CONFIG_SND_SUPPORT_OLD_API=y -CONFIG_SND_VERBOSE_PROCFS=y -CONFIG_SND_VERBOSE_PRINTK=y -CONFIG_SND_DEBUG=y -# CONFIG_SND_DEBUG_DETECT is not set -# CONFIG_SND_PCM_XRUN_DEBUG is not set - -# -# Generic devices -# -CONFIG_SND_MPU401_UART=m -CONFIG_SND_OPL3_LIB=m -CONFIG_SND_OPL4_LIB=m -CONFIG_SND_VX_LIB=m -CONFIG_SND_AC97_CODEC=m -CONFIG_SND_DUMMY=m -CONFIG_SND_VIRMIDI=m -CONFIG_SND_MTPAV=m -CONFIG_SND_MTS64=m -CONFIG_SND_SERIAL_U16550=m -CONFIG_SND_MPU401=m -CONFIG_SND_PORTMAN2X4=m -CONFIG_SND_AD1848_LIB=m -CONFIG_SND_CS4231_LIB=m -CONFIG_SND_SB_COMMON=m -CONFIG_SND_SB8_DSP=m -CONFIG_SND_SB16_DSP=m - -# -# ISA devices -# -# CONFIG_SND_ADLIB is not set -CONFIG_SND_AD1816A=m -CONFIG_SND_AD1848=m -CONFIG_SND_ALS100=m -CONFIG_SND_AZT2320=m -CONFIG_SND_CMI8330=m -CONFIG_SND_CS4231=m -CONFIG_SND_CS4232=m -CONFIG_SND_CS4236=m -CONFIG_SND_DT019X=m -CONFIG_SND_ES968=m -CONFIG_SND_ES1688=m -CONFIG_SND_ES18XX=m -CONFIG_SND_GUS_SYNTH=m -CONFIG_SND_GUSCLASSIC=m -CONFIG_SND_GUSEXTREME=m -CONFIG_SND_GUSMAX=m -CONFIG_SND_INTERWAVE=m -CONFIG_SND_INTERWAVE_STB=m -CONFIG_SND_OPL3SA2=m -CONFIG_SND_OPTI92X_AD1848=m -CONFIG_SND_OPTI92X_CS4231=m -CONFIG_SND_OPTI93X=m -CONFIG_SND_MIRO=m -CONFIG_SND_SB8=m -CONFIG_SND_SB16=m -CONFIG_SND_SBAWE=m -CONFIG_SND_SB16_CSP=y -CONFIG_SND_SB16_CSP_FIRMWARE_IN_KERNEL=y -CONFIG_SND_SGALAXY=m -CONFIG_SND_SSCAPE=m -CONFIG_SND_WAVEFRONT=m -CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL=y - -# -# PCI devices -# -CONFIG_SND_AD1889=m -CONFIG_SND_ALS300=m -CONFIG_SND_ALS4000=m -CONFIG_SND_ALI5451=m -CONFIG_SND_ATIIXP=m -CONFIG_SND_ATIIXP_MODEM=m -CONFIG_SND_AU8810=m -CONFIG_SND_AU8820=m -CONFIG_SND_AU8830=m -CONFIG_SND_AZT3328=m -CONFIG_SND_BT87X=m -# CONFIG_SND_BT87X_OVERCLOCK is not set -CONFIG_SND_CA0106=m -CONFIG_SND_CMIPCI=m -CONFIG_SND_CS4281=m -CONFIG_SND_CS46XX=m -CONFIG_SND_CS46XX_NEW_DSP=y -CONFIG_SND_CS5530=m -CONFIG_SND_CS5535AUDIO=m -CONFIG_SND_DARLA20=m -CONFIG_SND_GINA20=m -CONFIG_SND_LAYLA20=m -CONFIG_SND_DARLA24=m -CONFIG_SND_GINA24=m -CONFIG_SND_LAYLA24=m -CONFIG_SND_MONA=m -CONFIG_SND_MIA=m -CONFIG_SND_ECHO3G=m -CONFIG_SND_INDIGO=m -CONFIG_SND_INDIGOIO=m -CONFIG_SND_INDIGODJ=m -CONFIG_SND_EMU10K1=m -CONFIG_SND_EMU10K1X=m -CONFIG_SND_ENS1370=m -CONFIG_SND_ENS1371=m -CONFIG_SND_ES1938=m -CONFIG_SND_ES1968=m -CONFIG_SND_FM801=m -CONFIG_SND_FM801_TEA575X_BOOL=y -CONFIG_SND_FM801_TEA575X=m -CONFIG_SND_HDA_INTEL=m -CONFIG_SND_HDSP=m -CONFIG_SND_HDSPM=m -CONFIG_SND_ICE1712=m -CONFIG_SND_ICE1724=m -CONFIG_SND_INTEL8X0=m -CONFIG_SND_INTEL8X0M=m -CONFIG_SND_KORG1212=m -CONFIG_SND_KORG1212_FIRMWARE_IN_KERNEL=y -CONFIG_SND_MAESTRO3=m -CONFIG_SND_MAESTRO3_FIRMWARE_IN_KERNEL=y -CONFIG_SND_MIXART=m -CONFIG_SND_NM256=m -CONFIG_SND_PCXHR=m -CONFIG_SND_RIPTIDE=m -CONFIG_SND_RME32=m -CONFIG_SND_RME96=m -CONFIG_SND_RME9652=m -CONFIG_SND_SONICVIBES=m -CONFIG_SND_TRIDENT=m -CONFIG_SND_VIA82XX=m -CONFIG_SND_VIA82XX_MODEM=m -CONFIG_SND_VX222=m -CONFIG_SND_YMFPCI=m -CONFIG_SND_YMFPCI_FIRMWARE_IN_KERNEL=y -CONFIG_SND_AC97_POWER_SAVE=y - -# -# USB devices -# -CONFIG_SND_USB_AUDIO=m -CONFIG_SND_USB_USX2Y=m -CONFIG_SND_USB_CAIAQ=m -CONFIG_SND_USB_CAIAQ_INPUT=y - -# -# PCMCIA devices -# -CONFIG_SND_VXPOCKET=m -CONFIG_SND_PDAUDIOCF=m - -# -# System on Chip audio support -# -# CONFIG_SND_SOC is not set - -# -# SoC Audio support for SuperH -# - -# -# Open Sound System -# -CONFIG_SOUND_PRIME=m -CONFIG_SOUND_TRIDENT=m -# CONFIG_SOUND_MSNDCLAS is not set -# CONFIG_SOUND_MSNDPIN is not set -CONFIG_SOUND_OSS=m -CONFIG_SOUND_TRACEINIT=y -CONFIG_SOUND_DMAP=y -CONFIG_SOUND_SSCAPE=m -CONFIG_SOUND_VMIDI=m -CONFIG_SOUND_TRIX=m -CONFIG_SOUND_MSS=m -CONFIG_SOUND_MPU401=m -CONFIG_SOUND_PAS=m -CONFIG_SOUND_PSS=m -CONFIG_PSS_MIXER=y -# CONFIG_PSS_HAVE_BOOT is not set -CONFIG_SOUND_SB=m -CONFIG_SOUND_YM3812=m -CONFIG_SOUND_UART6850=m -CONFIG_SOUND_AEDSP16=m -CONFIG_SC6600=y -CONFIG_SC6600_JOY=y -CONFIG_SC6600_CDROM=4 -CONFIG_SC6600_CDROMBASE=0x0 -# CONFIG_AEDSP16_MSS is not set -# CONFIG_AEDSP16_SBPRO is not set -CONFIG_SOUND_KAHLUA=m -CONFIG_AC97_BUS=m -CONFIG_HID_SUPPORT=y -CONFIG_HID=y -# CONFIG_HID_DEBUG is not set - -# -# USB Input Devices -# -CONFIG_USB_HID=m -CONFIG_USB_HIDINPUT_POWERBOOK=y -CONFIG_HID_FF=y -CONFIG_HID_PID=y -CONFIG_LOGITECH_FF=y -CONFIG_PANTHERLORD_FF=y -CONFIG_THRUSTMASTER_FF=y -CONFIG_ZEROPLUS_FF=y -CONFIG_USB_HIDDEV=y - -# -# USB HID Boot Protocol drivers -# -# CONFIG_USB_KBD is not set -# CONFIG_USB_MOUSE is not set -CONFIG_USB_SUPPORT=y -CONFIG_USB_ARCH_HAS_HCD=y -CONFIG_USB_ARCH_HAS_OHCI=y -CONFIG_USB_ARCH_HAS_EHCI=y -CONFIG_USB=m -# CONFIG_USB_DEBUG is not set - -# -# Miscellaneous USB options -# -CONFIG_USB_DEVICEFS=y -CONFIG_USB_DEVICE_CLASS=y -# CONFIG_USB_DYNAMIC_MINORS is not set -CONFIG_USB_SUSPEND=y -# CONFIG_USB_PERSIST is not set -# CONFIG_USB_OTG is not set - -# -# USB Host Controller Drivers -# -CONFIG_USB_EHCI_HCD=m -CONFIG_USB_EHCI_SPLIT_ISO=y -CONFIG_USB_EHCI_ROOT_HUB_TT=y -# CONFIG_USB_EHCI_TT_NEWSCHED is not set -CONFIG_USB_ISP116X_HCD=m -CONFIG_USB_OHCI_HCD=m -# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set -# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set -CONFIG_USB_OHCI_LITTLE_ENDIAN=y -CONFIG_USB_UHCI_HCD=m -CONFIG_USB_U132_HCD=m -CONFIG_USB_SL811_HCD=m -CONFIG_USB_SL811_CS=m -CONFIG_USB_R8A66597_HCD=m - -# -# USB Device Class drivers -# -CONFIG_USB_ACM=m -CONFIG_USB_PRINTER=m - -# -# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' -# - -# -# may also be needed; see USB_STORAGE Help for more information -# -CONFIG_USB_STORAGE=m -# CONFIG_USB_STORAGE_DEBUG is not set -CONFIG_USB_STORAGE_DATAFAB=y -CONFIG_USB_STORAGE_FREECOM=y -CONFIG_USB_STORAGE_ISD200=y -CONFIG_USB_STORAGE_DPCM=y -CONFIG_USB_STORAGE_USBAT=y -CONFIG_USB_STORAGE_SDDR09=y -CONFIG_USB_STORAGE_SDDR55=y -CONFIG_USB_STORAGE_JUMPSHOT=y -# CONFIG_USB_STORAGE_ALAUDA is not set -CONFIG_USB_STORAGE_KARMA=y -# CONFIG_USB_LIBUSUAL is not set - -# -# USB Imaging devices -# -CONFIG_USB_MDC800=m -CONFIG_USB_MICROTEK=m -CONFIG_USB_MON=y - -# -# USB port drivers -# -CONFIG_USB_USS720=m - -# -# USB Serial Converter support -# -CONFIG_USB_SERIAL=m -CONFIG_USB_SERIAL_GENERIC=y -# CONFIG_USB_SERIAL_AIRCABLE is not set -CONFIG_USB_SERIAL_AIRPRIME=m -CONFIG_USB_SERIAL_ARK3116=m -CONFIG_USB_SERIAL_BELKIN=m -CONFIG_USB_SERIAL_WHITEHEAT=m -CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m -CONFIG_USB_SERIAL_CP2101=m -CONFIG_USB_SERIAL_CYPRESS_M8=m -CONFIG_USB_SERIAL_EMPEG=m -CONFIG_USB_SERIAL_FTDI_SIO=m -# CONFIG_USB_SERIAL_FUNSOFT is not set -CONFIG_USB_SERIAL_VISOR=m -CONFIG_USB_SERIAL_IPAQ=m -CONFIG_USB_SERIAL_IR=m -CONFIG_USB_SERIAL_EDGEPORT=m -CONFIG_USB_SERIAL_EDGEPORT_TI=m -CONFIG_USB_SERIAL_GARMIN=m -CONFIG_USB_SERIAL_IPW=m -CONFIG_USB_SERIAL_KEYSPAN_PDA=m -CONFIG_USB_SERIAL_KEYSPAN=m -CONFIG_USB_SERIAL_KEYSPAN_MPR=y -CONFIG_USB_SERIAL_KEYSPAN_USA28=y -CONFIG_USB_SERIAL_KEYSPAN_USA28X=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y -CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y -CONFIG_USB_SERIAL_KEYSPAN_USA19=y -CONFIG_USB_SERIAL_KEYSPAN_USA18X=y -CONFIG_USB_SERIAL_KEYSPAN_USA19W=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y -CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y -CONFIG_USB_SERIAL_KEYSPAN_USA49W=y -CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y -CONFIG_USB_SERIAL_KLSI=m -CONFIG_USB_SERIAL_KOBIL_SCT=m -CONFIG_USB_SERIAL_MCT_U232=m -CONFIG_USB_SERIAL_MOS7720=m -CONFIG_USB_SERIAL_MOS7840=m -CONFIG_USB_SERIAL_NAVMAN=m -CONFIG_USB_SERIAL_PL2303=m -CONFIG_USB_SERIAL_OTI6858=m -CONFIG_USB_SERIAL_HP4X=m -CONFIG_USB_SERIAL_SAFE=m -CONFIG_USB_SERIAL_SAFE_PADDED=y -CONFIG_USB_SERIAL_SIERRAWIRELESS=m -CONFIG_USB_SERIAL_TI=m -CONFIG_USB_SERIAL_CYBERJACK=m -CONFIG_USB_SERIAL_XIRCOM=m -CONFIG_USB_SERIAL_OPTION=m -CONFIG_USB_SERIAL_OMNINET=m -# CONFIG_USB_SERIAL_DEBUG is not set -CONFIG_USB_EZUSB=y - -# -# USB Miscellaneous drivers -# -CONFIG_USB_EMI62=m -CONFIG_USB_EMI26=m -CONFIG_USB_ADUTUX=m -CONFIG_USB_AUERSWALD=m -CONFIG_USB_RIO500=m -CONFIG_USB_LEGOTOWER=m -CONFIG_USB_LCD=m -CONFIG_USB_BERRY_CHARGE=m -CONFIG_USB_LED=m -CONFIG_USB_CYPRESS_CY7C63=m -CONFIG_USB_CYTHERM=m -CONFIG_USB_PHIDGET=m -CONFIG_USB_PHIDGETKIT=m -CONFIG_USB_PHIDGETMOTORCONTROL=m -CONFIG_USB_PHIDGETSERVO=m -CONFIG_USB_IDMOUSE=m -CONFIG_USB_FTDI_ELAN=m -CONFIG_USB_APPLEDISPLAY=m -CONFIG_USB_SISUSBVGA=m -# CONFIG_USB_SISUSBVGA_CON is not set -CONFIG_USB_LD=m -CONFIG_USB_TRANCEVIBRATOR=m -CONFIG_USB_IOWARRIOR=m -# CONFIG_USB_TEST is not set - -# -# USB DSL modem support -# -CONFIG_USB_ATM=m -CONFIG_USB_SPEEDTOUCH=m -CONFIG_USB_CXACRU=m -CONFIG_USB_UEAGLEATM=m -CONFIG_USB_XUSBATM=m - -# -# USB Gadget Support -# -# CONFIG_USB_GADGET is not set -CONFIG_MMC=m -# CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set - -# -# MMC/SD Card Drivers -# -CONFIG_MMC_BLOCK=m -CONFIG_MMC_BLOCK_BOUNCE=y - -# -# MMC/SD Host Controller Drivers -# -# CONFIG_MMC_SDHCI is not set -CONFIG_MMC_WBSD=m -CONFIG_MMC_TIFM_SD=m -CONFIG_NEW_LEDS=y -CONFIG_LEDS_CLASS=m - -# -# LED drivers -# -CONFIG_LEDS_NET48XX=m -CONFIG_LEDS_WRAP=m - -# -# LED Triggers -# -CONFIG_LEDS_TRIGGERS=y -CONFIG_LEDS_TRIGGER_TIMER=m -CONFIG_LEDS_TRIGGER_IDE_DISK=y -CONFIG_LEDS_TRIGGER_HEARTBEAT=m -CONFIG_INFINIBAND=m -CONFIG_INFINIBAND_USER_MAD=m -CONFIG_INFINIBAND_USER_ACCESS=m -CONFIG_INFINIBAND_USER_MEM=y -CONFIG_INFINIBAND_ADDR_TRANS=y -CONFIG_INFINIBAND_MTHCA=m -CONFIG_INFINIBAND_MTHCA_DEBUG=y -CONFIG_INFINIBAND_AMSO1100=m -# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set -CONFIG_INFINIBAND_CXGB3=m -# CONFIG_INFINIBAND_CXGB3_DEBUG is not set -CONFIG_MLX4_INFINIBAND=m -CONFIG_INFINIBAND_IPOIB=m -# CONFIG_INFINIBAND_IPOIB_CM is not set -CONFIG_INFINIBAND_IPOIB_DEBUG=y -# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set -# CONFIG_INFINIBAND_SRP is not set -# CONFIG_INFINIBAND_ISER is not set -# CONFIG_EDAC is not set -CONFIG_RTC_LIB=m -CONFIG_RTC_CLASS=m - -# -# RTC interfaces -# -CONFIG_RTC_INTF_SYSFS=y -CONFIG_RTC_INTF_PROC=y -CONFIG_RTC_INTF_DEV=y -CONFIG_RTC_INTF_DEV_UIE_EMUL=y -# CONFIG_RTC_DRV_TEST is not set - -# -# I2C RTC drivers -# -CONFIG_RTC_DRV_DS1307=m -CONFIG_RTC_DRV_DS1672=m -CONFIG_RTC_DRV_MAX6900=m -CONFIG_RTC_DRV_RS5C372=m -CONFIG_RTC_DRV_ISL1208=m -CONFIG_RTC_DRV_X1205=m -CONFIG_RTC_DRV_PCF8563=m -CONFIG_RTC_DRV_PCF8583=m -CONFIG_RTC_DRV_M41T80=m -CONFIG_RTC_DRV_M41T80_WDT=y - -# -# SPI RTC drivers -# -CONFIG_RTC_DRV_RS5C348=m -CONFIG_RTC_DRV_MAX6902=m - -# -# Platform RTC drivers -# -CONFIG_RTC_DRV_CMOS=m -CONFIG_RTC_DRV_DS1553=m -CONFIG_RTC_DRV_STK17TA8=m -CONFIG_RTC_DRV_DS1742=m -CONFIG_RTC_DRV_M48T86=m -CONFIG_RTC_DRV_M48T59=m -CONFIG_RTC_DRV_V3020=m - -# -# on-CPU RTC drivers -# - -# -# DMA Engine support -# -CONFIG_DMA_ENGINE=y - -# -# DMA Clients -# -CONFIG_NET_DMA=y - -# -# DMA Devices -# -CONFIG_INTEL_IOATDMA=m -CONFIG_AUXDISPLAY=y -CONFIG_KS0108=m -CONFIG_KS0108_PORT=0x378 -CONFIG_KS0108_DELAY=2 -CONFIG_CFAG12864B=m -CONFIG_CFAG12864B_RATE=20 -CONFIG_VIRTUALIZATION=y -CONFIG_KVM=m -CONFIG_KVM_INTEL=m -CONFIG_KVM_AMD=m - -# -# Userspace I/O -# -CONFIG_UIO=m -CONFIG_UIO_CIF=m -# CONFIG_LGUEST is not set - -# -# File systems -# -CONFIG_EXT2_FS=y -CONFIG_EXT2_FS_XATTR=y -CONFIG_EXT2_FS_POSIX_ACL=y -CONFIG_EXT2_FS_SECURITY=y -CONFIG_EXT2_FS_XIP=y -CONFIG_FS_XIP=y -CONFIG_EXT3_FS=m -CONFIG_EXT3_FS_XATTR=y -CONFIG_EXT3_FS_POSIX_ACL=y -CONFIG_EXT3_FS_SECURITY=y -# CONFIG_EXT4DEV_FS is not set -CONFIG_JBD=m -CONFIG_JBD_DEBUG=y -CONFIG_FS_MBCACHE=y -CONFIG_REISERFS_FS=m -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set -CONFIG_REISERFS_FS_XATTR=y -CONFIG_REISERFS_FS_POSIX_ACL=y -CONFIG_REISERFS_FS_SECURITY=y -CONFIG_JFS_FS=m -CONFIG_JFS_POSIX_ACL=y -CONFIG_JFS_SECURITY=y -# CONFIG_JFS_DEBUG is not set -CONFIG_JFS_STATISTICS=y -CONFIG_FS_POSIX_ACL=y -CONFIG_XFS_FS=m -CONFIG_XFS_QUOTA=y -CONFIG_XFS_SECURITY=y -CONFIG_XFS_POSIX_ACL=y -CONFIG_XFS_RT=y -CONFIG_GFS2_FS=m -CONFIG_GFS2_FS_LOCKING_NOLOCK=m -CONFIG_GFS2_FS_LOCKING_DLM=m -CONFIG_OCFS2_FS=m -# CONFIG_OCFS2_DEBUG_MASKLOG is not set -CONFIG_MINIX_FS=y -CONFIG_ROMFS_FS=m -CONFIG_INOTIFY=y -CONFIG_INOTIFY_USER=y -CONFIG_QUOTA=y -CONFIG_QFMT_V1=m -CONFIG_QFMT_V2=m -CONFIG_QUOTACTL=y -CONFIG_DNOTIFY=y -CONFIG_AUTOFS_FS=m -CONFIG_AUTOFS4_FS=m -CONFIG_FUSE_FS=m -CONFIG_GENERIC_ACL=y - -# -# CD-ROM/DVD Filesystems -# -CONFIG_ISO9660_FS=y -CONFIG_JOLIET=y -CONFIG_ZISOFS=y -CONFIG_UDF_FS=m -CONFIG_UDF_NLS=y - -# -# DOS/FAT/NT Filesystems -# -CONFIG_FAT_FS=m -CONFIG_MSDOS_FS=m -CONFIG_VFAT_FS=m -CONFIG_FAT_DEFAULT_CODEPAGE=437 -CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -CONFIG_NTFS_FS=m -# CONFIG_NTFS_DEBUG is not set -CONFIG_NTFS_RW=y - -# -# Pseudo filesystems -# -CONFIG_PROC_FS=y -CONFIG_PROC_KCORE=y -CONFIG_PROC_SYSCTL=y -CONFIG_SYSFS=y -CONFIG_TMPFS=y -CONFIG_TMPFS_POSIX_ACL=y -CONFIG_HUGETLBFS=y -CONFIG_HUGETLB_PAGE=y -CONFIG_RAMFS=y -CONFIG_CONFIGFS_FS=m - -# -# Miscellaneous filesystems -# -CONFIG_ADFS_FS=m -# CONFIG_ADFS_FS_RW is not set -CONFIG_AFFS_FS=m -CONFIG_ECRYPT_FS=m -CONFIG_HFS_FS=m -CONFIG_HFSPLUS_FS=m -CONFIG_BEFS_FS=m -# CONFIG_BEFS_DEBUG is not set -CONFIG_BFS_FS=m -CONFIG_EFS_FS=m -CONFIG_JFFS2_FS=m -CONFIG_JFFS2_FS_DEBUG=0 -CONFIG_JFFS2_FS_WRITEBUFFER=y -# CONFIG_JFFS2_SUMMARY is not set -# CONFIG_JFFS2_FS_XATTR is not set -CONFIG_JFFS2_COMPRESSION_OPTIONS=y -CONFIG_JFFS2_ZLIB=y -CONFIG_JFFS2_RTIME=y -# CONFIG_JFFS2_RUBIN is not set -# CONFIG_JFFS2_CMODE_NONE is not set -CONFIG_JFFS2_CMODE_PRIORITY=y -# CONFIG_JFFS2_CMODE_SIZE is not set -CONFIG_CRAMFS=m -CONFIG_VXFS_FS=m -CONFIG_HPFS_FS=m -CONFIG_QNX4FS_FS=m -CONFIG_SYSV_FS=m -CONFIG_UFS_FS=m -# CONFIG_UFS_FS_WRITE is not set -# CONFIG_UFS_DEBUG is not set - -# -# Network File Systems -# -CONFIG_NFS_FS=y -CONFIG_NFS_V3=y -CONFIG_NFS_V3_ACL=y -CONFIG_NFS_V4=y -CONFIG_NFS_DIRECTIO=y -CONFIG_NFSD=m -CONFIG_NFSD_V2_ACL=y -CONFIG_NFSD_V3=y -CONFIG_NFSD_V3_ACL=y -CONFIG_NFSD_V4=y -CONFIG_NFSD_TCP=y -CONFIG_LOCKD=y -CONFIG_LOCKD_V4=y -CONFIG_EXPORTFS=m -CONFIG_NFS_ACL_SUPPORT=y -CONFIG_NFS_COMMON=y -CONFIG_SUNRPC=y -CONFIG_SUNRPC_GSS=y -# CONFIG_SUNRPC_BIND34 is not set -CONFIG_RPCSEC_GSS_KRB5=y -CONFIG_RPCSEC_GSS_SPKM3=m -CONFIG_SMB_FS=m -CONFIG_SMB_NLS_DEFAULT=y -CONFIG_SMB_NLS_REMOTE="cp850" -CONFIG_CIFS=m -CONFIG_CIFS_STATS=y -# CONFIG_CIFS_STATS2 is not set -CONFIG_CIFS_WEAK_PW_HASH=y -CONFIG_CIFS_XATTR=y -CONFIG_CIFS_POSIX=y -# CONFIG_CIFS_DEBUG2 is not set -# CONFIG_CIFS_EXPERIMENTAL is not set -CONFIG_NCP_FS=m -CONFIG_NCPFS_PACKET_SIGNING=y -CONFIG_NCPFS_IOCTL_LOCKING=y -CONFIG_NCPFS_STRONG=y -CONFIG_NCPFS_NFS_NS=y -CONFIG_NCPFS_OS2_NS=y -CONFIG_NCPFS_SMALLDOS=y -CONFIG_NCPFS_NLS=y -CONFIG_NCPFS_EXTRAS=y -CONFIG_CODA_FS=m -# CONFIG_CODA_FS_OLD_API is not set -CONFIG_AFS_FS=m -# CONFIG_AFS_DEBUG is not set -CONFIG_9P_FS=m - -# -# Partition Types -# -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -CONFIG_OSF_PARTITION=y -# CONFIG_AMIGA_PARTITION is not set -CONFIG_ATARI_PARTITION=y -CONFIG_MAC_PARTITION=y -CONFIG_MSDOS_PARTITION=y -CONFIG_BSD_DISKLABEL=y -# CONFIG_MINIX_SUBPARTITION is not set -CONFIG_SOLARIS_X86_PARTITION=y -CONFIG_UNIXWARE_DISKLABEL=y -CONFIG_LDM_PARTITION=y -# CONFIG_LDM_DEBUG is not set -CONFIG_SGI_PARTITION=y -CONFIG_ULTRIX_PARTITION=y -CONFIG_SUN_PARTITION=y -CONFIG_KARMA_PARTITION=y -CONFIG_EFI_PARTITION=y -CONFIG_SYSV68_PARTITION=y - -# -# Native Language Support -# -CONFIG_NLS=y -CONFIG_NLS_DEFAULT="utf8" -CONFIG_NLS_CODEPAGE_437=m -CONFIG_NLS_CODEPAGE_737=m -CONFIG_NLS_CODEPAGE_775=m -CONFIG_NLS_CODEPAGE_850=m -CONFIG_NLS_CODEPAGE_852=m -CONFIG_NLS_CODEPAGE_855=m -CONFIG_NLS_CODEPAGE_857=m -CONFIG_NLS_CODEPAGE_860=m -CONFIG_NLS_CODEPAGE_861=m -CONFIG_NLS_CODEPAGE_862=m -CONFIG_NLS_CODEPAGE_863=m -CONFIG_NLS_CODEPAGE_864=m -CONFIG_NLS_CODEPAGE_865=m -CONFIG_NLS_CODEPAGE_866=m -CONFIG_NLS_CODEPAGE_869=m -CONFIG_NLS_CODEPAGE_936=m -CONFIG_NLS_CODEPAGE_950=m -CONFIG_NLS_CODEPAGE_932=m -CONFIG_NLS_CODEPAGE_949=m -CONFIG_NLS_CODEPAGE_874=m -CONFIG_NLS_ISO8859_8=m -CONFIG_NLS_CODEPAGE_1250=m -CONFIG_NLS_CODEPAGE_1251=m -CONFIG_NLS_ASCII=m -CONFIG_NLS_ISO8859_1=m -CONFIG_NLS_ISO8859_2=m -CONFIG_NLS_ISO8859_3=m -CONFIG_NLS_ISO8859_4=m -CONFIG_NLS_ISO8859_5=m -CONFIG_NLS_ISO8859_6=m -CONFIG_NLS_ISO8859_7=m -CONFIG_NLS_ISO8859_9=m -CONFIG_NLS_ISO8859_13=m -CONFIG_NLS_ISO8859_14=m -CONFIG_NLS_ISO8859_15=m -CONFIG_NLS_KOI8_R=m -CONFIG_NLS_KOI8_U=m -CONFIG_NLS_UTF8=m - -# -# Distributed Lock Manager -# -CONFIG_DLM=m -CONFIG_DLM_DEBUG=y -CONFIG_INSTRUMENTATION=y -CONFIG_PROFILING=y -CONFIG_OPROFILE=m -# CONFIG_KPROBES is not set - -# -# Kernel hacking -# -CONFIG_TRACE_IRQFLAGS_SUPPORT=y -# CONFIG_PRINTK_TIME is not set -CONFIG_ENABLE_MUST_CHECK=y -CONFIG_MAGIC_SYSRQ=y -CONFIG_UNUSED_SYMBOLS=y -CONFIG_DEBUG_FS=y -# CONFIG_HEADERS_CHECK is not set -CONFIG_DEBUG_KERNEL=y -# CONFIG_DEBUG_SHIRQ is not set -CONFIG_DETECT_SOFTLOCKUP=y -CONFIG_SCHED_DEBUG=y -# CONFIG_SCHEDSTATS is not set -# CONFIG_TIMER_STATS is not set -# CONFIG_DEBUG_SLAB is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_RT_MUTEX_TESTER is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_LOCK_STAT is not set -# CONFIG_DEBUG_SPINLOCK_SLEEP is not set -# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set -# CONFIG_DEBUG_KOBJECT is not set -# CONFIG_DEBUG_HIGHMEM is not set -CONFIG_DEBUG_BUGVERBOSE=y -# CONFIG_DEBUG_INFO is not set -# CONFIG_DEBUG_VM is not set -# CONFIG_DEBUG_LIST is not set -# CONFIG_FRAME_POINTER is not set -# CONFIG_FORCED_INLINING is not set -# CONFIG_RCU_TORTURE_TEST is not set -# CONFIG_FAULT_INJECTION is not set -CONFIG_EARLY_PRINTK=y -CONFIG_DEBUG_STACKOVERFLOW=y -# CONFIG_DEBUG_STACK_USAGE is not set - -# -# Page alloc debug is incompatible with Software Suspend on i386 -# -# CONFIG_DEBUG_RODATA is not set -# CONFIG_4KSTACKS is not set -CONFIG_X86_FIND_SMP_CONFIG=y -CONFIG_X86_MPPARSE=y -CONFIG_DOUBLEFAULT=y - -# -# Security options -# -CONFIG_KEYS=y -# CONFIG_KEYS_DEBUG_PROC_KEYS is not set -CONFIG_SECURITY=y -CONFIG_SECURITY_NETWORK=y -# CONFIG_SECURITY_NETWORK_XFRM is not set -CONFIG_SECURITY_CAPABILITIES=m -CONFIG_SECURITY_ROOTPLUG=m -CONFIG_SECURITY_SELINUX=y -CONFIG_SECURITY_SELINUX_BOOTPARAM=y -CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0 -CONFIG_SECURITY_SELINUX_DISABLE=y -CONFIG_SECURITY_SELINUX_DEVELOP=y -CONFIG_SECURITY_SELINUX_AVC_STATS=y -CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 -# CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT is not set -# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set -CONFIG_XOR_BLOCKS=m -CONFIG_ASYNC_CORE=m -CONFIG_ASYNC_MEMCPY=m -CONFIG_ASYNC_XOR=m -CONFIG_CRYPTO=y -CONFIG_CRYPTO_ALGAPI=y -CONFIG_CRYPTO_ABLKCIPHER=m -CONFIG_CRYPTO_BLKCIPHER=y -CONFIG_CRYPTO_HASH=y -CONFIG_CRYPTO_MANAGER=y -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_NULL=m -CONFIG_CRYPTO_MD4=m -CONFIG_CRYPTO_MD5=y -CONFIG_CRYPTO_SHA1=m -CONFIG_CRYPTO_SHA256=m -CONFIG_CRYPTO_SHA512=m -CONFIG_CRYPTO_WP512=m -CONFIG_CRYPTO_TGR192=m -CONFIG_CRYPTO_GF128MUL=m -CONFIG_CRYPTO_ECB=m -CONFIG_CRYPTO_CBC=y -CONFIG_CRYPTO_PCBC=m -CONFIG_CRYPTO_LRW=m -CONFIG_CRYPTO_CRYPTD=m -CONFIG_CRYPTO_DES=y -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m -CONFIG_CRYPTO_TWOFISH_586=m -CONFIG_CRYPTO_SERPENT=m -CONFIG_CRYPTO_AES=m -CONFIG_CRYPTO_AES_586=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_DEFLATE=m -CONFIG_CRYPTO_MICHAEL_MIC=m -CONFIG_CRYPTO_CRC32C=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_TEST=m -CONFIG_CRYPTO_HW=y -CONFIG_CRYPTO_DEV_PADLOCK=m -CONFIG_CRYPTO_DEV_PADLOCK_AES=m -CONFIG_CRYPTO_DEV_PADLOCK_SHA=m -CONFIG_CRYPTO_DEV_GEODE=m - -# -# Library routines -# -CONFIG_BITREVERSE=y -CONFIG_CRC_CCITT=m -CONFIG_CRC16=m -CONFIG_CRC_ITU_T=m -CONFIG_CRC32=y -CONFIG_CRC7=m -CONFIG_LIBCRC32C=m -CONFIG_AUDIT_GENERIC=y -CONFIG_ZLIB_INFLATE=y -CONFIG_ZLIB_DEFLATE=m -CONFIG_GENERIC_ALLOCATOR=y -CONFIG_REED_SOLOMON=m -CONFIG_REED_SOLOMON_DEC16=y -CONFIG_TEXTSEARCH=y -CONFIG_TEXTSEARCH_KMP=m -CONFIG_TEXTSEARCH_BM=m -CONFIG_TEXTSEARCH_FSM=m -CONFIG_PLIST=y -CONFIG_HAS_IOMEM=y -CONFIG_HAS_IOPORT=y -CONFIG_HAS_DMA=y -CONFIG_CHECK_SIGNATURE=y -CONFIG_GENERIC_HARDIRQS=y -CONFIG_GENERIC_IRQ_PROBE=y -CONFIG_GENERIC_PENDING_IRQ=y -CONFIG_X86_SMP=y -CONFIG_X86_HT=y -CONFIG_X86_BIOS_REBOOT=y -CONFIG_X86_TRAMPOLINE=y -CONFIG_KTIME_SCALAR=y From be5770f6d51c4d4ed62b54ac9e56ce37a0c463b7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 00:54:42 +0000 Subject: [PATCH 067/320] Option for perlBindings in subversion svn path=/nixpkgs/branches/stdenv-updates/; revision=9873 --- pkgs/top-level/all-packages.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 207965a62174..9ad5f88ab4b2 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3947,6 +3947,7 @@ rec { inherit fetchurl stdenv apr aprutil neon expat swig zlib; bdbSupport = true; httpServer = false; + perlBindings = getConfig ["subversion" "perlBindings"] false; sslSupport = true; compressionSupport = true; httpd = apacheHttpd; From 183940edd3b717f7ee8cb8ce75dd656f257331f0 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:05:39 +0000 Subject: [PATCH 068/320] Not yet working nfs-utils with dependency svn path=/nixpkgs/branches/stdenv-updates/; revision=9874 --- pkgs/os-specific/linux/nfs-utils/default.nix | 17 ++++++++++ .../os-specific/linux/tcp-wrapper/default.nix | 26 ++++++++++++++++ pkgs/top-level/all-packages.nix | 31 ++++++++++++------- 3 files changed, 62 insertions(+), 12 deletions(-) create mode 100644 pkgs/os-specific/linux/nfs-utils/default.nix create mode 100644 pkgs/os-specific/linux/tcp-wrapper/default.nix diff --git a/pkgs/os-specific/linux/nfs-utils/default.nix b/pkgs/os-specific/linux/nfs-utils/default.nix new file mode 100644 index 000000000000..5240bba5d14a --- /dev/null +++ b/pkgs/os-specific/linux/nfs-utils/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "nfs-utils-1.1.1"; + + src = args.fetchurl { + url = mirror://sourceforge/nfs/nfs-utils-1.1.1.tar.gz; + sha256 = "0aa434cv7lgbrhks0rzhwxvbk2zsa17kjwxqjrrh87zrv9d2sr1x"; + }; + + buildInputs =(with args; [kernelHeaders tcp_wrapper]); + + meta = { + description = "nfs utils"; + homepage = http://nfs.sourceforge.net/; + license = "GPL2"; + }; +} diff --git a/pkgs/os-specific/linux/tcp-wrapper/default.nix b/pkgs/os-specific/linux/tcp-wrapper/default.nix new file mode 100644 index 000000000000..35c68a6d9a49 --- /dev/null +++ b/pkgs/os-specific/linux/tcp-wrapper/default.nix @@ -0,0 +1,26 @@ +args: +args.stdenv.mkDerivation { + name = "tcp-wrappers-7.6"; + + src = args.fetchurl { + url = http://ftp.debian.org/debian/pool/main/t/tcp-wrappers/tcp-wrappers_7.6.dbs.orig.tar.gz; + sha256 = "0k68ziinx6biwar5lcb9jvv0rp6b3vmj6861n75bvrz4w1piwkdp"; + }; + + # we need to set REAL_DAEMON_DIR somehow. I'm getting compilation errors + # I've managed to compile tcpd manually using + # make CFLAGS='-DSYS_ERRLIST_DEFINED=1 -Dvsyslog=1' tcpd + # see Makefile target all for details + + postUnpack="cd upstream/tarballs; tar xfz *; cd tcp_wrappers_7.6; + sed -i -e 's=#REAL_DAEMON_DIR=/usr/sbin=REAL_DAEMON_DIR=/usr/sbin=' Makefile + "; + + buildPhase=" + make CFLAGS='-DSYS_ERRLIST_DEFINED=1 -Dvsyslog=1' tcpd + " + + buildInputs =(with args; [kernelHeaders gnused]); + + # meta = ... +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9ad5f88ab4b2..de5df53468a7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1185,24 +1185,22 @@ rec { perl = if !stdenv.isLinux then sysPerl else realPerl; # FIXME: unixODBC needs patching on Darwin (see darwinports) - php = import ../development/interpreters/php { - inherit stdenv fetchurl flex bison libxml2 apacheHttpd; - unixODBC = - if stdenv.isDarwin then null else unixODBC; - }; + #php = import ../development/interpreters/php { + #inherit stdenv fetchurl flex bison libxml2 apacheHttpd; + #unixODBC = + #if stdenv.isDarwin then null else unixODBC; + #}; # FIXME somehow somewhen: We need to recompile php if the ini file changes because the only way to # tell the apache module where to look for this file is using a compile time flag ;-( # perhaps this can be done setting php_value in apache don't have time to investigate any further ? # This expression is a quick hack now. But perhaps it helps you adding the configuration flags you need? - /* - php_unstable = (import ../development/interpreters/php_configurable) { - inherit mkDerivationByConfiguration stdenv; + php = (import ../development/interpreters/php_configurable) { + inherit mkDerivationByConfiguration; lib = lib_unstable; inherit fetchurl flex bison apacheHttpd mysql; # gettext; inherit libxml2; }; - */ python = getVersion "python" python_alts; @@ -2796,9 +2794,11 @@ rec { inherit fetchurl stdenv; }; - #nfsUtils = import ../os-specific/linux/nfs-utils { - # inherit fetchurl stdenv; - #}; + /* + nfsUtils = import ../os-specific/linux/nfs-utils { + inherit fetchurl stdenv kernelHeaders tcp_wrapper; + }; + */ alsaLib = import ../os-specific/linux/alsa/library { inherit fetchurl stdenv; @@ -3158,6 +3158,13 @@ rec { withoutInitTools = true; }; + /* + # needed for nfs utils + tcp_wrapper = import ../os-specific/linux/tcp-wrapper { + inherit fetchurl stdenv kernelHeaders gnused; + }; + */ + udev = import ../os-specific/linux/udev { inherit fetchurl stdenv; }; From d477d95f3138176c2bdf014fe3a0d6d034515085 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:05:50 +0000 Subject: [PATCH 069/320] This is a quote from http://www.johannes-bauer.com/xpdf/xpdf.php, any moral issues can be posted on the mailing list ;) "If you are the proud owner of a proprietary PDF-Creator like "Adobe Acrobat" you probably have noticed that it gives you the option to make the resulting PDF protected in a way that you cannot copy any text from it or that you cannot extract the pictures within. What a nice little feature. Now what this technically does is to set a flag in the PDF telling the reader program "Please don't let the mean user copy any content from me! ". However, the whole process relies on the reader progam (like "Adobe Acrobat Reader" or "xpdf", in our case) to obey the request of the PDF creator. Now at this point, xpdf really pissed me off. Because it really does obey the completely non-sensical request of the PDF creator. Probably because of some legal trouble which Adobe might give them if they did not obey it. But logically there is absolutely no reason to restrict the extraction of text of graphical images from a PDF file. Text I could read and type it in again. Pictures I could photograph off my PC screen. It's completely moronic. It's Adobe. Plus some people at my college think it's protecting their documents well. They seem to believe that content which is made for education should under no circumstances leak to the outside - somebody could maybe learn something! It would be a disaster! It is obvious they're morons. This patch just proves my point." svn path=/nixpkgs/branches/stdenv-updates/; revision=9875 --- pkgs/applications/misc/xpdf/default.nix | 1 + .../misc/xpdf/xpdf-3.02-protection.patch | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch diff --git a/pkgs/applications/misc/xpdf/default.nix b/pkgs/applications/misc/xpdf/default.nix index bdaad1851dd7..fc79703d8770 100644 --- a/pkgs/applications/misc/xpdf/default.nix +++ b/pkgs/applications/misc/xpdf/default.nix @@ -24,6 +24,7 @@ stdenv.mkDerivation { url = ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.02pl1.patch; sha256 = "1wxv9l0d2kkwi961ihpdwi75whdvk7cgqxkbfym8cjj11fq17xjq"; }) + ./xpdf-3.02-protection.patch ]; configureFlags = diff --git a/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch b/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch new file mode 100644 index 000000000000..598fc6dbd073 --- /dev/null +++ b/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch @@ -0,0 +1,74 @@ +diff -C 3 -r orig/xpdf/pdfimages.cc xpdf-3.02/xpdf/pdfimages.cc +*** orig/xpdf/pdfimages.cc 2007-02-27 23:05:52.000000000 +0100 +--- xpdf-3.02/xpdf/pdfimages.cc 2007-10-31 20:17:22.601449943 +0100 +*************** +*** 118,130 **** + goto err1; + } + +- // check for copy permission +- if (!doc->okToCopy()) { +- error(-1, "Copying of images from this document is not allowed."); +- exitCode = 3; +- goto err1; +- } +- + // get page range + if (firstPage < 1) + firstPage = 1; +--- 118,123 ---- +diff -C 3 -r orig/xpdf/pdftotext.cc xpdf-3.02/xpdf/pdftotext.cc +*** orig/xpdf/pdftotext.cc 2007-02-27 23:05:52.000000000 +0100 +--- xpdf-3.02/xpdf/pdftotext.cc 2007-10-31 20:17:34.392224196 +0100 +*************** +*** 160,172 **** + goto err2; + } + +- // check for copy permission +- if (!doc->okToCopy()) { +- error(-1, "Copying of text from this document is not allowed."); +- exitCode = 3; +- goto err2; +- } +- + // construct text file name + if (argc == 3) { + textFileName = new GString(argv[2]); +--- 160,165 ---- +diff -C 3 -r orig/xpdf/XPDFCore.cc xpdf-3.02/xpdf/XPDFCore.cc +*** orig/xpdf/XPDFCore.cc 2007-02-27 23:05:52.000000000 +0100 +--- xpdf-3.02/xpdf/XPDFCore.cc 2007-10-31 20:18:05.370494431 +0100 +*************** +*** 384,394 **** + #ifndef NO_TEXT_SELECT + if (selectULX != selectLRX && + selectULY != selectLRY) { +! if (doc->okToCopy()) { +! copySelection(); +! } else { +! error(-1, "Copying of text from this document is not allowed."); +! } + } + #endif + } +--- 384,390 ---- + #ifndef NO_TEXT_SELECT + if (selectULX != selectLRX && + selectULY != selectLRY) { +! copySelection(); + } + #endif + } +*************** +*** 407,415 **** + int pg; + double ulx, uly, lrx, lry; + +- if (!doc->okToCopy()) { +- return; +- } + if (getSelection(&pg, &ulx, &uly, &lrx, &lry)) { + //~ for multithreading: need a mutex here + if (currentSelection) { +--- 403,408 ---- From 637cb977e50fb5774803cee02eac65466a599cdd Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:06:08 +0000 Subject: [PATCH 070/320] ntfs progs added svn path=/nixpkgs/branches/stdenv-updates/; revision=9876 --- pkgs/misc/ntfsprogs/default.nix | 18 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 22 insertions(+) create mode 100644 pkgs/misc/ntfsprogs/default.nix diff --git a/pkgs/misc/ntfsprogs/default.nix b/pkgs/misc/ntfsprogs/default.nix new file mode 100644 index 000000000000..6e79ea61d89e --- /dev/null +++ b/pkgs/misc/ntfsprogs/default.nix @@ -0,0 +1,18 @@ +args: +args.stdenv.mkDerivation { + name = "ntfsprogs-2.0.0"; + + src = args.fetchurl { + name = "ntfsprogs-2.0.0.tar.bz2"; + url = "http://garr.dl.sourceforge.net/sourceforge/linux-ntfs/ntfsprogs-2.0.0.tar.bz2"; + sha256 = "ad36e19706c7303b10aa0a9bf2c2dd0309b91cd0171f1c9eb361d94a85017432"; + }; + + buildInputs =(with args; []); + + meta = { + description = "ntfs utilities"; + homepage = http://sourceforge.net/projects/linux-ntfs; + license = "GPL"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index de5df53468a7..35c6823e41de 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4390,6 +4390,10 @@ rec { inherit fetchurl stdenv fuse pkgconfig; }; + ntfprogs = import ../misc/ntfsprogs { + inherit fetchurl stdenv; + }; + pgf = import ../misc/tex/pgf { inherit fetchurl stdenv; }; From a5916ba7da844a7f39964f9c8a797e9206f20fb8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:06:17 +0000 Subject: [PATCH 071/320] typo (ntfprogs -> ntfsprogs svn path=/nixpkgs/branches/stdenv-updates/; revision=9877 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 35c6823e41de..1ef5b2ad6664 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4390,7 +4390,7 @@ rec { inherit fetchurl stdenv fuse pkgconfig; }; - ntfprogs = import ../misc/ntfsprogs { + ntfsprogs = import ../misc/ntfsprogs { inherit fetchurl stdenv; }; From d3884ed14ddcb33f2f1a74edf6a2fffbffbb85d8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:06:33 +0000 Subject: [PATCH 072/320] Added Firefox 3 beta 1 (Minefield) svn path=/nixpkgs/branches/stdenv-updates/; revision=9878 --- .../networking/browsers/firefox3b1/builder.sh | 30 ++++++++++ .../browsers/firefox3b1/default.nix | 57 +++++++++++++++++++ .../browsers/firefox3b1/writable-copies.patch | 23 ++++++++ .../browsers/firefox3b1/xlibs.patch | 10 ++++ pkgs/top-level/all-packages.nix | 11 ++++ 5 files changed, 131 insertions(+) create mode 100644 pkgs/applications/networking/browsers/firefox3b1/builder.sh create mode 100644 pkgs/applications/networking/browsers/firefox3b1/default.nix create mode 100644 pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch create mode 100644 pkgs/applications/networking/browsers/firefox3b1/xlibs.patch diff --git a/pkgs/applications/networking/browsers/firefox3b1/builder.sh b/pkgs/applications/networking/browsers/firefox3b1/builder.sh new file mode 100644 index 000000000000..66f1059d657f --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox3b1/builder.sh @@ -0,0 +1,30 @@ +source $stdenv/setup + +postInstall=postInstall +postInstall() { + + # Strip some more stuff + strip -S $out/lib/*/* || true + + # This fixes starting Firefox when there already is a running + # instance. The `firefox' wrapper script actually expects to be + # in the same directory as `run-mozilla.sh', apparently. + libDir=$(cd $out/lib && ls -d firefox-*) + test -n "$libDir" + cd $out/bin + mv firefox ../lib/$libDir/ + ln -s ../lib/$libDir/firefox . + + # Register extensions etc. + echo "running firefox -register..." + (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false + + echo "running regxpcom..." + (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./regxpcom) || false + + # Put the Firefox icon in the right place. + ensureDir $out/lib/$libDir/chrome/icons/default + ln -s ../../../icons/default.xpm $out/lib/$libDir/chrome/icons/default/ +} + +genericBuild diff --git a/pkgs/applications/networking/browsers/firefox3b1/default.nix b/pkgs/applications/networking/browsers/firefox3b1/default.nix new file mode 100644 index 000000000000..834376bb160c --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox3b1/default.nix @@ -0,0 +1,57 @@ +args: with args; + +stdenv.mkDerivation { + name = "firefox-3b1"; + + src = + fetchurl { + url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b1/source/firefox-3.0b1-source.tar.bz2; + sha256 = "02mh87aidr33gp33fasq9xx23jqf7lm7yfsb2a36ijnd3bpnssn9"; + }; + + buildInputs = [ + pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo + python curl coreutils + ]; + + configureFlags = [ + "--enable-application=browser" + "--enable-optimize" + "--disable-debug" + "--enable-xft" + "--disable-freetype2" + "--enable-svg" + "--enable-canvas" + "--enable-strip" + "--enable-default-toolkit=cairo-gtk2" + "--with-system-jpeg" + "--with-system-zlib" + /*"--enable-system-cairo"*/ + ] +; + + postConfigure = " + cp -r . /tmp/ff3b1-build + "; + + postInstall = " + sed -e 's@moz_libdir=.*@&\\nexport PATH=\$PATH:${coreutils}/bin@' -i \$out/bin/firefox + sed -e 's@`/bin/pwd@`${coreutils}/bin/pwd@' -i \$out/bin/firefox + sed -e 's@`/bin/ls@`${coreutils}/bin/ls@' -i \$out/bin/firefox + + strip -S \$out/lib/*/* || true + + libDir=\$(cd \$out/lib && ls -d firefox-[0-9]*) + test -n \"\$libDir\" + + echo \"running firefox -register...\" + (cd \$out/lib/\$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false + "; + + meta = { + description = "Mozilla Firefox - the browser, reloaded"; + }; + + passthru = {inherit gtk;}; +} + diff --git a/pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch b/pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch new file mode 100644 index 000000000000..e3c7752c0310 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox3b1/writable-copies.patch @@ -0,0 +1,23 @@ +diff -rc mozilla-orig/xpcom/io/nsLocalFileUnix.cpp mozilla/xpcom/io/nsLocalFileUnix.cpp +*** mozilla-orig/xpcom/io/nsLocalFileUnix.cpp 2004-04-03 01:48:18.000000000 +0200 +--- mozilla/xpcom/io/nsLocalFileUnix.cpp 2004-10-05 19:48:04.000000000 +0200 +*************** +*** 634,639 **** +--- 634,640 ---- + // get the dirs old permissions + if (NS_FAILED(rv = GetPermissions(&oldPerms))) + return rv; ++ oldPerms |= 0200; + if (NS_FAILED(rv = newParent->Create(DIRECTORY_TYPE, oldPerms))) + return rv; + } else { // dir exists lets try to use leaf +*************** +*** 758,763 **** +--- 759,765 ---- + // get the old permissions + PRUint32 myPerms; + GetPermissions(&myPerms); ++ myPerms |= 0200; + + // Create the new file with the old file's permissions, even if write + // permission is missing. We can't create with write permission and diff --git a/pkgs/applications/networking/browsers/firefox3b1/xlibs.patch b/pkgs/applications/networking/browsers/firefox3b1/xlibs.patch new file mode 100644 index 000000000000..a656fbf9beb4 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox3b1/xlibs.patch @@ -0,0 +1,10 @@ +--- mozilla/layout/build/Makefile.in.orig 2007-01-13 14:23:19.000000000 -0200 ++++ mozilla/layout/build/Makefile.in 2007-01-13 14:24:55.000000000 -0200 +@@ -282,5 +282,6 @@ LDFLAGS += -Wl,-LD_LAYOUT:lgot_buffer=50 + endif + endif + ++LDFLAGS += -lX11 -lXrender + + export:: $(BUILD_DATE) + \ No newline at end of file diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1ef5b2ad6664..71317d25ed46 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3544,6 +3544,17 @@ rec { firefoxWrapper = wrapFirefox firefox; + firefox3b1 = lowPrio (import ../applications/networking/browsers/firefox3b1 { + inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo + python curl coreutils; + inherit (gtkLibs) gtk; + inherit (gnome) libIDL; + inherit (xlibs) libXi; + #enableOfficialBranding = true; + }); + + firefox3b1Wrapper = wrapFirefox firefox3b1; + flac = import ../applications/audio/flac { inherit fetchurl stdenv libogg; }; From f0405cf74f6120ec8068429dd5542c3a5016d229 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:06:54 +0000 Subject: [PATCH 073/320] Added fbpanel - desktop panel. svn path=/nixpkgs/branches/stdenv-updates/; revision=9879 --- .../window-managers/fbpanel/4.12.nix | 22 +++++++++++++++++++ .../window-managers/fbpanel/default.nix | 2 ++ pkgs/top-level/all-packages.nix | 8 +++++++ 3 files changed, 32 insertions(+) create mode 100644 pkgs/applications/window-managers/fbpanel/4.12.nix create mode 100644 pkgs/applications/window-managers/fbpanel/default.nix diff --git a/pkgs/applications/window-managers/fbpanel/4.12.nix b/pkgs/applications/window-managers/fbpanel/4.12.nix new file mode 100644 index 000000000000..4e08102af80a --- /dev/null +++ b/pkgs/applications/window-managers/fbpanel/4.12.nix @@ -0,0 +1,22 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://garr.dl.sourceforge.net/sourceforge/fbpanel/fbpanel-4.12.tgz; + sha256 = "0zv0zkq6w4h7dk0ji8bm9cqpj2qxv3ss161mqg9y68shvxvmfrlz"; + }; + + buildInputs = [libX11 gtk pkgconfig libXmu libXpm + libpng libjpeg libtiff librsvg]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "fbpanel"; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Just a desktop panel. +"; + }; +} diff --git a/pkgs/applications/window-managers/fbpanel/default.nix b/pkgs/applications/window-managers/fbpanel/default.nix new file mode 100644 index 000000000000..c8e4bcf95456 --- /dev/null +++ b/pkgs/applications/window-managers/fbpanel/default.nix @@ -0,0 +1,2 @@ +args : +(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 71317d25ed46..ae7af0bf3ab6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3521,6 +3521,14 @@ rec { xftSupport = true; }; + fbpanelFun = lib.sumArgs (import ../applications/window-managers/fbpanel) { + inherit fetchurl stdenv builderDefs pkgconfig libpng libjpeg libtiff librsvg; + inherit (gtkLibs) gtk; + inherit (xlibs) libX11 libXmu libXpm; + }; + + fbpanel = fbpanelFun {version="4.12";} null; + fetchmail = import ../applications/misc/fetchmail { inherit stdenv fetchurl; }; From 356c077ecf267499281d4f8f2daaeb9ea2c4ef7f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:07:13 +0000 Subject: [PATCH 074/320] Added XScreensaver; also changed version-stub.nix (now it does sumArgs itself, and requires builderDefs to be used) and added a merge of composing-builder and declarative flag processing. svn path=/nixpkgs/branches/stdenv-updates/; revision=9880 --- .../graphics/xscreensaver/5.04.nix | 38 +++++++++++++++++++ .../graphics/xscreensaver/default.nix | 9 +++++ pkgs/lib/default.nix | 3 ++ pkgs/top-level/all-packages.nix | 13 +++++++ pkgs/top-level/builder-defs.nix | 28 +++++++++++++- pkgs/top-level/template-composing+config.nix | 22 +++++++++++ pkgs/top-level/version-stub.nix | 9 ++++- 7 files changed, 119 insertions(+), 3 deletions(-) create mode 100644 pkgs/applications/graphics/xscreensaver/5.04.nix create mode 100644 pkgs/applications/graphics/xscreensaver/default.nix create mode 100644 pkgs/top-level/template-composing+config.nix diff --git a/pkgs/applications/graphics/xscreensaver/5.04.nix b/pkgs/applications/graphics/xscreensaver/5.04.nix new file mode 100644 index 000000000000..132bf997e18c --- /dev/null +++ b/pkgs/applications/graphics/xscreensaver/5.04.nix @@ -0,0 +1,38 @@ +args : with args; with builderDefs (args // { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.jwz.org/xscreensaver/xscreensaver-5.04.tar.gz; + sha256 = "1mx6zc6rvb6pr9wb6mv4ljiii9ybw0dshd74aclf7rlmfx4hn86i"; + }; + useConfig = true; + reqsList = [ + ["true" "libX11" "gtk" "pkgconfig" "bc" "perl" "intltool" "libXmu"] + ["GL" "mesa"] + ["GUI" "gtk" "libxml2" "libglade"] + ["jpeg" "libjpeg"] + ["false"] + ]; + configFlags = [ + "GL" " --with-gl " + "gdkpixbuf" " --with-pixbuf " + "DPMS" " --with-dpms " + "true" (" --with-x-app-defaults=\$out/share/xscreensaver/app-defaults "+ + " --with-hackdir=\$out/share/xscreensaver-hacks ") + ]; + }) null; /* null is a terminator for sumArgs */ +let + preConfigure = FullDepEntry (" + sed -e 's%@GTK_DATADIR@%@datadir@% ; s%@PO_DATADIR@%@datadir@%' "+ + "-i driver/Makefile.in po/Makefile.in.in; + ") [minInit doUnpack]; +in +stdenv.mkDerivation rec { + name = "xscreensaver-"+version; + builder = writeScript (name + "-builder") + (textClosure [preConfigure doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + The X screensaver daemon. Run xscreensaver-demo to configure. +"; + }; +} diff --git a/pkgs/applications/graphics/xscreensaver/default.nix b/pkgs/applications/graphics/xscreensaver/default.nix new file mode 100644 index 000000000000..2fd30577441f --- /dev/null +++ b/pkgs/applications/graphics/xscreensaver/default.nix @@ -0,0 +1,9 @@ +let + realPath=y: (__toPath ((toString ./JustNothing/.. )+"/"+y.version+".nix")); + dispatch=(x: ((import (realPath x)) x)); +in +args : +with args; +with builderDefs {src="";} null; +let eater=(lib.sumArgs dispatch args); in +eater diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 87948ad2f6f5..71803a9e3352 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -249,4 +249,7 @@ rec { innerModifySumArgs f x (a // b); modifySumArgs = f: x: innerModifySumArgs f x {}; + debugVal = if builtins ? trace then x: (builtins.trace x x) else x: x; + debugXMLVal = if builtins ? trace then x: (builtins.trace (builtins.toXML x) x) else x: x; + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ae7af0bf3ab6..70ff51407e68 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4134,6 +4134,19 @@ rec { base14Fonts = "${ghostscript}/share/ghostscript/fonts"; }; + xscreensaverFun = import ../applications/graphics/xscreensaver { + inherit stdenv fetchurl builderDefs lib pkgconfig bc perl intltool; + inherit (xlibs) libX11 libXmu; + }; + + xscreensaver = xscreensaverFun { + version = "5.04"; + flags = ["GL" "gdkpixbuf" "DPMS" "gui" "jpeg"]; + inherit mesa libxml2 libjpeg; + inherit (gtkLibs) gtk; + inherit (gnome) libglade; + } null; + xterm = import ../applications/misc/xterm { inherit fetchurl stdenv ncurses; inherit (xlibs) libXaw xproto libXt libX11 libSM libICE; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index ae5224f71011..01940499d610 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -186,7 +186,7 @@ args: with args; with stringsWithDeps; with lib; ) [minInit]; doConfigure = FullDepEntry (" - ./configure --prefix=\"\$prefix\" ${toString (getAttr ["configureFlags"] "" args)} + ./configure --prefix=\"\$prefix\" ${toString configureFlags} ") [minInit addInputs doUnpack]; doAutotools = FullDepEntry (" @@ -200,7 +200,7 @@ args: with args; with stringsWithDeps; with lib; ")[minInit addInputs doUnpack]; doMake = FullDepEntry (" - make ${toString (getAttr ["makeFlags"] "" args)} + make ${toString makeFlags} ") [minInit addInputs doUnpack]; doUnpack = toSrcDir (toString src); @@ -269,4 +269,28 @@ args: with args; with stringsWithDeps; with lib; textClosure = textClosureMap makeNest; inherit noDepEntry FullDepEntry PackEntry; + + defList = (getAttr ["defList"] [] args); + getVal = getValue args defList; + check = checkFlag args; + reqsList = getAttr ["reqsList"] [] args; + buildInputsNames = filter (x: (null != getVal x)) + (uniqList {inputList = + (concatLists (map + (x:(if (x==[]) then [] else builtins.tail x)) + reqsList));}); + configFlags = getAttr ["configFlags"] [] args; + buildFlags = getAttr ["buildFlags"] [] args; + nameSuffixes = getAttr ["nameSuffixes"] [] args; + autoBuildInputs = assert (checkReqs args defList reqsList); + filter (x: x!=null) (map getVal buildInputsNames); + autoConfigureFlags = condConcat "" configFlags check; + autoMakeFlags = condConcat "" buildFlags check; + useConfig = getAttr ["useConfig"] false args; + buildInputs = if useConfig then autoBuildInputs else getAttr ["buildInputs"] [] args; + configureFlags = if useConfig then autoConfigureFlags else + getAttr ["configureFlags"] "" args; + makeFlags = if useConfig then autoMakeFlags else getAttr ["makeFlags"] "" args; + + inherit lib; }) // args diff --git a/pkgs/top-level/template-composing+config.nix b/pkgs/top-level/template-composing+config.nix new file mode 100644 index 000000000000..df751f693f23 --- /dev/null +++ b/pkgs/top-level/template-composing+config.nix @@ -0,0 +1,22 @@ +args : with args; with builderDefs (args // { + src = /* put a fetchurl here */ + (abort "Specify source"); + useConfig = true; + reqsList = [ + ["true" ] + ["false"] + ]; + /* List consisiting of an even number of strings; "key" "value" */ + configFlags = [ + ]; + }) null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "${(abort "Specify name")}"+version; + builder = writeScript (name + "-builder") + (textClosure [(abort "Check phases") doMakeInstall doForceShare doPropagate]); + meta = { + description = " + ${(abort "Specify description")} +"; + }; +} diff --git a/pkgs/top-level/version-stub.nix b/pkgs/top-level/version-stub.nix index c8e4bcf95456..2fd30577441f 100644 --- a/pkgs/top-level/version-stub.nix +++ b/pkgs/top-level/version-stub.nix @@ -1,2 +1,9 @@ +let + realPath=y: (__toPath ((toString ./JustNothing/.. )+"/"+y.version+".nix")); + dispatch=(x: ((import (realPath x)) x)); +in args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args +with args; +with builderDefs {src="";} null; +let eater=(lib.sumArgs dispatch args); in +eater From 0e7e524cf30b663aa84ba72e461baa9031daa9eb Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:07:25 +0000 Subject: [PATCH 075/320] * Work around an impurity in APR: don't detect the epoll() system call, because then an Apache built on a 2.6 kernel won't work on 2.4 kernel. In fact Apache will get into a loop segfaulting. svn path=/nixpkgs/branches/stdenv-updates/; revision=9881 --- pkgs/servers/http/apache-httpd/default.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkgs/servers/http/apache-httpd/default.nix b/pkgs/servers/http/apache-httpd/default.nix index 2f33b4d497f3..92a442728d8a 100644 --- a/pkgs/servers/http/apache-httpd/default.nix +++ b/pkgs/servers/http/apache-httpd/default.nix @@ -21,6 +21,13 @@ stdenv.mkDerivation { openssl = if sslSupport then openssl else null; db4 = if db4Support then db4 else null; + # For now, disable detection of epoll to ensure that Apache still + # runs on Linux 2.4 kernels. Once we've dropped support for 2.4 in + # Nixpkgs, this can go. In general, it's a problem that APR + # detects characteristics of the build system's kernel to decide + # what to use at runtime, since it's impure. + apr_cv_epoll = "no"; + meta = { description = "Apache HTTPD, the world's most popular web server"; }; From f1f5b31c0c0a30fb496a09b9d1b78e1773ad4a99 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:07:38 +0000 Subject: [PATCH 076/320] * Enable GD support in Nagios. svn path=/nixpkgs/branches/stdenv-updates/; revision=9882 --- pkgs/servers/monitoring/nagios/default.nix | 6 ++++-- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pkgs/servers/monitoring/nagios/default.nix b/pkgs/servers/monitoring/nagios/default.nix index 8a24e9dfaa41..dba063bb1069 100644 --- a/pkgs/servers/monitoring/nagios/default.nix +++ b/pkgs/servers/monitoring/nagios/default.nix @@ -1,4 +1,6 @@ -{ stdenv, fetchurl, perl }: +{ stdenv, fetchurl, perl, gdSupport ? false +, gd ? null, libpng ? null, zlib ? null +}: stdenv.mkDerivation { name = "nagios-2.10"; @@ -9,7 +11,7 @@ stdenv.mkDerivation { }; patches = [./nagios.patch]; - buildInputs = [perl]; + buildInputs = [perl] ++ (if gdSupport then [gd libpng zlib] else []); buildFlags = "all"; installTargets = "install install-config"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 70ff51407e68..e7c1421af95b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2746,7 +2746,8 @@ rec { }; nagios = import ../servers/monitoring/nagios { - inherit fetchurl stdenv perl; + inherit fetchurl stdenv perl gd libpng zlib; + gdSupport = true; }; nagiosPluginsOfficial = import ../servers/monitoring/nagios/plugins/official { From d1cc8aafd0cad1369ae114d8c8678a972bb3ee70 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:08:12 +0000 Subject: [PATCH 077/320] * Nix 0.10 compatibility. svn path=/nixpkgs/branches/stdenv-updates/; revision=9883 --- pkgs/development/compilers/ghcs/default.nix | 6 ++--- pkgs/top-level/all-packages.nix | 30 ++++++++++++--------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/pkgs/development/compilers/ghcs/default.nix b/pkgs/development/compilers/ghcs/default.nix index c3a46968880d..c026a860d40c 100644 --- a/pkgs/development/compilers/ghcs/default.nix +++ b/pkgs/development/compilers/ghcs/default.nix @@ -43,14 +43,14 @@ # used to automatically get dependencies ( used for core_libs ) # TODO use kind of state and evaluate deps of a dep only once resolveDeps = ghc : libs : - let attrs = __listToAttrs libs; in + let attrs = builtins.listToAttrs libs; in rec { # using undocumented feature that attribute can contain hyphens when using listToAttrs # You should be able to get the attribute values using __getAttr - result = __listToAttrs (map ( l : lib.av l.name ( + result = builtins.listToAttrs (map ( l : lib.av l.name ( packageByPackageDB ghc l.name ("lib/ghc-${ghc.version}/${l.name}.conf") - (map (n: __getAttr n result) l.deps) + (map (n: builtins.getAttr n result) l.deps) ) ) libs ); }.result; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e7c1421af95b..37ba6cb3a5c7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -196,10 +196,13 @@ rec { meta = (if drv ? meta then drv.meta else {}) // {priority = "10";}; }; - mkDerivationByConfiguration = { flagConfig ? {}, optionals ? [], defaults ? [], - extraAttrs, collectExtraPhaseActions ? []} : + mkDerivationByConfiguration = + assert builtins ? isAttrs; + { flagConfig ? {}, optionals ? [], defaults ? [] + , extraAttrs, collectExtraPhaseActions ? [] + }: args: with args.lib; with args; - if ( __isAttrs extraAttrs ) then builtins.throw "the argument extraAttrs needs to be a function beeing passed co, but attribute set passed " + if ( builtins.isAttrs extraAttrs ) then builtins.throw "the argument extraAttrs needs to be a function beeing passed co, but attribute set passed " else let co = chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in args.stdenv.mkDerivation ( @@ -938,11 +941,13 @@ rec { { ghcPkgUtil = ../development/libraries/haskell/generic/ghcPkgUtil.sh; } "mkdir -p $out/nix-support; cp $ghcPkgUtil \$out/nix-support/setup-hook;"; - ghcsAndLibs = recurseIntoAttrs (import ../development/compilers/ghcs { - inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline stdenv; + ghcsAndLibs = + assert builtins ? listToAttrs; + recurseIntoAttrs (import ../development/compilers/ghcs { + inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline; inherit ghcPkgUtil; lib = lib_unstable; - }); + }); # creates ghc-X-wl wich adds the passed libraries to the env var GHC_PACKAGE_PATH createGhcWrapper = { ghcPackagedLibs ? false, ghc, libraries, name, suffix ? "ghc_wrapper_${ghc.name}" } : @@ -1185,11 +1190,11 @@ rec { perl = if !stdenv.isLinux then sysPerl else realPerl; # FIXME: unixODBC needs patching on Darwin (see darwinports) - #php = import ../development/interpreters/php { - #inherit stdenv fetchurl flex bison libxml2 apacheHttpd; - #unixODBC = - #if stdenv.isDarwin then null else unixODBC; - #}; + phpOld = import ../development/interpreters/php { + inherit stdenv fetchurl flex bison libxml2 apacheHttpd; + unixODBC = + if stdenv.isDarwin then null else unixODBC; + }; # FIXME somehow somewhen: We need to recompile php if the ini file changes because the only way to # tell the apache module where to look for this file is using a compile time flag ;-( @@ -1198,7 +1203,8 @@ rec { php = (import ../development/interpreters/php_configurable) { inherit mkDerivationByConfiguration; lib = lib_unstable; - inherit fetchurl flex bison apacheHttpd mysql; # gettext; + inherit fetchurl flex bison apacheHttpd; # gettext; + mysql = mysql5; inherit libxml2; }; From 7aea2477a178ca64e7d52092ee6383286b16ade4 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:08:29 +0000 Subject: [PATCH 078/320] Added possibility to make suffixed wrapped firefoxes. Yes, to have beta&release at once. svn path=/nixpkgs/branches/stdenv-updates/; revision=9884 --- .../networking/browsers/firefox-wrapper/builder.sh | 2 +- .../networking/browsers/firefox-wrapper/default.nix | 4 +++- pkgs/top-level/all-packages.nix | 8 ++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/pkgs/applications/networking/browsers/firefox-wrapper/builder.sh b/pkgs/applications/networking/browsers/firefox-wrapper/builder.sh index 6abbf1a760ba..4e2f1c5e8f13 100644 --- a/pkgs/applications/networking/browsers/firefox-wrapper/builder.sh +++ b/pkgs/applications/networking/browsers/firefox-wrapper/builder.sh @@ -1,7 +1,7 @@ source $stdenv/setup source $makeWrapper -makeWrapper "$firefox/bin/firefox" "$out/bin/firefox" \ +makeWrapper "$firefox/bin/firefox" "$out/bin/firefox$nameSuffix" \ --suffix-each MOZ_PLUGIN_PATH ':' "$plugins" \ --suffix-contents LD_LIBRARY_PATH ':' "$(filterExisting $(addSuffix /extra-library-path $plugins))" \ --suffix-contents PATH ':' "$(filterExisting $(addSuffix /extra-bin-path $plugins))" diff --git a/pkgs/applications/networking/browsers/firefox-wrapper/default.nix b/pkgs/applications/networking/browsers/firefox-wrapper/default.nix index 7229f510829c..0b1756f21f23 100644 --- a/pkgs/applications/networking/browsers/firefox-wrapper/default.nix +++ b/pkgs/applications/networking/browsers/firefox-wrapper/default.nix @@ -1,4 +1,4 @@ -{stdenv, firefox, plugins}: +args: with args; stdenv.mkDerivation { name = firefox.name + "-with-plugins"; @@ -8,6 +8,8 @@ stdenv.mkDerivation { inherit firefox; + nameSuffix = (if args ? nameSuffix then args.nameSuffix else ""); + # Let each plugin tell us (through its `mozillaPlugin') attribute # where to find the plugin in its tree. plugins = map (x: x + x.mozillaPlugin) plugins; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 37ba6cb3a5c7..e060e0973b63 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3557,7 +3557,7 @@ rec { #enableOfficialBranding = true; }); - firefoxWrapper = wrapFirefox firefox; + firefoxWrapper = wrapFirefox firefox ""; firefox3b1 = lowPrio (import ../applications/networking/browsers/firefox3b1 { inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo @@ -3568,7 +3568,7 @@ rec { #enableOfficialBranding = true; }); - firefox3b1Wrapper = wrapFirefox firefox3b1; + firefox3b1Wrapper = wrapFirefox firefox3b1 ""; flac = import ../applications/audio/flac { inherit fetchurl stdenv libogg; @@ -4088,8 +4088,8 @@ rec { includeUnpack = getConfig ["stdenv" "includeUnpack"] false; }; - wrapFirefox = firefox: import ../applications/networking/browsers/firefox-wrapper { - inherit stdenv firefox; + wrapFirefox = firefox: nameSuffix: import ../applications/networking/browsers/firefox-wrapper { + inherit stdenv firefox nameSuffix; plugins = [] ++ lib.optional (system == "i686-linux") flashplayer # RealPlayer is disabled by default for legal reasons. From ec6a614c1ec8639baf7987788315b6acd6c9a9c5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:08:37 +0000 Subject: [PATCH 079/320] Added indent svn path=/nixpkgs/branches/stdenv-updates/; revision=9885 --- pkgs/development/tools/misc/indent/2.2.9.nix | 28 +++++++++++++++++++ .../development/tools/misc/indent/default.nix | 9 ++++++ pkgs/top-level/all-packages.nix | 8 ++++++ 3 files changed, 45 insertions(+) create mode 100644 pkgs/development/tools/misc/indent/2.2.9.nix create mode 100644 pkgs/development/tools/misc/indent/default.nix diff --git a/pkgs/development/tools/misc/indent/2.2.9.nix b/pkgs/development/tools/misc/indent/2.2.9.nix new file mode 100644 index 000000000000..d7e91abcf83b --- /dev/null +++ b/pkgs/development/tools/misc/indent/2.2.9.nix @@ -0,0 +1,28 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = ftp://ftp.gnu.org/gnu/indent/indent-2.2.9.tar.gz; + sha256 = "0rp4divzv5xyflm8ixpp2isa092n0nmhgmhvz56db7k3lnyqg4qb"; + }; + + buildInputs = []; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +let + preBuild = FullDepEntry (" + sed -e '/extern FILE [*]output/i#ifndef OUTPUT_DEFINED_ELSEWHERE' -i src/indent.h + sed -e '/extern FILE [*]output/a#endif' -i src/indent.h + sed -e '1i#define OUTPUT_DEFINED_ELSEWHERE 1' -i src/output.c + ") [minInit doUnpack]; +in +stdenv.mkDerivation rec { + name = "indent"; + builder = writeScript (name + "-builder") + (textClosure [doConfigure preBuild doMakeInstall doForceShare doPropagate]); + meta = { + description = " + GNU Indent - a source text formatter. +"; + }; +} diff --git a/pkgs/development/tools/misc/indent/default.nix b/pkgs/development/tools/misc/indent/default.nix new file mode 100644 index 000000000000..2fd30577441f --- /dev/null +++ b/pkgs/development/tools/misc/indent/default.nix @@ -0,0 +1,9 @@ +let + realPath=y: (__toPath ((toString ./JustNothing/.. )+"/"+y.version+".nix")); + dispatch=(x: ((import (realPath x)) x)); +in +args : +with args; +with builderDefs {src="";} null; +let eater=(lib.sumArgs dispatch args); in +eater diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e060e0973b63..24efa75a5408 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1406,6 +1406,14 @@ rec { inherit fetchurl stdenv perl perlXMLSimple; }; + indentFun = import ../development/tools/misc/indent { + inherit fetchurl stdenv builderDefs; + }; + + indent = indentFun { + version = "2.2.9"; + } null; + jikespg = import ../development/tools/parsing/jikespg { inherit fetchurl stdenv; }; From 3896cd4a28fab5dfa790d139e2a1616fae3741b3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:09:00 +0000 Subject: [PATCH 080/320] * Get rid of the `(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix")))' hack, you can also just write `import (./path/to/pkg + "/${version}.nix)'. svn path=/nixpkgs/branches/stdenv-updates/; revision=9886 --- pkgs/applications/graphics/gocr/default.nix | 2 - .../graphics/xscreensaver/default.nix | 9 -- .../compiz-fusion/bcop/default.nix | 2 - .../compiz-fusion/ccsm/default.nix | 2 - .../compiz-fusion/compiz-manager/default.nix | 2 - .../compizconfig-python/default.nix | 2 - .../compiz-fusion/config-backend/default.nix | 2 - .../window-managers/compiz-fusion/default.nix | 17 ++-- .../compiz-fusion/extra/default.nix | 2 - .../compiz-fusion/libcompizconfig/default.nix | 2 - .../compiz-fusion/main/default.nix | 2 - .../window-managers/compiz/default.nix | 2 - .../window-managers/fbpanel/default.nix | 2 - pkgs/development/compilers/qi/default.nix | 2 - .../interpreters/pyrex/default.nix | 2 - .../development/tools/misc/indent/default.nix | 9 -- .../tools/misc/intltool/default.nix | 2 - pkgs/top-level/all-packages.nix | 85 +++++++++---------- pkgs/top-level/version-stub.nix | 9 -- 19 files changed, 50 insertions(+), 107 deletions(-) delete mode 100644 pkgs/applications/graphics/gocr/default.nix delete mode 100644 pkgs/applications/graphics/xscreensaver/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/bcop/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/ccsm/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/compiz-manager/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/compizconfig-python/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/config-backend/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/extra/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/libcompizconfig/default.nix delete mode 100644 pkgs/applications/window-managers/compiz-fusion/main/default.nix delete mode 100644 pkgs/applications/window-managers/compiz/default.nix delete mode 100644 pkgs/applications/window-managers/fbpanel/default.nix delete mode 100644 pkgs/development/compilers/qi/default.nix delete mode 100644 pkgs/development/interpreters/pyrex/default.nix delete mode 100644 pkgs/development/tools/misc/indent/default.nix delete mode 100644 pkgs/development/tools/misc/intltool/default.nix delete mode 100644 pkgs/top-level/version-stub.nix diff --git a/pkgs/applications/graphics/gocr/default.nix b/pkgs/applications/graphics/gocr/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/graphics/gocr/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/graphics/xscreensaver/default.nix b/pkgs/applications/graphics/xscreensaver/default.nix deleted file mode 100644 index 2fd30577441f..000000000000 --- a/pkgs/applications/graphics/xscreensaver/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -let - realPath=y: (__toPath ((toString ./JustNothing/.. )+"/"+y.version+".nix")); - dispatch=(x: ((import (realPath x)) x)); -in -args : -with args; -with builderDefs {src="";} null; -let eater=(lib.sumArgs dispatch args); in -eater diff --git a/pkgs/applications/window-managers/compiz-fusion/bcop/default.nix b/pkgs/applications/window-managers/compiz-fusion/bcop/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/bcop/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/ccsm/default.nix b/pkgs/applications/window-managers/compiz-fusion/ccsm/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/ccsm/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/compiz-manager/default.nix b/pkgs/applications/window-managers/compiz-fusion/compiz-manager/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/compiz-manager/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/default.nix b/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/config-backend/default.nix b/pkgs/applications/window-managers/compiz-fusion/config-backend/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/config-backend/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/default.nix b/pkgs/applications/window-managers/compiz-fusion/default.nix index 156d3d281d7d..589b77d0f239 100644 --- a/pkgs/applications/window-managers/compiz-fusion/default.nix +++ b/pkgs/applications/window-managers/compiz-fusion/default.nix @@ -1,13 +1,14 @@ args : with args; rec { - bcop = import ./bcop args; - libcompizconfig = import ./libcompizconfig (args // {inherit bcop;}); - configBackendGConf = import ./config-backend (args // {inherit bcop libcompizconfig;}); - compizConfigPython = import ./compizconfig-python (args // {inherit libcompizconfig + selectVersion = dir: import (dir + "/${args.version}.nix"); + bcop = selectVersion ./bcop args; + libcompizconfig = selectVersion ./libcompizconfig (args // {inherit bcop;}); + configBackendGConf = selectVersion ./config-backend (args // {inherit bcop libcompizconfig;}); + compizConfigPython = selectVersion ./compizconfig-python (args // {inherit libcompizconfig bcop pyrex configBackendGConf;}); - ccsm = import ./ccsm (args // {inherit libcompizconfig bcop compizConfigPython configBackendGConf;}); - pluginsMain = import ./main (args //{inherit bcop ;}); - pluginsExtra = import ./extra (args //{inherit bcop pluginsMain;}); - compizManager = import ./compiz-manager (args // {inherit bcop ccsm;}); + ccsm = selectVersion ./ccsm (args // {inherit libcompizconfig bcop compizConfigPython configBackendGConf;}); + pluginsMain = selectVersion ./main (args //{inherit bcop ;}); + pluginsExtra = selectVersion ./extra (args //{inherit bcop pluginsMain;}); + compizManager = selectVersion ./compiz-manager (args // {inherit bcop ccsm;}); } diff --git a/pkgs/applications/window-managers/compiz-fusion/extra/default.nix b/pkgs/applications/window-managers/compiz-fusion/extra/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/extra/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/default.nix b/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz-fusion/main/default.nix b/pkgs/applications/window-managers/compiz-fusion/main/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz-fusion/main/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/compiz/default.nix b/pkgs/applications/window-managers/compiz/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/compiz/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/applications/window-managers/fbpanel/default.nix b/pkgs/applications/window-managers/fbpanel/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/applications/window-managers/fbpanel/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/development/compilers/qi/default.nix b/pkgs/development/compilers/qi/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/development/compilers/qi/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/development/interpreters/pyrex/default.nix b/pkgs/development/interpreters/pyrex/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/development/interpreters/pyrex/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/development/tools/misc/indent/default.nix b/pkgs/development/tools/misc/indent/default.nix deleted file mode 100644 index 2fd30577441f..000000000000 --- a/pkgs/development/tools/misc/indent/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -let - realPath=y: (__toPath ((toString ./JustNothing/.. )+"/"+y.version+".nix")); - dispatch=(x: ((import (realPath x)) x)); -in -args : -with args; -with builderDefs {src="";} null; -let eater=(lib.sumArgs dispatch args); in -eater diff --git a/pkgs/development/tools/misc/intltool/default.nix b/pkgs/development/tools/misc/intltool/default.nix deleted file mode 100644 index c8e4bcf95456..000000000000 --- a/pkgs/development/tools/misc/intltool/default.nix +++ /dev/null @@ -1,2 +0,0 @@ -args : -(import (__toPath ((toString ./JustNothing/.. )+"/"+args.version+".nix"))) args diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 24efa75a5408..7b73f3fbaba7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -228,6 +228,12 @@ rec { inherit stdenv lib; }; + # Call a specific version of a Nix expression, that is, + # `selectVersion ./foo {version = "0.1.2"; args...}' evaluates to + # `import ./foo/0.1.2.nix args'. + selectVersion = dir: args: import (dir + "/${args.version}.nix") args; + + ### STANDARD ENVIRONMENT @@ -1214,16 +1220,14 @@ rec { inherit fetchurl stdenv zlib bzip2; }; - pyrexFun = lib.sumArgs (import ../development/interpreters/pyrex) { - inherit fetchurl stdenv stringsWithDeps lib builderDefs; + pyrexFun = lib.sumArgs (selectVersion ../development/interpreters/pyrex) { + inherit fetchurl stdenv stringsWithDeps lib builderDefs; python = builtins.getAttr "2.5" python_alts; }; - pyrex = pyrexFun { - version = "0.9.6"; - } null; + pyrex = pyrexFun {version = "0.9.6";} null; - QiFun = lib.sumArgs (import ../development/compilers/qi) { + QiFun = lib.sumArgs (selectVersion ../development/compilers/qi) { inherit clisp stdenv fetchurl builderDefs unzip; }; @@ -1406,7 +1410,7 @@ rec { inherit fetchurl stdenv perl perlXMLSimple; }; - indentFun = import ../development/tools/misc/indent { + indentFun = lib.sumArgs (selectVersion ../development/tools/misc/indent) { inherit fetchurl stdenv builderDefs; }; @@ -1890,9 +1894,9 @@ rec { inherit fetchurl stdenv x11 libjpeg libtiff libungif libpng bzip2; }; - intltoolFun = lib.sumArgs (import ../development/tools/misc/intltool) { - inherit fetchurl stdenv lib builderDefs stringsWithDeps - perl perlXMLParser; + intltoolFun = lib.sumArgs (selectVersion ../development/tools/misc/intltool) { + inherit fetchurl stdenv lib builderDefs stringsWithDeps + perl perlXMLParser; }; intltool = intltoolFun {version = "0.36.2";} null; @@ -3390,10 +3394,9 @@ rec { libXinerama libICE libSM libXrender xextproto; inherit (gnome) startupnotification libwnck GConf; inherit (gtkLibs) gtk; - inherit (gnome) libgnome libgnomeui metacity - glib pango libglade libgtkhtml gtkhtml - libgnomecanvas libgnomeprint - libgnomeprintui gnomepanel; + inherit (gnome) libgnome libgnomeui metacity glib pango + libglade libgtkhtml gtkhtml libgnomecanvas libgnomeprint + libgnomeprintui gnomepanel; gnomegtk = gnome.gtk; inherit librsvg fuse; }; @@ -3402,17 +3405,17 @@ rec { version = "0.6.2"; }; - compizFun = lib.sumArgs (assert mesaSupported; import ../applications/window-managers/compiz) { - inherit lib builderDefs stringsWithDeps; + compizFun = lib.sumArgs (assert mesaSupported; selectVersion ../applications/window-managers/compiz) { + inherit lib builderDefs stringsWithDeps; inherit fetchurl stdenv pkgconfig libpng mesa perl perlXMLParser libxslt; inherit (xorg) libXcomposite libXfixes libXdamage libXrandr libXinerama libICE libSM libXrender xextproto; inherit (gnome) startupnotification libwnck GConf; inherit (gtkLibs) gtk; inherit (gnome) libgnome libgnomeui metacity - glib pango libglade libgtkhtml gtkhtml - libgnomecanvas libgnomeprint - libgnomeprintui gnomepanel; + glib pango libglade libgtkhtml gtkhtml + libgnomecanvas libgnomeprint + libgnomeprintui gnomepanel; gnomegtk = gnome.gtk; inherit librsvg fuse; inherit dbus dbus_glib; @@ -3424,27 +3427,23 @@ rec { } null; compizFusion = assert mesaSupported; import ../applications/window-managers/compiz-fusion { - - version = getConfig ["compizFusion" "version"] "0.6.0" ; - inherit compiz; - - inherit stringsWithDeps lib builderDefs; - + version = getConfig ["compizFusion" "version"] "0.6.0"; + inherit compiz; + inherit stringsWithDeps lib builderDefs; inherit fetchurl stdenv pkgconfig libpng mesa perl perlXMLParser libxslt; inherit (xorg) libXcomposite libXfixes libXdamage libXrandr libXinerama libICE libSM libXrender xextproto; inherit (gnome) startupnotification libwnck GConf; inherit (gtkLibs) gtk; inherit (gnome) libgnome libgnomeui metacity - glib pango libglade libgtkhtml gtkhtml - libgnomecanvas libgnomeprint - libgnomeprintui gnomepanel gnomedesktop; + glib pango libglade libgtkhtml gtkhtml + libgnomecanvas libgnomeprint + libgnomeprintui gnomepanel gnomedesktop; gnomegtk = gnome.gtk; inherit librsvg fuse dbus dbus_glib git; - - inherit automake autoconf libtool intltool python pyrex gettext; - inherit pygtk pycairo getopt libjpeg glxinfo; - inherit (xorg) xvinfo xdpyinfo; + inherit automake autoconf libtool intltool python pyrex gettext; + inherit pygtk pycairo getopt libjpeg glxinfo; + inherit (xorg) xvinfo xdpyinfo; }; compizExtra = import ../applications/window-managers/compiz/extra.nix { @@ -3536,7 +3535,7 @@ rec { xftSupport = true; }; - fbpanelFun = lib.sumArgs (import ../applications/window-managers/fbpanel) { + fbpanelFun = lib.sumArgs (selectVersion ../applications/window-managers/fbpanel) { inherit fetchurl stdenv builderDefs pkgconfig libpng libjpeg libtiff librsvg; inherit (gtkLibs) gtk; inherit (xlibs) libX11 libXmu libXpm; @@ -3638,13 +3637,11 @@ rec { inherit (xlibs) libX11 libXext libXi libXmu; }; - gocrFun = lib.sumArgs (import ../applications/graphics/gocr) { - inherit builderDefs fetchurl stdenv; + gocrFun = lib.sumArgs (selectVersion ../applications/graphics/gocr) { + inherit builderDefs fetchurl stdenv; }; - gocr = gocrFun { - version = "0.44"; - } null; + gocr = gocrFun {version = "0.44";} null; gphoto2 = import ../applications/misc/gphoto2 { inherit fetchurl stdenv pkgconfig libgphoto2 libexif popt readline gettext; @@ -4149,17 +4146,17 @@ rec { base14Fonts = "${ghostscript}/share/ghostscript/fonts"; }; - xscreensaverFun = import ../applications/graphics/xscreensaver { + xscreensaverFun = lib.sumArgs (selectVersion ../applications/graphics/xscreensaver) { inherit stdenv fetchurl builderDefs lib pkgconfig bc perl intltool; inherit (xlibs) libX11 libXmu; }; xscreensaver = xscreensaverFun { - version = "5.04"; - flags = ["GL" "gdkpixbuf" "DPMS" "gui" "jpeg"]; - inherit mesa libxml2 libjpeg; - inherit (gtkLibs) gtk; - inherit (gnome) libglade; + version = "5.04"; + flags = ["GL" "gdkpixbuf" "DPMS" "gui" "jpeg"]; + inherit mesa libxml2 libjpeg; + inherit (gtkLibs) gtk; + inherit (gnome) libglade; } null; xterm = import ../applications/misc/xterm { diff --git a/pkgs/top-level/version-stub.nix b/pkgs/top-level/version-stub.nix deleted file mode 100644 index 2fd30577441f..000000000000 --- a/pkgs/top-level/version-stub.nix +++ /dev/null @@ -1,9 +0,0 @@ -let - realPath=y: (__toPath ((toString ./JustNothing/.. )+"/"+y.version+".nix")); - dispatch=(x: ((import (realPath x)) x)); -in -args : -with args; -with builderDefs {src="";} null; -let eater=(lib.sumArgs dispatch args); in -eater From 4dd6b835b17412c4aa441b03f676f92e97576f81 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:09:17 +0000 Subject: [PATCH 081/320] * Thunderbird 2.0.0.9. * Removed Thunderbird 1.5. svn path=/nixpkgs/branches/stdenv-updates/; revision=9887 --- .../mailreaders/thunderbird-1.x/builder.sh | 30 ------------ .../mailreaders/thunderbird-1.x/default.nix | 47 ------------------- .../mailreaders/thunderbird-2.x/default.nix | 6 +-- pkgs/top-level/all-packages.nix | 12 +---- 4 files changed, 4 insertions(+), 91 deletions(-) delete mode 100644 pkgs/applications/networking/mailreaders/thunderbird-1.x/builder.sh delete mode 100644 pkgs/applications/networking/mailreaders/thunderbird-1.x/default.nix diff --git a/pkgs/applications/networking/mailreaders/thunderbird-1.x/builder.sh b/pkgs/applications/networking/mailreaders/thunderbird-1.x/builder.sh deleted file mode 100644 index 7635910ae9fa..000000000000 --- a/pkgs/applications/networking/mailreaders/thunderbird-1.x/builder.sh +++ /dev/null @@ -1,30 +0,0 @@ -source $stdenv/setup - -postInstall=postInstall -postInstall() { - - # Strip some more stuff - strip -S $out/lib/*/* || true - - # This fixes starting Thunderbird when there already is a running - # instance. The `thunderbird' wrapper script actually expects to - # be in the same directory as `run-mozilla.sh', apparently. - libDir=$(cd $out/lib && ls -d thunderbird-*) - test -n "$libDir" - cd $out/bin - mv thunderbird ../lib/$libDir/ - ln -s ../lib/$libDir/thunderbird . - - # Register extensions etc. - echo "running thunderbird -register..." - (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./thunderbird-bin -register) || false - - echo "running regxpcom..." - (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./regxpcom) || false - - # Put the Thunderbird icon in the right place. - ensureDir $out/lib/$libDir/chrome/icons/default - ln -s ../../../icons/default.xpm $out/lib/$libDir/chrome/icons/default/ -} - -genericBuild diff --git a/pkgs/applications/networking/mailreaders/thunderbird-1.x/default.nix b/pkgs/applications/networking/mailreaders/thunderbird-1.x/default.nix deleted file mode 100644 index 2e969d205075..000000000000 --- a/pkgs/applications/networking/mailreaders/thunderbird-1.x/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, gtk, perl, zip, libIDL, libXi -, libjpeg, libpng, zlib, cairo - -, # If you want the resulting program to call itself "Thunderbird" - # instead of "Mail", enable this option. However, those - # binaries may not be distributed without permission from the - # Mozilla Foundation, see - # http://www.mozilla.org/foundation/trademarks/. - enableOfficialBranding ? false - -}: - -stdenv.mkDerivation { - name = "thunderbird-1.5.0.10"; - - builder = ./builder.sh; - src = fetchurl { - url = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5.0.10/source/thunderbird-1.5.0.10-source.tar.bz2; - sha1 = "a6467c946f9e668bcf7b3a06dcaeceb601b98fce"; - }; - - buildInputs = [ - pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo - ]; - - configureFlags = [ - "--enable-application=mail" - "--enable-optimize" - "--disable-debug" - "--enable-xft" - "--disable-freetype2" - "--enable-svg" - "--enable-canvas" - "--enable-strip" - "--enable-default-toolkit=gtk2" - "--with-system-jpeg" - "--with-system-png" - "--with-system-zlib" - "--enable-system-cairo" - "--enable-extensions=default" - ] - ++ (if enableOfficialBranding then ["--enable-official-branding"] else []); - - meta = { - description = "Mozilla Thunderbird, a full-featured email client"; - }; -} diff --git a/pkgs/applications/networking/mailreaders/thunderbird-2.x/default.nix b/pkgs/applications/networking/mailreaders/thunderbird-2.x/default.nix index bde5f6364c4d..d90d28b373cf 100644 --- a/pkgs/applications/networking/mailreaders/thunderbird-2.x/default.nix +++ b/pkgs/applications/networking/mailreaders/thunderbird-2.x/default.nix @@ -11,12 +11,12 @@ }: stdenv.mkDerivation { - name = "thunderbird-2.0.0.6"; + name = "thunderbird-2.0.0.9"; builder = ./builder.sh; src = fetchurl { - url = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.6/source/thunderbird-2.0.0.6-source.tar.bz2; - sha1 = "c38b17ad0fc51aed96bacafe3ffe7ed0edd0738c"; + url = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.9/source/thunderbird-2.0.0.9-source.tar.bz2; + sha1 = "fede9db98f25adb978b84129a6d15a4dbe6bbb3e"; }; buildInputs = [ diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7b73f3fbaba7..492265f0f9a0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4014,17 +4014,7 @@ rec { inherit (xlibs) xextproto libXtst inputproto; }; - thunderbird = thunderbird2; - - thunderbird1 = import ../applications/networking/mailreaders/thunderbird-1.x { - inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo; - inherit (gtkLibs) gtk; - inherit (gnome) libIDL; - inherit (xlibs) libXi; - #enableOfficialBranding = true; - }; - - thunderbird2 = import ../applications/networking/mailreaders/thunderbird-2.x { + thunderbird = import ../applications/networking/mailreaders/thunderbird-2.x { inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo; inherit (gtkLibs) gtk; inherit (gnome) libIDL; From c84b069866a302d9428aeda6f01a563989e83b15 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:09:23 +0000 Subject: [PATCH 082/320] squid http proxy server/client- compiles / untested svn path=/nixpkgs/branches/stdenv-updates/; revision=9888 --- pkgs/servers/squid/default.nix | 22 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/servers/squid/default.nix diff --git a/pkgs/servers/squid/default.nix b/pkgs/servers/squid/default.nix new file mode 100644 index 000000000000..6bf63ae027b3 --- /dev/null +++ b/pkgs/servers/squid/default.nix @@ -0,0 +1,22 @@ +args: +( args.mkDerivationByConfiguration { + flagConfig = { + mandatory = { buildInputs = [ "perl" ]; }; + # many options I don't know wether they should be default .. + }; + + extraAttrs = co : { + name = "squid-2.6-stable"; + + src = args.fetchurl { + url = http://www.squid-cache.org/Versions/v2/2.6/squid-2.6.STABLE16.tar.bz2; + sha256 = "1iv21a4cl74bqzrk07l0lbzlq3n9qpd0r31fgsjv2dsabj46qc4y"; + }; + + meta = { + description = "http-proxy"; + homepage = "http://www.squid-cache.org"; + license = "GPL2"; + }; + }; +} ) args diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 492265f0f9a0..c8ec1fee7d34 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2784,6 +2784,11 @@ rec { inherit stdenv fetchurl readline openldap pam; }; + squid = import ../servers/squid { + inherit fetchurl stdenv mkDerivationByConfiguration perl; + lib = lib_unstable; + }; + tomcat5 = import ../servers/http/tomcat { inherit fetchurl stdenv jdk; }; From f72d74bafc8d346d12e6f17eb767e62be5db4739 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:09:41 +0000 Subject: [PATCH 083/320] Opera updated - works now on x64-linux as well svn path=/nixpkgs/branches/stdenv-updates/; revision=9889 --- .../networking/browsers/opera/builder.sh | 11 ++++---- .../networking/browsers/opera/default.nix | 26 ++++++++++++------- pkgs/top-level/all-packages.nix | 7 ++--- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/pkgs/applications/networking/browsers/opera/builder.sh b/pkgs/applications/networking/browsers/opera/builder.sh index 26d5df1cc4dc..1de82fdfa724 100644 --- a/pkgs/applications/networking/browsers/opera/builder.sh +++ b/pkgs/applications/networking/browsers/opera/builder.sh @@ -7,6 +7,7 @@ buildPhase() { installPhase=installPhase installPhase() { + sed -i 's=/bin/pwd=pwd=' opera install.sh # Note: the "no" is because the install scripts asks whether we # want to install icons in some system-wide directories. echo no | ./install.sh --prefix=$out @@ -16,20 +17,18 @@ installPhase() { rpath="$rpath:$i/lib" done + [ -z ${system##*64*} ] && suf=64 + # !!! ugh, should fix this eventually; just make a normal gcc dependency gcc=$(cat $NIX_GCC/nix-support/orig-gcc) - rpath="$rpath:$gcc/lib" + rpath="$rpath:$libstdcpp5/lib$suf" - for i in $out/lib/opera/*/opera $out/lib/opera/plugins/opera*; do + for i in $out/lib/opera/*/opera $out/lib/opera/*/operaplugin{wrapper,cleaner}; do patchelf \ --set-interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ --set-rpath "$rpath" \ "$i" done - - # opera seems to need libnpp.so in the same path ? - # (search the opera help for libnpp.. - cp $out/lib/opera/plugins/libnpp.so $out/lib/opera/9* } genericBuild diff --git a/pkgs/applications/networking/browsers/opera/default.nix b/pkgs/applications/networking/browsers/opera/default.nix index 754a018c3286..d807add5111f 100644 --- a/pkgs/applications/networking/browsers/opera/default.nix +++ b/pkgs/applications/networking/browsers/opera/default.nix @@ -1,7 +1,6 @@ -{ stdenv, fetchurl, qt, zlib, libX11, libXext, libSM, libICE, libstdcpp5 +{ stdenv, fetchurl, qt, zlib, libX11, libXext, libSM, libICE, libstdcpp5, glibc , motif ? null, libXt ? null}: -assert stdenv.system == "i686-linux"; assert motif != null -> libXt != null; # !!! Add Xinerama and Xrandr dependencies? Or should those be in Qt? @@ -12,13 +11,22 @@ stdenv.mkDerivation rec { version = "9.24-20071015.5"; name = "opera-${version}"; - builder = ./builder.sh; - src = fetchurl { - url = ftp://ftp.task.gda.pl/pub/opera/linux/924/final/en/i386/shared/opera-9.24-20071015.5-shared-qt.i386-en.tar.bz2; - sha256 = "1frhnrp63k4lz29a8z9c99h383xrsrby432xp20hxrylh0zypzb5"; - }; + inherit libstdcpp5; + builder = ./builder.sh; + src = if (stdenv.system == "i686-linux") then + fetchurl { + url = ftp://ftp.task.gda.pl/pub/opera/linux/950b/final/en/i386/shared/opera-9.50b-20071024.5-shared-qt.i386-en.tar.bz2; + sha256 = "0vv1q86is9x6vw8fx92wrnvlyn4x29zgk9zjn66rcx37n6grqqah"; + } else if (stdenv.system == "x86_64-linux") then + fetchurl { + url = ftp://ftp.task.gda.pl/pub/opera/linux/950b/final/en/x86_64/opera-9.50-20071024.2-shared-qt.x86_64-1643.tar.bz2; + sha256 = "1gv1r18ar3vz1l24nf8qixjlba1yb5d3xvg3by41i4dy0vlznqn6"; + } else throw "unsupported platform ${stdenv.system} (only i686-linux and x86_64 linux supported yet)"; + + # operapluginwrapper seems to require libXt ? + # Adding it makes startup faster and omits error messages (on x68) libPath = - [qt motif zlib libX11 libXext libSM libICE libstdcpp5] - ++ (if motif != null then [motif libXt ] else []); + [glibc qt motif zlib libX11 libXt libXext libSM libICE libstdcpp5] + ++ (if motif != null then [motif ] else []); } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c8ec1fee7d34..57e55346aa10 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3865,11 +3865,12 @@ rec { }; opera = import ../applications/networking/browsers/opera { - inherit fetchurl stdenv zlib; + inherit fetchurl zlib glibc; + stdenv = overrideGCC stdenv gcc40; inherit (xlibs) libX11 libSM libICE libXt libXext; qt = qt3; - #motif = lesstif; - libstdcpp5 = gcc33.gcc; + #33motif = lesstif; + libstdcpp5 = (if (stdenv.system == "i686-linux") then gcc33 /* stdc++ 3.8 is used */ else gcc).gcc; }; pan = import ../applications/networking/newsreaders/pan { From 6281ec3eb81c6f2596536ec2934a093fc53f7169 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:09:57 +0000 Subject: [PATCH 084/320] fix name (was 2.16, should have been 2.17) svn path=/nixpkgs/branches/stdenv-updates/; revision=9890 --- pkgs/tools/system/which/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/system/which/default.nix b/pkgs/tools/system/which/default.nix index 6b151709b63f..482d495ba83a 100644 --- a/pkgs/tools/system/which/default.nix +++ b/pkgs/tools/system/which/default.nix @@ -1,5 +1,5 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "which-2.16"; + name = "which-2.17"; src = fetchurl { url = http://ftp.gnu.org/gnu/which/which-2.17.tar.gz; sha256 = "1nnnbn83da8481blmcyv96gm15ccsilr93fmgmwdlzj8a72fjvqp"; From 23477c16e7cf8c4b0834653415afe62493e3f0e2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:10:05 +0000 Subject: [PATCH 085/320] Using the current gcc inkscape still builds and runs on i686 but also builds on my x86_64 svn path=/nixpkgs/branches/stdenv-updates/; revision=9891 --- pkgs/top-level/all-packages.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 57e55346aa10..984d8b2ee08f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3700,12 +3700,11 @@ rec { } null; inkscape = import ../applications/graphics/inkscape { - inherit fetchurl perl perlXMLParser pkgconfig zlib + inherit fetchurl stdenv perl perlXMLParser pkgconfig zlib popt libxml2 libxslt libpng boehmgc fontconfig gtkmm glibmm libsigcxx lcms boost gettext; inherit (gtkLibs) gtk glib; inherit (xlibs) libXft; - stdenv = overrideGCC stdenv gcc34; }; ion3 = import ../applications/window-managers/ion-3 { From 06e55f1ffee68dfef3633afb357b7479a1701733 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:10:21 +0000 Subject: [PATCH 086/320] source fixed of ilmbase and openexr, blender, openal-soft added (can't compile openal yet on x64) svn path=/nixpkgs/branches/stdenv-updates/; revision=9892 --- .../libraries/openalSoft/default.nix | 24 ++++++++++++++ pkgs/top-level/all-packages.nix | 31 ++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/libraries/openalSoft/default.nix diff --git a/pkgs/development/libraries/openalSoft/default.nix b/pkgs/development/libraries/openalSoft/default.nix new file mode 100644 index 000000000000..dae9e90522cb --- /dev/null +++ b/pkgs/development/libraries/openalSoft/default.nix @@ -0,0 +1,24 @@ +args: +args.stdenv.mkDerivation { +#The current release is still in a testing phase, though it should be stable +# (neither the ABI or API will break). Please try it out and let me know how it +# works. :-) + + name = "openal-soft-testing"; + + src = args.fetchurl { + url = http://kcat.strangesoft.net/OpenAL.tar.bz2?2; + sha256 = "7b53c3e6eda1a71010651eb058c71c9b0c86b3c15cae5f0ffeeb7222531aa97d"; + }; + + buildInputs =(with args; [cmake alsaLib]); + #phases = "buildPhase installPhase"; + + buildPhase = "ensureDir \$out; cmake -DCMAKE_INSTALL_PREFIX:PATH=\$out .; make; make install;"; + + meta = { + description = "openal alternative"; + homepage = http://kcat.strangesoft.net/openal.html; + license = "GPL2"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 984d8b2ee08f..89cae494c9bf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2147,12 +2147,23 @@ rec { inherit fetchurl stdenv alsaLib autoconf automake libtool; }; + # added because I hope that it has been easier to compile on x86 (for blender) + openalSoft = import ../development/libraries/openalSoft { + inherit fetchurl stdenv alsaLib libtool cmake; + }; + openbabel = import ../development/libraries/openbabel { inherit fetchurl stdenv zlib libxml2; }; - openexr = import ../development/libraries/openexr { + openexr_1_6_1 = import ../development/libraries/openexr { inherit fetchurl stdenv ilmbase zlib pkgconfig; + version = "1.6.1"; + }; + # This older version is needed by blender (it complains about missing half.h ) + openexr_1_4_0 = import ../development/libraries/openexr { + inherit fetchurl stdenv ilmbase zlib pkgconfig; + version = "1.4.0"; }; openldap = import ../development/libraries/openldap { @@ -3359,6 +3370,24 @@ rec { # 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 = import ../development/libraries/freealut { + inherit fetchurl stdenv; + openal = openalSoft; + }; + blender = import ../applications/misc/blender { + inherit cmake mesa gettext freetype SDL libtiff fetchurl glibc scons x11 + libjpeg libpng zlib /* smpeg sdl */; + inherit (xlibs) inputproto libXi; + lib = lib_unstable; + python = python25; + freealut = freealut_soft; + openal = openalSoft; + stdenv = stdenvUsingSetupNew2; + openexr = openexr_1_4_0; + }; + bmp = import ../applications/audio/bmp { inherit fetchurl stdenv pkgconfig libogg libvorbis alsaLib id3lib; inherit (gnome) esound libglade; From 8515c1796676d1e2c1fb7a6661d73625da5705c2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:10:32 +0000 Subject: [PATCH 087/320] Added gdmap, changed builder-defs to use derivation attribute on propagatedBuildInputs, manually fixed Xorg expression problem for Compiz, various fixes. svn path=/nixpkgs/branches/stdenv-updates/; revision=9893 --- .../compiz-fusion/bcop/0.6.0.nix | 1 + .../compiz-fusion/general-dependencies.nix | 2 +- .../window-managers/compiz/0.6.2.nix | 9 ++- .../libraries/libdbi-drivers/0.8.2-1.nix | 39 +++++++++++ pkgs/development/libraries/libdbi/0.8.2.nix | 21 ++++++ .../libraries/libextractor/0.5.18.nix | 21 ++++++ .../tools/misc/intltool/0.36.2.nix | 5 +- pkgs/lib/default.nix | 8 +++ pkgs/tools/system/gdmap/0.7.5.nix | 21 ++++++ pkgs/top-level/all-packages.nix | 66 ++++++++++++++++++- pkgs/top-level/builder-defs.nix | 18 +++-- 11 files changed, 192 insertions(+), 19 deletions(-) create mode 100644 pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix create mode 100644 pkgs/development/libraries/libdbi/0.8.2.nix create mode 100644 pkgs/development/libraries/libextractor/0.5.18.nix create mode 100644 pkgs/tools/system/gdmap/0.7.5.nix diff --git a/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix index ee6fd586dfe1..1072e9b363c1 100644 --- a/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix @@ -23,6 +23,7 @@ stdenv.mkDerivation rec { builder = writeScript (name + "-builder") (textClosure [doAutotools doConfigure doMakeInstall fixPkgconfig fixInterpreter doForceShare doPropagate]); + inherit propagatedBuildInputs; meta = { description = " Compiz BCOP. diff --git a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix index 1a041eaf2d67..717d66e2c29b 100644 --- a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix +++ b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix @@ -3,7 +3,7 @@ build-essential libxcomposite-dev libpng12-dev libsm-dev libxrandr-dev libxdamag */ args: with args; [ - libXcomposite libpng libSM libXrandr libXdamage libXinerama startupnotification + libpng GConf mesa metacity librsvg dbus dbus_glib gnomedesktop git autoconf automake libtool libxslt libwnck intltool perl perlXMLParser compiz ] diff --git a/pkgs/applications/window-managers/compiz/0.6.2.nix b/pkgs/applications/window-managers/compiz/0.6.2.nix index 92f67ba6877d..6eef24beb994 100644 --- a/pkgs/applications/window-managers/compiz/0.6.2.nix +++ b/pkgs/applications/window-managers/compiz/0.6.2.nix @@ -6,7 +6,7 @@ args : with args; sha256 = "0k58bkbyqx94ch7scvn3d26296ai9nddfb6lg8v3bhbi2zj4i2n5"; }; buildInputs = [ - pkgconfig libXrender xextproto gtk libwnck GConf libgnome + pkgconfig gtk libwnck GConf libgnome libgnomeui metacity gnomegtk glib pango libglade libgtkhtml gtkhtml libgnomecanvas libgnomeprint libgnomeprintui gnomepanel librsvg fuse @@ -14,7 +14,8 @@ args : with args; propagatedBuildInputs = [ libpng libXcomposite libXfixes libXdamage libXrandr libXinerama libICE libSM startupnotification mesa GConf perl perlXMLParser libxslt - dbus dbus_glib + dbus dbus_glib compositeproto fixesproto damageproto randrproto + xineramaproto renderproto kbproto xextproto libXrender ]; configureFlags = ["--enable-gtk" "--enable-fuse" "--enable-annotate" "--enable-librsvg"] ++ @@ -35,7 +36,9 @@ stdenv.mkDerivation rec { name = "compiz-0.6.2"; builder = writeScript (name + "-builder") - (textClosure [doPatch doConfigure doMakeInstall doForceShare postAll]); + (textClosure [doPatch doConfigure doMakeInstall doPropagate + doForceShare postAll]); + inherit propagatedBuildInputs; meta = { description = " Compiz window manager diff --git a/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix b/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix new file mode 100644 index 000000000000..be0db328ef94 --- /dev/null +++ b/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix @@ -0,0 +1,39 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = mirror://sourceforge/libdbi-drivers/libdbi-drivers-0.8.2-1.tar.gz; + sha256 = "1bflwl1k3rf1h8clx3zv5pxnm5hbhq6izikv0phkss3qxkjm61ap"; + }; + + buildInputs = [libdbi] + ++(if args ? mysql then [args.mysql] else []) + ++(if args ? sqlite then [args.sqlite] else []) + ; + configureFlags = [ + " --enable-libdbi " + " --with-dbi-incdir=${libdbi}/include " + " --with-dbi-libdir=${libdbi}/lib " + ] + ++ (if args ? mysql then [ + " --with-mysql " + " --with-mysql-incdir=${mysql}/include/mysql " + " --with-mysql-libdir=${mysql}/lib/mysql " + ] else []) + ++ (if args ? sqlite then [ + " --with-sqlite " + " --with-sqlite-incdir=${sqlite}/include/sqlite " + " --with-sqlite-libdir=${sqlite}/lib/sqlite " + ] else []) + ; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "libdbi"+version; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + DB independent interface to DB; DB drivers (mysql only for now). +"; + }; +} diff --git a/pkgs/development/libraries/libdbi/0.8.2.nix b/pkgs/development/libraries/libdbi/0.8.2.nix new file mode 100644 index 000000000000..e7dc24417f21 --- /dev/null +++ b/pkgs/development/libraries/libdbi/0.8.2.nix @@ -0,0 +1,21 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = mirror://sourceforge/libdbi/libdbi-0.8.2.tar.gz; + sha256 = "01zlfv9hd4iv9v1xlh64ajdgx95jb0sjpazavapqc0zwiagwcg4d"; + }; + + buildInputs = []; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "libdbi"+version; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + DB independent interface to DB. +"; + }; +} diff --git a/pkgs/development/libraries/libextractor/0.5.18.nix b/pkgs/development/libraries/libextractor/0.5.18.nix new file mode 100644 index 000000000000..3f8304d7304a --- /dev/null +++ b/pkgs/development/libraries/libextractor/0.5.18.nix @@ -0,0 +1,21 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://gnunet.org/libextractor/download/libextractor-0.5.18.tar.gz; + sha256 = "09y869zmnr6n2953ra4y7z9m9nj23prlqa4nr4rwcb50dzdmil1k"; + }; + + buildInputs = [ zlib]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "libextractor"+version; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Libextractor - extracts metadata from files. +"; + }; +} diff --git a/pkgs/development/tools/misc/intltool/0.36.2.nix b/pkgs/development/tools/misc/intltool/0.36.2.nix index f42a6901dfa5..d8315a9ba62e 100644 --- a/pkgs/development/tools/misc/intltool/0.36.2.nix +++ b/pkgs/development/tools/misc/intltool/0.36.2.nix @@ -6,13 +6,14 @@ args : with args; sha256 = "0cfblqz3k5s4rsw6rx9f5v3izsrmrs96293rb7bd02vijbah9gxj"; }; - buildInputs = [perl perlXMLParser]; + propagatedBuildInputs = [perl perlXMLParser]; configureFlags = []; } null; /* null is a terminator for sumArgs */ stdenv.mkDerivation rec { name = "intltool-0.36.2"; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare]); + (textClosure [doConfigure doMakeInstall doPropagate doForceShare]); + inherit propagatedBuildInputs; meta = { description = " Internalization tool for XML. diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 71803a9e3352..3ad861ef19d1 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -252,4 +252,12 @@ rec { debugVal = if builtins ? trace then x: (builtins.trace x x) else x: x; debugXMLVal = if builtins ? trace then x: (builtins.trace (builtins.toXML x) x) else x: x; + innerClosePropagation = ready: list: if list == [] then ready else + if (head list) ? propagatedBuildInputs then + innerClosePropagation (ready ++ [(head list)]) + ((head list).propagatedBuildInputs ++ (tail list)) else + innerClosePropagation (ready ++ [(head list)]) (tail list); + + closePropagation = list: (uniqList {inputList = (innerClosePropagation [] list);}); + } diff --git a/pkgs/tools/system/gdmap/0.7.5.nix b/pkgs/tools/system/gdmap/0.7.5.nix new file mode 100644 index 000000000000..354ebb966a1c --- /dev/null +++ b/pkgs/tools/system/gdmap/0.7.5.nix @@ -0,0 +1,21 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://dfn.dl.sourceforge.net/sourceforge/gdmap/gdmap-0.7.5.tar.gz; + sha256 = "0vxfgz1bq0jvny6dy7dkzg2kl56plrxby6c4y5d6bv4bq2xd6v26"; + }; + + buildInputs = [gtk pkgconfig libxml2 intltool]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "gdmap"+version; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Recursive rectangle map of disk usage. +"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 89cae494c9bf..6977679bb2c9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -453,6 +453,16 @@ rec { inherit fetchurl stdenv; }); + gdmapFun = lib.sumArgs (selectVersion ../tools/system/gdmap) { + inherit stdenv fetchurl builderDefs pkgconfig libxml2 + intltool; + inherit (gtkLibs) gtk; + }; + + gdmap = gdmapFun { + version = "0.7.5"; + } null; + getopt = import ../tools/misc/getopt { inherit fetchurl stdenv; }; @@ -535,6 +545,18 @@ rec { inherit fetchurl stdenv ocaml; }; + /*hyppocampusFun = lib.sumArgs ( selectVersion ../tools/misc/hyppocampus ) { + inherit builderDefs stdenv fetchurl libdbi libdbiDrivers fuse + pkgconfig perl gettext dbus dbus_glib pcre libscd; + inherit (gtkLibs) glib; + bison = bison23; + flex = flex2533; + }; + + hyppocampus = hyppocampusFun { + version = "0.3rc1"; + } null;*/ + jdiskreport = import ../tools/misc/jdiskreport { inherit fetchurl stdenv unzip jdk; }; @@ -1932,6 +1954,25 @@ rec { inherit fetchurl stdenv; }; + libdbiFun = lib.sumArgs (selectVersion ../development/libraries/libdbi) { + inherit stdenv fetchurl builderDefs; + }; + + libdbi = libdbiFun { + version = "0.8.2"; + } null; + + libdbiDriversFun = lib.sumArgs (selectVersion ../development/libraries/libdbi-drivers) { + inherit stdenv fetchurl builderDefs libdbi; + }; + + libdbiDrivers = libdbiDriversFun { + version = "0.8.2-1"; + mysql = mysql5; + inherit sqlite; + } null; + + libdrm = import ../development/libraries/libdrm { inherit fetchurl stdenv; }; @@ -1956,6 +1997,15 @@ rec { inherit fetchurl stdenv gettext; }; + libextractorFun = lib.sumArgs (selectVersion ../development/libraries/libextractor) + { + inherit fetchurl stdenv builderDefs zlib; + }; + + libextractor = libextractorFun { + version = "0.5.18"; + } null; + libgcrypt = import ../development/libraries/libgcrypt { inherit fetchurl stdenv libgpgerror; }; @@ -2020,6 +2070,14 @@ rec { inherit fetchurl stdenv zlib; }; + /*libscdFun = lib.sumArgs (selectVersion ../development/libraries/libscd) { + inherit stdenv fetchurl builderDefs libextractor perl pkgconfig; + }; + + libscd = libscdFun { + version = "0.4.2"; + } null;*/ + libsigcxx = import ../development/libraries/libsigcxx { inherit fetchurl stdenv pkgconfig; }; @@ -3381,7 +3439,7 @@ rec { libjpeg libpng zlib /* smpeg sdl */; inherit (xlibs) inputproto libXi; lib = lib_unstable; - python = python25; + python = python_alts.v_2_5; freealut = freealut_soft; openal = openalSoft; stdenv = stdenvUsingSetupNew2; @@ -3443,7 +3501,8 @@ rec { inherit lib builderDefs stringsWithDeps; inherit fetchurl stdenv pkgconfig libpng mesa perl perlXMLParser libxslt; inherit (xorg) libXcomposite libXfixes libXdamage libXrandr - libXinerama libICE libSM libXrender xextproto; + libXinerama libICE libSM libXrender xextproto compositeproto fixesproto + damageproto randrproto xineramaproto renderproto kbproto; inherit (gnome) startupnotification libwnck GConf; inherit (gtkLibs) gtk; inherit (gnome) libgnome libgnomeui metacity @@ -4314,7 +4373,7 @@ rec { inherit fetchurl fetchsvn zlib perl openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt libtool libusb expat freetype bzip2 cmake cluceneCore libgcrypt gnupg - cppunit cyrus_sasl openldap enchant openexr exiv2 samba nss log4cxx aspell + cppunit cyrus_sasl openldap enchant exiv2 samba nss log4cxx aspell shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib @@ -4330,6 +4389,7 @@ rec { qt = qt4; dbus = dbus_alts.withX11; bison = bison23; + openexr = openexr_1_6_1 ; }); kdebase = import ../desktops/kde/kdebase { diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index 01940499d610..94f83b9c06fd 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -3,6 +3,8 @@ args: with args; with stringsWithDeps; with lib; { inherit writeScript; + + forceShare = if args ? forceShare then args.forceShare else ["man" "doc" "info"]; archiveType = s: @@ -107,18 +109,10 @@ args: with args; with stringsWithDeps; with lib; if test -f \$pkg/nix-support/setup-hook; then source \$pkg/nix-support/setup-hook fi - - if test -f \$pkg/nix-support/propagated-build-inputs; then - for i in \$(cat \$pkg/nix-support/propagated-build-inputs); do - findInputs \$i - done - fi } pkgs=\"\" - for i in \$NIX_GCC ${toString buildInputs} ${toString - (if (args ? propagatedBuildInputs) then - args.propagatedBuildInputs else "")}; do + for i in \$NIX_GCC ${toString buildInputs}; do findInputs \$i done @@ -287,7 +281,11 @@ args: with args; with stringsWithDeps; with lib; autoConfigureFlags = condConcat "" configFlags check; autoMakeFlags = condConcat "" buildFlags check; useConfig = getAttr ["useConfig"] false args; - buildInputs = if useConfig then autoBuildInputs else getAttr ["buildInputs"] [] args; + buildInputs = + lib.closePropagation ((if useConfig then + autoBuildInputs else + getAttr ["buildInputs"] [] args)++ + (getAttr ["propagatedBuildInputs"] [] args)); configureFlags = if useConfig then autoConfigureFlags else getAttr ["configureFlags"] "" args; makeFlags = if useConfig then autoMakeFlags else getAttr ["makeFlags"] "" args; From f9ae454805d4706a6138e54b7dfe44871ae005aa Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 01:10:37 +0000 Subject: [PATCH 088/320] blender default.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=9894 --- pkgs/applications/misc/blender/default.nix | 41 ++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 pkgs/applications/misc/blender/default.nix diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix new file mode 100644 index 000000000000..3fb66dff3e96 --- /dev/null +++ b/pkgs/applications/misc/blender/default.nix @@ -0,0 +1,41 @@ +args: +args.stdenv.mkDerivation { + name = "blender-2.45"; + + src = args.fetchurl { + url = http://download.blender.org/source/blender-2.45.tar.gz; + sha256 = "1bi7j1fcvrpb96sjpcbm4sldf359sgskfhv7a8pgcxj0bnhp47wj"; + }; + + phases="unpackPhase buildPhase"; + + inherit (args) scons SDL freetype openal python openexr mesa; + + buildInputs =(with args; [python scons + gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff cmake libXi ]); + + # patch SConstruct so that we can pass on additional include. Either blender + # or openEXR is broken. I think OpenEXR should use include "" isntead of <> to + # include files beeing in the same directory + buildPhase = " + sed -i -e \"s=##### END SETUP ##########=env['CPPFLAGS'].append(os.getenv('CPPFLAGS').split(':'))\\n##### END SETUP ##########=\" SConstruct\n" + + " CPPFLAGS=-I$openexr/include/OpenEXR" + + " scons PREFIX=\$out/nix-support" + + " BF_SDL=\$SDL" + + " BF_SDL_LIBPATH=\$SDL/lib" + + " BF_FREETYPE=\$freetype" + + " BF_OPENAL=\$openal" + + " BF_PYTHON=\$python" + + " BF_OPENEXR_INC=\$openexr/include" + + " BF_OPENEXR_LIBPATH=\$openexr/lib" + + " BF_INSTALLDIR=\$out/nix-support/dontLinkThatMuch \n" + + " ensureDir \$out/bin\n" + + " ln -s \$out/nix-support/dontLinkThatMuch/blender \$out/bin/blender" + ; + + meta = { + description = "3D Creation/Animation/Publishing System"; + homepage = http://www.blender.org; + license = "GPL-2 BL"; + }; +} From d23f0bf7e935f0c3b458a35b4a164fa7b9eb106f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 15:21:03 +0000 Subject: [PATCH 089/320] merging trunk... svn path=/nixpkgs/branches/stdenv-updates/; revision=9895 --- .../graphics/exrdisplay/default.nix | 27 ++++ pkgs/applications/graphics/xara/default.nix | 26 +++- pkgs/applications/misc/audio/sox/default.nix | 2 +- .../office/openoffice/default.nix | 29 +++- .../office/openoffice/libawt_problem | 10 ++ pkgs/build-support/fetchsvn/builder.sh | 2 +- pkgs/build-support/fetchsvn/default.nix | 9 +- pkgs/development/compilers/ghc-6.8/d.nix | 37 +++++ .../development/compilers/ghc-6.8/default.nix | 5 +- .../compilers/ghc-6.8/x86_64-linux_patch | 24 ++++ pkgs/development/libraries/ctl/default.nix | 23 ++++ .../libraries/ffmpeg_svn_snapshot/default.nix | 13 +- pkgs/development/libraries/fltk/default.nix | 74 +++++----- pkgs/development/libraries/geos/default.nix | 42 ++++++ pkgs/development/libraries/gsl/default.nix | 17 +++ .../development/libraries/ilmbase/default.nix | 6 +- .../libraries/libsamplerate/default.nix | 2 +- .../development/libraries/openexr/default.nix | 10 +- .../libraries/openexr_ctl/default.nix | 24 ++++ pkgs/development/libraries/proj.4/default.nix | 17 +++ .../tools/selenium/remote-control/default.nix | 23 ++++ pkgs/games/construo/0.2.2.nix | 29 ++++ pkgs/misc/tex/auctex/default.nix | 1 + .../os-specific/linux/ndiswrapper/default.nix | 26 ++++ pkgs/os-specific/linux/upstart/jobcontrol.nix | 15 ++ pkgs/os-specific/linux/util-linux/default.nix | 6 +- pkgs/tools/misc/relfs/cvs.2007.12.01.nix | 48 +++++++ pkgs/tools/networking/openssh/default.nix | 1 + pkgs/top-level/all-packages.nix | 130 ++++++++++++++---- pkgs/top-level/builder-defs.nix | 5 + 30 files changed, 585 insertions(+), 98 deletions(-) create mode 100644 pkgs/applications/graphics/exrdisplay/default.nix create mode 100644 pkgs/applications/office/openoffice/libawt_problem create mode 100644 pkgs/development/compilers/ghc-6.8/d.nix create mode 100644 pkgs/development/compilers/ghc-6.8/x86_64-linux_patch create mode 100644 pkgs/development/libraries/ctl/default.nix create mode 100644 pkgs/development/libraries/geos/default.nix create mode 100644 pkgs/development/libraries/gsl/default.nix create mode 100644 pkgs/development/libraries/openexr_ctl/default.nix create mode 100644 pkgs/development/libraries/proj.4/default.nix create mode 100644 pkgs/development/tools/selenium/remote-control/default.nix create mode 100644 pkgs/games/construo/0.2.2.nix create mode 100644 pkgs/os-specific/linux/ndiswrapper/default.nix create mode 100644 pkgs/os-specific/linux/upstart/jobcontrol.nix create mode 100644 pkgs/tools/misc/relfs/cvs.2007.12.01.nix diff --git a/pkgs/applications/graphics/exrdisplay/default.nix b/pkgs/applications/graphics/exrdisplay/default.nix new file mode 100644 index 000000000000..980f94e95d43 --- /dev/null +++ b/pkgs/applications/graphics/exrdisplay/default.nix @@ -0,0 +1,27 @@ +args: + +assert args.fltk.flag_set_gl; +args.stdenv.mkDerivation { + + name ="openexr_viewers-1.0.1"; + + src = args.fetchurl { + url = "http://download.savannah.nongnu.org/releases/openexr/openexr_viewers-1.0.1.tar.gz"; + sha256 = "1w5qbcdp7sw48z1wk2v07f7p14vqqb1m2ncxyxnbkm9f4ab0ymg6"; + }; + + inherit (args) fltk mesa; + + configurePhase = " + # don't know why.. adding these flags it works + #export CXXFLAGS=`fltk-config --use-gl --cxxflags --ldflags` + ./configure --prefix=\$out --with-fltk-config=\$fltk/bin/fltk-config"; + + buildInputs =(with args; [openexr fltk pkgconfig mesa which openexr_ctl]); + + meta = { + description = "tool to view OpenEXR images"; + homepage = http://openexr.com; + license = "BSD-like"; + }; +} diff --git a/pkgs/applications/graphics/xara/default.nix b/pkgs/applications/graphics/xara/default.nix index 495e1f930762..e2fdd33c1a6f 100644 --- a/pkgs/applications/graphics/xara/default.nix +++ b/pkgs/applications/graphics/xara/default.nix @@ -1,5 +1,5 @@ {stdenv, fetchurl, autoconf, automake, gettext, libtool, cvs, wxGTK, gtk, -pkgconfig, libxml2, zip, libpng, libjpeg}: +pkgconfig, libxml2, zip, libpng, libjpeg, shebangfix, perl, freetype}: stdenv.mkDerivation { name = "xaralx-0.7r1766"; @@ -7,9 +7,29 @@ stdenv.mkDerivation { url = http://downloads2.xara.com/opensource/XaraLX-0.7r1766.tar.bz2; sha256 = "1rcl7hqvcai586jky7hvzxhnq8q0ka2rsmgiq5ijwclgr5d4ah7n"; }; - - buildInputs = [automake autoconf gettext libtool cvs wxGTK gtk pkgconfig libxml2 zip libpng libjpeg]; + + buildInputs = [automake autoconf gettext libtool cvs wxGTK gtk pkgconfig libxml2 zip libpng libjpeg shebangfix perl]; + + inherit freetype libpng libjpeg libxml2; configureFlags = "--with-wx-config --disable-svnversion --disable-international"; patches = [./gtk_cflags.patch]; + + # Why do I need to add library path for freetype ? + installPhase = " + make install + ensureDir \$out/lib + mv \$out/{bin,lib}/XaraLX +cat >> \$out/bin/XaraLX << EOF +#!/bin/sh +LD_LIBRARY_PATH=\$freetype/lib:\$libpng/lib:\$libjpeg/lib:\$libxml2/lib: +\$out/lib/XaraLX \"\\$@\" +EOF +chmod +x \$out/bin/XaraLX +"; + + patchPhase = " + find . -iname \"*.pl\" | xargs shebangfix; + unset patchPhase; patchPhase + "; } diff --git a/pkgs/applications/misc/audio/sox/default.nix b/pkgs/applications/misc/audio/sox/default.nix index 91bd5be07880..c0cf9d91b730 100644 --- a/pkgs/applications/misc/audio/sox/default.nix +++ b/pkgs/applications/misc/audio/sox/default.nix @@ -1,5 +1,5 @@ args: -( args.mkDerivationByConfigruation { +( args.mkDerivationByConfiguration { flagConfig = { mandatory = { implies = [ "no_oss" "no_sun_audio" ]; }; # are these options of interest? We'll see diff --git a/pkgs/applications/office/openoffice/default.nix b/pkgs/applications/office/openoffice/default.nix index 789bc5a53dac..c7cedc69deea 100644 --- a/pkgs/applications/office/openoffice/default.nix +++ b/pkgs/applications/office/openoffice/default.nix @@ -10,11 +10,21 @@ stdenv.mkDerivation rec { name = "openoffice.org-2.3.0"; builder = ./builder.sh; - src = fetchurl { - url = http://openoffice.bouncer.osuosl.org/?product=OpenOffice.org&os=src_bzip&lang=core&version=2.3.0; - name = "OOo_2.3.0_src_core.tar.bz2"; - sha256 = "0mkxn9qj3f03rjkmxc4937gr2w429hnxzb9j5j2grdknfga5a1c3"; - }; + src = + #if (stdenv.system == "i686-linux") then + #fetchurl { + # stable 2.3.0 is failing - got the tip on the mailinglist to have look + # at http://www.openoffice.org/issues/show_bug.cgi?id=74751 + # now I'm trying snapshot because it should already have this patch + #url = http://ftp.ussg.iu.edu/openoffice/contrib/rc/2.3.1rc1/OOo_2.3.1rc1_src_core.tar.bz2; + #name = "OOo_2.3.1_src_core.tar.bz2"; + #sha256 = ""; + #} else + fetchurl { + url = http://openoffice.bouncer.osuosl.org/?product=OpenOffice.org&os=src_bzip&lang=core&version=2.3.0; + name = "OOo_2.3.0_src_core.tar.bz2"; + sha256 = "0mkxn9qj3f03rjkmxc4937gr2w429hnxzb9j5j2grdknfga5a1c3"; + }; configureFlags = " --with-package-format=native @@ -63,7 +73,14 @@ stdenv.mkDerivation rec { inherit icu fontconfig libjpeg jdk cups; - patches = [./ooo-libtextcat.patch]; + # libawt_problem see http://www.openoffice.org/issues/show_bug.cgi?id=74751 + # Can be removed in newer releases than 2.3.0 + patch_file = ./libawt_problem; + patches = [./ooo-libtextcat.patch ]; + patchPhase = " + patch config_office/set_soenv.in \$patch_file + unset patchPhase; patchPhase; + "; meta = { description = "OpenOffice.org is a multiplatform and multilingual office suite"; diff --git a/pkgs/applications/office/openoffice/libawt_problem b/pkgs/applications/office/openoffice/libawt_problem new file mode 100644 index 000000000000..edfb72cd8d26 --- /dev/null +++ b/pkgs/applications/office/openoffice/libawt_problem @@ -0,0 +1,10 @@ +--- config_office/set_soenv.in 2007-02-21 16:31:51.000000000 +0100 ++++ config_office/set_soenv.in.new 2007-02-21 20:37:17.000000000 +0100 +@@ -426,6 +426,7 @@ + $OUTPATH = "unxlngx6"; + # Blackdown.org JDK porting project uses `amd64' and `server' in JDK 1.4.2 RC1 + $JRELIBDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."amd64"; ++ $JREEXTRALIBDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."amd64".$ds."xawt"; + $JRETOOLKITDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."amd64".$ds."server"; + $JRETHREADDIR = '$JAVA_HOME'.$ds."jre".$ds."lib".$ds."amd64".$ds."native_threads"; + } diff --git a/pkgs/build-support/fetchsvn/builder.sh b/pkgs/build-support/fetchsvn/builder.sh index d06efa88e291..b53ce95579ab 100644 --- a/pkgs/build-support/fetchsvn/builder.sh +++ b/pkgs/build-support/fetchsvn/builder.sh @@ -12,7 +12,7 @@ fi # hash of the output matters. echo 'p' | svn export -r "$rev" "$url" $out -actual=$(nix-hash $out) +actual=$(nix-hash $out --type "$outputHashAlgo") if test "$actual" != "$outputHash"; then echo "hash is $actual, expected $outputHash" >&2 exit 1 diff --git a/pkgs/build-support/fetchsvn/default.nix b/pkgs/build-support/fetchsvn/default.nix index ff842b0ee243..ce6a1e61d9cf 100644 --- a/pkgs/build-support/fetchsvn/default.nix +++ b/pkgs/build-support/fetchsvn/default.nix @@ -1,4 +1,5 @@ -{stdenv, subversion, nix, sshSupport ? false, openssh ? null}: {url, rev ? "HEAD", md5}: +{stdenv, subversion, nix, sshSupport ? false, openssh ? null}: +{url, rev ? "HEAD", md5 ? "", sha256 ? ""}: stdenv.mkDerivation { name = "svn-export"; @@ -6,11 +7,11 @@ stdenv.mkDerivation { buildInputs = [subversion nix]; # Nix <= 0.7 compatibility. - id = md5; + /*id = if sha256 == "" then md5 else sha256;*/ - outputHashAlgo = "md5"; + outputHashAlgo = if sha256=="" then "md5" else "sha256"; outputHashMode = "recursive"; - outputHash = md5; + outputHash = if sha256 =="" then md5 else sha256; inherit url rev sshSupport openssh; } diff --git a/pkgs/development/compilers/ghc-6.8/d.nix b/pkgs/development/compilers/ghc-6.8/d.nix new file mode 100644 index 000000000000..a011405f541f --- /dev/null +++ b/pkgs/development/compilers/ghc-6.8/d.nix @@ -0,0 +1,37 @@ + +stdenv.mkDerivation (rec { + homepage = "http://www.haskell.org/ghc"; + + src = map fetchurl [ + { url = "${homepage}/dist/stable/dist/${name}-src.tar.bz2"; + } + { url = "${homepage}/dist/stable/dist/${name}-src-extralibs.tar.bz2"; + } + ]; + + + setupHook = ./setup-hook.sh; + + meta = { + }; + + postInstall = " + ensureDir \"$out/nix-support\" + echo \"# Path to the GHC compiler directory in the store\" > $out/nix-support/setup-hook + echo \"ghc=$out\" >> $out/nix-support/setup-hook + echo \"\" >> $out/nix-support/setup-hook + cat $setupHook >> $out/nix-support/setup-hook + "; + + patch64 = ./x86_64-linux_patch; + + # Thanks to Ian Lynagh ghc now works on x86_64-linux as well + patchPhase = if (stdenv.system == "x86_64-linx") then "patch -p2 < $patch64" else ""; + + + # the presence of this file makes Cabal cry for happy while generating makefiles ... + preConfigure = " + echo 'GhcThreaded=NO' > mk/build.mk + rm libraries/haskell-src/Language/Haskell/Parser.ly + "; +}) diff --git a/pkgs/development/compilers/ghc-6.8/default.nix b/pkgs/development/compilers/ghc-6.8/default.nix index 7588fbb13759..c87d84570827 100644 --- a/pkgs/development/compilers/ghc-6.8/default.nix +++ b/pkgs/development/compilers/ghc-6.8/default.nix @@ -16,7 +16,8 @@ stdenv.mkDerivation (rec { buildInputs = [ghc readline perl m4 pkgconfig gtk]; patchPhase = " sed -e s@/bin/cat@\$(type -p cat)@ -i configure - "; + " + + (if (stdenv.system == "x86_64-linx") then "patch -p2 < $patch64" else ""); setupHook = ./setup-hook.sh; @@ -32,7 +33,7 @@ stdenv.mkDerivation (rec { cat $setupHook >> $out/nix-support/setup-hook "; - #configureFlags="--with-gmp-libraries=${gmp}/lib --with-readline-libraries=${readline}/lib"; + patch64 = ./x86_64-linux_patch; # the presence of this file makes Cabal cry for happy while generating makefiles ... preConfigure = " diff --git a/pkgs/development/compilers/ghc-6.8/x86_64-linux_patch b/pkgs/development/compilers/ghc-6.8/x86_64-linux_patch new file mode 100644 index 000000000000..26a9cf2781e4 --- /dev/null +++ b/pkgs/development/compilers/ghc-6.8/x86_64-linux_patch @@ -0,0 +1,24 @@ +diff -ru /tmp/ghc_fresh/ghc-6.9.20071119/compiler/codeGen/CgUtils.hs ./ghc-6.9.20071119/compiler/codeGen/CgUtils.hs +--- /tmp/ghc_fresh/ghc-6.9.20071119/compiler/codeGen/CgUtils.hs 2007-12-05 15:02:30.000000000 +0100 ++++ ./ghc-6.9.20071119/compiler/codeGen/CgUtils.hs 2007-12-05 15:33:16.000000000 +0100 +@@ -51,7 +51,7 @@ + ) where + + #include "HsVersions.h" +-#include "MachRegs.h" ++#include "../includes/MachRegs.h" + + import CgMonad + import TyCon +diff -ru /tmp/ghc_fresh/ghc-6.9.20071119/compiler/nativeGen/MachRegs.lhs ./ghc-6.9.20071119/compiler/nativeGen/MachRegs.lhs +--- /tmp/ghc_fresh/ghc-6.9.20071119/compiler/nativeGen/MachRegs.lhs 2007-12-05 15:02:30.000000000 +0100 ++++ ./ghc-6.9.20071119/compiler/nativeGen/MachRegs.lhs 2007-12-05 15:32:41.000000000 +0100 +@@ -90,7 +90,7 @@ + -- HACK: go for the max + #endif + +-#include "MachRegs.h" ++#include "../includes/MachRegs.h" + + import Cmm + import MachOp ( MachRep(..) ) diff --git a/pkgs/development/libraries/ctl/default.nix b/pkgs/development/libraries/ctl/default.nix new file mode 100644 index 000000000000..c6a6cee0ca67 --- /dev/null +++ b/pkgs/development/libraries/ctl/default.nix @@ -0,0 +1,23 @@ +args: +args.stdenv.mkDerivation { + name = "ctl-1.4.1"; + + src = args.fetchurl { + url = http://surfnet.dl.sourceforge.net/sourceforge/ampasctl/ctl-1.4.1.tar.gz; + sha256 = "16lzgbpxdyhykdwndj1i9vx3h4bfkxqqcrvasvgg70gb5raxj0mj"; + }; + + propagatedBuildInputs = (with args; [ilmbase]); + configureFlags="--with-ilmbase-prefix=${args.ilmbase}"; + #configurePhase = " + #export CXXFLAGS=\"-I${args.ilmbase}/include -L${args.ilmbase}/lib\" + #echo $CXXFLAGS + #unset configurePhase; configurePhase + #"; + + meta = { + description = "Color Transformation Language"; + homepage = http://ampasctl.sourceforge.net; + license = "SOME OPEN SOURCE LICENSE"; # TODO which exactly is this? + }; +} diff --git a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix index 3719f1301a3f..f3611afb0b63 100644 --- a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix +++ b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix @@ -1,11 +1,16 @@ -{stdenv, fetchurl}: +{stdenv, fetchsvn}: stdenv.mkDerivation { - name = "ffmpeg-svn"; - src = fetchurl { + name = "ffmpeg-svn-2007-12-04"; + src = fetchsvn { + url = svn://svn.mplayerhq.hu/ffmpeg/trunk ; + rev = "11164"; + sha256 = "95658455e466aeab5a302ddd6e7b2f79f620d4495012add46028a548e6c364b2"; + }; + /*fetchurl { url = http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2; sha256 = "040a35f0c004323af14329c09ad3cff8d040e2cf9797d97cde3d9d83d02b4d87"; - }; + };*/ # !!! Hm, what are the legal consequences of --enable-gpl? configureFlags = "--enable-shared --enable-pp --enable-gpl --disable-ffserver --disable-ffplay"; } diff --git a/pkgs/development/libraries/fltk/default.nix b/pkgs/development/libraries/fltk/default.nix index 0b35b3e34b07..25b8379e3794 100644 --- a/pkgs/development/libraries/fltk/default.nix +++ b/pkgs/development/libraries/fltk/default.nix @@ -1,45 +1,37 @@ args: -with args; -with args.lib; -let - co = chooseOptionsByFlags { - inherit args; - flagDescr = - { mandatory = { cfgOption = " --prefix=\$out"; - buildInputs=["libX11" "libXext"]; - blocks = ["cygwin" "quartz"]; } # cgywin quartz and much more not yet tested - ; cygwin = { cfgOption = "--enable-cygwin"; } # use the CygWin libraries default=no - ; debug = { cfgOption = "--enable-debug"; } # turn on debugging default=no - ; gl = { cfgOption = "--enable-gl"; buildInputs = [ "mesa" "mesa-heaaders"]; } # turn on OpenGL support default=yes - ; shared = { cfgOption = "--enable-shared"; } # turn on shared libraries default=no - ; threads = { cfgOption = "--enable-threads"; } # enable multi-threading support - ; quartz = { cfgOption = "--enable-quartz"; buildInputs = "quartz"; } # don't konw yet what quartz is # use Quartz instead of Quickdraw (default=no) - ; largefile = { cfgOption = "--disable-largefile"; } # omit support for large files - ; useNixLibs = { implies = [ "nixjpeg" "nixpng" "nixzlib" ]; } # use nix libraries only - ; nixjpeg = { cfgOption = "--disable-localjpeg"; buildInputs = "libjpeg"; } # use local JPEG library, default=auto - ; nixzlib = { cfgOption = "--disable-localzlib"; buildInputs = "zlib"; } # use local ZLIB library, default=auto - ; nixpng = { cfgOption = "--disable-localpng"; buildInputs = "libpng"; } # use local PNG library, default=auto - ; xinerama = { cfgOption = "--enable-xinerama"; buildInputs = "xinerama"; } # turn on Xinerama support default=no - ; xft = { cfgOption = "--enable-xft"; buildInputs="xft"; } # turn on Xft support default=no - ; xdbe = { cfgOption = "--enable-xdbe"; } # turn on Xdbe support default=no - ;}; +( args.mkDerivationByConfiguration { + flagConfig = { + mandatory = { propagatedBuildInputs=["x11"]; + blocks = ["cygwin" "quartz"]; }; # cgywin quartz and much more not yet tested + cygwin = { cfgOption = "--enable-cygwin"; }; # use the CygWin libraries default=no + debug = { cfgOption = "--enable-debug"; }; # turn on debugging default=no + gl = { cfgOption = "--enable-gl"; buildInputs = [ "mesa" ]; }; # turn on OpenGL support default=yes + shared = { cfgOption = "--enable-shared"; }; # turn on shared libraries default=no + threads = { cfgOption = "--enable-threads"; }; # enable multi-threading support + quartz = { cfgOption = "--enable-quartz"; buildInputs = "quartz"; }; # don't konw yet what quartz is # use Quartz instead of Quickdraw (default=no) + largefile = { cfgOption = "--disable-largefile"; }; # omit support for large files + useNixLibs = { implies = [ "nixjpeg" "nixpng" "nixzlib" ]; }; # use nix libraries only + nixjpeg = { cfgOption = "--disable-localjpeg"; buildInputs = "libjpeg"; }; # use local JPEG library, default=auto + nixzlib = { cfgOption = "--disable-localzlib"; buildInputs = "zlib"; }; # use local ZLIB library, default=auto + nixpng = { cfgOption = "--disable-localpng"; buildInputs = "libpng"; }; # use local PNG library, default=auto + xinerama = { cfgOption = "--enable-xinerama"; buildInputs = "xinerama"; }; # turn on Xinerama support default=no + xft = { cfgOption = "--enable-xft"; buildInputs="xft"; }; # turn on Xft support default=no + xdbe = { cfgOption = "--enable-xdbe"; }; # turn on Xdbe support default=no + }; + + extraAttrs = co : { + name = "fltk-2.0.x-r5940"; + + src = args.fetchurl { + #url = http://mirror.switch.ch/mirror/gentoo/distfiles/fltk-1.1.7-source.tar.bz2; + #sha256 = "855a97e35da823f205253b865758715872cd2c7720e4dcf134a3b6dc18bfb96a"; + url = ftp://ftp.easysw.com/pub/fltk/snapshots/fltk-1.1.x-r5989.tar.bz2; + sha256 = "1zk5qh9133zd53hsn03bc4h6j4vjy61y92j4zxxw94z8y3jkc8yw"; }; -in -args.stdenv.mkDerivation { - inherit (co) /* flags */ buildInputs; - name = "fltk-2.0.x-r5940"; - configurePhase = "./configure " + co.configureFlags; - - src = fetchurl { - url = http://mirror.switch.ch/mirror/gentoo/distfiles/fltk-1.1.7-source.tar.bz2; - sha256 = "855a97e35da823f205253b865758715872cd2c7720e4dcf134a3b6dc18bfb96a"; + meta = { + description = "a C++ cross platform lightweight gui library binding"; + homepage = http://www.fltk.org; + }; }; - - meta = { - description = "a C++ cross platform lightweight gui library binding"; - homepage = http://www.fltk.org; - }; - - dummy=2; -} +} ) args diff --git a/pkgs/development/libraries/geos/default.nix b/pkgs/development/libraries/geos/default.nix new file mode 100644 index 000000000000..bcfe8f757a24 --- /dev/null +++ b/pkgs/development/libraries/geos/default.nix @@ -0,0 +1,42 @@ +args: +( args.mkDerivationByConfiguration { + + flagConfig = { + mandatory = { implies = "python"; + buildInputs = [ "which" ]; # which is needed for the autogen.sh + }; + # python and ruby untested + python = { cfgOption = "--enable-python"; #Enable build of python module + buildInputs=["python"] ++ (if args.use_svn then ["libtool" "autoconf" "automake" "swig"] else []); + }; + ruby = { cfgOption = "--enable-ruby"; }; #Enable build of ruby module + }; + + extraAttrs = co : { + name = "geos-3.0.0rc4"; + + src = if (args.use_svn) then + args.fetchsvn { + url = http://svn.osgeo.org/geos/trunk; + md5 = "b46f5ea517a337064006bab92f3090d4"; + } else args.fetchurl { + url = http://geos.refractions.net/geos-3.0.0rc4.tar.bz2; + sha256 = "0pgwwv8q4p234r2jwdkaxcf68z2fwgmkc74c6dnmms2sdwkb5lbw"; + }; + + configurePhase = " + [ -f configure ] || \\ + LIBTOOLIZE=libtoolize ./autogen.sh + #{ automake --add-missing; autoconf; } + unset configurePhase; configurePhase + "; + + meta = { + description = "C++ port of the Java Topology Suite (JTS)" + + "- all the OpenGIS \"Simple Features for SQL\" spatial predicate functions and spatial operators," + + " as well as specific JTS topology functions such as IsValid"; + homepage = http://geos.refractions.net/; + license = "GPL"; + }; + }; +} ) args diff --git a/pkgs/development/libraries/gsl/default.nix b/pkgs/development/libraries/gsl/default.nix new file mode 100644 index 000000000000..a5248d422996 --- /dev/null +++ b/pkgs/development/libraries/gsl/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "gsl-1.9"; + + src = args.fetchurl { + url = ftp://ftp.gnu.org/gnu/gsl/gsl-1.9.tar.gz; + sha256 = "0l12js65c1qf3s7gmgay6gj5nbs6635py41dj8nk3hlp95wcdlgw"; + }; + + buildInputs =(with args; []); + + meta = { + description = "numerical library (>1000 functions)"; + homepage = http://www.gnu.org/software/gsl; + license = "GPL2"; + }; +} diff --git a/pkgs/development/libraries/ilmbase/default.nix b/pkgs/development/libraries/ilmbase/default.nix index 49fae13aec88..0ab548bef86d 100644 --- a/pkgs/development/libraries/ilmbase/default.nix +++ b/pkgs/development/libraries/ilmbase/default.nix @@ -1,9 +1,9 @@ args: with args; stdenv.mkDerivation { - name = "ilmbase-1.0.0"; + name = "ilmbase-1.0.1"; src = fetchurl { - url = http://FIXME/ilmbase-1.0.0.tar.gz; - sha256 = "1dpgi3hbff9nflg95r2smb6ssg5bh5g8mj9dxh896w29nh08ipnz"; + url = http://download.savannah.nongnu.org/releases/openexr/ilmbase-1.0.1.tar.gz; + sha256 = "0z9r3r0bxyhgwhkdwln0dg1lnxz691qnjygrqlg3jym34rxzq52g"; }; configureFlags = "--enable-shared --disable-static"; } diff --git a/pkgs/development/libraries/libsamplerate/default.nix b/pkgs/development/libraries/libsamplerate/default.nix index 895772d7fc0c..2ea959528a87 100644 --- a/pkgs/development/libraries/libsamplerate/default.nix +++ b/pkgs/development/libraries/libsamplerate/default.nix @@ -1,5 +1,5 @@ args: -( args.mkDerivationByConfigruation { +( args.mkDerivationByConfiguration { flagConfig = { mandatory = { buildInputs = ["pkgconfig"];}; # are these options of interest? We'll see diff --git a/pkgs/development/libraries/openexr/default.nix b/pkgs/development/libraries/openexr/default.nix index e30f25d9778d..4d4aefc95812 100644 --- a/pkgs/development/libraries/openexr/default.nix +++ b/pkgs/development/libraries/openexr/default.nix @@ -1,11 +1,15 @@ args: with args; stdenv.mkDerivation { - name = "openexr-1.6.0"; + inherit version; + name = "openexr-${version}"; src = fetchurl { - url = http://FIXME/openexr-1.6.0.tar.gz; - sha256 = "0mzbwavkbj26g43ar5jhdrqlvw9nq1mxh9l2044sqlcyharcnfq4"; + url = "http://download.savannah.nongnu.org/releases/openexr/openexr-${version}.tar.gz"; + sha256 = if (version == "1.6.1") then "0l2rdbx9lg4qk2ms98hwbsnzpggdrx3pbjl6pcvrrpjqp5m905n6" + else if (version == "1.4.0") then "1y3dxakpg9651dgbj2xp6r4044b5gi74g23w3sr5cs6xi7cywv7m" + else abort "not supported version"; }; + buildInputs = [pkgconfig zlib] ++ (lib.optional (args ? ctl) (args.ctl)); propagatedBuildInputs = [pkgconfig zlib ilmbase]; configureFlags = "--enable-shared --disable-static --enable-imfexamples"; } diff --git a/pkgs/development/libraries/openexr_ctl/default.nix b/pkgs/development/libraries/openexr_ctl/default.nix new file mode 100644 index 000000000000..634a38990cb1 --- /dev/null +++ b/pkgs/development/libraries/openexr_ctl/default.nix @@ -0,0 +1,24 @@ +args: +args.stdenv.mkDerivation { + name = "openexr_ctl-1.0.1"; + + src = args.fetchurl { + url = http://kent.dl.sourceforge.net/sourceforge/ampasctl/openexr_ctl-1.0.1.tar.gz; + sha256 = "1jg9smpaplal8l14djp184wzk11nwd3dvm4lhkp69kjgw8jdd21d"; + }; + + propagatedBuildInputs = (with args; [ilmbase]); + buildInputs = ( with args; [openexr ctl]); + configureFlags="--with-ilmbase-prefix=${args.ilmbase}"; + #configurePhase = " + #export CXXFLAGS=\"-I${args.ilmbase}/include -L${args.ilmbase}/lib\" + #echo $CXXFLAGS + #unset configurePhase; configurePhase + #"; + + meta = { + description = "Color Transformation Language"; + homepage = http://ampasctl.sourceforge.net; + license = "SOME OPEN SOURCE LICENSE"; # TODO which exactly is this? + }; +} diff --git a/pkgs/development/libraries/proj.4/default.nix b/pkgs/development/libraries/proj.4/default.nix new file mode 100644 index 000000000000..6449a188f2be --- /dev/null +++ b/pkgs/development/libraries/proj.4/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "proj-4.5.0"; + + src = args.fetchurl { + url = ftp://ftp.remotesensing.org/proj/proj-4.5.0.tar.gz; + sha256 = "1d2qz0vgp13hkfgaz7hkblhb9w2fh2blbjqz73xdinwc08cmflqv"; + }; + + buildInputs =(with args; []); + + meta = { + description = "Cartographic Projections Library"; + homepage = http://proj.maptools.org; + license = "MIT"; + }; +} diff --git a/pkgs/development/tools/selenium/remote-control/default.nix b/pkgs/development/tools/selenium/remote-control/default.nix new file mode 100644 index 000000000000..e2bf63264a6d --- /dev/null +++ b/pkgs/development/tools/selenium/remote-control/default.nix @@ -0,0 +1,23 @@ +args: +args.stdenv.mkDerivation { + name = "selenium-rc-0.8.3-binary"; + + src = args.fetchurl { + url = http://release.openqa.org/cgi-bin/selenium-remote-control-redirect.zip; + sha256 = "694b46a8440011bcedc4fdc6d01fd91c8b4b4b62b7c6629ace4e745ef47f583e"; + }; + + phases = "installPhase"; + installPhase = " + ensureDir \$out/lib + cp selenium-server-*/*.jar \$out/lib + "; + + buildInputs =(with args; [unzip]); + + meta = { + description = "test tool for web applications"; + homepage = http://www.openqa.org/selenium-c; + license = ""; + }; +} diff --git a/pkgs/games/construo/0.2.2.nix b/pkgs/games/construo/0.2.2.nix new file mode 100644 index 000000000000..964b0e3898e6 --- /dev/null +++ b/pkgs/games/construo/0.2.2.nix @@ -0,0 +1,29 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://savannah.nongnu.org/download/construo/construo-0.2.2.tar.gz; + sha256 = "0c661rjasax4ykw77dgqj39jhb4qi48m0bhhdy42vd5a4rfdrcck"; + }; + + buildInputs = [libX11 zlib xproto] + ++ (if args ? mesa then [mesa freeglut] else []) + ; + configureFlags = [""]; + } null; /* null is a terminator for sumArgs */ +let +preConfigure = FullDepEntry (" + sed -e 's/math[.]h/cmath/' -i vector.cxx + sed -e 's/games/bin/' -i Makefile.in +") [doUnpack minInit]; +in +stdenv.mkDerivation rec { + name = "construo-"+version; + builder = writeScript (name + "-builder") + (textClosure [preConfigure doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Construo masses and springs simulation. +"; + }; +} diff --git a/pkgs/misc/tex/auctex/default.nix b/pkgs/misc/tex/auctex/default.nix index 68599f4b246d..1059e85cdc05 100644 --- a/pkgs/misc/tex/auctex/default.nix +++ b/pkgs/misc/tex/auctex/default.nix @@ -10,5 +10,6 @@ stdenv.mkDerivation { url = http://ftp.gnu.org/pub/gnu/auctex/auctex-11.84.tar.gz; md5 = "73970c51221524442c11cde13d0584e9"; }; + configureFlags="--with-lispdir=\${out}/emacs/site-lisp --disable-preview"; buildInputs = [ emacs tetex ]; } diff --git a/pkgs/os-specific/linux/ndiswrapper/default.nix b/pkgs/os-specific/linux/ndiswrapper/default.nix new file mode 100644 index 000000000000..0d8b351e58b4 --- /dev/null +++ b/pkgs/os-specific/linux/ndiswrapper/default.nix @@ -0,0 +1,26 @@ +args: +with args; +args.stdenv.mkDerivation { + name = "ndiswrapper-1.49-stable"; + + # need at least .config and include + inherit kernel; + + buildPhase = " + make KBUILD=\$kernel/lib/modules/*/build; + "; + + # should we use unstable? + src = args.fetchurl { + url = http://kent.dl.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-1.49.tar.gz; + sha256 = "1b9nqkk7gv6gffzj9b8mjy5myxf2afwpyr2n5wbfsylf15dvvvjr"; + }; + + buildInputs =(with args; [kernelHeaders kernel]); + + meta = { + description = "Ndis driver wrapper for the Linux kernel"; + homepage = http://sourceforge.net/projects/ndiswrapper; + license = "GPL"; + }; +} diff --git a/pkgs/os-specific/linux/upstart/jobcontrol.nix b/pkgs/os-specific/linux/upstart/jobcontrol.nix new file mode 100644 index 000000000000..5be0276ffd52 --- /dev/null +++ b/pkgs/os-specific/linux/upstart/jobcontrol.nix @@ -0,0 +1,15 @@ +args: with args; +stdenv.mkDerivation { + name = "upstart-jobcontrol"; + buildCommand = " + mkdir -p \$out/bin + echo ' + file=/etc/event.d/\$1 + shift + controlscript=\$(egrep exec\\|respawn \$file | tail | sed -e s/^\\\\s\\\\+//g | sed -e s/\\\\s\\\\+/\\ /g | cut -f 2 -d \\ ) + echo Running \$controlscript \"\$@\" + \$controlscript \"\$@\" + ' >\$out/bin/jobcontrol + chmod a+x \$out/bin/jobcontrol + "; +} diff --git a/pkgs/os-specific/linux/util-linux/default.nix b/pkgs/os-specific/linux/util-linux/default.nix index 7f54a0c32eeb..0c7ebef7eb3b 100644 --- a/pkgs/os-specific/linux/util-linux/default.nix +++ b/pkgs/os-specific/linux/util-linux/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl}: +args: with args; stdenv.mkDerivation { name = "util-linux-2.13-pre7"; @@ -10,6 +10,10 @@ stdenv.mkDerivation { configureFlags = "--disable-use-tty-group"; + buildInputs = [] + ++ (if args ? ncurses then [args.ncurses] else []) + ; + preBuild = " makeFlagsArray=(usrbinexecdir=$out/bin usrsbinexecdir=$out/sbin datadir=$out/share exampledir=$out/share/getopt) "; diff --git a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix new file mode 100644 index 000000000000..146d55e90c6f --- /dev/null +++ b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix @@ -0,0 +1,48 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchcvs { + url = ":pserver:anonymous@relfs.cvs.sourceforge.net:/cvsroot/relfs"; + module = "relfs"; + date = "2007-12-01"; + sha256 = "ef8e2ebfda6e43240051a7af9417092b2af50ece8b5c6c3fbd908ba91c4fe068"; + }; + + buildInputs = [ocaml fuse postgresql pcre + e2fsprogs gnomevfs pkgconfig GConf]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +let build = FullDepEntry (" + cd deps + sed -e 's/^CPP/#&/ ; s/^# CPP=gcc/CPP=gcc/' -i Makefile.camlidl + make + cd ../src + sed -e 's/NULL\\|FALSE/0/g' -i Mimetype_lib.c + sed -e 's@/usr/local/@'\$out/'@' -i Makefile + sed -e '/install:/a\\\tmkdir -p '\$out'/share' -i Makefile + make + mkdir -p \$out/bin + echo 'dropdb relfs_\$1 ; + rm -rf /tmp/relfs-\$1-tmp; + mkdir /tmp/relfs-\$1-tmp; + USER=\$1 relfs -f -s /tmp/relfs-raskin-tmp & + sleep 1 && + kill -15 \${!}; + rm -rf /tmp/relfs-\$1-tmp ; + psql -d relfs_\$1 <<< \"ALTER DATABASE relfs_raskin OWNER TO raskin; + ALTER TABLE obj OWNER TO \$1; + ALTER TABLE obj_mimetype OWNER TO \$1; + ALTER TABLE membership OWNER TO \$1;\"' > \$out/bin/relfs_grant; + chmod a+x \$out/bin/relfs_grant; +") [minInit doUnpack addInputs]; +in +stdenv.mkDerivation rec { + name = "relfs-"+version; + builder = writeScript (name + "-builder") + (textClosure [build doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Relational FS over FUSE. +"; + }; +} diff --git a/pkgs/tools/networking/openssh/default.nix b/pkgs/tools/networking/openssh/default.nix index 12e1594fdfbc..2802ac887aab 100644 --- a/pkgs/tools/networking/openssh/default.nix +++ b/pkgs/tools/networking/openssh/default.nix @@ -24,6 +24,7 @@ stdenv.mkDerivation { preConfigure = " configureFlags=\"$configureFlags --with-privsep-path=$out/empty\" ensureDir $out/empty + substituteInPlace pathnames.h --replace 'SSHDIR \"/ssh_config\"' '\"/etc/ssh/ssh_config\"' "; postInstall = " diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6977679bb2c9..e38513d65a77 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -204,7 +204,7 @@ rec { args: with args.lib; with args; if ( builtins.isAttrs extraAttrs ) then builtins.throw "the argument extraAttrs needs to be a function beeing passed co, but attribute set passed " else - let co = chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in + let co = lib_unstable.chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in args.stdenv.mkDerivation ( { inherit (co) configureFlags buildInputs /*flags*/; @@ -672,6 +672,16 @@ rec { zlibSupport = !stdenv ? isDietLibC; }; + relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs) { + inherit fetchcvs stdenv ocaml postgresql fuse pcre + builderDefs e2fsprogs pkgconfig; + inherit (gnome) gnomevfs GConf; + }; + + relfs = relfsFun { + version = "cvs.2007.12.01"; + } null; + replace = import ../tools/text/replace { inherit fetchurl stdenv; }; @@ -972,7 +982,7 @@ rec { ghcsAndLibs = assert builtins ? listToAttrs; recurseIntoAttrs (import ../development/compilers/ghcs { - inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline; + inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline stdenv; inherit ghcPkgUtil; lib = lib_unstable; }); @@ -1013,10 +1023,10 @@ rec { ghc = ghc661; ghc68 = lowPrio (import ../development/compilers/ghc-6.8 { - inherit fetchurl stdenv readline perl gmp ncurses libxml2 libxslt pkgconfig; + inherit fetchurl stdenv readline perl gmp ncurses pkgconfig; + inherit (gtkLibs) gtk; m4 = gnum4; ghc = ghcboot; - inherit (gtkLibs) gtk; }); ghc661 = import ../development/compilers/ghc-6.6.1 { @@ -1229,7 +1239,7 @@ rec { # perhaps this can be done setting php_value in apache don't have time to investigate any further ? # This expression is a quick hack now. But perhaps it helps you adding the configuration flags you need? php = (import ../development/interpreters/php_configurable) { - inherit mkDerivationByConfiguration; + inherit mkDerivationByConfiguration stdenv; lib = lib_unstable; inherit fetchurl flex bison apacheHttpd; # gettext; mysql = mysql5; @@ -1489,6 +1499,11 @@ rec { inherit fetchurl stdenv; }); + # couldn't find the source yet + selenium_rc_binary = import ../development/tools/selenium/remote-control { + inherit fetchurl stdenv unzip; + }; + scons = import ../development/tools/build-managers/scons { inherit fetchurl stdenv python; }; @@ -1651,6 +1666,10 @@ rec { inherit fetchurl stdenv; }; + ctl = import ../development/libraries/ctl { + inherit fetchurl stdenv ilmbase; + }; + cppunit = import ../development/libraries/cppunit { inherit fetchurl stdenv; }; @@ -1726,7 +1745,7 @@ rec { }; ffmpeg_svn = import ../development/libraries/ffmpeg_svn_snapshot { - inherit fetchurl stdenv; + inherit fetchsvn stdenv; }; fftw = import ../development/libraries/fftw { @@ -1734,13 +1753,12 @@ rec { }; - # commented out because it's using the new configuration style proposal which is unstable - # needs some testing .. - #fltk20 = (import ../development/libraries/fltk) { - #inherit fetchurl stdenv lib mesa mesaHeaders libpng libjpeg zlib ; - #inherit (xlibs) libX11 libXext; - #flags = [ "useNixLibs" "threads" "shared" ]; - #}; + fltk20 = (import ../development/libraries/fltk) { + inherit mkDerivationByConfiguration x11; + inherit fetchurl stdenv mesa mesaHeaders libpng libjpeg zlib ; + flags = [ "useNixLibs" "threads" "shared" "gl" ]; + lib = lib_unstable; + }; fontconfig = import ../development/libraries/fontconfig { inherit fetchurl stdenv freetype expat; @@ -1762,6 +1780,15 @@ rec { inherit fetchurl stdenv; }; + geos = import ../development/libraries/geos { + lib = lib_unstable; + inherit fetchurl fetchsvn stdenv mkDerivationByConfiguration autoconf automake libtool swig which; + use_svn = stdenv.system == "x86_64-linux"; + python = python; + # optional features: + # python / ruby support + }; + gettext = getVersion "gettext" gettext_alts; gettext_alts = import ../development/libraries/gettext { @@ -1818,6 +1845,11 @@ rec { inherit fetchurl stdenv libgpgerror gnupg; }; + # gnu scientific library + gsl = import ../development/libraries/gsl { + inherit fetchurl stdenv; + }; + gtkLibs = recurseIntoAttrs gtkLibs210; gtkLibs1x = import ../development/libraries/gtk-libs-1.x { @@ -2019,9 +2051,9 @@ rec { }; # commented out because it's using the new configuration style proposal which is unstable - #libsamplerate = (import ../development/libraries/libsamplerate) { - # inherit fetchurl stdenv mkDerivationByConfigruation pkgconfig lib; - #}; + libsamplerate = if builtins ? listToAttrs then (import ../development/libraries/libsamplerate) { + inherit fetchurl stdenv mkDerivationByConfiguration pkgconfig lib; + } else null; libgsf = import ../development/libraries/libgsf { inherit fetchurl stdenv perl perlXMLParser pkgconfig libxml2 gettext bzip2 @@ -2214,13 +2246,21 @@ rec { inherit fetchurl stdenv zlib libxml2; }; + # this ctl version is needed by openexr_viewers + openexr_ctl = import ../development/libraries/openexr_ctl { + inherit fetchurl stdenv ilmbase ctl; + openexr = openexr_1_6_1; + }; + openexr_1_6_1 = import ../development/libraries/openexr { - inherit fetchurl stdenv ilmbase zlib pkgconfig; + inherit fetchurl stdenv ilmbase zlib pkgconfig lib; version = "1.6.1"; + # optional features: + inherit ctl; }; # This older version is needed by blender (it complains about missing half.h ) openexr_1_4_0 = import ../development/libraries/openexr { - inherit fetchurl stdenv ilmbase zlib pkgconfig; + inherit fetchurl stdenv ilmbase zlib pkgconfig lib; version = "1.4.0"; }; @@ -2240,7 +2280,6 @@ rec { pcre = import ../development/libraries/pcre { inherit fetchurl stdenv; unicodeSupport = getFlag "unicode" "pcre" false; - cplusplusSupport = !stdenv ? isDietLibC; }; poppler = import ../development/libraries/poppler { @@ -2256,6 +2295,11 @@ rec { inherit fetchurl stdenv gettext libtool autoconf automake; }; + + proj = import ../development/libraries/proj.4 { + inherit fetchurl stdenv; + }; + qt3 = import ../development/libraries/qt-3 { inherit fetchurl stdenv x11 zlib libjpeg libpng which mysql mesa; inherit (xlibs) xextproto libXft libXrender libXrandr randrproto @@ -3146,6 +3190,13 @@ rec { stdenv = overrideGCC stdenv gcc34; }; + /* compiles but has to be integrated into the kernel somehow + ndiswrapper = import ../os-specific/linux/ndiswrapper { + inherit fetchurl stdenv; + inherit kernel; + }; + */ + nettools = import ../os-specific/linux/net-tools { inherit fetchurl stdenv; }; @@ -3276,6 +3327,10 @@ rec { inherit fetchurl stdenv; }; + upstartJobControl = import ../os-specific/linux/upstart/jobcontrol.nix { + inherit stdenv; + }; + usbutils = import ../os-specific/linux/usbutils { inherit fetchurl stdenv libusb; }; @@ -3284,6 +3339,10 @@ rec { inherit fetchurl stdenv; }; + utillinuxCurses = import ../os-specific/linux/util-linux { + inherit fetchurl stdenv ncurses; + }; + utillinuxStatic = lowPrio (appendToName "static" (import ../os-specific/linux/util-linux { inherit fetchurl; stdenv = makeStaticBinaries stdenv; @@ -3436,13 +3495,12 @@ rec { }; blender = import ../applications/misc/blender { inherit cmake mesa gettext freetype SDL libtiff fetchurl glibc scons x11 - libjpeg libpng zlib /* smpeg sdl */; + libjpeg libpng zlib stdenv /* smpeg sdl */; inherit (xlibs) inputproto libXi; lib = lib_unstable; - python = python_alts.v_2_5; + python = builtins.getAttr "2.5" python_alts; freealut = freealut_soft; openal = openalSoft; - stdenv = stdenvUsingSetupNew2; openexr = openexr_1_4_0; }; @@ -3628,6 +3686,12 @@ rec { xftSupport = true; }; + exrdisplay = import ../applications/graphics/exrdisplay { + inherit fetchurl stdenv pkgconfig mesa which openexr_ctl; + fltk = fltk20; + openexr = openexr_1_6_1; + }; + fbpanelFun = lib.sumArgs (selectVersion ../applications/window-managers/fbpanel) { inherit fetchurl stdenv builderDefs pkgconfig libpng libjpeg libtiff librsvg; inherit (gtkLibs) gtk; @@ -4045,9 +4109,9 @@ rec { } null; # commented out because it's using the new configuration style proposal which is unstable - /* - sox = import ../applications/misc/audio/sox { - inherit fetchurl stdenv lib mkDerivationByConfigruation; + + sox = if builtins ? listToAttrs then import ../applications/misc/audio/sox { + inherit fetchurl stdenv lib mkDerivationByConfiguration; # optional features inherit alsaLib; # libao inherit libsndfile libogg flac libmad lame libsamplerate; @@ -4056,8 +4120,8 @@ rec { # /tmp/nix-7957-1/sox-14.0.0/src/ffmpeg.c:130: undefined reference to `avcodec_decode_audio2 # That's why I'v added ffmpeg_svn ffmpeg = ffmpeg_svn; - }; - */ + } else null; + spoofax = import ../applications/editors/eclipse/plugins/spoofax { inherit fetchurl stdenv; @@ -4188,7 +4252,7 @@ rec { xara = import ../applications/graphics/xara { inherit fetchurl stdenv autoconf automake libtool gettext cvs wxGTK - pkgconfig libxml2 zip libpng libjpeg; + pkgconfig libxml2 zip libpng libjpeg shebangfix perl freetype; inherit (gtkLibs) gtk; }; @@ -4280,6 +4344,16 @@ rec { ### GAMES + construoFun = lib.sumArgs (selectVersion ../games/construo) { + inherit stdenv fetchurl builderDefs + zlib; + inherit (xlibs) libX11 xproto; + }; + + construo = construoFun { + inherit mesa freeglut; + version = "0.2.2"; + } null; exult = import ../games/exult { inherit fetchurl SDL SDL_mixer zlib libpng unzip; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index 94f83b9c06fd..df7df3e71a0f 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -12,6 +12,7 @@ args: with args; with stringsWithDeps; with lib; else if (hasSuffixHack ".tar.gz" s) || (hasSuffixHack ".tgz" s) then "tgz" else if (hasSuffixHack ".tar.bz2" s) || (hasSuffixHack ".tbz2" s) then "tbz2" else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip" + else if (hasSuffixHack "-cvs-export" s) then "cvs-dir" else (abort "unknown archive type : ${s}")); defAddToSearchPath = FullDepEntry (" @@ -175,6 +176,10 @@ args: with args; with stringsWithDeps; with lib; unzip '${s}' cd \"$( unzip -lqq '${s}' | tail -1 | sed -e 's@^\\(\\s\\+[-0-9:]\\+\\)\\{3,3\\}\\s\\+\\([^/]\\+\\)/.*@\\2@' )\" + " else if (archiveType s) == "cvs-dir" then " + cp -r '${s}' . + cd \$(basename ${s}) + chmod u+rwX -R . " else (abort "unknown archive type : ${s}"))+ (if args ? goSrcDir then args.goSrcDir else "") ) [minInit]; From b5b3671318e25466e9f71ec91330a70751b44767 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 15:21:56 +0000 Subject: [PATCH 090/320] removed unused file svn path=/nixpkgs/branches/stdenv-updates/; revision=9896 --- pkgs/development/compilers/ghc-6.8/d.nix | 37 ------------------------ 1 file changed, 37 deletions(-) delete mode 100644 pkgs/development/compilers/ghc-6.8/d.nix diff --git a/pkgs/development/compilers/ghc-6.8/d.nix b/pkgs/development/compilers/ghc-6.8/d.nix deleted file mode 100644 index a011405f541f..000000000000 --- a/pkgs/development/compilers/ghc-6.8/d.nix +++ /dev/null @@ -1,37 +0,0 @@ - -stdenv.mkDerivation (rec { - homepage = "http://www.haskell.org/ghc"; - - src = map fetchurl [ - { url = "${homepage}/dist/stable/dist/${name}-src.tar.bz2"; - } - { url = "${homepage}/dist/stable/dist/${name}-src-extralibs.tar.bz2"; - } - ]; - - - setupHook = ./setup-hook.sh; - - meta = { - }; - - postInstall = " - ensureDir \"$out/nix-support\" - echo \"# Path to the GHC compiler directory in the store\" > $out/nix-support/setup-hook - echo \"ghc=$out\" >> $out/nix-support/setup-hook - echo \"\" >> $out/nix-support/setup-hook - cat $setupHook >> $out/nix-support/setup-hook - "; - - patch64 = ./x86_64-linux_patch; - - # Thanks to Ian Lynagh ghc now works on x86_64-linux as well - patchPhase = if (stdenv.system == "x86_64-linx") then "patch -p2 < $patch64" else ""; - - - # the presence of this file makes Cabal cry for happy while generating makefiles ... - preConfigure = " - echo 'GhcThreaded=NO' > mk/build.mk - rm libraries/haskell-src/Language/Haskell/Parser.ly - "; -}) From f4464f2193a6780b8f9b03c554a6742f81b04847 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 8 Dec 2007 23:33:16 +0000 Subject: [PATCH 091/320] Added prefix patch to ndiswrapper svn path=/nixpkgs/branches/stdenv-updates/; revision=9897 --- .../os-specific/linux/ndiswrapper/default.nix | 10 ++- .../linux/ndiswrapper/prefix.patch | 78 +++++++++++++++++++ 2 files changed, 84 insertions(+), 4 deletions(-) create mode 100644 pkgs/os-specific/linux/ndiswrapper/prefix.patch diff --git a/pkgs/os-specific/linux/ndiswrapper/default.nix b/pkgs/os-specific/linux/ndiswrapper/default.nix index 0d8b351e58b4..5138ae4f9b8f 100644 --- a/pkgs/os-specific/linux/ndiswrapper/default.nix +++ b/pkgs/os-specific/linux/ndiswrapper/default.nix @@ -1,6 +1,5 @@ -args: -with args; -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "ndiswrapper-1.49-stable"; # need at least .config and include @@ -16,7 +15,10 @@ args.stdenv.mkDerivation { sha256 = "1b9nqkk7gv6gffzj9b8mjy5myxf2afwpyr2n5wbfsylf15dvvvjr"; }; - buildInputs =(with args; [kernelHeaders kernel]); + buildInputs =[kernelHeaders kernel]; + + # this is a patch against svn head, not stable version + patches = [./prefix.patch]; meta = { description = "Ndis driver wrapper for the Linux kernel"; diff --git a/pkgs/os-specific/linux/ndiswrapper/prefix.patch b/pkgs/os-specific/linux/ndiswrapper/prefix.patch new file mode 100644 index 000000000000..7d44c4fe7571 --- /dev/null +++ b/pkgs/os-specific/linux/ndiswrapper/prefix.patch @@ -0,0 +1,78 @@ +diff --git a/ndiswrapper/driver/Makefile b/ndiswrapper/driver/Makefile +index b0c2a9d..8907a05 100644 +--- a/ndiswrapper/driver/Makefile ++++ b/ndiswrapper/driver/Makefile +@@ -119,6 +119,10 @@ ifdef WRAP_PREEMPT + MOD_CFLAGS += -DWRAP_PREEMPT + endif + ++ifdef DIST_DESTDIR ++MOD_CFLAGS += -DPREFIX=\"$(DIST_DESTDIR)\" ++endif ++ + .PHONY: prereq_check gen_exports clean dist_clean install stack_check + + all : prereq_check win2lin_stubs.h gen_exports compat.h default stack_check +@@ -355,7 +359,7 @@ install: prereq_check win2lin_stubs.h gen_exports compat.h default stack_check + echo $(INST_DIR) + mkdir -p $(INST_DIR) + install -m 0644 $(MODULE) $(INST_DIR) +- -@/bin/rm -rf $(SRC_DIR)/.tmp_versions ++ -@rm -rf $(SRC_DIR)/.tmp_versions + ifndef DIST_DESTDIR + -/sbin/depmod -a $(KVERS) -b $(DESTDIR) + endif +diff --git a/ndiswrapper/driver/loader.c b/ndiswrapper/driver/loader.c +index 930606f..9a8e9f0 100644 +--- a/ndiswrapper/driver/loader.c ++++ b/ndiswrapper/driver/loader.c +@@ -106,7 +106,7 @@ struct wrap_driver *load_wrap_driver(struct wrap_device *wd) + EXIT1(return NULL); + } + INIT_COMPLETION(loader_complete); +- ret = call_usermodehelper("/sbin/loadndisdriver", argv, env ++ ret = call_usermodehelper(USERMOD_HELPER, argv, env + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + , 1 + #endif +@@ -272,7 +272,7 @@ struct wrap_bin_file *get_bin_file(char *bin_file_name) + EXIT1(return NULL); + } + INIT_COMPLETION(loader_complete); +- ret = call_usermodehelper("/sbin/loadndisdriver", argv, env ++ ret = call_usermodehelper(USERMOD_HELPER, argv, env + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + , 1 + #endif +@@ -711,7 +711,7 @@ struct wrap_device *load_wrap_device(struct load_device *load_device) + EXIT1(return NULL); + } + INIT_COMPLETION(loader_complete); +- ret = call_usermodehelper("/sbin/loadndisdriver", argv, env ++ ret = call_usermodehelper(USERMOD_HELPER, argv, env + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + , 1 + #endif +diff --git a/ndiswrapper/driver/ndiswrapper.h b/ndiswrapper/driver/ndiswrapper.h +index 4a78dc6..c11a074 100644 +--- a/ndiswrapper/driver/ndiswrapper.h ++++ b/ndiswrapper/driver/ndiswrapper.h +@@ -19,8 +19,17 @@ + #define DRIVER_VERSION "1.50" + #define UTILS_VERSION "1.9" + ++#ifndef PREFIX ++#define PREFIX ++#endif ++ + #define DRIVER_NAME "ndiswrapper" +-#define DRIVER_CONFIG_DIR "/etc/ndiswrapper" ++ ++#ifndef DRIVER_CONFIG_DIR ++# define DRIVER_CONFIG_DIR PREFIX "/etc/ndiswrapper" ++#endif ++ ++#define USERMOD_HELPER PREFIX "/sbin/loadndisdriver" + + #define SSID_MAX_WPA_IE_LEN 40 + #define NDIS_ESSID_MAX_SIZE 32 From 8c23c4a8a17b8a832fba1aaf5d4adb44f90e4f0c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:20:42 +0000 Subject: [PATCH 092/320] kde4-support: new svn revision svn path=/nixpkgs/branches/stdenv-updates/; revision=9912 --- pkgs/desktops/kde-4/support/akode.nix | 8 +--- pkgs/desktops/kde-4/support/default.nix | 44 +++++++-------------- pkgs/desktops/kde-4/support/eigen.nix | 8 +--- pkgs/desktops/kde-4/support/gmm.nix | 8 +--- pkgs/desktops/kde-4/support/qca.nix | 9 +---- pkgs/desktops/kde-4/support/qimageblitz.nix | 8 +--- pkgs/desktops/kde-4/support/soprano.nix | 8 +--- pkgs/desktops/kde-4/support/strigi.nix | 8 +--- pkgs/desktops/kde-4/support/taglib.nix | 8 +--- 9 files changed, 23 insertions(+), 86 deletions(-) diff --git a/pkgs/desktops/kde-4/support/akode.nix b/pkgs/desktops/kde-4/support/akode.nix index 1385def6b559..8fdf6736572e 100644 --- a/pkgs/desktops/kde-4/support/akode.nix +++ b/pkgs/desktops/kde-4/support/akode.nix @@ -2,12 +2,6 @@ args: with args; stdenv.mkDerivation { name = "akode-2.0.0dev"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/akode; - rev = 732646; - md5 = "6629ffedc42c020d2e8645910a4efdf5"; - }; - + src = svnSrc "akode" "0xkzv386wvh16njjv8z84mg3czp7j7n60lwhwns5fwqhx1s30h5y"; buildInputs = [ cmake qt openssl gettext cyrus_sasl alsaLib ]; } diff --git a/pkgs/desktops/kde-4/support/default.nix b/pkgs/desktops/kde-4/support/default.nix index af1dc175bedd..426a5811bd79 100644 --- a/pkgs/desktops/kde-4/support/default.nix +++ b/pkgs/desktops/kde-4/support/default.nix @@ -1,36 +1,22 @@ -args: +oldArgs: +let + args = oldArgs // { + svnSrc = name: hash: + oldArgs.fetchsvn { + url = "svn://anonsvn.kde.org/home/kde/trunk/kdesupport/${name}"; + rev = 747269; + sha256 = hash; + }; + }; +in rec { - qca = (import ./qca.nix) args; akode = (import ./akode.nix) args; - gmm = (import ./gmm.nix) args; eigen = (import ./eigen.nix) args; - taglib = (import ./taglib.nix) args; + gmm = (import ./gmm.nix) args; + qca = (import ./qca.nix) args; + qimageblitz = (import ./qimageblitz.nix) args; soprano = (import ./soprano.nix) args; strigi = (import ./strigi.nix) args; - qimageblitz = (import ./qimageblitz.nix) args; + taglib = (import ./taglib.nix) args; all = [qca gmm eigen taglib soprano strigi qimageblitz]; } -#args: with args; -# -#stdenv.mkDerivation { -# name = "kdesupport-4.0svn-r729462"; -# -# src = fetchsvn { -# url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport; -# rev = 729462; -# md5 = "aa50ec8e5c8d49e1dfd53143345cb4b3"; -# }; -# -# propagatedBuildInputs = [ -# exiv2 -# cmake inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto -# xineramaproto xproto libICE libX11 libXau libXcomposite libXcursor -# libXdamage libXdmcp libXext libXfixes libXft libXi libXpm libXrandr -# libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib -# perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat -# libtool freetype bzip2 shared_mime_info alsaLib libungif cups -# gettext cluceneCore redland stdenv.gcc.libc dbus bison cppunit -# ]; -# CLUCENE_HOME=cluceneCore; -# patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../qca/CMakeLists.txt"; -#} diff --git a/pkgs/desktops/kde-4/support/eigen.nix b/pkgs/desktops/kde-4/support/eigen.nix index a3ac9eff3910..163683a29215 100644 --- a/pkgs/desktops/kde-4/support/eigen.nix +++ b/pkgs/desktops/kde-4/support/eigen.nix @@ -2,12 +2,6 @@ args: with args; stdenv.mkDerivation { name = "eigen-1.0.5"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/eigen; - rev = 732646; - md5 = "f91ad5d3dd992984fb61107fd9050a36"; - }; - + src = svnSrc "eigen" "0dr2gzrf17bdgxj4f9ibk7x5j7fqwwjsl800dzfvrhgj6v1mxm4x"; buildInputs = [ cmake ]; } diff --git a/pkgs/desktops/kde-4/support/gmm.nix b/pkgs/desktops/kde-4/support/gmm.nix index d32c9b9f765e..843f9f6aaed5 100644 --- a/pkgs/desktops/kde-4/support/gmm.nix +++ b/pkgs/desktops/kde-4/support/gmm.nix @@ -2,12 +2,6 @@ args: with args; stdenv.mkDerivation { name = "gmm-svn"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/gmm; - rev = 732646; - md5 = "09ee4cfcbb3c428bc681c2da022648bf"; - }; - + src = svnSrc "gmm" "0qvx9jf17z0mpwy8k6w6bla94gkkslkiv5w98aajfcq34n0zxcpc"; buildInputs = [ cmake ]; } diff --git a/pkgs/desktops/kde-4/support/qca.nix b/pkgs/desktops/kde-4/support/qca.nix index 64b00da91ce7..fda435c7bffe 100644 --- a/pkgs/desktops/kde-4/support/qca.nix +++ b/pkgs/desktops/kde-4/support/qca.nix @@ -2,14 +2,7 @@ args: with args; stdenv.mkDerivation { name = "qca-2.0.0dev"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qca; - rev = 732646; - md5 = "1df54bf3bf327b14ea1948f9080717c3"; - }; - + src = svnSrc "qca" "0dycmk8fn57mz2pfxck6d0g833fqg9zrw17789vxb4ks0xz0p3zp"; buildInputs = [ cmake qt openssl gettext cyrus_sasl libgcrypt gnupg ]; - patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../CMakeLists.txt"; } diff --git a/pkgs/desktops/kde-4/support/qimageblitz.nix b/pkgs/desktops/kde-4/support/qimageblitz.nix index fe6a03ca7c78..3364b4eac5da 100644 --- a/pkgs/desktops/kde-4/support/qimageblitz.nix +++ b/pkgs/desktops/kde-4/support/qimageblitz.nix @@ -2,12 +2,6 @@ args: with args; stdenv.mkDerivation { name = "qimageblitz-4.0.0svn"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/qimageblitz; - rev = 732646; - md5 = "c37fa505368071ec501e966225e30c78"; - }; - + src = svnSrc "qimageblitz" "0gi78bald70bc540jqcpa70x23hycywibn4raf5602hv4d5n8mnx"; buildInputs = [cmake qt]; } diff --git a/pkgs/desktops/kde-4/support/soprano.nix b/pkgs/desktops/kde-4/support/soprano.nix index 0f453d726d77..0cb490b9db7e 100644 --- a/pkgs/desktops/kde-4/support/soprano.nix +++ b/pkgs/desktops/kde-4/support/soprano.nix @@ -2,13 +2,7 @@ args: with args; stdenv.mkDerivation { name = "soprano-1.9.0svn"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/soprano; - rev = 732646; - md5 = "c3b43544536f0f8061e4afeb9e368072"; - }; - + src = svnSrc "soprano" "02xfp7g41ahxwczkxipyi13rav6akhwgspxdhgk5gm94rg10hq2l"; CLUCENE_HOME=cluceneCore; buildInputs = [ cmake qt cluceneCore redland ]; } diff --git a/pkgs/desktops/kde-4/support/strigi.nix b/pkgs/desktops/kde-4/support/strigi.nix index f0e0fe614be9..d1ec98ea25f9 100644 --- a/pkgs/desktops/kde-4/support/strigi.nix +++ b/pkgs/desktops/kde-4/support/strigi.nix @@ -2,13 +2,7 @@ args: with args; stdenv.mkDerivation { name = "strigi-svn"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/strigi; - rev = 732646; - md5 = "15762f5a406ef84bc1cdd776b2ca9a82"; - }; - + src = svnSrc "strigi" "0dp145n93bqp91lvk2n10mghppyhdm3anh1l3a18d20hrvsm42z5"; CLUCENE_HOME=cluceneCore; buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus log4cxx stdenv.gcc.libc exiv2 bison cppunit perl ]; diff --git a/pkgs/desktops/kde-4/support/taglib.nix b/pkgs/desktops/kde-4/support/taglib.nix index 6aecb7a91ef2..9a2acc96636b 100644 --- a/pkgs/desktops/kde-4/support/taglib.nix +++ b/pkgs/desktops/kde-4/support/taglib.nix @@ -2,12 +2,6 @@ args: with args; stdenv.mkDerivation { name = "taglib-1.4svn"; - - src = fetchsvn { - url = svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib; - rev = 732646; - md5 = "647d68a76858cf3a667656c486b0a8c2"; - }; - + src = svnSrc "taglib" "1myfgykflbs3l1mrzg4iv8rb1mbd0vpmzl5dnnslfi9b0xg6ydip"; buildInputs = [ cmake zlib ]; } From e19b3d7f79b332fa81802973e0025f2050d7971b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:20:50 +0000 Subject: [PATCH 093/320] clisp: upgraded to 2.43 (both versions do not work on stdenv-updates branch) svn path=/nixpkgs/branches/stdenv-updates/; revision=9913 --- .../interpreters/clisp/default.nix | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/pkgs/development/interpreters/clisp/default.nix b/pkgs/development/interpreters/clisp/default.nix index 919862378a1e..db2506ae8c73 100644 --- a/pkgs/development/interpreters/clisp/default.nix +++ b/pkgs/development/interpreters/clisp/default.nix @@ -1,15 +1,14 @@ -args: -args.stdenv.mkDerivation { - name = "clisp-2.41a"; +args: with args; +stdenv.mkDerivation { + name = "clisp-2.43"; builder = ./builder.sh; - src = args. + src = fetchurl { - url = mirror://gnu/clisp/release/2.41/clisp-2.41a.tar.bz2; - sha256 = "08z35bni42dhlqlsg5rr5p025961fl82gqvaadrf0jh20jdqspqy"; + url = mirror://gnu/clisp/release/2.43/clisp-2.43.tar.bz2; + sha256 = "10qyn6wccnayf1cyvrcanay6c6laar6z1r608w7ijp6nb763q8dm"; }; - inherit (args) libsigsegv gettext coreutils; - buildInputs = (with args; - [libsigsegv gettext ncurses readline libX11 libXau - libXt pcre zlib]); + inherit libsigsegv gettext coreutils; + buildInputs = [libsigsegv gettext ncurses readline libX11 libXau + libXt pcre zlib]; } From ccb13fd637b24bf04000857f4513c2c747705ae1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:20:58 +0000 Subject: [PATCH 094/320] openalSoft: nix-expr cleanup svn path=/nixpkgs/branches/stdenv-updates/; revision=9914 --- pkgs/development/libraries/openalSoft/default.nix | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/pkgs/development/libraries/openalSoft/default.nix b/pkgs/development/libraries/openalSoft/default.nix index dae9e90522cb..b42e733ea8fe 100644 --- a/pkgs/development/libraries/openalSoft/default.nix +++ b/pkgs/development/libraries/openalSoft/default.nix @@ -1,20 +1,17 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { #The current release is still in a testing phase, though it should be stable # (neither the ABI or API will break). Please try it out and let me know how it # works. :-) name = "openal-soft-testing"; - src = args.fetchurl { - url = http://kcat.strangesoft.net/OpenAL.tar.bz2?2; + src = fetchurl { + url = http://kcat.strangesoft.net/OpenAL.tar.bz2; sha256 = "7b53c3e6eda1a71010651eb058c71c9b0c86b3c15cae5f0ffeeb7222531aa97d"; }; - buildInputs =(with args; [cmake alsaLib]); - #phases = "buildPhase installPhase"; - - buildPhase = "ensureDir \$out; cmake -DCMAKE_INSTALL_PREFIX:PATH=\$out .; make; make install;"; + buildInputs = [cmake alsaLib]; meta = { description = "openal alternative"; From 8dd9e323ff658e34983add17df99bcdedadd540b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:21:12 +0000 Subject: [PATCH 095/320] qt-4: 4.3.3 and sv-746559 svn path=/nixpkgs/branches/stdenv-updates/; revision=9915 --- .../development/libraries/qt-4/.default.nix.swp | Bin 0 -> 12288 bytes pkgs/development/libraries/qt-4/default.nix | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 pkgs/development/libraries/qt-4/.default.nix.swp diff --git a/pkgs/development/libraries/qt-4/.default.nix.swp b/pkgs/development/libraries/qt-4/.default.nix.swp new file mode 100644 index 0000000000000000000000000000000000000000..0e8df16d5e854f37afa8f5fe259e20769cb945f0 GIT binary patch literal 12288 zcmeI2zmFU>6vusOq60z@`~&6^5eS-@-MzhESw%Vl3b`N@8W7@#kax!OV|T{mwLSae zqH7{rLvSjV5?oIa^74iEUcLR@Wpej1LK-!05^F!>YSgf<$7eXu6$vew6T(HKhsRe|CKD;R$#Gk08*PG}ygFHhbO9m5pcVGf%(y z2uE-B1Uvyxz!UHUJONL@6YvB)f%8hh$Tjjein{l6BlI;?Lsy{hpCse~^eJ>7 zdI!1+U4*{9M97!W9Qx}CLjHt)hrWTnfdC`2l(WeFEKw?m*knAIRlb z=nLp`=wry{_aWpjPrwuK1Uvyxz!UHUJb`mS;E1fdgPyB5b+@u`il)8F3O z+FRNhRlQ2Q-^mf!C>#DukXm{M-sl=Wt%3VE^DorOs^ksk6*56j28j0%BhDOz8X?UE6SQiCH zx^7g=ZRzuFH>f2Stt9{eTOs}oQ(<;^nu?8lnu_zcKprmhf3PSXBht};7J{69tu#+) z!09!;9}No;$yu^*b&UoE-Y1b3S)=%Xo^Wfl+K+DCy?fFpG+Y}UU5~E2o}FBcwd8SY zvw@H`#TBHrFl}HO99+GZD$dP9@}sB_aoONiSy_6k8Ixq#Xd1+gM4RETG!5oyG3UAs zXpv?mY>JD7E8AfrvG+o7#VUqg+$decgk8{+GN=}4+u5*WMT+RQR#gRM5o3pV`%o{m z;Z<$Jj3rH+gl~e zG#Zs>|KJ+U8!kd1MREMu(zu1FpyumtMJAf!X!sM;JXpIKhSIjy*6uC7|L3^0^ipQcWpMQad|Iy&sy63b8Wlg92u|j(%dxiHqPE-ei*q?kYgC?d_XB_-}RE4 W<+mZdNtnv?4LU0fzBADskbeNB Date: Wed, 12 Dec 2007 00:21:18 +0000 Subject: [PATCH 096/320] Removed legacy getFlag function svn path=/nixpkgs/branches/stdenv-updates/; revision=9916 --- pkgs/top-level/all-packages.nix | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e38513d65a77..126848d3902b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -154,11 +154,6 @@ rec { version = getConfig [ "environment" "versions" name ]; }; - # Whether user enabled given feature for the given package? - getFlag = flag: package: default: - getConfig [ "environment" "flags" package flag ] - (getConfig [ "environment" "flags" "default" flag ] default); - # The contents of the configuration file found at $NIXPKGS_CONFIG or # $HOME/.nixpkgs/config.nix. config = @@ -2279,7 +2274,7 @@ rec { pcre = import ../development/libraries/pcre { inherit fetchurl stdenv; - unicodeSupport = getFlag "unicode" "pcre" false; + unicodeSupport = getConfig ["pcre" "unicode"] false; }; poppler = import ../development/libraries/poppler { From 6f24ef9bc94bae49ad8d2022e96c3039fac15a5f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:21:38 +0000 Subject: [PATCH 097/320] mysql: v5 is now default svn path=/nixpkgs/branches/stdenv-updates/; revision=9917 --- pkgs/top-level/all-packages.nix | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 126848d3902b..9acb6e666e8c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1234,10 +1234,9 @@ rec { # perhaps this can be done setting php_value in apache don't have time to investigate any further ? # This expression is a quick hack now. But perhaps it helps you adding the configuration flags you need? php = (import ../development/interpreters/php_configurable) { - inherit mkDerivationByConfiguration stdenv; + inherit mkDerivationByConfiguration stdenv mysql; lib = lib_unstable; inherit fetchurl flex bison apacheHttpd; # gettext; - mysql = mysql5; inherit libxml2; }; @@ -1995,8 +1994,7 @@ rec { libdbiDrivers = libdbiDriversFun { version = "0.8.2-1"; - mysql = mysql5; - inherit sqlite; + inherit sqlite mysql; } null; @@ -2857,12 +2855,12 @@ rec { inherit fetchurl stdenv apacheHttpd python; }; - mysql = import ../servers/sql/mysql { + mysql4 = import ../servers/sql/mysql { inherit fetchurl stdenv ncurses zlib perl; ps = procps; /* !!! Linux only */ }; - mysql5 = import ../servers/sql/mysql5 { + mysql = import ../servers/sql/mysql5 { inherit fetchurl stdenv ncurses zlib perl; ps = procps; /* !!! Linux only */ }; From 464b9d8cb390712706deb488abb4085223aa922c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:22:01 +0000 Subject: [PATCH 098/320] kdelibs-4: 4rc2 svn path=/nixpkgs/branches/stdenv-updates/; revision=9918 --- pkgs/desktops/kde-4/libs/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix index 844e4a03320f..cd484fa444c2 100644 --- a/pkgs/desktops/kde-4/libs/default.nix +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation rec { - name = "kdelibs-4.0beta4"; + name = "kdelibs-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdelibs-3.95.0.tar.bz2; - sha256 = "0960880wvwrj68r35knqjjxbqq90xzy1lqv526zyaymp7jc24ybc"; + url = mirror://kde/unstable/3.97/src/kdelibs-3.97.0.tar.bz2; + sha256 = "0g9r7nph6hpdvbmchvp0h5xk4z0da0b5rskqpbixdplsdxcs8xhv"; }; propagatedBuildInputs = [ From 0c8d30be0f52395505db757b4e829309d0045f93 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 12 Dec 2007 00:24:48 +0000 Subject: [PATCH 099/320] qt-4: removed unused files svn path=/nixpkgs/branches/stdenv-updates/; revision=9919 --- .../development/libraries/qt-4/.default.nix.swp | Bin 12288 -> 0 bytes pkgs/development/libraries/qt-4/builder.sh | 9 --------- 2 files changed, 9 deletions(-) delete mode 100644 pkgs/development/libraries/qt-4/.default.nix.swp delete mode 100755 pkgs/development/libraries/qt-4/builder.sh diff --git a/pkgs/development/libraries/qt-4/.default.nix.swp b/pkgs/development/libraries/qt-4/.default.nix.swp deleted file mode 100644 index 0e8df16d5e854f37afa8f5fe259e20769cb945f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2zmFU>6vusOq60z@`~&6^5eS-@-MzhESw%Vl3b`N@8W7@#kax!OV|T{mwLSae zqH7{rLvSjV5?oIa^74iEUcLR@Wpej1LK-!05^F!>YSgf<$7eXu6$vew6T(HKhsRe|CKD;R$#Gk08*PG}ygFHhbO9m5pcVGf%(y z2uE-B1Uvyxz!UHUJONL@6YvB)f%8hh$Tjjein{l6BlI;?Lsy{hpCse~^eJ>7 zdI!1+U4*{9M97!W9Qx}CLjHt)hrWTnfdC`2l(WeFEKw?m*knAIRlb z=nLp`=wry{_aWpjPrwuK1Uvyxz!UHUJb`mS;E1fdgPyB5b+@u`il)8F3O z+FRNhRlQ2Q-^mf!C>#DukXm{M-sl=Wt%3VE^DorOs^ksk6*56j28j0%BhDOz8X?UE6SQiCH zx^7g=ZRzuFH>f2Stt9{eTOs}oQ(<;^nu?8lnu_zcKprmhf3PSXBht};7J{69tu#+) z!09!;9}No;$yu^*b&UoE-Y1b3S)=%Xo^Wfl+K+DCy?fFpG+Y}UU5~E2o}FBcwd8SY zvw@H`#TBHrFl}HO99+GZD$dP9@}sB_aoONiSy_6k8Ixq#Xd1+gM4RETG!5oyG3UAs zXpv?mY>JD7E8AfrvG+o7#VUqg+$decgk8{+GN=}4+u5*WMT+RQR#gRM5o3pV`%o{m z;Z<$Jj3rH+gl~e zG#Zs>|KJ+U8!kd1MREMu(zu1FpyumtMJAf!X!sM;JXpIKhSIjy*6uC7|L3^0^ipQcWpMQad|Iy&sy63b8Wlg92u|j(%dxiHqPE-ei*q?kYgC?d_XB_-}RE4 W<+mZdNtnv?4LU0fzBADskbeNB Date: Sat, 15 Dec 2007 23:45:53 +0000 Subject: [PATCH 100/320] boost: compiles with gcc-4.2 svn path=/nixpkgs/branches/stdenv-updates/; revision=9945 --- pkgs/development/libraries/boost/default.nix | 1 + pkgs/development/libraries/boost/gcc-4.2.patch | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 pkgs/development/libraries/boost/gcc-4.2.patch diff --git a/pkgs/development/libraries/boost/default.nix b/pkgs/development/libraries/boost/default.nix index 5040a763ab81..fe4cdcf03370 100644 --- a/pkgs/development/libraries/boost/default.nix +++ b/pkgs/development/libraries/boost/default.nix @@ -10,5 +10,6 @@ stdenv.mkDerivation { preConfigure=" sed -e 's@^BJAM_CONFIG=\"\"@BJAM_CONFIG=\"--layout=system release threading=multi link=shared\"@g' -i configure "; + patches = [./gcc-4.2.patch]; configureFlags="--with-icu=${icu}"; } diff --git a/pkgs/development/libraries/boost/gcc-4.2.patch b/pkgs/development/libraries/boost/gcc-4.2.patch new file mode 100644 index 000000000000..6c2210d831de --- /dev/null +++ b/pkgs/development/libraries/boost/gcc-4.2.patch @@ -0,0 +1,11 @@ +Index: trunk/tools/jam/src/build.jam +=================================================================== +--- trunk/tools/jam/src/build.jam (revision 40095) ++++ trunk/tools/jam/src/build.jam (revision 41036) +@@ -176,5 +176,5 @@ + ## GCC 2.x, 3.x, 4.x + toolset gcc gcc : "-o " : -D +- : -pedantic ++ : -pedantic -fno-strict-aliasing + [ opt --release : [ opt --symbols : -g : -s ] -O3 ] + [ opt --debug : -g -O0 -fno-inline ] From 203083987fa5e75eca03182b5569e43a8ee4ded2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 15 Dec 2007 23:46:25 +0000 Subject: [PATCH 101/320] kde-4: rc2 svn path=/nixpkgs/branches/stdenv-updates/; revision=9946 --- pkgs/desktops/kde-4/base/default.nix | 10 ++++------ pkgs/desktops/kde-4/default.nix | 8 +++----- pkgs/desktops/kde-4/edu/default.nix | 9 ++++----- pkgs/desktops/kde-4/extragear/default.nix | 4 ++-- pkgs/desktops/kde-4/games/default.nix | 8 ++++---- pkgs/desktops/kde-4/graphics/default.nix | 8 ++++---- pkgs/desktops/kde-4/libs/setup.sh | 9 +++++++++ pkgs/desktops/kde-4/multimedia/default.nix | 6 +++--- pkgs/desktops/kde-4/network/default.nix | 4 ++-- pkgs/desktops/kde-4/pim/default.nix | 6 +++--- pkgs/desktops/kde-4/pimlibs/default.nix | 6 +++--- pkgs/desktops/kde-4/runtime/default.nix | 11 +++++------ pkgs/desktops/kde-4/support/eigen.nix | 2 +- pkgs/desktops/kde-4/support/gmm.nix | 2 +- pkgs/desktops/kde-4/support/qca.nix | 2 +- pkgs/desktops/kde-4/support/qimageblitz.nix | 2 +- pkgs/desktops/kde-4/support/soprano.nix | 2 +- pkgs/desktops/kde-4/support/strigi.nix | 2 +- pkgs/desktops/kde-4/support/taglib.nix | 2 +- pkgs/desktops/kde-4/toys/default.nix | 6 +++--- pkgs/desktops/kde-4/{base => utils}/builder.sh | 1 - pkgs/desktops/kde-4/utils/default.nix | 7 ++++--- pkgs/desktops/kde-4/workspace/builder.sh | 5 +---- pkgs/desktops/kde-4/workspace/default.nix | 10 ++++------ pkgs/top-level/all-packages.nix | 2 +- 25 files changed, 66 insertions(+), 68 deletions(-) rename pkgs/desktops/kde-4/{base => utils}/builder.sh (78%) diff --git a/pkgs/desktops/kde-4/base/default.nix b/pkgs/desktops/kde-4/base/default.nix index 75dbfbf40d4d..6013a507e3a4 100644 --- a/pkgs/desktops/kde-4/base/default.nix +++ b/pkgs/desktops/kde-4/base/default.nix @@ -1,14 +1,12 @@ args: with args; stdenv.mkDerivation { - name = "kdebase-4.0beta4"; - #builder = ./builder.sh; - + name = "kdebase-4.0rc2"; + src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdebase-3.95.0.tar.bz2; - sha256 = "0qf7bn5jqj70hznjk74vpwb7rvk6f5gx9fxwli930b2hskib3zll"; + url = mirror://kde/unstable/3.97/src/kdebase-3.97.0.tar.bz2; + sha256 = "1iavkzfq7f9308j2r70xd6qfng0fncpww8s49hbigzkkdzrjk8gn"; }; propagatedBuildInputs = [kdepimlibs libusb]; - inherit kdelibs; } diff --git a/pkgs/desktops/kde-4/default.nix b/pkgs/desktops/kde-4/default.nix index 9732d9e2b2b7..3e96185beed0 100644 --- a/pkgs/desktops/kde-4/default.nix +++ b/pkgs/desktops/kde-4/default.nix @@ -18,11 +18,9 @@ rec { decibel = import ./decibel fullargs; pim = import ./pim (fullargs // {kdeworkspace = workspace; }); - env = with args; runCommand "kde-env" + env = kde_pkgs: with args; [ (runCommand "kde-env" { - KDEDIRS = lib.concatStringsSep ":" ([ libs pimlibs graphics multimedia - toys network utils games edu base runtime workspace extragear_plasma pim] ++ - support.all); + KDEDIRS = lib.concatStringsSep ":" (kde_pkgs ++ support.all); scriptName = "echo-kde-dirs"; } " @@ -31,5 +29,5 @@ rec { echo \"#!/bin/sh\" > \${scriptPath} echo \"echo -n export KDEDIRS=\${KDEDIRS}\" >> \${scriptPath} chmod +x \${scriptPath} - "; + ")] ++ kde_pkgs ++ support.all ++ [shared_mime_info qt]; } diff --git a/pkgs/desktops/kde-4/edu/default.nix b/pkgs/desktops/kde-4/edu/default.nix index e69a1a49be63..8e6b32c353a2 100644 --- a/pkgs/desktops/kde-4/edu/default.nix +++ b/pkgs/desktops/kde-4/edu/default.nix @@ -1,14 +1,14 @@ args: with args; stdenv.mkDerivation rec { - name = "kdeedu-4.0beta4"; + name = "kdeedu-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdeedu-3.95.0.tar.bz2; - sha256 = "0cydl3pp3l0cbfmf774qh8njyhycaf8yxb27k4xf6mipvw1k9jqf"; + url = mirror://kde/unstable/3.97/src/kdeedu-3.97.0.tar.bz2; + sha256 = "1d2319pzs4ymbp2jgmc1kzkr5d9g5p5d1yg6b5l7z4b2qzhchpl4"; }; - buildInputs = [kdelibs kdepimlibs kdeworkspace boost readline openbabel ocaml + buildInputs = [kdelibs kdepimlibs boost readline openbabel ocaml libusb facile python]; myCmakeFiles = ./myCmakeFiles; patchPhase = " @@ -16,5 +16,4 @@ stdenv.mkDerivation rec { sed -e 's@+facile@\${LIBFACILE_INCLUDE_DIR}@' -i \\ ../kalzium/src/CMakeOCamlInstructions.cmake "; - configureFlags = "--debug-trycompile"; } diff --git a/pkgs/desktops/kde-4/extragear/default.nix b/pkgs/desktops/kde-4/extragear/default.nix index c67d4b8682cb..69fc626db6d0 100644 --- a/pkgs/desktops/kde-4/extragear/default.nix +++ b/pkgs/desktops/kde-4/extragear/default.nix @@ -1,10 +1,10 @@ args: with args; stdenv.mkDerivation { - name = "extragear-plasma-4.0beta4"; + name = "extragear-plasma-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/extragear-plasma-3.95.0.tar.bz2; + url = mirror://kde/unstable/3.97/src/extragear-plasma-3.97.0.tar.bz2; sha256 = "1nzfy34ig66gfpgv6kbcmcap13axcy7kvj43srbd0ic6a0giv283"; }; diff --git a/pkgs/desktops/kde-4/games/default.nix b/pkgs/desktops/kde-4/games/default.nix index e3869e10808f..d82f3971e3cd 100644 --- a/pkgs/desktops/kde-4/games/default.nix +++ b/pkgs/desktops/kde-4/games/default.nix @@ -1,12 +1,12 @@ args: with args; stdenv.mkDerivation { - name = "kdegames-4.0beta4"; + name = "kdegames-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdegames-3.95.0.tar.bz2; - sha256 = "1zsfslnazl8gmiq51y5d16svv7p92yvs2zsz13zg7zpwy4afxzbp"; + url = mirror://kde/unstable/3.97/src/kdegames-3.97.0.tar.bz2; + sha256 = "12a87lfaqlidjlibxk3q43bdza2c6k5ggqblxdnr8ikjdww2sk29"; }; - buildInputs = [kdelibs kdepimlibs kdeworkspace]; + buildInputs = [kdelibs kdepimlibs]; } diff --git a/pkgs/desktops/kde-4/graphics/default.nix b/pkgs/desktops/kde-4/graphics/default.nix index 124c9598c9ea..b765e63108a6 100644 --- a/pkgs/desktops/kde-4/graphics/default.nix +++ b/pkgs/desktops/kde-4/graphics/default.nix @@ -1,13 +1,13 @@ args: with args; stdenv.mkDerivation { - name = "kdegraphics-4.0beta4"; + name = "kdegraphics-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdegraphics-3.95.0.tar.bz2; - sha256 = "0mfsadv9ihhw6s7pcy1yabc21px47nzfs34c76n1888qb09m5dfw"; + url = mirror://kde/unstable/3.97/src/kdegraphics-3.97.0.tar.bz2; + sha256 = "0f16zyvw37nqhbis34rg6yxg6r95yk2vi9lk3zk8lqjwcs81h5fz"; }; - buildInputs = [kdelibs kdepimlibs kdeworkspace libgphoto2 saneBackends + buildInputs = [kdelibs kdepimlibs libgphoto2 saneBackends djvulibre exiv2 poppler chmlib]; } diff --git a/pkgs/desktops/kde-4/libs/setup.sh b/pkgs/desktops/kde-4/libs/setup.sh index 6f899442d27a..851614b0d182 100755 --- a/pkgs/desktops/kde-4/libs/setup.sh +++ b/pkgs/desktops/kde-4/libs/setup.sh @@ -2,4 +2,13 @@ addKDEDIRS() { addToSearchPath KDEDIRS /share/kde4 /. $1 } + +fixCmakeDbusCalls() +{ + dbusPrefix=${1:-@out@} + echo "Fixing dbus calls in CMakeLists.txt files" +# Trailing slash in sed is essential + find .. -name CMakeLists.txt \ + | xargs sed -e "s#\${DBUS_INTERFACES_INSTALL_DIR}/#${dbusPrefix}/share/dbus-1/interfaces/#" -i +} envHooks=(${envHooks[@]} addKDEDIRS) diff --git a/pkgs/desktops/kde-4/multimedia/default.nix b/pkgs/desktops/kde-4/multimedia/default.nix index f0870c1740d4..feedc95b15b9 100644 --- a/pkgs/desktops/kde-4/multimedia/default.nix +++ b/pkgs/desktops/kde-4/multimedia/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdemultimedia-4.0beta4"; + name = "kdemultimedia-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdemultimedia-3.95.0.tar.bz2; - sha256 = "0vjk5gpn45fh7hm982jw1frd7fr0grff96ksmh29wnkc160rh8va"; + url = mirror://kde/unstable/3.97/src/kdemultimedia-3.97.0.tar.bz2; + sha256 = "0q78d1gh5na72aj604myy23qn6xb0izw0igsi1h9i4pc2bsis87i"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace libogg flac cdparanoia lame diff --git a/pkgs/desktops/kde-4/network/default.nix b/pkgs/desktops/kde-4/network/default.nix index 21ae2074e068..d962a9c40ea4 100644 --- a/pkgs/desktops/kde-4/network/default.nix +++ b/pkgs/desktops/kde-4/network/default.nix @@ -1,10 +1,10 @@ args: with args; stdenv.mkDerivation { - name = "kdenetwork-4.0beta4"; + name = "kdenetwork-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdenetwork-3.95.0.tar.bz2; + url = mirror://kde/unstable/3.97/src/kdenetwork-3.97.0.tar.bz2; sha256 = "118r55aw0pag78kawjfn3vya7aca12n5ypknm1i4khxs747hxqbr"; }; diff --git a/pkgs/desktops/kde-4/pim/default.nix b/pkgs/desktops/kde-4/pim/default.nix index f0f4184d391f..397c57df5bf3 100644 --- a/pkgs/desktops/kde-4/pim/default.nix +++ b/pkgs/desktops/kde-4/pim/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdepim-4.0beta4"; + name = "kdepim-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdepim-3.95.0.tar.bz2; - sha256 = "0gzvm4h6ij7i119apmh9w82raygahr18bl0i9m3ynf2mcca0aq94"; + url = mirror://kde/unstable/3.97/src/kdepim-3.97.0.tar.bz2; + sha256 = "1x5ywn1z963azrrm6rlsspzlsbbwxcsb3zc93pdy80qq1jwsf964"; }; buildInputs = [libXinerama mesa stdenv.gcc.libc alsaLib kdelibs kdepimlibs diff --git a/pkgs/desktops/kde-4/pimlibs/default.nix b/pkgs/desktops/kde-4/pimlibs/default.nix index 6d273acc67e0..077cca5e32c9 100644 --- a/pkgs/desktops/kde-4/pimlibs/default.nix +++ b/pkgs/desktops/kde-4/pimlibs/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdepimlibs-4.0beta4"; + name = "kdepimlibs-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdepimlibs-3.95.0.tar.bz2; - sha256 = "1dhn5x3k9myqfymv6ry84v0zm2qwxnrlm1vdlllfvmgbm5nz34mg"; + url = mirror://kde/unstable/3.97/src/kdepimlibs-3.97.0.tar.bz2; + sha256 = "1zv4l592288bdfxqllm8z1cmsjcprfji5harcxf9hhz95igp5n7j"; }; propagatedBuildInputs = [kdelibs boost gpgme cyrus_sasl openldap]; diff --git a/pkgs/desktops/kde-4/runtime/default.nix b/pkgs/desktops/kde-4/runtime/default.nix index f3f241a7ffee..f1740f959fda 100644 --- a/pkgs/desktops/kde-4/runtime/default.nix +++ b/pkgs/desktops/kde-4/runtime/default.nix @@ -1,15 +1,14 @@ args: with args; stdenv.mkDerivation { - name = "kdebase-runtime-4.0beta4"; - builder = ./builder.sh; + name = "kdebase-runtime-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdebase-runtime-3.95.0.tar.bz2; - sha256 = "1s4fhbz7gpdxmvlr20c7n6cvcb9sn0qxigzpljsxw9524w177ksr"; + url = mirror://kde/unstable/3.97/src/kdebase-runtime-3.97.0.tar.bz2; + sha256 = "16xang1sjj0h8339cfqf6l4qqswyv42sq9w9a3axmckklmfnx6b1"; }; - propagatedBuildInputs = [kdepimlibs libusb kdebase xineLib]; - inherit kdelibs; + propagatedBuildInputs = [kdepimlibs libusb xineLib]; + patchPhase = "fixCmakeDbusCalls"; } diff --git a/pkgs/desktops/kde-4/support/eigen.nix b/pkgs/desktops/kde-4/support/eigen.nix index 163683a29215..2b3520eb942f 100644 --- a/pkgs/desktops/kde-4/support/eigen.nix +++ b/pkgs/desktops/kde-4/support/eigen.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "eigen-1.0.5"; - src = svnSrc "eigen" "0dr2gzrf17bdgxj4f9ibk7x5j7fqwwjsl800dzfvrhgj6v1mxm4x"; + src = svnSrc "eigen" "1wh6kdmzsxmk6byp4rq91pz4rfr7hnh17g8f415p0ywxalg6pfkg"; buildInputs = [ cmake ]; } diff --git a/pkgs/desktops/kde-4/support/gmm.nix b/pkgs/desktops/kde-4/support/gmm.nix index 843f9f6aaed5..10a2b63863bf 100644 --- a/pkgs/desktops/kde-4/support/gmm.nix +++ b/pkgs/desktops/kde-4/support/gmm.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "gmm-svn"; - src = svnSrc "gmm" "0qvx9jf17z0mpwy8k6w6bla94gkkslkiv5w98aajfcq34n0zxcpc"; + src = svnSrc "gmm" "08j40y85dprs9ddzsddimrhssnz08fafq6nhn40l59ddbvvir0gy"; buildInputs = [ cmake ]; } diff --git a/pkgs/desktops/kde-4/support/qca.nix b/pkgs/desktops/kde-4/support/qca.nix index fda435c7bffe..cf542feac7c1 100644 --- a/pkgs/desktops/kde-4/support/qca.nix +++ b/pkgs/desktops/kde-4/support/qca.nix @@ -2,7 +2,7 @@ args: with args; stdenv.mkDerivation { name = "qca-2.0.0dev"; - src = svnSrc "qca" "0dycmk8fn57mz2pfxck6d0g833fqg9zrw17789vxb4ks0xz0p3zp"; + src = svnSrc "qca" "1jdqh7xg3vqyx7lgngcz9qj6zdnmlwqw7yv2py7gp2qma7a0annd"; buildInputs = [ cmake qt openssl gettext cyrus_sasl libgcrypt gnupg ]; patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../CMakeLists.txt"; } diff --git a/pkgs/desktops/kde-4/support/qimageblitz.nix b/pkgs/desktops/kde-4/support/qimageblitz.nix index 3364b4eac5da..0abdd882a504 100644 --- a/pkgs/desktops/kde-4/support/qimageblitz.nix +++ b/pkgs/desktops/kde-4/support/qimageblitz.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "qimageblitz-4.0.0svn"; - src = svnSrc "qimageblitz" "0gi78bald70bc540jqcpa70x23hycywibn4raf5602hv4d5n8mnx"; + src = svnSrc "qimageblitz" "0rmfkl529fmlb495whlidffib1x5s03xzsyaxild3rrsf4h1npcx"; buildInputs = [cmake qt]; } diff --git a/pkgs/desktops/kde-4/support/soprano.nix b/pkgs/desktops/kde-4/support/soprano.nix index 0cb490b9db7e..c2b9a3b0903d 100644 --- a/pkgs/desktops/kde-4/support/soprano.nix +++ b/pkgs/desktops/kde-4/support/soprano.nix @@ -2,7 +2,7 @@ args: with args; stdenv.mkDerivation { name = "soprano-1.9.0svn"; - src = svnSrc "soprano" "02xfp7g41ahxwczkxipyi13rav6akhwgspxdhgk5gm94rg10hq2l"; + src = svnSrc "soprano" "1zzn84k6m351y9pr0kkxb1d4i3jb3mkyyqc07bq0im56m8bvrcm7"; CLUCENE_HOME=cluceneCore; buildInputs = [ cmake qt cluceneCore redland ]; } diff --git a/pkgs/desktops/kde-4/support/strigi.nix b/pkgs/desktops/kde-4/support/strigi.nix index d1ec98ea25f9..9e7d1f0c9ac2 100644 --- a/pkgs/desktops/kde-4/support/strigi.nix +++ b/pkgs/desktops/kde-4/support/strigi.nix @@ -2,7 +2,7 @@ args: with args; stdenv.mkDerivation { name = "strigi-svn"; - src = svnSrc "strigi" "0dp145n93bqp91lvk2n10mghppyhdm3anh1l3a18d20hrvsm42z5"; + src = svnSrc "strigi" "198arwd87l97gg5rs3p7rk9wiw1mrdsw9y0zwvrwnxs7glgj201h"; CLUCENE_HOME=cluceneCore; buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus log4cxx stdenv.gcc.libc exiv2 bison cppunit perl ]; diff --git a/pkgs/desktops/kde-4/support/taglib.nix b/pkgs/desktops/kde-4/support/taglib.nix index 9a2acc96636b..fd6dac35fd9d 100644 --- a/pkgs/desktops/kde-4/support/taglib.nix +++ b/pkgs/desktops/kde-4/support/taglib.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "taglib-1.4svn"; - src = svnSrc "taglib" "1myfgykflbs3l1mrzg4iv8rb1mbd0vpmzl5dnnslfi9b0xg6ydip"; + src = svnSrc "taglib" "0jmy1mldpjqnq8ap3ynwagxpjcfxzbisa4qd6zdwlwcm8zb54rak"; buildInputs = [ cmake zlib ]; } diff --git a/pkgs/desktops/kde-4/toys/default.nix b/pkgs/desktops/kde-4/toys/default.nix index 19c08c4891bc..1ebb427927d8 100644 --- a/pkgs/desktops/kde-4/toys/default.nix +++ b/pkgs/desktops/kde-4/toys/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdetoys-4.0beta4"; + name = "kdetoys-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdetoys-3.95.0.tar.bz2; - sha256 = "0qg9ns640v21sa837pg5basnw8clnkyxap2lm7s69ainsg69662v"; + url = mirror://kde/unstable/3.97/src/kdetoys-3.97.0.tar.bz2; + sha256 = "1ga2xlsr7wl7jnc4clzabgyv5wfcjgpfmv6ca99bkz31nr6lddpa"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace]; diff --git a/pkgs/desktops/kde-4/base/builder.sh b/pkgs/desktops/kde-4/utils/builder.sh similarity index 78% rename from pkgs/desktops/kde-4/base/builder.sh rename to pkgs/desktops/kde-4/utils/builder.sh index 99b357fcf167..c0df3758964b 100755 --- a/pkgs/desktops/kde-4/base/builder.sh +++ b/pkgs/desktops/kde-4/utils/builder.sh @@ -6,7 +6,6 @@ myPatchPhase() # Trailing slash in sed is essential find .. -name CMakeLists.txt \ | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i - #sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h } patchPhase=myPatchPhase genericBuild diff --git a/pkgs/desktops/kde-4/utils/default.nix b/pkgs/desktops/kde-4/utils/default.nix index cee61c0e4cdf..fe453938c949 100644 --- a/pkgs/desktops/kde-4/utils/default.nix +++ b/pkgs/desktops/kde-4/utils/default.nix @@ -1,13 +1,14 @@ args: with args; stdenv.mkDerivation { - name = "kdeutils-4.0beta4"; + name = "kdeutils-4.0rc2"; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdeutils-3.95.0.tar.bz2; - sha256 = "1b8jvdy83qwhnfwqxzx96bxnaxss25psazifymyb0z4ynkqmadlh"; + url = mirror://kde/unstable/3.97/src/kdeutils-3.97.0.tar.bz2; + sha256 = "0nhs91xf83xyf4wlpppavrhyi76qdnilhaynwjirx5n85hjl4iiq"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace gmp libzip python ]; # TODO : tpctl + patchPhase="fixCmakeDbusCalls"; } diff --git a/pkgs/desktops/kde-4/workspace/builder.sh b/pkgs/desktops/kde-4/workspace/builder.sh index 648d6175f35a..f5a5b5a90bf8 100755 --- a/pkgs/desktops/kde-4/workspace/builder.sh +++ b/pkgs/desktops/kde-4/workspace/builder.sh @@ -2,10 +2,7 @@ source ${stdenv}/setup myPatchPhase() { - echo "Fixing dbus calls in CMakeLists.txt files" -# Trailing slash in sed is essential - find .. -name CMakeLists.txt \ - | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i + fixCmakeDbusCalls sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../kcontrol/randr/randr.h } patchPhase=myPatchPhase diff --git a/pkgs/desktops/kde-4/workspace/default.nix b/pkgs/desktops/kde-4/workspace/default.nix index 829393f67e9f..162277a03ed6 100644 --- a/pkgs/desktops/kde-4/workspace/default.nix +++ b/pkgs/desktops/kde-4/workspace/default.nix @@ -1,15 +1,13 @@ args: with args; stdenv.mkDerivation { - name = "kdebase-workspace-4.0beta4"; + name = "kdebase-workspace-4.0rc2"; builder = ./builder.sh; src = fetchurl { - url = mirror://kde/unstable/3.95/src/kdebase-workspace-3.95.0.tar.bz2; - sha256 = "0jripmw8vgs7lxlsif552rr9vqps5kav8jdlfyhmr9c3xw5c99v0"; + url = mirror://kde/unstable/3.97/src/kdebase-workspace-3.97.0.tar.bz2; + sha256 = "1sb3vm5y50af6qvsg4sjw14z7y4j1zbgp7w8gsffigbr0hyj4apl"; }; - buildInputs = [kdelibs kdepimlibs kdebase kderuntime stdenv.gcc.libc]; - inherit kdelibs; + buildInputs = [kdelibs kdepimlibs stdenv.gcc.libc]; } - diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9acb6e666e8c..9c6aaf240e44 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4444,7 +4444,7 @@ rec { shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib - openbabel ocaml facile stdenv; + openbabel ocaml facile stdenv poppler_data; cdparanoia = cdparanoiaIII; inherit (xlibs) inputproto kbproto scrnsaverproto xextproto xf86miscproto From 70c37850818ec864be63893906dcda1af60e1351 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 15 Dec 2007 23:46:42 +0000 Subject: [PATCH 102/320] xine-lib: now compiles with 2.6.23 headers svn path=/nixpkgs/branches/stdenv-updates/; revision=9947 --- .../libraries/xine-lib/default.nix | 1 + .../xine-lib-linux-headers-2.6.23.patch | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 pkgs/development/libraries/xine-lib/xine-lib-linux-headers-2.6.23.patch diff --git a/pkgs/development/libraries/xine-lib/default.nix b/pkgs/development/libraries/xine-lib/default.nix index 738b21741b5d..51592f61b1a6 100644 --- a/pkgs/development/libraries/xine-lib/default.nix +++ b/pkgs/development/libraries/xine-lib/default.nix @@ -27,4 +27,5 @@ assert alsaSupport -> alsaLib != null; libXv = if xvideoSupport then libXv else null; libdvdcss = if encryptedDVDSupport then libdvdcss else null; propagatedBuildInputs = [zlib]; + patches = [ ./xine-lib-linux-headers-2.6.23.patch ]; }) // {inherit xineramaSupport libXinerama;} diff --git a/pkgs/development/libraries/xine-lib/xine-lib-linux-headers-2.6.23.patch b/pkgs/development/libraries/xine-lib/xine-lib-linux-headers-2.6.23.patch new file mode 100644 index 000000000000..cd3d766ea8f2 --- /dev/null +++ b/pkgs/development/libraries/xine-lib/xine-lib-linux-headers-2.6.23.patch @@ -0,0 +1,22 @@ +# HG changeset patch +# User Ken Moffat +# Date 1193435051 -3600 +# Node ID 8a369a0d5ff104cc115bbe76c6b4f3e281d1ef25 +# Parent 05fde4048642d1a7edb19ea623acd760064718bc +Linux-2.6.23 header change breaks build +> +> /* Special codes used when specifying changer slots. */ +> #define CDSL_NONE (INT_MAX-1) +> #define CDSL_CURRENT INT_MAX + +--- a/src/input/vcd/libcdio/_cdio_linux.c Tue Oct 23 23:45:58 2007 +0100 ++++ b/src/input/vcd/libcdio/_cdio_linux.c Fri Oct 26 22:44:11 2007 +0100 +@@ -59,6 +59,7 @@ static const char _rcsid[] = "$Id: _cdio + #include + #include + #include ++#include + + #include + #include + From c9982118fc1be9bbe87f3ed00cd248e4c4c4dfc6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 15 Dec 2007 23:49:06 +0000 Subject: [PATCH 103/320] kde-4: Removed unused builders svn path=/nixpkgs/branches/stdenv-updates/; revision=9948 --- pkgs/desktops/kde-4/pim/builder.sh | 10 ---------- pkgs/desktops/kde-4/runtime/builder.sh | 12 ------------ pkgs/desktops/kde-4/utils/builder.sh | 11 ----------- 3 files changed, 33 deletions(-) delete mode 100755 pkgs/desktops/kde-4/pim/builder.sh delete mode 100755 pkgs/desktops/kde-4/runtime/builder.sh delete mode 100755 pkgs/desktops/kde-4/utils/builder.sh diff --git a/pkgs/desktops/kde-4/pim/builder.sh b/pkgs/desktops/kde-4/pim/builder.sh deleted file mode 100755 index 8963fae048ca..000000000000 --- a/pkgs/desktops/kde-4/pim/builder.sh +++ /dev/null @@ -1,10 +0,0 @@ -source ${stdenv}/setup - -myPatchPhase() -{ -# They reset CMAKE_MODULE_PATH, not adding to the existing - sed -e '3s/)/ ${CMAKE_MODULE_PATH})/' -i ../CMakeLists.txt -} -patchPhase=myPatchPhase - -genericBuild diff --git a/pkgs/desktops/kde-4/runtime/builder.sh b/pkgs/desktops/kde-4/runtime/builder.sh deleted file mode 100755 index 99b357fcf167..000000000000 --- a/pkgs/desktops/kde-4/runtime/builder.sh +++ /dev/null @@ -1,12 +0,0 @@ -source ${stdenv}/setup - -myPatchPhase() -{ - echo "Fixing dbus calls in CMakeLists.txt files" -# Trailing slash in sed is essential - find .. -name CMakeLists.txt \ - | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i - #sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../workspace/kcontrol/randr/randr.h -} -patchPhase=myPatchPhase -genericBuild diff --git a/pkgs/desktops/kde-4/utils/builder.sh b/pkgs/desktops/kde-4/utils/builder.sh deleted file mode 100755 index c0df3758964b..000000000000 --- a/pkgs/desktops/kde-4/utils/builder.sh +++ /dev/null @@ -1,11 +0,0 @@ -source ${stdenv}/setup - -myPatchPhase() -{ - echo "Fixing dbus calls in CMakeLists.txt files" -# Trailing slash in sed is essential - find .. -name CMakeLists.txt \ - | xargs sed -e "s@\${DBUS_INTERFACES_INSTALL_DIR}/@${kdelibs}/share/dbus-1/interfaces/@" -i -} -patchPhase=myPatchPhase -genericBuild From e17a21b8202dffa6fd5a34792a3f9c73b1b80c7a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 3 Jan 2008 17:13:33 +0000 Subject: [PATCH 104/320] xine-lib: added pkg-config svn path=/nixpkgs/branches/stdenv-updates/; revision=10065 --- pkgs/development/libraries/xine-lib/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/xine-lib/default.nix b/pkgs/development/libraries/xine-lib/default.nix index 51592f61b1a6..0af3732cbae3 100644 --- a/pkgs/development/libraries/xine-lib/default.nix +++ b/pkgs/development/libraries/xine-lib/default.nix @@ -2,7 +2,7 @@ , xineramaSupport ? true , encryptedDVDSupport ? true , alsaSupport ? true -, stdenv, fetchurl, zlib, x11 +, stdenv, fetchurl, zlib, x11, pkgconfig , libXv ? null, libXinerama ? null, libdvdcss ? null, alsaLib ? null }: @@ -19,7 +19,7 @@ assert alsaSupport -> alsaLib != null; sha256 = "03iwhgsf9kj0x5b4fgv7lzc1vj3frk4afh2idgrqskvixjyi37vc"; }; buildInputs = [ - x11 + x11 pkgconfig (if xvideoSupport then libXv else null) (if xineramaSupport then libXinerama else null) (if alsaSupport then alsaLib else null) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9c6aaf240e44..edb774fd96b7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2407,7 +2407,7 @@ rec { }; xineLib = import ../development/libraries/xine-lib { - inherit fetchurl stdenv zlib x11 libdvdcss alsaLib; + inherit fetchurl stdenv zlib x11 libdvdcss alsaLib pkgconfig; inherit (xlibs) libXv libXinerama; }; From a7703662a4ee043c1ba684d30ede016bb5dc2e41 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 00:55:21 +0000 Subject: [PATCH 105/320] Merged with trunk svn path=/nixpkgs/branches/stdenv-updates/; revision=10145 --- pkgs/applications/audio/flac/default.nix | 6 +- pkgs/applications/editors/eclipse/default.nix | 7 +- .../applications/editors/vim/configurable.nix | 72 +++++ pkgs/applications/editors/vim/default.nix | 15 +- .../graphics/ImageMagick/default.nix | 8 +- pkgs/applications/graphics/gimp/default.nix | 6 +- pkgs/applications/misc/freemind/default.nix | 45 +++ pkgs/applications/misc/pinfo/default.nix | 12 +- pkgs/applications/misc/qgis_svn/default.nix | 74 +++++ .../misc/rxvt_unicode/default.nix | 12 +- pkgs/applications/misc/xterm/default.nix | 3 +- .../networking/browsers/firefox/default.nix | 7 +- .../networking/browsers/firefox3b1/3b2.nix | 57 ++++ .../networking/browsers/firefox3b1/binary.nix | 55 ++++ .../mozilla-plugins/flashplayer-9/default.nix | 18 +- .../mplayerplug-in/default.nix | 6 +- .../instant-messengers/pidgin/default.nix | 6 +- .../instant-messengers/teamspeak/client.nix | 71 +++++ .../networking/irc/chatzilla/default.nix | 6 +- .../networking/irc/irssi/default.nix | 6 +- .../networking/irc/xchat/default.nix | 6 +- .../mailreaders/sylpheed/default.nix | 6 +- .../networking/sniffers/wireshark/default.nix | 6 +- .../applications/office/openoffice/builder.sh | 2 + .../subversion-1.4.x/default.nix | 7 +- pkgs/applications/video/vlc/default.nix | 7 +- .../virtualization/qemu/0.9.0.nix | 26 ++ .../virtualization/qemu/linux-img/0.2.nix | 27 ++ .../virtualization/virtualbox/1.5.2.nix | 21 ++ pkgs/data/fonts/fontWrap/default.nix | 27 ++ pkgs/data/misc/xkeyboard-config/default.nix | 5 +- .../xkeyboard-config/level3-deadkeys-us-intl | 95 +++++++ .../compilers/ghc-6.6.1/builder.sh | 26 -- .../compilers/ghc-6.6.1/default.nix | 31 ++- pkgs/development/compilers/ghc-6.8/builder.sh | 26 -- .../development/compilers/ghc-6.8/default.nix | 37 ++- .../compilers/ghc-6.8/setup-hook.sh | 2 +- pkgs/development/compilers/ghc/boot.nix | 65 ++++- pkgs/development/compilers/ghc/boot.sh | 10 - .../interpreters/guile/default.nix | 6 +- .../interpreters/php_configurable/default.nix | 62 ++++- pkgs/development/interpreters/tcl/default.nix | 6 +- .../libraries/acl/acl-2.2.45-patch | 222 +++++++++++++++ pkgs/development/libraries/acl/builder.sh | 12 + pkgs/development/libraries/acl/default.nix | 14 + pkgs/development/libraries/attr/builder.sh | 2 + .../libraries/audiofile/default.nix | 6 +- .../libraries/boehm-gc/default.nix | 10 +- .../libraries/coredumper/default.nix | 6 +- .../libraries/cracklib/default.nix | 6 +- pkgs/development/libraries/db4/db4-4.4.nix | 5 +- pkgs/development/libraries/expat/default.nix | 6 +- .../libraries/ffmpeg_svn_snapshot/default.nix | 3 +- pkgs/development/libraries/giflib/default.nix | 10 + .../default.nix => giflib/libungif.nix} | 2 +- pkgs/development/libraries/gmp/default.nix | 15 +- .../development/libraries/libcaca/default.nix | 6 +- pkgs/development/libraries/libdv/default.nix | 30 ++ .../development/libraries/libpcap/default.nix | 6 +- pkgs/development/libraries/libpng/default.nix | 6 +- .../libraries/libraw1394/default.nix | 17 ++ .../libraries/libtheora/default.nix | 6 +- .../libraries/libvorbis/default.nix | 6 +- pkgs/development/libraries/libwpd/default.nix | 6 +- pkgs/development/libraries/popt/popt-1.7.nix | 5 +- .../libraries/readline/readline5.nix | 1 + .../libraries/readline/shobj-darwin.patch | 11 + pkgs/development/libraries/speex/default.nix | 6 +- pkgs/development/libraries/t1lib/default.nix | 9 +- pkgs/development/libraries/tk/default.nix | 6 +- .../misc/elfutils/{default.nix => 0.127.nix} | 4 +- .../development/tools/misc/elfutils/0.131.nix | 9 + .../development/tools/misc/strace/default.nix | 6 +- pkgs/development/tools/misc/swig/default.nix | 2 +- .../tools/misc/valgrind/default.nix | 7 +- .../tools/parsing/alex/default.nix | 23 ++ .../tools/parsing/bison/bison-1.875.nix | 4 +- .../tools/parsing/flex/flex-2.5.4a.nix | 2 +- pkgs/lib/default-unstable.nix | 63 ++++- pkgs/lib/default.nix | 61 ++++- pkgs/misc/maven/maven-2.nix | 23 ++ pkgs/misc/tex/auctex/default.nix | 2 +- pkgs/misc/xsane/default.nix | 6 +- pkgs/os-specific/linux/atheros/0.9.3.3.nix | 34 +++ pkgs/os-specific/linux/atheros/r2756.nix | 35 +++ pkgs/os-specific/linux/atheros/r3122.nix | 22 ++ .../linux/bridge_utils/default.nix | 2 +- pkgs/os-specific/linux/dmidecode/2.9.nix | 22 ++ pkgs/os-specific/linux/dvd+rw-tools/7.0.nix | 27 ++ pkgs/os-specific/linux/fuse/builder.sh | 2 + pkgs/os-specific/linux/fuse/default.nix | 18 +- .../linux/kernel/2.6.22-paravirt-nvidia.patch | 14 - pkgs/os-specific/linux/kernel/2.6.23.12.nix | 38 +++ .../linux/kernel/config-2.6.23-i686-smp | 2 +- pkgs/os-specific/linux/kqemu/1.3.0pre11.nix | 30 ++ .../linux/module-init-tools/aggregator.nix | 34 +++ pkgs/os-specific/linux/nvidia/builder.sh | 169 +++++------- pkgs/os-specific/linux/nvidia/default.nix | 44 +-- pkgs/os-specific/linux/sdparm/1.02.nix | 21 ++ pkgs/os-specific/linux/squashfs/default.nix | 6 +- pkgs/servers/x11/xorg/default.nix | 4 +- pkgs/shells/tcsh/default.nix | 6 +- pkgs/tools/X11/xlaunch/default.nix | 48 ++++ pkgs/tools/archivers/cabextract/default.nix | 4 +- pkgs/tools/archivers/zip/default.nix | 2 +- pkgs/tools/graphics/exif/default.nix | 6 +- pkgs/tools/graphics/graphviz/default.nix | 13 +- pkgs/tools/hddtemp/default.nix | 27 ++ pkgs/tools/misc/file/default.nix | 11 +- pkgs/tools/misc/grub/default.nix | 21 +- pkgs/tools/misc/less/default.nix | 6 +- pkgs/tools/misc/memtest86/default.nix | 26 ++ pkgs/tools/misc/psmisc/default.nix | 15 + pkgs/tools/misc/relfs/cvs.2007.12.01.nix | 4 +- .../networking/curl/connect-timeout.patch | 156 +++++++++++ pkgs/tools/networking/curl/default.nix | 17 +- .../networking/p2p/bit-tornado/default.nix | 4 +- pkgs/tools/networking/sshfs-fuse/default.nix | 11 +- pkgs/tools/networking/tcpdump/default.nix | 6 +- pkgs/tools/package-management/nix/default.nix | 10 +- .../tools/package-management/nix/unstable.nix | 4 +- pkgs/tools/security/gnupg/default.nix | 11 +- pkgs/top-level/all-packages.nix | 259 ++++++++++++++++-- pkgs/top-level/build-for-release.nix | 2 - pkgs/top-level/builder-defs.nix | 23 +- 125 files changed, 2379 insertions(+), 487 deletions(-) create mode 100644 pkgs/applications/editors/vim/configurable.nix create mode 100644 pkgs/applications/misc/freemind/default.nix create mode 100644 pkgs/applications/misc/qgis_svn/default.nix create mode 100644 pkgs/applications/networking/browsers/firefox3b1/3b2.nix create mode 100644 pkgs/applications/networking/browsers/firefox3b1/binary.nix create mode 100644 pkgs/applications/networking/instant-messengers/teamspeak/client.nix create mode 100644 pkgs/applications/virtualization/qemu/0.9.0.nix create mode 100644 pkgs/applications/virtualization/qemu/linux-img/0.2.nix create mode 100644 pkgs/applications/virtualization/virtualbox/1.5.2.nix create mode 100644 pkgs/data/fonts/fontWrap/default.nix create mode 100644 pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl delete mode 100644 pkgs/development/compilers/ghc-6.6.1/builder.sh delete mode 100644 pkgs/development/compilers/ghc-6.8/builder.sh delete mode 100644 pkgs/development/compilers/ghc/boot.sh create mode 100644 pkgs/development/libraries/acl/acl-2.2.45-patch create mode 100644 pkgs/development/libraries/acl/builder.sh create mode 100644 pkgs/development/libraries/acl/default.nix create mode 100644 pkgs/development/libraries/giflib/default.nix rename pkgs/development/libraries/{libungif/default.nix => giflib/libungif.nix} (69%) create mode 100644 pkgs/development/libraries/libdv/default.nix create mode 100644 pkgs/development/libraries/libraw1394/default.nix create mode 100644 pkgs/development/libraries/readline/shobj-darwin.patch rename pkgs/development/tools/misc/elfutils/{default.nix => 0.127.nix} (79%) create mode 100644 pkgs/development/tools/misc/elfutils/0.131.nix create mode 100644 pkgs/development/tools/parsing/alex/default.nix create mode 100644 pkgs/misc/maven/maven-2.nix create mode 100644 pkgs/os-specific/linux/atheros/0.9.3.3.nix create mode 100644 pkgs/os-specific/linux/atheros/r2756.nix create mode 100644 pkgs/os-specific/linux/atheros/r3122.nix create mode 100644 pkgs/os-specific/linux/dmidecode/2.9.nix create mode 100644 pkgs/os-specific/linux/dvd+rw-tools/7.0.nix delete mode 100644 pkgs/os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch create mode 100644 pkgs/os-specific/linux/kernel/2.6.23.12.nix create mode 100644 pkgs/os-specific/linux/kqemu/1.3.0pre11.nix create mode 100644 pkgs/os-specific/linux/module-init-tools/aggregator.nix create mode 100644 pkgs/os-specific/linux/sdparm/1.02.nix create mode 100644 pkgs/tools/X11/xlaunch/default.nix create mode 100644 pkgs/tools/hddtemp/default.nix create mode 100644 pkgs/tools/misc/memtest86/default.nix create mode 100644 pkgs/tools/misc/psmisc/default.nix create mode 100644 pkgs/tools/networking/curl/connect-timeout.patch diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix index 58c11aaa0f81..e61fd05ce389 100644 --- a/pkgs/applications/audio/flac/default.nix +++ b/pkgs/applications/audio/flac/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, libogg}: stdenv.mkDerivation { - name = "flac-1.1.2"; + name = "flac-1.2.1"; src = fetchurl { - url = http://downloads.xiph.org/releases/flac/flac-1.1.2.tar.gz; - md5 = "2bfc127cdda02834d0491ab531a20960"; + url = http://downloads.xiph.org/releases/flac/flac-1.2.1.tar.gz; + sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; }; buildInputs = [libogg] ; diff --git a/pkgs/applications/editors/eclipse/default.nix b/pkgs/applications/editors/eclipse/default.nix index 9051293f4895..71afb07eece5 100644 --- a/pkgs/applications/editors/eclipse/default.nix +++ b/pkgs/applications/editors/eclipse/default.nix @@ -11,10 +11,11 @@ let { }; bindist = - fetchurl { + if (stdenv.system == "x86_64-linux") then fetchurl { + url = "http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops/R-3.3.1.1-200710231652/eclipse-SDK-3.3.1.1-linux-gtk-x86_64.tar.gz"; + sha256 = "3fec49e95c45b56ad77b2bd15616af9d1fa6c3b338d4c70b497ecdc974c0b030"; + } else fetchurl { url = http://ftp-stud.fht-esslingen.de/pub/Mirrors/eclipse/eclipse/downloads/drops/R-3.3.1.1-200710231652/eclipse-SDK-3.3.1.1-linux-gtk.tar.gz; sha256 = "409e47745c92ff8ea8b2037104ec90c2f8ce3edb3563fdb312d55e1bbd2ada01"; }; } - - diff --git a/pkgs/applications/editors/vim/configurable.nix b/pkgs/applications/editors/vim/configurable.nix new file mode 100644 index 000000000000..b27bb157f75a --- /dev/null +++ b/pkgs/applications/editors/vim/configurable.nix @@ -0,0 +1,72 @@ +# TODO tidy up eg The patchelf code is patching gvim even if you don't build it.. +# but I have gvim with python support now :) - Marc +args: +let edf = args.lib.enableDisableFeature; in +( args.mkDerivationByConfiguration { + # most interpreters aren't tested yet.. (see python for example how to do it) + flagConfig = { + mandatory = { cfgOption = "--enable-gui=auto --with-features=${args.features}"; + buildInputs = ["ncurses" "pkgconfig"]; + }; + X11 = { buildInputs = [ "libX11" "libXext" "libSM" "libXpm" "libXt" "libXaw" "libXau" "libXmu" ]; }; + + } // edf "darwin" "darwin" { } #Disable Darwin (Mac OS X) support. + // edf "xsmp" "xsmp" { } #Disable XSMP session management + // edf "xsmp_interact" "xsmp_interact" { } #Disable XSMP interaction + // edf "mzscheme" "mzschemeinterp" { } #Include MzScheme interpreter. + // edf "perl" "perlinterp" { } #Include Perl interpreter. + // edf "python" "pythoninterp" { pass = "python"; } #Include Python interpreter. + // edf "tcl" "tclinterp" { } #Include Tcl interpreter. + // edf "ruby" "rubyinterp" { } #Include Ruby interpreter. + // edf "cscope" "cscope" { } #Include cscope interface. + // edf "workshop" "workshop" { } #Include Sun Visual Workshop support. + // edf "netbeans" "netbeans" { } #Disable NetBeans integration support. + // edf "sniff" "sniff" { } #Include Sniff interface. + // edf "multibyte" "multibyte" { } #Include multibyte editing support. + // edf "hangulinput" "hangulinput" { } #Include Hangul input support. + // edf "xim" "xim" { pass = "xim"; } #Include XIM input support. + // edf "fontset" "fontset" { } #Include X fontset output support. + + #--enable-gui=OPTS X11 GUI default=auto OPTS=auto/no/gtk/gtk2/gnome/gnome2/motif/athena/neXtaw/photon/carbon + /* + // edf "gtk_check" "gtk_check" { } #If auto-select GUI, check for GTK default=yes + // edf "gtk2_check" "gtk2_check" { } #If GTK GUI, check for GTK+ 2 default=yes + // edf "gnome_check" "gnome_check" { } #If GTK GUI, check for GNOME default=no + // edf "motif_check" "motif_check" { } #If auto-select GUI, check for Motif default=yes + // edf "athena_check" "athena_check" { } #If auto-select GUI, check for Athena default=yes + // edf "nextaw_check" "nextaw_check" { } #If auto-select GUI, check for neXtaw default=yes + // edf "carbon_check" "carbon_check" { } #If auto-select GUI, check for Carbon default=yes + // edf "gtktest" "gtktest" { } #Do not try to compile and run a test GTK program + */ + // edf "acl" "acl" { } #Don't check for ACL support. + // edf "gpm" "gpm" { } #Don't use gpm (Linux mouse daemon). + // edf "nls" "nls" { } #Don't support NLS (gettext()). + ; + + optionals = ["python"]; + + extraAttrs = co : { + name = "vim_configurable-7.1"; + + src = args.fetchurl { + url = ftp://ftp.nluug.nl/pub/editors/vim/unix/vim-7.1.tar.bz2; + sha256 = "0w6gy49gdbw7hby5rjkjpa7cdvc0z5iajsm4j1h8108rvfam22kz"; + }; + + postInstall = " + rpath=`patchelf --print-rpath \$out/bin/vim`; + for i in $\buildInputs; do + echo adding \$i/lib + rpath=\$rpath:\$i/lib + done + echo \$buildInputs + echo \$rpath + patchelf --set-rpath \$rpath \$out/bin/{vim,gvim} + "; + + meta = { + description = "The most popular clone of the VI editor"; + homepage = "www.vim.org"; + }; +}; +} ) args diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix index a08808a47567..5a524d6dabef 100644 --- a/pkgs/applications/editors/vim/default.nix +++ b/pkgs/applications/editors/vim/default.nix @@ -9,17 +9,28 @@ let ["athenaGUI" "libXau" "libXt" "libXaw" "libXpm" "libXext" "x11Support"] ["x11Support" "libX11"] ["hugeFeatures"] + ["pythonSupport" "python"] + ["perlSupport" "perl"] + ["tclSupport" "tcl"] ["true" "ncurses"] ["false" "libSM"] ]; nameSuffixes = [ "hugeFeatures" "-huge" "x11Support" "-X11" + "pythonSupport" "-python" + "perlSupport" "-perl" + "tclSupport" "-tcl" + "ximSupport" "-xim" ]; configFlags = [ - "true" " --disable-xim " + "true" " " "x11Support" " --enable-gui=auto " - "hugeFeatures" "--with-features=huge --enable-cscope --enable-multibyte --enable-xsmp" + "hugeFeatures" "--with-features=huge --enable-cscope --enable-multibyte --enable-xsmp " + "pythonSupport" " --enable-pythoninterp " + "perlSupport" " --enable-perlinterp " + "tclSupport" " --enable-tclinterp " + "ximSupport" " --enable-xim " ]; buildInputsNames = args.lib.filter (x: (null!=getVal x)) (args.lib.uniqList {inputList = diff --git a/pkgs/applications/graphics/ImageMagick/default.nix b/pkgs/applications/graphics/ImageMagick/default.nix index 0f814bd3829b..1795d29e7fb0 100644 --- a/pkgs/applications/graphics/ImageMagick/default.nix +++ b/pkgs/applications/graphics/ImageMagick/default.nix @@ -1,10 +1,10 @@ args: with args; (stdenv.mkDerivation ({ - name = "ImageMagick-6.3.5"; + name = "ImageMagick-6.3.7-9"; src = fetchurl { - url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.5-5.tar.bz2; - sha256 = "0avq6kllxw552krxgsa72c1b44zwyhwi38dk4a4ij3fqy0svy9zh"; + url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.7-9.tar.bz2; + sha256 = "1s38s78xvzm20ib22zypsb9vvzva0kbqjf0pf4c1q89jzg205pk0"; }; configureFlags = " --with-dots --with-gs-font-dir="+ ghostscript + @@ -13,7 +13,7 @@ args: with args; ); buildInputs = [bzip2 freetype ghostscript graphviz libjpeg libpng - libtiff libX11 libxml2 zlib ] ++ (if args ? tetex then [args.tetex] else []) + libtiff libX11 libxml2 zlib libtool] ++ (if args ? tetex then [args.tetex] else []) ++ (if args ? librsvg then [args.librsvg] else []) ; } // (if args ? tetex then { diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix index cda940325114..a591091d92fa 100644 --- a/pkgs/applications/graphics/gimp/default.nix +++ b/pkgs/applications/graphics/gimp/default.nix @@ -4,10 +4,10 @@ }: stdenv.mkDerivation { - name = "gimp-2.4.0"; + name = "gimp-2.4.3"; src = fetchurl { - url = ftp://ftp.gtk.org/pub/gimp/v2.4/gimp-2.4.0.tar.bz2; - sha256 = "1p594r45hxk14469ma8g5j96nw5q9j6a3i0n6hbakfsh41izpsnx"; + url = ftp://ftp.gtk.org/pub/gimp/v2.4/gimp-2.4.3.tar.bz2; + sha256 = "1m9gdm6wa33x1bymy3c2d006ks0acq1y8a94rc4401f6mrw8jj8b"; }; buildInputs = [ diff --git a/pkgs/applications/misc/freemind/default.nix b/pkgs/applications/misc/freemind/default.nix new file mode 100644 index 000000000000..79b00204fd40 --- /dev/null +++ b/pkgs/applications/misc/freemind/default.nix @@ -0,0 +1,45 @@ +args: +args.stdenv.mkDerivation { + name = "freemind-0.9.0_Beta_13"; + + src = args.fetchurl { + url = http://downloads.sourceforge.net/freemind/freemind-src-0.9.0_Beta_13_icon_butterfly.tar.gz; + sha256 = "00389bhg73qknydrq0f3bskb5lyrdg2p58mnnp19wdvzzmfbic4w"; + }; + + buildInputs =(with args; [jdk ant]); + + inherit (args) jre; + + phases="buildPhase installPhase"; + + buildPhase="ant dist"; +# LIBXCB_ALLOW_SLOPPY_LOCK=true : +# don't know yet what this option really means but I'm no longer getting +# Checking Java Version... +# Locking assertion failure. Backtrace: +# java: xcb_xlib.c:82: xcb_xlib_unlock: Assertion `c->xlib.lock' failed +# this way +# reference and more info https://bugs.launchpad.net/ubuntu/+source/sun-java5/+bug/86103 +# JDK 7 beta seems to have fixed this (bug ?) + + installPhase=" + ensureDir \$out/{bin,nix-support} + cp -r ../bin/dist \$out/nix-support + sed -i 's/which/type -p/' \$out/nix-support/dist/freemind.sh + cat > \$out/bin/freemind << EOF +#!/bin/sh +export LIBXCB_ALLOW_SLOPPY_LOCK=true +export JAVA_HOME=\$jre +\$out/nix-support/dist/freemind.sh +EOF + + chmod +x \$out/{bin/freemind,nix-support/dist/freemind.sh} + "; + + meta = { + description = "mind mapping software"; + homepage = http://freemind.sourceforge.net/wiki/index.php/Main_Page; + license = "GPL"; + }; +} diff --git a/pkgs/applications/misc/pinfo/default.nix b/pkgs/applications/misc/pinfo/default.nix index b44cca5ff2c5..d8dba39ccb56 100644 --- a/pkgs/applications/misc/pinfo/default.nix +++ b/pkgs/applications/misc/pinfo/default.nix @@ -1,10 +1,12 @@ -{stdenv, fetchurl, ncurses}: +{stdenv, fetchurl, ncurses, readline}: stdenv.mkDerivation { - name = "pinfo-0.6.8"; + name = "pinfo-0.6.9"; src = fetchurl { - url = http://dione.cc/~pborys/software/pinfo/pinfo-0.6.8.tar.gz; - md5 = "55feb4ebaa709b52bd00a15ed0fb52fb"; + url = https://alioth.debian.org/frs/download.php/1498/pinfo-0.6.9.tar.bz2; + sha256 = "1rbsz1y7nyz6ax9xfkw5wk6pnrhvwz2xcm0wnfnk4sb2wwq760q3"; }; - buildInputs = [ncurses]; + buildInputs = [ncurses readline]; + + configureFlags = "--with-curses=${ncurses} --with-readline=${readline}"; } diff --git a/pkgs/applications/misc/qgis_svn/default.nix b/pkgs/applications/misc/qgis_svn/default.nix new file mode 100644 index 000000000000..547e941ecac8 --- /dev/null +++ b/pkgs/applications/misc/qgis_svn/default.nix @@ -0,0 +1,74 @@ +args: +let optionIncLib = name : attr : " -D${name}_INCLUDE_DIR=${__getAttr attr args}/inc" + + " -D${name}_LIBRARY=${__getAttr attr args}/lib "; # lib 64? +in +( args.mkDerivationByConfiguration { + + flagConfig = { + mandatory = { + buildInputs = [ "gdal" "cmake" "qt" "flex" "bison" "proj" "geos" "x11" "sqlite" "gsl"]; + cfgOption = [ (optionIncLib "GEOS" "geos") + (optionIncLib "PROJ" "proj") + (optionIncLib "QT_X11_X11" "qt") + (optionIncLib "QT_X11_Xext" "qt") + (optionIncLib "QT_X11_m" "glibc") + (optionIncLib "SQLITE3" "sqlite") + +"-DQT_FONTCONFIG_LIBRARY=${args.fontconfig}/lib" +"-DQT_FREETYPE_LIBRARY=${args.freetype}/lib" +"-DQT_PNG_LIBRARY=${args.libpng}/lib" +"-DQT_X11_ICE_LIBRARY=${args.libICE}/lib" +"-DQT_X11_SM_LIBRARY=${args.libSM}/lib" +"-DQT_XCURSOR_LIBRARY=${args.libXcursor}/lib" +"-DQT_XINERAMA_LIBRARY=${args.libXinerama}/lib" +"-DQT_XRANDR_LIBRARY=${args.libXrandr}/lib" +"-DQT_XRENDER_LIBRARY=${args.libXrender}/lib" +"-DQT_ZLIB_LIBRARY=${args.zlib}/lib" + ]; + +/* advanced options - feel free to add them if you have time to +"-DPROJ_INCLUDE_DIR" +"-DPROJ_LIBRARY" +"-DQT_X11_X11_LIBRARY" +"-DQT_X11_Xext_LIBRARY" +"-DQT_X11_m_LIBRARY" +"-DSQLITE3_INCLUDE_DIR" +"-DSQLITE3_LIBRARY" +-DQT_FONTCONFIG_LIBRARY (ADVANCED) +-DQT_FREETYPE_LIBRARY (ADVANCED) +-DQT_PNG_LIBRARY (ADVANCED) +-DQT_X11_ICE_LIBRARY (ADVANCED) +-DQT_X11_SM_LIBRARY (ADVANCED) +-DQT_XCURSOR_LIBRARY (ADVANCED) +-DQT_XINERAMA_LIBRARY (ADVANCED) +-DQT_XRANDR_LIBRARY (ADVANCED) +-DQT_XRENDER_LIBRARY (ADVANCED) +-DQT_ZLIB_LIBRARY (ADVANCED) +*/ + }; + }; + + #inherit geos proj x11 libXext; + + extraAttrs = co : { + + name = "qgis-svn"; + + src = args.fetchsvn { url=https://svn.qgis.org/repos/qgis/trunk/qgis; + md5="ac0560e0a2d4e6258c8639f1e9b56df3"; rev="7704"; }; + + meta = { + description = "user friendly Open Source Geographic Information System"; + homepage = http://www.qgis.org; + # you can choose one of the following licenses: + license = [ "GPL" ]; + }; + + phases = "unpackPhase buildPhase installPhase"; + buildPhase = "cmake -DCMAKE_INSTALL_PREFIX=\$out ${co.configureFlags} ."; + + #configurePhase="./autogen.sh --prefix=\$out --with-gdal=\$gdal/bin/gdal-config --with-qtdir=\$qt"; + # buildPhases="unpackPhase buildPhase"; + }; + +} ) args diff --git a/pkgs/applications/misc/rxvt_unicode/default.nix b/pkgs/applications/misc/rxvt_unicode/default.nix index b43b3c275e81..c128ca11a5ad 100644 --- a/pkgs/applications/misc/rxvt_unicode/default.nix +++ b/pkgs/applications/misc/rxvt_unicode/default.nix @@ -1,13 +1,13 @@ args: with args; stdenv.mkDerivation { - name = "rxvt-unicode-8.4"; - + name = "rxvt-unicode-8.9"; + buildInputs = [ libX11 libXt libXft perl ]; - + src = fetchurl { - url = http://dist.schmorp.de/rxvt-unicode/rxvt-unicode-8.4.tar.bz2; - sha256 = "ff8d904a815151edde72bb3e51d1561125813569cb3d487cbac428ec23facdbb"; + url = http://dist.schmorp.de/rxvt-unicode/Attic/rxvt-unicode-8.9.tar.bz2; + sha256 = "89858c5bfe72dba037cd3435b2221269580f3c699553fe24ee468ddec8831d27"; }; - + meta = { description = "rxvt-unicode is a clone of the well known terminal emulator rxvt."; homepage = "http://software.schmorp.de/pkg/rxvt-unicode.html"; diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix index c14ceb84e87e..d27b723400e1 100644 --- a/pkgs/applications/misc/xterm/default.nix +++ b/pkgs/applications/misc/xterm/default.nix @@ -4,7 +4,8 @@ stdenv.mkDerivation { name = "xterm-208"; src = fetchurl { url = ftp://invisible-island.net/xterm/xterm.tar.gz; - md5 = "a062d0b398918015d07c31ecdcc5111a"; + md5 = "f7b04a66dc401dc22f5ddb7f345be229"; /* was a062d0b398918015d07c31ecdcc5111a */ }; buildInputs = [libXaw xproto libXt libX11 libSM libICE ncurses]; } + diff --git a/pkgs/applications/networking/browsers/firefox/default.nix b/pkgs/applications/networking/browsers/firefox/default.nix index 4cb9debf06ae..17c26cf8f514 100644 --- a/pkgs/applications/networking/browsers/firefox/default.nix +++ b/pkgs/applications/networking/browsers/firefox/default.nix @@ -10,12 +10,12 @@ }: stdenv.mkDerivation { - name = "firefox-2.0.0.9"; + name = "firefox-2.0.0.11"; builder = ./builder.sh; src = fetchurl { - url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.9/source/firefox-2.0.0.9-source.tar.bz2; - sha1 = "3b39d4128534d18f7e2c4d76a14561c18556eff0"; + url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/2.0.0.11/source/firefox-2.0.0.11-source.tar.bz2; + sha1 = "6d070bf04f1a037b621237d02ef9be7802a51bf1"; }; buildInputs = [ @@ -49,6 +49,7 @@ stdenv.mkDerivation { meta = { description = "Mozilla Firefox - the browser, reloaded"; + homepage = http://www.mozilla.com/en-US/firefox/; }; passthru = {inherit gtk;}; diff --git a/pkgs/applications/networking/browsers/firefox3b1/3b2.nix b/pkgs/applications/networking/browsers/firefox3b1/3b2.nix new file mode 100644 index 000000000000..29ea90d9d893 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox3b1/3b2.nix @@ -0,0 +1,57 @@ +args: with args; + +stdenv.mkDerivation { + name = "firefox-3b2"; + + src = + fetchurl { + url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b2/source/firefox-3.0b2-source.tar.bz2; + sha256 = "0mszad8j35wvzi67dp3j9sznqkgb9b3in22c5790g9b9pv6xk8jp"; + }; + + buildInputs = [ + pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo + python curl coreutils dbus dbus_glib pango freetype fontconfig + libX11 libXrender libXft libXt + ]; + + configureFlags = [ + "--enable-application=browser" + "--enable-optimize" + "--disable-debug" + "--enable-xft" + "--disable-freetype2" + "--enable-svg" + "--enable-canvas" + "--enable-strip" + "--enable-default-toolkit=cairo-gtk2" + "--with-system-jpeg" + "--with-system-zlib" +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* "--enable-system-cairo" +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + ] +; + + postInstall = " + export dontPatchELF=1; + sed -e 's@moz_libdir=.*@&\\nexport PATH=\$PATH:${coreutils}/bin@' -i \$out/bin/firefox + sed -e 's@`/bin/pwd@`${coreutils}/bin/pwd@' -i \$out/bin/firefox + sed -e 's@`/bin/ls@`${coreutils}/bin/ls@' -i \$out/bin/firefox + + strip -S \$out/lib/*/* || true + + libDir=\$(cd \$out/lib && ls -d firefox-[0-9]*) + test -n \"\$libDir\" + + echo \"running firefox -register...\" + (cd \$out/lib/\$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false + "; + + meta = { + description = "Mozilla Firefox - the browser, reloaded"; + }; + + passthru = {inherit gtk;}; +} + diff --git a/pkgs/applications/networking/browsers/firefox3b1/binary.nix b/pkgs/applications/networking/browsers/firefox3b1/binary.nix new file mode 100644 index 000000000000..73e002435b88 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox3b1/binary.nix @@ -0,0 +1,55 @@ +args: with args; + +assert stdenv.system == "i686-linux"; + +stdenv.mkDerivation { + name = "firefox-3b1"; + + src = + fetchurl { + url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b1/linux-i686/en-US/firefox-3.0b1.tar.bz2; + sha256 = "1cpcc5b07zdqyd5kiwhb4dqhy2mzbf97plsglcp6bc9054cmsylk"; + }; + buildInputs = [ + pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo + python curl coreutils atk pango glib libX11 libXrender + freetype fontconfig libXft libXt + ]; + + buildPhase = " + additionalRpath=''; + for i in \$buildInputs ${stdenv.glibc} ${stdenv.gcc.gcc}; do + additionalRpath=\$additionalRpath:\$i/lib; + done + for i in firefox-bin ; do + oldrpath=$(patchelf --print-rpath \$i) + patchelf --set-rpath \$oldrpath\$additionalRpath \$i + patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux.so.2 \$i + done + "; + + installPhase = " + export dontPatchELF=1; + mkdir -p \$out + cp -r . \$out/firefox + mkdir -p \$out/bin + ln -s \$out/firefox/firefox \$out/bin/firefox + + sed -e 's@moz_libdir=.*@moz_libdir='\$out'/firefox/@' -i \$out/bin/firefox + sed -e 's@moz_libdir=.*@&\\nexport PATH=\$PATH:${coreutils}/bin@' -i \$out/bin/firefox + sed -e 's@`/bin/pwd@`${coreutils}/bin/pwd@' -i \$out/bin/firefox + sed -e 's@`/bin/ls@`${coreutils}/bin/ls@' -i \$out/bin/firefox + + strip -S \$out/firefox/*.so || true + + echo \"running firefox -register...\" + \$out/firefox/firefox-bin -register || false + "; + + meta = { + description = "Mozilla Firefox - the browser, reloaded"; + }; + + passthru = {inherit gtk;}; +} + diff --git a/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer-9/default.nix b/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer-9/default.nix index d6972ac2f79c..e14cfe2bea7c 100644 --- a/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer-9/default.nix +++ b/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer-9/default.nix @@ -2,14 +2,24 @@ assert stdenv.system == "i686-linux"; -(stdenv.mkDerivation { - name = "flashplayer-9.0.31.0"; +stdenv.mkDerivation { + name = "flashplayer-9.0.115.0"; builder = ./builder.sh; src = fetchurl { url = http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz; - sha256 = "ad2f9eb98e976a82b62e97e7cf3a555464e43b80507b87ed7c469706faa4d897"; + sha256 = "0yr2n7barlbvqxxzbvgp0pmbwwf7bvjksravqa47yra689jvynr7"; }; inherit zlib alsaLib; -}) // {mozillaPlugin = "/lib/mozilla/plugins";} + + passthru = { + mozillaPlugin = "/lib/mozilla/plugins"; + }; + + meta = { + description = "Adobe Flash Player browser plugin"; + homepage = http://www.adobe.com/products/flashplayer/; + }; + +} diff --git a/pkgs/applications/networking/browsers/mozilla-plugins/mplayerplug-in/default.nix b/pkgs/applications/networking/browsers/mozilla-plugins/mplayerplug-in/default.nix index 12eef1c88593..1e681ade776b 100644 --- a/pkgs/applications/networking/browsers/mozilla-plugins/mplayerplug-in/default.nix +++ b/pkgs/applications/networking/browsers/mozilla-plugins/mplayerplug-in/default.nix @@ -5,12 +5,12 @@ # think). stdenv.mkDerivation { - name = "mplayerplug-in-3.45"; + name = "mplayerplug-in-3.50"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/mplayerplug-in/mplayerplug-in-3.45.tar.gz; - sha256 = "0cfl0s7v1bgdak39x7s2hnx968qs3vlv09gmwms27czimn8vijiz"; + url = mirror://sourceforge/mplayerplug-in/mplayerplug-in-3.50.tar.gz; + sha256 = "00jcbwl3wa6s4784c3wrz718f6jj1zkdfjbp7d2nhiafxrjqwsq4"; }; buildInputs = [pkgconfig firefox (firefox.gtk) libXpm gettext]; diff --git a/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/pkgs/applications/networking/instant-messengers/pidgin/default.nix index 73b351bf9fe2..46af85334748 100644 --- a/pkgs/applications/networking/instant-messengers/pidgin/default.nix +++ b/pkgs/applications/networking/instant-messengers/pidgin/default.nix @@ -17,10 +17,10 @@ } : stdenv.mkDerivation { - name = "pidgin-2.2.1"; + name = "pidgin-2.3.1"; src = fetchurl { - url = mirror://sourceforge/pidgin/pidgin-2.2.1.tar.bz2; - sha256 = "08sq0yc8vz6c24pdv64clv6s91a5idslpp7vll8vgspn4piyzyvf"; + url = mirror://sourceforge/pidgin/pidgin-2.3.1.tar.bz2; + sha256 = "17mpirkfrv48jqn86l23b2ia2nzz9hqhll6lp4c2q8sbff3kc21d"; }; inherit nss ncurses; diff --git a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix new file mode 100644 index 000000000000..bbdd265f7dab --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix @@ -0,0 +1,71 @@ +/* +License issues: +Date: Mon, 10 Dec 2007 19:55:16 -0500 +From: TeamSpeak Sales +To: 'Marc Weber' +Subject: RE: teamspeak on nix? + +Yes, that would be fine. As long as you are not renting servers or selling +TeamSpeak then you are more than welcome to distribute it. + +Thank you, + +TeamSpeak Sales Team +________________________________ +e-Mail: sales@tritoncia.com +TeamSpeak: http://www.TeamSpeak.com +Account Login: https://sales.TritonCIA.com/users + + + +-----Original Message----- +From: Marc Weber [mailto:marco-oweber@gmx.de] +Sent: Monday, December 10, 2007 5:03 PM +To: sales@tritoncia.com +Subject: teamspeak on nix? + +Hello, + +nix is very young software distribution system (http://nix.cs.uu.nl/) +I'd like to ask wether you permit us to add teamspeak (server/ client?) + +Sincerly +Marc Weber (small nix contributor) +*/ + +args: +args.stdenv.mkDerivation { + name = "teamspeak-client-rc2-2032"; + + src = args.fetchurl { + url = ftp://213.202.254.114/teamspeak/releases/ts2_client_rc2_2032.tar.bz2; + md5 = "e93d17a25e07b1cbe400e4eb028ca8f8"; + }; + + phases="installPhase"; + + rpathInputs = (with args; [ glibc x11 ] ); + + installPhase=" + set -x + i=\$out/nix-support + ensureDir \$out/{bin,nix-support} + mv setup.data/image \$i + cp \$out/{nix-support/image/TeamSpeak,bin} + echo sed + sed -i \"s=%installdir%=\$i/image=\" \$out/bin/TeamSpeak + + echo for + for p in $\rpathInputs; do + rpath=\$rpath:\$p/lib + done + echo patchelf + patchelf --set-rpath \$rpath \$i/image/TeamSpeak.bin + "; + + meta = { + description = "The TeamSpeak voice communication tool"; + homepage = http://www.goteamspeak.com; + license = "TODO"; # non commercial use see email above + }; +} diff --git a/pkgs/applications/networking/irc/chatzilla/default.nix b/pkgs/applications/networking/irc/chatzilla/default.nix index de34588a924d..ff979d39393b 100644 --- a/pkgs/applications/networking/irc/chatzilla/default.nix +++ b/pkgs/applications/networking/irc/chatzilla/default.nix @@ -1,14 +1,14 @@ {stdenv, fetchurl, unzip}: stdenv.mkDerivation { - name = "chatzilla-0.9.78.1"; + name = "chatzilla-0.9.79"; builder = ./builder.sh; src = fetchurl { # Obtained from http://chatzilla.rdmsoft.com/xulrunner/. - url = http://chatzilla.rdmsoft.com/xulrunner/download/chatzilla-0.9.78.1-xr.zip; - sha256 = "1f7fgi1dvpzjsiai0vc986vd481i77hcafvnzm73bc2q8pa5g5mb"; + url = http://chatzilla.rdmsoft.com/xulrunner/download/chatzilla-0.9.79-xr.zip; + sha256 = "0irbi8y4y2nlbwvhmmln5h5f4wv7spd1rqg7dxg7pc93s09p5i09"; }; buildInputs = [unzip]; diff --git a/pkgs/applications/networking/irc/irssi/default.nix b/pkgs/applications/networking/irc/irssi/default.nix index 91c75a007c61..a120db5a87ba 100644 --- a/pkgs/applications/networking/irc/irssi/default.nix +++ b/pkgs/applications/networking/irc/irssi/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, pkgconfig, ncurses, glib, openssl}: stdenv.mkDerivation { - name = "irssi-0.8.11"; + name = "irssi-0.8.12"; src = fetchurl { - url = http://irssi.org/files/irssi-0.8.11.tar.bz2; - sha256 = "425cf24f13bfda05c6a468523cd2874d05675ea1bc4e37a8c284f2f78c2dd6b2"; + url = http://irssi.org/files/irssi-0.8.12.tar.bz2; + sha256 = "1w7zkfs6j7xdcbqh8x0vf9rk2ps9d6rcgr8fapfjpk09nm5n6ba6"; }; buildInputs = [pkgconfig ncurses glib openssl]; NIX_LDFLAGS = "-lncurses"; diff --git a/pkgs/applications/networking/irc/xchat/default.nix b/pkgs/applications/networking/irc/xchat/default.nix index 5d12667e3071..e75201f20814 100644 --- a/pkgs/applications/networking/irc/xchat/default.nix +++ b/pkgs/applications/networking/irc/xchat/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, pkgconfig, tcl, gtk}: stdenv.mkDerivation { - name = "xchat-2.8.2"; + name = "xchat-2.8.4"; src = fetchurl { - url = http://www.xchat.org/files/source/2.8/xchat-2.8.2.tar.bz2; - sha256 = "1zjhjwr03nj52lpsvl78jwhir7q6482nnd4h1p0a9zka27kj4v4z"; + url = http://www.xchat.org/files/source/2.8/xchat-2.8.4.tar.bz2; + sha256 = "0qyx6rdvnjwy52amcmkjj134sysfkzbyv7b66vjsla3i8yg9lnpr"; }; buildInputs = [pkgconfig tcl gtk]; configureFlags = "--disable-nls"; diff --git a/pkgs/applications/networking/mailreaders/sylpheed/default.nix b/pkgs/applications/networking/mailreaders/sylpheed/default.nix index 1c52661e89b1..63e41e542e69 100644 --- a/pkgs/applications/networking/mailreaders/sylpheed/default.nix +++ b/pkgs/applications/networking/mailreaders/sylpheed/default.nix @@ -9,11 +9,11 @@ assert sslSupport -> openssl != null; assert gpgSupport -> gpgme != null; stdenv.mkDerivation { - name = "sylpheed-2.4.1"; + name = "sylpheed-2.4.8"; src = fetchurl { - url = http://sylpheed.sraoss.jp/sylpheed/v2.4/sylpheed-2.4.1.tar.bz2; - sha256 = "1hmia3lnh7yr2ca8bgxzn311waxfs0rhk0psck3dcjfhzxzp72zj"; + url = http://sylpheed.sraoss.jp/sylpheed/v2.4/sylpheed-2.4.8.tar.bz2; + sha256 = "0r4bfkyz39pj02rzn38ss10dhhhv93z1azlbbwdgbkjii3k760fc"; }; buildInputs = [ diff --git a/pkgs/applications/networking/sniffers/wireshark/default.nix b/pkgs/applications/networking/sniffers/wireshark/default.nix index f0b4038faba1..67318531371f 100644 --- a/pkgs/applications/networking/sniffers/wireshark/default.nix +++ b/pkgs/applications/networking/sniffers/wireshark/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, perl, pkgconfig, gtk, libpcap}: stdenv.mkDerivation { - name = "wireshark-0.99.6"; + name = "wireshark-0.99.7"; src = fetchurl { - url = http://www.wireshark.org/download/src/wireshark-0.99.6.tar.gz; - sha256 = "1f2i84dk4nw05nh78b2j4n9pbwdngcqx0grrja5831r6paj35x1y"; + url = http://www.wireshark.org/download/src/wireshark-0.99.7.tar.bz2; + sha256 = "10pb2mn6p40gsq2nbnqdzihrpa078jdgxqh8l4zs33bxa1h37frc"; }; buildInputs = [perl pkgconfig gtk libpcap]; } diff --git a/pkgs/applications/office/openoffice/builder.sh b/pkgs/applications/office/openoffice/builder.sh index 124b64ffc2be..2a651a300584 100644 --- a/pkgs/applications/office/openoffice/builder.sh +++ b/pkgs/applications/office/openoffice/builder.sh @@ -13,6 +13,8 @@ preConfigure() { SRCDIR= + sed -e '/CURL_NO_OLDIES/d' -i ucb/source/ucp/ftp/makefile.mk + cd config_office/ } diff --git a/pkgs/applications/version-management/subversion-1.4.x/default.nix b/pkgs/applications/version-management/subversion-1.4.x/default.nix index b2869450c094..d09176302b8b 100644 --- a/pkgs/applications/version-management/subversion-1.4.x/default.nix +++ b/pkgs/applications/version-management/subversion-1.4.x/default.nix @@ -17,12 +17,12 @@ assert sslSupport -> neon.sslSupport; assert compressionSupport -> neon.compressionSupport; stdenv.mkDerivation { - name = "subversion-1.4.5"; + name = "subversion-1.4.6"; builder = ./builder.sh; src = fetchurl { - url = http://subversion.tigris.org/downloads/subversion-1.4.5.tar.bz2; - sha1 = "acc80381cb670736ad626fee1eb04f36ba7e5fc8"; + url = http://subversion.tigris.org/downloads/subversion-1.4.6.tar.bz2; + sha1 = "a9c941e2309744f6a2986200698b60da057a7527"; }; buildInputs = @@ -50,6 +50,7 @@ stdenv.mkDerivation { meta = { description = "A version control system intended to be a compelling replacement for CVS in the open source community"; + homepage = http://subversion.tigris.org/; }; } diff --git a/pkgs/applications/video/vlc/default.nix b/pkgs/applications/video/vlc/default.nix index d8db6d0396a6..0d499008b0ce 100644 --- a/pkgs/applications/video/vlc/default.nix +++ b/pkgs/applications/video/vlc/default.nix @@ -8,11 +8,11 @@ assert libdvdread.libdvdcss == libdvdcss; assert xvSupport -> libXv != null; stdenv.mkDerivation { - name = "vlc-0.8.6c"; + name = "vlc-0.8.6d"; src = fetchurl { - url = http://download.videolan.org/pub/videolan/vlc/0.8.6c/vlc-0.8.6c.tar.bz2; - sha256 = "1bmngn66i527vw9g5xnhlpz64xl5gch3j3l6y5d727rcpmxlvhjz"; + url = http://download.videolan.org/pub/videolan/vlc/0.8.6d/vlc-0.8.6d.tar.bz2; + sha256 = "019jw9cp7fbmhbmlbwvjgpamxwx0rdajyxab2sbmh4n6v04fl266"; }; buildInputs = [ @@ -30,5 +30,6 @@ stdenv.mkDerivation { meta = { description = "Cross-platform media player and streaming server"; + homepage = http://www.videolan.org/vlc/; }; } diff --git a/pkgs/applications/virtualization/qemu/0.9.0.nix b/pkgs/applications/virtualization/qemu/0.9.0.nix new file mode 100644 index 000000000000..8604f5ae66b7 --- /dev/null +++ b/pkgs/applications/virtualization/qemu/0.9.0.nix @@ -0,0 +1,26 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz; + sha256 = "1h85njd8xvn472yhcm92rjyzqjr719ab73rxwmz9cm2n6gwsq7s9"; + }; + + buildInputs = [ SDL zlib which ]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +let +preConfigure = FullDepEntry (" + gcc --version +") [minInit]; +in +stdenv.mkDerivation rec { + name = "qemu-"+version; + builder = writeScript (name + "-builder") + (textClosure [ preConfigure doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + QEmu processor emulator. +"; + }; +} diff --git a/pkgs/applications/virtualization/qemu/linux-img/0.2.nix b/pkgs/applications/virtualization/qemu/linux-img/0.2.nix new file mode 100644 index 000000000000..02ac87ef2e2f --- /dev/null +++ b/pkgs/applications/virtualization/qemu/linux-img/0.2.nix @@ -0,0 +1,27 @@ + +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://fabrice.bellard.free.fr/qemu/linux-0.2.img.bz2; + sha256 = "08xlwy1908chpc4fsqy2v13zi25dapk0ybrd43fj95v67kdj5hj1"; + }; + buildInputs = []; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +let +doCopy = FullDepEntry (" + ensureDir \$out/share/qemu-images + cp linux-${version}.img \$out/share/qemu-images/ +") [minInit doUnpack defEnsureDir]; +in +stdenv.mkDerivation rec { + name = "QEmu-Linux-Image-"+version; + builder = writeScript (name + "-builder") + (textClosure [doCopy doForceShare doPropagate]); + meta = { + description = " + ${abort "Write a description"} +"; + }; +} diff --git a/pkgs/applications/virtualization/virtualbox/1.5.2.nix b/pkgs/applications/virtualization/virtualbox/1.5.2.nix new file mode 100644 index 000000000000..e633c55a2634 --- /dev/null +++ b/pkgs/applications/virtualization/virtualbox/1.5.2.nix @@ -0,0 +1,21 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.virtualbox.org/download/1.5.2/VirtualBox-1.5.2_OSE.tar.bz2; + sha256 = "1g9rvkqjcsfx36gwk6i9c0bml6053xx2mdn1sn7vyyy0sgwkwk53"; + }; + buildInputs = [libXcursor bridge_utils umlutilities kernelHeaders + wine jre libxslt libIDL SDL qt3 openssl zlib]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "VirtualBox-"+version; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Virtual Box is just software for running virtual machines. +"; + }; +} diff --git a/pkgs/data/fonts/fontWrap/default.nix b/pkgs/data/fonts/fontWrap/default.nix new file mode 100644 index 000000000000..ef370be8e356 --- /dev/null +++ b/pkgs/data/fonts/fontWrap/default.nix @@ -0,0 +1,27 @@ +args : with args; + with builderDefs { + src =""; /* put a fetchurl here */ + buildInputs = [mkfontdir mkfontscale]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +let + doInstall = FullDepEntry (" + ensureDir \$out/share/fonts/ + cd \$out/share/fonts + for i in ${toString paths}; do + find \$i -type f -exec ln -s '{}' . ';' ; + done + mkfontdir + mkfontscale + ") [minInit addInputs defEnsureDir] ; +in +stdenv.mkDerivation rec { + name = "wrapped-font-dir"; + builder = writeScript (name + "-builder") + (textClosure [ doInstall doForceShare doPropagate]); + meta = { + description = " + Just a wrapper to create fots.dir and fonts.scale . +"; + }; +} diff --git a/pkgs/data/misc/xkeyboard-config/default.nix b/pkgs/data/misc/xkeyboard-config/default.nix index 9eae78b07008..31836d24ecf9 100644 --- a/pkgs/data/misc/xkeyboard-config/default.nix +++ b/pkgs/data/misc/xkeyboard-config/default.nix @@ -16,5 +16,8 @@ stdenv.mkDerivation { configureFlags=\"--with-xkb-base=$out/etc/X11/xkb -with-xkb-rules-symlink=xorg,xfree86\" "; - postInstall = "rm \${out}/etc/X11/xkb/compiled"; + postInstall = '' + rm ''${out}/etc/X11/xkb/compiled + cat ${./level3-deadkeys-us-intl} >> $out/etc/X11/xkb/symbols/us + ''; } diff --git a/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl b/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl new file mode 100644 index 000000000000..6b7d263da7ff --- /dev/null +++ b/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl @@ -0,0 +1,95 @@ + +// Grabbed from http://lists.freedesktop.org/archives/xorg/2007-July/026686.html +// Submitted there by Adriaan van Nijendaal, he says he submitted it to X.org +// for inclusion, so it should be OK to use it as if it were part of X.org + +// The keyboard section in the X-server config file +// (/etc/X11/xorg.conf on my system) looks like this: +// +// Section "InputDevice" +// Driver "kbd" +// Identifier "Keyboard[0]" +// Option "XkbModel" "pc101" +// Option "XkbLayout" "us" +// Option "XkbVariant" "altgr-intl" +// EndSection +// +// To be effective, you need to install this file, change the X config +// file and restart the X-server. Or, alternatively, you can do this +// run-time: +// +// setxkbmap -v -rules xorg -model pc101 -layout us -variant altgr-intl +// +// Once the X-server has loaded the new config, a keyboard can be +// displayed with: (if you change "-ll 1" into "-ll 2", you'll see +// the special keys ONLY.) +// +// xkbcomp -o /tmp/keyboard.xkm -opt cgkst -xkb $DISPLAY +// xkbprint -o /tmp/keyboard.xkm.ps -kc -nkg 2 -ntg 4 -lg 1 -ll 1 \ +// -lc en_US.iso885915 -level2 -mono -label symbols -w 3 $DISPLAY; +// gv -seascape /tmp/keyboard.xkm.ps +// rm -f /tmp/keyboard.xkm.ps /tmp/keyboard.xkm +// + +partial alphanumeric_keys +xkb_symbols "altgr-intl" { + + name[Group1]= "U.S. English - International (AltGr dead keys)"; + + include "us(basic)" + + key { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key { [ 1, exclam, onesuperior, exclamdown ] }; + key { [ 2, at, twosuperior, dead_doubleacute] }; + key { [ 3, numbersign, threesuperior, dead_macron ] }; + key { [ 4, dollar, currency, sterling ] }; + key { [ 5, percent, EuroSign ] }; + key { [ 6, asciicircum, dead_circumflex ] }; + key { [ 7, ampersand, dead_horn ] }; + key { [ 8, asterisk, dead_ogonek ] }; + key { [ 9, parenleft, leftsinglequotemark,dead_breve ] }; + key { [ 0, parenright,rightsinglequotemark,dead_abovering ] }; + key { [ minus, underscore, yen, dead_belowdot ] }; + key { [ equal, plus, multiply, division ] }; + + key { [ q, Q, adiaeresis, Adiaeresis ] }; + key { [ w, W, aring, Aring ] }; + key { [ e, E, eacute, Eacute ] }; + key { [ r, R, ediaeresis, Ediaeresis ] }; + key { [ t, T, thorn, THORN ] }; + key { [ y, Y, udiaeresis, Udiaeresis ] }; + key { [ u, U, uacute, Uacute ] }; + key { [ i, I, iacute, Iacute ] }; + key { [ o, O, oacute, Oacute ] }; + key { [ p, P, odiaeresis, Odiaeresis ] }; + key { [ bracketleft, braceleft, guillemotleft ] }; + key { [ bracketright,braceright, guillemotright ] }; + + key { [ a, A, aacute, Aacute ] }; + key { [ s, S, ssharp, section ] }; + key { [ d, D, eth, ETH ] }; + key { [ f, F ] }; + key { [ g, G ] }; + key { [ h, H ] }; + key { [ j, J, idiaeresis, Idiaeresis ] }; + key { [ k, K ] }; + key { [ l, L, oslash, Ooblique ] }; + key { [semicolon, colon, paragraph, degree ] }; + key { [apostrophe, quotedbl, dead_acute, dead_diaeresis ] }; + + key { [ z, Z, ae, AE ] }; + key { [ x, X, oe, OE ] }; + key { [ c, C, copyright, cent ] }; + key { [ v, V, registered, registered ] }; + key { [ b, B ] }; + key { [ n, N, ntilde, Ntilde ] }; + key { [ m, M, mu, mu ] }; + key { [ comma, less, ccedilla, Ccedilla ] }; + key { [ period, greater, dead_abovedot, dead_caron ] }; + key { [ slash, question, questiondown, dead_hook ] }; + key { [backslash, bar, notsign, brokenbar ] }; + + // Let's have free choice + //include "level3(ralt_switch)" +}; + diff --git a/pkgs/development/compilers/ghc-6.6.1/builder.sh b/pkgs/development/compilers/ghc-6.6.1/builder.sh deleted file mode 100644 index 0ea4fc496f9e..000000000000 --- a/pkgs/development/compilers/ghc-6.6.1/builder.sh +++ /dev/null @@ -1,26 +0,0 @@ -source $stdenv/setup - -# Setup isolated package management -postInstall() -{ - ensureDir "$out/nix-support" - echo "# Path to the GHC compiler directory in the store" > $out/nix-support/setup-hook - echo "ghc=$out" >> $out/nix-support/setup-hook - echo "" >> $out/nix-support/setup-hook - cat $setupHook >> $out/nix-support/setup-hook -} -postInstall=postInstall - -configureFlags="--with-gmp-libraries=$gmp/lib --with-readline-libraries=\"$readline/lib\"" - -preConfigure() -{ - chmod u+x rts/gmp/configure - # still requires a hack for ncurses - sed -i "s|^\(library-dirs.*$\)|\1 \"$ncurses/lib\"|" libraries/readline/package.conf.in -} -preConfigure=preConfigure - - -# Standard configure/make/make install -genericBuild diff --git a/pkgs/development/compilers/ghc-6.6.1/default.nix b/pkgs/development/compilers/ghc-6.6.1/default.nix index 738b6a79fc74..14a59aeeeba5 100644 --- a/pkgs/development/compilers/ghc-6.6.1/default.nix +++ b/pkgs/development/compilers/ghc-6.6.1/default.nix @@ -1,6 +1,6 @@ {stdenv, fetchurl, readline, ghc, perl, m4, gmp, ncurses}: -stdenv.mkDerivation { +stdenv.mkDerivation (rec { name = "ghc-6.6.1"; src = map fetchurl [ @@ -12,15 +12,34 @@ stdenv.mkDerivation { } ]; - builder = ./builder.sh; - - buildInputs = [ghc readline perl m4]; + buildInputs = [ghc readline perl m4 gmp]; setupHook = ./setup-hook.sh; meta = { - description = "The Glasgow Haskell Compiler v6.6.1"; + description = "The Glasgow Haskell Compiler"; }; + postInstall = '' + ensureDir "$out/nix-support" + echo "# Path to the GHC compiler directory in the store" > $out/nix-support/setup-hook + echo "ghc=$out" >> $out/nix-support/setup-hook + echo "" >> $out/nix-support/setup-hook + cat $setupHook >> $out/nix-support/setup-hook + ''; + + configureFlags=[ + "--with-gmp-libraries=${gmp}/lib" + "--with-readline-libraries=${readline}/lib" + "--with-gmp-includes=${gmp}/include" + "--with-gcc=${gcc}/bin/gcc" + ]; + + preConfigure = '' + # still requires a hack for ncurses + sed -i "s|^\(library-dirs.*$\)|\1 \"${ncurses}/lib\"|" libraries/readline/package.conf.in + ''; + + inherit (stdenv) gcc; inherit readline gmp ncurses; -} +}) diff --git a/pkgs/development/compilers/ghc-6.8/builder.sh b/pkgs/development/compilers/ghc-6.8/builder.sh deleted file mode 100644 index 0ea4fc496f9e..000000000000 --- a/pkgs/development/compilers/ghc-6.8/builder.sh +++ /dev/null @@ -1,26 +0,0 @@ -source $stdenv/setup - -# Setup isolated package management -postInstall() -{ - ensureDir "$out/nix-support" - echo "# Path to the GHC compiler directory in the store" > $out/nix-support/setup-hook - echo "ghc=$out" >> $out/nix-support/setup-hook - echo "" >> $out/nix-support/setup-hook - cat $setupHook >> $out/nix-support/setup-hook -} -postInstall=postInstall - -configureFlags="--with-gmp-libraries=$gmp/lib --with-readline-libraries=\"$readline/lib\"" - -preConfigure() -{ - chmod u+x rts/gmp/configure - # still requires a hack for ncurses - sed -i "s|^\(library-dirs.*$\)|\1 \"$ncurses/lib\"|" libraries/readline/package.conf.in -} -preConfigure=preConfigure - - -# Standard configure/make/make install -genericBuild diff --git a/pkgs/development/compilers/ghc-6.8/default.nix b/pkgs/development/compilers/ghc-6.8/default.nix index c87d84570827..929799d1521c 100644 --- a/pkgs/development/compilers/ghc-6.8/default.nix +++ b/pkgs/development/compilers/ghc-6.8/default.nix @@ -1,45 +1,40 @@ args: with args; stdenv.mkDerivation (rec { - name = "ghc-6.8.1"; + name = "ghc-6.8.2"; homepage = "http://www.haskell.org/ghc"; src = map fetchurl [ { url = "${homepage}/dist/stable/dist/${name}-src.tar.bz2"; - sha256 = "16gr19bwyjv0fmjdrsj79vqpaxxg5hasni94nwv9d6c85n5myivz"; + md5 = "745c6b7d4370610244419cbfec4b2f84"; } { url = "${homepage}/dist/stable/dist/${name}-src-extralibs.tar.bz2"; - sha256 = "1h3nc6x4g838mdcirymadmv3fsmp1wh062syb3a8aqv6f468akvm"; + md5 = "d199c50814188fb77355d41058b8613c"; } ]; - buildInputs = [ghc readline perl m4 pkgconfig gtk]; - patchPhase = " - sed -e s@/bin/cat@\$(type -p cat)@ -i configure - " + - (if (stdenv.system == "x86_64-linx") then "patch -p2 < $patch64" else ""); + buildInputs = [ghc readline perl m4 gmp]; setupHook = ./setup-hook.sh; meta = { - description = "The Glasgow Haskell Compiler v6.8.1"; + description = "The Glasgow Haskell Compiler"; }; - postInstall = " - ensureDir \"$out/nix-support\" - echo \"# Path to the GHC compiler directory in the store\" > $out/nix-support/setup-hook - echo \"ghc=$out\" >> $out/nix-support/setup-hook - echo \"\" >> $out/nix-support/setup-hook - cat $setupHook >> $out/nix-support/setup-hook - "; + postInstall = '' + ensureDir "$out/nix-support" + echo "# Path to the GHC compiler directory in the store" > $out/nix-support/setup-hook + echo "ghc=$out" >> $out/nix-support/setup-hook + echo "" >> $out/nix-support/setup-hook + cat $setupHook >> $out/nix-support/setup-hook + ''; - patch64 = ./x86_64-linux_patch; - - # the presence of this file makes Cabal cry for happy while generating makefiles ... preConfigure = " - echo 'GhcThreaded=NO' > mk/build.mk - rm libraries/haskell-src/Language/Haskell/Parser.ly + # still requires a hack for ncurses + sed -i \"s|^\\\(ld-options.*$\\\)|\\\1 -L${ncurses}/lib|\" libraries/readline/readline.buildinfo.in "; dontStrip = 1; + inherit (stdenv) gcc; + inherit readline gmp ncurses; }) diff --git a/pkgs/development/compilers/ghc-6.8/setup-hook.sh b/pkgs/development/compilers/ghc-6.8/setup-hook.sh index 23da6de03825..489c8d532b86 100644 --- a/pkgs/development/compilers/ghc-6.8/setup-hook.sh +++ b/pkgs/development/compilers/ghc-6.8/setup-hook.sh @@ -1,5 +1,5 @@ # Support dir for isolating GHC -ghc_support=$TMPDIR/ghc-6.6-nix-support +ghc_support=$TMPDIR/ghc-6.8-nix-support mkdir -p $ghc_support # Create isolated package config diff --git a/pkgs/development/compilers/ghc/boot.nix b/pkgs/development/compilers/ghc/boot.nix index bcb26327edb4..bf096616a96e 100644 --- a/pkgs/development/compilers/ghc/boot.nix +++ b/pkgs/development/compilers/ghc/boot.nix @@ -1,21 +1,56 @@ {stdenv, fetchurl, perl, readline, ncurses, gmp}: -assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; - stdenv.mkDerivation { - name = "ghc-6.4.2"; - builder = ./boot.sh; - src = if stdenv.system == "i686-linux" then - (fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/ghc-6.4.2-i386-unknown-linux.tar.bz2; - md5 = "092fe2e25dab22b926babe97cc77db1f"; - }) else - (fetchurl { - url = http://haskell.org/ghc/dist/6.4.2/ghc-6.4.2-x86_64-unknown-linux.tar.bz2; - md5 = "8f5fe48798f715cd05214a10987bf6d5"; - }); + name = if stdenv.system == "i686-darwin" then "ghc-6.6.1" else "ghc-6.4.2"; + + src = + if stdenv.system == "i686-linux" then + fetchurl { + url = http://nix.cs.uu.nl/dist/tarballs/ghc-6.4.2-i386-unknown-linux.tar.bz2; + md5 = "092fe2e25dab22b926babe97cc77db1f"; + } + else if stdenv.system == "x86_64-linux" then + fetchurl { + url = http://haskell.org/ghc/dist/6.4.2/ghc-6.4.2-x86_64-unknown-linux.tar.bz2; + md5 = "8f5fe48798f715cd05214a10987bf6d5"; + } + else if stdenv.system == "i686-darwin" then + fetchurl { + url = http://www.haskell.org/ghc/dist/6.6.1/ghc-6.6.1-i386-apple-darwin.tar.bz2; + sha256 = "1drbsicanr6jlykvs4vs6gbi2q9ac1bcaxz2vzwh3pfv3lfibwia"; + } + else throw "cannot bootstrap GHC on this platform"; + buildInputs = [perl]; - propagatedBuildInputs = [readline ncurses gmp]; dontStrip = 1; - inherit readline ncurses gmp; + + # On Linux, use patchelf to modify the executables so that they can + # find readline/gmp. + postBuild = if stdenv.isLinux then " + find . -type f -perm +100 \\ + -exec patchelf --interpreter \"$(cat $NIX_GCC/nix-support/dynamic-linker)\" \\ + --set-rpath \"${readline}/lib:${ncurses}/lib:${gmp}/lib\" {} \\; + " else ""; + + # The binaries for Darwin use frameworks, so fake those frameworks, + # and create some wrapper scripts that set DYLD_FRAMEWORK_PATH so + # that the executables work with no special setup. + postInstall = if stdenv.isDarwin then " + + ensureDir $out/frameworks/GMP.framework/Versions/A + ln -s ${gmp}/lib/libgmp.dylib $out/frameworks/GMP.framework/GMP + ln -s ${gmp}/lib/libgmp.dylib $out/frameworks/GMP.framework/Versions/A/GMP + ensureDir $out/frameworks/GNUreadline.framework/Versions/A + ln -s ${readline}/lib/libreadline.dylib $out/frameworks/GNUreadline.framework/GNUreadline + ln -s ${readline}/lib/libreadline.dylib $out/frameworks/GNUreadline.framework/Versions/A/GNUreadline + + mv $out/bin $out/bin-orig + mkdir $out/bin + for i in $(cd $out/bin-orig && ls); do + echo \"#! $SHELL -e\" >> $out/bin/$i + echo \"DYLD_FRAMEWORK_PATH=$out/frameworks exec $out/bin-orig/$i -framework-path $out/frameworks \\\"\\$@\\\"\" >> $out/bin/$i + chmod +x $out/bin/$i + done + + " else ""; } diff --git a/pkgs/development/compilers/ghc/boot.sh b/pkgs/development/compilers/ghc/boot.sh deleted file mode 100644 index 4b88b6bdba38..000000000000 --- a/pkgs/development/compilers/ghc/boot.sh +++ /dev/null @@ -1,10 +0,0 @@ -source $stdenv/setup - -postBuild=postBuild -postBuild () { - find . -type f -perm +100 \ - -exec patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ - --set-rpath "$readline/lib:$ncurses/lib:$gmp/lib" {} \; -} - -genericBuild diff --git a/pkgs/development/interpreters/guile/default.nix b/pkgs/development/interpreters/guile/default.nix index b643d88a3a9f..9b12bc9a2f6d 100644 --- a/pkgs/development/interpreters/guile/default.nix +++ b/pkgs/development/interpreters/guile/default.nix @@ -1,9 +1,9 @@ args: with args; stdenv.mkDerivation { - name = "guile-1.6.7"; + name = "guile-1.8.3"; src = fetchurl { - url = ftp://ftp.gnu.org/gnu/guile/guile-1.8.2.tar.gz; - sha256 = "03kn1ia4s7l24zl2sfbrns6fs3nc9cw2pzsqx8y7wwr80b1nfxhz"; + url = ftp://ftp.gnu.org/gnu/guile/guile-1.8.3.tar.gz; + sha256 = "2ab59099cf2d46f57cf5421c9b84aa85f61961640046e8066c6b321257517796"; }; propagatedBuildInputs = [readline libtool gmp]; diff --git a/pkgs/development/interpreters/php_configurable/default.nix b/pkgs/development/interpreters/php_configurable/default.nix index 9a1eeeb67a31..91e0518ccd3b 100644 --- a/pkgs/development/interpreters/php_configurable/default.nix +++ b/pkgs/development/interpreters/php_configurable/default.nix @@ -1,3 +1,15 @@ +/* TODO check security issues such as : ++--------------------------------------------------------------------+ +| *** WARNING *** | +| | +| You will be compiling the CGI version of PHP without any | +| redirection checking. By putting this cgi binary somewhere in | +| your web space, users may be able to circumvent existing .htaccess | +| security by loading files directly through the parser. See | +| http://www.php.net/manual/security.php for more details. | +*/ + + args: ( args.mkDerivationByConfiguration { flagConfig = { @@ -394,7 +406,7 @@ args: # SAPI modules: apxs2 = { cfgOption = "--with-apxs2=\$apacheHttpd/bin/apxs"; - pass = { inherit (args) apacheHttpd; }; }; + pass = "apacheHttpd"; }; # Extensions @@ -425,6 +437,22 @@ args: If unspecified, the default locations are searched */ + /* + Building xdebug withing php to be able to add the parameters to the ini file.. Ther should be a better way + meta = { + description = "debugging support for PHP"; + homepage = http://xdebug.org; + license = "based on the PHP license - as is"; + }; + */ + xdebug = { buildInputs = [ "automake" "autoconf" ]; + pass = { xdebug_src = args.fetchurl { + name = "xdebug-2.0.2.tar.gz"; + url = "http://xdebug.org/link.php?url=xdebug202"; + sha256 = "1h0bxvf8krr203fmk1k7izrrr81gz537xmd3pqh4vslwdlbhrvic"; + };};}; + + }; defaults = [ "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ]; @@ -436,19 +464,43 @@ args: extraAttrs = co : { name = "php_configurable-5.2.4"; - buildInputs = ( args.lib.getAttr [ "phpIncludes" ] [] args ); - + buildInputs = ( args.lib.getAttr [ "phpIncludes" ] [] args ) ++ co.buildInputs; configurePhase = " iniFile=\$out/etc/\$name.ini [[ -z \"\$libxml2\" ]] || export PATH=\$PATH:\$libxml2/bin - ./configure --with-config-file-path=\$iniFile --prefix=\$out " + co.configureFlags; + ./configure --with-config-file-scan-dir=/etc --with-config-file-path=\$iniFile --prefix=\$out " + co.configureFlags + " + echo configurePhase end + "; installPhase = " unset installPhase; installPhase; cp php.ini-recommended $\iniFile - echo \"include_path=.\$PATH_DELIMITER\$out/lib/php\$PATH_DELIMITER\$PHP_INCLUDES\" > \$iniFile + + # Now Let's build xdebug if flag has been given + # TODO I think there are better paths than the given below + if [ -n \$flag_set_xdebug ]; then + PATH=\$PATH:\$out/bin + tar xfz \$xdebug_src; + cd xdebug* + phpize + ./configure --prefix=\$out + make + ensureDir \$out/lib; cp modules/xdebug.so $out/lib +cat >> $iniFile << EOF +zend_extension=\"\$out/lib/xdebug.so\" +zend_extension_ts=\"\$out/lib/xdebug.so\" +zend_extension_debug=\"\$out/lib/xdebug.so\" +xdebug.remote_enable=true +xdebug.remote_host=127.0.0.1 +xdebug.remote_port=9000 +xdebug.remote_handler=dbgp +xdebug.profiler_enable=0 +xdebug.profiler_output_dir=\"/tmp/xdebug\" +xdebug.remote_mode=req +EOF + fi "; src = args.fetchurl { diff --git a/pkgs/development/interpreters/tcl/default.nix b/pkgs/development/interpreters/tcl/default.nix index 0fce5d3236a4..1401757c2677 100644 --- a/pkgs/development/interpreters/tcl/default.nix +++ b/pkgs/development/interpreters/tcl/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "tcl-8.4.13"; + name = "tcl-8.4.16"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/tcl/tcl8.4.13-src.tar.gz; - md5 = "c6b655ad5db095ee73227113220c0523"; + url = mirror://sourceforge/tcl/tcl8.4.16-src.tar.gz; + sha256 = "0v9mh53kdvfm4kxgsw8gfxsfl8kvbnnp22bpwyyg5sa4jyjjbs93"; }; } diff --git a/pkgs/development/libraries/acl/acl-2.2.45-patch b/pkgs/development/libraries/acl/acl-2.2.45-patch new file mode 100644 index 000000000000..557381922c35 --- /dev/null +++ b/pkgs/development/libraries/acl/acl-2.2.45-patch @@ -0,0 +1,222 @@ +diff -u -U3 -r acl-2.2.45-orig/aclocal.m4 acl-2.2.45-mod/aclocal.m4 +--- acl-2.2.45-orig/aclocal.m4 2007-12-23 16:16:11.000000000 +0300 ++++ acl-2.2.45-mod/aclocal.m4 2007-12-23 18:09:04.000000000 +0300 +@@ -228,32 +228,32 @@ + AC_PACKAGE_NEED_UTILITY($1, "$cc", cc, [C compiler]) + + if test -z "$MAKE"; then +- AC_PATH_PROG(MAKE, gmake,, /usr/bin:/usr/local/bin:/usr/freeware/bin) ++ AC_PATH_PROG(MAKE, gmake,,) + fi + if test -z "$MAKE"; then +- AC_PATH_PROG(MAKE, make,, /usr/bin) ++ AC_PATH_PROG(MAKE, make,, ) + fi + make=$MAKE + AC_SUBST(make) + AC_PACKAGE_NEED_UTILITY($1, "$make", make, [GNU make]) + + if test -z "$LIBTOOL"; then +- AC_PATH_PROG(LIBTOOL, glibtool,, /usr/bin) ++ AC_PATH_PROG(LIBTOOL, glibtool,, ) + fi + if test -z "$LIBTOOL"; then +- AC_PATH_PROG(LIBTOOL, libtool,, /usr/bin:/usr/local/bin:/usr/freeware/bin) ++ AC_PATH_PROG(LIBTOOL, libtool,, ) + fi + libtool=$LIBTOOL + AC_SUBST(libtool) + AC_PACKAGE_NEED_UTILITY($1, "$libtool", libtool, [GNU libtool]) + + if test -z "$TAR"; then +- AC_PATH_PROG(TAR, tar,, /usr/freeware/bin:/bin:/usr/local/bin:/usr/bin) ++ AC_PATH_PROG(TAR, tar,, ) + fi + tar=$TAR + AC_SUBST(tar) + if test -z "$ZIP"; then +- AC_PATH_PROG(ZIP, gzip,, /bin:/usr/bin:/usr/local/bin:/usr/freeware/bin) ++ AC_PATH_PROG(ZIP, gzip,, ) + fi + + zip=$ZIP +@@ -266,25 +266,25 @@ + AC_SUBST(makedepend) + + if test -z "$AWK"; then +- AC_PATH_PROG(AWK, awk,, /bin:/usr/bin) ++ AC_PATH_PROG(AWK, awk,, ) + fi + awk=$AWK + AC_SUBST(awk) + + if test -z "$SED"; then +- AC_PATH_PROG(SED, sed,, /bin:/usr/bin) ++ AC_PATH_PROG(SED, sed,, ) + fi + sed=$SED + AC_SUBST(sed) + + if test -z "$ECHO"; then +- AC_PATH_PROG(ECHO, echo,, /bin:/usr/bin) ++ AC_PATH_PROG(ECHO, echo,, ) + fi + echo=$ECHO + AC_SUBST(echo) + + if test -z "$SORT"; then +- AC_PATH_PROG(SORT, sort,, /bin:/usr/bin) ++ AC_PATH_PROG(SORT, sort,, ) + fi + sort=$SORT + AC_SUBST(sort) +@@ -294,21 +294,21 @@ + + if test "$enable_gettext" = yes; then + if test -z "$MSGFMT"; then +- AC_PATH_PROG(MSGFMT, msgfmt,, /usr/bin:/usr/local/bin:/usr/freeware/bin) ++ AC_PATH_PROG(MSGFMT, msgfmt,, ) + fi + msgfmt=$MSGFMT + AC_SUBST(msgfmt) + AC_PACKAGE_NEED_UTILITY($1, "$msgfmt", msgfmt, gettext) + + if test -z "$MSGMERGE"; then +- AC_PATH_PROG(MSGMERGE, msgmerge,, /usr/bin:/usr/local/bin:/usr/freeware/bin) ++ AC_PATH_PROG(MSGMERGE, msgmerge,, ) + fi + msgmerge=$MSGMERGE + AC_SUBST(msgmerge) + AC_PACKAGE_NEED_UTILITY($1, "$msgmerge", msgmerge, gettext) + + if test -z "$XGETTEXT"; then +- AC_PATH_PROG(XGETTEXT, xgettext,, /usr/bin:/usr/local/bin:/usr/freeware/bin) ++ AC_PATH_PROG(XGETTEXT, xgettext,, ) + fi + xgettext=$XGETTEXT + AC_SUBST(xgettext) +@@ -316,7 +316,7 @@ + fi + + if test -z "$RPM"; then +- AC_PATH_PROG(RPM, rpm,, /bin:/usr/bin:/usr/freeware/bin) ++ AC_PATH_PROG(RPM, rpm,, ) + fi + rpm=$RPM + AC_SUBST(rpm) +ôÏÌØËÏ × acl-2.2.45-orig/: configure +diff -u -U3 -r acl-2.2.45-orig/m4/package_utilies.m4 acl-2.2.45-mod/m4/package_utilies.m4 +--- acl-2.2.45-orig/m4/package_utilies.m4 2007-12-23 16:16:11.000000000 +0300 ++++ acl-2.2.45-mod/m4/package_utilies.m4 2007-12-23 18:01:28.000000000 +0300 +@@ -23,32 +23,26 @@ + AC_PACKAGE_NEED_UTILITY($1, "$cc", cc, [C compiler]) + + if test -z "$MAKE"; then +- AC_PATH_PROG(MAKE, gmake,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + fi + if test -z "$MAKE"; then +- AC_PATH_PROG(MAKE, make,, /usr/bin) + fi + make=$MAKE + AC_SUBST(make) + AC_PACKAGE_NEED_UTILITY($1, "$make", make, [GNU make]) + + if test -z "$LIBTOOL"; then +- AC_PATH_PROG(LIBTOOL, glibtool,, /usr/bin) + fi + if test -z "$LIBTOOL"; then +- AC_PATH_PROG(LIBTOOL, libtool,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + fi + libtool=$LIBTOOL + AC_SUBST(libtool) + AC_PACKAGE_NEED_UTILITY($1, "$libtool", libtool, [GNU libtool]) + + if test -z "$TAR"; then +- AC_PATH_PROG(TAR, tar,, /usr/freeware/bin:/bin:/usr/local/bin:/usr/bin) + fi + tar=$TAR + AC_SUBST(tar) + if test -z "$ZIP"; then +- AC_PATH_PROG(ZIP, gzip,, /bin:/usr/bin:/usr/local/bin:/usr/freeware/bin) + fi + + zip=$ZIP +@@ -61,25 +55,21 @@ + AC_SUBST(makedepend) + + if test -z "$AWK"; then +- AC_PATH_PROG(AWK, awk,, /bin:/usr/bin) + fi + awk=$AWK + AC_SUBST(awk) + + if test -z "$SED"; then +- AC_PATH_PROG(SED, sed,, /bin:/usr/bin) + fi + sed=$SED + AC_SUBST(sed) + + if test -z "$ECHO"; then +- AC_PATH_PROG(ECHO, echo,, /bin:/usr/bin) + fi + echo=$ECHO + AC_SUBST(echo) + + if test -z "$SORT"; then +- AC_PATH_PROG(SORT, sort,, /bin:/usr/bin) + fi + sort=$SORT + AC_SUBST(sort) +@@ -89,21 +79,18 @@ + + if test "$enable_gettext" = yes; then + if test -z "$MSGFMT"; then +- AC_PATH_PROG(MSGFMT, msgfmt,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + fi + msgfmt=$MSGFMT + AC_SUBST(msgfmt) + AC_PACKAGE_NEED_UTILITY($1, "$msgfmt", msgfmt, gettext) + + if test -z "$MSGMERGE"; then +- AC_PATH_PROG(MSGMERGE, msgmerge,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + fi + msgmerge=$MSGMERGE + AC_SUBST(msgmerge) + AC_PACKAGE_NEED_UTILITY($1, "$msgmerge", msgmerge, gettext) + + if test -z "$XGETTEXT"; then +- AC_PATH_PROG(XGETTEXT, xgettext,, /usr/bin:/usr/local/bin:/usr/freeware/bin) + fi + xgettext=$XGETTEXT + AC_SUBST(xgettext) +@@ -111,7 +98,6 @@ + fi + + if test -z "$RPM"; then +- AC_PATH_PROG(RPM, rpm,, /bin:/usr/bin:/usr/freeware/bin) + fi + rpm=$RPM + AC_SUBST(rpm) +diff -u -U3 -r acl-2.2.45-orig/Makefile acl-2.2.45-mod/Makefile +--- acl-2.2.45-orig/Makefile 2007-12-23 16:16:11.000000000 +0300 ++++ acl-2.2.45-mod/Makefile 2007-12-23 18:01:28.000000000 +0300 +@@ -33,19 +33,6 @@ + endif + + $(CONFIGURE): +- autoconf +- ./configure \ +- --prefix=/ \ +- --exec-prefix=/ \ +- --sbindir=/bin \ +- --bindir=/usr/bin \ +- --libdir=/lib \ +- --libexecdir=/usr/lib \ +- --enable-lib64=yes \ +- --includedir=/usr/include \ +- --mandir=/usr/share/man \ +- --datadir=/usr/share \ +- $$LOCAL_CONFIGURE_OPTIONS + touch .census + + aclocal.m4:: diff --git a/pkgs/development/libraries/acl/builder.sh b/pkgs/development/libraries/acl/builder.sh new file mode 100644 index 000000000000..4cabc84f8289 --- /dev/null +++ b/pkgs/development/libraries/acl/builder.sh @@ -0,0 +1,12 @@ +source $stdenv/setup + +preConfigure() { + rm configure + autoconf +} + +preConfigure=preConfigure + +installFlags='install-lib install-dev' + +genericBuild diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix new file mode 100644 index 000000000000..b9992af612e7 --- /dev/null +++ b/pkgs/development/libraries/acl/default.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation { + name = "acl-2.2.45"; + + builder = ./builder.sh; + src = + fetchurl { + url = ftp://oss.sgi.com/projects/xfs/cmd_tars/acl_2.2.45-1.tar.gz; + sha256 = "1bb2k5br494yk863w27k1h8gkdkq4kzakvajhj844hl1cixhhf1a"; + }; + buildInputs = [autoconf libtool gettext attr]; + patches = [ ./acl-2.2.45-patch ]; +} diff --git a/pkgs/development/libraries/attr/builder.sh b/pkgs/development/libraries/attr/builder.sh index af71890f0c04..78f10591142e 100644 --- a/pkgs/development/libraries/attr/builder.sh +++ b/pkgs/development/libraries/attr/builder.sh @@ -6,4 +6,6 @@ preConfigure() { preConfigure=preConfigure +installFlags='install-lib install-dev' + genericBuild diff --git a/pkgs/development/libraries/audiofile/default.nix b/pkgs/development/libraries/audiofile/default.nix index a10ec7a95c3e..de02110aeeb7 100644 --- a/pkgs/development/libraries/audiofile/default.nix +++ b/pkgs/development/libraries/audiofile/default.nix @@ -1,9 +1,9 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "audiofile-0.2.3"; + name = "audiofile-0.2.6"; src = fetchurl { - url = http://www.68k.org/~michael/audiofile/audiofile-0.2.5.tar.gz; - md5 = "fd07c62a17ceafa317929e55e51e26c5"; + url = http://www.68k.org/~michael/audiofile/audiofile-0.2.6.tar.gz; + sha256 = "1a921w6jwcnkmx3vm091qrj7109jzri6kw4ygjq6ym91dssnfqab"; }; } diff --git a/pkgs/development/libraries/boehm-gc/default.nix b/pkgs/development/libraries/boehm-gc/default.nix index d46b1fe70161..ba81b16bcf6e 100644 --- a/pkgs/development/libraries/boehm-gc/default.nix +++ b/pkgs/development/libraries/boehm-gc/default.nix @@ -1,9 +1,13 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "boehm-gc-6.8"; + name = "boehm-gc-7.0"; src = fetchurl { - url = http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc6.8.tar.gz; - md5 = "418d38bd9c66398386a372ec0435250e"; + url = http://www.hpl.hp.com/personal/Hans_Boehm/gc/gc_source/gc-7.0.tar.gz; + sha256 = "0nqy0462ainp79fjmx5lgr89s2d433fggr3n9d1p09xq77lwc2nj"; + }; + meta = { + description = "A garbage collector for C and C++"; + homepage = http://www.hpl.hp.com/personal/Hans_Boehm/gc/; }; } diff --git a/pkgs/development/libraries/coredumper/default.nix b/pkgs/development/libraries/coredumper/default.nix index d6943affbeda..f62289ea1818 100644 --- a/pkgs/development/libraries/coredumper/default.nix +++ b/pkgs/development/libraries/coredumper/default.nix @@ -1,9 +1,9 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "coredumper-0.2"; + name = "coredumper-1.1"; src = fetchurl { - url = mirror://sourceforge/goog-coredumper/coredumper-0.2.tar.gz; - md5 = "024f8e4afe73c4cc4f4a0b0ef585e9b7"; + url = http://google-coredumper.googlecode.com/files/coredumper-1.1.tar.gz; + sha256 = "1phl1zg2n17rp595dyzz9iw01gfdpsdh0l6wy2hfb5shi71h63rx"; }; } diff --git a/pkgs/development/libraries/cracklib/default.nix b/pkgs/development/libraries/cracklib/default.nix index 678d595703ea..baa509eadb08 100644 --- a/pkgs/development/libraries/cracklib/default.nix +++ b/pkgs/development/libraries/cracklib/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "cracklib-2.8.9"; + name = "cracklib-2.8.12"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/cracklib/cracklib-2.8.9.tar.gz; - md5 = "9a8c9eb26b48787c84024ac779f64bb2"; + url = mirror://sourceforge/cracklib/cracklib-2.8.12.tar.gz; + sha256 = "0l9kar7h80kkvs394dyzbn02jkd8hzynh9kxyqrlacj1wp35rmah"; }; dicts = fetchurl { url = http://nix.cs.uu.nl/dist/tarballs/cracklib-words.gz; diff --git a/pkgs/development/libraries/db4/db4-4.4.nix b/pkgs/development/libraries/db4/db4-4.4.nix index 270f5359d953..2746d8127232 100644 --- a/pkgs/development/libraries/db4/db4-4.4.nix +++ b/pkgs/development/libraries/db4/db4-4.4.nix @@ -4,7 +4,10 @@ stdenv.mkDerivation ({ name = "db4-4.4.20"; builder = ./builder.sh; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/db-4.4.20.NC.tar.gz; + urls = [ + http://download.oracle.com/berkeley-db/db-4.4.20.NC.tar.gz + http://nix.cs.uu.nl/dist/tarballs/db-4.4.20.NC.tar.gz + ]; md5 = "afd9243ea353bbaa04421488d3b37900"; }; configureFlags = [ diff --git a/pkgs/development/libraries/expat/default.nix b/pkgs/development/libraries/expat/default.nix index 487538422457..cd546a58169c 100644 --- a/pkgs/development/libraries/expat/default.nix +++ b/pkgs/development/libraries/expat/default.nix @@ -1,7 +1,7 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "expat-2.0.0"; + name = "expat-2.0.1"; src = fetchurl { - url = mirror://sourceforge/expat/expat-2.0.0.tar.gz; - md5 = "d945df7f1c0868c5c73cf66ba9596f3f"; + url = mirror://sourceforge/expat/expat-2.0.1.tar.gz; + sha256 = "14sy5qx9hgjyfs743iq8ywldhp5w4n6cscqf2p4hgrw6vys60xl4"; }; } diff --git a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix index f3611afb0b63..90978eb2908b 100644 --- a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix +++ b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix @@ -5,7 +5,8 @@ stdenv.mkDerivation { src = fetchsvn { url = svn://svn.mplayerhq.hu/ffmpeg/trunk ; rev = "11164"; - sha256 = "95658455e466aeab5a302ddd6e7b2f79f620d4495012add46028a548e6c364b2"; + #sha256 = "95658455e466aeab5a302ddd6e7b2f79f620d4495012add46028a548e6c364b2"; + sha256 = "c97b0cd791f8408cfc69452ff7afbf00d34b367e493dfbcae830fba99c229189"; }; /*fetchurl { url = http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2; diff --git a/pkgs/development/libraries/giflib/default.nix b/pkgs/development/libraries/giflib/default.nix new file mode 100644 index 000000000000..35d66b3647b4 --- /dev/null +++ b/pkgs/development/libraries/giflib/default.nix @@ -0,0 +1,10 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "giflib-4.1.6"; + src = fetchurl { + url = mirror://sourceforge/giflib/giflib-4.1.6.tar.bz2; + sha256 = "1v9b7ywz7qg8hli0s9vv1b8q9xxb2xvqq2mg1zpr73xwqpcwxhg1"; + }; +} + diff --git a/pkgs/development/libraries/libungif/default.nix b/pkgs/development/libraries/giflib/libungif.nix similarity index 69% rename from pkgs/development/libraries/libungif/default.nix rename to pkgs/development/libraries/giflib/libungif.nix index b0bbb46eaf53..f3302f8f3337 100644 --- a/pkgs/development/libraries/libungif/default.nix +++ b/pkgs/development/libraries/giflib/libungif.nix @@ -3,7 +3,7 @@ stdenv.mkDerivation { name = "libungif-4.1.4"; src = fetchurl { - url = mirror://sourceforge/libungif/libungif-4.1.4.tar.gz; + url = mirror://sourceforge/giflib/libungif-4.1.4.tar.gz; md5 = "efdfcf8e32e35740288a8c5625a70ccb"; }; } diff --git a/pkgs/development/libraries/gmp/default.nix b/pkgs/development/libraries/gmp/default.nix index 364cb73bbb73..b8d915d1faca 100644 --- a/pkgs/development/libraries/gmp/default.nix +++ b/pkgs/development/libraries/gmp/default.nix @@ -1,11 +1,20 @@ {stdenv, fetchurl, m4}: stdenv.mkDerivation { - name = "gmp-4.2.1"; + name = "gmp-4.2.2"; + src = fetchurl { - url = mirror://gnu/gmp/gmp-4.2.1.tar.bz2; - md5 = "091c56e0e1cca6b09b17b69d47ef18e3"; + url = mirror://gnu/gmp/gmp-4.2.2.tar.bz2; + sha256 = "0yv593sk62ypn21gg2x570g955lmsi4i6f2bc3s43p52myn0lb1b"; }; + buildInputs = [m4]; + doCheck = true; + + meta = { + description = "A free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers"; + homepage = http://gmplib.org/; + license = "LGPL"; + }; } diff --git a/pkgs/development/libraries/libcaca/default.nix b/pkgs/development/libraries/libcaca/default.nix index 080c1efbc731..95e99710c6e0 100644 --- a/pkgs/development/libraries/libcaca/default.nix +++ b/pkgs/development/libraries/libcaca/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, ncurses}: stdenv.mkDerivation { - name = "libcaca-0.99-beta11"; + name = "libcaca-0.99-beta13b"; src = fetchurl { - url = http://libcaca.zoy.org/files/libcaca-0.99.beta11.tar.gz; - sha256 = "1kj0rkfbmq8kc3pi3p323ifx5yp9pcmbnxln7phxj5k4v7ngyld7"; + url = http://libcaca.zoy.org/files/libcaca-0.99.beta13b.tar.gz; + sha256 = "0xy8pcnljnj5la97bzbwwyzyqa7dr3v9cyw8gdjzdfgqywvac1vg"; }; configureFlags = "--disable-x11 --disable-imlib2 --disable-doc"; propagatedBuildInputs = [ncurses]; diff --git a/pkgs/development/libraries/libdv/default.nix b/pkgs/development/libraries/libdv/default.nix new file mode 100644 index 000000000000..4b0e05acf98d --- /dev/null +++ b/pkgs/development/libraries/libdv/default.nix @@ -0,0 +1,30 @@ +args: +let edf = args.lib.enableDisableFeature; in +( args.mkDerivationByConfiguration { + flagConfig = { } + # TODO! implement flags + # I want to get kino and cinelerra working. That's why I don't spend more time on this now + // edf "libtool_lock" "libtool_lock" { } #avoid locking (might break parallel builds) + // edf "asm" "asm" { } #disable use of architecture specific assembly code + // edf "sdl" "sdl" { } #enable use of SDL for display + // edf "gtk" "gtk" { } #disable use of gtk for display + // edf "xv" "xv" { } #disable use of XVideo extension for display + // edf "gprof" "gprof" { } #enable compiler options for gprof profiling + ; + + extraAttrs = co : { + name = "libdv-1.0.0"; + + src = args.fetchurl { + url = mirror://sourceforge/libdv/libdv-1.0.0.tar.gz; + sha256 = "1fl96f2xh2slkv1i1ix7kqk576a0ak1d33cylm0mbhm96d0761d3"; + }; + + meta = { + description = "software decoder for DV format video, as defined by the IEC 61834 and SMPTE 314M standards"; + homepage = http://sourceforge.net/projects/libdv/; + # you can choose one of the following licenses: + license = []; + }; + }; +} ) args diff --git a/pkgs/development/libraries/libpcap/default.nix b/pkgs/development/libraries/libpcap/default.nix index 25d1105eac63..95fbbbbfbab4 100644 --- a/pkgs/development/libraries/libpcap/default.nix +++ b/pkgs/development/libraries/libpcap/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, flex, bison}: stdenv.mkDerivation { - name = "libpcap-0.9.5"; + name = "libpcap-0.9.8"; src = fetchurl { - url = http://www.tcpdump.org/release/libpcap-0.9.5.tar.gz; - md5 = "b0626ad59004fe5767ddd2ce743a2271"; + url = http://www.tcpdump.org/release/libpcap-0.9.8.tar.gz; + sha256 = "1yb2hg8jd1bzq3lbrff1sps4757krvj2c9pm2ixn44a4vsc865f4"; }; buildInputs = [flex bison]; configureFlags = " diff --git a/pkgs/development/libraries/libpng/default.nix b/pkgs/development/libraries/libpng/default.nix index b600cf0840bc..f6252c794cec 100644 --- a/pkgs/development/libraries/libpng/default.nix +++ b/pkgs/development/libraries/libpng/default.nix @@ -3,10 +3,10 @@ assert zlib != null; stdenv.mkDerivation { - name = "libpng-1.2.18"; + name = "libpng-1.2.24"; src = fetchurl { - url = mirror://sourceforge/libpng/libpng-1.2.18.tar.bz2; - sha256 = "0qhcy8r0r8280wahs91xi4p79gm2cb021x9bcww1r5bywvwn5kkg"; + url = mirror://sourceforge/libpng/libpng-1.2.24.tar.bz2; + sha256 = "0kd0qkakc5zh2inrzw5r0h02761v1s9q223lv7za7iaxyl4byash"; }; propagatedBuildInputs = [zlib]; inherit zlib; diff --git a/pkgs/development/libraries/libraw1394/default.nix b/pkgs/development/libraries/libraw1394/default.nix new file mode 100644 index 000000000000..62398404ac24 --- /dev/null +++ b/pkgs/development/libraries/libraw1394/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "libraw1394-1.2.0"; + + src = args.fetchurl { + url = "mirror://sourceforge/libraw1394/libraw1394-1.2.0.tar.gz"; + sha256 = "1b9zqqzyz0ihyfvhn135y3wc6vmym5yz21jxj9dp0f09b96gmp0z"; + }; + + buildInputs =(with args; []); + + meta = { + description = "library providing direct access to the IEEE 1394 bus through the Linux 1394 subsystem's raw1394 user space interface"; + homepage = "http://wiki.linux1394.org/"; + license = ["GPL" "LGPL"]; + }; +} diff --git a/pkgs/development/libraries/libtheora/default.nix b/pkgs/development/libraries/libtheora/default.nix index f0c637d0f239..2a6f2254c14f 100644 --- a/pkgs/development/libraries/libtheora/default.nix +++ b/pkgs/development/libraries/libtheora/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, libogg, libvorbis}: stdenv.mkDerivation { - name = "libtheora-1.0alpha7"; + name = "libtheora-1.0beta2"; src = fetchurl { - url = http://downloads.xiph.org/releases/theora/libtheora-1.0alpha7.tar.bz2; - md5 = "1bc851e39e4b16977131d5e5f769f48b"; + url = http://downloads.xiph.org/releases/theora/libtheora-1.0beta2.tar.gz; + sha256 = "0iwwprpi4s9y37c5yvlb572wd5gb2s635pxrkz5589266g1j1dcg"; }; propagatedBuildInputs = [libogg libvorbis]; } diff --git a/pkgs/development/libraries/libvorbis/default.nix b/pkgs/development/libraries/libvorbis/default.nix index cdcee8149173..1b3a7c811465 100644 --- a/pkgs/development/libraries/libvorbis/default.nix +++ b/pkgs/development/libraries/libvorbis/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, libogg}: stdenv.mkDerivation { - name = "libvorbis-1.1.2"; + name = "libvorbis-1.2.0"; src = fetchurl { - url = http://downloads.xiph.org/releases/vorbis/libvorbis-1.1.2.tar.gz; - md5 = "37847626b8e1b53ae79a34714c7b3211"; + url = http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.bz2; + sha256 = "0nq62b8y2rhhgxxyiw6b4wchic61q5v649fdl8dd7090nxxcbx4y"; }; buildInputs = [libogg]; } diff --git a/pkgs/development/libraries/libwpd/default.nix b/pkgs/development/libraries/libwpd/default.nix index 630eb44753bb..c2b89c1361fb 100644 --- a/pkgs/development/libraries/libwpd/default.nix +++ b/pkgs/development/libraries/libwpd/default.nix @@ -1,9 +1,9 @@ args: with args; stdenv.mkDerivation { - name = "libwpd-0.8.5"; + name = "libwpd-0.8.13"; src = fetchurl { - url = mirror://sourceforge/libwpd/libwpd-0.8.5.tar.gz; - md5 = "6b679e205a2805c3d23f41c65b35e266"; + url = mirror://sourceforge/libwpd/libwpd-0.8.13.tar.gz; + sha256 = "08mb8bp0d3387l1snii4c0ighfhkby7qx2b3wymqb4a0l76rlzfn"; }; buildInputs = [pkgconfig glib libgsf libxml2 bzip2]; } diff --git a/pkgs/development/libraries/popt/popt-1.7.nix b/pkgs/development/libraries/popt/popt-1.7.nix index 1170760c828b..9ae06b0ed267 100644 --- a/pkgs/development/libraries/popt/popt-1.7.nix +++ b/pkgs/development/libraries/popt/popt-1.7.nix @@ -5,7 +5,10 @@ assert gettext != null; stdenv.mkDerivation { name = "popt-1.7"; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/popt-1.7.tar.gz; + urls = [ + ftp://distro.ibiblio.org/pub/linux/distributions/pdaxrom/src/popt-1.7.tar.gz + http://nix.cs.uu.nl/dist/tarballs/popt-1.7.tar.gz + ]; md5 = "5988e7aeb0ae4dac8d83561265984cc9"; }; buildInputs = [gettext]; diff --git a/pkgs/development/libraries/readline/readline5.nix b/pkgs/development/libraries/readline/readline5.nix index f5271f01bcc0..a0e7ffd72d25 100644 --- a/pkgs/development/libraries/readline/readline5.nix +++ b/pkgs/development/libraries/readline/readline5.nix @@ -7,4 +7,5 @@ stdenv.mkDerivation { md5 = "e39331f32ad14009b9ff49cc10c5e751"; }; propagatedBuildInputs = [ncurses]; + patches = stdenv.lib.optional stdenv.isDarwin ./shobj-darwin.patch; } diff --git a/pkgs/development/libraries/readline/shobj-darwin.patch b/pkgs/development/libraries/readline/shobj-darwin.patch new file mode 100644 index 000000000000..a9199ca3e89a --- /dev/null +++ b/pkgs/development/libraries/readline/shobj-darwin.patch @@ -0,0 +1,11 @@ +--- a/support/shobj-conf.orig 2006-04-11 06:15:43.000000000 -0700 ++++ b/support/shobj-conf 2007-11-08 01:15:43.000000000 -0800 +@@ -171,7 +171,7 @@ + SHLIB_LIBSUFF='dylib' + + case "${host_os}" in +- darwin[78]*) SHOBJ_LDFLAGS='' ++ darwin[789]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; + *) SHOBJ_LDFLAGS='-dynamic' diff --git a/pkgs/development/libraries/speex/default.nix b/pkgs/development/libraries/speex/default.nix index 556b6c19dcce..6904339a57cc 100644 --- a/pkgs/development/libraries/speex/default.nix +++ b/pkgs/development/libraries/speex/default.nix @@ -1,10 +1,10 @@ args: with args; stdenv.mkDerivation { - name = "speex-1.2beta2"; + name = "speex-1.2beta3"; src = fetchurl { - url = http://downloads.us.xiph.org/releases/speex/speex-1.2beta2.tar.gz; - sha256 = "1np34q5i7yswkgknb8pa6ngqb4l4jv84c9yqnn0215vncbl76xg5"; + url = http://downloads.us.xiph.org/releases/speex/speex-1.2beta3.tar.gz; + sha256 = "1az7kiwa8mzi1x7j01gcakx854qcbm4g67n0c4s56bvny6dn18vp"; }; buildInputs = [libogg]; } diff --git a/pkgs/development/libraries/t1lib/default.nix b/pkgs/development/libraries/t1lib/default.nix index c5b26424cdf3..a3ebe5e27ca1 100644 --- a/pkgs/development/libraries/t1lib/default.nix +++ b/pkgs/development/libraries/t1lib/default.nix @@ -1,11 +1,12 @@ -{stdenv, fetchurl, x11, libXaw}: +{stdenv, fetchurl, x11, libXaw, libXpm}: stdenv.mkDerivation { name = "t1lib-5.1.0"; src = fetchurl { - url = ftp://ftp.nluug.nl/pub/metalab/libs/graphics/t1lib-5.1.0.tar.gz; - md5 = "a05bed4aa63637052e60690ccde70421"; + url = ftp://ftp.nluug.nl/pub/metalab/libs/graphics/t1lib-5.1.1.tar.gz; + sha256 = "0r1wb94kjd8jwym9na2k2snikizrnyc4cf4mf92v89r4yy0apph8"; }; - buildInputs = [x11 libXaw]; + buildInputs = [x11 libXaw libXpm]; buildFlags = "without_doc"; } + diff --git a/pkgs/development/libraries/tk/default.nix b/pkgs/development/libraries/tk/default.nix index f36438e56d28..9e0a6b8c0dae 100644 --- a/pkgs/development/libraries/tk/default.nix +++ b/pkgs/development/libraries/tk/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, tcl, x11}: stdenv.mkDerivation { - name = "tk-8.4.13"; + name = "tk-8.4.16"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/tcl/tk8.4.13-src.tar.gz; - md5 = "0a16d4d9398e43cbb85784c85fb807a4"; + url = mirror://sourceforge/tcl/tk8.4.16-src.tar.gz; + sha256 = "0cciavzd05bpm5yfppid0s0vsf8kabwia9620vgvi26sv1gjgwhb"; }; buildInputs = [tcl x11]; inherit tcl; diff --git a/pkgs/development/tools/misc/elfutils/default.nix b/pkgs/development/tools/misc/elfutils/0.127.nix similarity index 79% rename from pkgs/development/tools/misc/elfutils/default.nix rename to pkgs/development/tools/misc/elfutils/0.127.nix index a57792d70390..2337ebbdbd08 100644 --- a/pkgs/development/tools/misc/elfutils/default.nix +++ b/pkgs/development/tools/misc/elfutils/0.127.nix @@ -1,7 +1,7 @@ -{stdenv, fetchurl}: +args: with args; stdenv.mkDerivation { - name = "elfutils-0.127"; + name = "elfutils-"+version; src = fetchurl { url = http://nix.cs.uu.nl/dist/tarballs/elfutils-0.127.tar.gz; sha256 = "12n3h5r3c24a6l2wxz0w2dqq072bvgms0dzckivrwp5vdn22lpdv"; diff --git a/pkgs/development/tools/misc/elfutils/0.131.nix b/pkgs/development/tools/misc/elfutils/0.131.nix new file mode 100644 index 000000000000..5efe046493db --- /dev/null +++ b/pkgs/development/tools/misc/elfutils/0.131.nix @@ -0,0 +1,9 @@ +args: with args; + +stdenv.mkDerivation { + name = "elfutils-"+version; + src = fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.131.orig.tar.gz; + sha256 = "0vqfjpcv81m3q0gsk78qykakhz9rbfwd65i4zsi03xr2lrk9ayll"; + }; +} diff --git a/pkgs/development/tools/misc/strace/default.nix b/pkgs/development/tools/misc/strace/default.nix index b94a313d23de..5091a715167d 100644 --- a/pkgs/development/tools/misc/strace/default.nix +++ b/pkgs/development/tools/misc/strace/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "strace-4.5.15"; + name = "strace-4.5.16"; src = fetchurl { - url = mirror://sourceforge/strace/strace-4.5.15.tar.gz; - sha256 = "07n62yv53p2hsb59srfaxb0kk8b6p6iq77drmf65pq8jpa50s9ip"; + url = mirror://sourceforge/strace/strace-4.5.16.tar.bz2; + sha256 = "15ks9i1gv7mbyiwnzbjls2xy0pyv5x4j9a5ca2x0258fq8lxwdhp"; }; } diff --git a/pkgs/development/tools/misc/swig/default.nix b/pkgs/development/tools/misc/swig/default.nix index ca6aa2d2fced..72dd19b7af8c 100644 --- a/pkgs/development/tools/misc/swig/default.nix +++ b/pkgs/development/tools/misc/swig/default.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation { builder = ./builder.sh; src = fetchurl { - url = "mirror://sourceforge/swig/swig-1.3.33.tar.gz"; + url = mirror://sourceforge/swig/swig-1.3.33.tar.gz; sha256 = "02rz31i642sbsngny7k98d9hxlkcb9snvbzlnz3sh0qiyr3ciggv"; }; diff --git a/pkgs/development/tools/misc/valgrind/default.nix b/pkgs/development/tools/misc/valgrind/default.nix index 5fb0e85dda19..7f46228304b2 100644 --- a/pkgs/development/tools/misc/valgrind/default.nix +++ b/pkgs/development/tools/misc/valgrind/default.nix @@ -1,16 +1,17 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "valgrind-3.2.3"; + name = "valgrind-3.3.0"; src = fetchurl { - url = http://valgrind.org/downloads/valgrind-3.2.3.tar.bz2; - sha256 = "0hf48y13mm1c1zg59bvkbr0lzcwng5mb33lgiv3d0gzl4w2r5jhv"; + url = http://valgrind.org/downloads/valgrind-3.3.0.tar.bz2; + sha256 = "0yllx5a2f5bx18gqz74aikr27zxwpblswn65lqvm9rbzswlq5w2s"; }; configureFlags = if stdenv.system == "x86_64-linux" then ["--enable-only64bit"] else []; meta = { + homepage = http://www.valgrind.org/; description = "Award-winning suite of tools for debugging and profiling Linux programs"; }; } diff --git a/pkgs/development/tools/parsing/alex/default.nix b/pkgs/development/tools/parsing/alex/default.nix new file mode 100644 index 000000000000..00d414d56bde --- /dev/null +++ b/pkgs/development/tools/parsing/alex/default.nix @@ -0,0 +1,23 @@ +{stdenv, fetchurl, ghc, perl}: + +stdenv.mkDerivation { + name = "alex-2.1.0"; + src = fetchurl { + url = http://www.haskell.org/alex/dist/2.1.0/alex-2.1.0.tar.gz; + sha1 = "37599b7be5249d639b3a5a3fdc61907dc4dad660"; + }; + buildInputs = [ghc perl]; + + configurePhase = " + ghc --make Setup.lhs + ./Setup configure --prefix=\"\${out}\" + "; + + buildPhase = " + ./Setup build + "; + + installPhase = " + ./Setup install + "; +} diff --git a/pkgs/development/tools/parsing/bison/bison-1.875.nix b/pkgs/development/tools/parsing/bison/bison-1.875.nix index 92aeafb335a4..6a2ae1c794d6 100644 --- a/pkgs/development/tools/parsing/bison/bison-1.875.nix +++ b/pkgs/development/tools/parsing/bison/bison-1.875.nix @@ -5,7 +5,9 @@ assert m4 != null; stdenv.mkDerivation { name = "bison-1.875"; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/bison-1.875.tar.bz2; + urls = [ http://nix.cs.uu.nl/dist/tarballs/bison-1.875.tar.bz2 + ftp://ftp.gnu.org/pub/gnu/bison/bison-1.875.tar.bz2 + ]; md5 = "b7f8027b249ebd4dd0cc948943a71af0"; }; buildInputs = [m4]; diff --git a/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix b/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix index 2d146eeca250..13bb68349790 100644 --- a/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix +++ b/pkgs/development/tools/parsing/flex/flex-2.5.4a.nix @@ -5,7 +5,7 @@ assert yacc != null; stdenv.mkDerivation { name = "flex-2.5.4a"; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/flex-2.5.4a.tar.gz; + url = mirror://sourceforge/flex/flex-2.5.4a.tar.gz; md5 = "bd8753d0b22e1f4ec87a553a73021adf"; }; buildInputs = [yacc]; diff --git a/pkgs/lib/default-unstable.nix b/pkgs/lib/default-unstable.nix index 33fb68f58578..5653508dca9a 100644 --- a/pkgs/lib/default-unstable.nix +++ b/pkgs/lib/default-unstable.nix @@ -37,6 +37,7 @@ rec { else [(head list) separator] ++ (intersperse separator (tail list)); + toList = x : if (__isList x) then x else [x]; concatStringsSep = separator: list: concatStrings (intersperse separator list); @@ -55,7 +56,7 @@ rec { # "y"] applied to some set e returns e.x.y, if it exists. The # default value is returned otherwise. # comment: I'd rename this to getAttrRec or something like that .. (has the same name as builtin.getAttr) - Marc Weber - getAttr = attrPath: default: e: + getAttr = attrPath : default : e : let { attr = head attrPath; body = @@ -64,6 +65,20 @@ rec { then getAttr (tail attrPath) default (builtins.getAttr attr e) else default; }; + #getAttr = attrPath: default: e: getAttrMap id; + + # the same as getAttr but if the element exists map the value using function f + # corresponds to the maybe function of haskell + getAttrMap = f : attrPath : default : e : + let { + attr = head attrPath; + body = + if attrPath == [] then e + else if builtins ? hasAttr && builtins.hasAttr attr e + then f (getAttr (tail attrPath) default (builtins.getAttr attr e)) + else default; + }; + # Filter a list using a predicate; that is, return a list containing @@ -116,7 +131,9 @@ rec { # Return a singleton list or an empty list, depending on a boolean # value. Useful when building lists with optional elements # (e.g. `++ optional (system == "i686-linux") flashplayer'). - optional = cond: elem: if cond then [elem] else []; + optional = cond: elem: if (cond) then [elem] else []; + + whenFlip = x : cond : if (cond) then x else ""; # Return a list of integers from `first' up to and including `last'. @@ -187,11 +204,12 @@ rec { mapRecordFlatten = f : r : map (attr: f attr (builtins.getAttr attr r) ) (attrNames r); # to be used with listToAttrs (_a_ttribute _v_alue) + # TODO should be renamed to nv because niksnut has renamed the attribute attr to name av = name : value : { inherit name value; }; # attribute set containing one attribute - avs = attr : value : listToAttrs [ (av attr value) ]; + avs = name : value : listToAttrs [ (av name value) ]; # adds / replaces an attribute of an attribute set - setAttr = set : attr : v : set // (avs attr v); + setAttr = set : name : v : set // (avs name v); id = x : x; # true if all/ at least one element(s) satisfy f @@ -203,12 +221,37 @@ rec { mergeAttrs = fold ( x : y : x // y) {}; + # Using f = a : b = b the result is similar to // + # merge attributes with custom function handling the case that the attribute + # exists in both sets + mergeAttrsWithFunc = f : set1 : set2 : + fold (n: set : if (__hasAttr n set) + then setAttr set n (f (__getAttr n set) (__getAttr n set2)) + else set ) + set1 (__attrNames set2); + + # merging two attribute set concatenating the values of same attribute names + # eg { a = 7; } { a = [ 2 3 ]; } becomes { a = [ 7 2 3 ]; } + mergeAttrsConcatenateValues = mergeAttrsWithFunc ( a : b : (toList a) ++ (toList b) ); + # returns atribute values as a list flattenAttrs = set : map ( attr : builtins.getAttr attr set) (attrNames set); mapIf = cond : f : fold ( x : l : if (cond x) then [(f x)] ++ l else l) []; # Marc 2nd proposal: (not everything has been tested in detail yet..) - + + # usage / example + # flagConfig = { + # } // (enableDisableFeature "flagName" "configure_feature" extraAttrs;) + # + # is equal to + # flagConfig = { + # flagName = { cfgOption = "--enable-configure_feature"; } // extraAttrs; + # no_flagName = { cfgOption = "--disable-configure_feature"; }; + enableDisableFeature = flagName : configure_feature : extraAttrs : + listToAttrs [ ( av flagName ({ cfgOption = "--enable-${configure_feature}"; } // extraAttrs ) ) + ( av "no_${flagName}" ({ cfgOption = "--disable-${configure_feature}"; } ) )]; + # calls chooseOptionsByFlags2 with some preprocessing # chooseOptionsByFlags2 returns an attribute set meant to be used to create new derivaitons. # see mkDerivationByConfiguration in all-packages.nix and the examples given below. @@ -266,6 +309,9 @@ rec { collectAttrs = attr : catAttrs attr flatOptions; optsConcatStrs = delimiter : attrs : concatStrings ( intersperse delimiter (flatten ( collectAttrs attrs ) ) ); + + ifStringGetArg = x : if (__isAttrs x) then x # ( TODO implement __isString ?) + else avs x (__getAttr x args); in assert ( all id ( mapRecordFlatten ( attr : r : if ( all id ( flatten (getAttr ["assertion"] [] r ) ) ) then true else throw "assertion failed flag ${attr}" ) @@ -279,13 +325,15 @@ rec { buildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) ) (flatten (catAttrs "buildInputs" flatOptions)); + propagatedBuildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) ) + (flatten (catAttrs "propagatedBuildInputs" flatOptions)); configureFlags = optsConcatStrs " " "cfgOption"; #flags = listToAttrs (map ( flag: av flag (hasAttr flag options) ) (attrNames flagConfig) ); flags_prefixed = listToAttrs (map ( flag: av ("flag_set_"+flag) (hasAttr flag options) ) (attrNames flagConfig) ); - pass = mergeAttrs (flatten (collectAttrs "pass") ); + pass = mergeAttrs ( map ifStringGetArg ( flatten (collectAttrs "pass") ) ); } # now add additional phase actions (see examples) // listToAttrs ( map ( x : av x (optsConcatStrs "\n" x) ) collectExtraPhaseActions ) ); } @@ -319,7 +367,8 @@ rec { # features: # * configure options are passed automatically # * buildInputs are collected (they are special, see the setup script) - # * they can be passed by additional name as well using pass = + # * they can be passed by additional name as well using pass = { inherit (args) python } + # ( or short (value not attrs) : pass = "python" ) # * an attribute named the same way as the flag is added indicating # true/ false (flag has been set/ not set) # * extra phase dependend commands can be added diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 3ad861ef19d1..108d62b3d8a3 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -10,6 +10,12 @@ in rec { listOfListsToAttrs = ll : builtins.listToAttrs (map (l : { name = (head l); value = (head (tail l)); }) ll); + + # Identity function. + id = x: x; + + + # !!! need documentation... innerSumArgs = f : x : y : (if y == null then (f x) else (innerSumArgs f (x // y))); sumArgs = f : innerSumArgs f {}; @@ -20,6 +26,7 @@ rec { f (tail (tail l)); pairMap = innerPairMap []; + # "Fold" a binary function `op' between successive elements of # `list' with `nul' as the starting value, i.e., `fold op nul [x_1 # x_2 ... x_n] == op x_1 (op x_2 ... (op x_n nul))'. (This is @@ -66,14 +73,12 @@ rec { # "y"] applied to some set e returns e.x.y, if it exists. The # default value is returned otherwise. getAttr = attrPath: default: e: - let { - attr = head attrPath; - body = - if attrPath == [] then e - else if builtins ? hasAttr && builtins.hasAttr attr e - then getAttr (tail attrPath) default (builtins.getAttr attr e) - else default; - }; + let attr = head attrPath; + in + if attrPath == [] then e + else if builtins ? hasAttr && builtins.hasAttr attr e + then getAttr (tail attrPath) default (builtins.getAttr attr e) + else default; # Filter a list using a predicate; that is, return a list containing @@ -96,15 +101,33 @@ rec { else head found; + # Return true iff function `pred' returns true for at least element + # of `list'. + any = pred: list: + if list == [] then false + else if pred (head list) then true + else any pred (tail list); + + + # Return true iff function `pred' returns true for all elements of + # `list'. + all = pred: list: + if list == [] then true + else if pred (head list) then all pred (tail list) + else false; + + # Return true if each element of a list is equal, false otherwise. eqLists = xs: ys: if xs == [] && ys == [] then true else if xs == [] || ys == [] then false else head xs == head ys && eqLists (tail xs) (tail ys); + # Workaround, but works in stable Nix now. eqStrings = a: b: (a+(substring 0 0 b)) == ((substring 0 0 a)+b); + # Determine whether a filename ends in the given suffix. hasSuffix = ext: fileName: let lenFileName = stringLength fileName; @@ -126,6 +149,15 @@ rec { in src: builtins.filterSource filter src; + # Get all files ending with the specified suffices from the given + # directory. E.g. `sourceFilesBySuffices ./dir [".xml" ".c"]'. + sourceFilesBySuffices = path: exts: + let filter = name: type: + let base = baseNameOf (toString name); + in type != "directory" && any (ext: hasSuffix ext base) exts; + in builtins.filterSource filter path; + + # Return a singleton list or an empty list, depending on a boolean # value. Useful when building lists with optional elements # (e.g. `++ optional (system == "i686-linux") flashplayer'). @@ -191,6 +223,19 @@ rec { in uniqList {outputList=newOutputList; inputList = (tail inputList);}; + uniqListExt = {inputList, outputList ? [], + getter ? (x : x), compare ? (x: y: x==y)}: + if (inputList == []) then outputList else + let x=head inputList; + isX = y: (compare (getter y) (getter x)); + newOutputList = outputList ++ + (if any isX outputList then [] else [x]); + in uniqListExt {outputList=newOutputList; + inputList = (tail inputList); + inherit getter compare; + }; + + condConcat = name: list: checker: if list == [] then name else diff --git a/pkgs/misc/maven/maven-2.nix b/pkgs/misc/maven/maven-2.nix new file mode 100644 index 000000000000..9f96639689b5 --- /dev/null +++ b/pkgs/misc/maven/maven-2.nix @@ -0,0 +1,23 @@ +args: +args.stdenv.mkDerivation { + name = "maven-2.0.8-bin"; + + src = args.fetchurl { + # TODO mirrors + url = http://apache.linux-mirror.org/maven/binaries/apache-maven-2.0.8-bin.tar.bz2; + sha256 = "1wasvqplw7xk04j38vsq94zbrlpdg2k4348bg8730snr6zgaasai"; + }; + + phases = "unpackPhase installPhase"; + + installPhase = " + ensureDir \$out; mv * \$out + "; + + buildInputs =(with args; []); + + meta = { + description = "Java build tool"; + homepage = "apache.org"; + }; +} diff --git a/pkgs/misc/tex/auctex/default.nix b/pkgs/misc/tex/auctex/default.nix index 1059e85cdc05..117ccf9e3dac 100644 --- a/pkgs/misc/tex/auctex/default.nix +++ b/pkgs/misc/tex/auctex/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, emacs, tetex }: - + stdenv.mkDerivation { name = "auctex-11.84"; meta = { diff --git a/pkgs/misc/xsane/default.nix b/pkgs/misc/xsane/default.nix index fd7828696d48..e389f17eb76a 100644 --- a/pkgs/misc/xsane/default.nix +++ b/pkgs/misc/xsane/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, saneBackends, saneFrontends, libX11, gtk, pkgconfig, libusb ? null}: stdenv.mkDerivation { - name = "xsane-0.97"; + name = "xsane-0.995"; src = fetchurl { - url = ftp://ftp.sane-project.org/pub/sane/xsane/xsane-0.97.tar.gz; - md5 = "3d1f889d88c3462594febd53be58c561"; + url = ftp://ftp.sane-project.org/pub/sane/xsane/xsane-0.995.tar.gz; + sha256 = "02rl5bkk3z3k6s04ki14l12vsl5jnx4mri66m1hl799m7hjl5836"; }; buildInputs = [saneBackends saneFrontends libX11 gtk pkgconfig ] ++ diff --git a/pkgs/os-specific/linux/atheros/0.9.3.3.nix b/pkgs/os-specific/linux/atheros/0.9.3.3.nix new file mode 100644 index 000000000000..d5c207bf1881 --- /dev/null +++ b/pkgs/os-specific/linux/atheros/0.9.3.3.nix @@ -0,0 +1,34 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://downloads.sourceforge.net/madwifi/madwifi-0.9.3.3.tar.bz2; + sha256 = "1dq56dx81wfhpgipbrl3gk2is3g1xvysx2pl6vxyj0dhslkcnf3y"; + }; + + buildInputs = []; + configureFlags = []; + makeFlags = [''KERNELPATH=${kernel}/lib/modules/*/build'' ''DESTDIR=$out'']; + patchAR2425x86 = ""; /*(if args ? pci001c_rev01 && args.pci001c_rev01 then + fetchurl { + url = http://madwifi.org/attachment/ticket/1679/madwifi-ng-0933.ar2425.20071130.i386.patch?format=raw; + name = "madwifi-AR2425-x86.patch"; + sha256 = "11xpx5g9w7ilagvj60prc3s8a3x0n5n4mr0b7nh0lxwrbjdgjjfg"; + } else "")*/; + } null; /* null is a terminator for sumArgs */ +let +doPatch = FullDepEntry (if patchAR2425x86 !="" then '' + cd hal + patch -Np1 -i ${patchAR2425x86} +'' else "") [minInit doUnpack]; +in +stdenv.mkDerivation rec { + name = "atheros-"+version; + builder = writeScript (name + "-builder") + (textClosure [doPatch doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Atheros WiFi driver. +"; + }; +} diff --git a/pkgs/os-specific/linux/atheros/r2756.nix b/pkgs/os-specific/linux/atheros/r2756.nix new file mode 100644 index 000000000000..8309b7858659 --- /dev/null +++ b/pkgs/os-specific/linux/atheros/r2756.nix @@ -0,0 +1,35 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://snapshots.madwifi.org/madwifi-ng/madwifi-ng-r2756-20071018.tar.gz; + sha256 = "0mm1kx9pjvvla792rv7k48yhsa0fpzvd1717g9xzazjsz2mqwzyv"; + }; + + buildInputs = []; + configureFlags = []; + makeFlags = [''KERNELPATH=${kernel}/lib/modules/*/build'' ''DESTDIR=$out'']; + patchAR2425x86 = (if args ? pci001c_rev01 && args.pci001c_rev01 then + fetchurl { + url = http://madwifi.org/attachment/ticket/1679/madwifi-ng-0933.ar2425.20071130.i386.patch?format=raw; + name = "madwifi-AR2425-x86.patch"; + sha256 = "11xpx5g9w7ilagvj60prc3s8a3x0n5n4mr0b7nh0lxwrbjdgjjfg"; + } else ""); + } null; /* null is a terminator for sumArgs */ +let +doPatch = FullDepEntry (if patchAR2425x86 !="" then '' + cd hal + patch -Np1 -i ${patchAR2425x86} + cd .. +'' else "") [minInit doUnpack]; +in +stdenv.mkDerivation rec { + name = "atheros-"+version; + builder = writeScript (name + "-builder") + (textClosure [doPatch doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Atheros WiFi driver. +"; + }; +} diff --git a/pkgs/os-specific/linux/atheros/r3122.nix b/pkgs/os-specific/linux/atheros/r3122.nix new file mode 100644 index 000000000000..c82b4021544a --- /dev/null +++ b/pkgs/os-specific/linux/atheros/r3122.nix @@ -0,0 +1,22 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://snapshots.madwifi.org/madwifi-ng/madwifi-ng-r3122-20080109.tar.gz; + sha256 = "188258c6q96n8lb57c0cqsvxp47psninirdax13w4yd07v1rymwd"; + }; + + buildInputs = []; + configureFlags = []; + makeFlags = [''KERNELPATH=${kernel}/lib/modules/*/build'' ''DESTDIR=$out'']; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "atheros-"+version; + builder = writeScript (name + "-builder") + (textClosure [doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Atheros WiFi driver. +"; + }; +} diff --git a/pkgs/os-specific/linux/bridge_utils/default.nix b/pkgs/os-specific/linux/bridge_utils/default.nix index 3fb80b7484a0..2c71f8fb0a93 100644 --- a/pkgs/os-specific/linux/bridge_utils/default.nix +++ b/pkgs/os-specific/linux/bridge_utils/default.nix @@ -3,7 +3,7 @@ args.stdenv.mkDerivation { name = "bridge-utils-1.2"; src = args.fetchurl { - url = http://mirror/sourceforge/bridge/bridge-utils-1.2.tar.gz; + url = mirror://sourceforge/bridge/bridge-utils-1.2.tar.gz; sha256 = "0jg3z51c2c34byg4zi39j9g4b66js5kanjhid77hpa0jdfmryfy9"; }; diff --git a/pkgs/os-specific/linux/dmidecode/2.9.nix b/pkgs/os-specific/linux/dmidecode/2.9.nix new file mode 100644 index 000000000000..787846465d84 --- /dev/null +++ b/pkgs/os-specific/linux/dmidecode/2.9.nix @@ -0,0 +1,22 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://download.savannah.gnu.org/releases/dmidecode/dmidecode-2.9.tar.bz2; + sha256 = "05g0ln400fhqjspg9h4x0a1dvmwiyjq5rk9q9kimxvywbg1b53l8"; + }; + + buildInputs = []; + configureFlags = []; + makeFlags = "prefix=\$out"; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "dmidecode-"+version; + builder = writeScript (name + "-builder") + (textClosure [ doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Tool to decode Desktop Management Interface and SBIOS data. +"; + }; +} diff --git a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix new file mode 100644 index 000000000000..c991389633ca --- /dev/null +++ b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix @@ -0,0 +1,27 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://fy.chalmers.se/~appro/linux/DVD+RW/tools/dvd+rw-tools-7.0.tar.gz; + sha256 = "08hljn2vfn794dfrfpp3m245dbpb6nhk40igfpqm6wg9qimc9zy9"; + }; + + buildInputs = [cdrkit m4]; + configureFlags = []; + makeFlags = [" prefix=\$out "]; + } null; /* null is a terminator for sumArgs */ +let + preBuild = FullDepEntry (" + sed -e 's@/usr/local@'\$out'@g' -i Makefile.m4 Makefile + ") [minInit doUnpack]; +in +stdenv.mkDerivation rec { + name = "dvd+rw-tools-"+version; + builder = writeScript (name + "-builder") + (textClosure [preBuild doMakeInstall doForceShare doPropagate]); + meta = { + description = " + DVD+RW tools. +"; + }; +} diff --git a/pkgs/os-specific/linux/fuse/builder.sh b/pkgs/os-specific/linux/fuse/builder.sh index 5f0d53954e7e..c843ae6183b2 100644 --- a/pkgs/os-specific/linux/fuse/builder.sh +++ b/pkgs/os-specific/linux/fuse/builder.sh @@ -13,4 +13,6 @@ export UDEV_RULES_PATH=$out/etc/udev/rules.d # $PATH. export NIX_CFLAGS_COMPILE="-DFUSERMOUNT_DIR=\"/no-such-path\"" +export preBuild="sed -e 's@/bin/@$utillinux/bin/@g' -i lib/mount_util.c"; + genericBuild diff --git a/pkgs/os-specific/linux/fuse/default.nix b/pkgs/os-specific/linux/fuse/default.nix index 28052d7ceb37..7e3bb66b16ff 100644 --- a/pkgs/os-specific/linux/fuse/default.nix +++ b/pkgs/os-specific/linux/fuse/default.nix @@ -1,11 +1,19 @@ -{stdenv, fetchurl}: +args: with args; stdenv.mkDerivation { - name = "fuse-2.6.5"; + name = "fuse-2.7.2"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/fuse/fuse-2.6.5.tar.gz; - sha256 = "0901hrhi1z6dwlgvgn75cg2268wvaz53x0knn7jplk6acwir54db"; + url = mirror://sourceforge/fuse/fuse-2.7.2.tar.gz; + sha256 = "1zxssdiirf19mihbnxpy0kiix35d4256b9lani7qwqi7m940jfgv"; + }; + configureFlags = [ "--disable-kernel-module"]; + buildInputs = [ utillinux ]; + + inherit utillinux; + + meta = { + homepage = http://fuse.sourceforge.net/; + description = "Kernel module and library that allows filesystems to be implemented in user space"; }; - configureFlags = [ "--disable-kernel-module" ]; } diff --git a/pkgs/os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch b/pkgs/os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch deleted file mode 100644 index 15dc34680d05..000000000000 --- a/pkgs/os-specific/linux/kernel/2.6.22-paravirt-nvidia.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -rc linux-2.6.22.1/arch/i386/kernel/paravirt.c linux-2.6.22.1-para/arch/i386/kernel/paravirt.c -*** linux-2.6.22.1/arch/i386/kernel/paravirt.c 2007-07-20 16:19:35.000000000 +0200 ---- linux-2.6.22.1-para/arch/i386/kernel/paravirt.c 2007-07-20 16:20:00.000000000 +0200 -*************** -*** 344,347 **** - .activate_mm = paravirt_nop, - }; - -! EXPORT_SYMBOL(paravirt_ops); ---- 344,347 ---- - .activate_mm = paravirt_nop, - }; - -! EXPORT_SYMBOL_GPL(paravirt_ops); diff --git a/pkgs/os-specific/linux/kernel/2.6.23.12.nix b/pkgs/os-specific/linux/kernel/2.6.23.12.nix new file mode 100644 index 000000000000..a0e3bcbf2d8f --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.23.12.nix @@ -0,0 +1,38 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.23.12"; + src_hash = { sha256 = "1x3ngnhyxy9rlaislm2hzijaaa2mp8v930dyp8zmmhjdpzjf3w8k"; }; + + systemPatches = [ + { # resume with resume=swap:/dev/xx + name = "tux on ice"; # (swsusp2) + patch = args.fetchurl { + url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc3-for-2.6.23.9.patch.bz2"; + sha256 = "16f61cn0mdi7yklhdx4isi7c85843fzxq2cifd05cpsl6x6ilrfk"; + }; + extraConfig = " + CONFIG_SUSPEND2=y + CONFIG_SUSPEND2_FILE=y + CONFIG_SUSPEND2_SWAP=y + CONFIG_CRYPTO_LZF=y + "; + } + { name = "fbsplash-0.9.2-r5-2.6.21"; + patch = args.fetchurl { + url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; + sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + + config = with args; + if config != null then config else + if userModeLinux then ./config-2.6.23-uml else + if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) diff --git a/pkgs/os-specific/linux/kernel/config-2.6.23-i686-smp b/pkgs/os-specific/linux/kernel/config-2.6.23-i686-smp index 5e4729304107..86fbe30c5212 100644 --- a/pkgs/os-specific/linux/kernel/config-2.6.23-i686-smp +++ b/pkgs/os-specific/linux/kernel/config-2.6.23-i686-smp @@ -119,7 +119,7 @@ CONFIG_X86_PC=y # CONFIG_X86_GENERICARCH is not set # CONFIG_X86_ES7000 is not set CONFIG_PARAVIRT=y -CONFIG_XEN=y +# CONFIG_XEN is not set CONFIG_VMI=y # CONFIG_M386 is not set # CONFIG_M486 is not set diff --git a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix new file mode 100644 index 000000000000..3aa2731ac3fb --- /dev/null +++ b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix @@ -0,0 +1,30 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz; + sha256 = "03svg2x52ziglf9r9irf6ziiz8iwa731fk1mdskwdip5jxbyy6jl"; + }; + buildInputs = []; + configureFlags = [''--prefix=$out'' ''--kernel-path=$(ls -d ${kernel}/lib/modules/*/build)'']; + } null; /* null is a terminator for sumArgs */ +let + debugStep = FullDepEntry ('' + cat config-host.mak + '') [minInit]; + preConfigure = FullDepEntry ('' + sed -e '/kernel_path=/akernel_path=$out$kernel_path' -i install.sh + sed -e '/depmod/d' -i install.sh + cat install.sh + '') [minInit doUnpack]; +in +stdenv.mkDerivation rec { + name = "kqemu-"+version; + builder = writeScript (name + "-builder") + (textClosure [preConfigure doConfigure debugStep doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Kernel module for Qemu acceleration +"; + }; +} diff --git a/pkgs/os-specific/linux/module-init-tools/aggregator.nix b/pkgs/os-specific/linux/module-init-tools/aggregator.nix new file mode 100644 index 000000000000..09866f414e5d --- /dev/null +++ b/pkgs/os-specific/linux/module-init-tools/aggregator.nix @@ -0,0 +1,34 @@ +args : with args; + with builderDefs { + addSbinPath = true; + src = ""; + buildInputs = [lndir module_init_tools]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +let + +doCollect = FullDepEntry ('' +ensureDir $out/ +cd $out/ +for i in $moduleSources; do + lndir $i/ +done +rm -rf nix-support +cd lib/modules/ +rm */modules.* +MODULE_DIR=$PWD/ depmod -a +'') [minInit addInputs defEnsureDir]; +in +stdenv.mkDerivation rec { + name = "module-aggregator"; + inherit moduleSources; + builder = writeScript (name + "-builder") + (textClosure [doCollect doForceShare doPropagate]); + meta = { + description = " + A directory to hold all the modules, including those + built separately from kernel. Earlier directories in + moduleSources have higher priority. +"; + }; +} diff --git a/pkgs/os-specific/linux/nvidia/builder.sh b/pkgs/os-specific/linux/nvidia/builder.sh index 9ec3428e8780..4ef8c551d1c8 100755 --- a/pkgs/os-specific/linux/nvidia/builder.sh +++ b/pkgs/os-specific/linux/nvidia/builder.sh @@ -1,101 +1,76 @@ source $stdenv/setup -echo "Building linux driver against kernel: " $kernelOutPath; -echo "LD_LIBRARY_PATH: $LD_LIBRARY_PATH" - -echo $nvidiasrc -cp $nvidiasrc . -chmod 755 ./*-NVIDIA* -./*-NVIDIA* -x -cd NVIDIA*/ - -cd usr/src/nv/ -pwd -P - -#Clean up -#make clean - -#Create the module -echo $out -mkdir $out -make SYSSRC=$kernelOutPath/lib/modules/2.*/build/ module - -#go to the usr dir of the nvidia package -cd ../../ - -echo "Copying all files to " $out/lib"" - -cp -R * $out - -#add extra symlinks in $out -ln -snf $out/lib/libGLcore.so.$versionNumber $out/lib/libGLcore.so -ln -snf $out/lib/libGLcore.so.$versionNumber $out/lib/libGLcore.so.1 -ln -snf $out/lib/libGL.so.$versionNumber $out/lib/libGL.so -ln -snf $out/lib/libGL.so.$versionNumber $out/lib/libGL.so.1 -ln -snf $out/lib/libnvidia-cfg.so.$versionNumber $out/lib/libnvidia-cfg.so.1 -ln -snf $out/lib/libnvidia-tls.so.$versionNumber $out/lib/libnvidia-tls.so.1 -ln -snf $out/X11R6/lib/libXvMCNVIDIA.so.$versionNumber $out/X11R6/lib/libXvMCNVIDIA.so.1 -ln -snf $out/X11R6/lib/libXvMCNVIDIA.so.$versionNumber $out/lib/libXvMCNVIDIA.so.1 -ln -snf $out/X11R6/lib/modules/libnvidia-wfb.so.$versionNumber $out/X11R6/lib/modules/libnvidia-wfb.so.1 -ln -snf $out/X11R6/lib/modules/libnvidia-wfb.so.$versionNumber $out/lib/libnvidia-wfb.so.1 -ln -snf $out/X11R6/lib/modules/extensions/libglx.so.$versionNumber $out/X11R6/lib/modules/extensions/libglx.so.1 -ln -snf $out/X11R6/lib/modules/extensions/libglx.so.$versionNumber $out/lib/libglx.so.1 - -#TODO: patchelf binaries ! -#patchelf --set-interpreter ${path glibc TODO /lib/ld-linux.so.2 $out/bin/.... - -#from dep on xorg-sys-opengl: add symlinks in /usr/lib/ (especially libGL.so.1) to the real location... - -ensureDir /usr/lib/ -cd /usr/lib -ln -snf $out/lib/libGLcore.so.$versionNumber libGLcore.so.1 -ln -snf $out/lib/libGL.la libGL.la -ln -snf $out/lib/libGL.so.$versionNumber libGL.so.1 -ln -snf $out/lib/libnvidia-cfg.so.$versionNumber libnvidia-cfg.so.1 -ln -snf $out/lib/libnvidia-tls.so.$versionNumber libnvidia-tls.so.1 -ensureDir /usr/lib/tls/ -ln -snf $out/lib/tls/libnvidia-tls.so.$versionNumber /usr/lib/tls/libnvidia-tls.so.1 -ln -snf $out/X11R6/lib/modules/extensions/libglx.so.$versionNumber libglx.so.1 -ln -snf $out/X11R6/lib/modules/libnvidia-wfb.so.$versionNumber libnvidia-wfb.so.1 -ln -snf $out/X11R6/lib/modules/drivers/nvidia_drv.so nvidia_drv.so -ln -snf $out/X11R6/lib/libXvMCNVIDIA.so.$versionNumber libXvMCNVIDIA.so.1 -ln -snf $out/bin/tls_test_dso.so tls_test_dso.so -ln -snf $out/src/nv/nvidia.ko nvidia.ko - -echo "YOU! need to add symlinks as root to the libs in the current $xorgOutPath/lib/xorg/modules/extensions/ (especially libglx.so)" -rwlibs=" -cd $xorgOutPath/lib/xorg/modules/extensions/; -mv libglx.so libglx.so.org; -mv libglx.la libglx.la.org; -mv libGLcore.so libGLcore.so.org; -ln -snf /usr/lib/libglx.so.1 libglx.so; -ln -snf /usr/lib/libglx.so.1 libglx.so.1; -ln -snf /usr/lib/libGLcore.so.1 libGLcore.so; -ln -snf /usr/lib/libGLcore.so.1 libGLcore.so.1; -ln -snf /usr/lib/libGL.so.1 libGL.so; -ln -snf /usr/lib/libGL.so.1 libGL.so.1; -ln -snf /usr/lib/libglx.la libglx.la; -ln -snf /usr/lib/libglx.so.1 libglx.so; -ln -snf /usr/lib/libglx.so.1 libglx.so.1; -ln -snf /usr/lib/nvidia_drv.so nvidia_drv.so; - -# rm /var/run/opengl-driver; -ln -snf /var/run/opengl-driver $out; - -kerneldrvnvpath=$kernelOutPath/lib/modules/*-default/kernel/drivers/video/nvidia; -#echo TODO kerneldrvnvpath: \$kerneldrvnvpath -ln -snf $out/src/nv/nvidia.ko \$kerneldrvnvpath/nvidia.ko; -" -#TODO ADD ln -sf is sometimes not strong enough ... - -rwlibsfile="$out/bin/nvidia-rewriteLibs.sh" - -echo "--------------------------------------------------------" -echo "YOU MUST RUN $rwlibsfile as ROOT after this installation" -echo "--------------------------------------------------------" -echo $rwlibs > $rwlibsfile -chmod 755 $rwlibsfile - -sleep 5 +dontPatchELF=1 # must keep libXv, $out in RPATH +unpackFile() { + sh $src -x +} + + +buildPhase=myBuildPhase +myBuildPhase() { + echo "Building linux driver against kernel: " $kernel; + + cd usr/src/nv/ + + # Workaround: get it to build on kernels that have CONFIG_XEN set. + # Disable the test, apply a patch to disable the Xen functionality. + #substituteInPlace Makefile.kbuild --replace xen_sanity_check fnord + #patch -p1 < $xenPatch + + # Create the module. + sysSrc=$(echo $kernel/lib/modules/2.*/build/) + unset src # used by the nv makefile + make SYSSRC=$sysSrc module + cd ../../.. +} + + +installPhase=myInstallPhase +myInstallPhase() { + + # Install the kernel module. + ensureDir $out/lib + cp usr/src/nv/nvidia.ko $out/lib/ + + # Install libGL and friends. + cp -prd usr/lib/* usr/X11R6/lib/libXv* $out/lib/ + + ln -snf libGLcore.so.$versionNumber $out/lib/libGLcore.so + ln -snf libGLcore.so.$versionNumber $out/lib/libGLcore.so.1 + ln -snf libGL.so.$versionNumber $out/lib/libGL.so + ln -snf libGL.so.$versionNumber $out/lib/libGL.so.1 + ln -snf libnvidia-cfg.so.$versionNumber $out/lib/libnvidia-cfg.so.1 + ln -snf libnvidia-tls.so.$versionNumber $out/lib/libnvidia-tls.so.1 + ln -snf libnvidia-tls.so.$versionNumber $out/lib/tls/libnvidia-tls.so.1 + ln -snf libXvMCNVIDIA.so.$versionNumber $out/lib/libXvMCNVIDIA_dynamic.so.1 + ln -snf libcuda.so.$versionNumber $out/lib/libcuda.so.1 + + # Install the X driver. + ensureDir $out/lib/xorg/modules + cp -prd usr/X11R6/lib/modules/* $out/lib/xorg/modules/ + + ln -snf libnvidia-wfb.so.$versionNumber $out/lib/xorg/modules/libnvidia-wfb.so.1 + ln -snf libglx.so.$versionNumber $out/lib/xorg/modules/extensions/libglx.so + + # Install the programs. + ensureDir $out/bin + + fullPath=$out/lib + for i in $libPath; do + fullPath=$fullPath:$i/lib + done + + for i in nvidia-settings nvidia-xconfig; do + cp usr/bin/$i $out/bin/$i + patchelf --interpreter "$(cat $NIX_GCC/nix-support/dynamic-linker)" \ + --set-rpath $fullPath $out/bin/$i + done + + # Header files etc. + cp -prd usr/include usr/share $out +} + + +genericBuild diff --git a/pkgs/os-specific/linux/nvidia/default.nix b/pkgs/os-specific/linux/nvidia/default.nix index d4f1c8ac9bc9..11906b606583 100644 --- a/pkgs/os-specific/linux/nvidia/default.nix +++ b/pkgs/os-specific/linux/nvidia/default.nix @@ -1,46 +1,26 @@ -{ stdenv -, fetchurl - -, kernel -, coreutils -, xorg_server - -#deps -,libXext, libX11 - -}: +{stdenv, fetchurl, kernel, xlibs, gtkLibs}: let - versionNumber = "100.14.19"; #important ! to also update this if the sources are updated, this is used as follows: extensions/libglx.so.$versionNumber + versionNumber = "169.07"; in + stdenv.mkDerivation { name = "nvidiaDrivers-" + versionNumber; builder = ./builder.sh; - - nvidiasrc = fetchurl { #we cannot use $src since this variable is also used in the nvidia sources - #url = http://www.denbreejen.net/public/nixos/NVIDIA-Linux-x86-1.0-9755-pkg1.run; - #sha256 = "1985373866b1dcae80f3da66dbbbd3c28ad76e75a620865be321ee870ad9d1ea"; - #url = http://us.download.nvidia.com/XFree86/Linux-x86/100.14.11/NVIDIA-Linux-x86-100.14.11-pkg1.run; - #sha256 = "8665370e590328cc5bf3d13737739a80dacbfb6844436cab03c992e84bf16b0c"; - url = http://us.download.nvidia.com/XFree86/Linux-x86/100.14.19/NVIDIA-Linux-x86-100.14.19-pkg1.run; - sha256 = "4dc97d8ff5340954f3cd446093636261c54b147e9721eb295574207d79e9a7e7"; + src = fetchurl { + url = "http://us.download.nvidia.com/XFree86/Linux-x86/${versionNumber}/NVIDIA-Linux-x86-${versionNumber}-pkg1.run"; + sha256 = "1q4sbwcf24rvx72sj19pvhsmg5n8v2rfzsxf56mfxjbiy2jhjbaa"; }; - inherit versionNumber; - kernelOutPath = kernel.outPath; - xorgOutPath = xorg_server.outPath; + #xenPatch = ./nvidia-2.6.24-xen.patch; - buildInputs = [ - libXext libX11 + inherit versionNumber kernel; + + libPath = [ + gtkLibs.gtk gtkLibs.atk gtkLibs.pango gtkLibs.glib + xlibs.libXext xlibs.libX11 xlibs.libXv ]; - - propagatedBuildInputs = [ - libX11 libXext - ]; - - NIX_LDFLAGS = "-rpath ${libX11}/lib -rpath ${libXext}/lib"; - LD_LIBRARY_PATH = "${libX11}/lib:${libXext}/lib/"; } diff --git a/pkgs/os-specific/linux/sdparm/1.02.nix b/pkgs/os-specific/linux/sdparm/1.02.nix new file mode 100644 index 000000000000..0616ac83563b --- /dev/null +++ b/pkgs/os-specific/linux/sdparm/1.02.nix @@ -0,0 +1,21 @@ +args : with args; + with builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://sg.torque.net/sg/p/sdparm-1.02.tgz; + sha256 = "13acyg6r65gypdprjhfkmvaykgfcj1riwpnycpvv9znzgq9fxsiv"; + }; + + buildInputs = []; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ +stdenv.mkDerivation rec { + name = "sdparm-"+version; + builder = writeScript (name + "-builder") + (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + SCSI parameters utility. +"; + }; +} diff --git a/pkgs/os-specific/linux/squashfs/default.nix b/pkgs/os-specific/linux/squashfs/default.nix index 1f2bde7feac7..00ce8fba56e8 100644 --- a/pkgs/os-specific/linux/squashfs/default.nix +++ b/pkgs/os-specific/linux/squashfs/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, zlib}: stdenv.mkDerivation { - name = "squashfs-3.1-r2"; + name = "squashfs-3.3"; builder = ./builder.sh; src = fetchurl { - url = mirror://sourceforge/squashfs/squashfs3.1-r2.tar.gz; - md5 = "c252e5286b142afa54ca49829c51a33f"; + url = mirror://sourceforge/squashfs/squashfs3.3.tgz; + sha256 = "1j55m26nyvlbld4yxad0r6s1f4rdw9yg89y2gv93ihkx3rx048w4"; }; buildInputs = [zlib]; } diff --git a/pkgs/servers/x11/xorg/default.nix b/pkgs/servers/x11/xorg/default.nix index bad391330a5d..0fc27acbc1f6 100644 --- a/pkgs/servers/x11/xorg/default.nix +++ b/pkgs/servers/x11/xorg/default.nix @@ -1986,8 +1986,8 @@ rec { url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/xf86-video-ati-6.6.3.tar.bz2; sha256 = "102p6nz1jvd3pgbl83a4zi99smydqr6il61r33l0lqmi3yg452nh"; }; - buildInputs = [pkgconfig fontsproto libdrm randrproto renderproto videoproto xextproto xf86driproto xf86miscproto xineramaproto xorgserver xproto ]; - }) // {inherit fontsproto libdrm randrproto renderproto videoproto xextproto xf86driproto xf86miscproto xineramaproto xorgserver xproto ;}; + buildInputs = [pkgconfig fontsproto libdrm randrproto renderproto videoproto xextproto xf86driproto xf86miscproto xineramaproto xorgserver xproto mesaHeaders glproto ]; + }) // {inherit fontsproto libdrm randrproto renderproto videoproto xextproto xf86driproto xf86miscproto xineramaproto xorgserver xproto mesaHeaders glproto;}; xf86videochips = (stdenv.mkDerivation { name = "xf86-video-chips-1.1.1"; diff --git a/pkgs/shells/tcsh/default.nix b/pkgs/shells/tcsh/default.nix index cd374289d543..f0ef071bb56c 100644 --- a/pkgs/shells/tcsh/default.nix +++ b/pkgs/shells/tcsh/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, ncurses}: stdenv.mkDerivation { - name = "tcsh-6.14.00"; + name = "tcsh-6.15.00"; src = fetchurl { - url = ftp://ftp.gw.com/pub/unix/tcsh/tcsh-6.14.00.tar.gz; - md5 = "353d1bb7d2741bf8de602c7b6f0efd79"; + url = ftp://ftp.funet.fi/pub/unix/shells/tcsh/tcsh-6.15.00.tar.gz; + sha256 = "1p5chgvj87m2dv4ci9qf4i81gav0lzr7rkcm320sj62z09ckxa6w"; }; buildInputs = [ncurses]; } diff --git a/pkgs/tools/X11/xlaunch/default.nix b/pkgs/tools/X11/xlaunch/default.nix new file mode 100644 index 000000000000..89c94ffd515a --- /dev/null +++ b/pkgs/tools/X11/xlaunch/default.nix @@ -0,0 +1,48 @@ +args: with args; +stdenv.mkDerivation { + name = "xlaunch"; + inherit xorgserver; + buildCommand = " + cat << EOF > realizeuid.c + #include + #include + #include + int main(int argc, char ** argv, char ** envp) + { + uid_t a,b,c; + int i; + char *nargv[10000]; + char arg1 [10]; + nargv[0]=argv[0]; + for (i=1; i<=argc; i++){ + nargv[i+1]=argv[i]; + } + nargv[1]=arg1; + getresuid (&a,&b,&c); + snprintf(arg1,8,\"%d\",a); + setresuid(c,c,c); + execve(\"\$out/libexec/xlaunch\", nargv, envp); + } +EOF + mkdir -p \$out/bin + mkdir -p \$out/libexec + gcc realizeuid.c -o \$out/bin/xlaunch + echo '#! ${stdenv.shell} + USER=\$(egrep '\\''^[-a-z0-9A-Z_]*:[^:]*:'\\''\$1'\\'':'\\'' /etc/passwd | sed -e '\\''s/:.*//'\\'' ) + shift + case \"\$1\" in + :*) export _display=\"\$1\"; + shift + esac + _display=\${_display:-:0} + _display=\${_display#:} + echo Using :\$_display + XCMD=\"\$(egrep \"^env\" /etc/event.d/xserver | sed -e \"s/env/ export /\" | sed -e '\\''s/#.*//'\\'' ; echo export _XARGS_=\\\$\\( grep xserver_arguments \\\$SLIM_CFGFILE \\| sed -e s/xserver_arguments// \\| sed -e s/:0/:\${_display}/ \\| sed -e s/vt7/vt\$((7+_display))/ \\) ; echo ${xorgserver}/bin/X \\\$_XARGS_ )\" + echo \"\$XCMD\" + echo \"\$XCMD\" | bash & + while ! test -e /tmp/.X11-unix/X\$_display &>/dev/null ; do sleep 0.5; done + su -l \${USER:-identityless-shelter} -c \"DISPLAY=:\$_display \$*\"; + ' >\$out/libexec/xlaunch + chmod a+x \$out/libexec/xlaunch + "; +} diff --git a/pkgs/tools/archivers/cabextract/default.nix b/pkgs/tools/archivers/cabextract/default.nix index e7f9a5a5da07..a87c02c7d045 100644 --- a/pkgs/tools/archivers/cabextract/default.nix +++ b/pkgs/tools/archivers/cabextract/default.nix @@ -3,7 +3,7 @@ stdenv.mkDerivation { name = "cabextract-1.2"; src = fetchurl { - url = http://www.kyz.uklinux.net/downloads/cabextract-1.2.tar.gz; - md5 = "dc421a690648b503265c82ade84e143e"; + url = http://www.cabextract.org.uk/cabextract-1.2.tar.gz; + sha256 = "1sr5f7qicj5q2h5m4wbmfcaaqxg5zkl5vkxlhyc11spwfh58d75f"; }; } diff --git a/pkgs/tools/archivers/zip/default.nix b/pkgs/tools/archivers/zip/default.nix index 51a1b618e023..f3fb96ae1e55 100644 --- a/pkgs/tools/archivers/zip/default.nix +++ b/pkgs/tools/archivers/zip/default.nix @@ -2,7 +2,7 @@ name = "zip-2.32"; builder = ./builder.sh; src = fetchurl { - url = http://ftp.info-zip.org/pub/infozip/src/zip232.tar.gz; + url = ftp://ftp.info-zip.org/pub/infozip/src/zip232.tgz; md5 = "8a4da4460386e324debe97f3b7fe4d96"; }; } diff --git a/pkgs/tools/graphics/exif/default.nix b/pkgs/tools/graphics/exif/default.nix index aa4d82468c30..94bf2e2cb0db 100644 --- a/pkgs/tools/graphics/exif/default.nix +++ b/pkgs/tools/graphics/exif/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, pkgconfig, libexif, popt}: stdenv.mkDerivation { - name = "exif-0.6.9"; + name = "exif-0.6.15"; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/exif-0.6.9.tar.gz; - md5 = "555029098386fa677c461eb249d852d7"; + url = mirror://sourceforge/libexif/exif-0.6.15.tar.bz2; + sha256 = "19kxl72l1iqq747k58rir7v4ld1676j3dmjdc1pik9hjlgdb1yj1"; }; buildInputs = [pkgconfig libexif popt]; diff --git a/pkgs/tools/graphics/graphviz/default.nix b/pkgs/tools/graphics/graphviz/default.nix index b424672ed41a..abde6da66d6e 100644 --- a/pkgs/tools/graphics/graphviz/default.nix +++ b/pkgs/tools/graphics/graphviz/default.nix @@ -3,11 +3,11 @@ assert libpng != null && libjpeg != null && expat != null; stdenv.mkDerivation { - name = "graphviz-2.12"; + name = "graphviz-2.16.1"; src = fetchurl { - url = http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.12.tar.gz; - md5 = "e5547bc0ec47943c72f5c3e2b5dff58f"; + url = http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.16.1.tar.gz; + sha256 = "1lan1hyar0xbqvnkcmlcvv02g8zfpk94gk04y4sik5irpa2s3h9j"; }; buildInputs = [x11 libpng libjpeg expat libXaw yacc libtool]; @@ -19,5 +19,10 @@ stdenv.mkDerivation { "--with-expatincludedir=${expat}/include" "--with-expatlibdir=${expat}/lib" ] - ++ (if x11 == null then ["--without-x"] else []); + ++ stdenv.lib.optional (x11 == null) "--without-x"; + + meta = { + description = "A program for visualising graphs"; + homepage = http://www.graphviz.org/; + }; } diff --git a/pkgs/tools/hddtemp/default.nix b/pkgs/tools/hddtemp/default.nix new file mode 100644 index 000000000000..0bb512874743 --- /dev/null +++ b/pkgs/tools/hddtemp/default.nix @@ -0,0 +1,27 @@ +args: +args.stdenv.mkDerivation { + name = "hddtemp-0.3-beta15"; + + db = args.fetchurl{ + url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp.db; + sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya"; + }; + src = args.fetchurl { + url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp-0.3-beta15.tar.bz2; + sha256 = "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1"; + }; + + configurePhase = " + ensureDir \$out/nix-support + cp \$db \$out/nix-support/hddtemp.db + ./configure --prefix=\$out --with-db-path=\$out/nix-support/hddtemp.db + "; + + buildInputs =(with args; []); + + meta = { + description = "shows the harddisk temperature"; + homepage = https://savannah.nongnu.org/projects/hddtemp/; + license = "GPL2"; + }; +} diff --git a/pkgs/tools/misc/file/default.nix b/pkgs/tools/misc/file/default.nix index d7e31e9cf32e..cf4919d3c8f9 100644 --- a/pkgs/tools/misc/file/default.nix +++ b/pkgs/tools/misc/file/default.nix @@ -1,9 +1,14 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "file-4.17"; + name = "file-4.23"; src = fetchurl { - url = ftp://ftp.astron.com/pub/file/file-4.17.tar.gz; - md5 = "50919c65e0181423d66bb25d7fe7b0fd"; + url = ftp://ftp.astron.com/pub/file/file-4.23.tar.gz; + sha256 = "0iyiyzcs88k6r881l11zrg86ys3rnwjyh1bgx7hnfyjv8zk9db9g"; + }; + + meta = { + description = "A program that shows the type of files"; + homepage = ftp://ftp.astron.com/pub/file; }; } diff --git a/pkgs/tools/misc/grub/default.nix b/pkgs/tools/misc/grub/default.nix index 0a406f72b46d..1b7f052dfdf3 100644 --- a/pkgs/tools/misc/grub/default.nix +++ b/pkgs/tools/misc/grub/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl}: +{stdenv, fetchurl, autoconf, automake}: if stdenv.system == "x86_64-linux" then abort "Grub doesn't build on x86_64-linux. You should use the build for i686-linux instead." @@ -6,8 +6,27 @@ else stdenv.mkDerivation { name = "grub-0.97"; + src = fetchurl { url = ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz; md5 = "cd3f3eb54446be6003156158d51f4884"; }; + + patches = [ + # Patch to add primitive splash screen support (not the fancy SUSE gfxmenu stuff). + # With this you can set splashimage=foo.xpm.gz in menu.lst to get + # a 640x480, 14-colour background. + (fetchurl { + url = "http://cvs.archlinux.org/cgi-bin/viewcvs.cgi/*checkout*/system/grub-gfx/grub-0.97-graphics.patch?rev=HEAD&cvsroot=AUR&only_with_tag=CURRENT&content-type=text/plain"; + sha256 = "0m6min9cbj71kvp0kxkxdq8dx2dwm3dj0rd5sjz5xdl13ihaj5hy"; + }) + ]; + + # Autoconf/automake required for the splashimage patch. + buildInputs = [autoconf automake]; + + preConfigure = '' + autoreconf + ''; + } diff --git a/pkgs/tools/misc/less/default.nix b/pkgs/tools/misc/less/default.nix index ad7fe970d310..f4a7bc0cf5dc 100644 --- a/pkgs/tools/misc/less/default.nix +++ b/pkgs/tools/misc/less/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, ncurses}: stdenv.mkDerivation { - name = "less-394"; + name = "less-418"; src = fetchurl { - url = http://www.greenwoodsoftware.com/less/less-394.tar.gz; - md5 = "a9f072ccefa0d315b325f3e9cdbd4b97"; + url = http://www.greenwoodsoftware.com/less/less-418.tar.gz; + sha256 = "1d03n4wx8y1gmf2m8yawzg6ixmfrixcai5l14p9pj8q13gbgqcpm"; }; buildInputs = [ncurses]; diff --git a/pkgs/tools/misc/memtest86/default.nix b/pkgs/tools/misc/memtest86/default.nix new file mode 100644 index 000000000000..32f2094b44cc --- /dev/null +++ b/pkgs/tools/misc/memtest86/default.nix @@ -0,0 +1,26 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "memtest86+-1.70"; + + src = fetchurl { + url = http://www.memtest.org/download/1.70/memtest86+-1.70.tar.gz; + sha256 = "1swj4hc764qwb3j80kvvb4qg5maq9dp8pxzy9jkk187jf92j8vfw"; + }; + + preBuild = '' + # Really dirty hack to get Memtest to build without needing a Glibc + # with 32-bit libraries and headers. + if test "$system" = x86_64-linux; then + mkdir gnu + touch gnu/stubs-32.h + fi + ''; + + NIX_CFLAGS_COMPILE = "-I."; + + installPhase = '' + ensureDir $out + cp memtest.bin $out/ + ''; +} diff --git a/pkgs/tools/misc/psmisc/default.nix b/pkgs/tools/misc/psmisc/default.nix new file mode 100644 index 000000000000..64985a8638cf --- /dev/null +++ b/pkgs/tools/misc/psmisc/default.nix @@ -0,0 +1,15 @@ +{stdenv, fetchurl, ncurses}: + +stdenv.mkDerivation { + name = "psmisc-22.6"; + src = fetchurl { + url = mirror://sourceforge/psmisc/psmisc-22.6.tar.gz; + sha256 = "0qlx4rdcj3igk67gzmdbyy6f54h4c5ya17gw0pkxdcwlgj4q2g51"; + }; + buildInputs = [ncurses]; + + meta = { + homepage = http://psmisc.sourceforge.net/; + description = "A set of small useful utilities that use the proc filesystem (such as fuser, killall and pstree)"; + }; +} diff --git a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix index 146d55e90c6f..411906e45ba2 100644 --- a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix +++ b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix @@ -22,7 +22,9 @@ let build = FullDepEntry (" sed -e '/install:/a\\\tmkdir -p '\$out'/share' -i Makefile make mkdir -p \$out/bin - echo 'dropdb relfs_\$1 ; + echo ' + createuser -A -D \$1 + dropdb relfs_\$1 ; rm -rf /tmp/relfs-\$1-tmp; mkdir /tmp/relfs-\$1-tmp; USER=\$1 relfs -f -s /tmp/relfs-raskin-tmp & diff --git a/pkgs/tools/networking/curl/connect-timeout.patch b/pkgs/tools/networking/curl/connect-timeout.patch new file mode 100644 index 000000000000..829c724c30e1 --- /dev/null +++ b/pkgs/tools/networking/curl/connect-timeout.patch @@ -0,0 +1,156 @@ +diff -rc curl-7.17.1-orig/lib/connect.c curl-7.17.1/lib/connect.c +*** curl-7.17.1-orig/lib/connect.c 2007-10-22 16:30:17.000000000 +0200 +--- curl-7.17.1/lib/connect.c 2007-12-19 18:30:32.000000000 +0100 +*************** +*** 99,105 **** + singleipconnect(struct connectdata *conn, + const Curl_addrinfo *ai, /* start connecting to this */ + long timeout_ms, +! bool *connected); + + /* + * Curl_nonblock() set the given socket to either blocking or non-blocking +--- 99,106 ---- + singleipconnect(struct connectdata *conn, + const Curl_addrinfo *ai, /* start connecting to this */ + long timeout_ms, +! bool *connected, +! bool *timed_out); + + /* + * Curl_nonblock() set the given socket to either blocking or non-blocking +*************** +*** 492,497 **** +--- 493,499 ---- + { + curl_socket_t sockfd; + Curl_addrinfo *ai; ++ bool timed_out; + + /* first close the failed socket */ + sclose(conn->sock[sockindex]); +*************** +*** 505,511 **** + ai = conn->ip_addr->ai_next; + + while (ai) { +! sockfd = singleipconnect(conn, ai, 0L, connected); + if(sockfd != CURL_SOCKET_BAD) { + /* store the new socket descriptor */ + conn->sock[sockindex] = sockfd; +--- 507,513 ---- + ai = conn->ip_addr->ai_next; + + while (ai) { +! sockfd = singleipconnect(conn, ai, 0L, connected, &timed_out); + if(sockfd != CURL_SOCKET_BAD) { + /* store the new socket descriptor */ + conn->sock[sockindex] = sockfd; +*************** +*** 669,675 **** + singleipconnect(struct connectdata *conn, + const Curl_addrinfo *ai, + long timeout_ms, +! bool *connected) + { + char addr_buf[128]; + int rc; +--- 671,678 ---- + singleipconnect(struct connectdata *conn, + const Curl_addrinfo *ai, + long timeout_ms, +! bool *connected, +! bool *timed_out) + { + char addr_buf[128]; + int rc; +*************** +*** 689,694 **** +--- 692,699 ---- + struct curl_sockaddr *addr=(struct curl_sockaddr*)&addr_storage; + const void *iptoprint; + ++ *timed_out = FALSE; ++ + addr->family=ai->ai_family; + addr->socktype=conn->socktype; + addr->protocol=ai->ai_protocol; +*************** +*** 790,797 **** + infof(data, "connected\n"); + return sockfd; + } +! else if(WAITCONN_TIMEOUT == rc) + infof(data, "Timeout\n"); + else { + data->state.os_errno = error; + infof(data, "%s\n", Curl_strerror(conn, error)); +--- 795,804 ---- + infof(data, "connected\n"); + return sockfd; + } +! else if(WAITCONN_TIMEOUT == rc) { +! *timed_out = TRUE; + infof(data, "Timeout\n"); ++ } + else { + data->state.os_errno = error; + infof(data, "%s\n", Curl_strerror(conn, error)); +*************** +*** 822,829 **** + Curl_addrinfo *ai; + Curl_addrinfo *curr_addr; + int timeout_set = 0; + +- struct timeval after; + struct timeval before = Curl_tvnow(); + + /************************************************************* +--- 829,836 ---- + Curl_addrinfo *ai; + Curl_addrinfo *curr_addr; + int timeout_set = 0; ++ bool timed_out; + + struct timeval before = Curl_tvnow(); + + /************************************************************* +*************** +*** 891,909 **** + curr_addr = curr_addr->ai_next, aliasindex++) { + + /* start connecting to the IP curr_addr points to */ +! sockfd = singleipconnect(conn, curr_addr, timeout_per_addr, connected); + + if(sockfd != CURL_SOCKET_BAD) + break; + +! /* get a new timeout for next attempt */ +! after = Curl_tvnow(); +! timeout_ms -= Curl_tvdiff(after, before); +! if(timeout_ms < 0) { + failf(data, "connect() timed out!"); + return CURLE_OPERATION_TIMEDOUT; + } +- before = after; + } /* end of connect-to-each-address loop */ + + if (sockfd == CURL_SOCKET_BAD) { +--- 898,914 ---- + curr_addr = curr_addr->ai_next, aliasindex++) { + + /* start connecting to the IP curr_addr points to */ +! sockfd = singleipconnect(conn, curr_addr, timeout_per_addr, connected, &timed_out); + + if(sockfd != CURL_SOCKET_BAD) + break; + +! /* if this is the last address and it timed out, propagate the +! timeout to the caller */ +! if(!curr_addr->ai_next && timed_out) { + failf(data, "connect() timed out!"); + return CURLE_OPERATION_TIMEDOUT; + } + } /* end of connect-to-each-address loop */ + + if (sockfd == CURL_SOCKET_BAD) { diff --git a/pkgs/tools/networking/curl/default.nix b/pkgs/tools/networking/curl/default.nix index 21866f02bc8a..7f3488b2f355 100644 --- a/pkgs/tools/networking/curl/default.nix +++ b/pkgs/tools/networking/curl/default.nix @@ -4,10 +4,10 @@ assert zlibSupport -> zlib != null; assert sslSupport -> openssl != null; stdenv.mkDerivation { - name = "curl-7.16.2"; + name = "curl-7.17.1"; src = fetchurl { - url = http://curl.haxx.se/download/curl-7.16.2.tar.bz2; - sha256 = "18mzp56y8qhlvi27av7866mvsiyiigb7c5qdppjr8qizsj0kx0rf"; + url = http://curl.haxx.se/download/curl-7.17.1.tar.bz2; + sha256 = "0yz50r75jhfr2ya6wqi6n90bn4ij30299pjglmlckzq6jp28wrkz"; }; buildInputs = stdenv.lib.optional zlibSupport zlib ++ @@ -19,4 +19,15 @@ stdenv.mkDerivation { CXX = "g++"; CXXCPP = "g++ -E"; inherit sslSupport openssl; + + patches = [ + /* Fixes broken retry support when a timeout is used. The + select() system call (used to wait for the connection to come + up) can return slightly before the computed deadline (a few + milliseconds). Curl will think the problem is something else, + proceed with the next IP address (which usually doesn't exist), + then barf with a CURLE_COULDNT_CONNECT error, which is + considered non-transient so it won't retry. */ + ./connect-timeout.patch + ]; } diff --git a/pkgs/tools/networking/p2p/bit-tornado/default.nix b/pkgs/tools/networking/p2p/bit-tornado/default.nix index 75e06f7ca2f8..d8b5d2bb015b 100644 --- a/pkgs/tools/networking/p2p/bit-tornado/default.nix +++ b/pkgs/tools/networking/p2p/bit-tornado/default.nix @@ -13,7 +13,9 @@ stdenv.mkDerivation { installPhase = "python setup.py install --prefix=$out ;"+ " echo 'export PYTHONPATH=$PYTHONPATH:'$out'/lib/python2.4/site-packages:"+ wxPython26+"/lib/python2.4/site-packages:"+ - wxPython26+"/lib/python2.4/site-packages/wx-2.6-gtk2-unicode; "+ + "'$out'/lib/python2.5/site-packages:"+ + wxPython26+"/lib/python2.4/site-packages/wx-2.6-gtk2-unicode:"+ + wxPython26+"/lib/python2.5/site-packages/wx-2.6-gtk2-unicode; "+ "python `which btdownloadgui.py` --ipv6_enabled 1 --ipv6_binds_v4 0 \"$@\";' >"+ "$out/bin/bittornado ; chmod a+rx $out/bin/bittornado;"; diff --git a/pkgs/tools/networking/sshfs-fuse/default.nix b/pkgs/tools/networking/sshfs-fuse/default.nix index 29a74aed7a18..e528f68af019 100644 --- a/pkgs/tools/networking/sshfs-fuse/default.nix +++ b/pkgs/tools/networking/sshfs-fuse/default.nix @@ -1,10 +1,15 @@ {stdenv, fetchurl, pkgconfig, glib, fuse}: stdenv.mkDerivation { - name = "sshfs-fuse-1.7"; + name = "sshfs-fuse-1.9"; src = fetchurl { - url = mirror://sourceforge/fuse/sshfs-fuse-1.7.tar.gz; - md5 = "e91a2fed1da952a375798408dc6e41a0"; + url = mirror://sourceforge/fuse/sshfs-fuse-1.9.tar.gz; + sha256 = "10ishsghdwd6a1cd36gp26qpch6z8d6wjs7aw8vs0ffnvrs4hdza"; }; buildInputs = [pkgconfig glib fuse]; + + meta = { + homepage = http://fuse.sourceforge.net/sshfs.html; + description = "FUSE-based filesystem that allows remote filesystems to be mounted over SSH"; + }; } diff --git a/pkgs/tools/networking/tcpdump/default.nix b/pkgs/tools/networking/tcpdump/default.nix index f47ca7a965c6..82d8641f60be 100644 --- a/pkgs/tools/networking/tcpdump/default.nix +++ b/pkgs/tools/networking/tcpdump/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, libpcap}: stdenv.mkDerivation { - name = "tcpdump-3.9.5"; + name = "tcpdump-3.9.8"; src = fetchurl { - url = http://www.tcpdump.org/release/tcpdump-3.9.5.tar.gz; - md5 = "2135e7b1f09af0eaf66d2af822bed44a"; + url = http://www.tcpdump.org/release/tcpdump-3.9.8.tar.gz; + sha256 = "16fjm1ih56mwqniffp63adbxwfj5n10x1a7l22j3cx683pmwh293"; }; buildInputs = [libpcap]; } diff --git a/pkgs/tools/package-management/nix/default.nix b/pkgs/tools/package-management/nix/default.nix index 55c20a4b8379..128bc23dd4b8 100644 --- a/pkgs/tools/package-management/nix/default.nix +++ b/pkgs/tools/package-management/nix/default.nix @@ -1,17 +1,17 @@ -{ stdenv, fetchurl, aterm, db4, perl, curl, bzip2 +{ stdenv, fetchurl, aterm, db4, perl, curl, bzip2, openssl ? null , storeDir ? "/nix/store" , stateDir ? "/nix/var" }: stdenv.mkDerivation { - name = "nix-0.10.1"; + name = "nix-0.11"; src = fetchurl { - url = http://nix.cs.uu.nl/dist/nix/nix-0.10.1/nix-0.10.1.tar.bz2; - md5 = "22dc0c024ca5bb477da0b38ba834dbf2"; + url = http://nix.cs.uu.nl/dist/nix/nix-0.11/nix-0.11.tar.bz2; + md5 = "890c25ac0005ff466683869efc288b67"; }; - buildInputs = [perl curl]; + buildInputs = [perl curl openssl]; configureFlags = " --with-store-dir=${storeDir} --localstatedir=${stateDir} diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index 30d0b8f345eb..51bcb9ef298a 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -3,14 +3,14 @@ , stateDir ? "/nix/var" }: -let version = "0.11pre9718"; in +let version = "0.12pre10069"; in stdenv.mkDerivation { name = "nix-${version}"; src = fetchurl { url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2"; - md5 = "cae130dcc51a30eff34fc194e17891f2"; + md5 = "bf05ebe9463f0453beae2c43f05ac13d"; }; buildInputs = [perl curl openssl]; diff --git a/pkgs/tools/security/gnupg/default.nix b/pkgs/tools/security/gnupg/default.nix index 95555c2e11c7..dd522fe1d96c 100644 --- a/pkgs/tools/security/gnupg/default.nix +++ b/pkgs/tools/security/gnupg/default.nix @@ -7,15 +7,20 @@ }: stdenv.mkDerivation { - name = "gnupg-1.4.7"; + name = "gnupg-1.4.8"; builder = ./builder.sh; src = fetchurl { - url = ftp://ftp.surfnet.nl/pub/security/gnupg/gnupg/gnupg-1.4.7.tar.bz2; - sha256 = "13a6qrgswbrfj3z5hcjx62ahraj4j16cpssgxlkwlqiz35yqplb9"; + url = ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/gnupg-1.4.8.tar.bz2; + sha1 = "4b63267358e5c70f05b48e27d6877bad2636cabd"; }; buildInputs = [readline]; idea = if ideaSupport then fetchurl { url = http://nix.cs.uu.nl/dist/tarballs/idea.c.gz; md5 = "9dc3bc086824a8c7a331f35e09a3e57f"; } else null; + + meta = { + description = "A free implementation of the OpenPGP standard for encrypting and signing data"; + homepage = http://www.gnupg.org/; + }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index edb774fd96b7..10bf6ee2323e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -295,8 +295,10 @@ rec { writeText = name: text: runCommand name {inherit text;} "echo -n \"$text\" > $out"; writeScript = name: text: runCommand name {inherit text;} "echo -n \"$text\" > $out; chmod +x $out"; - + stdenvNewSetupScript = stdenv; + + writeScriptBin = name: text: runCommand name {inherit text;} "mkdir -p \$out/bin; echo -n \"\$text\" > \$out/bin/\$name ; chmod +x \$out/bin/\$name"; substituteAll = import ../build-support/substitute/substitute-all.nix { inherit stdenv; @@ -523,7 +525,7 @@ rec { (import ./all-packages.nix {system = "i686-linux";}).grub else import ../tools/misc/grub { - inherit fetchurl stdenv; + inherit fetchurl stdenv autoconf automake; }; gtkgnutella = import ../tools/networking/p2p/gtk-gnutella { @@ -536,6 +538,10 @@ rec { inherit fetchurl stdenv; }); + hddtemp = import ../tools/hddtemp { + inherit fetchurl stdenv; + }; + hevea = import ../tools/typesetting/hevea { inherit fetchurl stdenv ocaml; }; @@ -589,6 +595,10 @@ rec { inherit fetchurl stdenv db4 groff; }; + memtest86 = import ../tools/misc/memtest86 { + inherit fetchurl stdenv; + }; + mjpegtools = import ../tools/video/mjpegtools { inherit fetchurl stdenv libjpeg; inherit (xlibs) libX11; @@ -653,6 +663,10 @@ rec { inherit (xlibs) libX11; }; + psmisc = import ../tools/misc/psmisc { + inherit stdenv fetchurl ncurses; + }; + pwgen = import ../tools/security/pwgen { inherit stdenv fetchurl; }; @@ -847,7 +861,7 @@ rec { })); bashInteractive = appendToName "interactive" (import ../shells/bash { - inherit fetchurl stdenv ncurses; + inherit fetchurl ncurses stdenv; bison = bison23; interactive = true; }); @@ -1017,12 +1031,11 @@ rec { ghc = ghc661; - ghc68 = lowPrio (import ../development/compilers/ghc-6.8 { - inherit fetchurl stdenv readline perl gmp ncurses pkgconfig; - inherit (gtkLibs) gtk; + ghc68 = import ../development/compilers/ghc-6.8 { + inherit fetchurl stdenv readline perl gmp ncurses; m4 = gnum4; ghc = ghcboot; - }); + }; ghc661 = import ../development/compilers/ghc-6.6.1 { inherit fetchurl stdenv readline perl gmp ncurses; @@ -1238,6 +1251,7 @@ rec { lib = lib_unstable; inherit fetchurl flex bison apacheHttpd; # gettext; inherit libxml2; + flags = [ "xdebug" "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ]; }; python = getVersion "python" python_alts; @@ -1383,10 +1397,15 @@ rec { inherit fetchurl stdenv replace; }; - elfutils = import ../development/tools/misc/elfutils { - inherit fetchurl stdenv; + elfutilsFun = lib.sumArgs + (selectVersion ../development/tools/misc/elfutils) { + inherit fetchurl stdenv; }; + elfutils = elfutilsFun { + version = "0.131"; + } null; + epm = import ../development/tools/misc/epm { inherit fetchurl stdenv rpm; }; @@ -1467,8 +1486,8 @@ rec { }; ltrace = import ../development/tools/misc/ltrace { - inherit fetchurl stdenv builderDefs stringsWithDeps lib - elfutils; + inherit fetchurl stdenv builderDefs stringsWithDeps lib; + elfutils = elfutilsFun {version = "0.127";} null; }; mk = import ../development/tools/build-managers/mk { @@ -1563,6 +1582,10 @@ rec { inherit fetchurl stdenv ncurses; }; + acl = import ../development/libraries/acl { + inherit stdenv fetchurl autoconf libtool gettext attr; + }; + /* agg = import ../development/libraries/agg { inherit fetchurl stdenv autoconf automake libtool pkgconfig; @@ -1586,6 +1609,14 @@ rec { inherit (gnome) glib; }; + aspell = import ../development/libraries/aspell { + inherit fetchurl stdenv perl; + }; + + aspellDicts = recurseIntoAttrs (import ../development/libraries/aspell/dictionaries.nix { + inherit fetchurl stdenv aspell which; + }); + aterm = lowPrio (import ../development/libraries/aterm { inherit fetchurl stdenv; }); @@ -1598,14 +1629,10 @@ rec { inherit fetchurl stdenv; }; - aspell = import ../development/libraries/aspell { - inherit fetchurl stdenv perl; + attr = import ../development/libraries/attr { + inherit stdenv fetchurl autoconf libtool gettext; }; - aspellDicts = recurseIntoAttrs (import ../development/libraries/aspell/dictionaries.nix { - inherit fetchurl stdenv aspell which; - }); - audiofile = import ../development/libraries/audiofile { inherit fetchurl stdenv; }; @@ -1997,6 +2024,10 @@ rec { inherit sqlite mysql; } null; + libdv = import ../development/libraries/libdv { + lib = lib_unstable; + inherit fetchurl stdenv mkDerivationByConfiguration; + }; libdrm = import ../development/libraries/libdrm { inherit fetchurl stdenv; @@ -2123,7 +2154,11 @@ rec { inherit fetchurl stdenv zlib libjpeg; }; - libungif = import ../development/libraries/libungif { + giflib = import ../development/libraries/giflib { + inherit fetchurl stdenv; + }; + + libungif = import ../development/libraries/giflib/libungif.nix { inherit fetchurl stdenv; }; @@ -2367,7 +2402,7 @@ rec { t1lib = import ../development/libraries/t1lib { inherit fetchurl stdenv x11; - inherit (xlibs) libXaw; + inherit (xlibs) libXaw libXpm; }; taglib = import ../development/libraries/taglib { @@ -2934,6 +2969,17 @@ rec { inherit fetchurl stdenv; }; + atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros) { + inherit fetchurl stdenv builderDefs; + }; + + atherosVersion = "r3122"; + + atherosFunCurrent = theKernel: (atherosFun { + version = atherosVersion; + kernel = theKernel; + } null); + bridge_utils = import ../os-specific/linux/bridge_utils { inherit fetchurl stdenv autoconf automake; }; @@ -2955,6 +3001,14 @@ rec { static = true; })); + dmidecodeFun = lib.sumArgs (selectVersion ../os-specific/linux/dmidecode) { + inherit fetchurl stdenv builderDefs; + }; + + dmidecode = dmidecodeFun { + version = "2.9"; + } null; + dietlibc = import ../os-specific/linux/dietlibc { inherit fetchurl glibc; # Dietlibc 0.30 doesn't compile on PPC with GCC 4.1, bus GCC 3.4 works. @@ -2984,7 +3038,7 @@ rec { }; fuse = import ../os-specific/linux/fuse { - inherit fetchurl stdenv; + inherit fetchurl stdenv utillinux; }; genext2fs = import ../os-specific/linux/genext2fs { @@ -3088,6 +3142,11 @@ rec { libselinux = import ../os-specific/linux/libselinux { inherit fetchurl stdenv libsepol; }; + + libraw1394 = import ../development/libraries/libraw1394 { + inherit fetchurl stdenv; + }; + libsexy = import ../development/libraries/libsexy { inherit stdenv fetchurl pkgconfig libxml2; @@ -3178,6 +3237,13 @@ rec { inherit fetchurl stdenv; }; + module_aggregation = moduleSources: + import ../os-specific/linux/module-init-tools/aggregator.nix { + inherit fetchurl stdenv module_init_tools moduleSources + builderDefs; + inherit (xorg) lndir; + }; + modutils = import ../os-specific/linux/modutils { inherit fetchurl bison flex; stdenv = overrideGCC stdenv gcc34; @@ -3195,9 +3261,7 @@ rec { }; nvidiaDrivers = import ../os-specific/linux/nvidia { - inherit stdenv fetchurl kernel coreutils; - xorg_server = xorg.xorgserver; - inherit (xlibs) libX11 libXext; + inherit stdenv fetchurl kernel xlibs gtkLibs; }; gw6c = import ../os-specific/linux/gw6c { @@ -3260,6 +3324,14 @@ rec { inherit fetchurl stdenv; }; + sdparmFun = lib.sumArgs (selectVersion ../os-specific/linux/sdparm) { + inherit fetchurl stdenv builderDefs; + }; + + sdparm = sdparmFun { + version = "1.02"; + } null; + shadowutils = import ../os-specific/linux/shadow { inherit fetchurl stdenv; }; @@ -3365,6 +3437,11 @@ rec { inherit fetchurl stdenv cabextract; }; + wrapFonts = paths : ((import ../data/fonts/fontWrap) { + inherit fetchurl stdenv builderDefs paths; + inherit (xorg) mkfontdir mkfontscale; + }); + docbook5 = import ../data/sgml+xml/schemas/docbook-5.0 { inherit fetchurl stdenv; }; @@ -3635,6 +3712,14 @@ rec { inherit fetchurl stdenv qt4 djvulibre; }; + dvdplusrwtoolsFun = lib.sumArgs (selectVersion ../os-specific/linux/dvd+rw-tools) { + inherit fetchurl stdenv builderDefs cdrkit m4; + }; + + dvdplusrwtools = dvdplusrwtoolsFun { + version = "7.0"; + } null; + eclipse = plugins: import ../applications/editors/eclipse { inherit fetchurl stdenv makeWrapper jdk; @@ -3725,7 +3810,25 @@ rec { #enableOfficialBranding = true; }); - firefox3b1Wrapper = wrapFirefox firefox3b1 ""; + firefox3b2 = lowPrio (import ../applications/networking/browsers/firefox3b1/3b2.nix { + inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo + python curl coreutils dbus dbus_glib freetype fontconfig; + inherit (gtkLibs) gtk pango; + inherit (gnome) libIDL; + inherit (xlibs) libXi libX11 libXrender libXft libXt; + #enableOfficialBranding = true; + }); + + firefox3b1Bin = lowPrio (import ../applications/networking/browsers/firefox3b1/binary.nix { + inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo + python curl coreutils freetype fontconfig; + inherit (gtkLibs) gtk atk pango glib; + inherit (gnome) libIDL; + inherit (xlibs) libXi libX11 libXrender libXft libXt; + }); + + firefox3b1Wrapper = lowPrio (wrapFirefox firefox3b1 ""); + firefox3b1BinWrapper = lowPrio (wrapFirefox firefox3b1Bin ""); flac = import ../applications/audio/flac { inherit fetchurl stdenv libogg; @@ -3746,6 +3849,12 @@ rec { inherit fetchurl stdenv; }; + freemind = import ../applications/misc/freemind { + inherit fetchurl stdenv ant; + jdk = jdk; + jre = jdk; + }; + fspot = import ../applications/graphics/f-spot { inherit fetchurl stdenv perl perlXMLParser pkgconfig mono libexif libjpeg sqlite lcms libgphoto2 monoDLLFixer; @@ -3829,7 +3938,7 @@ rec { }; imagemagickFun = lib.sumArgs (import ../applications/graphics/ImageMagick) { - inherit stdenv fetchurl; + inherit stdenv fetchurl libtool; }; imagemagick = imagemagickFun { @@ -4024,7 +4133,7 @@ rec { }; pinfo = import ../applications/misc/pinfo { - inherit fetchurl stdenv ncurses; + inherit fetchurl stdenv ncurses readline; }; # perhaps there are better apps for this task? It's how I had configured my preivous system. @@ -4042,6 +4151,28 @@ rec { python = builtins.getAttr "2.5" python_alts; }; + qemuFun = lib.sumArgs (selectVersion ../applications/virtualization/qemu ) { + inherit fetchurl; + stdenv = overrideGCC stdenv gcc34; + builderDefs = builderDefs { + stdenv = (overrideGCC stdenv gcc34)//{gcc=gcc34;}; + }; + inherit SDL zlib which; + }; + + qemu = qemuFun { + version = "0.9.0"; + } null; + + qemuImageFun = lib.sumArgs + (selectVersion ../applications/virtualization/qemu/linux-img ) { + inherit builderDefs fetchurl stdenv; + }; + + qemuImage = qemuImageFun { + version = "0.2"; + } null; + ratpoison = import ../applications/window-managers/ratpoison { inherit fetchurl stdenv fontconfig readline; inherit (xlibs) libX11 inputproto libXt libXpm libXft @@ -4164,6 +4295,13 @@ rec { inherit (xlibs) xextproto libXtst inputproto; }; + /* does'nt work yet i686-linux only (32bit version) + teamspeak_client = import ../applications/networking/instant-messengers/teamspeak/client.nix { + inherit fetchurl stdenv; + inherit glibc x11; + }; + */ + thunderbird = import ../applications/networking/mailreaders/thunderbird-2.x { inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo; inherit (gtkLibs) gtk; @@ -4197,13 +4335,44 @@ rec { })); vimHugeX = import ../applications/editors/vim { - inherit fetchurl stdenv lib ncurses pkgconfig; + inherit fetchurl stdenv lib ncurses pkgconfig + perl python tcl; inherit (xlibs) libX11 libXext libSM libXpm libXt libXaw libXau; inherit (gtkLibs) glib gtk; - flags = ["hugeFeatures" "gtkGUI" "x11Support"]; + + # Looks like python and perl can conflict + flags = ["hugeFeatures" "gtkGUI" "x11Support" + /*"perlSupport"*/ "pythonSupport" "tclSupport"]; }; + vim_configurable = import ../applications/editors/vim/configurable.nix { + inherit fetchurl stdenv ncurses pkgconfig mkDerivationByConfiguration; + inherit (xlibs) libX11 libXext libSM libXpm + libXt libXaw libXau libXmu; + inherit (gtkLibs) glib gtk; + lib = lib_unstable; + features = "huge"; # one of tiny, small, normal, big or huge + # optional features by passing + # python + # TODO mzschemeinterp perlinterp + inherit python /*x11*/; + + # optional features by flags + flags = [ "X11" ]; # only flag "X11" by now + }; + + /*virtualboxFun = lib.sumArgs (selectVersion ../applications/virtualization/virtualbox) { + inherit stdenv fetchurl builderDefs bridge_utils umlutilities kernelHeaders + wine jre libxslt SDL qt3 openssl zlib; + inherit (xorg) libXcursor; + inherit (gnome) libIDL; + }; + + virtualbox = virtualboxFun { + version = "1.5.2"; + } null;*/ + vlc = import ../applications/video/vlc { inherit fetchurl stdenv perl x11 wxGTK zlib mpeg2dec a52dec libmad ffmpeg @@ -4304,6 +4473,11 @@ rec { inherit (xlibs) libXaw xproto libXt libX11 libSM libICE; }; + xlaunch = import ../tools/X11/xlaunch { + inherit stdenv; + inherit (xorg) xorgserver; + }; + xmacro = import ../tools/X11/xmacro { inherit fetchurl stdenv; inherit (xlibs) libX11 libXi @@ -4315,6 +4489,7 @@ rec { inherit (xlibs) libX11 libXi imake libXau; inherit (xorg) xauth; }; + xvidcap = import ../applications/video/xvidcap { inherit fetchurl stdenv perl perlXMLParser pkgconfig; inherit (gtkLibs) gtk; @@ -4322,6 +4497,24 @@ rec { inherit (xlibs) libXmu libXext; }; + # doesn't compile yet - in case someone else want's to continue .. + /* + qgis_svn = import ../applications/misc/qgis_svn { + lib = lib_unstable; + inherit mkDerivationByConfiguration fetchsvn flex + ncurses fetchurl perl cmake gdal geos proj x11 + gsl libpng zlib stdenv + sqlite glibc fontconfig freetype; + inherit (xlibs) libSM libXcursor libXinerama libXrandr libXrender; + inherit (xorg) libICE; + qt = qt4; + bison = bison23; + + # optional features + # grass = "not yet supported" # cmake -D WITH_GRASS=TRUE and GRASS_PREFX=.. + }; + */ + zapping = import ../applications/video/zapping { inherit fetchurl stdenv pkgconfig perl python gettext zvbi libjpeg libpng x11 @@ -4550,10 +4743,16 @@ rec { inherit stdenv fetchurl jdk; }; + # don't have time for the source build right now + # maven2 + mvn_bin = import ../misc/maven/maven-2.nix { + inherit fetchurl stdenv; + }; + nix = import ../tools/package-management/nix { - inherit fetchurl stdenv perl curl bzip2; + inherit fetchurl stdenv perl curl bzip2 openssl; aterm = aterm242fixes; - db4 = db44; + db4 = db45; }; nixStatic = import ../tools/package-management/nix-static { diff --git a/pkgs/top-level/build-for-release.nix b/pkgs/top-level/build-for-release.nix index 18a7074d843e..6b9d91981fde 100644 --- a/pkgs/top-level/build-for-release.nix +++ b/pkgs/top-level/build-for-release.nix @@ -4,7 +4,6 @@ let { i686LinuxPkgs = {inherit (allPackages {system = "i686-linux";}) aterm - gcc nixUnstable pan subversion @@ -27,6 +26,5 @@ let { body = [ i686LinuxPkgs x86_64LinuxPkgs -# powerpcLinuxPkgs ]; } diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index df7df3e71a0f..aa53c9ba1575 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -3,7 +3,7 @@ args: with args; with stringsWithDeps; with lib; { inherit writeScript; - + addSbinPath = getAttr ["addSbinPath"] false args; forceShare = if args ? forceShare then args.forceShare else ["man" "doc" "info"]; @@ -13,6 +13,11 @@ args: with args; with stringsWithDeps; with lib; else if (hasSuffixHack ".tar.bz2" s) || (hasSuffixHack ".tbz2" s) then "tbz2" else if (hasSuffixHack ".zip" s) || (hasSuffixHack ".ZIP" s) then "zip" else if (hasSuffixHack "-cvs-export" s) then "cvs-dir" + else if (hasSuffixHack ".nar.bz2" s) then "narbz2" + + # Last block - for single files!! It should be always after .tar.* + else if (hasSuffixHack ".bz2" s) then "plain-bz2" + else (abort "unknown archive type : ${s}")); defAddToSearchPath = FullDepEntry (" @@ -130,6 +135,11 @@ args: with args; with stringsWithDeps; with lib; fail fi " else "") + +(if addSbinPath then " + if test -d \$1/sbin; then + export _PATH=\$_PATH\${_PATH:+:}\$1/sbin + fi + " else "") +" if test -d \$1/bin; then export _PATH=\$_PATH\${_PATH:+:}\$1/bin @@ -180,6 +190,14 @@ args: with args; with stringsWithDeps; with lib; cp -r '${s}' . cd \$(basename ${s}) chmod u+rwX -R . + " else if (archiveType s) == "narbz2" then " + bzip2 <${s} | nix-store --restore \$PWD/\$(basename ${s} .nar.bz2) + cd \$(basename ${s} .nar.bz2) + " else if (archiveType s) == "plain-bz2" then " + mkdir \$PWD/\$(basename ${s} .bz2) + NAME=\$(basename ${s} .bz2) + bzip2 -d <${s} > \$PWD/\$(basename ${s} .bz2)/\${NAME#*-} + cd \$(basename ${s} .bz2) " else (abort "unknown archive type : ${s}"))+ (if args ? goSrcDir then args.goSrcDir else "") ) [minInit]; @@ -296,4 +314,7 @@ args: with args; with stringsWithDeps; with lib; makeFlags = if useConfig then autoMakeFlags else getAttr ["makeFlags"] "" args; inherit lib; + + surroundWithCommands = x : before : after : {deps=x.deps; text = before + "\n" + + x.text + "\n" + after ;}; }) // args From 6fb8f2c6b7a18a884d6327c591f9bf8d6f46cc1a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:41:20 +0000 Subject: [PATCH 106/320] redland: upgraded to 1.0.7 svn path=/nixpkgs/branches/stdenv-updates/; revision=10146 --- pkgs/development/libraries/redland/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/redland/default.nix b/pkgs/development/libraries/redland/default.nix index 1e657991eabb..37d899feb70b 100644 --- a/pkgs/development/libraries/redland/default.nix +++ b/pkgs/development/libraries/redland/default.nix @@ -1,11 +1,11 @@ args: with args; -stdenv.mkDerivation { - name = "redland-1.0.6"; +stdenv.mkDerivation rec { + name = "redland-1.0.7"; src = fetchurl { - url = http://prdownloads.sourceforge.net/librdf/redland-1.0.6.tar.gz; - sha256 = "16hm8s6wy43avy4xcsq74n2dyzwzsdq2h2l2jav0by7s6mkh5gxw"; + url = "sf://librdf/${name}.tar.gz"; + sha256 = "1z160hhrnlyy5c8vh2hjza6kdfmzml8mg9dk8yffifkhnxjq5r2z"; }; buildInputs = [ bdb openssl libxml2 pkgconfig perl]; configureFlags="--without-static --with-threads --with-bdb=${bdb}"; From 10942396613d1619726285254e012323dd6e4111 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:41:27 +0000 Subject: [PATCH 107/320] qt-4: rev761061 svn path=/nixpkgs/branches/stdenv-updates/; revision=10147 --- pkgs/development/libraries/qt-4/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix index 1fbdd362ff33..9910d2eed2ad 100644 --- a/pkgs/development/libraries/qt-4/default.nix +++ b/pkgs/development/libraries/qt-4/default.nix @@ -29,8 +29,8 @@ rec { name = "qt-kde-4.3svn"; src = fetchsvn { url = svn://anonsvn.kde.org/home/kde/trunk/qt-copy; - rev = "746559"; - sha256 = "0lj2qp2q03m72kxdalrq6jfyrx33cg62ggvqww1c2f4aspvyijls"; + rev = "761061"; + sha256 = "0i98kh435dj29ln1lnidxwivcha1m553s4l8c1h2b3yd4950w8x4"; }; patchPhase = "mkdir .svn; bash apply_patches;" + common.patchPhase; }); From 453dcda812556c4e48ef74cffbd22c28532d9eb1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:41:37 +0000 Subject: [PATCH 108/320] lua-5: url correted svn path=/nixpkgs/branches/stdenv-updates/; revision=10148 --- pkgs/development/interpreters/lua-5/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/lua-5/default.nix b/pkgs/development/interpreters/lua-5/default.nix index 30ab03111364..6408457e2a02 100644 --- a/pkgs/development/interpreters/lua-5/default.nix +++ b/pkgs/development/interpreters/lua-5/default.nix @@ -3,7 +3,7 @@ stdenv.mkDerivation { name = "lua-5.1.2"; src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/lua-5.1.2.tar.gz; + url = http://www.lua.org/ftp/lua-5.1.2.tar.gz; sha256 = "17ixifwgjva5592s2rn1ki56wa7hgw0z210r4bcx5lv8zv39iw2w"; }; buildFlags = "linux"; # TODO: support for non-linux systems From 57de138aafadd231924a7def775fe0c410f300ab Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:41:48 +0000 Subject: [PATCH 109/320] kdesupport: rev761061 svn path=/nixpkgs/branches/stdenv-updates/; revision=10149 --- pkgs/desktops/kde-4/support/default.nix | 2 +- pkgs/desktops/kde-4/support/gmm.nix | 2 +- pkgs/desktops/kde-4/support/qca.nix | 2 +- pkgs/desktops/kde-4/support/qimageblitz.nix | 2 +- pkgs/desktops/kde-4/support/soprano.nix | 2 +- pkgs/desktops/kde-4/support/strigi.nix | 2 +- pkgs/desktops/kde-4/support/taglib.nix | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkgs/desktops/kde-4/support/default.nix b/pkgs/desktops/kde-4/support/default.nix index 426a5811bd79..4ad2143a7001 100644 --- a/pkgs/desktops/kde-4/support/default.nix +++ b/pkgs/desktops/kde-4/support/default.nix @@ -4,7 +4,7 @@ let svnSrc = name: hash: oldArgs.fetchsvn { url = "svn://anonsvn.kde.org/home/kde/trunk/kdesupport/${name}"; - rev = 747269; + rev = 761061; sha256 = hash; }; }; diff --git a/pkgs/desktops/kde-4/support/gmm.nix b/pkgs/desktops/kde-4/support/gmm.nix index 10a2b63863bf..768df83c8df4 100644 --- a/pkgs/desktops/kde-4/support/gmm.nix +++ b/pkgs/desktops/kde-4/support/gmm.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "gmm-svn"; - src = svnSrc "gmm" "08j40y85dprs9ddzsddimrhssnz08fafq6nhn40l59ddbvvir0gy"; + src = svnSrc "gmm" "1hxc6ymrjccz4mnix44fwpkmv8fvg5y5a9j3y6liz37wj87snnxd"; buildInputs = [ cmake ]; } diff --git a/pkgs/desktops/kde-4/support/qca.nix b/pkgs/desktops/kde-4/support/qca.nix index cf542feac7c1..a9b697879652 100644 --- a/pkgs/desktops/kde-4/support/qca.nix +++ b/pkgs/desktops/kde-4/support/qca.nix @@ -2,7 +2,7 @@ args: with args; stdenv.mkDerivation { name = "qca-2.0.0dev"; - src = svnSrc "qca" "1jdqh7xg3vqyx7lgngcz9qj6zdnmlwqw7yv2py7gp2qma7a0annd"; + src = svnSrc "qca" "1dm7q9v54ps0iix55hx4y51k379gqiwai5ym7avafis9j0py28aj"; buildInputs = [ cmake qt openssl gettext cyrus_sasl libgcrypt gnupg ]; patchPhase = "sed -e '/set(qca_PLUGINSDIR/s@\${QT_PLUGINS_DIR}@\${CMAKE_INSTALL_PREFIX}/plugins@' -i ../CMakeLists.txt"; } diff --git a/pkgs/desktops/kde-4/support/qimageblitz.nix b/pkgs/desktops/kde-4/support/qimageblitz.nix index 0abdd882a504..a4a88afa7e78 100644 --- a/pkgs/desktops/kde-4/support/qimageblitz.nix +++ b/pkgs/desktops/kde-4/support/qimageblitz.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "qimageblitz-4.0.0svn"; - src = svnSrc "qimageblitz" "0rmfkl529fmlb495whlidffib1x5s03xzsyaxild3rrsf4h1npcx"; + src = svnSrc "qimageblitz" "0vsan536qv8hj8l8ghmji62xzc75xm896h7fpwk48vq9f8w9fn4q"; buildInputs = [cmake qt]; } diff --git a/pkgs/desktops/kde-4/support/soprano.nix b/pkgs/desktops/kde-4/support/soprano.nix index c2b9a3b0903d..4b0e78f91cfc 100644 --- a/pkgs/desktops/kde-4/support/soprano.nix +++ b/pkgs/desktops/kde-4/support/soprano.nix @@ -2,7 +2,7 @@ args: with args; stdenv.mkDerivation { name = "soprano-1.9.0svn"; - src = svnSrc "soprano" "1zzn84k6m351y9pr0kkxb1d4i3jb3mkyyqc07bq0im56m8bvrcm7"; + src = svnSrc "soprano" "1j61jf8vzamknmzmrxpwba9v7c0vnb8zmlh9n0sgawjgbzfgq2zn"; CLUCENE_HOME=cluceneCore; buildInputs = [ cmake qt cluceneCore redland ]; } diff --git a/pkgs/desktops/kde-4/support/strigi.nix b/pkgs/desktops/kde-4/support/strigi.nix index 9e7d1f0c9ac2..75a9ed8c651e 100644 --- a/pkgs/desktops/kde-4/support/strigi.nix +++ b/pkgs/desktops/kde-4/support/strigi.nix @@ -2,7 +2,7 @@ args: with args; stdenv.mkDerivation { name = "strigi-svn"; - src = svnSrc "strigi" "198arwd87l97gg5rs3p7rk9wiw1mrdsw9y0zwvrwnxs7glgj201h"; + src = svnSrc "strigi" "0zmfy7ga4y49hl3rgw8ypqag36k78k2wfkkxka8xskrd249516ha"; CLUCENE_HOME=cluceneCore; buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus log4cxx stdenv.gcc.libc exiv2 bison cppunit perl ]; diff --git a/pkgs/desktops/kde-4/support/taglib.nix b/pkgs/desktops/kde-4/support/taglib.nix index fd6dac35fd9d..5a5a26e09c32 100644 --- a/pkgs/desktops/kde-4/support/taglib.nix +++ b/pkgs/desktops/kde-4/support/taglib.nix @@ -2,6 +2,6 @@ args: with args; stdenv.mkDerivation { name = "taglib-1.4svn"; - src = svnSrc "taglib" "0jmy1mldpjqnq8ap3ynwagxpjcfxzbisa4qd6zdwlwcm8zb54rak"; + src = svnSrc "taglib" "1wszymg4r3mm06wbxviqmnxra120kc1rxbk0a6kjrxjpyr8qcn2k"; buildInputs = [ cmake zlib ]; } From c6da1d6a8f7bd91b22a63a6fbf37b1282fda7532 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:42:06 +0000 Subject: [PATCH 110/320] Removed unneeded cmake dependency for blender svn path=/nixpkgs/branches/stdenv-updates/; revision=10150 --- pkgs/applications/misc/blender/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index 3fb66dff3e96..e722d4ff9dbd 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -12,7 +12,7 @@ args.stdenv.mkDerivation { inherit (args) scons SDL freetype openal python openexr mesa; buildInputs =(with args; [python scons - gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff cmake libXi ]); + gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff libXi ]); # patch SConstruct so that we can pass on additional include. Either blender # or openEXR is broken. I think OpenEXR should use include "" isntead of <> to From 06f98b22b4f3293b684591a38a53f47b478c5d6c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:42:19 +0000 Subject: [PATCH 111/320] xterm: using versioned tarball, upgrade go 231 svn path=/nixpkgs/branches/stdenv-updates/; revision=10151 --- pkgs/applications/misc/xterm/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix index d27b723400e1..c1be706b547a 100644 --- a/pkgs/applications/misc/xterm/default.nix +++ b/pkgs/applications/misc/xterm/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, libXaw, xproto, libXt, libX11, libSM, libICE, ncurses}: -stdenv.mkDerivation { - name = "xterm-208"; +stdenv.mkDerivation rec { + name = "xterm-231"; src = fetchurl { - url = ftp://invisible-island.net/xterm/xterm.tar.gz; - md5 = "f7b04a66dc401dc22f5ddb7f345be229"; /* was a062d0b398918015d07c31ecdcc5111a */ + url = "ftp://invisible-island.net/xterm/${name}.tgz"; + sha256 = "0qlz5nkdqkahdg9kbd1ni96n69srj1pd9yggwrw3z0kghaajb2sr"; }; buildInputs = [libXaw xproto libXt libX11 libSM libICE ncurses]; } From f7c4d82dd7fbd20582fb52fc9a73377ffc13d38b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:42:31 +0000 Subject: [PATCH 112/320] gnupg: using sha256 svn path=/nixpkgs/branches/stdenv-updates/; revision=10152 --- pkgs/tools/security/gnupg/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/security/gnupg/default.nix b/pkgs/tools/security/gnupg/default.nix index dd522fe1d96c..16c86fbe804f 100644 --- a/pkgs/tools/security/gnupg/default.nix +++ b/pkgs/tools/security/gnupg/default.nix @@ -11,7 +11,7 @@ stdenv.mkDerivation { builder = ./builder.sh; src = fetchurl { url = ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/gnupg-1.4.8.tar.bz2; - sha1 = "4b63267358e5c70f05b48e27d6877bad2636cabd"; + sha256 = "0v009vqpa4l9zwhcaaagz5sx65fjp8g0alsf8kac5s5gvrs2b78i"; }; buildInputs = [readline]; idea = if ideaSupport then fetchurl { From ef3bc23f9802ab598cfc0f176fa73847a0d51134 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 01:42:41 +0000 Subject: [PATCH 113/320] openal-soft: 1.1.93 svn path=/nixpkgs/branches/stdenv-updates/; revision=10153 --- pkgs/development/libraries/openalSoft/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/openalSoft/default.nix b/pkgs/development/libraries/openalSoft/default.nix index b42e733ea8fe..f0bce75e07a3 100644 --- a/pkgs/development/libraries/openalSoft/default.nix +++ b/pkgs/development/libraries/openalSoft/default.nix @@ -4,11 +4,11 @@ stdenv.mkDerivation { # (neither the ABI or API will break). Please try it out and let me know how it # works. :-) - name = "openal-soft-testing"; + name = "openal-soft-1.1.93"; src = fetchurl { - url = http://kcat.strangesoft.net/OpenAL.tar.bz2; - sha256 = "7b53c3e6eda1a71010651eb058c71c9b0c86b3c15cae5f0ffeeb7222531aa97d"; + url = http://kcat.strangesoft.net/openal-releases/openal-soft-1.1.93.tar.bz2; + sha256 = "162nyv4jy6qzi7s5q3wpdawfph6npyn1n4wjf21haxdxq0mmp6l7"; }; buildInputs = [cmake alsaLib]; From 6e8ff2b24bb056733067995dc6dd16452184d7a1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 15 Jan 2008 14:32:10 +0000 Subject: [PATCH 114/320] Merged with trunk again svn path=/nixpkgs/branches/stdenv-updates/; revision=10155 --- pkgs/applications/video/kino/default.nix | 90 +++++++++++++++++++ pkgs/desktops/gnome/default.nix | 2 +- pkgs/desktops/gnome/gtksourceview.nix | 2 + pkgs/desktops/kde-4/base/default.nix | 6 +- pkgs/desktops/kde-4/edu/default.nix | 6 +- pkgs/desktops/kde-4/extragear/default.nix | 6 +- pkgs/desktops/kde-4/games/default.nix | 6 +- pkgs/desktops/kde-4/graphics/default.nix | 6 +- pkgs/desktops/kde-4/libs/default.nix | 6 +- pkgs/desktops/kde-4/multimedia/default.nix | 6 +- pkgs/desktops/kde-4/network/default.nix | 6 +- pkgs/desktops/kde-4/pim/default.nix | 6 +- pkgs/desktops/kde-4/pimlibs/default.nix | 6 +- pkgs/desktops/kde-4/runtime/default.nix | 6 +- pkgs/desktops/kde-4/toys/default.nix | 6 +- pkgs/desktops/kde-4/utils/default.nix | 6 +- pkgs/desktops/kde-4/workspace/default.nix | 6 +- .../development/compilers/ghc-6.8/default.nix | 7 ++ .../libraries/libavc1394/default.nix | 17 ++++ .../libraries/libiec61883/default.nix | 17 ++++ pkgs/misc/emulators/wine/default.nix | 8 +- .../firmware/iwlwifi-3945-ucode/default.nix | 19 ++++ pkgs/os-specific/linux/iwlwifi/default.nix | 37 ++++++++ .../linux/module-init-tools/aggregator.nix | 12 +-- .../os-specific/linux/ndiswrapper/default.nix | 2 +- pkgs/os-specific/linux/nvidia/builder.sh | 7 +- .../linux/wpa_supplicant/default.nix | 6 +- pkgs/servers/samba/default.nix | 5 +- pkgs/tools/misc/relfs/cvs.2007.12.01.nix | 16 ++-- pkgs/tools/security/chkrootkit/default.nix | 16 ++++ pkgs/top-level/all-packages.nix | 51 +++++++++-- 31 files changed, 325 insertions(+), 73 deletions(-) create mode 100644 pkgs/applications/video/kino/default.nix create mode 100644 pkgs/development/libraries/libavc1394/default.nix create mode 100644 pkgs/development/libraries/libiec61883/default.nix create mode 100644 pkgs/os-specific/linux/firmware/iwlwifi-3945-ucode/default.nix create mode 100644 pkgs/os-specific/linux/iwlwifi/default.nix create mode 100644 pkgs/tools/security/chkrootkit/default.nix diff --git a/pkgs/applications/video/kino/default.nix b/pkgs/applications/video/kino/default.nix new file mode 100644 index 000000000000..8e501f40cc0e --- /dev/null +++ b/pkgs/applications/video/kino/default.nix @@ -0,0 +1,90 @@ +# is this configure option of interest? +#--enable-udev-rules-dir=PATH +# Where to install udev rules (/etc/udev/rules.d) + +#TODO shared version? + + +# This is my config output.. Much TODO ? +#source path /tmp/nix-31998-1/kino-1.2.0/ffmpeg +#C compiler gcc +#make make +#.align is power-of-two no +#ARCH x86_64 (generic) +#build suffix -kino +#big-endian no +#MMX enabled yes +#CMOV enabled no +#CMOV is fast no +#gprof enabled no +#debug symbols yes +#strip symbols yes +#optimize yes +#static yes +#shared no +#postprocessing support no +#software scaler enabled yes +#video hooking no +#network support no +#threading support no +#SDL support no +#Sun medialib support no +#AVISynth enabled no +#liba52 support no +#liba52 dlopened no +#libdts support no +#libfaac enabled no +#libfaad enabled no +#faadbin enabled no +#libgsm enabled no +#libmp3lame enabled no +#libnut enabled no +#libogg enabled no +#libtheora enabled no +#libvorbis enabled no +#x264 enabled no +#XviD enabled no +#zlib enabled no +#AMR-NB float support no +#AMR-NB fixed support no +#AMR-WB float support no +#AMR-WB IF2 support no + + +args: +args.stdenv.mkDerivation { + name = "kino-1.2.0"; + + phases = "unpackPhase configurePhase buildPhase installPhase"; + + src = args.fetchurl { + url = http://downloads.sourceforge.net/kino/kino-1.2.0.tar.gz; + sha256 = "15q1qmii5a2zbrrrg8iba2d1rjzaisa75zvxjhrs86jwglpn4lp9"; + }; + + buildInputs =(with args; [ gtk libglade libxml2 libraw1394 libsamplerate libdv + pkgconfig perl perlXMLParser libavc1394 libiec61883 x11 libXv gettext libX11 glib cairo ]); # TODOoptional packages + + #preConfigure = " + # grep 11 env-vars + # ex + #"; + + postInstall = " + rpath=`patchelf --print-rpath \$out/bin/kino`; + for i in $\buildInputs; do + echo adding \$i/lib + rpath=\$rpath\${rpath:+:}\$i/lib + done + for i in \$out/bin/*; do + patchelf --set-rpath \"\$rpath\" \"\$i\" + done + "; + + + meta = { + description = "Kino is a non-linear DV editor for GNU/Linux"; + homepage = http://www.kinodv.org/; + license = "GPL2"; + }; +} diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix index 9b4c14340bfc..a3f8d4a9c052 100644 --- a/pkgs/desktops/gnome/default.nix +++ b/pkgs/desktops/gnome/default.nix @@ -153,7 +153,7 @@ rec { }; gtksourceview = import ./gtksourceview.nix { - inherit fetchurl stdenv pkgconfig perl perlXMLParser gtk libxml2 + inherit fetchurl stdenv pkgconfig perl perlXMLParser gtk libxml2 gettext libgnomeprint gnomevfs libbonobo /* !!! <- should be propagated in gnomevfs */ GConf /* idem */ libgnomeprintui libgnomecanvas /* !!! through printui */; input = desktop.gtksourceview; diff --git a/pkgs/desktops/gnome/gtksourceview.nix b/pkgs/desktops/gnome/gtksourceview.nix index 8ad7955e8d40..8afafac8cf46 100644 --- a/pkgs/desktops/gnome/gtksourceview.nix +++ b/pkgs/desktops/gnome/gtksourceview.nix @@ -1,6 +1,7 @@ { input, stdenv, fetchurl, perl, perlXMLParser, pkgconfig , gtk, libxml2, libgnomeprint, gnomevfs, libbonobo, GConf , libgnomeprintui, libgnomecanvas +, gettext }: stdenv.mkDerivation { @@ -8,6 +9,7 @@ stdenv.mkDerivation { buildInputs = [ perl perlXMLParser pkgconfig gnomevfs libbonobo GConf libgnomeprintui libgnomecanvas + gettext ]; propagatedBuildInputs = [gtk libxml2 libgnomeprint]; } diff --git a/pkgs/desktops/kde-4/base/default.nix b/pkgs/desktops/kde-4/base/default.nix index 6013a507e3a4..4fff839769b5 100644 --- a/pkgs/desktops/kde-4/base/default.nix +++ b/pkgs/desktops/kde-4/base/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdebase-4.0rc2"; + name = "kdebase-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdebase-3.97.0.tar.bz2; - sha256 = "1iavkzfq7f9308j2r70xd6qfng0fncpww8s49hbigzkkdzrjk8gn"; + url = mirror://kde/stable/4.0/src/kdebase-4.0.0.tar.bz2; + sha256 = "1419zijcrx6nk10nay3dbv0vi8525hzcqkm2fw8cvw11i4mk909q"; }; propagatedBuildInputs = [kdepimlibs libusb]; diff --git a/pkgs/desktops/kde-4/edu/default.nix b/pkgs/desktops/kde-4/edu/default.nix index 8e6b32c353a2..77fe86e21784 100644 --- a/pkgs/desktops/kde-4/edu/default.nix +++ b/pkgs/desktops/kde-4/edu/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation rec { - name = "kdeedu-4.0rc2"; + name = "kdeedu-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdeedu-3.97.0.tar.bz2; - sha256 = "1d2319pzs4ymbp2jgmc1kzkr5d9g5p5d1yg6b5l7z4b2qzhchpl4"; + url = mirror://kde/stable/4.0/src/kdeedu-4.0.0.tar.bz2; + sha256 = "1wjy1rm7aiib1lv61wx7mcbkbpkk6phcz1q6dy51x0hfrc3rdkg4"; }; buildInputs = [kdelibs kdepimlibs boost readline openbabel ocaml diff --git a/pkgs/desktops/kde-4/extragear/default.nix b/pkgs/desktops/kde-4/extragear/default.nix index 69fc626db6d0..93e41c6fbfab 100644 --- a/pkgs/desktops/kde-4/extragear/default.nix +++ b/pkgs/desktops/kde-4/extragear/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "extragear-plasma-4.0rc2"; + name = "extragear-plasma-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/extragear-plasma-3.97.0.tar.bz2; - sha256 = "1nzfy34ig66gfpgv6kbcmcap13axcy7kvj43srbd0ic6a0giv283"; + url = mirror://kde/stable/4.0/src/extragear/extragear-plasma-4.0.0.tar.bz2; + sha256 = "19gmvqkal11gg67gfmdivxbhwvggm2i6ad642984d97yicms7s9k"; }; buildInputs = [ kdeworkspace kdebase ]; diff --git a/pkgs/desktops/kde-4/games/default.nix b/pkgs/desktops/kde-4/games/default.nix index d82f3971e3cd..a8df422f2780 100644 --- a/pkgs/desktops/kde-4/games/default.nix +++ b/pkgs/desktops/kde-4/games/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdegames-4.0rc2"; + name = "kdegames-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdegames-3.97.0.tar.bz2; - sha256 = "12a87lfaqlidjlibxk3q43bdza2c6k5ggqblxdnr8ikjdww2sk29"; + url = mirror://kde/stable/4.0/src/kdegames-4.0.0.tar.bz2; + sha256 = "09ilgi6l5sq4gavskyhfrv8ra3n3r6xdn8cdc7fm2fi3zah4innn"; }; buildInputs = [kdelibs kdepimlibs]; diff --git a/pkgs/desktops/kde-4/graphics/default.nix b/pkgs/desktops/kde-4/graphics/default.nix index b765e63108a6..18ff10255904 100644 --- a/pkgs/desktops/kde-4/graphics/default.nix +++ b/pkgs/desktops/kde-4/graphics/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdegraphics-4.0rc2"; + name = "kdegraphics-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdegraphics-3.97.0.tar.bz2; - sha256 = "0f16zyvw37nqhbis34rg6yxg6r95yk2vi9lk3zk8lqjwcs81h5fz"; + url = mirror://kde/stable/4.0/src/kdegraphics-4.0.0.tar.bz2; + sha256 = "00np19mzmg8zs8j89g1f47h3kj5azgnv3nspb8lw880zg682yp2f"; }; buildInputs = [kdelibs kdepimlibs libgphoto2 saneBackends diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix index cd484fa444c2..b714977bd732 100644 --- a/pkgs/desktops/kde-4/libs/default.nix +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation rec { - name = "kdelibs-4.0rc2"; + name = "kdelibs-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdelibs-3.97.0.tar.bz2; - sha256 = "0g9r7nph6hpdvbmchvp0h5xk4z0da0b5rskqpbixdplsdxcs8xhv"; + url = mirror://kde/stable/4.0.0/src/kdelibs-4.0.0.tar.bz2; + sha256 = "0bfcrb34kl2md77k9rbr924n5bc7chc5wkr10jjvq98742yh0rza"; }; propagatedBuildInputs = [ diff --git a/pkgs/desktops/kde-4/multimedia/default.nix b/pkgs/desktops/kde-4/multimedia/default.nix index feedc95b15b9..0570b6f40355 100644 --- a/pkgs/desktops/kde-4/multimedia/default.nix +++ b/pkgs/desktops/kde-4/multimedia/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdemultimedia-4.0rc2"; + name = "kdemultimedia-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdemultimedia-3.97.0.tar.bz2; - sha256 = "0q78d1gh5na72aj604myy23qn6xb0izw0igsi1h9i4pc2bsis87i"; + url = mirror://kde/stable/4.0/src/kdemultimedia-4.0.0.tar.bz2; + sha256 = "14axr1x09k67vb3vaw4g9zg4mq7j14xn9d90kifwap7b76iljbi5"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace libogg flac cdparanoia lame diff --git a/pkgs/desktops/kde-4/network/default.nix b/pkgs/desktops/kde-4/network/default.nix index d962a9c40ea4..1a97c3e7e0dd 100644 --- a/pkgs/desktops/kde-4/network/default.nix +++ b/pkgs/desktops/kde-4/network/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdenetwork-4.0rc2"; + name = "kdenetwork-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdenetwork-3.97.0.tar.bz2; - sha256 = "118r55aw0pag78kawjfn3vya7aca12n5ypknm1i4khxs747hxqbr"; + url = mirror://kde/stable/4.0/src/kdenetwork-4.0.0.tar.bz2; + sha256 = "04vigr2z0md64khjdriwslsyaf6mpqxd2iwsnr82g53x4kh0i061"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace sqlite libidn]; diff --git a/pkgs/desktops/kde-4/pim/default.nix b/pkgs/desktops/kde-4/pim/default.nix index 397c57df5bf3..5a174130091e 100644 --- a/pkgs/desktops/kde-4/pim/default.nix +++ b/pkgs/desktops/kde-4/pim/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdepim-4.0rc2"; + name = "kdepim-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdepim-3.97.0.tar.bz2; - sha256 = "1x5ywn1z963azrrm6rlsspzlsbbwxcsb3zc93pdy80qq1jwsf964"; + url = mirror://kde/stable/4.0/src/kdepim-4.0.0.tar.bz2; + sha256 = "kdepim is not included"; }; buildInputs = [libXinerama mesa stdenv.gcc.libc alsaLib kdelibs kdepimlibs diff --git a/pkgs/desktops/kde-4/pimlibs/default.nix b/pkgs/desktops/kde-4/pimlibs/default.nix index 077cca5e32c9..1ea2e99615b1 100644 --- a/pkgs/desktops/kde-4/pimlibs/default.nix +++ b/pkgs/desktops/kde-4/pimlibs/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdepimlibs-4.0rc2"; + name = "kdepimlibs-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdepimlibs-3.97.0.tar.bz2; - sha256 = "1zv4l592288bdfxqllm8z1cmsjcprfji5harcxf9hhz95igp5n7j"; + url = mirror://kde/stable/4.0/src/kdepimlibs-4.0.0.tar.bz2; + sha256 = "0vixx2vh7qgysnbzvykf20362p22jzvl8snpqaknay3v3b2k0br0"; }; propagatedBuildInputs = [kdelibs boost gpgme cyrus_sasl openldap]; diff --git a/pkgs/desktops/kde-4/runtime/default.nix b/pkgs/desktops/kde-4/runtime/default.nix index f1740f959fda..5a0d685c9bcd 100644 --- a/pkgs/desktops/kde-4/runtime/default.nix +++ b/pkgs/desktops/kde-4/runtime/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdebase-runtime-4.0rc2"; + name = "kdebase-runtime-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdebase-runtime-3.97.0.tar.bz2; - sha256 = "16xang1sjj0h8339cfqf6l4qqswyv42sq9w9a3axmckklmfnx6b1"; + url = mirror://kde/stable/4.0/src/kdebase-runtime-4.0.0.tar.bz2; + sha256 = "0svsn9gzg3ka77j7z71fy502a09w9gp9jd2q2y1w07ahpdil5p7h"; }; propagatedBuildInputs = [kdepimlibs libusb xineLib]; diff --git a/pkgs/desktops/kde-4/toys/default.nix b/pkgs/desktops/kde-4/toys/default.nix index 1ebb427927d8..2c0fdb289592 100644 --- a/pkgs/desktops/kde-4/toys/default.nix +++ b/pkgs/desktops/kde-4/toys/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdetoys-4.0rc2"; + name = "kdetoys-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdetoys-3.97.0.tar.bz2; - sha256 = "1ga2xlsr7wl7jnc4clzabgyv5wfcjgpfmv6ca99bkz31nr6lddpa"; + url = mirror://kde/stable/4.0/src/kdetoys-4.0.0.tar.bz2; + sha256 = "0j7kk4ripg2sw4m8ym96aiyi8rsfb4p7kqp9kmik850flqighhsk"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace]; diff --git a/pkgs/desktops/kde-4/utils/default.nix b/pkgs/desktops/kde-4/utils/default.nix index fe453938c949..94f49d11efd5 100644 --- a/pkgs/desktops/kde-4/utils/default.nix +++ b/pkgs/desktops/kde-4/utils/default.nix @@ -1,11 +1,11 @@ args: with args; stdenv.mkDerivation { - name = "kdeutils-4.0rc2"; + name = "kdeutils-4.0.0"; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdeutils-3.97.0.tar.bz2; - sha256 = "0nhs91xf83xyf4wlpppavrhyi76qdnilhaynwjirx5n85hjl4iiq"; + url = mirror://kde/stable/4.0/src/kdeutils-4.0.0.tar.bz2; + sha256 = "0ha31z79ikkbknhyklihzys0w4jfz4qx8jiyja0gwh428f7mxqj4"; }; buildInputs = [kdelibs kdepimlibs kdeworkspace gmp libzip python ]; diff --git a/pkgs/desktops/kde-4/workspace/default.nix b/pkgs/desktops/kde-4/workspace/default.nix index 162277a03ed6..a5929785aecd 100644 --- a/pkgs/desktops/kde-4/workspace/default.nix +++ b/pkgs/desktops/kde-4/workspace/default.nix @@ -1,12 +1,12 @@ args: with args; stdenv.mkDerivation { - name = "kdebase-workspace-4.0rc2"; + name = "kdebase-workspace-4.0.0"; builder = ./builder.sh; src = fetchurl { - url = mirror://kde/unstable/3.97/src/kdebase-workspace-3.97.0.tar.bz2; - sha256 = "1sb3vm5y50af6qvsg4sjw14z7y4j1zbgp7w8gsffigbr0hyj4apl"; + url = mirror://kde/stable/4.0/src/kdebase-workspace-4.0.0.tar.bz2; + sha256 = "08sgp7jaqljdxwsgr5lyyfd6w734yv24zswps1mchmhj01vz1fcg"; }; buildInputs = [kdelibs kdepimlibs stdenv.gcc.libc]; diff --git a/pkgs/development/compilers/ghc-6.8/default.nix b/pkgs/development/compilers/ghc-6.8/default.nix index 929799d1521c..6226fa2988d7 100644 --- a/pkgs/development/compilers/ghc-6.8/default.nix +++ b/pkgs/development/compilers/ghc-6.8/default.nix @@ -29,6 +29,13 @@ stdenv.mkDerivation (rec { cat $setupHook >> $out/nix-support/setup-hook ''; + configureFlags=[ + "--with-gmp-libraries=${gmp}/lib" + "--with-readline-libraries=${readline}/lib" + "--with-gmp-includes=${gmp}/include" + "--with-gcc=${gcc}/bin/gcc" + ]; + preConfigure = " # still requires a hack for ncurses sed -i \"s|^\\\(ld-options.*$\\\)|\\\1 -L${ncurses}/lib|\" libraries/readline/readline.buildinfo.in diff --git a/pkgs/development/libraries/libavc1394/default.nix b/pkgs/development/libraries/libavc1394/default.nix new file mode 100644 index 000000000000..3d1d63780c23 --- /dev/null +++ b/pkgs/development/libraries/libavc1394/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "libavc1394-0.5.3"; + + src = args.fetchurl { + url = mirror://sourceforge/libavc1394/libavc1394-0.5.3.tar.gz; + sha256 = "19i40i3722ilhziknfds3a6w5xzv66fvc68gvbir1p2fvwi6ij93"; + }; + + buildInputs =(with args; [pkgconfig libraw1394]); + + meta = { + description = "programming interface for the 1394 Trade Association AV/C (Audio/Video Control) Digital Interface Command Set"; + homepage = http://sourceforge.net/projects/libavc1394/; + license = [ "GPL" "LGPL" ]; + }; +} diff --git a/pkgs/development/libraries/libiec61883/default.nix b/pkgs/development/libraries/libiec61883/default.nix new file mode 100644 index 000000000000..3f167eb81de6 --- /dev/null +++ b/pkgs/development/libraries/libiec61883/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "libiec61883-1.1.0"; + + src = args.fetchurl { + url = http://www.linux1394.org/dl/libiec61883-1.1.0.tar.gz; + sha256 = "09f0ca7bp6lqlz6601gnyl04mfabv0azg49n1cmjyqpzh35cgxkq"; + }; + + buildInputs =(with args; [pkgconfig libraw1394]); + + meta = { + description = "TODO"; + homepage = http://www.linux1394.org/; + license = "LGPL"; + }; +} diff --git a/pkgs/misc/emulators/wine/default.nix b/pkgs/misc/emulators/wine/default.nix index fc9b97d5af9f..8a13c61b557c 100644 --- a/pkgs/misc/emulators/wine/default.nix +++ b/pkgs/misc/emulators/wine/default.nix @@ -7,11 +7,13 @@ assert stdenv.isLinux; let lib = import ../../../lib/default.nix; in stdenv.mkDerivation { - name = "wine-0.9.49"; + name = "wine-0.9.53"; src = fetchurl { - url = mirror://sourceforge/wine/wine-0.9.49.tar.bz2; - sha256 = "d41edd08cf7fd21d7350a633995107533a25f925c8859995d3a6fc131f54b3c1"; + #url = mirror://sourceforge/wine/wine-0.9.49.tar.bz2; + url = mirror://sourceforge/wine/wine-0.9.53.tar.bz2; + #sha256 = "d41edd08cf7fd21d7350a633995107533a25f925c8859995d3a6fc131f54b3c1"; + sha256 = "06317d78b7db39458656b6acc6b265ce97f358aefd7ded679263f397a89f1200"; }; buildInputs = [ diff --git a/pkgs/os-specific/linux/firmware/iwlwifi-3945-ucode/default.nix b/pkgs/os-specific/linux/firmware/iwlwifi-3945-ucode/default.nix new file mode 100644 index 000000000000..c17d29cafa40 --- /dev/null +++ b/pkgs/os-specific/linux/firmware/iwlwifi-3945-ucode/default.nix @@ -0,0 +1,19 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "iwlwifi-3945-ucode-2.14.1.5"; + + src = fetchurl { + url = http://intellinuxwireless.org/iwlwifi/downloads/iwlwifi-3945-ucode-2.14.1.5.tgz; + sha256 = "06gy21qkd4kj6pf3nsz5z3xkgmcafzrm1krywd8lbb8i56i3jkra"; + }; + + buildPhase = "true"; + + installPhase = "ensureDir $out; chmod -x *; cp * $out"; + + meta = { + description = "Firmware for the Intel 3945ABG wireless card"; + homepage = http://intellinuxwireless.org/; + }; +} diff --git a/pkgs/os-specific/linux/iwlwifi/default.nix b/pkgs/os-specific/linux/iwlwifi/default.nix new file mode 100644 index 000000000000..8859f7346b51 --- /dev/null +++ b/pkgs/os-specific/linux/iwlwifi/default.nix @@ -0,0 +1,37 @@ +{stdenv, fetchurl, kernel}: + +stdenv.mkDerivation { + name = "iwlwifi-1.2.23"; + + src = fetchurl { + url = http://www.intellinuxwireless.org/iwlwifi/downloads/iwlwifi-1.2.23.tgz; + sha256 = "0a4szjgg5b2jj4ax85lakqa951ph6pw5wpwlrw3mnmvcda5ayiip"; + }; + + preBuild = '' + substituteInPlace scripts/generate_compatible \ + --replace '/usr/bin/env /bin/bash' $shell + substituteInPlace Makefile \ + --replace /sbin/depmod true + + # Urgh, we need the complete kernel sources for some header + # files. So unpack the original kernel source tarball and copy + # the configured include directory etc. on top of it. + kernelVersion=$(cd ${kernel}/lib/modules && ls) + kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/source) + tar xvfj ${kernel.src} + kernelSource=$(echo $(pwd)/linux-*) + cp -prd $kernelBuild/* $kernelSource + + makeFlags=KSRC=$kernelSource + make $makeFlags || true + make $makeFlags + + installFlags=KMISC=$out/lib/modules/$kernelVersion/misc + ''; # */ + + meta = { + description = "Intel Wireless WiFi Link drivers for Linux"; + homepage = http://www.intellinuxwireless.org/; + }; +} diff --git a/pkgs/os-specific/linux/module-init-tools/aggregator.nix b/pkgs/os-specific/linux/module-init-tools/aggregator.nix index 09866f414e5d..cfd49cc0813f 100644 --- a/pkgs/os-specific/linux/module-init-tools/aggregator.nix +++ b/pkgs/os-specific/linux/module-init-tools/aggregator.nix @@ -2,32 +2,34 @@ args : with args; with builderDefs { addSbinPath = true; src = ""; - buildInputs = [lndir module_init_tools]; + buildInputs = [module_init_tools]; configureFlags = []; } null; /* null is a terminator for sumArgs */ let doCollect = FullDepEntry ('' -ensureDir $out/ +ensureDir $out/lib/modules cd $out/ for i in $moduleSources; do - lndir $i/ + cp -rfs $i/* . + chmod -R u+w . done rm -rf nix-support cd lib/modules/ rm */modules.* MODULE_DIR=$PWD/ depmod -a +cd $out/ '') [minInit addInputs defEnsureDir]; in stdenv.mkDerivation rec { - name = "module-aggregator"; + name = "kernel-modules"; inherit moduleSources; builder = writeScript (name + "-builder") (textClosure [doCollect doForceShare doPropagate]); meta = { description = " A directory to hold all the modules, including those - built separately from kernel. Earlier directories in + built separately from kernel. Later mentioned directories in moduleSources have higher priority. "; }; diff --git a/pkgs/os-specific/linux/ndiswrapper/default.nix b/pkgs/os-specific/linux/ndiswrapper/default.nix index 5138ae4f9b8f..1eed97d7c515 100644 --- a/pkgs/os-specific/linux/ndiswrapper/default.nix +++ b/pkgs/os-specific/linux/ndiswrapper/default.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation { "; # should we use unstable? - src = args.fetchurl { + src = fetchurl { url = http://kent.dl.sourceforge.net/sourceforge/ndiswrapper/ndiswrapper-1.49.tar.gz; sha256 = "1b9nqkk7gv6gffzj9b8mjy5myxf2afwpyr2n5wbfsylf15dvvvjr"; }; diff --git a/pkgs/os-specific/linux/nvidia/builder.sh b/pkgs/os-specific/linux/nvidia/builder.sh index 4ef8c551d1c8..00d70d6198f2 100755 --- a/pkgs/os-specific/linux/nvidia/builder.sh +++ b/pkgs/os-specific/linux/nvidia/builder.sh @@ -20,7 +20,8 @@ myBuildPhase() { #patch -p1 < $xenPatch # Create the module. - sysSrc=$(echo $kernel/lib/modules/2.*/build/) + kernelVersion=$(cd $kernel/lib/modules && ls) + sysSrc=$(echo $kernel/lib/modules/$kernelVersion/build/) unset src # used by the nv makefile make SYSSRC=$sysSrc module cd ../../.. @@ -31,8 +32,8 @@ installPhase=myInstallPhase myInstallPhase() { # Install the kernel module. - ensureDir $out/lib - cp usr/src/nv/nvidia.ko $out/lib/ + ensureDir $out/lib/modules/$kernelVersion/misc + cp usr/src/nv/nvidia.ko $out/lib/modules/$kernelVersion/misc # Install libGL and friends. cp -prd usr/lib/* usr/X11R6/lib/libXv* $out/lib/ diff --git a/pkgs/os-specific/linux/wpa_supplicant/default.nix b/pkgs/os-specific/linux/wpa_supplicant/default.nix index cf529b04637e..f58a360ac8d8 100644 --- a/pkgs/os-specific/linux/wpa_supplicant/default.nix +++ b/pkgs/os-specific/linux/wpa_supplicant/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, openssl}: stdenv.mkDerivation { - name = "wpa_supplicant-0.5.8"; + name = "wpa_supplicant-0.5.9"; src = fetchurl { - url = http://hostap.epitest.fi/releases/wpa_supplicant-0.5.8.tar.gz; - sha256 = "1w37bm42gh1k0v3r8cdmyrvf5rk5fyz9bvsp10w2cvgrwgi5b5rg"; + url = http://hostap.epitest.fi/releases/wpa_supplicant-0.5.9.tar.gz; + sha256 = "1dylaiikp2jb13jbxdrl1h9b9p2lkjmzx06hpmkcpyq5c5g7p0xy"; }; preBuild = " diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix index b46f6494c165..e94c2d1c5547 100644 --- a/pkgs/servers/samba/default.nix +++ b/pkgs/servers/samba/default.nix @@ -9,6 +9,9 @@ stdenv.mkDerivation { }; buildInputs = [readline pam openldap]; - configureFlags = "--with-pam --with-smbmount"; + configureFlags = [" --with-pam " " --with-smbmount " + " --datadir=\$out/share " " --with-acl-support " + " --with-aio-support "]; postUnpack = "sourceRoot=\$sourceRoot/source"; + postInstall = "rm -rf \$out/var ; ln -s /var/samba $out/var "; } diff --git a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix index 411906e45ba2..cffa01b9b95f 100644 --- a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix +++ b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix @@ -25,15 +25,15 @@ let build = FullDepEntry (" echo ' createuser -A -D \$1 dropdb relfs_\$1 ; - rm -rf /tmp/relfs-\$1-tmp; - mkdir /tmp/relfs-\$1-tmp; - USER=\$1 relfs -f -s /tmp/relfs-raskin-tmp & - sleep 1 && + rm -rf /tmp/relfs-\$1-tmp; + mkdir /tmp/relfs-\$1-tmp; + USER=\$1 relfs -f -s /tmp/relfs-raskin-tmp & + sleep 1 && kill -15 \${!}; - rm -rf /tmp/relfs-\$1-tmp ; - psql -d relfs_\$1 <<< \"ALTER DATABASE relfs_raskin OWNER TO raskin; - ALTER TABLE obj OWNER TO \$1; - ALTER TABLE obj_mimetype OWNER TO \$1; + rm -rf /tmp/relfs-\$1-tmp ; + psql -d relfs_\$1 <<< \"ALTER DATABASE relfs_raskin OWNER TO raskin; + ALTER TABLE obj OWNER TO \$1; + ALTER TABLE obj_mimetype OWNER TO \$1; ALTER TABLE membership OWNER TO \$1;\"' > \$out/bin/relfs_grant; chmod a+x \$out/bin/relfs_grant; ") [minInit doUnpack addInputs]; diff --git a/pkgs/tools/security/chkrootkit/default.nix b/pkgs/tools/security/chkrootkit/default.nix new file mode 100644 index 000000000000..e7545ac8cd6a --- /dev/null +++ b/pkgs/tools/security/chkrootkit/default.nix @@ -0,0 +1,16 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "chkrootkit-0.48"; + + src = fetchurl { + url = ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz; + sha256 = "1yzid6bw092nf8k83y1119kc4ns7r0l3zsfah5xal8kh19ad7cxl"; + }; + + installPhase = " + ensureDir $out/sbin + cp check_wtmpx chkdirs chklastlog chkproc chkrootkit chkutmp chkwtmp ifpromisc strings-static $out/sbin + "; + +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 10bf6ee2323e..4e8de1db2faa 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -295,11 +295,11 @@ rec { writeText = name: text: runCommand name {inherit text;} "echo -n \"$text\" > $out"; writeScript = name: text: runCommand name {inherit text;} "echo -n \"$text\" > $out; chmod +x $out"; - - stdenvNewSetupScript = stdenv; writeScriptBin = name: text: runCommand name {inherit text;} "mkdir -p \$out/bin; echo -n \"\$text\" > \$out/bin/\$name ; chmod +x \$out/bin/\$name"; + stdenvNewSetupScript = stdenv; + substituteAll = import ../build-support/substitute/substitute-all.nix { inherit stdenv; }; @@ -358,6 +358,10 @@ rec { inherit fetchurl stdenv; }; + chkrootkit = import ../tools/security/chkrootkit { + inherit fetchurl stdenv; + }; + cksfv = import ../tools/networking/cksfv { inherit fetchurl stdenv; }; @@ -1990,6 +1994,10 @@ rec { inherit (xlibs) libXp libXau; }; + libavc1394 = import ../development/libraries/libavc1394 { + inherit fetchurl stdenv pkgconfig libraw1394; + }; + libcaca = import ../development/libraries/libcaca { inherit fetchurl stdenv ncurses; }; @@ -2089,6 +2097,10 @@ rec { inherit fetchurl stdenv; }; + libiec61883 = import ../development/libraries/libiec61883 { + inherit fetchurl stdenv pkgconfig libraw1394; + }; + libjpeg = import ../development/libraries/libjpeg { inherit fetchurl stdenv libtool; }; @@ -3091,6 +3103,14 @@ rec { inherit fetchurl stdenv; }; + iwlwifi = import ../os-specific/linux/iwlwifi { + inherit fetchurl stdenv kernel; + }; + + iwlwifi3945ucode = import ../os-specific/linux/firmware/iwlwifi-3945-ucode { + inherit fetchurl stdenv; + }; + kbd = import ../os-specific/linux/kbd { inherit fetchurl stdenv bison flex; }; @@ -3139,6 +3159,16 @@ rec { configFile = getConfig ["kernel" "configFile"] null; }; + kqemuFun = lib.sumArgs (selectVersion ../os-specific/linux/kqemu) { + inherit fetchurl stdenv builderDefs; + }; + + # No finished expression is provided - pick your own kernel + kqemuFunCurrent = theKernel: (kqemuFun { + version = "1.3.0pre11"; + kernel = theKernel; + } null); + libselinux = import ../os-specific/linux/libselinux { inherit fetchurl stdenv libsepol; }; @@ -3147,7 +3177,6 @@ rec { inherit fetchurl stdenv; }; - libsexy = import ../development/libraries/libsexy { inherit stdenv fetchurl pkgconfig libxml2; inherit (gtkLibs) glib gtk pango; @@ -3239,9 +3268,7 @@ rec { module_aggregation = moduleSources: import ../os-specific/linux/module-init-tools/aggregator.nix { - inherit fetchurl stdenv module_init_tools moduleSources - builderDefs; - inherit (xorg) lndir; + inherit fetchurl stdenv module_init_tools moduleSources builderDefs; }; modutils = import ../os-specific/linux/modutils { @@ -3979,6 +4006,18 @@ rec { inherit stdenv fetchurl; }; + kino = import ../applications/video/kino { + inherit fetchurl pkgconfig libxml2 perl perlXMLParser stdenv + libdv libraw1394 libavc1394 libiec61883 x11 gettext cairo; /* libavformat */ + inherit libsamplerate ffmpeg; + inherit (gnome) libglade gtk glib; + inherit (xlibs) libXv libX11; + inherit (gtkLibs) pango; + + # # optional + # inherit ffmpeg2theora sox, vorbis-tools lame mjpegtools dvdauthor 'Q'dvdauthor growisofs mencoder; + }; + kuickshow = import ../applications/graphics/kuickshow { inherit fetchurl stdenv kdelibs arts libpng libjpeg libtiff libungif imlib expat perl; inherit (xlibs) libX11 libXext libSM; From 9e0a64295596252ce20d9bae1c19e19f668639ca Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 16 Jan 2008 00:06:31 +0000 Subject: [PATCH 115/320] freeglut: gcc-4.2 related patch svn path=/nixpkgs/branches/stdenv-updates/; revision=10159 --- pkgs/development/libraries/freeglut/default.nix | 1 + .../libraries/freeglut/freeglut-gcc-4.2.patch | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 pkgs/development/libraries/freeglut/freeglut-gcc-4.2.patch diff --git a/pkgs/development/libraries/freeglut/default.nix b/pkgs/development/libraries/freeglut/default.nix index 704dc0005fb7..19720b9d6779 100644 --- a/pkgs/development/libraries/freeglut/default.nix +++ b/pkgs/development/libraries/freeglut/default.nix @@ -9,4 +9,5 @@ stdenv.mkDerivation { }; buildInputs = [x11 mesa]; + patches = ./freeglut-gcc-4.2.patch; } diff --git a/pkgs/development/libraries/freeglut/freeglut-gcc-4.2.patch b/pkgs/development/libraries/freeglut/freeglut-gcc-4.2.patch new file mode 100644 index 000000000000..1642affba912 --- /dev/null +++ b/pkgs/development/libraries/freeglut/freeglut-gcc-4.2.patch @@ -0,0 +1,13 @@ +diff -urN freeglut-2.4.0.old/src/freeglut_joystick.c freeglut-2.4.0/src/freeglut_joystick.c +--- freeglut-2.4.0.old/src/freeglut_joystick.c 2007-06-16 03:51:41.000000000 +0000 ++++ freeglut-2.4.0/src/freeglut_joystick.c 2007-06-16 03:54:27.000000000 +0000 +@@ -1682,9 +1682,6 @@ + + fgInitialiseJoysticks (); + +- if ( !fgJoystick ) +- return 0; +- + if ( !fgState.JoysticksInitialised ) + return 0; + From 0a1ad1080cc41a2ce9ab2f445e473e0682e156f7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 16 Jan 2008 00:06:38 +0000 Subject: [PATCH 116/320] Added JasPer JPEG 2000 library svn path=/nixpkgs/branches/stdenv-updates/; revision=10160 --- pkgs/development/libraries/jasper/default.nix | 18 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 23 insertions(+) create mode 100644 pkgs/development/libraries/jasper/default.nix diff --git a/pkgs/development/libraries/jasper/default.nix b/pkgs/development/libraries/jasper/default.nix new file mode 100644 index 000000000000..192e22add6ef --- /dev/null +++ b/pkgs/development/libraries/jasper/default.nix @@ -0,0 +1,18 @@ +args: with args; +stdenv.mkDerivation rec { + name = "jasper-1.900.1"; + + src = fetchurl { + url = "http://www.ece.uvic.ca/~mdadams/jasper/software/${name}.zip"; + sha256 = "154l7zk7yh3v8l2l6zm5s2alvd2fzkp6c9i18iajfbna5af5m43b"; + }; + + buildInputs = [ unzip libjpeg xproto libX11 libICE freeglut mesa libXmu + libXi libXext libXt ]; + configureFlags = "--enable-shared --disable-static --with-x"; + + meta = { + homepage = http://www.ece.uvic.ca/~mdadams/jasper/; + description = "JasPer JPEG2000 Library"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4e8de1db2faa..30866d49315c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1980,6 +1980,11 @@ rec { intltool = intltoolFun {version = "0.36.2";} null; + jasper = import ../development/libraries/jasper { + inherit fetchurl stdenv unzip libjpeg freeglut mesa; + inherit (xlibs) xproto libX11 libICE libXmu libXi libXext libXt; + }; + lablgtk = import ../development/libraries/lablgtk { inherit fetchurl stdenv ocaml pkgconfig; inherit (gtkLibs) gtk; From c7b5286d83a6d2f8e7bded385aaee16d8dbc31ae Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 16 Jan 2008 00:06:43 +0000 Subject: [PATCH 117/320] Added JasPer support to kde4libs svn path=/nixpkgs/branches/stdenv-updates/; revision=10161 --- pkgs/desktops/kde-4/libs/default.nix | 5 +++-- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix index b714977bd732..4c0574c9c74d 100644 --- a/pkgs/desktops/kde-4/libs/default.nix +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -9,14 +9,15 @@ stdenv.mkDerivation rec { }; propagatedBuildInputs = [ - cmake inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto + inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat libtool freetype bzip2 shared_mime_info alsaLib libungif cups - gettext enchant openexr aspell stdenv.gcc.libc + gettext enchant openexr aspell stdenv.gcc.libc jasper ] ++ kdesupport.all; + buildInputs = [ cmake ]; patchPhase = "cp ${findIlmBase} ../cmake/modules/FindIlmBase.cmake; cp $findOpenEXR ../cmake/modules/FindOpenEXR.cmake; sed -e 's@Soprano/DummyModel@Soprano/Util/DummyModel@' -i ../nepomuk/core/resourcemanager.cpp;"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 30866d49315c..2f6440f89c98 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4681,7 +4681,7 @@ rec { shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib - openbabel ocaml facile stdenv poppler_data; + openbabel ocaml facile stdenv poppler_data jasper; cdparanoia = cdparanoiaIII; inherit (xlibs) inputproto kbproto scrnsaverproto xextproto xf86miscproto From 9b6e1c8c08fb90a5ed002e583d80dda11a9d0342 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 16 Jan 2008 00:07:02 +0000 Subject: [PATCH 118/320] Heimdal Kerberos added svn path=/nixpkgs/branches/stdenv-updates/; revision=10162 --- pkgs/desktops/kde-4/libs/default.nix | 2 +- pkgs/development/libraries/kerberos/heimdal.nix | 12 ++++++++++++ pkgs/top-level/all-packages.nix | 6 +++++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 pkgs/development/libraries/kerberos/heimdal.nix diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix index 4c0574c9c74d..83224a9a13ea 100644 --- a/pkgs/desktops/kde-4/libs/default.nix +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -15,7 +15,7 @@ stdenv.mkDerivation rec { libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat libtool freetype bzip2 shared_mime_info alsaLib libungif cups - gettext enchant openexr aspell stdenv.gcc.libc jasper + gettext enchant openexr aspell stdenv.gcc.libc jasper heimdal ] ++ kdesupport.all; buildInputs = [ cmake ]; patchPhase = "cp ${findIlmBase} ../cmake/modules/FindIlmBase.cmake; diff --git a/pkgs/development/libraries/kerberos/heimdal.nix b/pkgs/development/libraries/kerberos/heimdal.nix new file mode 100644 index 000000000000..4564021d1490 --- /dev/null +++ b/pkgs/development/libraries/kerberos/heimdal.nix @@ -0,0 +1,12 @@ +args: with args; +stdenv.mkDerivation rec { + name = "heimdal-1.0.2"; + + src = fetchurl { + url = "http://ftp.pdc.kth.se/pub/heimdal/src/${name}.tar.gz"; + sha256 = "1h4x41lpv2abpv5l3yjd58pfzs0kkp5sbnih9iykhwd6sii1iig5"; + }; + + configureFlags = "--enable-shared --disable-static --with-openldap=${openldap}"; + buildInputs = [ readline db4 openssl openldap cyrus_sasl ]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2f6440f89c98..e1a3fa240c2f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1948,6 +1948,10 @@ rec { inherit aspell; }; + heimdal = import ../development/libraries/kerberos/heimdal.nix { + inherit fetchurl stdenv readline db4 openssl openldap cyrus_sasl; + }; + hsqldb = import ../development/libraries/java/hsqldb { inherit stdenv fetchurl unzip; }; @@ -4677,7 +4681,7 @@ rec { inherit fetchurl fetchsvn zlib perl openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt libtool libusb expat freetype bzip2 cmake cluceneCore libgcrypt gnupg - cppunit cyrus_sasl openldap enchant exiv2 samba nss log4cxx aspell + cppunit cyrus_sasl openldap enchant exiv2 samba nss log4cxx aspell heimdal shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib From fa4e1290dc1f1644cfb278af70ea1116b4086f8f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 16 Jan 2008 00:07:21 +0000 Subject: [PATCH 119/320] gamin added svn path=/nixpkgs/branches/stdenv-updates/; revision=10163 --- pkgs/desktops/kde-4/libs/default.nix | 2 +- pkgs/development/libraries/gamin/default.nix | 12 ++++++++++++ pkgs/top-level/all-packages.nix | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 pkgs/development/libraries/gamin/default.nix diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix index 83224a9a13ea..aaece56a5067 100644 --- a/pkgs/desktops/kde-4/libs/default.nix +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -15,7 +15,7 @@ stdenv.mkDerivation rec { libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat libtool freetype bzip2 shared_mime_info alsaLib libungif cups - gettext enchant openexr aspell stdenv.gcc.libc jasper heimdal + gettext enchant openexr aspell stdenv.gcc.libc jasper heimdal fam ] ++ kdesupport.all; buildInputs = [ cmake ]; patchPhase = "cp ${findIlmBase} ../cmake/modules/FindIlmBase.cmake; diff --git a/pkgs/development/libraries/gamin/default.nix b/pkgs/development/libraries/gamin/default.nix new file mode 100644 index 000000000000..a6ae0bacb22c --- /dev/null +++ b/pkgs/development/libraries/gamin/default.nix @@ -0,0 +1,12 @@ +args: with args; +stdenv.mkDerivation rec { + name = "gamin-0.1.9"; + + src = fetchurl { + url = "http://www.gnome.org/~veillard/gamin/sources/${name}.tar.gz"; + sha256 = "0fgjfyr0nlkpdxj94a4qfm82wypljdyv1b6l56v7i9jdx0hcdqhr"; + }; + + buildInputs = [python pkgconfig glib]; + configureFlags = "--enable-shared --disable-static --disable-debug"; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e1a3fa240c2f..9ced9bfd4939 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1805,6 +1805,11 @@ rec { inherit fetchurl stdenv; }; + gamin = import ../development/libraries/gamin { + inherit fetchurl stdenv python pkgconfig; + inherit (gtkLibs) glib; + }; + geos = import ../development/libraries/geos { lib = lib_unstable; inherit fetchurl fetchsvn stdenv mkDerivationByConfiguration autoconf automake libtool swig which; @@ -4687,6 +4692,7 @@ rec { saneBackends chmlib python libzip gmp sqlite libidn runCommand lib openbabel ocaml facile stdenv poppler_data jasper; cdparanoia = cdparanoiaIII; + fam = gamin; inherit (xlibs) inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite From f96a98c9d8cfc3093e0ea406ed33eeb3be86c893 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 12:57:34 +0000 Subject: [PATCH 120/320] xine-lib: 1.1.9.1, more features. svn path=/nixpkgs/branches/stdenv-updates/; revision=10187 --- .../libraries/xine-lib/default.nix | 37 +++++-------------- pkgs/top-level/all-packages.nix | 3 +- 2 files changed, 12 insertions(+), 28 deletions(-) diff --git a/pkgs/development/libraries/xine-lib/default.nix b/pkgs/development/libraries/xine-lib/default.nix index 0af3732cbae3..ba6880d525a8 100644 --- a/pkgs/development/libraries/xine-lib/default.nix +++ b/pkgs/development/libraries/xine-lib/default.nix @@ -1,31 +1,14 @@ -{ xvideoSupport ? true -, xineramaSupport ? true -, encryptedDVDSupport ? true -, alsaSupport ? true -, stdenv, fetchurl, zlib, x11, pkgconfig -, libXv ? null, libXinerama ? null, libdvdcss ? null, alsaLib ? null -}: +args: with args; -assert xvideoSupport -> libXv != null; -assert xineramaSupport -> libXinerama != null; -assert encryptedDVDSupport -> libdvdcss != null; -assert alsaSupport -> alsaLib != null; - -(stdenv.mkDerivation { - name = "xine-lib-1.1.8"; - builder = ./builder.sh; +(stdenv.mkDerivation rec { + name = "xine-lib-1.1.9.1"; src = fetchurl { - url = mirror://sourceforge/xine/xine-lib-1.1.8.tar.bz2; - sha256 = "03iwhgsf9kj0x5b4fgv7lzc1vj3frk4afh2idgrqskvixjyi37vc"; + url = "mirror://sourceforge/xine/${name}.tar.bz2"; + sha256 = "1rz4k2a9pny2ksqb5diw1ci8ijihpcm0mi8qxp5p7nasgzgqcj82"; }; - buildInputs = [ - x11 pkgconfig - (if xvideoSupport then libXv else null) - (if xineramaSupport then libXinerama else null) - (if alsaSupport then alsaLib else null) - ]; - libXv = if xvideoSupport then libXv else null; - libdvdcss = if encryptedDVDSupport then libdvdcss else null; + buildInputs = [ x11 pkgconfig libXv libXinerama alsaLib mesa aalib SDL + libvorbis libtheora speex ]; + configureFlags = "--with-xv-path=${libXv}/lib"; + NIX_LDFLAGS = "-rpath ${libdvdcss}/lib -L${libdvdcss}/lib -ldvdcss"; propagatedBuildInputs = [zlib]; - patches = [ ./xine-lib-linux-headers-2.6.23.patch ]; -}) // {inherit xineramaSupport libXinerama;} +}) // { xineramaSupport = true; inherit libXinerama; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9ced9bfd4939..837f15b964d0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2468,7 +2468,8 @@ rec { }; xineLib = import ../development/libraries/xine-lib { - inherit fetchurl stdenv zlib x11 libdvdcss alsaLib pkgconfig; + inherit fetchurl stdenv zlib x11 libdvdcss alsaLib pkgconfig mesa aalib SDL + libvorbis libtheora speex; inherit (xlibs) libXv libXinerama; }; From fa5891aa62c3ca6e8343ada84e3f61588317d8d8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 12:57:56 +0000 Subject: [PATCH 121/320] Propagating inputs of heimdal svn path=/nixpkgs/branches/stdenv-updates/; revision=10188 --- pkgs/development/libraries/kerberos/heimdal.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/kerberos/heimdal.nix b/pkgs/development/libraries/kerberos/heimdal.nix index 4564021d1490..12cc50e3505c 100644 --- a/pkgs/development/libraries/kerberos/heimdal.nix +++ b/pkgs/development/libraries/kerberos/heimdal.nix @@ -8,5 +8,5 @@ stdenv.mkDerivation rec { }; configureFlags = "--enable-shared --disable-static --with-openldap=${openldap}"; - buildInputs = [ readline db4 openssl openldap cyrus_sasl ]; + propagatedBuildInputs = [ readline db4 openssl openldap cyrus_sasl ]; } From 1ba2194228beeac9ed0b672d6e29d2c213d30046 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 12:58:07 +0000 Subject: [PATCH 122/320] pth added svn path=/nixpkgs/branches/stdenv-updates/; revision=10189 --- pkgs/development/libraries/pth/default.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 18 insertions(+) create mode 100644 pkgs/development/libraries/pth/default.nix diff --git a/pkgs/development/libraries/pth/default.nix b/pkgs/development/libraries/pth/default.nix new file mode 100644 index 000000000000..631a76224062 --- /dev/null +++ b/pkgs/development/libraries/pth/default.nix @@ -0,0 +1,14 @@ +args: with args; +stdenv.mkDerivation rec { + name = "pth-2.0.7"; + + src = fetchurl { + url = "mirror://gnu/pth/${name}.tar.gz"; + sha256 = "0ckjqw5kz5m30srqi87idj7xhpw6bpki43mj07bazjm2qmh3cdbj"; + }; + + meta = { + description = "The GNU Portable Threads"; + homepage = http://www.gnu.org/software/pth; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 837f15b964d0..6334456e21ad 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2354,6 +2354,10 @@ rec { inherit fetchurl stdenv; }; + pth = import ../development/libraries/pth { + inherit fetchurl stdenv; + }; + qt3 = import ../development/libraries/qt-3 { inherit fetchurl stdenv x11 zlib libjpeg libpng which mysql mesa; inherit (xlibs) xextproto libXft libXrender libXrandr randrproto From 66cba1e312acbfdd9be0641f7cd85a3f1b949cab Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 12:58:31 +0000 Subject: [PATCH 123/320] libassuan added svn path=/nixpkgs/branches/stdenv-updates/; revision=10190 --- pkgs/development/libraries/libassuan/default.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 20 insertions(+) create mode 100644 pkgs/development/libraries/libassuan/default.nix diff --git a/pkgs/development/libraries/libassuan/default.nix b/pkgs/development/libraries/libassuan/default.nix new file mode 100644 index 000000000000..ef0df5184523 --- /dev/null +++ b/pkgs/development/libraries/libassuan/default.nix @@ -0,0 +1,16 @@ +args: with args; +stdenv.mkDerivation rec { + name = "libassuan-1.0.4"; + + src = fetchurl { + url = "ftp://ftp.gnupg.org/gcrypt/libassuan/${name}.tar.bz2"; + sha256 = "1milkb5128nkgvfvfc9yi3qq8d1bvci7b3qmzfibmyh7qga6pwpw"; + }; + + propagatedBuildInputs = [pth]; + + meta = { + description = "Libassuan is the IPC library used by some GnuPG related software"; + homepage = http://www.gnupg.org; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6334456e21ad..39662f80d040 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2008,6 +2008,10 @@ rec { inherit (xlibs) libXp libXau; }; + libassuan = import ../development/libraries/libassuan { + inherit fetchurl stdenv pth; + }; + libavc1394 = import ../development/libraries/libavc1394 { inherit fetchurl stdenv pkgconfig libraw1394; }; From 8e119adbb9efbf00bba92292742aac05388ee0d6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 12:59:06 +0000 Subject: [PATCH 124/320] Added libksba svn path=/nixpkgs/branches/stdenv-updates/; revision=10191 --- .../development/libraries/libksba/default.nix | 19 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 23 insertions(+) create mode 100644 pkgs/development/libraries/libksba/default.nix diff --git a/pkgs/development/libraries/libksba/default.nix b/pkgs/development/libraries/libksba/default.nix new file mode 100644 index 000000000000..573064f28897 --- /dev/null +++ b/pkgs/development/libraries/libksba/default.nix @@ -0,0 +1,19 @@ +args: with args; +stdenv.mkDerivation rec { + name = "libksba-1.0.2"; + + src = fetchurl { + url = "ftp://ftp.gnupg.org/gcrypt/libksba/${name}.tar.bz2"; + sha256 = "1jkjh1daaykkrfq0s4vv8ddf0w8agdvspg9qm0ghjidlrfnsfiwh"; + }; + + propagatedBuildInputs = [libgpgerror]; + + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://www.gnupg.org; + description = "Libksba is a CMS and X.509 access library under + development"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 39662f80d040..2f9262c5ba09 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2128,6 +2128,10 @@ rec { static = true; })); + libksba = import ../development/libraries/libksba { + inherit fetchurl stdenv libgpgerror; + }; + libmad = import ../development/libraries/libmad { inherit fetchurl stdenv; }; From 60f2d474003853732f3b78db52f0cff59e6dd88e Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 12:59:41 +0000 Subject: [PATCH 125/320] Some renaming for future variants svn path=/nixpkgs/branches/stdenv-updates/; revision=10192 --- pkgs/top-level/all-packages.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2f9262c5ba09..edecaca837e8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1805,6 +1805,8 @@ rec { inherit fetchurl stdenv; }; + fam = gamin; + gamin = import ../development/libraries/gamin { inherit fetchurl stdenv python pkgconfig; inherit (gtkLibs) glib; @@ -1953,6 +1955,9 @@ rec { inherit aspell; }; + # TODO : Add MIT Kerberos and let admin choose. + kerberos = heimdal; + heimdal = import ../development/libraries/kerberos/heimdal.nix { inherit fetchurl stdenv readline db4 openssl openldap cyrus_sasl; }; @@ -4699,13 +4704,12 @@ rec { inherit fetchurl fetchsvn zlib perl openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt libtool libusb expat freetype bzip2 cmake cluceneCore libgcrypt gnupg - cppunit cyrus_sasl openldap enchant exiv2 samba nss log4cxx aspell heimdal + cppunit cyrus_sasl openldap enchant exiv2 samba nss log4cxx aspell kerberos shared_mime_info alsaLib libungif cups mesa boost gpgme gettext redland xineLib libgphoto2 djvulibre libogg flac lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib - openbabel ocaml facile stdenv poppler_data jasper; + openbabel ocaml facile stdenv poppler_data jasper fam; cdparanoia = cdparanoiaIII; - fam = gamin; inherit (xlibs) inputproto kbproto scrnsaverproto xextproto xf86miscproto xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite From 4eeee85ad161ed769b8fc89c2ab1ca58ba5f0934 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:00:21 +0000 Subject: [PATCH 126/320] iniparser library added svn path=/nixpkgs/branches/stdenv-updates/; revision=10193 --- .../libraries/iniparser/default.nix | 34 +++++++++++++++++++ .../libraries/iniparser/no-usr.patch | 14 ++++++++ pkgs/top-level/all-packages.nix | 4 +++ 3 files changed, 52 insertions(+) create mode 100644 pkgs/development/libraries/iniparser/default.nix create mode 100644 pkgs/development/libraries/iniparser/no-usr.patch diff --git a/pkgs/development/libraries/iniparser/default.nix b/pkgs/development/libraries/iniparser/default.nix new file mode 100644 index 000000000000..46fe5b6ef033 --- /dev/null +++ b/pkgs/development/libraries/iniparser/default.nix @@ -0,0 +1,34 @@ +args: with args; +stdenv.mkDerivation rec{ + name = "iniparser-3.0b"; + + src = fetchurl { + url = "${meta.homepage}/iniparser3.0b.tar.gz"; + sha256 = "09klyddnqlpbgkv4cmh6ww9q5pv6nf1vfmzw4z256p51rnnlqqwa"; + }; + + patches = ./no-usr.patch; + + buildFlags = "libiniparser.so"; + + installPhase = '' + ensureDir $out/lib + cp libiniparser.so.0 $out/lib + ln -s libiniparser.so.0 $out/lib/libiniparser.so + + ensureDir $out/include + cp src/*.h $out/include + + ensureDir $out/share/doc/${name} + for i in AUTHORS INSTALL LICENSE README; do + bzip2 -c -9 $i > $out/share/doc/${name}/$i.bz2; + done; + cp -r html $out/share/doc/${name} + ''; + + meta = { + homepage = http://ndevilla.free.fr/iniparser; + description = "Free standalone ini file parsing library"; + license = "MIT"; + }; +} diff --git a/pkgs/development/libraries/iniparser/no-usr.patch b/pkgs/development/libraries/iniparser/no-usr.patch new file mode 100644 index 000000000000..28be099b8eec --- /dev/null +++ b/pkgs/development/libraries/iniparser/no-usr.patch @@ -0,0 +1,14 @@ +diff -urN iniparser3.0b.orig/Makefile iniparser3.0b/Makefile +--- iniparser3.0b.orig/Makefile 2008-01-16 19:56:08.000000000 +0100 ++++ iniparser3.0b/Makefile 2008-01-16 19:56:49.000000000 +0100 +@@ -11,8 +11,8 @@ + ARFLAGS = rcv + + SHLD = ${CC} ${CFLAGS} +-LDSHFLAGS = -shared -Wl,-Bsymbolic -Wl,-rpath -Wl,/usr/lib -Wl,-rpath,/usr/lib +-LDFLAGS = -Wl,-rpath -Wl,/usr/lib -Wl,-rpath,/usr/lib ++LDSHFLAGS = -shared ++LDFLAGS = + + # Set RANLIB to ranlib on systems that require it (Sun OS < 4, Mac OSX) + # RANLIB = ranlib diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index edecaca837e8..e9cc18c9034d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1987,6 +1987,10 @@ rec { inherit fetchurl stdenv x11 libjpeg libtiff libungif libpng bzip2; }; + iniparser = import ../development/libraries/iniparser { + inherit fetchurl stdenv; + }; + intltoolFun = lib.sumArgs (selectVersion ../development/tools/misc/intltool) { inherit fetchurl stdenv lib builderDefs stringsWithDeps perl perlXMLParser; From 8db01883b83b917d6276d11c8e564e4dee526930 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:00:51 +0000 Subject: [PATCH 127/320] libunwind added svn path=/nixpkgs/branches/stdenv-updates/; revision=10194 --- pkgs/development/libraries/libunwind/default.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 18 insertions(+) create mode 100644 pkgs/development/libraries/libunwind/default.nix diff --git a/pkgs/development/libraries/libunwind/default.nix b/pkgs/development/libraries/libunwind/default.nix new file mode 100644 index 000000000000..52ed30c0ae96 --- /dev/null +++ b/pkgs/development/libraries/libunwind/default.nix @@ -0,0 +1,14 @@ +args: with args; +stdenv.mkDerivation rec { + name = "libunwind-0.98.6"; + src = fetchurl { + url = "http://download.savannah.nongnu.org/releases/libunwind/${name}.tar.gz"; + sha256 = "1qfxqkyx4r5dmwajyhvsyyl8zwxs6n2rcg7a61fgfdfp0gxvpzgx"; + }; + configureFlags = "--enable-shared --disable-static"; + meta = { + homepage = http://www.nongnu.org/libunwind; + description = "The primary goal of this project is to define a portable + and efficient API to determine the call-chain of a program"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e9cc18c9034d..8878eb6c3f6c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2209,6 +2209,10 @@ rec { inherit fetchurl stdenv; }; + libunwind = import ../development/libraries/libunwind { + inherit fetchurl stdenv; + }; + libvorbis = import ../development/libraries/libvorbis { inherit fetchurl stdenv libogg; }; From 16d153bea5dc3a7c182aeed6b76263f9a60204a6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:01:19 +0000 Subject: [PATCH 128/320] gnupg2 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10195 --- pkgs/tools/security/gnupg2/default.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 21 insertions(+) create mode 100644 pkgs/tools/security/gnupg2/default.nix diff --git a/pkgs/tools/security/gnupg2/default.nix b/pkgs/tools/security/gnupg2/default.nix new file mode 100644 index 000000000000..f6e22bec51d4 --- /dev/null +++ b/pkgs/tools/security/gnupg2/default.nix @@ -0,0 +1,16 @@ +args: with args; +stdenv.mkDerivation { + name = "gnupg-2.0.8"; + src = fetchurl { + url = ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/gnupg-2.0.8.tar.bz2; + sha256 = "04v9s92xph1hrhac49yyrgzdwjqshs2zawvjbi3jc2klwjpi1wqn"; + }; + buildInputs = [ readline openldap bzip2 zlib libgpgerror pth libgcrypt + libassuan libksba libusb curl ]; + + meta = { + description = "A free implementation of the OpenPGP standard for encrypting + and signing data, v2"; + homepage = http://www.gnupg.org/; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8878eb6c3f6c..c433abf9ef1e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -487,6 +487,11 @@ rec { ideaSupport = true; # enable for IDEA crypto support }; + gnupg2 = import ../tools/security/gnupg2 { + inherit fetchurl stdenv readline openldap bzip2 zlib libgpgerror pth + libgcrypt libassuan libksba libusb curl; + }; + gnuplot = import ../tools/graphics/gnuplot { inherit fetchurl stdenv zlib gd texinfo; }; From 54e429d6e1d6ae1caba2cb0afd588b6c0b007086 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:01:31 +0000 Subject: [PATCH 129/320] More dependencies for gpgme svn path=/nixpkgs/branches/stdenv-updates/; revision=10196 --- pkgs/development/libraries/gpgme/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/gpgme/default.nix b/pkgs/development/libraries/gpgme/default.nix index 68bbbc409043..64f1a746b03c 100644 --- a/pkgs/development/libraries/gpgme/default.nix +++ b/pkgs/development/libraries/gpgme/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, libgpgerror, gnupg}: +args: with args; stdenv.mkDerivation { name = "gpgme-1.1.4"; @@ -6,5 +6,5 @@ stdenv.mkDerivation { url = ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-1.1.4.tar.bz2; sha256 = "0ncrv7p33rjq1avkxpp9x0gz6wna9y3b3dmw6nv366n5mgvxmpg8"; }; - buildInputs = [libgpgerror gnupg]; + buildInputs = [libgpgerror gnupg gnupg2 pkgconfig glib pth]; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c433abf9ef1e..c4bc196155ad 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1879,7 +1879,8 @@ rec { }; gpgme = import ../development/libraries/gpgme { - inherit fetchurl stdenv libgpgerror gnupg; + inherit fetchurl stdenv libgpgerror pkgconfig pth gnupg gnupg2; + inherit (gtkLibs) glib; }; # gnu scientific library From 452c001945cb443120e4cdc3db680e9c909bac5a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:01:45 +0000 Subject: [PATCH 130/320] Samba updated svn path=/nixpkgs/branches/stdenv-updates/; revision=10197 --- pkgs/servers/samba/default.nix | 17 ++++++++--------- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix index e94c2d1c5547..db001c64b9d3 100644 --- a/pkgs/servers/samba/default.nix +++ b/pkgs/servers/samba/default.nix @@ -1,17 +1,16 @@ args: with args; -stdenv.mkDerivation { - name = "samba-3.0.26a"; +stdenv.mkDerivation rec { + name = "samba-3.0.28"; src = fetchurl { - url = http://us1.samba.org/samba/ftp/stable/samba-3.0.26a.tar.gz; - sha256 = "41e11f69288b2291f12f8db093e2c55dc1360555d4542c83c0758c4c7a3d4d37"; + url = "http://us1.samba.org/samba/ftp/stable/${name}.tar.gz"; + sha256 = "13nr4mvh6vxgl7nb94qnqx3njcyd10cf4ji18srlkizpp49r5byw"; }; - buildInputs = [readline pam openldap]; - configureFlags = [" --with-pam " " --with-smbmount " - " --datadir=\$out/share " " --with-acl-support " - " --with-aio-support "]; + buildInputs = [readline pam openldap kerberos popt iniparser libunwind fam]; + configureFlags = ''--with-pam --with-smbmount --datadir=$out/share + --with-aio-support --with-libiconv=${stdenv.gcc.libc}''; postUnpack = "sourceRoot=\$sourceRoot/source"; - postInstall = "rm -rf \$out/var ; ln -s /var/samba $out/var "; + postInstall = ''rm -rf $out/var ; ln -s /var/samba $out/var ''; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c4bc196155ad..b2b88b917aff 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2980,7 +2980,8 @@ rec { }; samba = import ../servers/samba { - inherit stdenv fetchurl readline openldap pam; + inherit stdenv fetchurl readline openldap pam kerberos popt iniparser + libunwind acl fam; }; squid = import ../servers/squid { From 4fa42beccbb782083ee971230ee47c6e52015016 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:02:11 +0000 Subject: [PATCH 131/320] Typo fix in renaming... svn path=/nixpkgs/branches/stdenv-updates/; revision=10198 --- pkgs/desktops/kde-4/libs/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/desktops/kde-4/libs/default.nix b/pkgs/desktops/kde-4/libs/default.nix index aaece56a5067..1628e5d185a2 100644 --- a/pkgs/desktops/kde-4/libs/default.nix +++ b/pkgs/desktops/kde-4/libs/default.nix @@ -15,7 +15,7 @@ stdenv.mkDerivation rec { libXrender libXScrnSaver libXt libXtst libXv libXxf86misc libxkbfile zlib perl qt openssl pcre pkgconfig libjpeg libpng libtiff libxml2 libxslt expat libtool freetype bzip2 shared_mime_info alsaLib libungif cups - gettext enchant openexr aspell stdenv.gcc.libc jasper heimdal fam + gettext enchant openexr aspell stdenv.gcc.libc jasper kerberos fam ] ++ kdesupport.all; buildInputs = [ cmake ]; patchPhase = "cp ${findIlmBase} ../cmake/modules/FindIlmBase.cmake; From ed035b32993fdcb5de5b43738d8ed879248897bb Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:02:41 +0000 Subject: [PATCH 132/320] pimlibs are compilable now svn path=/nixpkgs/branches/stdenv-updates/; revision=10199 --- pkgs/desktops/kde-4/pimlibs/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/desktops/kde-4/pimlibs/default.nix b/pkgs/desktops/kde-4/pimlibs/default.nix index 1ea2e99615b1..14cdfba02f48 100644 --- a/pkgs/desktops/kde-4/pimlibs/default.nix +++ b/pkgs/desktops/kde-4/pimlibs/default.nix @@ -1,12 +1,13 @@ args: with args; -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "kdepimlibs-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdepimlibs-4.0.0.tar.bz2; + url = "mirror://kde/stable/4.0/src/${name}.tar.bz2"; sha256 = "0vixx2vh7qgysnbzvykf20362p22jzvl8snpqaknay3v3b2k0br0"; }; propagatedBuildInputs = [kdelibs boost gpgme cyrus_sasl openldap]; + buildInputs = [cmake]; } From 2412e8364b3bca62d021fb1b87bf2a86cad3ab99 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:03:21 +0000 Subject: [PATCH 133/320] Added samba support to kde4-runtime svn path=/nixpkgs/branches/stdenv-updates/; revision=10200 --- pkgs/desktops/kde-4/runtime/default.nix | 10 ++++++---- pkgs/desktops/kde-4/runtime/phonon.patch | 13 +++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 pkgs/desktops/kde-4/runtime/phonon.patch diff --git a/pkgs/desktops/kde-4/runtime/default.nix b/pkgs/desktops/kde-4/runtime/default.nix index 5a0d685c9bcd..c0bd67157765 100644 --- a/pkgs/desktops/kde-4/runtime/default.nix +++ b/pkgs/desktops/kde-4/runtime/default.nix @@ -1,14 +1,16 @@ args: with args; -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "kdebase-runtime-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdebase-runtime-4.0.0.tar.bz2; + url = "mirror://kde/stable/4.0/src/${name}.tar.bz2"; sha256 = "0svsn9gzg3ka77j7z71fy502a09w9gp9jd2q2y1w07ahpdil5p7h"; }; - propagatedBuildInputs = [kdepimlibs libusb xineLib]; - patchPhase = "fixCmakeDbusCalls"; + propagatedBuildInputs = [kdepimlibs libusb xineLib samba]; + buildInputs = [cmake]; + phononPatch = ./phonon.patch; + patchPhase = "fixCmakeDbusCalls; patch -p0 < ${phononPatch}"; } diff --git a/pkgs/desktops/kde-4/runtime/phonon.patch b/pkgs/desktops/kde-4/runtime/phonon.patch new file mode 100644 index 000000000000..6905eee8553e --- /dev/null +++ b/pkgs/desktops/kde-4/runtime/phonon.patch @@ -0,0 +1,13 @@ +--- ../phonon/CMakeLists.txt 2007/12/27 15:43:14 753486 ++++ ../phonon/CMakeLists.txt 2008/01/08 10:21:31 758568 +@@ -34,7 +34,9 @@ + macro_log_feature(TRUE "Xine" "xine-lib v${XINE_VERSION} was found on your system. This version is known to have problems when a device is unplugged. Consider upgrading to version 1.1.9 or above." "http://sourceforge.net/project/showfiles.php?group_id=9655&package_id=9732") + endif(XINE_BUGFIX_VERSION LESS 5) + else(XINE_BUGFIX_VERSION LESS 7) +- macro_log_feature(TRUE "Xine" "xine-lib v${XINE_VERSION} was found on your system. This version is known to have problems when playing short sounds. Consider upgrading to version 1.1.9 or above." "http://sourceforge.net/project/showfiles.php?group_id=9655&package_id=9732") ++ if(XINE_BUGFIX_VERSION LESS 9) ++ macro_log_feature(TRUE "Xine" "xine-lib v${XINE_VERSION} was found on your system. This version is known to have problems when playing short sounds. Consider upgrading to version 1.1.9 or above." "http://sourceforge.net/project/showfiles.php?group_id=9655&package_id=9732") ++ endif(XINE_BUGFIX_VERSION LESS 9) + endif(XINE_BUGFIX_VERSION LESS 7) + else(XINE_MINOR_VERSION LESS 2 AND XINE_BUGFIX_VERSION LESS 90) + macro_log_feature(FALSE "Xine" "xine-lib v${XINE_VERSION} was found on your system. This version contains major changes compared to 1.1.x and has not been tested properly for use with this backend. Consider downgrading to version 1.1.9." "http://sourceforge.net/project/showfiles.php?group_id=9655&package_id=9732") From 4bfa9fdc40677f265603f4185c6d734a179b4120 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:03:56 +0000 Subject: [PATCH 134/320] kde4.base: added cmake to inputs svn path=/nixpkgs/branches/stdenv-updates/; revision=10201 --- pkgs/desktops/kde-4/base/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/desktops/kde-4/base/default.nix b/pkgs/desktops/kde-4/base/default.nix index 4fff839769b5..a91b30542810 100644 --- a/pkgs/desktops/kde-4/base/default.nix +++ b/pkgs/desktops/kde-4/base/default.nix @@ -9,4 +9,5 @@ stdenv.mkDerivation { }; propagatedBuildInputs = [kdepimlibs libusb]; + buildInputs = [cmake]; } From a2705398ffb3555777d615d77fe3f86ad2931e4d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:04:21 +0000 Subject: [PATCH 135/320] kde4.workspace updated svn path=/nixpkgs/branches/stdenv-updates/; revision=10202 --- pkgs/desktops/kde-4/workspace/builder.sh | 9 --------- pkgs/desktops/kde-4/workspace/default.nix | 6 ++++-- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 5 insertions(+), 12 deletions(-) delete mode 100755 pkgs/desktops/kde-4/workspace/builder.sh diff --git a/pkgs/desktops/kde-4/workspace/builder.sh b/pkgs/desktops/kde-4/workspace/builder.sh deleted file mode 100755 index f5a5b5a90bf8..000000000000 --- a/pkgs/desktops/kde-4/workspace/builder.sh +++ /dev/null @@ -1,9 +0,0 @@ -source ${stdenv}/setup - -myPatchPhase() -{ - fixCmakeDbusCalls - sed -e '/^#define HAS_RANDR_1_2 1$/d' -i ../kcontrol/randr/randr.h -} -patchPhase=myPatchPhase -genericBuild diff --git a/pkgs/desktops/kde-4/workspace/default.nix b/pkgs/desktops/kde-4/workspace/default.nix index a5929785aecd..b6740640c49e 100644 --- a/pkgs/desktops/kde-4/workspace/default.nix +++ b/pkgs/desktops/kde-4/workspace/default.nix @@ -2,12 +2,14 @@ args: with args; stdenv.mkDerivation { name = "kdebase-workspace-4.0.0"; - builder = ./builder.sh; src = fetchurl { url = mirror://kde/stable/4.0/src/kdebase-workspace-4.0.0.tar.bz2; sha256 = "08sgp7jaqljdxwsgr5lyyfd6w734yv24zswps1mchmhj01vz1fcg"; }; - buildInputs = [kdelibs kdepimlibs stdenv.gcc.libc]; + propagatedBuildInputs = [kdelibs kdepimlibs stdenv.gcc.libc libusb + libpthreadstubs]; + buildInputs = [cmake]; + patchPhase = "fixCmakeDbusCalls"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b2b88b917aff..e09b617b0023 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4730,7 +4730,7 @@ rec { xf86vidmodeproto xineramaproto xproto libICE libX11 libXau libXcomposite libXcursor libXdamage libXdmcp libXext libXfixes libXft libXi libXpm libXrandr libXrender libXScrnSaver libXt libXtst libXv libXxf86misc - libxkbfile libXinerama; + libxkbfile libXinerama libpthreadstubs; inherit (gtkLibs) glib; qt = qt4; dbus = dbus_alts.withX11; From eae106046db0a036a025de45645ccab24801d0b4 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:09:37 +0000 Subject: [PATCH 136/320] remove 2.6.22-paravirt-nvidia.patch svn path=/nixpkgs/branches/stdenv-updates/; revision=10203 --- pkgs/os-specific/linux/kernel/2.6.22.nix | 3 --- pkgs/os-specific/linux/kernel/2.6.23.1.nix | 3 --- 2 files changed, 6 deletions(-) diff --git a/pkgs/os-specific/linux/kernel/2.6.22.nix b/pkgs/os-specific/linux/kernel/2.6.22.nix index c3d167f6b19f..36158a955cde 100644 --- a/pkgs/os-specific/linux/kernel/2.6.22.nix +++ b/pkgs/os-specific/linux/kernel/2.6.22.nix @@ -6,9 +6,6 @@ args: src_hash = { sha256 = "0kh196qzm54mvnbrdr9s2q86l9yn2321gnsl5xq44ai2idqp044g"; }; systemPatches = [ - { name = "paravirt-nvidia"; - patch = ./2.6.22-paravirt-nvidia.patch; - } { name = "fbsplash-0.9.2-r5-2.6.21"; patch = args.fetchurl { url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; diff --git a/pkgs/os-specific/linux/kernel/2.6.23.1.nix b/pkgs/os-specific/linux/kernel/2.6.23.1.nix index 3d4244a74dae..5b014b2591e0 100644 --- a/pkgs/os-specific/linux/kernel/2.6.23.1.nix +++ b/pkgs/os-specific/linux/kernel/2.6.23.1.nix @@ -6,9 +6,6 @@ args: src_hash = { sha256 = "0737g83h7jbrlss8782b17mhc3nfn8qfbh5s71flz8pjxmbbmg1m"; }; systemPatches = [ - { name = "paravirt-nvidia"; - patch = ./2.6.22-paravirt-nvidia.patch; - } { # resume with resume=swap:/dev/xx name = "tux on ice"; # (swsusp2) patch = args.fetchurl { From 25630eee9e11c64f01f5c5b8b36dccb07f4d817b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:14:20 +0000 Subject: [PATCH 137/320] Removed kde4.pim from list svn path=/nixpkgs/branches/stdenv-updates/; revision=10204 --- pkgs/desktops/kde-4/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/desktops/kde-4/default.nix b/pkgs/desktops/kde-4/default.nix index 3e96185beed0..28b792f39967 100644 --- a/pkgs/desktops/kde-4/default.nix +++ b/pkgs/desktops/kde-4/default.nix @@ -16,7 +16,8 @@ rec { extragear_plasma = import ./extragear (fullargs // { kdeworkspace = workspace; }); support = import ./support args; decibel = import ./decibel fullargs; - pim = import ./pim (fullargs // {kdeworkspace = workspace; }); +# kdepim is not included in KDE-4.0.0 + #pim = import ./pim (fullargs // {kdeworkspace = workspace; }); env = kde_pkgs: with args; [ (runCommand "kde-env" { From dc15788487eb655aeca5f049cc67a2e30afcf6c7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 17 Jan 2008 13:29:33 +0000 Subject: [PATCH 138/320] powerpc support removed svn path=/nixpkgs/branches/stdenv-updates/; revision=10205 --- pkgs/top-level/build-for-release.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pkgs/top-level/build-for-release.nix b/pkgs/top-level/build-for-release.nix index 6b9d91981fde..e5f8e3a466cf 100644 --- a/pkgs/top-level/build-for-release.nix +++ b/pkgs/top-level/build-for-release.nix @@ -19,10 +19,6 @@ let { ; }; - powerpcLinuxPkgs = {inherit (allPackages {system = "powerpc-linux";}) - aterm - ;}; - body = [ i686LinuxPkgs x86_64LinuxPkgs From dc2b4f3ec7ee6bcef0f599303665052ab6f9094b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:08:32 +0000 Subject: [PATCH 139/320] libarchive added svn path=/nixpkgs/branches/stdenv-updates/; revision=10236 --- pkgs/development/libraries/libarchive/default.nix | 15 +++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 19 insertions(+) create mode 100644 pkgs/development/libraries/libarchive/default.nix diff --git a/pkgs/development/libraries/libarchive/default.nix b/pkgs/development/libraries/libarchive/default.nix new file mode 100644 index 000000000000..c7dc2b39389e --- /dev/null +++ b/pkgs/development/libraries/libarchive/default.nix @@ -0,0 +1,15 @@ +args: with args; +stdenv.mkDerivation rec { + name = "libarchive-2.4.11"; + + src = fetchurl { + url = "http://FIXME_dont_remember/${name}.tar.gz"; + sha256 = "1iq5hs4hbqyl6sqiqlaj3j89vpfqx6zv974c965nxjvmwy816dbz"; + }; + + buildInputs = [zlib]; + + meta = { + description = "A library for reading and writing streaming archives"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e09b617b0023..cee77925d6eb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2023,6 +2023,10 @@ rec { inherit (xlibs) libXp libXau; }; + libarchive = import ../development/libraries/libarchive { + inherit fetchurl stdenv zlib; + }; + libassuan = import ../development/libraries/libassuan { inherit fetchurl stdenv pth; }; From e35275ae61810dd9d4a7daa9662d01c2c7a4022a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:08:39 +0000 Subject: [PATCH 140/320] cfitsio added svn path=/nixpkgs/branches/stdenv-updates/; revision=10237 --- pkgs/development/libraries/cfitsio/default.nix | 13 +++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 17 insertions(+) create mode 100644 pkgs/development/libraries/cfitsio/default.nix diff --git a/pkgs/development/libraries/cfitsio/default.nix b/pkgs/development/libraries/cfitsio/default.nix new file mode 100644 index 000000000000..5fb672b8ff18 --- /dev/null +++ b/pkgs/development/libraries/cfitsio/default.nix @@ -0,0 +1,13 @@ +args: with args; +stdenv.mkDerivation { + name = "cfitsio-3.060"; + src = fetchurl { + url = ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/cfitsio3060.tar.gz; + sha256 = "0ijbjpl5v35m538sa3c82qgja697kddjbj7yxx64ka7pdsdnfx9l"; + }; +# Shared-only build + buildFlags = "shared"; + patchPhase = '' + sed -e '/^install:/s/libcfitsio.a //' -e 's@/bin/@@g' -i Makefile.in + ''; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cee77925d6eb..2cc7b2f2251a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1790,6 +1790,10 @@ rec { lib = lib_unstable; }; + cfitsio = import ../development/libraries/cfitsio { + inherit fetchurl stdenv; + }; + fontconfig = import ../development/libraries/fontconfig { inherit fetchurl stdenv freetype expat; }; From 149678e9b6053a36405e353a7f6251b4251a2b1c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:08:51 +0000 Subject: [PATCH 141/320] libnova added svn path=/nixpkgs/branches/stdenv-updates/; revision=10238 --- pkgs/development/libraries/libnova/default.nix | 15 +++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 19 insertions(+) create mode 100644 pkgs/development/libraries/libnova/default.nix diff --git a/pkgs/development/libraries/libnova/default.nix b/pkgs/development/libraries/libnova/default.nix new file mode 100644 index 000000000000..805a1f444520 --- /dev/null +++ b/pkgs/development/libraries/libnova/default.nix @@ -0,0 +1,15 @@ +args: with args; +stdenv.mkDerivation rec { + name = "libnova-0.12.1"; + + src = fetchurl { + url = "mirror://sf/libnova/${name}.tar.gz"; + sha256 = "0bs6c45q4qkrns36qndl8vns5gvhgpd90hi68bhah4r4hrg48lw0"; + }; + configureFlags = "--enable-shared --disable-static"; + + meta = { + description = "Celestial Mechanics, Astrometry and Astrodynamics Library"; + homepage = http://libnova.sf.net; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2cc7b2f2251a..d25c46cc6886 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2167,6 +2167,10 @@ rec { inherit fetchurl stdenv; }; + libnova = import ../development/libraries/libnova { + inherit fetchurl stdenv; + }; + libogg = import ../development/libraries/libogg { inherit fetchurl stdenv; }; From 9ba0ec1be90b2c339bd6ca6fbbf8eb4892c2ed5c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:08:59 +0000 Subject: [PATCH 142/320] indilib added svn path=/nixpkgs/branches/stdenv-updates/; revision=10239 --- pkgs/development/libraries/indilib/default.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 20 insertions(+) create mode 100644 pkgs/development/libraries/indilib/default.nix diff --git a/pkgs/development/libraries/indilib/default.nix b/pkgs/development/libraries/indilib/default.nix new file mode 100644 index 000000000000..651cb6309449 --- /dev/null +++ b/pkgs/development/libraries/indilib/default.nix @@ -0,0 +1,16 @@ +args: with args; +stdenv.mkDerivation { + name = "indilib-0.5"; + + src = fetchurl { + url = mirror://sf/indi/indilib-0.5.tar.gz; + sha256 = "02km37m3d2l8c9wnab24zm2k6a3l8h2fali74jhm4z3khwr277ad"; + }; + + propagatedBuildInputs = [cfitsio libusb zlib]; + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://indi.sf.net; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d25c46cc6886..b9940b6b000c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1997,6 +1997,10 @@ rec { inherit fetchurl stdenv x11 libjpeg libtiff libungif libpng bzip2; }; + indilib = import ../development/libraries/indilib { + inherit fetchurl stdenv cfitsio libusb zlib; + }; + iniparser = import ../development/libraries/iniparser { inherit fetchurl stdenv; }; From b1d7eea5b194866da151d582f612618e04268d50 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:09:19 +0000 Subject: [PATCH 143/320] xine should work now svn path=/nixpkgs/branches/stdenv-updates/; revision=10240 --- pkgs/applications/video/xine-ui/default.nix | 9 +++++---- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/video/xine-ui/default.nix b/pkgs/applications/video/xine-ui/default.nix index ff0aa091400e..52a4a7736079 100644 --- a/pkgs/applications/video/xine-ui/default.nix +++ b/pkgs/applications/video/xine-ui/default.nix @@ -1,5 +1,4 @@ -{stdenv, fetchurl, pkgconfig, x11, xineLib, libpng}: - +args: with args; stdenv.mkDerivation { name = "xine-ui-0.99.5"; src = fetchurl { @@ -7,10 +6,12 @@ stdenv.mkDerivation { sha256 = "07jywadk6fhk3wn1j9m0cfa0zy0i17kz0nyyxwa3shvhznfals0k"; }; buildInputs = [ - pkgconfig x11 xineLib libpng + pkgconfig x11 xineLib libpng libXext libXv readline ncurses libXxf86vm + libXtst inputproto curl (if xineLib.xineramaSupport then xineLib.libXinerama else null) ]; - configureFlags = "--without-readline --disable-xft"; + configureFlags = "--with-readline=${readline}"; + NIX_LDFLAGS="-L${libXext}/lib -lXext"; meta = { description = "Xlib-based interface to Xine, a video player"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b9940b6b000c..735d216f00c6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4541,7 +4541,8 @@ rec { }; xineUI = import ../applications/video/xine-ui { - inherit fetchurl stdenv pkgconfig x11 xineLib libpng; + inherit fetchurl stdenv pkgconfig x11 xineLib libpng readline ncurses curl; + inherit (xorg) libXext libXv libXxf86vm libXtst inputproto; }; xmms = import ../applications/audio/xmms { From cb26e5a5d4f2566c7b2170fa66e114d17a66dca7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:09:45 +0000 Subject: [PATCH 144/320] djvulibre: Qt3 frontend is optional svn path=/nixpkgs/branches/stdenv-updates/; revision=10241 --- pkgs/applications/misc/djvulibre/default.nix | 5 +---- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/misc/djvulibre/default.nix b/pkgs/applications/misc/djvulibre/default.nix index 611f6f08909a..e2082088fc99 100644 --- a/pkgs/applications/misc/djvulibre/default.nix +++ b/pkgs/applications/misc/djvulibre/default.nix @@ -1,7 +1,4 @@ -{stdenv, fetchurl, -qt, libX11, libjpeg, libtiff, libpng, ghostscript, zlib, libungif, -x11, mesa -}: +args: with args; stdenv.mkDerivation { name = "djvulibre-3.5.19"; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 735d216f00c6..5c89c706aaee 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3794,7 +3794,7 @@ rec { djvulibre = import ../applications/misc/djvulibre { inherit stdenv fetchurl libjpeg libtiff libungif zlib ghostscript libpng x11 mesa; - qt = qt3; + qt = if (getConfig ["djvulibre" "qt3Frontend"] true) then qt3 else null; inherit (xlibs) libX11; }; From dd0a953dee0e983291b5324e316f0e88a9d0c2d8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:09:53 +0000 Subject: [PATCH 145/320] Added old flac (as an option): kde4 needs it svn path=/nixpkgs/branches/stdenv-updates/; revision=10242 --- pkgs/applications/audio/flac/default.nix | 27 ++++++++++++++---------- pkgs/top-level/all-packages.nix | 4 +++- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix index e61fd05ce389..b1636855aae9 100644 --- a/pkgs/applications/audio/flac/default.nix +++ b/pkgs/applications/audio/flac/default.nix @@ -1,11 +1,16 @@ -{stdenv, fetchurl, libogg}: - -stdenv.mkDerivation { - name = "flac-1.2.1"; - src = fetchurl { - url = http://downloads.xiph.org/releases/flac/flac-1.2.1.tar.gz; - sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; - }; - - buildInputs = [libogg] ; -} +args: with args; +let + flacFun = version: hash: + stdenv.mkDerivation rec { + name = "flac-${version}"; + src = fetchurl ({ + url = "http://downloads.xiph.org/releases/flac/${name}.tar.gz"; + } // hash); + buildInputs = [libogg]; + }; +in +stdenv.lib.listOfListsToAttrs [ + [ "default" (flacFun "1.2.1" { sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; }) ] + [ "1.2.1" (flacFun "1.2.1" { sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; }) ] + [ "1.1.2" (flacFun "1.1.2" { md5 = "2bfc127cdda02834d0491ab531a20960"; }) ] +] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5c89c706aaee..743b00b87f29 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3920,10 +3920,12 @@ rec { firefox3b1Wrapper = lowPrio (wrapFirefox firefox3b1 ""); firefox3b1BinWrapper = lowPrio (wrapFirefox firefox3b1Bin ""); - flac = import ../applications/audio/flac { + flacAlts = import ../applications/audio/flac { inherit fetchurl stdenv libogg; }; + flac = getVersion "flac" flacAlts; + flashplayer = flashplayer9; flashplayer7 = import ../applications/networking/browsers/mozilla-plugins/flashplayer-7 { From 7c4ac4d14bb154181207d7d7532596fe8bbfe66e Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 22 Jan 2008 13:10:14 +0000 Subject: [PATCH 146/320] kde-4: l10n added, various updates svn path=/nixpkgs/branches/stdenv-updates/; revision=10243 --- pkgs/desktops/kde-4/default.nix | 3 +- pkgs/desktops/kde-4/edu/default.nix | 5 +- pkgs/desktops/kde-4/extragear/default.nix | 9 ++-- pkgs/desktops/kde-4/games/default.nix | 3 +- pkgs/desktops/kde-4/graphics/default.nix | 5 +- pkgs/desktops/kde-4/l10n/default.nix | 60 ++++++++++++++++++++++ pkgs/desktops/kde-4/multimedia/default.nix | 4 +- pkgs/desktops/kde-4/toys/default.nix | 3 +- pkgs/desktops/kde-4/utils/default.nix | 3 +- pkgs/top-level/all-packages.nix | 8 +-- 10 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 pkgs/desktops/kde-4/l10n/default.nix diff --git a/pkgs/desktops/kde-4/default.nix b/pkgs/desktops/kde-4/default.nix index 28b792f39967..11554c9955ea 100644 --- a/pkgs/desktops/kde-4/default.nix +++ b/pkgs/desktops/kde-4/default.nix @@ -2,6 +2,7 @@ args: rec { fullargs = args // { kdelibs = libs; kdepimlibs = pimlibs; kdebase = base; kderuntime = runtime; }; libs = import ./libs (args // { kdesupport = support; }); + l10n = import ./l10n (args // {kdelibs = libs;}); pimlibs = import ./pimlibs (args // { kdelibs = libs; }); graphics = import ./graphics (fullargs // { kdeworkspace = workspace; } ); multimedia = import ./multimedia (fullargs // { kdeworkspace = workspace; } ); @@ -30,5 +31,5 @@ rec { echo \"#!/bin/sh\" > \${scriptPath} echo \"echo -n export KDEDIRS=\${KDEDIRS}\" >> \${scriptPath} chmod +x \${scriptPath} - ")] ++ kde_pkgs ++ support.all ++ [shared_mime_info qt]; + ")] ++ kde_pkgs ++ support.all ++ [shared_mime_info qt xprop xset]; } diff --git a/pkgs/desktops/kde-4/edu/default.nix b/pkgs/desktops/kde-4/edu/default.nix index 77fe86e21784..2a2183000728 100644 --- a/pkgs/desktops/kde-4/edu/default.nix +++ b/pkgs/desktops/kde-4/edu/default.nix @@ -8,8 +8,9 @@ stdenv.mkDerivation rec { sha256 = "1wjy1rm7aiib1lv61wx7mcbkbpkk6phcz1q6dy51x0hfrc3rdkg4"; }; - buildInputs = [kdelibs kdepimlibs boost readline openbabel ocaml - libusb facile python]; + propagatedBuildInputs = [kdepimlibs boost readline openbabel ocaml libusb + facile python indilib libnova]; + buildInputs = [cmake]; myCmakeFiles = ./myCmakeFiles; patchPhase = " cp ${myCmakeFiles}/* ../cmake/modules diff --git a/pkgs/desktops/kde-4/extragear/default.nix b/pkgs/desktops/kde-4/extragear/default.nix index 93e41c6fbfab..5bab882eff20 100644 --- a/pkgs/desktops/kde-4/extragear/default.nix +++ b/pkgs/desktops/kde-4/extragear/default.nix @@ -8,7 +8,10 @@ stdenv.mkDerivation { sha256 = "19gmvqkal11gg67gfmdivxbhwvggm2i6ad642984d97yicms7s9k"; }; - buildInputs = [ kdeworkspace kdebase ]; - patchPhase = " - sed -e 's@ Date: Wed, 23 Jan 2008 16:33:41 +0000 Subject: [PATCH 147/320] dbus-glib nix-expr syntax changed svn path=/nixpkgs/branches/stdenv-updates/; revision=10261 --- pkgs/development/libraries/dbus-glib/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/dbus-glib/default.nix b/pkgs/development/libraries/dbus-glib/default.nix index e72ca406509d..8324980126ca 100644 --- a/pkgs/development/libraries/dbus-glib/default.nix +++ b/pkgs/development/libraries/dbus-glib/default.nix @@ -1,9 +1,9 @@ args: with args; -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "dbus-glib-0.74"; src = fetchurl { - url = http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-0.74.tar.gz; + url = "${meta.homepage}/releases/dbus-glib/${name}.tar.gz"; sha256 = "1qmbnd9xgg7vahlfywd8sfd9yqhx8jdyczz3cshfsd4qc76xhw78"; }; inherit dbus glib; From 8c88f15884a939508c7735cc415767ea395d8bda Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 16:33:46 +0000 Subject: [PATCH 148/320] kdelibs: syntax changed svn path=/nixpkgs/branches/stdenv-updates/; revision=10262 --- pkgs/desktops/kde/kdelibs/default.nix | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pkgs/desktops/kde/kdelibs/default.nix b/pkgs/desktops/kde/kdelibs/default.nix index 9eb6625d45aa..91720c9a66b2 100644 --- a/pkgs/desktops/kde/kdelibs/default.nix +++ b/pkgs/desktops/kde/kdelibs/default.nix @@ -1,7 +1,4 @@ -{ stdenv, fetchurl, libX11, libXt, libXext, zlib, perl, qt, openssl, pcre -, pkgconfig, libjpeg, libpng, libtiff, libxml2, libxslt, libtool, expat -, freetype, bzip2, cups -}: +args: with args; let version = "3.5.7"; in From 765cd20094288bde71b54015ec3e1970232bd4ad Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 16:33:51 +0000 Subject: [PATCH 149/320] qt3: use getConfig in mysqlSupport svn path=/nixpkgs/branches/stdenv-updates/; revision=10263 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 776406b9b928..1418127cc487 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2406,7 +2406,7 @@ rec { inherit (xlibs) xextproto libXft libXrender libXrandr randrproto libXmu libXinerama xineramaproto libXcursor; openglSupport = mesaSupported; - mysqlSupport = false; + mysqlSupport = getConfig ["qt" "mysql"] false; }; qt4 = getVersion "qt4" qt4_alts; From 0b1b74ee441cbe6e66daf2808dee05512982133e Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 16:33:59 +0000 Subject: [PATCH 150/320] ortp added svn path=/nixpkgs/branches/stdenv-updates/; revision=10264 --- pkgs/development/libraries/ortp/default.nix | 18 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 22 insertions(+) create mode 100644 pkgs/development/libraries/ortp/default.nix diff --git a/pkgs/development/libraries/ortp/default.nix b/pkgs/development/libraries/ortp/default.nix new file mode 100644 index 000000000000..4fc51a3ce85b --- /dev/null +++ b/pkgs/development/libraries/ortp/default.nix @@ -0,0 +1,18 @@ + +args: with args; +stdenv.mkDerivation rec { + name = "ortp-0.13.1"; + + src = fetchurl { + url = + "http://download.savannah.nongnu.org/releases/linphone/ortp/sources/${name}.tar.gz"; + sha256 = "0k2963v4b15xnf4cpkpgjhsb8ckxpf6vdr8dnw7z3mzilji7391b"; + }; + + configureFlags = "--enable-shared --disable-static"; + + meta = { + description = "a Real-Time Transport Protocol (RFC3550) stack under LGPL"; + homepage = http://www.linphone.org/index.php/eng/code_review/ortp; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1418127cc487..fbfae579af62 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2369,6 +2369,10 @@ rec { inherit fetchurl stdenv perl; }; + ortp = import ../development/libraries/ortp { + inherit fetchurl stdenv; + }; + pangoxsl = import ../development/libraries/pangoxsl { inherit fetchurl stdenv pkgconfig; inherit (gtkLibs) glib pango; From b02b328b9c4f45f01b415a3958b25c09b60bd17d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 16:34:21 +0000 Subject: [PATCH 151/320] loudmouth library added svn path=/nixpkgs/branches/stdenv-updates/; revision=10265 --- pkgs/development/libraries/loudmouth/default.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 19 insertions(+) create mode 100644 pkgs/development/libraries/loudmouth/default.nix diff --git a/pkgs/development/libraries/loudmouth/default.nix b/pkgs/development/libraries/loudmouth/default.nix new file mode 100644 index 000000000000..87d613efd30e --- /dev/null +++ b/pkgs/development/libraries/loudmouth/default.nix @@ -0,0 +1,14 @@ +args: with args; +stdenv.mkDerivation rec { + name = "loudmouth-1.3.3"; + + src = fetchurl { + url = "http://ftp.imendio.com/pub/imendio/loudmouth/src/${name}.tar.bz2"; + sha256 = "0f3xpp3pf5bxcp0kcmqa0g28vfl5gg8mj0hxhs2cx75hwgikd26x"; + }; + + propagatedBuildInputs = [gnutls libidn glib]; + buildInputs = [pkgconfig]; + + configureFlags = "--enable-shared --disable-static"; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fbfae579af62..ba7443037d08 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2285,6 +2285,11 @@ rec { inherit fetchurl stdenv automake autoconf libtool cppunit libxml2; }; + loudmouth = import ../development/libraries/loudmouth { + inherit fetchurl stdenv libidn gnutls pkgconfig; + inherit (gtkLibs) glib; + }; + lzo = import ../development/libraries/lzo { inherit fetchurl stdenv; }; From 4de89f61b00307debd0aebc36658a384e320bf30 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 16:34:33 +0000 Subject: [PATCH 152/320] Added some telepathy+tapioca stuff. svn path=/nixpkgs/branches/stdenv-updates/; revision=10266 --- .../libraries/tapioca-qt/default.nix | 16 ++++++++++++++++ .../libraries/telepathy-gabble/default.nix | 17 +++++++++++++++++ .../libraries/telepathy-glib/default.nix | 17 +++++++++++++++++ .../libraries/telepathy-qt/default.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 19 +++++++++++++++++++ 5 files changed, 85 insertions(+) create mode 100644 pkgs/development/libraries/tapioca-qt/default.nix create mode 100644 pkgs/development/libraries/telepathy-gabble/default.nix create mode 100644 pkgs/development/libraries/telepathy-glib/default.nix create mode 100644 pkgs/development/libraries/telepathy-qt/default.nix diff --git a/pkgs/development/libraries/tapioca-qt/default.nix b/pkgs/development/libraries/tapioca-qt/default.nix new file mode 100644 index 000000000000..956d4c098735 --- /dev/null +++ b/pkgs/development/libraries/tapioca-qt/default.nix @@ -0,0 +1,16 @@ +args: with args; +let rev = "2031"; in +stdenv.mkDerivation { + name = "tapioca-qt-r${rev}"; + src = fetchsvn { + url = "https://tapioca-voip.svn.sourceforge.net/svnroot/tapioca-voip/trunk/tapioca-qt"; + inherit rev; + sha256 = "0r2qzlm56yizdi64xga6v2sdhdcgl3cvlsd7g9ynh95813nky88z"; + }; + + buildInputs = [cmake]; + propagatedBuildInputs = [telepathy_qt stdenv.gcc.libc]; + meta = { + description = "Qt Tapioca binding library"; + }; +} diff --git a/pkgs/development/libraries/telepathy-gabble/default.nix b/pkgs/development/libraries/telepathy-gabble/default.nix new file mode 100644 index 000000000000..44affecefd88 --- /dev/null +++ b/pkgs/development/libraries/telepathy-gabble/default.nix @@ -0,0 +1,17 @@ +args: with args; +stdenv.mkDerivation rec { + name = "telepathy-gabble-0.7.2"; + + src = fetchurl { + url = "${meta.homepage}/releases/telepathy-gabble/${name}.tar.gz"; + sha256 = "0r1j475a5s2a4f10hybmavf4kf6nrnjnv091dpic5nl2asdilb7i"; + }; + + propagatedBuildInputs = [telepathy_glib loudmouth]; + buildInputs = [pkgconfig libxslt]; + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://telepathy.freedesktop.org; + }; +} diff --git a/pkgs/development/libraries/telepathy-glib/default.nix b/pkgs/development/libraries/telepathy-glib/default.nix new file mode 100644 index 000000000000..fd4f59bdc8a2 --- /dev/null +++ b/pkgs/development/libraries/telepathy-glib/default.nix @@ -0,0 +1,17 @@ +args: with args; +stdenv.mkDerivation rec { + name = "telepathy-glib-0.7.0"; + + src = fetchurl { + url = "${meta.homepage}/releases/telepathy-glib/${name}.tar.gz"; + sha256 = "0hf1jrgisr7skrji7djh66q0ic351vlsm65xqy982p5d0axzxkz5"; + }; + + propagatedBuildInputs = [dbus_glib glib python]; + buildInputs = [pkgconfig libxslt]; + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://telepathy.freedesktop.org; + }; +} diff --git a/pkgs/development/libraries/telepathy-qt/default.nix b/pkgs/development/libraries/telepathy-qt/default.nix new file mode 100644 index 000000000000..9c0ea152f4ed --- /dev/null +++ b/pkgs/development/libraries/telepathy-qt/default.nix @@ -0,0 +1,16 @@ +args: with args; +let rev = "2031"; in +stdenv.mkDerivation { + name = "telepathy-qt-r${rev}"; + src = fetchsvn { + url = "https://tapioca-voip.svn.sourceforge.net/svnroot/tapioca-voip/trunk/telepathy-qt"; + inherit rev; + sha256 = "0d7psgc8nr5bryrjgfg92622hbilp0qwx0pya3836bz2l6x3msnb"; + }; + + buildInputs = [cmake]; + propagatedBuildInputs = [qt]; + meta = { + description = "Qt bindings for telepathy"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ba7443037d08..0e04bd8c01d9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2491,6 +2491,25 @@ rec { inherit fetchurl stdenv zlib; }; + tapioca_qt = import ../development/libraries/tapioca-qt { + inherit fetchsvn stdenv cmake telepathy_qt; + qt = qt4; + }; + + telepathy_gabble = import ../development/libraries/telepathy-gabble { + inherit fetchurl stdenv pkgconfig libxslt telepathy_glib loudmouth; + }; + + telepathy_glib = import ../development/libraries/telepathy-glib { + inherit fetchurl stdenv dbus_glib pkgconfig libxslt python; + inherit (gtkLibs) glib; + }; + + telepathy_qt = import ../development/libraries/telepathy-qt { + inherit fetchsvn stdenv cmake; + qt = qt4; + }; + tk = import ../development/libraries/tk { inherit fetchurl stdenv tcl x11; }; From da57804fff1d34154fc4d13e0fa02cfc23dcfc32 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 18:11:03 +0000 Subject: [PATCH 153/320] Merged with trunk again svn path=/nixpkgs/branches/stdenv-updates/; revision=10267 --- pkgs/applications/audio/audacity/default.nix | 7 +- .../audio/ladspa-plugins/default.nix | 7 +- .../audio/ladspa-plugins/ladspah.nix | 5 +- pkgs/applications/audio/snd/default.nix | 5 +- pkgs/applications/editors/bvi/default.nix | 17 + pkgs/applications/editors/eclipse/builder.sh | 1 - pkgs/applications/editors/eclipse/default.nix | 3 +- pkgs/applications/graphics/gocr/0.44.nix | 5 +- pkgs/applications/graphics/xfig/builder.sh | 5 +- pkgs/applications/graphics/xfig/default.nix | 4 +- .../graphics/xscreensaver/5.04.nix | 3 +- pkgs/applications/misc/xterm/default.nix | 1 + .../networking/browsers/opera/default.nix | 9 +- .../networking/sync/unison/default.nix | 22 +- .../version-management/bazaar/default.nix | 22 + .../version-management/cvs2svn/default.nix | 28 +- .../version-management/mercurial/default.nix | 21 +- .../virtualization/qemu/0.9.0.nix | 5 +- .../virtualization/qemu/linux-img/0.2.nix | 6 +- .../virtualization/virtualbox/1.5.2.nix | 5 +- .../compiz-fusion/bcop/0.6.0.nix | 5 +- .../compiz-fusion/ccsm/0.6.0.nix | 5 +- .../compiz-fusion/compiz-manager/0.6.0.nix | 5 +- .../compizconfig-python/0.6.0.nix | 5 +- .../compiz-fusion/config-backend/0.6.0.nix | 5 +- .../compiz-fusion/extra/0.6.0.nix | 5 +- .../compiz-fusion/libcompizconfig/0.6.0.nix | 5 +- .../compiz-fusion/main/0.6.0.nix | 5 +- .../window-managers/compiz/0.6.2.nix | 5 +- .../window-managers/fbpanel/4.12.nix | 5 +- .../window-managers/xmonad/default.nix | 42 + pkgs/build-support/fetchurl/mirrors.nix | 6 + .../make-wrapper/make-wrapper.sh | 19 +- pkgs/data/fonts/fontWrap/default.nix | 7 +- pkgs/development/compilers/ghcs/default.nix | 58 +- pkgs/development/compilers/jdk/builder.sh | 1 + pkgs/development/compilers/jdk/default-5.nix | 9 + .../compilers/jdk/jdk5-sun-linux.nix | 23 + pkgs/development/compilers/qi/9.1.nix | 5 +- .../interpreters/erlang/builder.sh | 14 + .../interpreters/erlang/default.nix | 11 + pkgs/development/interpreters/pyrex/0.9.6.nix | 5 +- pkgs/development/libraries/fftw/default.nix | 5 +- pkgs/development/libraries/glew/default.nix | 19 + .../libraries/haskell/Crypto/default.nix | 11 + .../libraries/haskell/X11/default.nix | 13 + .../libraries/haskell/binary/default.nix | 11 + .../libraries/haskell/cabal/cabal.nix | 95 ++ .../libraries/haskell/pcre-light/default.nix | 12 + .../haskell/uulib-ghc-6.6/builder.sh | 21 - .../haskell/uulib-ghc-6.6/default.nix | 11 - .../libraries/haskell/uulib/builder.sh | 51 - .../libraries/haskell/uulib/default.nix | 18 +- .../libraries/haskell/vty/default.nix | 13 + .../libraries/haskell/zlib/default.nix | 11 + .../libraries/libdbi-drivers/0.8.2-1.nix | 5 +- pkgs/development/libraries/libdbi/0.8.2.nix | 5 +- .../libraries/libextractor/0.5.18.nix | 5 +- .../python-modules/ZopeInterface/default.nix | 6 +- .../python-modules/twisted/default.nix | 6 +- .../tools/documentation/haddock/default.nix | 11 + .../tools/haskell/uuagc/default.nix | 24 +- pkgs/development/tools/misc/indent/2.2.9.nix | 5 +- .../tools/misc/intltool/0.36.2.nix | 5 +- .../development/tools/misc/ltrace/default.nix | 5 +- .../tools/parsing/alex/default.nix | 31 +- .../tools/parsing/happy/happy-1.17.nix | 12 + pkgs/games/construo/0.2.2.nix | 5 +- pkgs/games/fsg/alt-builder.nix | 8 +- pkgs/games/orbit/1.01.nix | 43 + pkgs/lib/default.nix | 290 +++++- pkgs/lib/strings-with-deps.nix | 36 +- pkgs/misc/tex/nix/find-includes.pl | 1 + pkgs/misc/trac/builder.sh | 6 +- pkgs/misc/trac/default.nix | 17 +- pkgs/os-specific/linux/atheros/0.9.3.3.nix | 5 +- pkgs/os-specific/linux/atheros/r2756.nix | 5 +- pkgs/os-specific/linux/atheros/r3122.nix | 5 +- pkgs/os-specific/linux/dmidecode/2.9.nix | 5 +- pkgs/os-specific/linux/dvd+rw-tools/7.0.nix | 5 +- pkgs/os-specific/linux/kqemu/1.3.0pre11.nix | 6 +- .../linux/module-init-tools/aggregator.nix | 7 +- pkgs/os-specific/linux/sdparm/1.02.nix | 5 +- pkgs/os-specific/linux/usbutils/default.nix | 10 +- .../tomcat-connectors/builder.sh | 8 + .../tomcat-connectors/default.nix | 14 + pkgs/servers/http/jboss/builder.sh | 18 + pkgs/servers/http/jboss/default.nix | 20 + pkgs/servers/sql/postgresql/default.nix | 6 +- pkgs/servers/xmpp/ejabberd/builder.sh | 9 + pkgs/servers/xmpp/ejabberd/default.nix | 11 + pkgs/stdenv/generic/setup-sh-defs.nix | 902 ------------------ pkgs/tools/misc/grub/default.nix | 24 +- pkgs/tools/misc/mc/builder.sh | 7 + pkgs/tools/misc/mc/default.nix | 11 + pkgs/tools/misc/relfs/cvs.2007.12.01.nix | 5 +- pkgs/tools/networking/ntp/default.nix | 10 +- .../networking/p2p/bittorrent/builder.sh | 8 +- .../networking/p2p/bittorrent/default.nix | 12 +- .../tools/package-management/nix/unstable.nix | 4 +- pkgs/tools/system/gdmap/0.7.5.nix | 5 +- pkgs/tools/system/pciutils/default.nix | 10 +- pkgs/tools/system/which/default.nix | 14 +- pkgs/tools/typesetting/lhs2tex/default.nix | 6 +- pkgs/top-level/all-packages.nix | 224 ++++- pkgs/top-level/build-for-release.nix | 2 - pkgs/top-level/builder-defs.nix | 100 +- pkgs/top-level/template-composing+config.nix | 5 +- pkgs/top-level/template-composing-builder.nix | 10 +- 109 files changed, 1394 insertions(+), 1352 deletions(-) create mode 100644 pkgs/applications/editors/bvi/default.nix create mode 100644 pkgs/applications/version-management/bazaar/default.nix create mode 100644 pkgs/applications/window-managers/xmonad/default.nix create mode 100644 pkgs/development/compilers/jdk/default-5.nix create mode 100644 pkgs/development/compilers/jdk/jdk5-sun-linux.nix create mode 100644 pkgs/development/interpreters/erlang/builder.sh create mode 100644 pkgs/development/interpreters/erlang/default.nix create mode 100644 pkgs/development/libraries/glew/default.nix create mode 100644 pkgs/development/libraries/haskell/Crypto/default.nix create mode 100644 pkgs/development/libraries/haskell/X11/default.nix create mode 100644 pkgs/development/libraries/haskell/binary/default.nix create mode 100644 pkgs/development/libraries/haskell/cabal/cabal.nix create mode 100644 pkgs/development/libraries/haskell/pcre-light/default.nix delete mode 100644 pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh delete mode 100644 pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix delete mode 100644 pkgs/development/libraries/haskell/uulib/builder.sh create mode 100644 pkgs/development/libraries/haskell/vty/default.nix create mode 100644 pkgs/development/libraries/haskell/zlib/default.nix create mode 100644 pkgs/development/tools/documentation/haddock/default.nix create mode 100644 pkgs/development/tools/parsing/happy/happy-1.17.nix create mode 100644 pkgs/games/orbit/1.01.nix create mode 100644 pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh create mode 100644 pkgs/servers/http/apache-modules/tomcat-connectors/default.nix create mode 100644 pkgs/servers/http/jboss/builder.sh create mode 100644 pkgs/servers/http/jboss/default.nix create mode 100644 pkgs/servers/xmpp/ejabberd/builder.sh create mode 100644 pkgs/servers/xmpp/ejabberd/default.nix delete mode 100644 pkgs/stdenv/generic/setup-sh-defs.nix create mode 100644 pkgs/tools/misc/mc/builder.sh create mode 100644 pkgs/tools/misc/mc/default.nix diff --git a/pkgs/applications/audio/audacity/default.nix b/pkgs/applications/audio/audacity/default.nix index 56ee6a56ccb8..3eaf1ed3ee08 100644 --- a/pkgs/applications/audio/audacity/default.nix +++ b/pkgs/applications/audio/audacity/default.nix @@ -1,5 +1,5 @@ args: with args; - with (builderDefs { + let localDefs = builderDefs { src = fetchurl { url = mirror://sourceforge/audacity/audacity-src-1.3.3.tar.gz; @@ -8,7 +8,8 @@ args: with args; buildInputs =[(wxGTK null) libogg libvorbis libsndfile libmad pkgconfig gtk gettext glib]; - } null); + } null; + in with localDefs; let postInstall = FullDepEntry (" old_rpath=$(patchelf --print-rpath \$out/bin/audacity); @@ -25,7 +26,7 @@ stdenv.mkDerivation { name = "audacity-1.3.3"; builder = writeScript "audacity-1.3.3-builder" - (textClosure [addInputs (doDump "0") (noDepEntry "echo \$PATH; ar --version") doConfigure preBuild doMakeInstall postInstall doForceShare]); + (textClosure localDefs [addInputs (doDump "0") (noDepEntry "echo \$PATH; ar --version") doConfigure preBuild doMakeInstall postInstall doForceShare]); meta = { description = " diff --git a/pkgs/applications/audio/ladspa-plugins/default.nix b/pkgs/applications/audio/ladspa-plugins/default.nix index 70dc36240c65..9f2fcbc0ed0f 100644 --- a/pkgs/applications/audio/ladspa-plugins/default.nix +++ b/pkgs/applications/audio/ladspa-plugins/default.nix @@ -1,5 +1,5 @@ args: with args; - with (builderDefs { + let localDefs = builderDefs { src = fetchurl { url = http://plugin.org.uk/releases/0.4.15/swh-plugins-0.4.15.tar.gz; @@ -7,7 +7,8 @@ args: with args; }; buildInputs = [fftw ladspaH pkgconfig]; configureFlags = []; - } null); + } null; + in with localDefs; let postInstall = FullDepEntry (" ensureDir \$out/share/ladspa/ @@ -17,7 +18,7 @@ in stdenv.mkDerivation { name = "swh-plugins-0.4.15"; builder = writeScript "swh-plugins-0.4.15-builder" - (textClosure [doConfigure doMakeInstall + (textClosure localDefs [doConfigure doMakeInstall postInstall doForceShare]); meta = { description = " diff --git a/pkgs/applications/audio/ladspa-plugins/ladspah.nix b/pkgs/applications/audio/ladspa-plugins/ladspah.nix index b526e48b10ee..65647cf0a22d 100644 --- a/pkgs/applications/audio/ladspa-plugins/ladspah.nix +++ b/pkgs/applications/audio/ladspa-plugins/ladspah.nix @@ -6,10 +6,11 @@ let sha256 = "1b908csn85ng9sz5s5d1mqk711cmawain2z8px2ajngihdrynb67"; }; in - with builderDefs { + let localDefs = builderDefs { buildInputs = []; inherit src; } null; + in with localDefs; let copyFile = FullDepEntry (" ensureDir \$out/include @@ -19,7 +20,7 @@ in stdenv.mkDerivation { name = "ladspa.h"; builder = writeScript "ladspa.h-builder" - (textClosure [copyFile]); + (textClosure localDefs [copyFile]); meta = { description = " LADSPA format audio plugins. diff --git a/pkgs/applications/audio/snd/default.nix b/pkgs/applications/audio/snd/default.nix index 9a650570a6d2..961d82fb8893 100644 --- a/pkgs/applications/audio/snd/default.nix +++ b/pkgs/applications/audio/snd/default.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = fetchurl { url = ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-9.4.tar.gz; @@ -20,6 +20,7 @@ args : with args; ++ (lib.optional (args ? sndlib) "--with-midi" ) ; } null; /* null is a terminator for sumArgs */ + in with localDefs; let preBuild = FullDepEntry (" cp config.log /tmp/snd-config.log ") [minInit doUnpack]; @@ -27,7 +28,7 @@ in stdenv.mkDerivation rec { name = "Snd-9.4"; builder = writeScript (name + "-builder") - (textClosure [doConfigure preBuild doMakeInstall doForceShare]); + (textClosure localDefs [doConfigure preBuild doMakeInstall doForceShare]); meta = { description = " Snd sound editor. diff --git a/pkgs/applications/editors/bvi/default.nix b/pkgs/applications/editors/bvi/default.nix new file mode 100644 index 000000000000..6d9ffdaecc81 --- /dev/null +++ b/pkgs/applications/editors/bvi/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "bvi-1.3.2"; + + src = args.fetchurl { + url = http://prdownloads.sourceforge.net/bvi/bvi-1.3.2.src.tar.gz; + sha256 = "110wxqnyianqamxq4y53drqqxb9vp4k2fcvic45qggvlqkqhlfgz"; + }; + + buildInputs =(with args; [ncurses]); + + meta = { + description = "hex editor with vim style keybindings"; + homepage = http://bvi.sourceforge.net/download.html; + license = "GPL2"; + }; +} diff --git a/pkgs/applications/editors/eclipse/builder.sh b/pkgs/applications/editors/eclipse/builder.sh index b38befee41ad..6e064e1fa9b6 100755 --- a/pkgs/applications/editors/eclipse/builder.sh +++ b/pkgs/applications/editors/eclipse/builder.sh @@ -1,5 +1,4 @@ source $stdenv/setup -source $makeWrapper unpackFile $src ensureDir $out diff --git a/pkgs/applications/editors/eclipse/default.nix b/pkgs/applications/editors/eclipse/default.nix index 71afb07eece5..23199bdcc129 100644 --- a/pkgs/applications/editors/eclipse/default.nix +++ b/pkgs/applications/editors/eclipse/default.nix @@ -6,7 +6,8 @@ let { name = "eclipse-sdk-3.3.3.1"; builder = ./builder.sh; src = bindist; - inherit makeWrapper jdk plugins; + buildInputs = [makeWrapper]; + inherit jdk plugins; libraries = [gtk glib libXtst]; }; diff --git a/pkgs/applications/graphics/gocr/0.44.nix b/pkgs/applications/graphics/gocr/0.44.nix index 4bf7bda50cb2..b415fd6fb125 100644 --- a/pkgs/applications/graphics/gocr/0.44.nix +++ b/pkgs/applications/graphics/gocr/0.44.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://prdownloads.sourceforge.net/jocr/gocr-0.44.tar.gz; @@ -9,10 +9,11 @@ fetchurl { buildInputs = []; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "gocr"; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " GPL Optical Character Recognition diff --git a/pkgs/applications/graphics/xfig/builder.sh b/pkgs/applications/graphics/xfig/builder.sh index de64fbce78fa..dc943180508e 100644 --- a/pkgs/applications/graphics/xfig/builder.sh +++ b/pkgs/applications/graphics/xfig/builder.sh @@ -1,5 +1,4 @@ source $stdenv/setup -source $makeWrapper makeFlags="XAWLIB=-lXaw3d BINDIR=$out/bin XAPPLOADDIR=$out/etc/X11/app-defaults LIBDIR=$out/lib/X11 XFIGDOCDIR=$out/share/doc/xfig MANPATH=$out/man" @@ -16,9 +15,7 @@ installCommand=myInstall myInstall() { make install.all $makeFlags - mv $out/bin/xfig $out/bin/.xfig - - makeWrapper $out/bin/.xfig $out/bin/xfig \ + wrapProgram $out/bin/xfig \ --set XAPPLRESDIR $out/etc/X11/app-defaults } diff --git a/pkgs/applications/graphics/xfig/default.nix b/pkgs/applications/graphics/xfig/default.nix index 0d94d4a655d0..49de840e2dcb 100644 --- a/pkgs/applications/graphics/xfig/default.nix +++ b/pkgs/applications/graphics/xfig/default.nix @@ -11,9 +11,7 @@ stdenv.mkDerivation { builder = ./builder.sh; - buildInputs = [imake x11 libXpm libXmu libXi libXp Xaw3d libpng libjpeg]; - - inherit makeWrapper; + buildInputs = [imake x11 libXpm libXmu libXi libXp Xaw3d libpng libjpeg makeWrapper]; NIX_CFLAGS_COMPILE = "-I${libXpm}/include/X11"; diff --git a/pkgs/applications/graphics/xscreensaver/5.04.nix b/pkgs/applications/graphics/xscreensaver/5.04.nix index 132bf997e18c..a9fa7978237e 100644 --- a/pkgs/applications/graphics/xscreensaver/5.04.nix +++ b/pkgs/applications/graphics/xscreensaver/5.04.nix @@ -1,4 +1,4 @@ -args : with args; with builderDefs (args // { +args : with args; let localDefs = builderDefs (args // { src = /* put a fetchurl here */ fetchurl { url = http://www.jwz.org/xscreensaver/xscreensaver-5.04.tar.gz; @@ -20,6 +20,7 @@ args : with args; with builderDefs (args // { " --with-hackdir=\$out/share/xscreensaver-hacks ") ]; }) null; /* null is a terminator for sumArgs */ + in with localDefs; let preConfigure = FullDepEntry (" sed -e 's%@GTK_DATADIR@%@datadir@% ; s%@PO_DATADIR@%@datadir@%' "+ diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix index c1be706b547a..97c8b42697f0 100644 --- a/pkgs/applications/misc/xterm/default.nix +++ b/pkgs/applications/misc/xterm/default.nix @@ -7,5 +7,6 @@ stdenv.mkDerivation rec { sha256 = "0qlz5nkdqkahdg9kbd1ni96n69srj1pd9yggwrw3z0kghaajb2sr"; }; buildInputs = [libXaw xproto libXt libX11 libSM libICE ncurses]; + configureFlags = ["--enable-wide-chars"]; } diff --git a/pkgs/applications/networking/browsers/opera/default.nix b/pkgs/applications/networking/browsers/opera/default.nix index d807add5111f..7393cffe316d 100644 --- a/pkgs/applications/networking/browsers/opera/default.nix +++ b/pkgs/applications/networking/browsers/opera/default.nix @@ -20,8 +20,13 @@ stdenv.mkDerivation rec { sha256 = "0vv1q86is9x6vw8fx92wrnvlyn4x29zgk9zjn66rcx37n6grqqah"; } else if (stdenv.system == "x86_64-linux") then fetchurl { - url = ftp://ftp.task.gda.pl/pub/opera/linux/950b/final/en/x86_64/opera-9.50-20071024.2-shared-qt.x86_64-1643.tar.bz2; - sha256 = "1gv1r18ar3vz1l24nf8qixjlba1yb5d3xvg3by41i4dy0vlznqn6"; + url = http://snapshot.opera.com/unix/snapshot-1754/x86_64-linux/opera-9.50-20080110.2-shared-qt.x86_64-1754.tar.bz2; + sha256 = "08y1ajjncdvbhvcq2izmpgc4fi37bwn43zsw7rz41jf8qhvb5ywv"; + #url = ftp://ftp.task.gda.pl/pub/opera/linux/950b/final/en/x86_64/opera-9.50-20071024.2-shared-qt.x86_64-1643.tar.bz2; + #sha256 = "1gv1r18ar3vz1l24nf8qixjlba1yb5d3xvg3by41i4dy0vlznqn6"; + #name = opera-9.25-20071214.6-shared-qt.i386-en.tar.gz; + #url = http://www.opera.com/download/get.pl?id=30462&location=225¬hanks=yes&sub=marine; + #sha256 = "1wnc1s4r5gz73mxs8pgsi9a1msz7x8a8pb1ykb1xgdfn21h69p2p"; } else throw "unsupported platform ${stdenv.system} (only i686-linux and x86_64 linux supported yet)"; # operapluginwrapper seems to require libXt ? diff --git a/pkgs/applications/networking/sync/unison/default.nix b/pkgs/applications/networking/sync/unison/default.nix index 75c976a43294..0883c236d010 100644 --- a/pkgs/applications/networking/sync/unison/default.nix +++ b/pkgs/applications/networking/sync/unison/default.nix @@ -7,21 +7,15 @@ stdenv.mkDerivation { sha256 = "808400a933aeb67654edc770822cd186d1b2adc92e7cb5836996c71c69ffe656"; }; - buildInputs = [ocaml]; + buildInputs = [ocaml makeWrapper]; - addInputsHook = "source $makeWrapper"; - preBuild = "sed -i \"s|\\(OCAMLOPT=.*\\)$|\\1 -I $lablgtk/lib/ocaml/lablgtk2|\" Makefile.OCaml"; + preBuild = "sed -i \"s|\\(OCAMLOPT=.*\\)$|\\1 -I ${lablgtk}/lib/ocaml/lablgtk2|\" Makefile.OCaml"; makeFlags = "UISTYLE=gtk2 INSTALLDIR=$(out)/bin/"; preInstall = "ensureDir $out/bin"; - postInstall = [ - "for i in $(cd $out/bin && ls); do" - " mv $out/bin/$i $out/bin/.orig-$i;" - " echo \"#! $SHELL\" > $out/bin/$i;" - " echo \"$xset/bin/xset q | grep -q \\\"$fontschumachermisc\\\" || $xset/bin/xset +fp \\\"$fontschumachermisc/lib/X11/fonts/misc\\\"\" >> $out/bin/$i;" - " echo \"exec \\\"$out/bin/.orig-$i\\\" \\\"\\\$@\\\"\" >> $out/bin/$i;" - " chmod +x $out/bin/$i;" - "done" - ]; - - inherit lablgtk fontschumachermisc xset makeWrapper; + postInstall = '' + for i in $(cd $out/bin && ls); do + wrapProgram $out/bin/$i \ + --run "${xset}/bin/xset q | grep -q \"${fontschumachermisc}\" || ${xset}/bin/xset +fp \"${fontschumachermisc}/lib/X11/fonts/misc\"" + done + ''; } diff --git a/pkgs/applications/version-management/bazaar/default.nix b/pkgs/applications/version-management/bazaar/default.nix new file mode 100644 index 000000000000..71134c0841ad --- /dev/null +++ b/pkgs/applications/version-management/bazaar/default.nix @@ -0,0 +1,22 @@ +{stdenv, fetchurl, python, makeWrapper}: + +stdenv.mkDerivation { + name = "bazaar-1.1"; + + src = fetchurl { + url = https://launchpad.net/bzr/1.1/1.1/+download/bzr-1.1.tar.gz; + sha256 = "1qpkw580r22yxybdghx2ha0kyk22brbhd1kg9wwjh209dqy2gqzc"; + }; + + buildInputs = [python makeWrapper]; + + installPhase = '' + python setup.py install --prefix=$out + wrapProgram $out/bin/bzr --prefix PYTHONPATH : "$(toPythonPath $out)" + ''; + + meta = { + homepage = http://bazaar-vcs.org/; + description = "A distributed version control system that Just Works"; + }; +} diff --git a/pkgs/applications/version-management/cvs2svn/default.nix b/pkgs/applications/version-management/cvs2svn/default.nix index e519be927335..65c2c84d0da1 100644 --- a/pkgs/applications/version-management/cvs2svn/default.nix +++ b/pkgs/applications/version-management/cvs2svn/default.nix @@ -1,25 +1,27 @@ -{stdenv, fetchurl, python, bsddb3, makeWrapper}: +{stdenv, fetchurl, python, makeWrapper}: stdenv.mkDerivation { - name = "cvs2svn-1.5.1"; + name = "cvs2svn-2.0.1"; src = fetchurl { - url = http://cvs2svn.tigris.org/files/documents/1462/36129/cvs2svn-1.5.1.tar.gz; - md5 = "d1e42ea51b373be0023f2b3f6b80ec01"; + url = http://cvs2svn.tigris.org/files/documents/1462/39919/cvs2svn-2.0.1.tar.gz; + sha256 = "1pgbyxzgn22lnw3h5c2nd8z46pkk863jg3fgh9pqa1jihsx1cg1j"; }; - buildInputs = [python bsddb3]; + buildInputs = [python makeWrapper]; buildPhase = "true"; - installPhase = " + installPhase = '' python ./setup.py install --prefix=$out - - source ${makeWrapper} - mv $out/bin/cvs2svn $out/bin/.orig-cvs2svn - makeWrapper $out/bin/.orig-cvs2svn $out/bin/cvs2svn \\ - --set PYTHONPATH \"$(toPythonPath $out):$(toPythonPath ${bsddb3}):$PYTHONPATH\" - "; + wrapProgram $out/bin/cvs2svn \ + --set PYTHONPATH "$(toPythonPath $out):$PYTHONPATH" + ''; /* !!! maybe we should absolutise the program names in $out/lib/python2.4/site-packages/cvs2svn_lib/config.py. */ -} \ No newline at end of file + + meta = { + description = "A tool to convert CVS repositories to Subversion repositories"; + homepage = http://cvs2svn.tigris.org/; + }; +} diff --git a/pkgs/applications/version-management/mercurial/default.nix b/pkgs/applications/version-management/mercurial/default.nix index f65a34ec5c45..408c9d8ebac0 100644 --- a/pkgs/applications/version-management/mercurial/default.nix +++ b/pkgs/applications/version-management/mercurial/default.nix @@ -7,20 +7,17 @@ stdenv.mkDerivation { sha256 = "1n34yl4z7nc3vmsgpkmqc94hsmy846ny86xgpgv3m371ljm2pq6g"; }; - inherit makeWrapper; - - buildInputs = [ python ]; - addInputsHook = "source $makeWrapper"; + buildInputs = [ python makeWrapper ]; makeFlags = "PREFIX=$(out)"; - postInstall = [ - "for i in $(cd $out/bin && ls); do" - " mv $out/bin/$i $out/bin/.orig-$i;" - " makeWrapper $out/bin/.orig-$i $out/bin/$i" - " --set PYTHONPATH \"$(toPythonPath $out):$PYTHONPATH:\$PYTHONPATH\";" - "done" - ]; + postInstall = '' + for i in $(cd $out/bin && ls); do + wrapProgram $out/bin/$i \ + --prefix PYTHONPATH : "$(toPythonPath $out)" + done + ''; meta = { - description = "a fast, lightweight SCM system for very large distributed projects"; + description = "A fast, lightweight SCM system for very large distributed projects"; + homepage = http://www.selenic.com/mercurial/; }; } diff --git a/pkgs/applications/virtualization/qemu/0.9.0.nix b/pkgs/applications/virtualization/qemu/0.9.0.nix index 8604f5ae66b7..439ec34a8c38 100644 --- a/pkgs/applications/virtualization/qemu/0.9.0.nix +++ b/pkgs/applications/virtualization/qemu/0.9.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://fabrice.bellard.free.fr/qemu/qemu-0.9.0.tar.gz; @@ -9,6 +9,7 @@ args : with args; buildInputs = [ SDL zlib which ]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let preConfigure = FullDepEntry (" gcc --version @@ -17,7 +18,7 @@ in stdenv.mkDerivation rec { name = "qemu-"+version; builder = writeScript (name + "-builder") - (textClosure [ preConfigure doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [ preConfigure doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " QEmu processor emulator. diff --git a/pkgs/applications/virtualization/qemu/linux-img/0.2.nix b/pkgs/applications/virtualization/qemu/linux-img/0.2.nix index 02ac87ef2e2f..ae1933b9d1d8 100644 --- a/pkgs/applications/virtualization/qemu/linux-img/0.2.nix +++ b/pkgs/applications/virtualization/qemu/linux-img/0.2.nix @@ -1,6 +1,5 @@ - args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://fabrice.bellard.free.fr/qemu/linux-0.2.img.bz2; @@ -9,6 +8,7 @@ args : with args; buildInputs = []; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let doCopy = FullDepEntry (" ensureDir \$out/share/qemu-images @@ -18,7 +18,7 @@ in stdenv.mkDerivation rec { name = "QEmu-Linux-Image-"+version; builder = writeScript (name + "-builder") - (textClosure [doCopy doForceShare doPropagate]); + (textClosure localDefs [doCopy doForceShare doPropagate]); meta = { description = " ${abort "Write a description"} diff --git a/pkgs/applications/virtualization/virtualbox/1.5.2.nix b/pkgs/applications/virtualization/virtualbox/1.5.2.nix index e633c55a2634..e8f2988ade2a 100644 --- a/pkgs/applications/virtualization/virtualbox/1.5.2.nix +++ b/pkgs/applications/virtualization/virtualbox/1.5.2.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://www.virtualbox.org/download/1.5.2/VirtualBox-1.5.2_OSE.tar.bz2; @@ -9,10 +9,11 @@ args : with args; wine jre libxslt libIDL SDL qt3 openssl zlib]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "VirtualBox-"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " Virtual Box is just software for running virtual machines. diff --git a/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix index 1072e9b363c1..6337d6a4ebe0 100644 --- a/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/bcop/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/compiz-bcop-0.6.0.tar.bz2; @@ -9,6 +9,7 @@ args : with args; propagatedBuildInputs = [getopt libxslt]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let fixPkgconfig = FullDepEntry (" ensureDir \$out/lib @@ -21,7 +22,7 @@ in stdenv.mkDerivation rec { name = "compiz-bcop-"+version; builder = writeScript (name + "-builder") - (textClosure [doAutotools doConfigure doMakeInstall fixPkgconfig fixInterpreter doForceShare + (textClosure localDefs [doAutotools doConfigure doMakeInstall fixPkgconfig fixInterpreter doForceShare doPropagate]); inherit propagatedBuildInputs; meta = { diff --git a/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix index fba1c5d995f6..6e3448bebf81 100644 --- a/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/ccsm/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/ccsm-0.6.0.tar.bz2; @@ -15,10 +15,11 @@ args : with args; "PYTHONPATH" "$(toPythonPath ${pygtk})/gtk-2.0" ]; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "compizconfig-settings-"+args.version; builder = writeScript (name + "-builder") - (textClosure [installPythonPackage (doWrap "\$out/bin/ccsm")]); + (textClosure localDefs [installPythonPackage (doWrap "\$out/bin/ccsm")]); meta = { description = " Compiz Settings Manager diff --git a/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix index a38855074808..6033ea1663af 100644 --- a/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/compiz-manager/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/compiz-manager-0.6.0.tar.bz2; @@ -20,6 +20,7 @@ args : with args; "XORG_DRIVER_PATH" "/nix/store/.*" ]]; } null; /* null is a terminator for sumArgs */ + in with localDefs; let install = FullDepEntry (" sed -e '/Checking for texture_from_pixmap:/areturn 0' -i compiz-manager @@ -34,7 +35,7 @@ in stdenv.mkDerivation rec { name = "compiz-manager-"+args.version; builder = writeScript (name + "-builder") - (textClosure [doUnpack doReplaceScripts install doPropagate doForceShare]); + (textClosure localDefs [doUnpack doReplaceScripts install doPropagate doForceShare]); meta = { description = " Compiz Launch Manager diff --git a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix index 73f1c653361c..64247cb1b8d2 100644 --- a/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/compizconfig-python/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0.1/compizconfig-python-0.6.0.1.tar.bz2; @@ -9,10 +9,11 @@ args : with args; [libcompizconfig bcop python pyrex configBackendGConf]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "compizconfig-python-"+args.version; builder = writeScript (name + "-builder") - (textClosure [doAutotools doConfigure doMakeInstall doForceShare]); + (textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare]); meta = { description = " Compiz configuration - Python part. diff --git a/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix index 3405ae0ce97a..12ef3bb58a03 100644 --- a/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/config-backend/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/compizconfig-backend-gconf-0.6.0.tar.bz2; @@ -10,10 +10,11 @@ args : with args; configureFlags = []; forceShare = ["man" "doc" "info" "lib/compizconfig"]; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "compizconfig-backend-GConf-"+version; builder = writeScript (name + "-builder") - (textClosure [doAutotools doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " Compiz configuration backend (GConf). diff --git a/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix index e304eb9d6ae4..cc6b2f215cab 100644 --- a/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/extra/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/compiz-fusion-plugins-extra-0.6.0.tar.bz2; @@ -9,6 +9,7 @@ args : with args; [bcop libjpeg gettext pluginsMain]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let sharePlugins = FullDepEntry (" ensureDir \$out/share/compiz-plugins @@ -22,7 +23,7 @@ in stdenv.mkDerivation rec { name = "compiz-fusion-plugins-extra-"+version; builder = writeScript (name + "-builder") - (textClosure [fixIncludes doConfigure doMakeInstall sharePlugins doForceShare]); + (textClosure localDefs [fixIncludes doConfigure doMakeInstall sharePlugins doForceShare]); meta = { description = " Extra Compiz Fusion plugins. diff --git a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix index 8b5d729dc2dc..5602c6578673 100644 --- a/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/libcompizconfig/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/libcompizconfig-0.6.0.tar.bz2; @@ -9,10 +9,11 @@ args : with args; [bcop]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "libcompizconfig-"+version; builder = writeScript (name + "-builder") - (textClosure [doAutotools doConfigure doMakeInstall doForceShare]); + (textClosure localDefs [doAutotools doConfigure doMakeInstall doForceShare]); meta = { description = " Compiz configuration backend library. diff --git a/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix b/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix index 40261da5cc4e..deb4b2e3a576 100644 --- a/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix +++ b/pkgs/applications/window-managers/compiz-fusion/main/0.6.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/0.6.0/compiz-fusion-plugins-main-0.6.0.tar.bz2; @@ -9,6 +9,7 @@ args : with args; [bcop libjpeg gettext]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let sharePlugins = FullDepEntry (" ensureDir \$out/share/compiz-plugins @@ -18,7 +19,7 @@ in stdenv.mkDerivation rec { name = "compiz-fusion-plugins-main-"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall sharePlugins doForceShare]); + (textClosure localDefs [doConfigure doMakeInstall sharePlugins doForceShare]); meta = { description = " Main Compiz Fusion plugins. diff --git a/pkgs/applications/window-managers/compiz/0.6.2.nix b/pkgs/applications/window-managers/compiz/0.6.2.nix index 6eef24beb994..78369081bc9d 100644 --- a/pkgs/applications/window-managers/compiz/0.6.2.nix +++ b/pkgs/applications/window-managers/compiz/0.6.2.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://releases.compiz-fusion.org/compiz/0.6.2/compiz-0.6.2.tar.bz2; @@ -22,6 +22,7 @@ args : with args; (if args ? extraConfigureFlags then args.extraConfigureFlags else []); patches = [ ./glx-patch-0.6.2.patch ]; } null; /* null is a terminator for sumArgs */ + in with localDefs; let postAll = FullDepEntry (" for i in $out/bin/*; do @@ -36,7 +37,7 @@ stdenv.mkDerivation rec { name = "compiz-0.6.2"; builder = writeScript (name + "-builder") - (textClosure [doPatch doConfigure doMakeInstall doPropagate + (textClosure localDefs [doPatch doConfigure doMakeInstall doPropagate doForceShare postAll]); inherit propagatedBuildInputs; meta = { diff --git a/pkgs/applications/window-managers/fbpanel/4.12.nix b/pkgs/applications/window-managers/fbpanel/4.12.nix index 4e08102af80a..1958ffa642bf 100644 --- a/pkgs/applications/window-managers/fbpanel/4.12.nix +++ b/pkgs/applications/window-managers/fbpanel/4.12.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://garr.dl.sourceforge.net/sourceforge/fbpanel/fbpanel-4.12.tgz; @@ -10,10 +10,11 @@ args : with args; libpng libjpeg libtiff librsvg]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "fbpanel"; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " Just a desktop panel. diff --git a/pkgs/applications/window-managers/xmonad/default.nix b/pkgs/applications/window-managers/xmonad/default.nix new file mode 100644 index 000000000000..ccd2dc05adbe --- /dev/null +++ b/pkgs/applications/window-managers/xmonad/default.nix @@ -0,0 +1,42 @@ +{stdenv, fetchurl, ghc, X11, xmessage}: + +stdenv.mkDerivation (rec { + + pname = "xmonad"; + version = "0.5"; + + name = "${pname}-${version}"; + + src = fetchurl { + url = "http://hackage.haskell.org/packages/archive/${pname}/${version}/${name}.tar.gz"; + sha256 = "cfcc4501b000fa740ed35a5be87dc01216e036219551630dcf71d9c3cf57e4c4"; + }; + + buildInputs = [ghc X11]; + + meta = { + description = "xmonad is a tiling window manager for X"; + }; + + configurePhase = '' + sed -i 's|"xmessage"|"${xmessage}/bin/xmessage"|' XMonad/Core.hs + ghc --make Setup.lhs + ./Setup configure --prefix="$out" + ''; + + buildPhase = '' + ./Setup build + ''; + + installPhase = '' + ./Setup copy + ./Setup register --gen-script + mkdir $out/nix-support + sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh + cp register.sh $out/nix-support/register-ghclib.sh + sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh + mkdir -p $out/bin + cp register.sh $out/bin/register-ghclib-${name}.sh + ''; + +}) diff --git a/pkgs/build-support/fetchurl/mirrors.nix b/pkgs/build-support/fetchurl/mirrors.nix index 2fc8ce4eec29..52fc9dfa2c18 100644 --- a/pkgs/build-support/fetchurl/mirrors.nix +++ b/pkgs/build-support/fetchurl/mirrors.nix @@ -42,4 +42,10 @@ rec { ftp://ftp.heanet.ie/mirrors/ftp.kde.org/ ftp://ftp.kde.org/pub/kde/ ]; + + # Gentoo files. + gentoo = [ + http://www.ibiblio.org/pub/Linux/distributions/gentoo/ + http://distfiles.gentoo.org/ + ]; } diff --git a/pkgs/build-support/make-wrapper/make-wrapper.sh b/pkgs/build-support/make-wrapper/make-wrapper.sh index 847db8910fd5..558ff94c1a03 100644 --- a/pkgs/build-support/make-wrapper/make-wrapper.sh +++ b/pkgs/build-support/make-wrapper/make-wrapper.sh @@ -1,6 +1,7 @@ makeWrapper() { - original=$1 - wrapper=$2 + local original=$1 + local wrapper=$2 + local params varName value command separator n fileNames ensureDir "$(dirname $wrapper)" @@ -17,6 +18,12 @@ makeWrapper() { echo "export $varName=$value" >> $wrapper fi + if test "$p" = "--run"; then + command=${params[$((n + 1))]} + n=$((n + 1)) + echo "$command" >> $wrapper + fi + if test "$p" = "--suffix" -o "$p" = "--prefix"; then varName=${params[$((n + 1))]} separator=${params[$((n + 2))]} @@ -72,3 +79,11 @@ filterExisting() { fi done } + +# Syntax: wrapProgram +wrapProgram() { + local prog="$1" + local hidden="$(dirname "$prog")/.wrapped-$(basename "$prog")" + mv $prog $hidden + makeWrapper $hidden $prog "$@" +} diff --git a/pkgs/data/fonts/fontWrap/default.nix b/pkgs/data/fonts/fontWrap/default.nix index ef370be8e356..8bc120c686a9 100644 --- a/pkgs/data/fonts/fontWrap/default.nix +++ b/pkgs/data/fonts/fontWrap/default.nix @@ -1,9 +1,10 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src =""; /* put a fetchurl here */ buildInputs = [mkfontdir mkfontscale]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let doInstall = FullDepEntry (" ensureDir \$out/share/fonts/ @@ -18,10 +19,10 @@ in stdenv.mkDerivation rec { name = "wrapped-font-dir"; builder = writeScript (name + "-builder") - (textClosure [ doInstall doForceShare doPropagate]); + (textClosure localDefs [ doInstall doForceShare doPropagate]); meta = { description = " - Just a wrapper to create fots.dir and fonts.scale . + Just a wrapper to create fonts.dir and fonts.scale . "; }; } diff --git a/pkgs/development/compilers/ghcs/default.nix b/pkgs/development/compilers/ghcs/default.nix index c026a860d40c..b4e14c9921d8 100644 --- a/pkgs/development/compilers/ghcs/default.nix +++ b/pkgs/development/compilers/ghcs/default.nix @@ -47,7 +47,7 @@ rec { # using undocumented feature that attribute can contain hyphens when using listToAttrs # You should be able to get the attribute values using __getAttr - result = builtins.listToAttrs (map ( l : lib.av l.name ( + result = builtins.listToAttrs (map ( l : lib.nv l.name ( packageByPackageDB ghc l.name ("lib/ghc-${ghc.version}/${l.name}.conf") (map (n: builtins.getAttr n result) l.deps) @@ -80,6 +80,7 @@ +" --prefix=\$out " +" --with-ghc=\$ghcboot/bin/ghc" +" --with-gmp-libraries=$gmp/lib" + +" --with-gmp-includes=${gmp}/include" +" --with-readline-libraries=\"$readline/lib\""; # now read the main package.conf and create a single package db file for each of them @@ -107,26 +108,26 @@ # Why this effort? If you want to use pretty-0.9 you can do this now without cabal choosing the 1.0 version hassle core_libs = resolveDeps ghc - [ { name = "Cabal-1.2.0"; deps = ["base-2.1" "pretty-1.0" "old-locale-1.0" "old-time-1.0" "directory-1.0" "unix-2.0" "process-1.0" "array-0.1" "containers-0.1" "rts-1.0" "filepath-1.0"];} # - { name = "array-0.1"; deps = ["base-2.1"];} - { name = "base-2.1"; deps = [];} # - { name = "bytestring-0.9"; deps = [ "base-2.1" "array-0.1" ];} - { name = "containers-0.1"; deps = [ "base-2.1" "array-0.1" ];} - { name = "directory-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0"];} - { name = "filepath-1.0"; deps = [ "base-2.1" ];} # - { name = "ghc-6.8.0.20071004"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "array-0.1" "containers-0.1" "hpc-0.5" "bytestring-0.9" "pretty-1.0" "packedstring-0.1" "template-haskell-0.1" "unix-2.0" "process-1.0" "readline-1.0" "Cabal-1.2.0" "random-1.0" "haskell98-1.0"];} - { name = "haskell98-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "random-1.0" "unix-2.0" "process-1.0" "array-0.1"];} - { name = "hpc-0.5"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "array-0.1" "containers-0.1"]; } - { name = "old-locale-1.0"; deps = [ "base-2.1"];} - { name = "old-time-1.0"; deps = [ "base-2.1" "old-locale-1.0" ];} - { name = "packedstring-0.1"; deps = [ "base-2.1" "array-0.1" ];} - { name = "pretty-1.0"; deps = [ "base-2.1" ];} - { name = "process-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "unix-2.0"];} - { name = "random-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0"];} - { name = "readline-1.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "unix-2.0" "process-1.0" ];} - { name = "rts-1.0"; deps = [ "base-2.1" ];} # - { name = "template-haskell-0.1"; deps = [ "base-2.1" "pretty-1.0" "array-0.1" "packedstring-0.1" "containers-0.1" ];} - { name = "unix-2.0"; deps = [ "base-2.1" "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" ];} + [ { name = "Cabal-1.2.3.0"; deps = ["base-3.0.1.0" "pretty-1.0.0.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "directory-1.0.0.0" "unix-2.3.0.0" "process-1.0.0.0" "array-0.1.0.0" "containers-0.1.0.1" "rts-1.0" "filepath-1.1.0.0"];} # + { name = "array-0.1.0.0"; deps = ["base-3.0.1.0"];} + { name = "base-3.0.1.0"; deps = [];} # + { name = "bytestring-0.9.0.1"; deps = [ "base-3.0.1.0" "array-0.1.0.0" ];} + { name = "containers-0.1.0.1"; deps = [ "base-3.0.1.0" "array-0.1.0.0" ];} + { name = "directory-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0"];} + { name = "filepath-1.1.0.0"; deps = [ "base-3.0.1.0" ];} # + { name = "ghc-${version}"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "array-0.1.0.0" "containers-0.1.0.1" "hpc-0.5.0.0" "bytestring-0.9.0.1" "pretty-1.0.0.0" "packedstring-0.1.0.0" "template-haskell-2.2.0.0" "unix-2.3.0.0" "process-1.0.0.0" "readline-1.0.1.0" "Cabal-1.2.3.0" "random-1.0.0.0" "haskell98-1.0.1.0"];} + { name = "haskell98-1.0.1.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "random-1.0.0.0" "unix-2.3.0.0" "process-1.0.0.0" "array-0.1.0.0"];} + { name = "hpc-0.5.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "array-0.1.0.0" "containers-0.1.0.1"]; } + { name = "old-locale-1.0.0.0"; deps = [ "base-3.0.1.0"];} + { name = "old-time-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" ];} + { name = "packedstring-0.1.0.0"; deps = [ "base-3.0.1.0" "array-0.1.0.0" ];} + { name = "pretty-1.0.0.0"; deps = [ "base-3.0.1.0" ];} + { name = "process-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "unix-2.3.0.0"];} + { name = "random-1.0.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0"];} + { name = "readline-1.0.1.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "unix-2.3.0.0" "process-1.0.0.0" ];} + { name = "rts-1.0"; deps = [ "base-3.0.1.0" ];} # + { name = "template-haskell-2.2.0.0"; deps = [ "base-3.0.1.0" "pretty-1.0.0.0" "array-0.1.0.0" "packedstring-0.1.0.0" "containers-0.1.0.1" ];} + { name = "unix-2.3.0.0"; deps = [ "base-3.0.1.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" ];} ]; @@ -137,18 +138,20 @@ } ); - ghc68 = ghcAndLibraries { - version = "6.8.0.20071004"; + ghc68 = ghcAndLibraries rec { + version = "6.8.2"; src = fetchurl { - url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.0.20071004-src.tar.bz2; - sha256 = "1yyl7sxykmvkiwfxkfzpqa6cmgw19phkyjcdv99ml22j16wli63l"; + #url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.0.20071004-src.tar.bz2; + #sha256 = "1yyl7sxykmvkiwfxkfzpqa6cmgw19phkyjcdv99ml22j16wli63l"; + url = "http://www.haskell.org/ghc/dist/stable/dist/ghc-${version}-src.tar.bz2"; + md5 = "745c6b7d4370610244419cbfec4b2f84"; #url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.20070912-src.tar.bz2; #sha256 = "1b1gvi7hc7sc0fkh29qvzzd5lgnlvdv3ayiak4mkfnzkahvmq85s"; }; extra_src = fetchurl { - url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.0.20071004-src-extralibs.tar.bz2; - sha256 = "0vjx4vb2xhv5v2wj74ii3gpjim7x9wj0m87zglqlhc8xn31pmrd2"; + url = "http://www.haskell.org/ghc/dist/stable/dist/ghc-${version}-src-extralibs.tar.bz2"; + sha256 = "044mpbzpkbxcnqhjnrnmjs00mr85057d123rrlz2vch795lxbkcn"; #url = http://www.haskell.org/ghc/dist/stable/dist/ghc-6.8.20070912-src-extralibs.tar.bz2; #sha256 = "0py7d9nh3lkhjxr3yb3n9345d0hmzq79bi40al5rcr3sb84rnp9r"; }; @@ -165,4 +168,3 @@ }; } - diff --git a/pkgs/development/compilers/jdk/builder.sh b/pkgs/development/compilers/jdk/builder.sh index 1b61d548c1bc..71dd6c433f67 100644 --- a/pkgs/development/compilers/jdk/builder.sh +++ b/pkgs/development/compilers/jdk/builder.sh @@ -1,3 +1,4 @@ +buildInputs="$unzip" source $stdenv/setup src=$filename.bin diff --git a/pkgs/development/compilers/jdk/default-5.nix b/pkgs/development/compilers/jdk/default-5.nix new file mode 100644 index 000000000000..1cb83ca5ddc7 --- /dev/null +++ b/pkgs/development/compilers/jdk/default-5.nix @@ -0,0 +1,9 @@ +{stdenv, fetchurl, unzip}: + +if stdenv.system == "i686-linux" + then + (import ./jdk5-sun-linux.nix) { + inherit stdenv fetchurl unzip; + } + else + abort "the Java 5 SDK is not supported on this platform" diff --git a/pkgs/development/compilers/jdk/jdk5-sun-linux.nix b/pkgs/development/compilers/jdk/jdk5-sun-linux.nix new file mode 100644 index 000000000000..479a5a456af4 --- /dev/null +++ b/pkgs/development/compilers/jdk/jdk5-sun-linux.nix @@ -0,0 +1,23 @@ +/** + * This Nix expression requires the user to download the j2sdk + * distribution to /tmp. Please obtain jdk-1_5_0_14-linux-i586.bin + * from java.sun.com by hand and place it in /tmp. Blame Sun, not me. + * + * Note that this is not necessary if someone has already pushed a + * binary. + */ +{stdenv, fetchurl, unzip}: + +assert stdenv.system == "i686-linux"; + +stdenv.mkDerivation { + name = "jdk-1.5.0_14"; + filename = "jdk-1_5_0_14"; + dirname = "jdk1.5.0_14"; + builder = ./builder.sh; + pathname = "/tmp/jdk-1_5_0_14-linux-i586.bin"; + md5 = "32df8f2be09c3a0f39da1b3869164b55"; + stdenv = stdenv; + + inherit unzip; +} diff --git a/pkgs/development/compilers/qi/9.1.nix b/pkgs/development/compilers/qi/9.1.nix index 661bb85e7989..3a1a4f37886b 100644 --- a/pkgs/development/compilers/qi/9.1.nix +++ b/pkgs/development/compilers/qi/9.1.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://www.lambdassociates.org/Download/Qi9.1.zip; @@ -8,6 +8,7 @@ args : with args; buildInputs = [ unzip clisp]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let shell=stdenv.shell; in @@ -28,7 +29,7 @@ in stdenv.mkDerivation rec { name = "Qi-"+version; builder = writeScript (name + "-builder") - (textClosure [allBuild doForceShare doPropagate]); + (textClosure localDefs [allBuild doForceShare doPropagate]); meta = { description = " Qi - next generation on top of Common Lisp. diff --git a/pkgs/development/interpreters/erlang/builder.sh b/pkgs/development/interpreters/erlang/builder.sh new file mode 100644 index 000000000000..43c964d88b80 --- /dev/null +++ b/pkgs/development/interpreters/erlang/builder.sh @@ -0,0 +1,14 @@ +buildInputs="$perl $gnum4 $ncurses $openssl" + +source $stdenv/setup + +tar xfvz $src +cd otp_src_* + +# Fix some hard coded paths to /bin/rm +sed -i -e "s|/bin/rm|rm|" lib/odbc/configure +sed -i -e "s|/bin/rm|rm|" erts/configure + +./configure --prefix=$out --with-ssl=$openssl +make +make install diff --git a/pkgs/development/interpreters/erlang/default.nix b/pkgs/development/interpreters/erlang/default.nix new file mode 100644 index 000000000000..f8caed7f329b --- /dev/null +++ b/pkgs/development/interpreters/erlang/default.nix @@ -0,0 +1,11 @@ +{stdenv, fetchurl, perl, ncurses, gnum4, openssl}: + +stdenv.mkDerivation { + name = "erlang-R11B-5"; + builder = ./builder.sh; + src = fetchurl { + url = http://www.erlang.org/download/otp_src_R11B-5.tar.gz; + md5 = "96acec41da87d6ee0ef18e1aab36ffdd"; + }; + inherit perl ncurses gnum4 openssl; +} diff --git a/pkgs/development/interpreters/pyrex/0.9.6.nix b/pkgs/development/interpreters/pyrex/0.9.6.nix index 7053f949a430..1b11e8efe36e 100644 --- a/pkgs/development/interpreters/pyrex/0.9.6.nix +++ b/pkgs/development/interpreters/pyrex/0.9.6.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/oldtar/Pyrex-0.9.6.tar.gz; @@ -8,10 +8,11 @@ args : with args; buildInputs = [python]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "Pyrex-"+version; builder = writeScript (name + "-builder") - (textClosure [installPythonPackage doForceShare]); + (textClosure localDefs [installPythonPackage doForceShare]); meta = { description = " Python package compiler or something like that. diff --git a/pkgs/development/libraries/fftw/default.nix b/pkgs/development/libraries/fftw/default.nix index 3f7125443034..3f5d13b09fb9 100644 --- a/pkgs/development/libraries/fftw/default.nix +++ b/pkgs/development/libraries/fftw/default.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = fetchurl { url = ftp://ftp.fftw.org/pub/fftw/fftw-3.1.2.tar.gz; @@ -8,10 +8,11 @@ args : with args; buildInputs = []; configureFlags = ["--enable-float --enable-shared"]; } null; + in with localDefs; stdenv.mkDerivation { name = "fftw-3.1.2"; builder = writeScript "fftw-3.1.2-builder" - (textClosure [doConfigure doMakeInstall doForceShare]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare]); meta = { description = " Fastest Fourier Transform in the West library. diff --git a/pkgs/development/libraries/glew/default.nix b/pkgs/development/libraries/glew/default.nix new file mode 100644 index 000000000000..2af500b3db6c --- /dev/null +++ b/pkgs/development/libraries/glew/default.nix @@ -0,0 +1,19 @@ +args: +args.stdenv.mkDerivation { + name = "glew-1.5.0"; + + src = args.fetchurl { + url = http://dfn.dl.sourceforge.net/sourceforge/glew/glew-1.5.0-src.tgz; + sha256 = "1kjr1fchnl785wsg11vzc03q3pm12lh20n1i593zr1xqfjgx2b4h"; + }; + + buildInputs =(with args; [mesa x11 libXmu libXi]); + + meta = { + description = "cross-platform open-source C/C++ extension loading library"; + homepage = http://glew.sourceforge.net/; + license = ["BSD" "GLX" "SGI-B" "GPL2"]; # License description copied from gentoo-1.4.0 + }; + + installPhase="GLEW_DEST=\$out make install"; +} diff --git a/pkgs/development/libraries/haskell/Crypto/default.nix b/pkgs/development/libraries/haskell/Crypto/default.nix new file mode 100644 index 000000000000..9cb465e50b38 --- /dev/null +++ b/pkgs/development/libraries/haskell/Crypto/default.nix @@ -0,0 +1,11 @@ +{cabal}: + +cabal.mkDerivation (self : { + pname = "Crypto"; + version = "4.1.0"; + sha256 = "0984c833c5dfa6f4d56fd6fb284db7b7cef6676dc7999a1436aa856becba2b8f"; + meta = { + description = "Several encryption algorithms for Haskell"; + }; +}) + diff --git a/pkgs/development/libraries/haskell/X11/default.nix b/pkgs/development/libraries/haskell/X11/default.nix new file mode 100644 index 000000000000..39fb56284678 --- /dev/null +++ b/pkgs/development/libraries/haskell/X11/default.nix @@ -0,0 +1,13 @@ +{cabal, libX11, xineramaSupport ? true, libXinerama ? null, libXext ? null}: + +assert xineramaSupport -> (libXinerama != null && libXext != null); + +cabal.mkDerivation (self : { + pname = "X11"; + version = "1.4.1"; + sha256 = "e51038541415686f0e278ccdbc0b2373cd11f212de99023b7b8f8e776aa09f79"; + propagatedBuildInputs = [libX11] ++ (if xineramaSupport then [libXinerama libXext] else []); + meta = { + description = "A Haskell binding to the X11 graphics library"; + }; +}) diff --git a/pkgs/development/libraries/haskell/binary/default.nix b/pkgs/development/libraries/haskell/binary/default.nix new file mode 100644 index 000000000000..081779fd3124 --- /dev/null +++ b/pkgs/development/libraries/haskell/binary/default.nix @@ -0,0 +1,11 @@ +{cabal}: + +cabal.mkDerivation (self : { + pname = "binary"; + version = "0.4.1"; + sha256 = "bb74824306843da25f6d97c271e2a06ee3a7e05fc529156fb81d7c576688e549"; + meta = { + description = "Efficient, pure binary serialisation using lazy ByteStrings"; + }; +}) + diff --git a/pkgs/development/libraries/haskell/cabal/cabal.nix b/pkgs/development/libraries/haskell/cabal/cabal.nix new file mode 100644 index 000000000000..1e08a819c0ec --- /dev/null +++ b/pkgs/development/libraries/haskell/cabal/cabal.nix @@ -0,0 +1,95 @@ +# generic builder for Cabal packages + +attrs : +{ + mkDerivation = + transform : + let dtransform = + self : { + + # pname should be defined by the client to be the package basename + # version should be defined by the client to be the package version + + # fname is the internal full name of the package + fname = "${self.pname}-${self.version}"; + + # name is the external full name of the package; usually we prefix + # all packages with haskell- to avoid name clashes for libraries; + # if that is not desired (for applications), name can be set to + # fname. + name = "haskell-${self.fname}"; + + # the default download location for Cabal packages is Hackage, + # you still have to specify the checksum + src = attrs.fetchurl { + url = "http://hackage.haskell.org/packages/archive/${self.pname}/${self.version}/${self.fname}.tar.gz"; + inherit (self) sha256; + }; + + # default buildInputs are just ghc, if more buildInputs are required + # buildInputs can be extended by the client by using extraBuildInputs, + # but often propagatedBuildInputs is preferable anyway + buildInputs = [attrs.ghc] ++ self.extraBuildInputs; + extraBuildInputs = []; + + # we make sure that propagatedBuildInputs is defined, so that we don't + # have to check for its existence + propagatedBuildInputs = []; + + # library directories that have to be added to the Cabal files + extraLibDirs = map (x : x + "/lib") self.propagatedBuildInputs; + + # file(s) that have to be patched with information about extra libraries; + # can be redefined to the empty list by the client if this is not desired + patchLibFiles = [ "${self.pname}.cabal" ]; + + # patches files, compiles Setup, and configures + configurePhase = '' + eval "$preConfigure" + + for i in ${toString self.patchLibFiles}; do + echo "patching $i" + test -f $i && sed -i '/extra-libraries/ { s|\( *\)extra-libraries.*|&\n\1extra-lib-dirs: ${toString self.extraLibDirs}| }' $i + done + for i in Setup.hs Setup.lhs; do + test -f $i && ghc --make $i + done + ./Setup configure --verbose --prefix="$out" + + eval "$postConfigure" + ''; + + # builds via Cabal + buildPhase = '' + eval "$preBuild" + + ./Setup build + + eval "$postBuild" + ''; + + # installs via Cabal; creates a registration file for nix-support + # so that the package can be used in other Haskell-builds; also + # creates a register-${name}.sh in userspace that can be used to + # register the library in a user environment (but this scheme + # should sooner or later be deprecated in favour of using a + # ghc-wrapper). + installPhase = '' + eval "$preInstall" + + ./Setup copy + ./Setup register --gen-script + mkdir -p $out/nix-support + if test -f register.sh; then + sed -i 's/|.*\(ghc-pkg update\)/| \1/' register.sh + cp register.sh $out/nix-support/register-ghclib.sh + sed -i 's/\(ghc-pkg update\)/\1 --user/' register.sh + mkdir -p $out/bin + cp register.sh $out/bin/register-${self.name}.sh + fi + + eval "$postInstall" + ''; + }; + in attrs.stdenv.mkDerivation ((rec { f = dtransform f // transform f; }).f); +} diff --git a/pkgs/development/libraries/haskell/pcre-light/default.nix b/pkgs/development/libraries/haskell/pcre-light/default.nix new file mode 100644 index 000000000000..1542bb7968ac --- /dev/null +++ b/pkgs/development/libraries/haskell/pcre-light/default.nix @@ -0,0 +1,12 @@ +{cabal, pcre}: + +cabal.mkDerivation (self : { + pname = "pcre-light"; + version = "0.3"; + sha256 = "a8cfec1c265530388efbb187426368e280331d9829fa93d8f49f16db3c3e7794"; + propagatedBuildInputs = [pcre]; + meta = { + description = "A small, efficient and portable regex library for Perl 5 compatible regular expressions"; + }; +}) + diff --git a/pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh b/pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh deleted file mode 100644 index bbe21eac49e6..000000000000 --- a/pkgs/development/libraries/haskell/uulib-ghc-6.6/builder.sh +++ /dev/null @@ -1,21 +0,0 @@ -source $stdenv/setup - - -tar xzf "$src" && -cd uulib-* && - - -autoconf && -./configure --prefix=$out && - - -ghc --make Setup.hs -o setup -package Cabal && -./setup configure --prefix=$out --with-hc-pkg=ghc-pkg && - - -./setup build && -./setup install && -./setup register --gen-script && - -mkdir -p $out/nix-support/ && -cp register.sh $out/nix-support/register-ghclib.sh diff --git a/pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix b/pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix deleted file mode 100644 index 1c315b1cffac..000000000000 --- a/pkgs/development/libraries/haskell/uulib-ghc-6.6/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{stdenv, fetchurl, autoconf, ghc}: - -stdenv.mkDerivation -{ - name = "uulib-0.9.2-ghc-6.6"; - src = fetchurl { url = http://www.cs.uu.nl/~ariem/uulib-2006-10-30-src.tar.gz; - md5 = "d26059447d45fa91f54eca38680be7b7"; - }; - builder = ./builder.sh; - buildInputs = [ autoconf ghc ]; -} diff --git a/pkgs/development/libraries/haskell/uulib/builder.sh b/pkgs/development/libraries/haskell/uulib/builder.sh deleted file mode 100644 index bdb0e81430e1..000000000000 --- a/pkgs/development/libraries/haskell/uulib/builder.sh +++ /dev/null @@ -1,51 +0,0 @@ -source $stdenv/setup - - -export HOME=$(pwd)/fake-home - - -#add ghc to search path -test -n "$ghc" && PATH=$PATH:$ghc/bin - -#unpack -tar xzf "$src" && -cd uulib-* && - -#configure -ghc --make Setup.hs -o setup -package Cabal && -./setup configure --prefix=$out && - -#make -./setup build && - -#install -./setup copy && - -# Create package database. If we can find the ghc version we might install the -# package, like ghc does, in $out/lib/ghc-version/package.conf. - -support=$out/nix-support && -packages_db=$out/nix-support/package.conf && - -mkdir $support && -cp $ghc/lib/ghc-*/package.conf $packages_db && -chmod +w $packages_db && -#echo '[]' > $packages_db && - -# We save a modified version of a register script. This gives a dependency on -# ghc, but this should not be a problem as long as $out is a static library. - -./setup register --gen-script && -sed '/ghc-pkg/ s|update -|-f "$1" update -|' register.sh > register-pkg.sh && -sed '/ghc-pkg/ s|--auto-ghci-libs||' register-pkg.sh > $support/register.sh && - -# The package and its direct cabal dependencies are registered. This may result -# in duplicate registrations attempts but hopefully that will not result in -# errors. - -# uulib has no dependencies on other ghc libraries -for dep in ; do - sh $dep/nix-support/register.sh $packages_db || exit 1 -done && -sh register-pkg.sh $packages_db && -rm -f $package_db.old diff --git a/pkgs/development/libraries/haskell/uulib/default.nix b/pkgs/development/libraries/haskell/uulib/default.nix index c8bcf25dcc4b..0e5e517d7c54 100644 --- a/pkgs/development/libraries/haskell/uulib/default.nix +++ b/pkgs/development/libraries/haskell/uulib/default.nix @@ -1,12 +1,10 @@ -{stdenv, fetchurl, ghc}: +{cabal}: -stdenv.mkDerivation { - name = "uulib-0.9.2"; - src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/uulib-0.9.2-src.tar.gz; - md5 = "0cc9acc6a268e2bc5c8a954e67406e2d"; +cabal.mkDerivation (self : { + pname = "uulib"; + version = "0.9.5"; + sha256 = "38415725133af464de582dadc7d7e60b1aeb96344b18b239d176bf2181f98563"; + meta = { + description = "Fast Parser Combinators and Pretty Printing Combinators"; }; - builder = ./builder.sh; - #buildInputs = [ ghc ]; - inherit ghc; -} +}) diff --git a/pkgs/development/libraries/haskell/vty/default.nix b/pkgs/development/libraries/haskell/vty/default.nix new file mode 100644 index 000000000000..930e19ae89c5 --- /dev/null +++ b/pkgs/development/libraries/haskell/vty/default.nix @@ -0,0 +1,13 @@ +{cabal}: + +cabal.mkDerivation (self : { + pname = "vty"; + version = "3.0.0"; + sha256 = "44ae53d06b8b45c14cd3861e860a38730ed9995ed56b1b3d9aba6641771f1947"; + meta = { + description = "vty is a *very* simplistic library in the niche of ncurses"; + }; + preConfigure = '' + sed -i 's|^Build-Depends:.*$|&, bytestring, containers|' ${self.pname}.cabal + ''; +}) diff --git a/pkgs/development/libraries/haskell/zlib/default.nix b/pkgs/development/libraries/haskell/zlib/default.nix new file mode 100644 index 000000000000..268a43b5ea3f --- /dev/null +++ b/pkgs/development/libraries/haskell/zlib/default.nix @@ -0,0 +1,11 @@ +{cabal, zlib}: + +cabal.mkDerivation (self : { + pname = "zlib"; + version = "0.4.0.2"; + sha256 = "e6e9e51ca5b7f1685eb031f826f7865acc10cc2c8d0dfad975e0e81fd17f17ed"; + propagatedBuildInputs = [zlib]; + meta = { + description = "Compression and decompression in the gzip and zlib formats"; + }; +}) diff --git a/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix b/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix index be0db328ef94..8c3975c8da21 100644 --- a/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix +++ b/pkgs/development/libraries/libdbi-drivers/0.8.2-1.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = mirror://sourceforge/libdbi-drivers/libdbi-drivers-0.8.2-1.tar.gz; @@ -27,10 +27,11 @@ args : with args; ] else []) ; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "libdbi"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " DB independent interface to DB; DB drivers (mysql only for now). diff --git a/pkgs/development/libraries/libdbi/0.8.2.nix b/pkgs/development/libraries/libdbi/0.8.2.nix index e7dc24417f21..e80c0196650a 100644 --- a/pkgs/development/libraries/libdbi/0.8.2.nix +++ b/pkgs/development/libraries/libdbi/0.8.2.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = mirror://sourceforge/libdbi/libdbi-0.8.2.tar.gz; @@ -9,10 +9,11 @@ args : with args; buildInputs = []; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "libdbi"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " DB independent interface to DB. diff --git a/pkgs/development/libraries/libextractor/0.5.18.nix b/pkgs/development/libraries/libextractor/0.5.18.nix index 3f8304d7304a..6fc5e8524486 100644 --- a/pkgs/development/libraries/libextractor/0.5.18.nix +++ b/pkgs/development/libraries/libextractor/0.5.18.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://gnunet.org/libextractor/download/libextractor-0.5.18.tar.gz; @@ -9,10 +9,11 @@ args : with args; buildInputs = [ zlib]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "libextractor"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " Libextractor - extracts metadata from files. diff --git a/pkgs/development/python-modules/ZopeInterface/default.nix b/pkgs/development/python-modules/ZopeInterface/default.nix index 0fe40954115b..6bcedcd0f171 100644 --- a/pkgs/development/python-modules/ZopeInterface/default.nix +++ b/pkgs/development/python-modules/ZopeInterface/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, python}: stdenv.mkDerivation { - name = "ZopeInterface-3.1.0c1"; + name = "ZopeInterface-3.3.0"; src = fetchurl { - url = http://www.zope.org/Products/ZopeInterface/3.1.0c1/ZopeInterface-3.1.0c1.tgz; - md5 = "f34cb95f2fbdbe3f1850c95cefddbd2c"; + url = http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz; + sha256 = "0xahg9cmagn4j3dbifvgzbjliw2jdrbf27fhqwkdp8j80xpyyjf0"; }; buildInputs = [python]; buildPhase = "true"; diff --git a/pkgs/development/python-modules/twisted/default.nix b/pkgs/development/python-modules/twisted/default.nix index 37a42faf8568..7fdf610d74ca 100644 --- a/pkgs/development/python-modules/twisted/default.nix +++ b/pkgs/development/python-modules/twisted/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, python, ZopeInterface}: stdenv.mkDerivation { - name = "twisted-2.4.0"; + name = "twisted-2.5.0"; src = fetchurl { - url = http://tmrc.mit.edu/mirror/twisted/Twisted/2.4/Twisted-2.4.0.tar.bz2; - md5 = "42eb0c8fd0f8707a39fff1dd6adab27d"; + url = http://tmrc.mit.edu/mirror/twisted/Twisted/2.5/Twisted-2.5.0.tar.bz2; + sha256 = "1kfj4354lm4kphm317giyldykyd17lba2xd7y512lxc38hzxzcpk"; }; buildInputs = [python]; propagatedBuildInputs = [ZopeInterface]; diff --git a/pkgs/development/tools/documentation/haddock/default.nix b/pkgs/development/tools/documentation/haddock/default.nix new file mode 100644 index 000000000000..86d07b240a54 --- /dev/null +++ b/pkgs/development/tools/documentation/haddock/default.nix @@ -0,0 +1,11 @@ +{cabal}: + +cabal.mkDerivation (self : { + pname = "haddock"; + version = "2.0.0.0"; + name = self.fname; + sha256 = "a2ea5bdc127bc8b189a8d869f582ec774fea0933e7f5ca89549a6c142b9993df"; + meta = { + description = "a tool for automatically generating documentation from annotated Haskell source code"; + }; +}) diff --git a/pkgs/development/tools/haskell/uuagc/default.nix b/pkgs/development/tools/haskell/uuagc/default.nix index 519244ae7b84..b45db5f2ea6c 100644 --- a/pkgs/development/tools/haskell/uuagc/default.nix +++ b/pkgs/development/tools/haskell/uuagc/default.nix @@ -1,14 +1,12 @@ -{stdenv, fetchurl, ghc, uulib}: +{cabal, uulib}: -stdenv.mkDerivation -{ - name = "uuagc-0.9.2"; - - src = fetchurl { url = http://www.cs.uu.nl/~ariem/uuagc-0.9.2-src.tar.gz; - md5 = "cbac92287c9c0a858ccbfa37615d9f5f"; - }; - - buildInputs = [ghc uulib]; - - meta = { description = "The UUAG Compiler"; }; -} +cabal.mkDerivation (self : { + pname = "uuagc"; + version = "0.9.5"; + name = self.fname; + sha256 = "c5be435efa609f72c09e175dd5cf7835a060bd7eaf6634ec4cde72ea84b99f25"; + extraBuildInputs = [uulib]; + meta = { + description = "Attribute Grammar System of Universiteit Utrecht"; + }; +}) diff --git a/pkgs/development/tools/misc/indent/2.2.9.nix b/pkgs/development/tools/misc/indent/2.2.9.nix index d7e91abcf83b..5e92802beed1 100644 --- a/pkgs/development/tools/misc/indent/2.2.9.nix +++ b/pkgs/development/tools/misc/indent/2.2.9.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = ftp://ftp.gnu.org/gnu/indent/indent-2.2.9.tar.gz; @@ -9,6 +9,7 @@ args : with args; buildInputs = []; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let preBuild = FullDepEntry (" sed -e '/extern FILE [*]output/i#ifndef OUTPUT_DEFINED_ELSEWHERE' -i src/indent.h @@ -19,7 +20,7 @@ in stdenv.mkDerivation rec { name = "indent"; builder = writeScript (name + "-builder") - (textClosure [doConfigure preBuild doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure preBuild doMakeInstall doForceShare doPropagate]); meta = { description = " GNU Indent - a source text formatter. diff --git a/pkgs/development/tools/misc/intltool/0.36.2.nix b/pkgs/development/tools/misc/intltool/0.36.2.nix index d8315a9ba62e..884c76a800c7 100644 --- a/pkgs/development/tools/misc/intltool/0.36.2.nix +++ b/pkgs/development/tools/misc/intltool/0.36.2.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://ftp.gnome.org/pub/gnome/sources/intltool/0.36/intltool-0.36.2.tar.bz2; @@ -9,10 +9,11 @@ args : with args; propagatedBuildInputs = [perl perlXMLParser]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "intltool-0.36.2"; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doPropagate doForceShare]); + (textClosure localDefs [doConfigure doMakeInstall doPropagate doForceShare]); inherit propagatedBuildInputs; meta = { description = " diff --git a/pkgs/development/tools/misc/ltrace/default.nix b/pkgs/development/tools/misc/ltrace/default.nix index 23b44bf3b5b7..cd77984ded6c 100644 --- a/pkgs/development/tools/misc/ltrace/default.nix +++ b/pkgs/development/tools/misc/ltrace/default.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.5.orig.tar.gz; @@ -12,6 +12,7 @@ args : with args; cd ltrace-*; "; } null; /* null is a terminator for sumArgs */ + in with localDefs; let preConfigure = FullDepEntry (" sed -e 's@-o root -g root@@' -i Makefile.in; @@ -20,7 +21,7 @@ in stdenv.mkDerivation rec { name = "ltrace-0.5"; builder = writeScript (name + "-builder") - (textClosure [preConfigure doConfigure doMakeInstall doForceShare]); + (textClosure localDefs [preConfigure doConfigure doMakeInstall doForceShare]); meta = { description = " Library call tracer. diff --git a/pkgs/development/tools/parsing/alex/default.nix b/pkgs/development/tools/parsing/alex/default.nix index 00d414d56bde..273a25753e82 100644 --- a/pkgs/development/tools/parsing/alex/default.nix +++ b/pkgs/development/tools/parsing/alex/default.nix @@ -1,23 +1,12 @@ -{stdenv, fetchurl, ghc, perl}: +{cabal, perl}: -stdenv.mkDerivation { - name = "alex-2.1.0"; - src = fetchurl { - url = http://www.haskell.org/alex/dist/2.1.0/alex-2.1.0.tar.gz; - sha1 = "37599b7be5249d639b3a5a3fdc61907dc4dad660"; +cabal.mkDerivation (self : { + pname = "alex"; + version = "2.2"; + name = self.fname; + sha256 = "e958d4fc6cfdb1d351dc39a45ea882f23b1b1773a736d43814a52d4939a41ffe"; + extraBuildInputs = [perl]; + meta = { + description = "A lexical analyser generator for Haskell"; }; - buildInputs = [ghc perl]; - - configurePhase = " - ghc --make Setup.lhs - ./Setup configure --prefix=\"\${out}\" - "; - - buildPhase = " - ./Setup build - "; - - installPhase = " - ./Setup install - "; -} +}) diff --git a/pkgs/development/tools/parsing/happy/happy-1.17.nix b/pkgs/development/tools/parsing/happy/happy-1.17.nix new file mode 100644 index 000000000000..b7fa22ccb800 --- /dev/null +++ b/pkgs/development/tools/parsing/happy/happy-1.17.nix @@ -0,0 +1,12 @@ +{cabal, perl}: + +cabal.mkDerivation (self : { + + # requires cabal-1.2 (and therefore, in Nix, currently ghc-6.8) + + pname = "happy"; + version = "1.17"; + name = self.fname; + sha256 = "dca4e47d17e5d538335496236b3d2c3cbff644cf7380c987a4714e7784c70a2b"; + extraBuildInputs = [perl]; +}) diff --git a/pkgs/games/construo/0.2.2.nix b/pkgs/games/construo/0.2.2.nix index 964b0e3898e6..555d2f4b30b9 100644 --- a/pkgs/games/construo/0.2.2.nix +++ b/pkgs/games/construo/0.2.2.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://savannah.nongnu.org/download/construo/construo-0.2.2.tar.gz; @@ -11,6 +11,7 @@ args : with args; ; configureFlags = [""]; } null; /* null is a terminator for sumArgs */ + in with localDefs; let preConfigure = FullDepEntry (" sed -e 's/math[.]h/cmath/' -i vector.cxx @@ -20,7 +21,7 @@ in stdenv.mkDerivation rec { name = "construo-"+version; builder = writeScript (name + "-builder") - (textClosure [preConfigure doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [preConfigure doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " Construo masses and springs simulation. diff --git a/pkgs/games/fsg/alt-builder.nix b/pkgs/games/fsg/alt-builder.nix index 8efd788789b4..4401bf8451ac 100644 --- a/pkgs/games/fsg/alt-builder.nix +++ b/pkgs/games/fsg/alt-builder.nix @@ -1,13 +1,13 @@ args: with args; - with (builderDefs - { + let localDefs = builderDefs { buildInputs =[(wxGTK null)]; src = fetchurl { url = http://www.piettes.com/fallingsandgame/fsg-src-4.4.tar.gz; sha256 = "1756y01rkvd3f1pkj88jqh83fqcfl2fy0c48mcq53pjzln9ycv8c"; }; - } null); + } null; + in with localDefs; let preBuild = FullDepEntry " sed -e ' @@ -25,7 +25,7 @@ in stdenv.mkDerivation { name = "fsg-4.4"; builder = writeScript "fsg-4.4-builder" - (textClosure [doUnpack addInputs preBuild doMake installPhase doForceShare]); + (textClosure localDefs [doUnpack addInputs preBuild doMake installPhase doForceShare]); meta = { description = " diff --git a/pkgs/games/orbit/1.01.nix b/pkgs/games/orbit/1.01.nix new file mode 100644 index 000000000000..ba824e83f1c5 --- /dev/null +++ b/pkgs/games/orbit/1.01.nix @@ -0,0 +1,43 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs rec { + src = /* put a fetchurl here */ + fetchurl { + sha256 = "1kx69f9jqnfzwjh47cl1df8p8hn3bnp6bznxnb6c4wx32ijn5gri"; + url = http://ftp.de.debian.org/debian/pool/main/s/space-orbit/space-orbit_1.01.orig.tar.gz; + }; + + buildInputs = [mesa libXi libXt libXext libX11 libXmu freeglut esound]; + configureFlags = []; + debianPatch = + fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/s/space-orbit/space-orbit_1.01-9.diff.gz; + sha256 = "1v3s97day6fhv08l2rn81waiprhi1lfyjjsj55axfh6n6zqfn1w2"; + }; + customBuild = FullDepEntry ('' + gunzip < ${debianPatch} | patch -Np1 + cd src + sed -e 's@/usr/share/games/orbit/@'$out'/dump/@g' -i *.c + sed -e '/DIR=/d' -i Makefile + make + ensureDir $out/bin + cp -r .. $out/dump + cat >$out/bin/space-orbit < = { buildInputs = ; pass = ; } + flagConfigWithOptionals = flagConfig // ( listToAttrs + (map ( o : nv o ( { buildInputs = o; pass = nvs o (builtins.getAttr o args); } + // getAttr [o] {} flagConfig ) + ) + passedOptionals ) ); + + in chooseOptionsByFlags2 flagConfigWithOptionals collectExtraPhaseActions args + ( (getAttr ["flags"] defaults args) ++ passedOptionals); + + chooseOptionsByFlags2 = flagConfig : collectExtraPhaseActions : args : flags : + let + # helper function + collectFlags = # state : flags : + fold ( flag : s : ( + if (hasAttr flag s.result) then s # this state has already been visited + else if (! hasAttr flag flagConfig) then throw "unkown flag `${flag}' specified" + else let fDesc = (builtins.getAttr flag flagConfig); + implied = flatten ( getAttr ["implies"] [] fDesc ); + blocked = flatten ( getAttr ["blocks"] [] fDesc ); + # add this flag + s2 = s // { result = ( setAttr s.result flag (builtins.getAttr flag flagConfig) ); + blockedFlagsBy = s.blockedFlagsBy + // listToAttrs (map (b: nv b flag ) blocked); }; + # add implied flags + in collectFlags s2 implied + )); + + # chosen contains flagConfig but only having those attributes elected by flags + # (or by implies attributes of elected attributes) + options = let stateOpts = collectFlags { blockedFlagsBy = {}; result = {}; } + (flags ++ ( if (hasAttr "mandatory" flagConfig) then ["mandatory"] else [] )); + # these options have not been chosen (neither by flags nor by implies) + unsetOptions = filter ( x : (! hasAttr x stateOpts.result) && (hasAttr ("no_"+x) flagConfig)) + ( attrNames flagConfig ); + # no add the corresponding no_ attributes as well .. + state = collectFlags stateOpts (map ( x : "no_" + x ) unsetOptions); + in # check for blockings: + assert ( all id ( map ( b: if (hasAttr b state.result) + then throw "flag ${b} is blocked by flag ${__getAttr b state.blockedFlagsBy}" + else true ) + (attrNames state.blockedFlagsBy) ) ); + state.result; + flatOptions = flattenAttrs options; + + # helper functions : + collectAttrs = attr : catAttrs attr flatOptions; + optsConcatStrs = delimiter : attrs : concatStrings + ( intersperse delimiter (flatten ( collectAttrs attrs ) ) ); + + ifStringGetArg = x : if (__isAttrs x) then x # ( TODO implement __isString ?) + else nvs x (__getAttr x args); + + in assert ( all id ( mapRecordFlatten ( attr : r : if ( all id ( flatten (getAttr ["assertion"] [] r ) ) ) + then true else throw "assertion failed flag ${attr}" ) + options) ); + ( rec { + + #foldOptions = attr: f : start: fold f start (catAttrs attr flatOptions); + + # compared to flags flagsSet does also contain the implied flags.. This makes it easy to write assertions. ( assert args. + inherit options flatOptions collectAttrs optsConcatStrs; + + buildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) ) + (flatten (catAttrs "buildInputs" flatOptions)); + propagatedBuildInputs = map ( attr: if (! hasAttr attr args) then throw "argument ${attr} is missing!" else (builtins.getAttr attr args) ) + (flatten (catAttrs "propagatedBuildInputs" flatOptions)); + + configureFlags = optsConcatStrs " " "cfgOption"; + + #flags = listToAttrs (map ( flag: nv flag (hasAttr flag options) ) (attrNames flagConfig) ); + flags_prefixed = listToAttrs (map ( flag: nv ("flag_set_"+flag) (hasAttr flag options) ) (attrNames flagConfig) ); + + pass = mergeAttrs ( map ifStringGetArg ( flatten (collectAttrs "pass") ) ); + } # now add additional phase actions (see examples) + // listToAttrs ( map ( x : nv x (optsConcatStrs "\n" x) ) collectExtraPhaseActions ) ); } + +/* + TODO: Perhaps it's better to move this documentation / these tests into some extra packages .. + + # ########################################################################### + # configuration tutorial .. examples and tests.. + # Copy this into all-packages.nix and try + + # The following derviations will all fail.. + # But they will print the passed options so that you can get to know + # how these configurations ought to work. + # TODO: There is no nice way to pass an otpion yet. + # I could imagine something like + # flags = [ "flagA" "flagB" { flagC = 4; } ]; + + # They are named: + # simpleYes, simpleNo, + # defaultsimpleYes, defaultsimpleNo + # optionalssimpleYes, optionalssimpleNo + # bitingsimpleYes can only be ran with -iA blockingBiteMonster + # assertionsimpleNo + # of course you can use -iA and the attribute name as well to select these examples + + # dummy build input + whoGetsTheFlagFirst = gnused; + whoGetsTheFlagLast = gnumake; + + # simple example demonstrating containing one flag. + # features: + # * configure options are passed automatically + # * buildInputs are collected (they are special, see the setup script) + # * they can be passed by additional name as well using pass = { inherit (args) python } + # ( or short (value not attrs) : pass = "python" ) + # * an attribute named the same way as the flag is added indicating + # true/ false (flag has been set/ not set) + # * extra phase dependend commands can be added + # Its easy to add your own stuff using co.collectAttrs or co.optsConcatStrs + # ( perhaps this name will change?) + simpleFlagYesNoF = namePrefix : extraFlagAttrs : mkDerivationByConfiguration ( { + flagConfig = { + flag = { name = namePrefix + "simpleYes"; + cfgOption = [ "--Yes" "--you-dont-need-a-list" ]; + buildInputs = [ "whoGetsTheFlagFirst" ]; + pass = { inherit gnumake; }; + extraConfigureCmd = "echo Hello, it worked! "; + blocks = "bitingMonster"; + }; + no_flag = { name = namePrefix + "simpleNo"; + cfgOption = "--no"; + implies = ["bitingMonster"]; + }; + bitingMonster = { + extraConfigureCmd = "echo Ill bite you"; + }; + gnutar = { cfgOption="--with-gnutar"; + # buildInputs and pass will be added automatically if gnutar is added to optionals + }; + # can be used to check configure options of dependencies + # eg testFlag = { assertion = [ arg.desktop.flag_set_wmii (! arg.desktop.flag_set_gnome) (! arg.desktops.flag_set_kde ]; } + assertionFlag = { assertion = false; }; # assert is nix language keyword + + }; + + collectExtraPhaseActions = [ "extraConfigureCmd" ]; + + extraAttrs = co : { + name = ( __head (co.collectAttrs "name") ); + + unpackPhase = " + echo my name is + echo \$name + echo + echo flag given \\(should be 1 or empty string\\) ? + echo \$flag_set_flag + echo + echo my build inputs are + echo \$buildInputs + echo + echo my configuration flags are + echo \$configureFlags + echo + echo what about gnumake? Did it pass? + echo \$gnumake + echo + echo configurePhase command is + echo $\configurePhase + echo + echo gnutar passed? \\(optional test\\) + echo \$gnutar + echo + echo dying now + echo die_Hopefully_Soon + "; + configurePhase = co.extraConfigureCmd; + }; + } // extraFlagAttrs ); + + + simpleYes = simpleFlagYesNoF "" {} { + inherit whoGetsTheFlagFirst lib stdenv; + flags = ["flag"]; + }; + # note the "I'll bite you" because of the implies attribute + simpleNo = simpleFlagYesNoF "" {} { + inherit whoGetsTheFlagFirst lib stdenv; + flags = []; + }; + + # specifying defaults by adding a default attribute + + yesAgainDefault = simpleFlagYesNoF "default" { defaults = [ "flag" ];} { + inherit whoGetsTheFlagFirst lib stdenv; + }; + noAgainOverridingDefault = simpleFlagYesNoF "default" { defaults = [ "flag" ];} { + inherit whoGetsTheFlagFirst lib stdenv; + flags = []; + }; + + # requested by Michael Raskin: activate flag automatically if dependency is passed: + withGnutarOptional = simpleFlagYesNoF "optionals" { optionals = [ "gnutar" ];} { + flags = [ "flag" ]; # I only need to pass this to trigger name optionalssimpleYes + inherit whoGetsTheFlagFirst lib stdenv; + inherit gnutar; + }; + withoutGnutarOptional = simpleFlagYesNoF "optionals" { optionals = [ "gnutar" ];} { + inherit whoGetsTheFlagFirst lib stdenv; + }; + + # blocking example, this shouldn't even start building: + blockingBiteMonster = simpleFlagYesNoF "biting" {} { + inherit whoGetsTheFlagFirst lib stdenv; + flags = [ "flag" "bitingMonster" ]; + }; + + # assertion example this shouldn't even start building: + assertion = simpleFlagYesNoF "assertion" {} { + inherit whoGetsTheFlagFirst lib stdenv; + flags = [ "assertionFlag" ]; + }; +*/ diff --git a/pkgs/lib/strings-with-deps.nix b/pkgs/lib/strings-with-deps.nix index 78cded99ef71..4fb4fe150a7c 100644 --- a/pkgs/lib/strings-with-deps.nix +++ b/pkgs/lib/strings-with-deps.nix @@ -1,9 +1,24 @@ +/* +Usage: + + You define you custom builder script by adding all build steps to a list. + for example: + builder = writeScript "fsg-4.4-builder" + (textClosure [doUnpack addInputs preBuild doMake installPhase doForceShare]); + + a step is defined by noDepEntry, FullDepEntry or PackEntry. + To ensure that prerequisite are met those are added before the task itself by + textClosureDupList. Duplicated items are removed again. + + See trace/nixpkgs/trunk/pkgs/top-level/builder-defs.nix for some predefined build steps + +*/ args: with args; with lib; let inherit (builtins) - head tail isList; + head tail isList isAttrs; in rec { @@ -37,12 +52,23 @@ rec { (concatLists (map textClosureDupList arg.deps)) ++ [arg] ); - textClosureList = arg: + textClosureDupListOverridable = predefined: arg: + ( + if isList arg then + textClosureDupListOverridable predefined {text = ""; deps = arg;} + else if isAttrs arg then + (concatLists (map (textClosureDupListOverridable predefined) arg.deps)) ++ [arg] + else + textClosureDupListOverridable predefined (getAttr [arg] [] predefined) + ); + + textClosureListOverridable = predefined: arg: (map (x : x.text) - (uniqList {inputList = textClosureDupList arg;})); - textClosure = arg: concatStringsSep "\n" (textClosureList arg); + (uniqList {inputList = textClosureDupListOverridable predefined arg;})); + textClosureOverridable = predefined: arg: concatStringsSep "\n" (textClosureListOverridable predefined arg); - textClosureMap = f: arg: concatStringsSep "\n" (map f (textClosureList arg)); + textClosureMapOveridable = f: predefined: arg: + concatStringsSep "\n" (map f (textClosureListOverridable predefined arg)); noDepEntry = text : {inherit text;deps = [];}; FullDepEntry = text : deps: {inherit text deps;}; diff --git a/pkgs/misc/tex/nix/find-includes.pl b/pkgs/misc/tex/nix/find-includes.pl index 649b16dc35fb..9e5fd112bac9 100644 --- a/pkgs/misc/tex/nix/find-includes.pl +++ b/pkgs/misc/tex/nix/find-includes.pl @@ -59,6 +59,7 @@ while (scalar @workset > 0) { if (/\\input\{(.*)\}/) { my $fn2 = $1; die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/"; + push @workset, "$path/$fn2.tex"; push @workset, "$path/$fn2"; } elsif (/\\usepackage(\[.*\])?\{(.*)\}/) { my $fn2 = $2; diff --git a/pkgs/misc/trac/builder.sh b/pkgs/misc/trac/builder.sh index a3e97e178a01..76bf06123348 100644 --- a/pkgs/misc/trac/builder.sh +++ b/pkgs/misc/trac/builder.sh @@ -1,5 +1,4 @@ source $stdenv/setup -source $makeWrapper unpackPhase mkdir -p $out @@ -7,7 +6,6 @@ cd $name $python/bin/python setup.py install --prefix=$out for i in $(cd $out/bin && ls); do - mv $out/bin/$i $out/bin/.orig-$i - makeWrapper $out/bin/.orig-$i $out/bin/$i \ - --set PYTHONPATH "$python/site-packages:$out/lib/python2.4/site-packages:$pysqlite/lib/python2.4/site-packages:$subversion/lib/svn-python:$clearsilver/site-packages" + wrapProgram $out/bin/$i \ + --prefix PYTHONPATH : "$(toPythonPath $python):$(toPythonPath $out):$(toPythonPath $pysqlite):$subversion/lib/svn-python:$clearsilver/site-packages" done diff --git a/pkgs/misc/trac/default.nix b/pkgs/misc/trac/default.nix index c456c51daff9..b93c36843d32 100644 --- a/pkgs/misc/trac/default.nix +++ b/pkgs/misc/trac/default.nix @@ -3,13 +3,12 @@ assert stdenv.system == "i686-linux"; stdenv.mkDerivation { - name = "trac-0.9.5"; - src = fetchurl { - url = "http://ftp.edgewall.com/pub/trac/trac-0.9.5.tar.gz"; - md5 = "3b7d708eaf905cc6ba2b6b10a09a8cf4"; - }; - builder = ./builder.sh; - inherit stdenv python subversion clearsilver sqlite pysqlite makeWrapper; + name = "trac-0.9.5"; + src = fetchurl { + url = "http://ftp.edgewall.com/pub/trac/trac-0.9.5.tar.gz"; + md5 = "3b7d708eaf905cc6ba2b6b10a09a8cf4"; + }; + builder = ./builder.sh; + buildInputs = [makeWrapper]; + inherit stdenv python subversion clearsilver sqlite pysqlite; } - - diff --git a/pkgs/os-specific/linux/atheros/0.9.3.3.nix b/pkgs/os-specific/linux/atheros/0.9.3.3.nix index d5c207bf1881..419c136bed23 100644 --- a/pkgs/os-specific/linux/atheros/0.9.3.3.nix +++ b/pkgs/os-specific/linux/atheros/0.9.3.3.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://downloads.sourceforge.net/madwifi/madwifi-0.9.3.3.tar.bz2; @@ -16,6 +16,7 @@ args : with args; sha256 = "11xpx5g9w7ilagvj60prc3s8a3x0n5n4mr0b7nh0lxwrbjdgjjfg"; } else "")*/; } null; /* null is a terminator for sumArgs */ + in with localDefs; let doPatch = FullDepEntry (if patchAR2425x86 !="" then '' cd hal @@ -25,7 +26,7 @@ in stdenv.mkDerivation rec { name = "atheros-"+version; builder = writeScript (name + "-builder") - (textClosure [doPatch doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doPatch doMakeInstall doForceShare doPropagate]); meta = { description = " Atheros WiFi driver. diff --git a/pkgs/os-specific/linux/atheros/r2756.nix b/pkgs/os-specific/linux/atheros/r2756.nix index 8309b7858659..031404b0395f 100644 --- a/pkgs/os-specific/linux/atheros/r2756.nix +++ b/pkgs/os-specific/linux/atheros/r2756.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://snapshots.madwifi.org/madwifi-ng/madwifi-ng-r2756-20071018.tar.gz; @@ -16,6 +16,7 @@ args : with args; sha256 = "11xpx5g9w7ilagvj60prc3s8a3x0n5n4mr0b7nh0lxwrbjdgjjfg"; } else ""); } null; /* null is a terminator for sumArgs */ + in with localDefs; let doPatch = FullDepEntry (if patchAR2425x86 !="" then '' cd hal @@ -26,7 +27,7 @@ in stdenv.mkDerivation rec { name = "atheros-"+version; builder = writeScript (name + "-builder") - (textClosure [doPatch doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doPatch doMakeInstall doForceShare doPropagate]); meta = { description = " Atheros WiFi driver. diff --git a/pkgs/os-specific/linux/atheros/r3122.nix b/pkgs/os-specific/linux/atheros/r3122.nix index c82b4021544a..e9fb7bab01a4 100644 --- a/pkgs/os-specific/linux/atheros/r3122.nix +++ b/pkgs/os-specific/linux/atheros/r3122.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://snapshots.madwifi.org/madwifi-ng/madwifi-ng-r3122-20080109.tar.gz; @@ -10,10 +10,11 @@ args : with args; configureFlags = []; makeFlags = [''KERNELPATH=${kernel}/lib/modules/*/build'' ''DESTDIR=$out'']; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "atheros-"+version; builder = writeScript (name + "-builder") - (textClosure [doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doMakeInstall doForceShare doPropagate]); meta = { description = " Atheros WiFi driver. diff --git a/pkgs/os-specific/linux/dmidecode/2.9.nix b/pkgs/os-specific/linux/dmidecode/2.9.nix index 787846465d84..968ab80a4aff 100644 --- a/pkgs/os-specific/linux/dmidecode/2.9.nix +++ b/pkgs/os-specific/linux/dmidecode/2.9.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://download.savannah.gnu.org/releases/dmidecode/dmidecode-2.9.tar.bz2; @@ -10,10 +10,11 @@ args : with args; configureFlags = []; makeFlags = "prefix=\$out"; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "dmidecode-"+version; builder = writeScript (name + "-builder") - (textClosure [ doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [ doMakeInstall doForceShare doPropagate]); meta = { description = " Tool to decode Desktop Management Interface and SBIOS data. diff --git a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix index c991389633ca..658bdbf55fa2 100644 --- a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix +++ b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://fy.chalmers.se/~appro/linux/DVD+RW/tools/dvd+rw-tools-7.0.tar.gz; @@ -10,6 +10,7 @@ args : with args; configureFlags = []; makeFlags = [" prefix=\$out "]; } null; /* null is a terminator for sumArgs */ + in with localDefs; let preBuild = FullDepEntry (" sed -e 's@/usr/local@'\$out'@g' -i Makefile.m4 Makefile @@ -18,7 +19,7 @@ in stdenv.mkDerivation rec { name = "dvd+rw-tools-"+version; builder = writeScript (name + "-builder") - (textClosure [preBuild doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [preBuild doMakeInstall doForceShare doPropagate]); meta = { description = " DVD+RW tools. diff --git a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix index 3aa2731ac3fb..20e738e06928 100644 --- a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix +++ b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://fabrice.bellard.free.fr/qemu/kqemu-1.3.0pre11.tar.gz; @@ -8,11 +8,13 @@ args : with args; buildInputs = []; configureFlags = [''--prefix=$out'' ''--kernel-path=$(ls -d ${kernel}/lib/modules/*/build)'']; } null; /* null is a terminator for sumArgs */ + in with localDefs; let debugStep = FullDepEntry ('' cat config-host.mak '') [minInit]; preConfigure = FullDepEntry ('' + sed -e 's/`uname -r`/'"$(basename ${kernel}/lib/modules/*)"'/' -i install.sh sed -e '/kernel_path=/akernel_path=$out$kernel_path' -i install.sh sed -e '/depmod/d' -i install.sh cat install.sh @@ -21,7 +23,7 @@ in stdenv.mkDerivation rec { name = "kqemu-"+version; builder = writeScript (name + "-builder") - (textClosure [preConfigure doConfigure debugStep doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [preConfigure doConfigure debugStep doMakeInstall doForceShare doPropagate]); meta = { description = " Kernel module for Qemu acceleration diff --git a/pkgs/os-specific/linux/module-init-tools/aggregator.nix b/pkgs/os-specific/linux/module-init-tools/aggregator.nix index cfd49cc0813f..ed30be250d23 100644 --- a/pkgs/os-specific/linux/module-init-tools/aggregator.nix +++ b/pkgs/os-specific/linux/module-init-tools/aggregator.nix @@ -1,10 +1,11 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { addSbinPath = true; src = ""; buildInputs = [module_init_tools]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let doCollect = FullDepEntry ('' @@ -17,7 +18,7 @@ done rm -rf nix-support cd lib/modules/ rm */modules.* -MODULE_DIR=$PWD/ depmod -a +MODULE_DIR=$PWD/ depmod -a * cd $out/ '') [minInit addInputs defEnsureDir]; in @@ -25,7 +26,7 @@ stdenv.mkDerivation rec { name = "kernel-modules"; inherit moduleSources; builder = writeScript (name + "-builder") - (textClosure [doCollect doForceShare doPropagate]); + (textClosure localDefs [doCollect doForceShare doPropagate]); meta = { description = " A directory to hold all the modules, including those diff --git a/pkgs/os-specific/linux/sdparm/1.02.nix b/pkgs/os-specific/linux/sdparm/1.02.nix index 0616ac83563b..edff04444e06 100644 --- a/pkgs/os-specific/linux/sdparm/1.02.nix +++ b/pkgs/os-specific/linux/sdparm/1.02.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://sg.torque.net/sg/p/sdparm-1.02.tgz; @@ -9,10 +9,11 @@ args : with args; buildInputs = []; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "sdparm-"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " SCSI parameters utility. diff --git a/pkgs/os-specific/linux/usbutils/default.nix b/pkgs/os-specific/linux/usbutils/default.nix index b7d2c349e25c..1f123fadc879 100644 --- a/pkgs/os-specific/linux/usbutils/default.nix +++ b/pkgs/os-specific/linux/usbutils/default.nix @@ -3,17 +3,17 @@ let usbids = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/usb.ids.20061212.bz2; - sha256 = "112l4fzjn5p3y6fv3x10vbrd36n2v5n04s7pjdlkb2yqv4crp84m"; + url = http://nix.cs.uu.nl/dist/tarballs/usb.ids.20080115.bz2; + sha256 = "0xymp8fpp9pnkj2i4ry8zpsvy18zw14sx03pnz316lpgwc6dx12n"; }; in stdenv.mkDerivation { - name = "usbutils-0.72"; + name = "usbutils-0.73"; src = fetchurl { - url = mirror://sourceforge/linux-usb/usbutils-0.72.tar.gz; - sha256 = "08s4g4sz7p3a1afvphxd7h5bbfywvp0j611y85wbhwr14i9m6f00"; + url = mirror://sourceforge/linux-usb/usbutils-0.73.tar.gz; + sha256 = "1x27mc2apyipf8fa2ac49rfnkm7f5dwv784b1ncgc5yjiz4prp1f"; }; buildInputs = [libusb]; preBuild = "bunzip2 < ${usbids} > usb.ids"; diff --git a/pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh b/pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh new file mode 100644 index 000000000000..70b609e64656 --- /dev/null +++ b/pkgs/servers/http/apache-modules/tomcat-connectors/builder.sh @@ -0,0 +1,8 @@ +source $stdenv/setup + +tar xfvz $src +cd tomcat-connectors-*-src/native +./configure --with-apxs=$apacheHttpd/bin/apxs --with-java-home=$jdk +make +ensureDir $out/modules +cp apache-2.0/mod_jk.so $out/modules diff --git a/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix b/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix new file mode 100644 index 000000000000..5c33c444c0d6 --- /dev/null +++ b/pkgs/servers/http/apache-modules/tomcat-connectors/default.nix @@ -0,0 +1,14 @@ +{stdenv, fetchurl, apacheHttpd, jdk}: + +stdenv.mkDerivation { + name = "tomcat-connectors-1.2.26"; + builder = ./builder.sh; + + src = fetchurl { + url = http://apache.proserve.nl/tomcat/tomcat-connectors/jk/source/jk-1.2.26/tomcat-connectors-1.2.26-src.tar.gz; + md5 = "feaec245136bc4d99a9dde95a00ea93c"; + }; + + inherit apacheHttpd; + buildInputs = [apacheHttpd jdk]; +} diff --git a/pkgs/servers/http/jboss/builder.sh b/pkgs/servers/http/jboss/builder.sh new file mode 100644 index 000000000000..1a9e650ebcc1 --- /dev/null +++ b/pkgs/servers/http/jboss/builder.sh @@ -0,0 +1,18 @@ +buildInputs="$jdk5" +source $stdenv/setup + +export JDK_HOME=$jdk5 +export JAVA_HOME=$jdk5 + +tar xfvz $src +cd jboss-* +cd build +sh build.sh +ensureDir $out +cp -av output/jboss-*/* $out + +# Insert JAVA_HOME variable to make sure the latest JRE is used and not version 5 +sed -i -e "/GREP/aJAVA_HOME=$jdk" $out/bin/run.sh + +# Change the deploy directory to the nix profile +sed -i -e "s|deploy/|/nix/var/nix/profiles/default/server/default/deploy/|" $out/server/default/conf/jboss-service.xml diff --git a/pkgs/servers/http/jboss/default.nix b/pkgs/servers/http/jboss/default.nix new file mode 100644 index 000000000000..279e4bfae71c --- /dev/null +++ b/pkgs/servers/http/jboss/default.nix @@ -0,0 +1,20 @@ +{ stdenv, fetchurl, jdk5, jdk }: + +stdenv.mkDerivation { + name = "jboss-4.2.2.GA"; + + builder = ./builder.sh; + src = + fetchurl { + url = http://garr.dl.sourceforge.net/sourceforge/jboss/jboss-4.2.2.GA-src.tar.gz; + md5 = "2a626cdccabe712628555676d67ad44a"; + }; + + inherit jdk5 jdk; + + meta = { + homepage = "http://www.jboss.org/"; + description = "JBoss, Open Source J2EE application server"; + license = "GPL/LGPL"; + }; +} diff --git a/pkgs/servers/sql/postgresql/default.nix b/pkgs/servers/sql/postgresql/default.nix index b9ed02ffd206..a46f99e454b1 100644 --- a/pkgs/servers/sql/postgresql/default.nix +++ b/pkgs/servers/sql/postgresql/default.nix @@ -5,12 +5,12 @@ assert ncurses != null; assert readline != null; stdenv.mkDerivation { - name = "postgresql-8.0.6"; + name = "postgresql-8.2.6"; builder = ./builder.sh; src = fetchurl { - url = ftp://ftp2.nl.postgresql.org/mirror/postgresql/source/v8.0.6/postgresql-8.0.6.tar.bz2; - md5 = "f3b27b8171267f9a87592f931c09f0ee"; + url = ftp://ftp.de.postgresql.org/mirror/postgresql/source/v8.2.6/postgresql-8.2.6.tar.bz2; + sha256="056ixbsfmdwhniryc0mr1kl66jywkqqhqvjdi7i3v4qzh9z34hgf"; }; inherit readline; diff --git a/pkgs/servers/xmpp/ejabberd/builder.sh b/pkgs/servers/xmpp/ejabberd/builder.sh new file mode 100644 index 000000000000..4abf8da0682e --- /dev/null +++ b/pkgs/servers/xmpp/ejabberd/builder.sh @@ -0,0 +1,9 @@ +buildInputs="$expat $erlang $zlib $openssl" + +source $stdenv/setup + +tar xfvz $src +cd $name/src +./configure --prefix=$out +make +make install diff --git a/pkgs/servers/xmpp/ejabberd/default.nix b/pkgs/servers/xmpp/ejabberd/default.nix new file mode 100644 index 000000000000..8ce1b0912de2 --- /dev/null +++ b/pkgs/servers/xmpp/ejabberd/default.nix @@ -0,0 +1,11 @@ +{stdenv, fetchurl, expat, erlang, zlib, openssl}: + +stdenv.mkDerivation { + name = "ejabberd-1.1.4"; + builder = ./builder.sh; + src = fetchurl { + url = http://www.process-one.net/downloads/ejabberd/1.1.4/ejabberd-1.1.4.tar.gz; + md5 = "65e9cd346f11a28afbacfe1d7be3a33b"; + }; + inherit expat erlang zlib openssl; +} diff --git a/pkgs/stdenv/generic/setup-sh-defs.nix b/pkgs/stdenv/generic/setup-sh-defs.nix deleted file mode 100644 index 9f0803071786..000000000000 --- a/pkgs/stdenv/generic/setup-sh-defs.nix +++ /dev/null @@ -1,902 +0,0 @@ -with (import ../../lib/strings-with-deps.nix (import ../../lib/default-unstable.nix)); - -rec { - setStrictMode = noDepEntry "set -e;"; - setNixGcc = noDepEntry "test -z \$NIX_GCC && NIX_GCC=@gcc@;"; - - setPathDelimiter = noDepEntry " -if [ -z ${system##*cygwin*} ]; then - PATH_DELIMITER=; -else - PATH_DELIMITER=; -fi -" ; - - - initPath = noDepEntry "# Set up the initial path. -PATH= -for i in \$NIX_GCC @initialPath@; do - PATH=\$PATH\${PATH:+:}\$i/bin -done - -if test \"\$NIX_DEBUG\" = \"1\"; then - echo \"Initial path: \$PATH\" -fi -"; - - execPreHook = FullDepEntry "# Execute the pre-hook. -export SHELL=@shell@ -if test -z \"\$shell\"; then - export shell=@shell@ -fi -param1=@param1@ -param2=@param2@ -param3=@param3@ -param4=@param4@ -param5=@param5@ -if test -n \"@preHook@\"; then - source @preHook@ -fi -" []; - - checkShellEnv = FullDepEntry "# Check that the pre-hook initialised SHELL. -if test -z \"\$SHELL\"; then echo \"SHELL not set\"; exit 1; fi -" []; - - gccSetupHook = FullDepEntry "# Hack: run gcc's setup hook. -envHooks=() -if test -f \$NIX_GCC/nix-support/setup-hook; then - source \$NIX_GCC/nix-support/setup-hook -fi -" [setNixGcc]; - - - defEnsureDir = FullDepEntry "# Ensure that the given directories exists. -ensureDir() { - local dir - for dir in \"\$@\"; do - if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi - done -} -" []; - - defInstallBin = FullDepEntry " - -installBin() { - ensureDir $out/bin - cp "$@" $out/bin -} - -" []; - - defAssertEnvExists = FullDepEntry " -assertEnvExists(){ - if test -z "${!1}"; then - msg=${2:-error: assertion failed: env var $1 is required} - echo $msg >&2; exit 1 - fi -} -" []; - - defFail = FullDepEntry "# Called when some build action fails. If \$succeedOnFailure is set, -# create the file `\$out/nix-support/failed' to signal failure, and -# exit normally. Otherwise, exit with failure. -fail() { - exitCode=\$? - if test \"\$succeedOnFailure\" = 1; then - ensureDir \"\$out/nix-support\" - touch \"\$out/nix-support/failed\" - exit 0 - else - exit \$? - fi -} -" []; - - runAddInputsHook = FullDepEntry "# Allow the caller to augment buildInputs (it's not always possible to -# do this before the call to setup.sh, since the PATH is empty at that -# point; here we have a basic Unix environment). -eval \"\$addInputsHook\" -" [defFail]; - - defFindInputs = FullDepEntry "# Recursively find all build inputs. -findInputs() -{ - local pkg=\$1 - - case \$pkgs in - *\ \$pkg\ *) - return 0 - ;; - esac - - pkgs=\"\$pkgs \$pkg \" - - if test -f \$pkg/nix-support/setup-hook; then - source \$pkg/nix-support/setup-hook - fi - - if test -f \$pkg/nix-support/propagated-build-inputs; then - for i in \$(cat \$pkg/nix-support/propagated-build-inputs); do - findInputs \$i - done - fi -} -" []; - - getInputs = FullDepEntry "pkgs=\"\" -if test -n \"\$buildinputs\"; then - buildInputs=\"\$buildinputs\" # compatibility -fi -for i in \$buildInputs \$propagatedBuildInputs; do - findInputs \$i -done -" [defFindInputs]; - - defAddToEnv = FullDepEntry "# Set the relevant environment variables to point to the build inputs -# found above. -addToEnv() -{ - local pkg=\$1 - - if test \"\$ignoreFailedInputs\" != \"1\" -a -e \$1/nix-support/failed; then - echo \"failed input \$1\" >&2 - fail - fi - - if test -d \$1/bin; then - export _PATH=\$_PATH\${_PATH:+:}\$1/bin - fi - - for i in \"\${envHooks[@]}\"; do - \$i \$pkg - done -} -" [defFail]; - - preparePackageEnv = FullDepEntry "for i in \$pkgs; do - addToEnv \$i -done -" [getInputs defAddToEnv]; - - putOutInRpath = FullDepEntry "# Add the output as an rpath. -if test \"\$NIX_NO_SELF_RPATH\" != \"1\"; then - export NIX_LDFLAGS=\"-rpath \$out/lib \$NIX_LDFLAGS\" -fi -" [initPath]; - - setupStripping = FullDepEntry "# Strip debug information by default. -if test -z \"\$NIX_STRIP_DEBUG\"; then - export NIX_STRIP_DEBUG=1 - export NIX_CFLAGS_STRIP=\"-g0 -Wl,--strip-debug\" -fi -" [initPath]; - - checkNixEnv = FullDepEntry "# Do we know where the store is? This is required for purity checking. -if test -z \"\$NIX_STORE\"; then - echo \"Error: you have an old version of Nix that does not set the\" \ - \"NIX_STORE variable. Please upgrade.\" >&2 - exit 1 -fi - - -# We also need to know the root of the build directory for purity checking. -if test -z \"\$NIX_BUILD_TOP\"; then - echo \"Error: you have an old version of Nix that does not set the\" \ - \"NIX_BUILD_TOP variable. Please upgrade.\" >&2 - exit 1 -fi -" [initPath]; - - setTZ = noDepEntry "# Set the TZ (timezone) environment variable, otherwise commands like -# `date' will complain (e.g., `Tue Mar 9 10:01:47 Local time zone must -# be set--see zic manual page 2004'). -export TZ=UTC -" ; - - setPrefix = FullDepEntry "# Set the prefix. This is generally \$out, but it can be overriden, -# for instance if we just want to perform a test build/install to a -# temporary location and write a build report to \$out. -if test -z \"\$prefix\"; then - prefix=\"\$out\"; -fi - -if test \"\$useTempPrefix\" = \"1\"; then - prefix=\"\$NIX_BUILD_TOP/tmp_prefix\"; -fi -" [checkNixEnv]; - - runPostHook = FullDepEntry "# Execute the post-hook. -if test -n \"@postHook@\"; then - source @postHook@ -fi -" [setTZ setPrefix execPreHook gccSetupHook preparePackageEnv]; - - finalSetPath = FullDepEntry "PATH=\$_PATH\${_PATH:+:}\$PATH -if test \"\$NIX_DEBUG\" = \"1\"; then - echo \"Final path: \$PATH\" -fi -" [runPostHook]; - - defSubstitute = FullDepEntry "###################################################################### -# Textual substitution functions. - - -# Some disgusting hackery to escape replacements in Sed substitutions. -# We should really have a tool that replaces literal values by other -# literal values, without any need for escaping. -escapeSed() { - local s=\"\$1\" - # The `tr' hack is to escape newlines. Sed handles newlines very - # badly, so we just replace newlines with the magic character 0xff - # (377 octal). So don't use that character in replacements :-P - echo -n \"\$1\" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g' -} - - -substitute() { - local input=\"\$1\" - local output=\"\$2\" - - local -a params=(\"\$@\") - - local sedScript=\$NIX_BUILD_TOP/.sedargs - rm -f \$sedScript - touch \$sedScript - - local n p pattern replacement varName - - for ((n = 2; n < \${#params[*]}; n += 1)); do - p=\${params[\$n]} - - if test \"\$p\" = \"--replace\"; then - pattern=\"\${params[\$((n + 1))]}\" - replacement=\"\${params[\$((n + 2))]}\" - n=\$((n + 2)) - fi - - if test \"\$p\" = \"--subst-var\"; then - varName=\"\${params[\$((n + 1))]}\" - pattern=\"@\$varName@\" - replacement=\"\${!varName}\" - n=\$((n + 1)) - fi - - if test \"\$p\" = \"--subst-var-by\"; then - pattern=\"@\${params[\$((n + 1))]}@\" - replacement=\"\${params[\$((n + 2))]}\" - n=\$((n + 2)) - fi - - replacement=\"\$(escapeSed \"\$replacement\")\" - - echo \"s^\$pattern^\$replacement^g\" >> \$sedScript - done - - sed -f \$sedScript < \"\$input\" > \"\$output\".tmp - if test -x \"\$output\"; then - chmod +x \"\$output\".tmp - fi - mv -f \"\$output\".tmp \"\$output\" -} - - -substituteInPlace() { - local fileName=\"\$1\" - shift - substitute \"\$fileName\" \"\$fileName\" \"\$@\" -} - - -substituteAll() { - local input=\"\$1\" - local output=\"\$2\" - - # Select all environment variables that start with a lowercase character. - for envVar in \$(env | sed \"s/^[^a-z].*//\" | sed \"s/^\([^=]*\)=.*/\1/\"); do - if test \"\$NIX_DEBUG\" = \"1\"; then - echo \"\$envVar -> \${!envVar}\" - fi - args=\"\$args --subst-var \$envVar\" - done - - substitute \"\$input\" \"\$output\" \$args -} -" [initPath]; - - defNest = NoDepEntry "###################################################################### -# What follows is the generic builder. - - -nestingLevel=0 - -startNest() { - nestingLevel=\$((\$nestingLevel + 1)) - echo -en \"\e[\$1p\" -} - -stopNest() { - nestingLevel=\$((\$nestingLevel - 1)) - echo -en \"\e[q\" -} - -header() { - startNest \"\$2\" - echo \"\$1\" -} - -# Make sure that even when we exit abnormally, the original nesting -# level is properly restored. -closeNest() { - while test \$nestingLevel -gt 0; do - stopNest - done -} - -trap \"closeNest\" EXIT -" ; - - - defDumpVars = FullDepEntry "# This function is useful for debugging broken Nix builds. It dumps -# all environment variables to a file `env-vars' in the build -# directory. If the build fails and the `-K' option is used, you can -# then go to the build directory and source in `env-vars' to reproduce -# the environment used for building. -dumpVars() { - if test \"\$noDumpEnvVars\" != \"1\"; then - export > \$NIX_BUILD_TOP/env-vars - fi -} -" [checkNixEnv]; - - - defStartStopLog = FullDepEntry "# Redirect stdout/stderr to a named pipe connected to a `tee' process -# that writes the specified file (and also to our original stdout). -# The original stdout is saved in descriptor 3. -startLog() { - local logFile=\${logNr}_\$1 - logNr=\$((logNr + 1)) - if test \"\$logPhases\" = 1; then - ensureDir \$logDir - - exec 3>&1 - - if test \"\$dontLogThroughTee\" != 1; then - # This required named pipes (fifos). - logFifo=\$NIX_BUILD_TOP/log_fifo - test -p \$logFifo || mkfifo \$logFifo - startLogWrite \"\$logDir/\$logFile\" \"\$logFifo\" - exec > \$logFifo 2>&1 - else - exec > \$logDir/\$logFile 2>&1 - fi - fi -} - -# Factored into a separate function so that it can be overriden. -startLogWrite() { - tee \"\$1\" < \"\$2\" & - logWriterPid=\$! -} - -# Restore the original stdout/stderr. -stopLog() { - if test \"\$logPhases\" = 1; then - exec >&3 2>&1 - - # Wait until the tee process has died. Otherwise output from - # different phases may be mixed up. - if test -n \"\$logWriterPid\"; then - wait \$logWriterPid - logWriterPid= - rm \$logFifo - fi - fi -} - - -" [setLogVars checkNixEnv ]; - - - setLogVars = FullDepEntry "if test -z \"\$logDir\"; then - logDir=\$out/log -fi - -logNr=0 -" [initPath]; - - defStripHash = FullDepEntry "# Utility function: return the base name of the given path, with the -# prefix `HASH-' removed, if present. -stripHash() { - strippedName=\$(basename \$1); - if echo \"\$strippedName\" | grep -q '^[a-z0-9]\{32\}-'; then - strippedName=\$(echo \"\$strippedName\" | cut -c34-) - fi -} -" [initPath]; - - defUnpack = FullDepEntry " -unpackFile() { - local file=\$1 - local cmd - - header \"unpacking source archive \$file\" 3 - - case \$file in - *.tar) - tar xvf \$file || fail - ;; - *.tar.gz | *.tgz | *.tar.Z) - gunzip < \$file | tar xvf - || fail - ;; - *.tar.bz2 | *.tbz2) - bunzip2 < \$file | tar xvf - || fail - ;; - *.zip) - unzip \$file || fail - ;; - *) - if test -d \"\$file\"; then - stripHash \$file - cp -prvd \$file \$strippedName || fail - else - if test -n \"\$findUnpacker\"; then - \$findUnpacker \$1; - fi - if test -z \"\$unpackCmd\"; then - echo \"source archive \$file has unknown type\" - exit 1 - fi - eval \"\$unpackCmd\" || fail - fi - ;; - esac - - stopNest -} -" [preparePackageEnv]; - - defUnpackW = FullDepEntry " -unpackW() { - if test -n \"\$unpackPhase\"; then - eval \"\$unpackPhase\" - return - fi - - if test -z \"\$srcs\"; then - if test -z \"\$src\"; then - echo 'variable \$src or \$srcs should point to the source' - exit 1 - fi - srcs=\"\$src\" - fi - - # To determine the source directory created by unpacking the - # source archives, we record the contents of the current - # directory, then look below which directory got added. Yeah, - # it's rather hacky. - local dirsBefore=\"\" - for i in *; do - if test -d \"\$i\"; then - dirsBefore=\"\$dirsBefore \$i \" - fi - done - - # Unpack all source archives. - for i in \$srcs; do - unpackFile \$i - done - - # Find the source directory. - if test -n \"\$setSourceRoot\"; then - eval \"\$setSourceRoot\" - else - sourceRoot= - for i in *; do - if test -d \"\$i\"; then - case \$dirsBefore in - *\ \$i\ *) - ;; - *) - if test -n \"\$sourceRoot\"; then - echo \"unpacker produced multiple directories\" - exit 1 - fi - sourceRoot=\$i - ;; - esac - fi - done - fi - - if test -z \"\$sourceRoot\"; then - echo \"unpacker appears to have produced no directories\" - exit 1 - fi - - echo \"source root is \$sourceRoot\" - - # By default, add write permission to the sources. This is often - # necessary when sources have been copied from other store - # locations. - if test \"dontMakeSourcesWritable\" != 1; then - chmod -R +w \$sourceRoot - fi - - eval \"\$postUnpack\" -} -" [defUnpack]; - - - -defUnpackPhase = FullDepEntry " -unpackPhase() { - sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource does'nt set sourceRoot - header \"unpacking sources\" - startLog \"unpack\" - unpackW - stopLog - stopNest - cd \$sourceRoot -} -" [unpackW]; - - - defPatchW = FullDepEntry " -patchW() { - if test -n \"\$patchPhase\"; then - eval \"\$patchPhase\" - return - fi - - if test -z \"\$patchFlags\"; then - patchFlags=\"-p1\" - fi - - for i in \$patches; do - header \"applying patch \$i\" 3 - local uncompress=cat - case \$i in - *.gz) - uncompress=gunzip - ;; - *.bz2) - uncompress=bunzip2 - ;; - esac - \$uncompress < \$i | patch \$patchFlags || fail - stopNest - done -} -" [getInputs] - - defPatchPhase = FullDepEntry " -patchPhase() { - if test -z \"\$patchPhase\" -a -z \"\$patches\"; then return; fi - header \"patching sources\" - startLog \"patch\" - patchW - stopLog - stopNest -} -" [defPatchW]; - - defFixLibTool = FullDepEntry "fixLibtool() { - sed 's^eval sys_lib_.*search_path=.*^^' < \$1 > \$1.tmp - mv \$1.tmp \$1 -} -" [initPath]; - - defConfigureW = FullDepEntry " -configureW() { - if test -n \"\$configurePhase\"; then - eval \"\$configurePhase\" - return - fi - - eval \"\$preConfigure\" - - if test -z \"\$configureScript\"; then - configureScript=./configure - if ! test -x \$configureScript; then - echo \"no configure script, doing nothing\" - return - fi - fi - - if test -z \"\$dontFixLibtool\"; then - for i in \$(find . -name \"ltmain.sh\"); do - echo \"fixing libtool script \$i\" - fixLibtool \$i - done - fi - - if test -z \"\$dontAddPrefix\"; then - configureFlags=\"--prefix=\$prefix \$configureFlags\" - fi - - echo \"configure flags: \$configureFlags \${configureFlagsArray[@]}\" - \$configureScript \$configureFlags\"\${configureFlagsArray[@]}\" || fail - - eval \"\$postConfigure\" -} -" [initPath]; - - - defConfigurePhase = FullDepEntry " -configurePhase() { - header \"configuring\" - startLog \"configure\" - configureW - stopLog - stopNest -} -" [defConfigureW]; - - defBuildW = FullDepEntry " -buildW() { - if test -n \"\$buildPhase\"; then - eval \"\$buildPhase\" - return - fi - - eval \"\$preBuild\" - - echo \"make flags: \$makeFlags \${makeFlagsArray[@]} \$buildFlags \${buildFlagsArray[@]}\" - make \ - \$makeFlags \"\${makeFlagsArray[@]}\" \ - \$buildFlags \"\${buildFlagsArray[@]}\" || fail - - eval \"\$postBuild\" -} -" [initPath]; - - defBuildPhase = FullDepEntry " -buildPhase() { - if test \"\$dontBuild\" = 1; then - return - fi - header \"building\" - startLog \"build\" - buildW - stopLog - stopNest -} -" [defBuildW]; - - - defCheckW = FullDepEntry " -checkW() { - if test -n \"\$checkPhase\"; then - eval \"\$checkPhase\" - return - fi - - if test -z \"\$checkTarget\"; then - checkTarget=\"check\" - fi - - echo \"check flags: \$makeFlags \${makeFlagsArray[@]} \$checkFlags \${checkFlagsArray[@]}\" - make \ - \$makeFlags \"\${makeFlagsArray[@]}\" \ - \$checkFlags \"\${checkFlagsArray[@]}\" \$checkTarget || fail -} -" [initPath]; - - - defCheckPhase = FullDepEntry " -checkPhase() { - if test \"\$doCheck\" != 1; then - return - fi - header \"checking\" - startLog \"check\" - checkW - stopLog - stopNest -} -" [checkPhase]; - - - defPatchElf = FullDepEntry " -patchELF() { - # Patch all ELF executables and shared libraries. - header \"patching ELF executables and libraries\" - find \"\$prefix\" \( \ - \( -type f -a -name \"*.so*\" \) -o \ - \( -type f -a -perm +0100 \) \ - \) -print -exec patchelf --shrink-rpath {} \; - stopNest -} -" [initPath defNest]; - - - defInstallW = FullDepEntry " -installW() { - if test -n \"\$installPhase\"; then - eval \"\$installPhase\" - return - fi - - eval \"\$preInstall\" - - ensureDir \"\$prefix\" - - if test -z \"\$installCommand\"; then - if test -z \"\$installTargets\"; then - installTargets=install - fi - echo \"install flags: \$installTargets \$makeFlags \${makeFlagsArray[@]} \$installFlags \${installFlagsArray[@]}\" - make \$installTargets \ - \$makeFlags \"\${makeFlagsArray[@]}\" \ - \$installFlags \"\${installFlagsArray[@]}\" || fail - else - eval \"\$installCommand\" - fi - - eval \"\$postInstall\" -} -" [initPath]; - - - defInstallPhase = FullDepEntry " -installPhase() { - if test \"\$dontInstall\" = 1; then - return - fi - header \"installing\" - startLog \"install\" - installW - stopLog - stopNest -} -" [defInstallW defNest defStartStopLog]; - - - defFixupW = FullDepEntry " - -# The fixup phase performs generic, package-independent, Nix-related -# stuff, like running patchelf and setting the -# propagated-build-inputs. It should rarely be overriden. -fixupW() { - if test -n "$fixupPhase"; then - eval "$fixupPhase" - return - fi - - eval "$preFixup" - - forceShare=${forceShare:=man doc info} - if test -n "$forceShare"; then - for d in $forceShare; do - if test -d "$prefix/$d"; then - if test -d "$prefix/share/$d"; then - echo "Both $d/ and share/$d/ exists!" - else - echo Fixing location of $dir/ subdirectory - ensureDir $prefix/share - if test -w $prefix/share; then - mv -v $prefix/$d $prefix/share - ln -sv share/$d $prefix - fi - fi - else - echo "No $d/ subdirectory, skipping." - fi - done; - fi - - -# TODO : strip _only_ ELF executables, and return || fail here... - if test -z "$dontStrip"; then - echo "Stripping debuging symbols from files in" - stripDirs "${stripDebugList:-lib}" -S - echo "Stripping all symbols from files in" - stripDirs "${stripAllList:-bin sbin}" -s - fi - - if test "$havePatchELF" = 1 -a -z "$dontPatchELF"; then - patchELF "$prefix" - fi - - if test -n "$propagatedBuildInputs"; then - ensureDir "$out/nix-support" - echo "$propagatedBuildInputs" > "$out/nix-support/propagated-build-inputs" - fi - - if test -n "$setupHook"; then - ensureDir "$out/nix-support" - substituteAll "$setupHook" "$out/nix-support/setup-hook" - fi - - eval "$postFixup" -} -" [defPatchElf initPath]; - - - defFixupPhase = FullDepEntry " -fixupPhase() { - if test \"\$dontFixup\" = 1; then - return - fi - header \"post-installation fixup\" - startLog \"fixup\" - fixupW - stopLog - stopNest -} -" [defFixupW defNest defStartStopLog]; - - - defDistW = FullDepEntry " -distW() { - if test -n \"\$distPhase\"; then - eval \"\$distPhase\" - return - fi - - eval \"\$preDist\" - - if test -z \"\$distTarget\"; then - distTarget=\"dist\" - fi - - echo \"dist flags: \$distFlags \${distFlagsArray[@]}\" - make \$distFlags \"\${distFlagsArray[@]}\" \$distTarget || fail - - if test \"\$dontCopyDist\" != 1; then - ensureDir \"\$out/tarballs\" - - if test -z \"\$tarballs\"; then - tarballs=\"*.tar.gz\" - fi - - # Note: don't quote \$tarballs, since we explicitly permit - # wildcards in there. - cp -pvd \$tarballs \$out/tarballs - fi - - eval \"\$postDist\" -} -" [initPath ]; - - - defDistPhase = FullDepEntry " -distPhase() { - if test \"\$doDist\" != 1; then - return - fi - header \"creating distribution\" - startLog \"dist\" - distW - stopLog - stopNest -} -" [defDistW defNest defStartStopLog]; - - defGenericBuild = FullDepEntry " -genericBuild() { - header \"building \$out\" - - if test -n \"\$buildCommand\"; then - eval \"\$buildCommand\" - return - fi - - if test -z \"\$phases\"; then - phases=\"unpackPhase patchPhase configurePhase buildPhase checkPhase \ - installPhase fixupPhase distPhase\"; - fi - - for i in \$phases; do - dumpVars - eval \"\$i\" - done - - stopNest -} -" [defUnpackPhase defBuildPhase defInstallPhase]; - -doDumpVars = FullDepEntry " -dumpVars -" [defDumpVars]; diff --git a/pkgs/tools/misc/grub/default.nix b/pkgs/tools/misc/grub/default.nix index 1b7f052dfdf3..87ba35566c00 100644 --- a/pkgs/tools/misc/grub/default.nix +++ b/pkgs/tools/misc/grub/default.nix @@ -11,22 +11,24 @@ stdenv.mkDerivation { url = ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz; md5 = "cd3f3eb54446be6003156158d51f4884"; }; - - patches = [ - # Patch to add primitive splash screen support (not the fancy SUSE gfxmenu stuff). - # With this you can set splashimage=foo.xpm.gz in menu.lst to get - # a 640x480, 14-colour background. - (fetchurl { - url = "http://cvs.archlinux.org/cgi-bin/viewcvs.cgi/*checkout*/system/grub-gfx/grub-0.97-graphics.patch?rev=HEAD&cvsroot=AUR&only_with_tag=CURRENT&content-type=text/plain"; - sha256 = "0m6min9cbj71kvp0kxkxdq8dx2dwm3dj0rd5sjz5xdl13ihaj5hy"; - }) - ]; + + # Lots of patches from Gentoo, in particular splash screen support + # (not the fancy SUSE gfxmenu stuff though). Also a fix for boot + # failures on systems with more than 2 GiB RAM. + gentooPatches = fetchurl { + url = mirror://gentoo/distfiles/grub-0.97-patches-1.4.tar.bz2; + sha256 = "1nki5q1b61ahxcmnw6mq7b8ghcysri4lj7q6dx8iqixrvrpxj399"; + }; # Autoconf/automake required for the splashimage patch. buildInputs = [autoconf automake]; preConfigure = '' + unpackFile $gentooPatches + for i in patch/*.patch; do + echo "applying patch $i" + patch -p1 < $i || patch -p0 < $i + done autoreconf ''; - } diff --git a/pkgs/tools/misc/mc/builder.sh b/pkgs/tools/misc/mc/builder.sh new file mode 100644 index 000000000000..28b5d68b55aa --- /dev/null +++ b/pkgs/tools/misc/mc/builder.sh @@ -0,0 +1,7 @@ +source $stdenv/setup + +tar xfvz $src +cd mc-* +./configure --prefix=$out --with-screen=ncurses +make +make install diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix new file mode 100644 index 000000000000..9400cbbf4436 --- /dev/null +++ b/pkgs/tools/misc/mc/default.nix @@ -0,0 +1,11 @@ +{stdenv, fetchurl, pkgconfig, glib, ncurses, libX11}: + +stdenv.mkDerivation { + name = "mc-4.6.1"; + src = fetchurl { + url = http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/mc-4.6.1.tar.gz; + md5 = "18b20db6e40480a53bac2870c56fc3c4"; + }; + buildInputs = [pkgconfig glib ncurses libX11]; + builder = ./builder.sh; +} diff --git a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix index cffa01b9b95f..aa0ee2241690 100644 --- a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix +++ b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchcvs { url = ":pserver:anonymous@relfs.cvs.sourceforge.net:/cvsroot/relfs"; @@ -12,6 +12,7 @@ args : with args; e2fsprogs gnomevfs pkgconfig GConf]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; let build = FullDepEntry (" cd deps sed -e 's/^CPP/#&/ ; s/^# CPP=gcc/CPP=gcc/' -i Makefile.camlidl @@ -41,7 +42,7 @@ in stdenv.mkDerivation rec { name = "relfs-"+version; builder = writeScript (name + "-builder") - (textClosure [build doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [build doMakeInstall doForceShare doPropagate]); meta = { description = " Relational FS over FUSE. diff --git a/pkgs/tools/networking/ntp/default.nix b/pkgs/tools/networking/ntp/default.nix index 57d2ee8ab71c..f96d14e83c0b 100644 --- a/pkgs/tools/networking/ntp/default.nix +++ b/pkgs/tools/networking/ntp/default.nix @@ -3,14 +3,14 @@ assert stdenv.isLinux -> libcap != null; stdenv.mkDerivation { - name = "ntp-4.2.4p3"; + name = "ntp-4.2.4p4"; src = fetchurl { - url = http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p3.tar.gz; - sha256 = "077y1hw6v0qnp3j3w3pcxgsc76waswqhwsbzfj3jqc79jfh65jv9"; + url = http://www.eecis.udel.edu/~ntp/ntp_spool/ntp4/ntp-4.2.4p4.tar.gz; + sha256 = "0im89i51ap7aqlhxq5isz5xg4h8w8ahwdhir8la3c83h3p47fcmv"; }; - configureFlags = " + configureFlags = '' --without-crypto ${if stdenv.isLinux then "--enable-linuxcaps" else ""} - "; + ''; buildInputs = if stdenv.isLinux then [libcap] else []; } diff --git a/pkgs/tools/networking/p2p/bittorrent/builder.sh b/pkgs/tools/networking/p2p/bittorrent/builder.sh index 633f53ebd43d..8097995dfbda 100644 --- a/pkgs/tools/networking/p2p/bittorrent/builder.sh +++ b/pkgs/tools/networking/p2p/bittorrent/builder.sh @@ -1,5 +1,4 @@ source $stdenv/setup -source $makeWrapper # Workaround for: # File "...-python-2.4.4/lib/python2.4/posixpath.py", line 62, in join @@ -20,12 +19,9 @@ installPhase() { # Create wrappers that set the environment correctly. for i in $(cd $out/bin && ls); do - # Note: the GUI apps except to be in a directory called `bin', - # so don't move them. - mv $out/bin/$i $out/bin/.orig-$i - makeWrapper $out/bin/.orig-$i $out/bin/$i \ + wrapProgram $out/bin/$i \ --set PYTHONPATH "$(toPythonPath $out):$PYTHONPATH" done } -genericBuild \ No newline at end of file +genericBuild diff --git a/pkgs/tools/networking/p2p/bittorrent/default.nix b/pkgs/tools/networking/p2p/bittorrent/default.nix index 3894cbd36d41..cfddd48a342e 100644 --- a/pkgs/tools/networking/p2p/bittorrent/default.nix +++ b/pkgs/tools/networking/p2p/bittorrent/default.nix @@ -6,18 +6,16 @@ assert gui -> wxPython != null; stdenv.mkDerivation { - name = "bittorrent-5.0.7"; + name = "bittorrent-5.2.0"; builder = ./builder.sh; src = fetchurl { - url = http://download.bittorrent.com/dl/BitTorrent-5.0.7.tar.gz; - sha256 = "09m2qlhzbc6j1hf6fniri0hh6cy6ccgwi2sph65bpjrc417l94gj"; + url = http://download.bittorrent.com/dl/BitTorrent-5.2.0.tar.gz; + sha256 = "0lg54x5y2k1cb7vpj7hanlnvzqa2k3v24qq0g6fsycjk4n8dky02"; }; - buildInputs = [python pycrypto twisted] - ++ (if gui then [wxPython] else []); - - inherit makeWrapper; + buildInputs = [python pycrypto twisted makeWrapper] + ++ stdenv.lib.optional gui wxPython; meta = { description = "The original client for the BitTorrent peer-to-peer file sharing protocol"; diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index 51bcb9ef298a..79d46ce8e845 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -3,14 +3,14 @@ , stateDir ? "/nix/var" }: -let version = "0.12pre10069"; in +let version = "0.12pre10154"; in stdenv.mkDerivation { name = "nix-${version}"; src = fetchurl { url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2"; - md5 = "bf05ebe9463f0453beae2c43f05ac13d"; + md5 = "9e5833e34ade23852a1270d0f2a98ce2"; }; buildInputs = [perl curl openssl]; diff --git a/pkgs/tools/system/gdmap/0.7.5.nix b/pkgs/tools/system/gdmap/0.7.5.nix index 354ebb966a1c..062f63566a6b 100644 --- a/pkgs/tools/system/gdmap/0.7.5.nix +++ b/pkgs/tools/system/gdmap/0.7.5.nix @@ -1,5 +1,5 @@ args : with args; - with builderDefs { + let localDefs = builderDefs { src = /* put a fetchurl here */ fetchurl { url = http://dfn.dl.sourceforge.net/sourceforge/gdmap/gdmap-0.7.5.tar.gz; @@ -9,10 +9,11 @@ args : with args; buildInputs = [gtk pkgconfig libxml2 intltool]; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "gdmap"+version; builder = writeScript (name + "-builder") - (textClosure [doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " Recursive rectangle map of disk usage. diff --git a/pkgs/tools/system/pciutils/default.nix b/pkgs/tools/system/pciutils/default.nix index 84bd24195ce2..5dd675747776 100644 --- a/pkgs/tools/system/pciutils/default.nix +++ b/pkgs/tools/system/pciutils/default.nix @@ -1,16 +1,16 @@ {stdenv, fetchurl, zlib}: stdenv.mkDerivation { - name = "pciutils-2.2.5"; + name = "pciutils-2.2.8"; builder = ./builder.sh; src = fetchurl { - url = mirror://kernel/software/utils/pciutils/pciutils-2.2.5.tar.bz2; - sha256 = "1zlamdax1i8cf3kvzg7dh7nshvvzlhvkwlxdmym0hbnmbf0p100p"; + url = mirror://kernel/software/utils/pciutils/pciutils-2.2.8.tar.bz2; + sha256 = "0hgri2ancnjl56ld2flb9w606dyvr5gly8gsz3bzl71r8s464qsq"; }; buildInputs = [zlib]; pciids = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/pci.ids.20070226.bz2; - sha256 = "1wrpq4dxm03v5jvvdlvwl8nrkj3hspgifkw5czmd647lzikp13qc"; + url = http://nix.cs.uu.nl/dist/tarballs/pci.ids.20080118.bz2; + sha256 = "0dl6psdac62llbklxn4dvkzbw1j1sdadw9i4l36vpd6mvqa7lz0a"; }; } diff --git a/pkgs/tools/system/which/default.nix b/pkgs/tools/system/which/default.nix index 482d495ba83a..67ddaa94295a 100644 --- a/pkgs/tools/system/which/default.nix +++ b/pkgs/tools/system/which/default.nix @@ -1,10 +1,10 @@ -{stdenv, fetchurl}: stdenv.mkDerivation { - name = "which-2.17"; +args: with args; +stdenv.mkDerivation { + name = "which-2.19"; src = fetchurl { - url = http://ftp.gnu.org/gnu/which/which-2.17.tar.gz; - sha256 = "1nnnbn83da8481blmcyv96gm15ccsilr93fmgmwdlzj8a72fjvqp"; + url = mirror://gnu/which/which-2.19.tar.gz; + sha256 = "0lnd8mfpc0r1r2ch54vl3vc6r0fnzfl33sqdda2aq62iyrsbhybx"; }; + + buildInputs = [readline]; } - - - diff --git a/pkgs/tools/typesetting/lhs2tex/default.nix b/pkgs/tools/typesetting/lhs2tex/default.nix index fc0ce40f8e56..f071f67fe97a 100644 --- a/pkgs/tools/typesetting/lhs2tex/default.nix +++ b/pkgs/tools/typesetting/lhs2tex/default.nix @@ -3,12 +3,12 @@ assert tetex == polytable.tetex; stdenv.mkDerivation { - name = "lhs2tex-1.12"; + name = "lhs2tex-1.13pre3"; builder = ./builder.sh; src = fetchurl { - url = http://www.informatik.uni-bonn.de/~loeh/lhs2tex/lhs2tex-1.12.tar.bz2; - md5 = "1bc982e96f19201aaf1c39c1d4b5e358"; + url = "http://www.cs.uu.nl/~andres/lhs2tex/lhs2tex-1.13pre3.tar.bz2"; + sha256 = "8ddc9bd150c20c33518d747fee95577ec8f587146532cda12b8034adc847826c"; }; buildInputs = [tetex ghc]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0e04bd8c01d9..f159e6a1a559 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -124,7 +124,8 @@ rec { lib = library; library = import ../lib; - lib_unstable = import ../lib/default-unstable.nix; + # TODO remove + # lib_unstable = import ../lib/default-unstable.nix; # Return an attribute from the Nixpkgs configuration file, or # a default value if the attribute doesn't exist. @@ -199,7 +200,7 @@ rec { args: with args.lib; with args; if ( builtins.isAttrs extraAttrs ) then builtins.throw "the argument extraAttrs needs to be a function beeing passed co, but attribute set passed " else - let co = lib_unstable.chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in + let co = lib.chooseOptionsByFlags { inherit args flagConfig optionals defaults collectExtraPhaseActions; }; in args.stdenv.mkDerivation ( { inherit (co) configureFlags buildInputs /*flags*/; @@ -212,7 +213,7 @@ rec { (import ../build-support/checker) opts config); in (if (result=="") then x else - abort result) + abort ("Unknown option specified: " + result)) else x); builderDefs = lib.sumArgs (import ./builder-defs.nix) { @@ -280,7 +281,12 @@ rec { inherit stdenv curl; }); - makeWrapper = ../build-support/make-wrapper/make-wrapper.sh; + makeSetupHook = script: runCommand "hook" {} '' + ensureDir $out/nix-support + cp ${script} $out/nix-support/setup-hook + ''; + + makeWrapper = makeSetupHook ../build-support/make-wrapper/make-wrapper.sh; # Run the shell command `buildCommand' to produce a store object # named `name'. The attributes in `env' are added to the @@ -608,6 +614,12 @@ rec { inherit fetchurl stdenv; }; + mc = import ../tools/misc/mc { + inherit fetchurl stdenv pkgconfig ncurses; + inherit (gtkLibs) glib; + inherit (xlibs) libX11; + }; + mjpegtools = import ../tools/video/mjpegtools { inherit fetchurl stdenv libjpeg; inherit (xlibs) libX11; @@ -806,7 +818,7 @@ rec { }; which = import ../tools/system/which { - inherit fetchurl stdenv; + inherit fetchurl stdenv readline; }; wv = import ../tools/misc/wv { @@ -991,8 +1003,12 @@ rec { profiledCompiler = true; }); + /* doesn't work yet + # This new ghc stuff is under heavy development and might change ! + # usage: see ghcPkgUtil.sh - use setup-new2 because of PATH_DELIMITER + # depreceated -> use functions defined in builderDefs ghcPkgUtil = runCommand "ghcPkgUtil-internal" { ghcPkgUtil = ../development/libraries/haskell/generic/ghcPkgUtil.sh; } "mkdir -p $out/nix-support; cp $ghcPkgUtil \$out/nix-support/setup-hook;"; @@ -1000,9 +1016,8 @@ rec { ghcsAndLibs = assert builtins ? listToAttrs; recurseIntoAttrs (import ../development/compilers/ghcs { - inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline stdenv; + inherit ghcboot fetchurl recurseIntoAttrs perl gnum4 gmp readline stdenv lib; inherit ghcPkgUtil; - lib = lib_unstable; }); # creates ghc-X-wl wich adds the passed libraries to the env var GHC_PACKAGE_PATH @@ -1011,6 +1026,22 @@ rec { inherit ghcPackagedLibs ghc name suffix libraries ghcPkgUtil stdenv; }; + # this will change in the future + ghc68_extra_libs = + ghc : let + deriv = name : goSrcDir : deps : + let bd = builderDefs { + goSrcDir = "ghc-* /libraries"; + src = ghc.extra_src; + } null; in + stdenv.mkDerivation rec { + inherit name; + builder = bd.writeScript (name + "-builder") + (bd.textClosure [builderDefs.haskellBuilderDefs]); + }; + # using nvs to be able to use mtl-1.1.0.0 as name + in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); + # the wrappers basically does one thing: It defines GHC_PACKAGE_PATH before calling ghc{i,-pkg} # So you can have different wrappers with different library combinations # So installing ghc libraries isn't done by nix-env -i package but by adding the lib to the libraries list below @@ -1018,27 +1049,31 @@ rec { let ghc = ghcsAndLibs.ghc68.ghc; in createGhcWrapper rec { ghcPackagedLibs = true; - name = "ghc68_wrapper"; - suffix = "68wrapper"; - libraries = map ( a : __getAttr a ghcsAndLibs.ghc68.core_libs ) - [ "old-locale-1.0" "old-time-1.0" "filepath-1.0" "directory-1.0" "array-0.1" "containers-0.1" - "hpc-0.5" "bytestring-0.9" "pretty-1.0" "packedstring-0.1" "template-haskell-0.1" - "unix-2.0" "process-1.0" "readline-1.0" "Cabal-1.2.0" "random-1.0" "haskell98-1.0" "ghc-6.8.0.20071004" - "array-0.1" "bytestring-0.9" "containers-0.1" "directory-1.0" "filepath-1.0" - "ghc-6.8.0.20071004" "haskell98-1.0" "hpc-0.5" "old-locale-1.0" "old-time-1.0" - "packedstring-0.1" "pretty-1.0" "process-1.0" "random-1.0" - "readline-1.0" "rts-1.0" "template-haskell-0.1" "unix-2.0" - ]; + name = "ghc${ghc.version}_wrapper"; + suffix = "${ghc.version}wrapper"; + libraries = map ( a : __getAttr a ghcsAndLibs.ghc68.core_libs ) [ + "old-locale-1.0.0.0" "old-time-1.0.0.0" "filepath-1.1.0.0" "directory-1.0.0.0" "array-0.1.0.0" "containers-0.1.0.1" + "hpc-0.5.0.0" "bytestring-0.9.0.1" "pretty-1.0.0.0" "packedstring-0.1.0.0" "template-haskell-2.2.0.0" + "unix-2.3.0.0" "process-1.0.0.0" "readline-1.0.1.0" "Cabal-1.2.3.0" "random-1.0.0.0" "haskell98-1.0.1.0" "ghc-${ghc.version}" + "array-0.1.0.0" "bytestring-0.9.0.1" "containers-0.1.0.1" "directory-1.0.0.0" "filepath-1.1.0.0" + "ghc-${ghc.version}" "haskell98-1.0.1.0" "hpc-0.5.0.0" "old-locale-1.0.0.0" "old-time-1.0.0.0" + "packedstring-0.1.0.0" "pretty-1.0.0.0" "process-1.0.0.0" "random-1.0.0.0" + "readline-1.0.1.0" "rts-1.0" "unix-2.3.0.0" "base-3.0.1.0" + ] ++ map ( a : __getAttr a (ghc68_extra_libs ghcsAndLibs.ghc68 ) ) [ + "mtl-1.1.0.0" + ]; # (flatten ghcsAndLibs.ghc68.core_libs); inherit ghc; }; + */ + # ghc66boot = import ../development/compilers/ghc-6.6-boot { # inherit fetchurl stdenv perl readline; # m4 = gnum4; #}; - ghc = ghc661; + ghc = ghc68; ghc68 = import ../development/compilers/ghc-6.8 { inherit fetchurl stdenv readline perl gmp ncurses; @@ -1078,7 +1113,8 @@ rec { */ helium = import ../development/compilers/helium { - inherit fetchurl stdenv ghc; + inherit fetchurl stdenv; + ghc = ghc661; }; #TODO add packages http://cvs.haskell.org/Hugs/downloads/2006-09/packages/ and test @@ -1093,6 +1129,12 @@ rec { inherit fetchurl stdenv; }; + jdk5 = + assert system == "i686-linux"; + import ../development/compilers/jdk/default-5.nix { + inherit fetchurl stdenv unzip; + }; + jdk = jdkdistro true false; jre = jdkdistro false false; @@ -1221,6 +1263,10 @@ rec { inherit (xlibs) libX11 libXau libXt; }; + erlang = import ../development/interpreters/erlang { + inherit fetchurl perl gnum4 ncurses openssl stdenv; + }; + guile = import ../development/interpreters/guile { inherit fetchurl stdenv ncurses readline libtool gmp; }; @@ -1256,8 +1302,7 @@ rec { # perhaps this can be done setting php_value in apache don't have time to investigate any further ? # This expression is a quick hack now. But perhaps it helps you adding the configuration flags you need? php = (import ../development/interpreters/php_configurable) { - inherit mkDerivationByConfiguration stdenv mysql; - lib = lib_unstable; + inherit mkDerivationByConfiguration stdenv mysql lib; inherit fetchurl flex bison apacheHttpd; # gettext; inherit libxml2; flags = [ "xdebug" "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ]; @@ -1342,6 +1387,10 @@ rec { ### DEVELOPMENT / TOOLS + alex = import ../development/tools/parsing/alex { + inherit cabal perl; + }; + antlr = import ../development/tools/parsing/antlr/antlr-2.7.6.nix { inherit fetchurl stdenv jre; }; @@ -1452,8 +1501,16 @@ rec { inherit fetchurl stdenv; }; - happy = import ../development/tools/parsing/happy { - inherit fetchurl stdenv perl ghc; + haddock = import ../development/tools/documentation/haddock { + inherit cabal; + }; + + # happy = import ../development/tools/parsing/happy { + # inherit fetchurl stdenv perl ghc; + # }; + + happy = import ../development/tools/parsing/happy/happy-1.17.nix { + inherit cabal perl; }; help2man = import ../development/tools/misc/help2man { @@ -1564,9 +1621,7 @@ rec { }; uuagc = import ../development/tools/haskell/uuagc { - inherit fetchurl stdenv; - ghc = ghc66; - uulib = uulib66; + inherit cabal uulib; }; gdb = import ../development/tools/misc/gdb { @@ -1784,10 +1839,9 @@ rec { fltk20 = (import ../development/libraries/fltk) { - inherit mkDerivationByConfiguration x11; + inherit mkDerivationByConfiguration x11 lib; inherit fetchurl stdenv mesa mesaHeaders libpng libjpeg zlib ; flags = [ "useNixLibs" "threads" "shared" "gl" ]; - lib = lib_unstable; }; cfitsio = import ../development/libraries/cfitsio { @@ -1822,8 +1876,7 @@ rec { }; geos = import ../development/libraries/geos { - lib = lib_unstable; - inherit fetchurl fetchsvn stdenv mkDerivationByConfiguration autoconf automake libtool swig which; + inherit fetchurl fetchsvn stdenv mkDerivationByConfiguration autoconf automake libtool swig which lib; use_svn = stdenv.system == "x86_64-linux"; python = python; # optional features: @@ -1848,6 +1901,11 @@ rec { }; }; + glew = import ../development/libraries/glew { + inherit fetchurl stdenv mesa x11 libtool; + inherit (xlibs) libXmu libXi; + }; + glibc = useFromStdenv (stdenv ? glibc) stdenv.glibc (import ../development/libraries/glibc-2.7 { inherit fetchurl stdenv kernelHeaders; @@ -2078,8 +2136,7 @@ rec { } null; libdv = import ../development/libraries/libdv { - lib = lib_unstable; - inherit fetchurl stdenv mkDerivationByConfiguration; + inherit fetchurl stdenv lib mkDerivationByConfiguration; }; libdrm = import ../development/libraries/libdrm { @@ -2661,25 +2718,59 @@ rec { ### DEVELOPMENT / LIBRARIES / HASKELL + binary = import ../development/libraries/haskell/binary { + inherit cabal; + }; + + # cabal is a utility function to build cabal-based + # Haskell packages + cabal68 = import ../development/libraries/haskell/cabal/cabal.nix { + inherit stdenv fetchurl; + ghc = ghc68; + }; + cabal = cabal68; + + Crypto = import ../development/libraries/haskell/Crypto { + inherit cabal; + }; + gtk2hs = import ../development/libraries/haskell/gtk2hs { inherit pkgconfig stdenv fetchurl cairo; inherit (gnome) gtk glib GConf libglade libgtkhtml gtkhtml; ghc = ghc661; }; - uulib64 = import ../development/libraries/haskell/uulib { # !!! remove? - inherit stdenv fetchurl ghc; + pcreLight = import ../development/libraries/haskell/pcre-light { + inherit cabal pcre; }; - uulib66 = import ../development/libraries/haskell/uulib-ghc-6.6 { # !!! ugh - inherit stdenv fetchurl autoconf; - ghc = ghc66; + uulib = import ../development/libraries/haskell/uulib { + inherit cabal; }; wxHaskell = import ../development/libraries/haskell/wxHaskell { - inherit stdenv fetchurl unzip ghc wxGTK; + inherit stdenv fetchurl unzip wxGTK; + ghc = ghc661; }; + # wxHaskell68 = lowPrio (appendToName "ghc68" (import ../development/libraries/haskell/wxHaskell { + # inherit stdenv fetchurl unzip wxGTK; + # ghc = ghc68; + # })); + + X11 = import ../development/libraries/haskell/X11 { + inherit cabal; + inherit (xlibs) libX11 libXinerama libXext; + xineramaSupport = true; + }; + + vty = import ../development/libraries/haskell/vty { + inherit cabal; + }; + + zlibHaskell = import ../development/libraries/haskell/zlib { + inherit cabal zlib; + }; ### DEVELOPMENT / PERL MODULES @@ -2980,10 +3071,18 @@ rec { inherit fetchurl stdenv ; }; + ejabberd = import ../servers/xmpp/ejabberd { + inherit fetchurl stdenv expat erlang zlib openssl; + }; + ircdHybrid = import ../servers/irc/ircd-hybrid { inherit fetchurl stdenv openssl zlib; }; + jboss = import ../servers/http/jboss { + inherit fetchurl stdenv jdk5 jdk; + }; + jetty = import ../servers/http/jetty { inherit fetchurl stdenv unzip; }; @@ -2992,6 +3091,10 @@ rec { inherit fetchurl stdenv apacheHttpd python; }; + tomcat_connectors = import ../servers/http/apache-modules/tomcat-connectors { + inherit fetchurl stdenv apacheHttpd jdk; + }; + mysql4 = import ../servers/sql/mysql { inherit fetchurl stdenv ncurses zlib perl; ps = procps; /* !!! Linux only */ @@ -3029,8 +3132,7 @@ rec { }; squid = import ../servers/squid { - inherit fetchurl stdenv mkDerivationByConfiguration perl; - lib = lib_unstable; + inherit fetchurl stdenv mkDerivationByConfiguration perl lib; }; tomcat5 = import ../servers/http/tomcat { @@ -3670,6 +3772,10 @@ rec { inherit fetchurl stdenv unzip; }; + bazaar = import ../applications/version-management/bazaar { + inherit fetchurl stdenv python makeWrapper; + }; + # commented out because it's using the new configuration style proposal which is unstable #biew = import ../applications/misc/biew { # inherit lib stdenv fetchurl ncurses; @@ -3682,10 +3788,9 @@ rec { openal = openalSoft; }; blender = import ../applications/misc/blender { - inherit cmake mesa gettext freetype SDL libtiff fetchurl glibc scons x11 + inherit cmake mesa gettext freetype SDL libtiff fetchurl glibc scons x11 lib libjpeg libpng zlib stdenv /* smpeg sdl */; inherit (xlibs) inputproto libXi; - lib = lib_unstable; python = builtins.getAttr "2.5" python_alts; freealut = freealut_soft; openal = openalSoft; @@ -3706,6 +3811,10 @@ rec { inherit fetchurl stdenv pkgconfig bmp; }; + bvi = import ../applications/editors/bvi { + inherit fetchurl stdenv ncurses; + }; + cdparanoiaIII = import ../applications/audio/cdparanoia { inherit fetchurl stdenv; }; @@ -3800,7 +3909,7 @@ rec { }; cvs2svn = import ../applications/version-management/cvs2svn { - inherit fetchurl stdenv python bsddb3 makeWrapper; + inherit fetchurl stdenv python makeWrapper; }; d4x = import ../applications/misc/d4x { @@ -3809,7 +3918,8 @@ rec { }; darcs = import ../applications/version-management/darcs { - inherit fetchurl stdenv ghc zlib ncurses curl; + inherit fetchurl stdenv zlib ncurses curl; + ghc = ghc661; }; dia = import ../applications/graphics/dia { @@ -4479,11 +4589,10 @@ rec { }; vim_configurable = import ../applications/editors/vim/configurable.nix { - inherit fetchurl stdenv ncurses pkgconfig mkDerivationByConfiguration; + inherit fetchurl stdenv ncurses pkgconfig mkDerivationByConfiguration lib; inherit (xlibs) libX11 libXext libSM libXpm libXt libXaw libXau libXmu; inherit (gtkLibs) glib gtk; - lib = lib_unstable; features = "huge"; # one of tiny, small, normal, big or huge # optional features by passing # python @@ -4582,6 +4691,11 @@ rec { stdenv = overrideGCC stdenv gcc34; # due to problems with gcc 4.x }; + xmonad = import ../applications/window-managers/xmonad { + inherit stdenv fetchurl ghc X11; + inherit (xlibs) xmessage; + }; + xpdf = import ../applications/misc/xpdf { inherit fetchurl stdenv x11 freetype t1lib; motif = lesstif; @@ -4633,11 +4747,10 @@ rec { # doesn't compile yet - in case someone else want's to continue .. /* qgis_svn = import ../applications/misc/qgis_svn { - lib = lib_unstable; - inherit mkDerivationByConfiguration fetchsvn flex + inherit mkDerivationByConfiguration fetchsvn flex lib ncurses fetchurl perl cmake gdal geos proj x11 gsl libpng zlib stdenv - sqlite glibc fontconfig freetype; + sqlite glibc fontconfig freetype / * use libc from stdenv ? - to lazy now - Marc * /; inherit (xlibs) libSM libXcursor libXinerama libXrandr libXrender; inherit (xorg) libICE; qt = qt4; @@ -4722,6 +4835,17 @@ rec { inherit fetchurl stdenv SDL zlib mpeg2dec; }; + # You still can override by passing more arguments. + spaceOrbitFun = lib.sumArgs (selectVersion ../games/orbit ) { + inherit fetchurl stdenv builderDefs + mesa freeglut; + inherit (gnome) esound; + inherit (xlibs) libXt libX11 libXmu libXi libXext; + version = "1.01"; + }; + + spaceOrbit = spaceOrbitFun null; + /*tpm = import ../games/thePenguinMachine { inherit stdenv fetchurl pil pygame SDL; python24 = python; diff --git a/pkgs/top-level/build-for-release.nix b/pkgs/top-level/build-for-release.nix index e5f8e3a466cf..6787f91a0720 100644 --- a/pkgs/top-level/build-for-release.nix +++ b/pkgs/top-level/build-for-release.nix @@ -5,7 +5,6 @@ let { i686LinuxPkgs = {inherit (allPackages {system = "i686-linux";}) aterm nixUnstable - pan subversion ; }; @@ -14,7 +13,6 @@ let { aterm gcc nixUnstable - pan subversion ; }; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index aa53c9ba1575..af89fd037028 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -20,7 +20,12 @@ args: with args; with stringsWithDeps; with lib; else (abort "unknown archive type : ${s}")); + pathDelimiter = if args ? pathDelimiter then args.pathDelimiter else + if __currentSystem == "i686-mingw" then ";" else ":"; + defAddToSearchPath = FullDepEntry (" + export PATH_DELIMITER='${pathDelimiter}'; + addToSearchPathWithCustomDelimiter() { local delimiter=\$1 local varName=\$2 @@ -40,7 +45,7 @@ args: with args; with stringsWithDeps; with lib; { addToSearchPathWithCustomDelimiter \"\${PATH_DELIMITER}\" \"\$@\" } - ") [defNest]; + ") ["defNest"]; defNest = noDepEntry (" nestingLevel=0 @@ -95,7 +100,7 @@ args: with args; with stringsWithDeps; with lib; prefix=${if args ? prefix then (toString args.prefix) else "\$out"} " - else "")) [defNest defAddToSearchPath]; + else "")) ["defNest" "defAddToSearchPath"]; addInputs = FullDepEntry (" # Recursively find all build inputs. @@ -161,7 +166,7 @@ args: with args; with stringsWithDeps; with lib; fi PATH=\$_PATH\${_PATH:+:}\$PATH - ") [minInit]; + ") ["minInit"]; defEnsureDir = FullDepEntry (" # Ensure that the given directories exists. @@ -171,7 +176,7 @@ args: with args; with stringsWithDeps; with lib; if ! test -x \"\$dir\"; then mkdir -p \"\$dir\"; fi done } - ") [minInit]; + ") ["minInit"]; toSrcDir = s : FullDepEntry ((if (archiveType s) == "tar" then " tar xvf '${s}' @@ -200,11 +205,11 @@ args: with args; with stringsWithDeps; with lib; cd \$(basename ${s} .bz2) " else (abort "unknown archive type : ${s}"))+ (if args ? goSrcDir then args.goSrcDir else "") - ) [minInit]; + ) ["minInit"]; doConfigure = FullDepEntry (" ./configure --prefix=\"\$prefix\" ${toString configureFlags} - ") [minInit addInputs doUnpack]; + ") ["minInit" "addInputs" "doUnpack"]; doAutotools = FullDepEntry (" mkdir -p config @@ -214,21 +219,21 @@ args: with args; with stringsWithDeps; with lib; autoheader || true; automake --add-missing --copy autoconf - ")[minInit addInputs doUnpack]; + ")["minInit" "addInputs" "doUnpack"]; doMake = FullDepEntry (" make ${toString makeFlags} - ") [minInit addInputs doUnpack]; + ") ["minInit" "addInputs" "doUnpack"]; doUnpack = toSrcDir (toString src); installPythonPackage = FullDepEntry (" python setup.py install --prefix=\"\$prefix\" - ") [minInit addInputs doUnpack]; + ") ["minInit" "addInputs" "doUnpack"]; doMakeInstall = FullDepEntry (" make ${toString (getAttr ["makeFlags"] "" args)} "+ - "${toString (getAttr ["installFlags"] "" args)} install") [doMake]; + "${toString (getAttr ["installFlags"] "" args)} install") ["doMake"]; doForceShare = FullDepEntry (" ensureDir \"\$prefix/share\" @@ -238,7 +243,7 @@ args: with args; with stringsWithDeps; with lib; ln -sv share/\$d \"\$prefix\" fi; done; - ") [minInit defEnsureDir]; + ") ["minInit" "defEnsureDir"]; doDump = n: noDepEntry "echo Dump number ${n}; set"; @@ -250,7 +255,7 @@ args: with args; with stringsWithDeps; with lib; doPatch = FullDepEntry (concatStringsSep ";" (map toPatchCommand patches) - ) [minInit doUnpack]; + ) ["minInit" "doUnpack"]; envAdderInner = s: x: if x==null then s else y: a: envAdderInner (s+"echo export ${x}='\"'\"\$${x}:${y}\";'\"'\n") a; @@ -268,12 +273,12 @@ args: with args; with stringsWithDeps; with lib; (${envAdderList env} echo '\"'\"${cmd}-orig\"'\"' '\"'\\\$@'\"' \n) > \"${cmd}\""; - doWrap = cmd: FullDepEntry (wrapEnv cmd (getAttr ["wrappedEnv"] [] args)) [minInit]; + doWrap = cmd: FullDepEntry (wrapEnv cmd (getAttr ["wrappedEnv"] [] args)) ["minInit"]; doPropagate = FullDepEntry (" ensureDir \$out/nix-support echo '${toString (getAttr ["propagatedBuildInputs"] [] args)}' >\$out/nix-support/propagated-build-inputs - ") [minInit defEnsureDir]; + ") ["minInit" "defEnsureDir"]; /*debug = x:(__trace x x); debugX = x:(__trace (__toXML x) x);*/ @@ -283,7 +288,7 @@ args: with args; with stringsWithDeps; with lib; replaceScripts = l:(concatStringsSep "\n" (pairMap replaceInScript l)); doReplaceScripts = FullDepEntry (replaceScripts (getAttr ["shellReplacements"] [] args)) [minInit]; makeNest = x:(if x==defNest.text then x else "startNest\n" + x + "\nstopNest\n"); - textClosure = textClosureMap makeNest; + textClosure = textClosureMapOveridable makeNest; inherit noDepEntry FullDepEntry PackEntry; @@ -317,4 +322,69 @@ args: with args; with stringsWithDeps; with lib; surroundWithCommands = x : before : after : {deps=x.deps; text = before + "\n" + x.text + "\n" + after ;}; + + + # some haskell stuff - untested! + # -------------------------------------------------------- + # creates a setup hook + # adding the package database + # nix-support/package.conf to GHC_PACKAGE_PATH + # if not already contained + # using nix-support because user does'nt want to have it in it's + # nix-profile I think? + defSetupHookRegisteringPackageDatabase = noDepEntry ( + "\nsetupHookRegisteringPackageDatabase(){" + + "\n ensureDir $out/nix-support;" + + "\n if test -n \"$1\"; then" + + "\n local pkgdb=$1" + + "\n else" + + "\n local pkgdb=$out/nix-support/package.conf" + + "\n fi" + + "\n cat >> $out/nix-support/setup-hook << EOF" + + "\n " + + "\n echo \$GHC_PACKAGE_PATH | grep -l $pkgdb &> /dev/null || \" "+ + "\n export GHC_PACKAGE_PATH=\$GHC_PACKAGE_PATH\${GHC_PACKAGE_PATH:+$PATH_DELIMITER}$pkgdb;" + + "\nEOF" + + "\n}"); + + # Either rungghc or compile setup.hs + # / which one is better ? runghc had some trouble with ghc-6.6.1 + defCabalSetupCmd = noDepEntry " + CABAL_SETUP=\"runghc setup.hs\" + "; + + # create an empty package database in which the new library can be registered. + defCreateEmptyPackageDatabaseAndSetupHook = FullDepEntry " + createEmptyPackageDatabaseAndSetupHook(){ + ensureDir $out/nix-support; + PACKAGE_DB=$out/nix-support/package.conf; + echo '[]' > \"$PACKAGE_DB\"; + setupHookRegisteringPackageDatabase + }" [defSetupHookRegisteringPackageDatabase]; + + # Cabal does only support --user ($HOME/.ghc/** ) and --global (/nix/store/*-ghc/lib/...) + # But we need kind of --custom=my-package-db + # by accident cabal does support using multiple databases passed by GHC_PACKAGE_PATH + # + # Options: + # 1) create a local package db containing all dependencies + # 2) create a single db file for each package merging them using GHC_PACKAGE_PATH=db1:db2 + # (no trailing : which would mean add global and user db) + # I prefer 2) (Marc Weber) so the most convinient way is + # using ./setup copy to install + # and ./setup register --gen-script to install to our local database + # after replacing /usr/lib etc with our pure $out path + cabalBuild = FullDepEntry + (if (args ? subdir) then "cd ${args.subdir}" else "")+ " + createEmptyPackageDatabaseAndSetupHook + ghc --make setup.hs -o setup + \$CABAL_SETUP configure + \$CABAL_SETUP build + \$CABAL_SETUP copy --dest-dir=\$out + \$CABAL_SETUP register --gen-script + sed -e 's=/usr/local/lib=\$out=g' \\ + -i register.sh + GHC_PACKAGE_PATH=\$PACKAGE_DB ./register.sh + " [defCreateEmptyPackageDatabaseAndSetupHook defCabalSetupCmd]; + }) // args diff --git a/pkgs/top-level/template-composing+config.nix b/pkgs/top-level/template-composing+config.nix index df751f693f23..7ff4f3f9d502 100644 --- a/pkgs/top-level/template-composing+config.nix +++ b/pkgs/top-level/template-composing+config.nix @@ -1,4 +1,4 @@ -args : with args; with builderDefs (args // { +args : with args; let localDefs = builderDefs (args // { src = /* put a fetchurl here */ (abort "Specify source"); useConfig = true; @@ -10,10 +10,11 @@ args : with args; with builderDefs (args // { configFlags = [ ]; }) null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { name = "${(abort "Specify name")}"+version; builder = writeScript (name + "-builder") - (textClosure [(abort "Check phases") doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [(abort "Check phases") doMakeInstall doForceShare doPropagate]); meta = { description = " ${(abort "Specify description")} diff --git a/pkgs/top-level/template-composing-builder.nix b/pkgs/top-level/template-composing-builder.nix index 8117b156879b..276bdc762dca 100644 --- a/pkgs/top-level/template-composing-builder.nix +++ b/pkgs/top-level/template-composing-builder.nix @@ -1,14 +1,16 @@ -args : with args; - with builderDefs { +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs { src = /* put a fetchurl here */ buildInputs = []; configureFlags = []; } null; /* null is a terminator for sumArgs */ + in with localDefs; stdenv.mkDerivation rec { - name = "${abort "Specify name"}"; + name = "${abort "Specify name"}-"+version; builder = writeScript (name + "-builder") - (textClosure [(abort "Specify phases - defined here or in builderDefs") doForceShare doPropagate]); + (textClosure localDefs + [(abort "Specify phases - defined here or in builderDefs") doForceShare doPropagate]); meta = { description = " ${abort "Write a description"} From f7da6595d6c026168090bcec1a1f9f44b355fcf6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 23 Jan 2008 21:27:44 +0000 Subject: [PATCH 154/320] mc nix-expr review svn path=/nixpkgs/branches/stdenv-updates/; revision=10269 --- pkgs/tools/misc/mc/builder.sh | 7 ------- pkgs/tools/misc/mc/default.nix | 15 ++++++++++----- 2 files changed, 10 insertions(+), 12 deletions(-) delete mode 100644 pkgs/tools/misc/mc/builder.sh diff --git a/pkgs/tools/misc/mc/builder.sh b/pkgs/tools/misc/mc/builder.sh deleted file mode 100644 index 28b5d68b55aa..000000000000 --- a/pkgs/tools/misc/mc/builder.sh +++ /dev/null @@ -1,7 +0,0 @@ -source $stdenv/setup - -tar xfvz $src -cd mc-* -./configure --prefix=$out --with-screen=ncurses -make -make install diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix index 9400cbbf4436..5a9e994b4dfc 100644 --- a/pkgs/tools/misc/mc/default.nix +++ b/pkgs/tools/misc/mc/default.nix @@ -1,11 +1,16 @@ -{stdenv, fetchurl, pkgconfig, glib, ncurses, libX11}: +args: with args; -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "mc-4.6.1"; src = fetchurl { - url = http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/mc-4.6.1.tar.gz; - md5 = "18b20db6e40480a53bac2870c56fc3c4"; + url = "http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/${name}.tar.gz"; + sha256 = "0zly25mwdn84s0wqx9mzyqi177mm828716nv1n6a4a5cm8yv0sh8"; }; buildInputs = [pkgconfig glib ncurses libX11]; - builder = ./builder.sh; + configureFlags = "--with-screen=ncurses"; + meta = { + description = "File Manager and User Shell for the GNU Project"; + homepage = http://www.ibiblio.org/mc; + }; } + From 4e018647423e1d39f569ff63e671c5a2244951fb Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 24 Jan 2008 23:49:02 +0000 Subject: [PATCH 155/320] * PowerPC hackery. svn path=/nixpkgs/branches/stdenv-updates/; revision=10281 --- pkgs/stdenv/linux/make-bootstrap-tools.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index 0ec0435fce9e..e7ab607171f8 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -100,8 +100,11 @@ rm -f gcc/lib*/libmud* gcc/lib*/libiberty* gcc/lib*/libssp* gcc/lib*/libgomp* rm -rf gcc/lib/gcc/*/*/install-tools rm -rf gcc/lib/gcc/*/*/include/root rm -rf gcc/lib/gcc/*/*/include/linux -if test -e gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h; then - nukeRefs gcc/lib/gcc/powerpc-unknown-linux-gnu/4.1.1/include/bits/mathdef.h +if test "$system" = "powerpc-linux"; then + nukeRefs gcc/lib/gcc/powerpc-unknown-linux-gnu/*/include/bits/mathdef.h + # Dangling symlink "sound", probably produced by fixinclude. + # Should investigate why it's there in the first place. + rm -f gcc/lib/gcc/powerpc-unknown-linux-gnu/*/include/sound fi @@ -123,6 +126,10 @@ for i in glibc/include/asm-*; do rm $i cp -prd $target glibc/include done +if test "$system" = "powerpc-linux"; then + # Hopefully we won't need these. + rm -f glibc/include/mtd glibc/include/rdma glibc/include/sound glibc/include/video +fi # Strip executables even further. From 4c83147793f0d63ff391c6b3db1d2e2d85ccc44e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 25 Jan 2008 01:28:11 +0000 Subject: [PATCH 156/320] * Hack, hack, hack. svn path=/nixpkgs/branches/stdenv-updates/; revision=10282 --- pkgs/stdenv/linux/make-bootstrap-tools.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/stdenv/linux/make-bootstrap-tools.sh b/pkgs/stdenv/linux/make-bootstrap-tools.sh index e7ab607171f8..cadc2129b317 100644 --- a/pkgs/stdenv/linux/make-bootstrap-tools.sh +++ b/pkgs/stdenv/linux/make-bootstrap-tools.sh @@ -120,7 +120,11 @@ chmod -R +w glibc rm glibc/include/linux cp -prd $(readlink $glibc/include/linux) glibc/include rm glibc/include/asm -ln -s $(readlink $(readlink $glibc/include/asm)) glibc/include/asm +if test -L "$(readlink $glibc/include/asm)"; then + ln -s $(readlink $(readlink $glibc/include/asm)) glibc/include/asm +else + cp -prd "$(readlink $glibc/include/asm)" glibc/include +fi for i in glibc/include/asm-*; do target=$(readlink $i) rm $i From fec087c8269b5fa00002fd1dc552b2b717b77ea5 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 25 Jan 2008 01:34:20 +0000 Subject: [PATCH 157/320] * Bootstrap binaries for powerpc-linux. svn path=/nixpkgs/branches/stdenv-updates/; revision=10283 --- pkgs/stdenv/linux/bootstrap/powerpc/bunzip2 | Bin 86276 -> 0 bytes pkgs/stdenv/linux/bootstrap/powerpc/bzip2 | Bin 0 -> 85816 bytes pkgs/stdenv/linux/bootstrap/powerpc/cp | Bin 64584 -> 64700 bytes pkgs/stdenv/linux/bootstrap/powerpc/curl.bz2 | Bin 151926 -> 148830 bytes .../linux/bootstrap/powerpc/default.nix | 18 +++++++++--------- pkgs/stdenv/linux/bootstrap/powerpc/tar.bz2 | Bin 100601 -> 102939 bytes 6 files changed, 9 insertions(+), 9 deletions(-) delete mode 100755 pkgs/stdenv/linux/bootstrap/powerpc/bunzip2 create mode 100755 pkgs/stdenv/linux/bootstrap/powerpc/bzip2 diff --git a/pkgs/stdenv/linux/bootstrap/powerpc/bunzip2 b/pkgs/stdenv/linux/bootstrap/powerpc/bunzip2 deleted file mode 100755 index 730214a404b98ab8b606b3bc7fbf5816d045169d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86276 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 diff --git a/pkgs/stdenv/linux/bootstrap/powerpc/bzip2 b/pkgs/stdenv/linux/bootstrap/powerpc/bzip2 new file mode 100755 index 0000000000000000000000000000000000000000..a9eb626e1ca2aae48704232756b9820bc4dc35cf GIT binary patch literal 85816 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

&W(M&Tky^eID=KrQ|kef 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 literal 0 HcmV?d00001 diff --git a/pkgs/stdenv/linux/bootstrap/powerpc/cp b/pkgs/stdenv/linux/bootstrap/powerpc/cp index 4477d7eb6e077d13999511dff056cd78a6b8b688..972a653851c1ea5fb4f1e52c03341d07338c242c 100755 GIT binary patch delta 27099 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 Tqpyq_at&V)yoCP^ih>Jj delta 27325 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Ⓢ7r1DoSJ+WBM3;EOATYm--*pkS)x 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 Mk}1N3fZ~0(c-6Z;d;kCd literal 151926 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

{+yXK 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

K}NbKm&)RjCQTY`P{v3=w% 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μ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 UBcoU+UOEOT1S!g`CyTq^T5g{{3oZdP4r2kE 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 T{(tIM|KjdQrwS4f>X$G8a~^+W literal 100601 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 VC)sP?{q_I+UC9*TLO{1oAEXHon^yn; From 7178906364ab36d97932a5b17a1e6e44daee44e3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 12:56:25 +0000 Subject: [PATCH 158/320] kde-4: typo in urls corrected svn path=/nixpkgs/branches/stdenv-updates/; revision=10290 --- pkgs/desktops/kde-4/base/default.nix | 2 +- pkgs/desktops/kde-4/edu/default.nix | 2 +- pkgs/desktops/kde-4/extragear/default.nix | 2 +- pkgs/desktops/kde-4/games/default.nix | 2 +- pkgs/desktops/kde-4/graphics/default.nix | 2 +- pkgs/desktops/kde-4/multimedia/default.nix | 2 +- pkgs/desktops/kde-4/network/default.nix | 2 +- pkgs/desktops/kde-4/pim/default.nix | 2 +- pkgs/desktops/kde-4/pimlibs/default.nix | 2 +- pkgs/desktops/kde-4/runtime/default.nix | 2 +- pkgs/desktops/kde-4/toys/default.nix | 2 +- pkgs/desktops/kde-4/utils/default.nix | 2 +- pkgs/desktops/kde-4/workspace/default.nix | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/pkgs/desktops/kde-4/base/default.nix b/pkgs/desktops/kde-4/base/default.nix index a91b30542810..f6a2ca1d92bc 100644 --- a/pkgs/desktops/kde-4/base/default.nix +++ b/pkgs/desktops/kde-4/base/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdebase-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdebase-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdebase-4.0.0.tar.bz2; sha256 = "1419zijcrx6nk10nay3dbv0vi8525hzcqkm2fw8cvw11i4mk909q"; }; diff --git a/pkgs/desktops/kde-4/edu/default.nix b/pkgs/desktops/kde-4/edu/default.nix index 2a2183000728..7f9648c6f8ff 100644 --- a/pkgs/desktops/kde-4/edu/default.nix +++ b/pkgs/desktops/kde-4/edu/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "kdeedu-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdeedu-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdeedu-4.0.0.tar.bz2; sha256 = "1wjy1rm7aiib1lv61wx7mcbkbpkk6phcz1q6dy51x0hfrc3rdkg4"; }; diff --git a/pkgs/desktops/kde-4/extragear/default.nix b/pkgs/desktops/kde-4/extragear/default.nix index 5bab882eff20..8ad2ef0540fc 100644 --- a/pkgs/desktops/kde-4/extragear/default.nix +++ b/pkgs/desktops/kde-4/extragear/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "extragear-plasma-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/extragear/extragear-plasma-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/extragear/extragear-plasma-4.0.0.tar.bz2; sha256 = "19gmvqkal11gg67gfmdivxbhwvggm2i6ad642984d97yicms7s9k"; }; diff --git a/pkgs/desktops/kde-4/games/default.nix b/pkgs/desktops/kde-4/games/default.nix index 7662b37f420d..0963d2837c9f 100644 --- a/pkgs/desktops/kde-4/games/default.nix +++ b/pkgs/desktops/kde-4/games/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdegames-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdegames-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdegames-4.0.0.tar.bz2; sha256 = "09ilgi6l5sq4gavskyhfrv8ra3n3r6xdn8cdc7fm2fi3zah4innn"; }; diff --git a/pkgs/desktops/kde-4/graphics/default.nix b/pkgs/desktops/kde-4/graphics/default.nix index 96c37836324e..9fe45f5aadef 100644 --- a/pkgs/desktops/kde-4/graphics/default.nix +++ b/pkgs/desktops/kde-4/graphics/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdegraphics-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdegraphics-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdegraphics-4.0.0.tar.bz2; sha256 = "00np19mzmg8zs8j89g1f47h3kj5azgnv3nspb8lw880zg682yp2f"; }; diff --git a/pkgs/desktops/kde-4/multimedia/default.nix b/pkgs/desktops/kde-4/multimedia/default.nix index 025c2b1b6e84..0727369e0429 100644 --- a/pkgs/desktops/kde-4/multimedia/default.nix +++ b/pkgs/desktops/kde-4/multimedia/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdemultimedia-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdemultimedia-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdemultimedia-4.0.0.tar.bz2; sha256 = "14axr1x09k67vb3vaw4g9zg4mq7j14xn9d90kifwap7b76iljbi5"; }; diff --git a/pkgs/desktops/kde-4/network/default.nix b/pkgs/desktops/kde-4/network/default.nix index 1a97c3e7e0dd..da2479bf0eeb 100644 --- a/pkgs/desktops/kde-4/network/default.nix +++ b/pkgs/desktops/kde-4/network/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdenetwork-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdenetwork-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdenetwork-4.0.0.tar.bz2; sha256 = "04vigr2z0md64khjdriwslsyaf6mpqxd2iwsnr82g53x4kh0i061"; }; diff --git a/pkgs/desktops/kde-4/pim/default.nix b/pkgs/desktops/kde-4/pim/default.nix index 5a174130091e..0e4932bcc350 100644 --- a/pkgs/desktops/kde-4/pim/default.nix +++ b/pkgs/desktops/kde-4/pim/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdepim-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdepim-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdepim-4.0.0.tar.bz2; sha256 = "kdepim is not included"; }; diff --git a/pkgs/desktops/kde-4/pimlibs/default.nix b/pkgs/desktops/kde-4/pimlibs/default.nix index 14cdfba02f48..f121a8492d61 100644 --- a/pkgs/desktops/kde-4/pimlibs/default.nix +++ b/pkgs/desktops/kde-4/pimlibs/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "kdepimlibs-4.0.0"; src = fetchurl { - url = "mirror://kde/stable/4.0/src/${name}.tar.bz2"; + url = "mirror://kde/stable/4.0.0/src/${name}.tar.bz2"; sha256 = "0vixx2vh7qgysnbzvykf20362p22jzvl8snpqaknay3v3b2k0br0"; }; diff --git a/pkgs/desktops/kde-4/runtime/default.nix b/pkgs/desktops/kde-4/runtime/default.nix index c0bd67157765..0be4a3bbc593 100644 --- a/pkgs/desktops/kde-4/runtime/default.nix +++ b/pkgs/desktops/kde-4/runtime/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "kdebase-runtime-4.0.0"; src = fetchurl { - url = "mirror://kde/stable/4.0/src/${name}.tar.bz2"; + url = "mirror://kde/stable/4.0.0/src/${name}.tar.bz2"; sha256 = "0svsn9gzg3ka77j7z71fy502a09w9gp9jd2q2y1w07ahpdil5p7h"; }; diff --git a/pkgs/desktops/kde-4/toys/default.nix b/pkgs/desktops/kde-4/toys/default.nix index 661e20bc1ebd..47fad5f46204 100644 --- a/pkgs/desktops/kde-4/toys/default.nix +++ b/pkgs/desktops/kde-4/toys/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdetoys-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdetoys-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdetoys-4.0.0.tar.bz2; sha256 = "0j7kk4ripg2sw4m8ym96aiyi8rsfb4p7kqp9kmik850flqighhsk"; }; diff --git a/pkgs/desktops/kde-4/utils/default.nix b/pkgs/desktops/kde-4/utils/default.nix index c45e384771ac..f9d76e3e6fc8 100644 --- a/pkgs/desktops/kde-4/utils/default.nix +++ b/pkgs/desktops/kde-4/utils/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdeutils-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdeutils-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdeutils-4.0.0.tar.bz2; sha256 = "0ha31z79ikkbknhyklihzys0w4jfz4qx8jiyja0gwh428f7mxqj4"; }; diff --git a/pkgs/desktops/kde-4/workspace/default.nix b/pkgs/desktops/kde-4/workspace/default.nix index b6740640c49e..5b16dee4d2e5 100644 --- a/pkgs/desktops/kde-4/workspace/default.nix +++ b/pkgs/desktops/kde-4/workspace/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { name = "kdebase-workspace-4.0.0"; src = fetchurl { - url = mirror://kde/stable/4.0/src/kdebase-workspace-4.0.0.tar.bz2; + url = mirror://kde/stable/4.0.0/src/kdebase-workspace-4.0.0.tar.bz2; sha256 = "08sgp7jaqljdxwsgr5lyyfd6w734yv24zswps1mchmhj01vz1fcg"; }; From 5ff29bb2c928245d8530c186cd0a1445bdb2e800 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 12:56:32 +0000 Subject: [PATCH 159/320] qt4 sha256-sum corrected svn path=/nixpkgs/branches/stdenv-updates/; revision=10291 --- pkgs/development/libraries/qt-4/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix index 9910d2eed2ad..2d6366c81d73 100644 --- a/pkgs/development/libraries/qt-4/default.nix +++ b/pkgs/development/libraries/qt-4/default.nix @@ -30,7 +30,7 @@ rec { src = fetchsvn { url = svn://anonsvn.kde.org/home/kde/trunk/qt-copy; rev = "761061"; - sha256 = "0i98kh435dj29ln1lnidxwivcha1m553s4l8c1h2b3yd4950w8x4"; + sha256 = "0mwbmzgqs9psw6hyh913g1jgvgr702qh4kfi2pvmrpkqvyagysg9"; }; patchPhase = "mkdir .svn; bash apply_patches;" + common.patchPhase; }); From 16dbde89871b6df79616c43373b390474ab1f281 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 13:23:06 +0000 Subject: [PATCH 160/320] Typo in xscreensaver corrected (introduced by merge) svn path=/nixpkgs/branches/stdenv-updates/; revision=10292 --- pkgs/applications/graphics/xscreensaver/5.04.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/graphics/xscreensaver/5.04.nix b/pkgs/applications/graphics/xscreensaver/5.04.nix index a9fa7978237e..afdab99999f4 100644 --- a/pkgs/applications/graphics/xscreensaver/5.04.nix +++ b/pkgs/applications/graphics/xscreensaver/5.04.nix @@ -30,7 +30,7 @@ in stdenv.mkDerivation rec { name = "xscreensaver-"+version; builder = writeScript (name + "-builder") - (textClosure [preConfigure doConfigure doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [preConfigure doConfigure doMakeInstall doForceShare doPropagate]); meta = { description = " The X screensaver daemon. Run xscreensaver-demo to configure. From 9b2659eec785c655192b7f1b23f27634a763aef3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 14:16:25 +0000 Subject: [PATCH 161/320] Merged with trunk again svn path=/nixpkgs/branches/stdenv-updates/; revision=10295 --- .../version-management/monotone/default.nix | 10 ++++ pkgs/data/documentation/man-pages/default.nix | 11 ++-- pkgs/development/compilers/jdk/default-5.nix | 2 +- .../compilers/jdk/jdk5-sun-linux.nix | 8 +-- .../libraries/haskell/HDBC/HDBC-1.1.4.nix | 10 ++++ .../haskell/HDBC/HDBC-postgresql-1.1.4.0.nix | 12 +++++ .../haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix | 12 +++++ .../libraries/haskell/cabal/cabal.nix | 2 +- .../libraries/haskell/gtk2hs/default.nix | 14 ++--- pkgs/os-specific/linux/nvidia/default.nix | 4 +- pkgs/servers/samba/default.nix | 1 + pkgs/tools/misc/mc/default.nix | 1 - pkgs/tools/misc/rlwrap/0.28.nix | 23 +++++++++ pkgs/tools/networking/smbfs-fuse/0.8.7.nix | 29 +++++++++++ pkgs/top-level/all-packages.nix | 51 +++++++++++++++++-- pkgs/top-level/template.nix | 45 ---------------- 16 files changed, 169 insertions(+), 66 deletions(-) create mode 100644 pkgs/applications/version-management/monotone/default.nix create mode 100644 pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix create mode 100644 pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix create mode 100644 pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix create mode 100644 pkgs/tools/misc/rlwrap/0.28.nix create mode 100644 pkgs/tools/networking/smbfs-fuse/0.8.7.nix delete mode 100644 pkgs/top-level/template.nix diff --git a/pkgs/applications/version-management/monotone/default.nix b/pkgs/applications/version-management/monotone/default.nix new file mode 100644 index 000000000000..fc2339af6a55 --- /dev/null +++ b/pkgs/applications/version-management/monotone/default.nix @@ -0,0 +1,10 @@ +{stdenv, fetchurl, boost, zlib}: + +stdenv.mkDerivation { + name = "monotone-0.38"; + src = fetchurl { + url = http://monotone.ca/downloads/0.38/monotone-0.38.tar.gz; + md5 = "c1a0d2619f451a664289b042c104860d"; + }; + buildInputs = [boost zlib]; +} diff --git a/pkgs/data/documentation/man-pages/default.nix b/pkgs/data/documentation/man-pages/default.nix index 6a553b86e299..6adf90344742 100644 --- a/pkgs/data/documentation/man-pages/default.nix +++ b/pkgs/data/documentation/man-pages/default.nix @@ -1,14 +1,19 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "man-pages-2.43"; + name = "man-pages-2.74"; src = fetchurl { - url = ftp://ftp.win.tue.nl/pub/linux-local/manpages/man-pages-2.43.tar.gz; - sha256 = "01dibzkssaq0ssq61adhmri29ws9jbhbn2yxmjvb3gg8q7gjah9w"; + url = ftp://ftp.win.tue.nl/pub/linux-local/manpages/man-pages-2.74.tar.gz; + sha256 = "1k6hf6va29gnf2c9kpwd6w555gp1vimf73ac2ij2j7dqx64hy7s7"; }; preBuild = " makeFlagsArray=(MANDIR=$out/share/man) "; + + meta = { + description = "Linux development manual pages"; + homepage = ftp://ftp.win.tue.nl/pub/linux-local/manpages/; + }; } diff --git a/pkgs/development/compilers/jdk/default-5.nix b/pkgs/development/compilers/jdk/default-5.nix index 1cb83ca5ddc7..9fb52378b3f7 100644 --- a/pkgs/development/compilers/jdk/default-5.nix +++ b/pkgs/development/compilers/jdk/default-5.nix @@ -1,6 +1,6 @@ {stdenv, fetchurl, unzip}: -if stdenv.system == "i686-linux" +if stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux" then (import ./jdk5-sun-linux.nix) { inherit stdenv fetchurl unzip; diff --git a/pkgs/development/compilers/jdk/jdk5-sun-linux.nix b/pkgs/development/compilers/jdk/jdk5-sun-linux.nix index 479a5a456af4..6521bb779f20 100644 --- a/pkgs/development/compilers/jdk/jdk5-sun-linux.nix +++ b/pkgs/development/compilers/jdk/jdk5-sun-linux.nix @@ -8,16 +8,16 @@ */ {stdenv, fetchurl, unzip}: -assert stdenv.system == "i686-linux"; +assert stdenv.system == "i686-linux" || stdenv.system == "x86_64-linux"; stdenv.mkDerivation { name = "jdk-1.5.0_14"; filename = "jdk-1_5_0_14"; dirname = "jdk1.5.0_14"; builder = ./builder.sh; - pathname = "/tmp/jdk-1_5_0_14-linux-i586.bin"; - md5 = "32df8f2be09c3a0f39da1b3869164b55"; - stdenv = stdenv; + pathname = if stdenv.system == "x86_64-linux" then "/tmp/jdk-1_5_0_14-linux-amd64.bin" else "/tmp/jdk-1_5_0_14-linux-i586.bin"; + md5 = if stdenv.system == "x86_64-linux" then "9dc74d939dd42988280f2c22ab9521bf" else "32df8f2be09c3a0f39da1b3869164b55"; + stdenv = stdenv; inherit unzip; } diff --git a/pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix b/pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix new file mode 100644 index 000000000000..429407d25d2a --- /dev/null +++ b/pkgs/development/libraries/haskell/HDBC/HDBC-1.1.4.nix @@ -0,0 +1,10 @@ +{cabal}: + +cabal.mkDerivation (self : { + pname = "HDBC"; + version = "1.1.4"; + sha256 = "de03020874b532f7aa734f093caf0709e7d33d0d64c59ce0a003b2269fc85597"; + meta = { + description = "HDBC provides an abstraction layer between Haskell programs and SQL relational databases"; + }; +}) diff --git a/pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix b/pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix new file mode 100644 index 000000000000..d9a1985839c5 --- /dev/null +++ b/pkgs/development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix @@ -0,0 +1,12 @@ +{cabal, HDBC, postgresql}: + +cabal.mkDerivation (self : { + pname = "HDBC-postgresql"; + version = "1.1.4.0"; + sha256 = "039eae03693330fee0e4083e22d502f94865969b243744a939786f598aec34ad"; + meta = { + description = "This package provides a PostgreSQL driver for HDBC"; + }; + propagatedBuildInputs = [HDBC postgresql]; +}) + diff --git a/pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix b/pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix new file mode 100644 index 000000000000..b0c7eb27e6a3 --- /dev/null +++ b/pkgs/development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix @@ -0,0 +1,12 @@ +{cabal, HDBC, sqlite}: + +cabal.mkDerivation (self : { + pname = "HDBC-sqlite3"; + version = "1.1.4.0"; + sha256 = "328fed8d4cdba4311efd50d9d60591a81481317ddba10c58fbaa2ec7f418f788"; + meta = { + description = "This is the Sqlite v3 driver for HDBC, the generic database access system for Haskell"; + }; + propagatedBuildInputs = [HDBC sqlite]; +}) + diff --git a/pkgs/development/libraries/haskell/cabal/cabal.nix b/pkgs/development/libraries/haskell/cabal/cabal.nix index 1e08a819c0ec..bafcedced635 100644 --- a/pkgs/development/libraries/haskell/cabal/cabal.nix +++ b/pkgs/development/libraries/haskell/cabal/cabal.nix @@ -49,7 +49,7 @@ attrs : for i in ${toString self.patchLibFiles}; do echo "patching $i" - test -f $i && sed -i '/extra-libraries/ { s|\( *\)extra-libraries.*|&\n\1extra-lib-dirs: ${toString self.extraLibDirs}| }' $i + test -f $i && sed -i '/[eE]xtra-[lL]ibraries/ { s|\( *\)[eE]xtra-[lL]ibraries.*|&\n\1extra-lib-dirs: ${toString self.extraLibDirs}| }' $i done for i in Setup.hs Setup.lhs; do test -f $i && ghc --make $i diff --git a/pkgs/development/libraries/haskell/gtk2hs/default.nix b/pkgs/development/libraries/haskell/gtk2hs/default.nix index f4e3a02c73f8..e49f4d7113ec 100644 --- a/pkgs/development/libraries/haskell/gtk2hs/default.nix +++ b/pkgs/development/libraries/haskell/gtk2hs/default.nix @@ -1,18 +1,20 @@ {stdenv, fetchurl, pkgconfig, ghc, gtk, cairo, GConf, libglade , glib, libgtkhtml, gtkhtml}: -stdenv.mkDerivation { - name = "gtk2hs-0.9.12.1"; +stdenv.mkDerivation (rec { + pname = "gtk2hs"; + version = "0.9.12.1"; + fname = "${pname}-${version}"; + name = "haskell-${fname}"; src = fetchurl { - url = mirror://sourceforge/gtk2hs/gtk2hs-0.9.12.1.tar.gz; + url = "mirror://sourceforge/${pname}/${fname}.tar.gz"; sha256 = "110z6v9gzhg6nzlz5gs8aafmipbva6rc50b8z1jgq0k2g25hfy22"; }; buildInputs = [pkgconfig ghc gtk glib cairo GConf libglade libgtkhtml gtkhtml]; - configureFlags = [ + configureFlags = [ "--enable-cairo" ]; - -} +}) diff --git a/pkgs/os-specific/linux/nvidia/default.nix b/pkgs/os-specific/linux/nvidia/default.nix index 11906b606583..c8eaa0a8936e 100644 --- a/pkgs/os-specific/linux/nvidia/default.nix +++ b/pkgs/os-specific/linux/nvidia/default.nix @@ -2,7 +2,7 @@ let - versionNumber = "169.07"; + versionNumber = "169.09"; in @@ -12,7 +12,7 @@ stdenv.mkDerivation { src = fetchurl { url = "http://us.download.nvidia.com/XFree86/Linux-x86/${versionNumber}/NVIDIA-Linux-x86-${versionNumber}-pkg1.run"; - sha256 = "1q4sbwcf24rvx72sj19pvhsmg5n8v2rfzsxf56mfxjbiy2jhjbaa"; + sha256 = "1m3k2jyxi3xxpm6890y0d97jisnxiyyay59ss2r9abyvpkv3by8i"; }; #xenPatch = ./nvidia-2.6.24-xen.patch; diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix index db001c64b9d3..bde546aafd14 100644 --- a/pkgs/servers/samba/default.nix +++ b/pkgs/servers/samba/default.nix @@ -11,6 +11,7 @@ stdenv.mkDerivation rec { buildInputs = [readline pam openldap kerberos popt iniparser libunwind fam]; configureFlags = ''--with-pam --with-smbmount --datadir=$out/share --with-aio-support --with-libiconv=${stdenv.gcc.libc}''; + postUnpack = "sourceRoot=\$sourceRoot/source"; postInstall = ''rm -rf $out/var ; ln -s /var/samba $out/var ''; } diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix index 5a9e994b4dfc..e5cce46bba85 100644 --- a/pkgs/tools/misc/mc/default.nix +++ b/pkgs/tools/misc/mc/default.nix @@ -13,4 +13,3 @@ stdenv.mkDerivation rec { homepage = http://www.ibiblio.org/mc; }; } - diff --git a/pkgs/tools/misc/rlwrap/0.28.nix b/pkgs/tools/misc/rlwrap/0.28.nix new file mode 100644 index 000000000000..695c077ce675 --- /dev/null +++ b/pkgs/tools/misc/rlwrap/0.28.nix @@ -0,0 +1,23 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = ftp://ftp.chg.ru/mirrors/ftp.freebsd.org/pub/FreeBSD/ports/distfiles/rlwrap-0.28.tar.gz; + sha256 = "07jzhcqzb8jsmsscc28dk4md7swnhn3vyai5fpxwdj6a1kbn4y3p"; + }; + + buildInputs = [readline ]; + configureFlags = []; + } null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "rlwrap-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Readline wrapper for console programs. +"; + }; +} diff --git a/pkgs/tools/networking/smbfs-fuse/0.8.7.nix b/pkgs/tools/networking/smbfs-fuse/0.8.7.nix new file mode 100644 index 000000000000..9762358b80ef --- /dev/null +++ b/pkgs/tools/networking/smbfs-fuse/0.8.7.nix @@ -0,0 +1,29 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.ricardis.tudelft.nl/~vincent/fusesmb/download/fusesmb-0.8.7.tar.gz; + sha256 = "12gz2gn9iqjg27a233dn2wij7snm7q56h97k6gks0yijf6xcnpz1"; + }; + + buildInputs = [samba fuse]; + configureFlags = []; + postInstall = FullDepEntry + ('' + ensureDir $out/lib + ln -fs ${samba}/lib/libsmbclient.so $out/lib/libsmbclient.so.0 + '') + [ "minInit" "defEnsureDir" "doMakeInstall"]; + } null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "smbfs-fuse-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [doConfigure doMakeInstall postInstall doForceShare doPropagate]); + meta = { + description = " + Samba mounted via FUSE. +"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f159e6a1a559..c71f808ffb88 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -217,7 +217,7 @@ rec { else x); builderDefs = lib.sumArgs (import ./builder-defs.nix) { - inherit stringsWithDeps lib stdenv writeScript; + inherit stringsWithDeps lib stdenv writeScript fetchurl; }; stringsWithDeps = import ../lib/strings-with-deps.nix { @@ -723,6 +723,13 @@ rec { }; */ + rlwrapFun = lib.sumArgs (selectVersion ../tools/misc/rlwrap) { + version = "0.28"; + inherit builderDefs readline; + }; + + rlwrap = rlwrapFun null; + rpm = import ../tools/package-management/rpm { inherit fetchurl stdenv cpio zlib bzip2 file sqlite beecrypt neon elfutils; }; @@ -743,6 +750,13 @@ rec { inherit fetchurl stdenv; }; + smbfsFuseFun = lib.sumArgs (selectVersion ../tools/networking/smbfs-fuse) { + version = "0.8.7"; + inherit builderDefs samba fuse; + }; + + smbfsFuse = smbfsFuseFun null; + sudo = import ../tools/security/sudo { inherit fetchurl stdenv coreutils pam; }; @@ -1042,6 +1056,22 @@ rec { # using nvs to be able to use mtl-1.1.0.0 as name in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); + # this will change in the future + ghc68_extra_libs = + ghc : let + deriv = name : goSrcDir : deps : + let bd = builderDefs { + goSrcDir = "ghc-* /libraries"; + src = ghc.extra_src; + } null; in + stdenv.mkDerivation rec { + inherit name; + builder = bd.writeScript (name + "-builder") + (bd.textClosure [builderDefs.haskellBuilderDefs]); + }; + # using nvs to be able to use mtl-1.1.0.0 as name + in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); + # the wrappers basically does one thing: It defines GHC_PACKAGE_PATH before calling ghc{i,-pkg} # So you can have different wrappers with different library combinations # So installing ghc libraries isn't done by nix-env -i package but by adding the lib to the libraries list below @@ -1166,6 +1196,10 @@ rec { inherit stdenv perl; }; + monotone = import ../applications/version-management/monotone { + inherit stdenv fetchurl boost zlib; + }; + nasm = import ../development/compilers/nasm { inherit fetchurl stdenv; }; @@ -2735,9 +2769,20 @@ rec { }; gtk2hs = import ../development/libraries/haskell/gtk2hs { - inherit pkgconfig stdenv fetchurl cairo; + inherit pkgconfig stdenv fetchurl cairo ghc; inherit (gnome) gtk glib GConf libglade libgtkhtml gtkhtml; - ghc = ghc661; + }; + + HDBC = import ../development/libraries/haskell/HDBC/HDBC-1.1.4.nix { + inherit cabal; + }; + + HDBCPostgresql = import ../development/libraries/haskell/HDBC/HDBC-postgresql-1.1.4.0.nix { + inherit cabal HDBC postgresql; + }; + + HDBCSqlite = import ../development/libraries/haskell/HDBC/HDBC-sqlite3-1.1.4.0.nix { + inherit cabal HDBC sqlite; }; pcreLight = import ../development/libraries/haskell/pcre-light { diff --git a/pkgs/top-level/template.nix b/pkgs/top-level/template.nix deleted file mode 100644 index fabd6de584a8..000000000000 --- a/pkgs/top-level/template.nix +++ /dev/null @@ -1,45 +0,0 @@ -args: -let - defList = [ -(assert false) - correct it; List element is of form ["name" default] - ]; - #stdenv and fetchurl are added automatically - getVal = (args.lib.getValue args defList); - check = args.lib.checkFlag args; - reqsList = [ -(assert false) - correct it; List element is of form ["name" "requirement-name" ... ] - ["true"] - ["false"] - ]; - buildInputsNames = args.lib.filter (x: (null!=getVal x)) - (args.lib.uniqList {inputList = - (args.lib.concatLists (map - (x:(if (x==[]) then [] else builtins.tail x)) - reqsList));}); - configFlags = [ - "true" "" -(assert false) - fill it; list consists of pairs "condition" "flags". "True" means always. - ]; - nameSuffixes = [ -(assert false) - fill it if needed, or blank it. - ]; -in - assert args.lib.checkReqs args defList reqsList; -with args; -args.stdenv.mkDerivation { - name = args.lib.condConcat " -#Fill the name // -" nameSuffixes check; - - src = args. -#Put fetcher here - - buildInputs = args.lib.filter (x: x!=null) (map getVal buildInputsNames); - configureFlags = args.lib.condConcat "" configFlags check; - - meta = { - description = " -#Fill description here -"; - }; -} From 75b181e9b7640fa7ffa01707bd1949fcb49ff207 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 14:16:40 +0000 Subject: [PATCH 162/320] Should fix building samba in impure environments svn path=/nixpkgs/branches/stdenv-updates/; revision=10296 --- pkgs/servers/samba/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix index bde546aafd14..797f619782cd 100644 --- a/pkgs/servers/samba/default.nix +++ b/pkgs/servers/samba/default.nix @@ -10,7 +10,8 @@ stdenv.mkDerivation rec { buildInputs = [readline pam openldap kerberos popt iniparser libunwind fam]; configureFlags = ''--with-pam --with-smbmount --datadir=$out/share - --with-aio-support --with-libiconv=${stdenv.gcc.libc}''; + --with-aio-support '' + + (if stdenv.gcc ? libc then "--with-libiconv=${stdenv.gcc.libc}" else ""); postUnpack = "sourceRoot=\$sourceRoot/source"; postInstall = ''rm -rf $out/var ; ln -s /var/samba $out/var ''; From 68373da7eeed5868a6864bb915d5c0fe288adb41 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 16:00:05 +0000 Subject: [PATCH 163/320] vsftpd: builds with gcc-4.2 now svn path=/nixpkgs/branches/stdenv-updates/; revision=10297 --- pkgs/servers/ftp/vsftpd/default.nix | 20 ++++++++++++-------- pkgs/top-level/all-packages.nix | 3 +-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/pkgs/servers/ftp/vsftpd/default.nix b/pkgs/servers/ftp/vsftpd/default.nix index 861845ab24f4..d3a2a5a66f7f 100644 --- a/pkgs/servers/ftp/vsftpd/default.nix +++ b/pkgs/servers/ftp/vsftpd/default.nix @@ -1,16 +1,20 @@ -{stdenv, fetchurl, openssl}: +args: with args; -stdenv.mkDerivation { - name = "vsftpd-2.0.3"; +stdenv.mkDerivation rec { + name = "vsftpd-2.0.5"; src = fetchurl { - url = ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz; - md5 = "74936cbd8e8251deb1cd99c5fb18b6f8"; + url = "ftp://vsftpd.beasts.org/users/cevans/${name}.tar.gz"; + sha256 = "0nzsxknnaqnfk853yjsmi31sl02jf5ydix9wxbldv4i7vzqfnqjl"; }; - NIX_LDFLAGS = [ "-lcrypt" "-lssl" "-lcrypto" ]; + NIX_LDFLAGS = "-lcrypt -lssl -lcrypto -lpam -lcap"; - builder = ./builder.sh ; + preInstall = '' + ensureDir $out/{,s}bin + ensureDir $out/man/man{5,8} + ''; patches = [ ./fix.patch ] ; - buildInputs = [ openssl ]; + preConfigure = ''sed -i "/VSF_BUILD_SSL/s/^#undef/#define/" builddefs.h''; + buildInputs = [ openssl libcap pam ]; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c71f808ffb88..31cacd146140 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3185,8 +3185,7 @@ rec { }; vsftpd = import ../servers/ftp/vsftpd { - inherit fetchurl openssl ; - stdenv = overrideGCC stdenv gcc295 ; + inherit fetchurl openssl stdenv libcap pam; }; xorg = recurseIntoAttrs (import ../servers/x11/xorg { From 9552457d84db2925dddc1799b72f2bfacae7380c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 16:01:06 +0000 Subject: [PATCH 164/320] Trying to fix samba evaluation on freebsd svn path=/nixpkgs/branches/stdenv-updates/; revision=10298 --- pkgs/servers/samba/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix index 797f619782cd..835781fc17e3 100644 --- a/pkgs/servers/samba/default.nix +++ b/pkgs/servers/samba/default.nix @@ -11,7 +11,7 @@ stdenv.mkDerivation rec { buildInputs = [readline pam openldap kerberos popt iniparser libunwind fam]; configureFlags = ''--with-pam --with-smbmount --datadir=$out/share --with-aio-support '' - + (if stdenv.gcc ? libc then "--with-libiconv=${stdenv.gcc.libc}" else ""); + + (if (stdenv.gcc ? libc && stdenv.gcc.libc) then "--with-libiconv=${stdenv.gcc.libc}" else ""); postUnpack = "sourceRoot=\$sourceRoot/source"; postInstall = ''rm -rf $out/var ; ln -s /var/samba $out/var ''; From 9d5757470ac91bca169f4765b51f61311f39887c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 19:04:37 +0000 Subject: [PATCH 165/320] Fixed samba on freebsd (I hope) svn path=/nixpkgs/branches/stdenv-updates/; revision=10299 --- pkgs/servers/samba/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/servers/samba/default.nix b/pkgs/servers/samba/default.nix index 835781fc17e3..fab06b6540cd 100644 --- a/pkgs/servers/samba/default.nix +++ b/pkgs/servers/samba/default.nix @@ -11,7 +11,7 @@ stdenv.mkDerivation rec { buildInputs = [readline pam openldap kerberos popt iniparser libunwind fam]; configureFlags = ''--with-pam --with-smbmount --datadir=$out/share --with-aio-support '' - + (if (stdenv.gcc ? libc && stdenv.gcc.libc) then "--with-libiconv=${stdenv.gcc.libc}" else ""); + + (if (stdenv.gcc.libc != null) then "--with-libiconv=${stdenv.gcc.libc}" else ""); postUnpack = "sourceRoot=\$sourceRoot/source"; postInstall = ''rm -rf $out/var ; ln -s /var/samba $out/var ''; From bfc88db96dcc60e62872500afe27092594161e4c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Fri, 25 Jan 2008 19:04:42 +0000 Subject: [PATCH 166/320] maxima: using mirrof://sf svn path=/nixpkgs/branches/stdenv-updates/; revision=10300 --- pkgs/applications/misc/maxima/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/applications/misc/maxima/default.nix b/pkgs/applications/misc/maxima/default.nix index 9b2fe2913104..ad44a7b5d0fd 100644 --- a/pkgs/applications/misc/maxima/default.nix +++ b/pkgs/applications/misc/maxima/default.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation { src = fetchurl { name = "maxima-5.13.0.tar.gz"; - url = http://downloads.sourceforge.net/maxima/maxima-5.13.0.tar.gz?modtime=1188046120&big_mirror=1; + url = mirror://sf/maxima/maxima-5.13.0.tar.gz; sha256 = "11zidbbp4cbgsmdfyf9w0j7345ydka469ba0my7p73zqhnby09cn"; }; From 197720f2af2e572c05885b8a5d7504252641781d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 26 Jan 2008 12:02:46 +0000 Subject: [PATCH 167/320] Clisp is compilable svn path=/nixpkgs/branches/stdenv-updates/; revision=10302 --- .../development/interpreters/clisp/builder.sh | 22 -------------- .../interpreters/clisp/default.nix | 30 ++++++++++++++++--- 2 files changed, 26 insertions(+), 26 deletions(-) delete mode 100644 pkgs/development/interpreters/clisp/builder.sh diff --git a/pkgs/development/interpreters/clisp/builder.sh b/pkgs/development/interpreters/clisp/builder.sh deleted file mode 100644 index 89731fbb9874..000000000000 --- a/pkgs/development/interpreters/clisp/builder.sh +++ /dev/null @@ -1,22 +0,0 @@ -source $stdenv/setup || exit 1 - -set -e - -tar jxvf $src -cd clisp-* -sed -e 's@/bin/pwd@'${coreutils}'&@' -i src/clisp-link.in -./configure --with-readline builddir --build \ - --prefix=$out --with-dynamic-ffi \ - --with-module=clx/new-clx --with-module=i18n \ - --with-module=bindings/glibc \ - --with-module=pcre --with-module=rawsock \ - --with-module=readline --with-module=syscalls \ - --with-module=wildcard --with-modules=zlib || - for i in $(find . -name config.log ); do - echo ------- - echo $i; - echo === - cat $i; - done > /tmp/clisp-config-log -cd builddir -make install diff --git a/pkgs/development/interpreters/clisp/default.nix b/pkgs/development/interpreters/clisp/default.nix index db2506ae8c73..5095bf985d44 100644 --- a/pkgs/development/interpreters/clisp/default.nix +++ b/pkgs/development/interpreters/clisp/default.nix @@ -1,14 +1,36 @@ args: with args; -stdenv.mkDerivation { - name = "clisp-2.43"; - builder = ./builder.sh; +stdenv.mkDerivation rec { + v = "2.43"; + name = "clisp-${v}"; src = fetchurl { - url = mirror://gnu/clisp/release/2.43/clisp-2.43.tar.bz2; + url = "mirror://gnu/clisp/release/${v}/${name}.tar.bz2"; sha256 = "10qyn6wccnayf1cyvrcanay6c6laar6z1r608w7ijp6nb763q8dm"; }; inherit libsigsegv gettext coreutils; buildInputs = [libsigsegv gettext ncurses readline libX11 libXau libXt pcre zlib]; + + patchPhase = '' + sed -i 's@/bin/pwd@${coreutils}&@' src/clisp-link.in + find . -type f | xargs sed -e 's/-lICE/-lXau &/' -i + ''; + + configureFlags = "--with-readline builddir --with-dynamic-ffi + --with-module=clx/new-clx --with-module=i18n --with-module=bindings/glibc + --with-module=pcre --with-module=rawsock --with-module=readline + --with-module=syscalls --with-module=wildcard --with-module=zlib"; + + preBuild = "cd builddir"; + + NIX_CFLAGS_COMPILE="-O0"; + + # TODO : make mod-check fails + doCheck = 1; + + meta = { + description = "ANSI Common Lisp Implementation"; + homepage = http://clisp.cons.org; + }; } From 2f9d6fc9ba4735a4d456e0a4871a0a5f68b353fd Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 26 Jan 2008 12:02:57 +0000 Subject: [PATCH 168/320] finger client and daemon added svn path=/nixpkgs/branches/stdenv-updates/; revision=10303 --- pkgs/servers/fingerd/bsd-fingerd/default.nix | 17 ++ .../fingerd/bsd-fingerd/ubuntu-0.17-9.patch | 67 +++++ pkgs/tools/networking/bsd-finger/default.nix | 17 ++ .../networking/bsd-finger/ubuntu-0.17-9.patch | 261 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 8 + 5 files changed, 370 insertions(+) create mode 100644 pkgs/servers/fingerd/bsd-fingerd/default.nix create mode 100644 pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch create mode 100644 pkgs/tools/networking/bsd-finger/default.nix create mode 100644 pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch diff --git a/pkgs/servers/fingerd/bsd-fingerd/default.nix b/pkgs/servers/fingerd/bsd-fingerd/default.nix new file mode 100644 index 000000000000..eacf2371d360 --- /dev/null +++ b/pkgs/servers/fingerd/bsd-fingerd/default.nix @@ -0,0 +1,17 @@ +args: with args; +stdenv.mkDerivation rec { + name = "bsd-fingerd-0.17"; + + src = fetchurl { + url = "ftp://ftp.metalab.unc.edu/pub/linux/system/network/finger/bsd-finger-0.17.tar.gz"; + sha256 = "1yhkiv0in588il7f84k2xiy78g9lv12ll0y7047gazhiimk5v244"; + }; + + NIX_CFLAGS_COMPILE="-D_GNU_SOURCE"; + + patches = [./ubuntu-0.17-9.patch]; + + preBuild = "cd fingerd"; + + preInstall = '' ensureDir $out/man/man8 $out/sbin ''; +} diff --git a/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch b/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch new file mode 100644 index 000000000000..80968d587ba9 --- /dev/null +++ b/pkgs/servers/fingerd/bsd-fingerd/ubuntu-0.17-9.patch @@ -0,0 +1,67 @@ +--- bsd-finger-0.17.orig/fingerd/fingerd.8 ++++ bsd-finger-0.17/fingerd/fingerd.8 +@@ -36,10 +36,10 @@ + .Dt FINGERD 8 + .Os "Linux NetKit (0.17)" + .Sh NAME +-.Nm fingerd ++.Nm in.fingerd + .Nd remote user information server + .Sh SYNOPSIS +-.Nm fingerd ++.Nm in.fingerd + .Op Fl wulf + .Op Fl pL Ar path + .Op Fl t Ar timeout +@@ -61,7 +61,7 @@ + banner + which also shows some informations (e.g. uptime, operating system name and + release) about the system the +-.Nm fingerd ++.Nm in.fingerd + is running on. Some sites may consider this a security risk as it + gives out information that may be useful to crackers. + .Pp +@@ -85,7 +85,7 @@ + .Pp + The + .Fl p +-option allows specification of an alternate location for fingerd to find ++option allows specification of an alternate location for in.fingerd to find + the + .Dq finger + program. The +@@ -97,7 +97,7 @@ + option specifies the time to wait for a request before closing the + connection. A value of 0 waits forever. The default is 60 seconds. + .Pp +-Options to fingerd should be specified in ++Options to in.fingerd should be specified in + .Pa /etc/inetd.conf . + .Pp + The finger protocol consists mostly of specifying command arguments. +@@ -105,12 +105,12 @@ + .Xr inetd 8 + .Dq super-server + runs +-.Nm fingerd ++.Nm in.fingerd + for + .Tn TCP + requests received on port 79. + Once connected +-.Nm fingerd ++.Nm in.fingerd + reads a single command line + terminated by a + .Aq Tn CRLF +--- bsd-finger-0.17.orig/fingerd/fingerd.c ++++ bsd-finger-0.17/fingerd/fingerd.c +@@ -55,6 +55,7 @@ + #include + #include + #include ++#include + + #include "pathnames.h" + #include "../version.h" diff --git a/pkgs/tools/networking/bsd-finger/default.nix b/pkgs/tools/networking/bsd-finger/default.nix new file mode 100644 index 000000000000..d627235494b2 --- /dev/null +++ b/pkgs/tools/networking/bsd-finger/default.nix @@ -0,0 +1,17 @@ +args: with args; +stdenv.mkDerivation rec { + name = "bsd-finger-0.17"; + + src = fetchurl { + url = "ftp://ftp.metalab.unc.edu/pub/linux/system/network/finger/${name}.tar.gz"; + sha256 = "1yhkiv0in588il7f84k2xiy78g9lv12ll0y7047gazhiimk5v244"; + }; + + NIX_CFLAGS_COMPILE="-D_GNU_SOURCE"; + + patches = [./ubuntu-0.17-9.patch]; + + preBuild = "cd finger"; + + preInstall = '' ensureDir $out/man/man1 $out/bin ''; +} diff --git a/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch b/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch new file mode 100644 index 000000000000..24decb60281f --- /dev/null +++ b/pkgs/tools/networking/bsd-finger/ubuntu-0.17-9.patch @@ -0,0 +1,261 @@ +--- bsd-finger-0.17.orig/finger/finger.1 ++++ bsd-finger-0.17/finger/finger.1 +@@ -169,16 +169,14 @@ + must be able to see the + .Pa .nofinger + file. This generally means that the home directory containing the file +-must have the other-users-execute bit set (o+w). See ++must have the other-users-execute bit set (o+x). See + .Xr chmod 1 . + If you use this feature for privacy, please test it with ``finger + @localhost'' before relying on it, just in case. + .It ~/.plan + .It ~/.project +-.It ~/.pgp ++.It ~/.pgpkey + These files are printed as part of a long-format request. The +-.Pa .project +-file is limited to one line; the + .Pa .plan + file may be arbitrarily long. + .El +--- bsd-finger-0.17.orig/finger/finger.c ++++ bsd-finger-0.17/finger/finger.c +@@ -77,7 +77,7 @@ + #include "../version.h" + + static void loginlist(void); +-static void userlist(int argc, char *argv[]); ++static int userlist(int argc, char *argv[]); + + int lflag, pplan; + static int sflag, mflag; +@@ -92,6 +92,7 @@ + + int main(int argc, char *argv[]) { + int ch; ++ int err = 0; + struct sockaddr_in sin; + socklen_t slen = sizeof(sin); + +@@ -159,7 +160,7 @@ + } + } + else { +- userlist(argc, argv); ++ err = userlist(argc, argv); + /* + * Assign explicit "large" format if names given and -s not + * explicitly stated. Force the -l AFTER we get names so any +@@ -172,7 +173,7 @@ + if (lflag) lflag_print(); + else sflag_print(); + } +- return 0; ++ return err; + } + + /* Returns 1 if .nofinger is found and enable_nofinger is set. */ +@@ -181,10 +182,16 @@ + check_nofinger(struct passwd *pw) + { + if (enable_nofinger) { +- char path[PATH_MAX]; + struct stat tripe; +- snprintf(path, sizeof(path), "%s/.nofinger", pw->pw_dir); +- if (stat(path, &tripe)==0) { ++ int ret; ++ char *path; ++ if (asprintf(&path, "%s/.nofinger", pw->pw_dir) < 0) { ++ eprintf("finger: Out of space.\n"); ++ exit(1); ++ } ++ ret = stat(path, &tripe); ++ free(path); ++ if (!ret) { + return 1; + } + } +@@ -264,10 +271,11 @@ + + } + +-static void ++static int + userlist(int argc, char *argv[]) + { + int i; ++ int err = 0; + PERSON *pn; + PERSON *nethead, **nettail; + struct utmp *uptr; +@@ -297,13 +305,13 @@ + + /* handle network requests */ + for (pn = nethead; pn; pn = pn->next) { +- netfinger(pn->name); ++ err |= netfinger(pn->name); + if (pn->next || entries) + xputc('\n'); + } + + if (entries == 0) +- return; ++ return err; + + /* + * Scan thru the list of users currently logged in, saving +@@ -331,4 +339,6 @@ + enter_lastlog(pn); + } + endutent(); ++ ++ return err; + } +--- bsd-finger-0.17.orig/finger/finger.h ++++ bsd-finger-0.17/finger/finger.h +@@ -92,7 +92,7 @@ + void enter_where(struct utmp *ut, PERSON *pn); + void enter_lastlog(PERSON *pn); + int match(struct passwd *pw, const char *user); +-void netfinger(const char *name); ++int netfinger(const char *name); + const char *prphone(const char *num); + + #ifndef DAYSPERNYEAR +--- bsd-finger-0.17.orig/finger/lprint.c ++++ bsd-finger-0.17/finger/lprint.c +@@ -48,7 +48,7 @@ + #include + #include + #include +-#include ++#include + #include "finger.h" + + static void lprint(PERSON *pn); +@@ -100,7 +100,7 @@ + * office, office phone, home phone if available + */ + xprintf("Login: %-15s\t\t\tName: %s\nDirectory: %-25s", +- pn->name, pn->realname, pn->dir); ++ pn->name, pn->realname ? pn->realname : "", pn->dir); + xprintf("\tShell: %-s\n", *pn->shell ? pn->shell : _PATH_BSHELL); + + /* +--- bsd-finger-0.17.orig/finger/net.c ++++ bsd-finger-0.17/finger/net.c +@@ -51,7 +51,7 @@ + #include + #include "finger.h" + +-void netfinger(const char *name) { ++int netfinger(const char *name) { + register FILE *fp; + struct in_addr defaddr; + register int c, sawret, ateol; +@@ -62,7 +62,7 @@ + char *alist[1], *host; + + host = strrchr(name, '@'); +- if (!host) return; ++ if (!host) return 1; + *host++ = '\0'; + + memset(&sn, 0, sizeof(sn)); +@@ -70,7 +70,7 @@ + sp = getservbyname("finger", "tcp"); + if (!sp) { + eprintf("finger: tcp/finger: unknown service\n"); +- return; ++ return 1; + } + sn.sin_port = sp->s_port; + +@@ -78,7 +78,7 @@ + if (!hp) { + if (!inet_aton(host, &defaddr)) { + eprintf("finger: unknown host: %s\n", host); +- return; ++ return 1; + } + def.h_name = host; + def.h_addr_list = alist; +@@ -96,7 +96,7 @@ + + if ((s = socket(hp->h_addrtype, SOCK_STREAM, 0)) < 0) { + eprintf("finger: socket: %s\n", strerror(errno)); +- return; ++ return 1; + } + + /* print hostname before connecting, in case it takes a while */ +@@ -104,7 +104,7 @@ + if (connect(s, (struct sockaddr *)&sn, sizeof(sn)) < 0) { + eprintf("finger: connect: %s\n", strerror(errno)); + close(s); +- return; ++ return 1; + } + + /* -l flag for remote fingerd */ +@@ -128,7 +128,7 @@ + if (!fp) { + eprintf("finger: fdopen: %s\n", strerror(errno)); + close(s); +- return; ++ return 1; + } + + sawret = 0; +@@ -152,4 +152,6 @@ + } + if (!ateol) xputc('\n'); + fclose(fp); ++ ++ return 0; + } +--- bsd-finger-0.17.orig/finger/sprint.c ++++ bsd-finger-0.17/finger/sprint.c +@@ -40,7 +40,7 @@ + #endif /* not lint */ + + #include +-#include ++#include + #include + #include + #include +--- bsd-finger-0.17.orig/finger/util.c ++++ bsd-finger-0.17/finger/util.c +@@ -64,7 +64,7 @@ + struct stat sb; + + /* No device for X console. Utmp entry by XDM login (":0"). */ +- if (w->tty[0] == ':') { ++ if (strchr(w->tty, ':')) { + w->idletime = 0; /* would be nice to have it emit ??? */ + w->writable = 0; + return; +@@ -109,9 +109,8 @@ + * fields[3] -> homephone + */ + nfields = 0; +- for (p = strtok(bp, ","); p; p = strtok(NULL, ",")) { +- if (*p==0) p = NULL; // skip empties +- if (nfields < 4) fields[nfields++] = p; ++ while ((p = strsep(&bp, ","))) { ++ if (nfields < 4) fields[nfields++] = *p ? p : NULL; + } + while (nfields<4) fields[nfields++] = NULL; + +@@ -150,6 +149,9 @@ + + pn->realname = rname; + } ++ else { ++ pn->realname = NULL; ++ } + + pn->office = fields[1] ? strdup(fields[1]) : NULL; + pn->officephone = fields[2] ? strdup(fields[2]) : NULL; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 31cacd146140..885fc12871fe 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -450,6 +450,10 @@ rec { inherit stdenv findutils; })); + finger_bsd = import ../tools/networking/bsd-finger { + inherit fetchurl stdenv; + }; + fontforge = import ../tools/misc/fontforge { inherit fetchurl stdenv gettext freetype zlib libungif libpng libjpeg libtiff libxml2; @@ -3120,6 +3124,10 @@ rec { inherit fetchurl stdenv expat erlang zlib openssl; }; + fingerd_bsd = import ../servers/fingerd/bsd-fingerd { + inherit fetchurl stdenv; + }; + ircdHybrid = import ../servers/irc/ircd-hybrid { inherit fetchurl stdenv openssl zlib; }; From 433f7fed54fbd328c484634fb0962920a45d6a15 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:15:48 +0000 Subject: [PATCH 169/320] Added x86_64 version of JDK5 svn path=/nixpkgs/branches/stdenv-updates/; revision=10376 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 885fc12871fe..19d873d928a8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1164,7 +1164,7 @@ rec { }; jdk5 = - assert system == "i686-linux"; + assert system == "i686-linux" || system == "x86_64-linux"; import ../development/compilers/jdk/default-5.nix { inherit fetchurl stdenv unzip; }; From b95a97e2d4dc1ea73c3231bf0d5e36e1b2e5edee Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:15:56 +0000 Subject: [PATCH 170/320] Minor change to composing templates. svn path=/nixpkgs/branches/stdenv-updates/; revision=10377 --- pkgs/top-level/template-composing+config.nix | 2 +- pkgs/top-level/template-composing-builder.nix | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/top-level/template-composing+config.nix b/pkgs/top-level/template-composing+config.nix index 7ff4f3f9d502..172cd9c47979 100644 --- a/pkgs/top-level/template-composing+config.nix +++ b/pkgs/top-level/template-composing+config.nix @@ -1,4 +1,4 @@ -args : with args; let localDefs = builderDefs (args // { +args : with args; let localDefs = builderDefs (args // rec { src = /* put a fetchurl here */ (abort "Specify source"); useConfig = true; diff --git a/pkgs/top-level/template-composing-builder.nix b/pkgs/top-level/template-composing-builder.nix index 276bdc762dca..88bf2b63cfa5 100644 --- a/pkgs/top-level/template-composing-builder.nix +++ b/pkgs/top-level/template-composing-builder.nix @@ -1,10 +1,10 @@ args : with args; with builderDefs {src="";} null; - let localDefs = builderDefs { + let localDefs = builderDefs (rec { src = /* put a fetchurl here */ buildInputs = []; configureFlags = []; - } null; /* null is a terminator for sumArgs */ + }) null; /* null is a terminator for sumArgs */ in with localDefs; stdenv.mkDerivation rec { name = "${abort "Specify name"}-"+version; From 9eb8065a74d5fb22f5ba77126c638c24c79032eb Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:16:06 +0000 Subject: [PATCH 171/320] * added rdesktop svn path=/nixpkgs/branches/stdenv-updates/; revision=10378 --- .../networking/remote/rdesktop/default.nix | 20 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 25 insertions(+) create mode 100644 pkgs/applications/networking/remote/rdesktop/default.nix diff --git a/pkgs/applications/networking/remote/rdesktop/default.nix b/pkgs/applications/networking/remote/rdesktop/default.nix new file mode 100644 index 000000000000..c81160ae57c2 --- /dev/null +++ b/pkgs/applications/networking/remote/rdesktop/default.nix @@ -0,0 +1,20 @@ +{stdenv, fetchurl, openssl, libX11} : + +stdenv.mkDerivation (rec { + pname = "rdesktop"; + version = "1.5.0"; + name = "${pname}-${version}"; + + src = fetchurl { + url = "mirror://sourceforge/${pname}/${name}.tar.gz"; + sha256 = "5ead17c3d29cb1028aeca485ee7a8c65694c1b02a1b7014c3da920b265a438aa"; + }; + + buildInputs = [openssl libX11]; + + configureFlags = [ "--with-openssl=${openssl}" ]; + + meta = { + description = "rdesktop is an open source client for Windows Terminal Services"; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 19d873d928a8..f1c365cfb2e8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4477,6 +4477,11 @@ rec { inherit fetchurl stdenv; }; + rdesktop = import ../applications/networking/remote/rdesktop { + inherit fetchurl stdenv openssl; + inherit (xlibs) libX11; + }; + RealPlayer = import ../applications/video/RealPlayer { inherit fetchurl stdenv; inherit (gtkLibs) glib pango atk gtk; From 6002db9e01633d098a290ed481f025b3e7db51ab Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:16:26 +0000 Subject: [PATCH 172/320] Removed deploy sed instruction \(is obsolete\) svn path=/nixpkgs/branches/stdenv-updates/; revision=10379 --- pkgs/servers/http/jboss/builder.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkgs/servers/http/jboss/builder.sh b/pkgs/servers/http/jboss/builder.sh index 1a9e650ebcc1..335620009197 100644 --- a/pkgs/servers/http/jboss/builder.sh +++ b/pkgs/servers/http/jboss/builder.sh @@ -13,6 +13,3 @@ cp -av output/jboss-*/* $out # Insert JAVA_HOME variable to make sure the latest JRE is used and not version 5 sed -i -e "/GREP/aJAVA_HOME=$jdk" $out/bin/run.sh - -# Change the deploy directory to the nix profile -sed -i -e "s|deploy/|/nix/var/nix/profiles/default/server/default/deploy/|" $out/server/default/conf/jboss-service.xml From 378a59a7b85e4054698e4000f2adc009186f50d5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:16:40 +0000 Subject: [PATCH 173/320] pgadmin3 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10380 --- pkgs/applications/misc/pgadmin/default.nix | 18 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 23 insertions(+) create mode 100644 pkgs/applications/misc/pgadmin/default.nix diff --git a/pkgs/applications/misc/pgadmin/default.nix b/pkgs/applications/misc/pgadmin/default.nix new file mode 100644 index 000000000000..a02ee299ef02 --- /dev/null +++ b/pkgs/applications/misc/pgadmin/default.nix @@ -0,0 +1,18 @@ +args: +args.stdenv.mkDerivation { + name = "pgadmin3-1.8.1"; + + src = args.fetchurl { + name = "pgadmin3-v1.8.1.tar.gz"; + url = "http://ftp3.de.postgresql.org/pub/Mirrors/ftp.postgresql.org//pgadmin3/release/v1.8.1/src/pgadmin3-1.8.1.tar.gz"; + sha256 = "1vnpbgb2ksvcgbzab4jjspwvs5cvam53azinfavjad4kpjczdywb"; + }; + + buildInputs =(with args; [postgresql wxGTK libxml2 libxslt openssl]); + + meta = { + description = "postgresql admin gui tool"; + homepage = http://www.pgadmin.org/download/; + license = "GPL2"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f1c365cfb2e8..972cc0bb9908 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5104,6 +5104,11 @@ rec { inherit fetchurl stdenv; }; + pgadmin = import ../applications/misc/pgadmin { + inherit fetchurl stdenv postgresql libxml2 libxslt openssl; + wxGTK = wxGTK28; + }; + pgf = import ../misc/tex/pgf { inherit fetchurl stdenv; }; From 316b5505cd7702c069d7560e7b794298eb88acdb Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:17:02 +0000 Subject: [PATCH 174/320] Added aterm 2.5 svn path=/nixpkgs/branches/stdenv-updates/; revision=10381 --- pkgs/development/libraries/aterm/2.5.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 18 insertions(+) create mode 100644 pkgs/development/libraries/aterm/2.5.nix diff --git a/pkgs/development/libraries/aterm/2.5.nix b/pkgs/development/libraries/aterm/2.5.nix new file mode 100644 index 000000000000..f30be007fa52 --- /dev/null +++ b/pkgs/development/libraries/aterm/2.5.nix @@ -0,0 +1,14 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "aterm-2.5"; + src = fetchurl { + url = http://buildfarm.st.ewi.tudelft.nl/releases/meta-environment/aterm-2.5pre21238-l2q7rg38/aterm-2.5.tar.gz; + md5 = "33ddcb1a229baf406ad1f603eb1d5995"; + }; + meta = { + homepage = http://www.cwi.nl/htbin/sen1/twiki/bin/view/SEN1/ATerm; + license = "LGPL"; + description = "Library for manipulation of term data structures in C"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 972cc0bb9908..84d16217e0a4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1731,6 +1731,10 @@ rec { inherit fetchurl stdenv; }; + aterm25 = import ../development/libraries/aterm/2.5.nix { + inherit fetchurl stdenv; + }; + attr = import ../development/libraries/attr { inherit stdenv fetchurl autoconf libtool gettext; }; From 1ec43cc340e95fdf2126de2aa0150fd5bd6817d2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:17:19 +0000 Subject: [PATCH 175/320] Added sdf2-bundle 2.4 svn path=/nixpkgs/branches/stdenv-updates/; revision=10382 --- .../tools/parsing/sdf/sdf2-bundle-2.4.nix | 12 ++++++++++++ pkgs/top-level/all-packages.nix | 8 ++++++++ 2 files changed, 20 insertions(+) create mode 100644 pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix diff --git a/pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix b/pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix new file mode 100644 index 000000000000..7d62d7430700 --- /dev/null +++ b/pkgs/development/tools/parsing/sdf/sdf2-bundle-2.4.nix @@ -0,0 +1,12 @@ +{stdenv, fetchurl, aterm, getopt, pkgconfig}: + +stdenv.mkDerivation { + name = "sdf2-bundle-2.4"; + src = fetchurl { + url = http://buildfarm.st.ewi.tudelft.nl/releases/meta-environment/sdf2-bundle-2.4pre212034-2nspl1xc/sdf2-bundle-2.4.tar.gz; + md5 = "00107bef17d3fb8486575f8974fb384b"; + }; + + buildInputs = [aterm pkgconfig]; + propagatedBuildInputs = [getopt]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 84d16217e0a4..e907a9327331 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1632,6 +1632,14 @@ rec { stdenv = overrideInStdenv stdenv [gnumake380]; }; + sdf24 = import ../development/tools/parsing/sdf/sdf2-bundle-2.4.nix { + inherit fetchurl getopt pkgconfig; + aterm = aterm25; + # Note: sdf2-bundle currently requires GNU make 3.80; remove + # explicit dependency when this is fixed. + stdenv = overrideInStdenv stdenv [gnumake380]; + }; + strace = import ../development/tools/misc/strace { inherit fetchurl stdenv; }; From 8b871ad3392362f5c42a5e7ab5929ffddb871bef Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:17:25 +0000 Subject: [PATCH 176/320] Added Stratego/XT 0.17 prerelease svn path=/nixpkgs/branches/stdenv-updates/; revision=10383 --- .../compilers/strategoxt/strategoxt-0.17.nix | 15 +++++++++++++++ pkgs/top-level/all-packages.nix | 7 +++++++ 2 files changed, 22 insertions(+) create mode 100644 pkgs/development/compilers/strategoxt/strategoxt-0.17.nix diff --git a/pkgs/development/compilers/strategoxt/strategoxt-0.17.nix b/pkgs/development/compilers/strategoxt/strategoxt-0.17.nix new file mode 100644 index 000000000000..fa56d6e35e63 --- /dev/null +++ b/pkgs/development/compilers/strategoxt/strategoxt-0.17.nix @@ -0,0 +1,15 @@ +{stdenv, fetchurl, aterm, sdf, pkgconfig}: + +stdenv.mkDerivation { + + name = "strategoxt-0.17"; + builder = ./builder.sh; + + src = fetchurl { + url = http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt/strategoxt-0.17M3pre17099/strategoxt-0.17M3pre17099.tar.gz; + md5 = "fc9bc3cb6d80bfa6ee1fadd2dd828c72"; + }; + + inherit aterm sdf; + buildInputs = [pkgconfig aterm sdf]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e907a9327331..348c6cefc0c6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1252,6 +1252,13 @@ rec { stdenv = overrideInStdenv stdenv [gnumake380]; }; + strategoxt017 = import ../development/compilers/strategoxt/strategoxt-0.17.nix { + inherit fetchurl pkgconfig; + sdf = sdf24; + aterm = aterm25; + stdenv = overrideInStdenv stdenv [gnumake380]; + }; + strategoxtUtils = import ../development/compilers/strategoxt/utils { inherit fetchurl pkgconfig stdenv aterm sdf strategoxt; }; From 13255753b4f85125be3067db9ec2b7c8cdaedc8d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:17:42 +0000 Subject: [PATCH 177/320] Added java-front svn path=/nixpkgs/branches/stdenv-updates/; revision=10384 --- pkgs/development/compilers/java-front/builder.sh | 4 ++++ pkgs/development/compilers/java-front/default.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 7 +++++++ 3 files changed, 25 insertions(+) create mode 100644 pkgs/development/compilers/java-front/builder.sh create mode 100644 pkgs/development/compilers/java-front/default.nix diff --git a/pkgs/development/compilers/java-front/builder.sh b/pkgs/development/compilers/java-front/builder.sh new file mode 100644 index 000000000000..0177abcccea2 --- /dev/null +++ b/pkgs/development/compilers/java-front/builder.sh @@ -0,0 +1,4 @@ +source $stdenv/setup + +configureFlags="--with-aterm=$aterm --with-sdf=$sdf --with-strategoxt=$strategoxt" +genericBuild diff --git a/pkgs/development/compilers/java-front/default.nix b/pkgs/development/compilers/java-front/default.nix new file mode 100644 index 000000000000..fc60e72a5627 --- /dev/null +++ b/pkgs/development/compilers/java-front/default.nix @@ -0,0 +1,14 @@ +{stdenv, fetchurl, aterm, sdf, strategoxt, pkgconfig}: + +stdenv.mkDerivation { + name = "java-front-0.9"; + builder = ./builder.sh; + + src = fetchurl { + url = http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt/java-front-0.9pre17376-qi43zwhy/java-front-0.9pre17376.tar.gz; + md5 = "fec70158b110c77a2e5db29676438029"; + }; + + inherit aterm sdf strategoxt; + buildInputs = [pkgconfig aterm sdf strategoxt]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 348c6cefc0c6..489698ddb566 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1151,6 +1151,13 @@ rec { ghc = ghc661; }; + javafront = import ../development/compilers/java-front { + inherit stdenv fetchurl pkgconfig; + sdf = sdf24; + aterm = aterm25; + strategoxt = strategoxt017; + }; + #TODO add packages http://cvs.haskell.org/Hugs/downloads/2006-09/packages/ and test # commented out because it's using the new configuration style proposal which is unstable #hugs = import ../development/compilers/hugs { From e22cd8245e80f437df6273db5767eb99a14bb1b0 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:18:05 +0000 Subject: [PATCH 178/320] Added MySQL driver link to JBoss svn path=/nixpkgs/branches/stdenv-updates/; revision=10385 --- pkgs/servers/http/jboss/jdbc/mysql/builder.sh | 5 +++++ pkgs/servers/http/jboss/jdbc/mysql/default.nix | 9 +++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 3 files changed, 18 insertions(+) create mode 100644 pkgs/servers/http/jboss/jdbc/mysql/builder.sh create mode 100644 pkgs/servers/http/jboss/jdbc/mysql/default.nix diff --git a/pkgs/servers/http/jboss/jdbc/mysql/builder.sh b/pkgs/servers/http/jboss/jdbc/mysql/builder.sh new file mode 100644 index 000000000000..06d60fc5e126 --- /dev/null +++ b/pkgs/servers/http/jboss/jdbc/mysql/builder.sh @@ -0,0 +1,5 @@ +buildInputs="$mysql_jdbc" +source $stdenv/setup + +ensureDir $out/server/default/lib +ln -s $mysql_jdbc/share/java/mysql-connector-java.jar $out/server/default/lib/mysql-connector-java.jar diff --git a/pkgs/servers/http/jboss/jdbc/mysql/default.nix b/pkgs/servers/http/jboss/jdbc/mysql/default.nix new file mode 100644 index 000000000000..8544ce050afd --- /dev/null +++ b/pkgs/servers/http/jboss/jdbc/mysql/default.nix @@ -0,0 +1,9 @@ +{ stdenv, jboss, mysql_jdbc }: + +stdenv.mkDerivation { + name = "jboss-mysql-jdbc"; + + builder = ./builder.sh; + + inherit mysql_jdbc; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 489698ddb566..c8e18e389bd8 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3162,6 +3162,10 @@ rec { inherit fetchurl stdenv jdk5 jdk; }; + jboss_mysql_jdbc = import ../servers/http/jboss/jdbc/mysql { + inherit stdenv jboss mysql_jdbc; + }; + jetty = import ../servers/http/jetty { inherit fetchurl stdenv unzip; }; From c1a512f2a10b9eca7c1c01512da3c828c66ae7be Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Tue, 29 Jan 2008 13:18:13 +0000 Subject: [PATCH 179/320] Added WebDSL svn path=/nixpkgs/branches/stdenv-updates/; revision=10386 --- pkgs/development/compilers/webdsl/builder.sh | 8 ++++++++ pkgs/development/compilers/webdsl/default.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 7 +++++++ 3 files changed, 29 insertions(+) create mode 100644 pkgs/development/compilers/webdsl/builder.sh create mode 100644 pkgs/development/compilers/webdsl/default.nix diff --git a/pkgs/development/compilers/webdsl/builder.sh b/pkgs/development/compilers/webdsl/builder.sh new file mode 100644 index 000000000000..d77094a91b0c --- /dev/null +++ b/pkgs/development/compilers/webdsl/builder.sh @@ -0,0 +1,8 @@ +source $stdenv/setup + +configureFlags="--with-aterm=$aterm --with-sdf=$sdf --with-strategoxt=$strategoxt" +genericBuild + +# Replace /bin/bash in WebDSL script (maybe there is a better solution?) + +sed -i -e "s|#!/bin/bash|#!/bin/sh|" $out/bin/webdsl diff --git a/pkgs/development/compilers/webdsl/default.nix b/pkgs/development/compilers/webdsl/default.nix new file mode 100644 index 000000000000..da961cbf2f64 --- /dev/null +++ b/pkgs/development/compilers/webdsl/default.nix @@ -0,0 +1,14 @@ +{stdenv, fetchurl, aterm, sdf, strategoxt, pkgconfig, javafront}: + +stdenv.mkDerivation { + name = "webdsl-7.12pre876"; + builder = ./builder.sh; + + src = fetchurl { + url = http://buildfarm.st.ewi.tudelft.nl/releases/strategoxt/webdsl-7.12pre876-g60njq3p/webdsl-7.12pre876.tar.gz; + md5 = "7cd8709b02e03da74d90f8f8388e8d01"; + }; + + inherit aterm sdf strategoxt javafront; + buildInputs = [pkgconfig aterm sdf strategoxt javafront]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c8e18e389bd8..69aca64e56fc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1291,6 +1291,13 @@ rec { inherit fetchurl stdenv cabextract; }; + webdsl = import ../development/compilers/webdsl { + inherit stdenv fetchurl pkgconfig javafront; + aterm = aterm25; + sdf = sdf24; + strategoxt = strategoxt017; + }; + win32hello = import ../development/compilers/visual-c++/test { inherit fetchurl stdenv visualcpp windowssdk; }; From 54303ac99c827f0a969ea437ec12e88400c6f2d2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:38:37 +0000 Subject: [PATCH 180/320] * Added AUFS, another Unionfs. svn path=/nixpkgs/branches/stdenv-updates/; revision=10420 --- pkgs/os-specific/linux/aufs/default.nix | 35 +++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 23 +++++++++------- 2 files changed, 48 insertions(+), 10 deletions(-) create mode 100644 pkgs/os-specific/linux/aufs/default.nix diff --git a/pkgs/os-specific/linux/aufs/default.nix b/pkgs/os-specific/linux/aufs/default.nix new file mode 100644 index 000000000000..c053a8073073 --- /dev/null +++ b/pkgs/os-specific/linux/aufs/default.nix @@ -0,0 +1,35 @@ +{stdenv, fetchurl, kernel}: + +stdenv.mkDerivation { + name = "aufs-20080128"; + + src = fetchurl { + url = http://nix.cs.uu.nl/dist/tarballs/aufs-20080128.tar.bz2; + sha256 = "0732zp6wfss09x9d6n0a3v65rifn739m9nffi5d3952vglg4va6l"; + }; + + buildPhase = '' + mkdir kernelsrc + tar xvf ${kernel.src} -C kernelsrc + + kernelVersion=$(cd ${kernel}/lib/modules && ls) + substituteInPlace fs/aufs/Makefile --replace srctree srctree2 + make KDIR=${kernel}/lib/modules/$kernelVersion/build srctree2=$(pwd)/kernelsrc/* -f local.mk + ''; + + installPhase = '' + ensureDir $out/bin + cp util/aulchown $out/bin + + ensureDir $out/share/man/man5 + cp util/aufs.5 $out/share/man/man5 + + ensureDir $out/lib/modules/$kernelVersion/misc + cp aufs.ko $out/lib/modules/$kernelVersion/misc + ''; + + meta = { + description = "Another Unionfs implementation for Linux"; + homepage = http://aufs.sourceforge.net/; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 69aca64e56fc..cc46d30566a4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -150,9 +150,8 @@ rec { # The same, another syntax. # Warning: syntax for configuration.nix changed too - useVersion = name: f: f - { - version = getConfig [ "environment" "versions" name ]; + useVersion = name: f: f { + version = getConfig [ "environment" "versions" name ]; }; # The contents of the configuration file found at $NIXPKGS_CONFIG or @@ -3269,10 +3268,14 @@ rec { atherosVersion = "r3122"; - atherosFunCurrent = theKernel: (atherosFun { + atherosFunCurrent = kernel: atherosFun { version = atherosVersion; - kernel = theKernel; - } null); + inherit kernel; + } null; + + aufs = import ../os-specific/linux/aufs { + inherit fetchurl stdenv kernel; + }; bridge_utils = import ../os-specific/linux/bridge_utils { inherit fetchurl stdenv autoconf automake; @@ -3351,7 +3354,7 @@ rec { }; htop = import ../os-specific/linux/htop { - inherit fetchurl stdenv ncurses; + inherit fetchurl stdenv ncurses; }; hwdata = import ../os-specific/linux/hwdata { @@ -3790,8 +3793,8 @@ rec { }; shared_mime_info = import ../data/misc/shared-mime-info { - inherit fetchurl stdenv perl perlXMLParser pkgconfig gettext libxml2; - inherit (gtkLibs) glib; + inherit fetchurl stdenv perl perlXMLParser pkgconfig gettext libxml2; + inherit (gtkLibs) glib; }; iana_etc = import ../data/misc/iana-etc { @@ -3799,7 +3802,7 @@ rec { }; poppler_data = import ../data/misc/poppler-data { - inherit fetchurl stdenv; + inherit fetchurl stdenv; }; ttf_bitstream_vera = import ../data/fonts/ttf-bitstream-vera { From 864a711d1be21e636380fd0ab992db3afc51bc55 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:38:45 +0000 Subject: [PATCH 181/320] update ghc proposal (still not working) svn path=/nixpkgs/branches/stdenv-updates/; revision=10421 --- pkgs/top-level/all-packages.nix | 30 +++++++++++++----------------- pkgs/top-level/builder-defs.nix | 10 +++++----- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cc46d30566a4..3815255b905e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1020,8 +1020,6 @@ rec { profiledCompiler = true; }); - /* doesn't work yet - # This new ghc stuff is under heavy development and might change ! # usage: see ghcPkgUtil.sh - use setup-new2 because of PATH_DELIMITER @@ -1044,20 +1042,20 @@ rec { }; # this will change in the future - ghc68_extra_libs = - ghc : let - deriv = name : goSrcDir : deps : - let bd = builderDefs { - goSrcDir = "ghc-* /libraries"; - src = ghc.extra_src; - } null; in - stdenv.mkDerivation rec { - inherit name; - builder = bd.writeScript (name + "-builder") - (bd.textClosure [builderDefs.haskellBuilderDefs]); - }; + ghc68_extra_libs = ghc: + let deriv = name : goSrcDir : deps : + let localDefs = builderDefs { + inherit goSrcDir; + src = ghc.extra_src; + } null; + in with localDefs; + stdenv.mkDerivation rec { + inherit name; + builder = writeScript (name + "-builder") + (textClosure localDefs [ cabalBuild ]); + }; # using nvs to be able to use mtl-1.1.0.0 as name - in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); + in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "cd libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); # this will change in the future ghc68_extra_libs = @@ -1099,8 +1097,6 @@ rec { inherit ghc; }; - */ - # ghc66boot = import ../development/compilers/ghc-6.6-boot { # inherit fetchurl stdenv perl readline; # m4 = gnum4; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index af89fd037028..5757098cf8d6 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -204,6 +204,7 @@ args: with args; with stringsWithDeps; with lib; bzip2 -d <${s} > \$PWD/\$(basename ${s} .bz2)/\${NAME#*-} cd \$(basename ${s} .bz2) " else (abort "unknown archive type : ${s}"))+ + # goSrcDir is typically something like "cd mysubdir" .. but can be anything else (if args ? goSrcDir then args.goSrcDir else "") ) ["minInit"]; @@ -288,7 +289,7 @@ args: with args; with stringsWithDeps; with lib; replaceScripts = l:(concatStringsSep "\n" (pairMap replaceInScript l)); doReplaceScripts = FullDepEntry (replaceScripts (getAttr ["shellReplacements"] [] args)) [minInit]; makeNest = x:(if x==defNest.text then x else "startNest\n" + x + "\nstopNest\n"); - textClosure = textClosureMapOveridable makeNest; + textClosure = a : steps : textClosureMapOveridable makeNest a (["defNest"] ++ steps); inherit noDepEntry FullDepEntry PackEntry; @@ -360,7 +361,7 @@ args: with args; with stringsWithDeps; with lib; PACKAGE_DB=$out/nix-support/package.conf; echo '[]' > \"$PACKAGE_DB\"; setupHookRegisteringPackageDatabase - }" [defSetupHookRegisteringPackageDatabase]; + }" ["defSetupHookRegisteringPackageDatabase" "defEnsureDir"]; # Cabal does only support --user ($HOME/.ghc/** ) and --global (/nix/store/*-ghc/lib/...) # But we need kind of --custom=my-package-db @@ -375,8 +376,7 @@ args: with args; with stringsWithDeps; with lib; # and ./setup register --gen-script to install to our local database # after replacing /usr/lib etc with our pure $out path cabalBuild = FullDepEntry - (if (args ? subdir) then "cd ${args.subdir}" else "")+ " - createEmptyPackageDatabaseAndSetupHook + " createEmptyPackageDatabaseAndSetupHook ghc --make setup.hs -o setup \$CABAL_SETUP configure \$CABAL_SETUP build @@ -385,6 +385,6 @@ args: with args; with stringsWithDeps; with lib; sed -e 's=/usr/local/lib=\$out=g' \\ -i register.sh GHC_PACKAGE_PATH=\$PACKAGE_DB ./register.sh - " [defCreateEmptyPackageDatabaseAndSetupHook defCabalSetupCmd]; + " ["defCreateEmptyPackageDatabaseAndSetupHook" "defCabalSetupCmd"]; }) // args From b987e603f09b2947150010feb128c4c03e082085 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:39:01 +0000 Subject: [PATCH 182/320] * Description of the current coding conventions in Nixpkgs / NixOS. Comments welcome. svn path=/nixpkgs/branches/stdenv-updates/; revision=10422 --- maintainers/docs/coding-conventions.txt | 97 +++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 maintainers/docs/coding-conventions.txt diff --git a/maintainers/docs/coding-conventions.txt b/maintainers/docs/coding-conventions.txt new file mode 100644 index 000000000000..c95dc3c36009 --- /dev/null +++ b/maintainers/docs/coding-conventions.txt @@ -0,0 +1,97 @@ +Some conventions: + +* Don't use TABs. Everybody has different TAB settings so it's asking + for trouble. + +* Use 2 spaces of indentation per indentation level in Nix + expressions, 4 spaces in shell scripts. (Maybe 2 is too low, but + for consistency's sake it should be the same. Certainly indentation + should be consistent within a single file.) + +* Use lowerCamelCase for variable names, not UpperCamelCase. + +* Function calls with attribute set arguments are written as + + foo { + arg = ...; + } + + not + + foo + { + arg = ...; + } + + Also fine is + + foo { arg = ...; } + + if it's a short call. + +* In attribute sets or lists that span multiple lines, the attribute + names or list elements should be aligned: + + # A long list. + list = [ + elem1 + elem2 + elem3 + ]; + + # A long attribute set. + attrs = { + attr1 = short_expr; + attr2 = + if true then big_expr else big_expr; + }; + +* Short lists or attribute sets can be written on one line: + + # A short list. + list = [ elem1 elem2 elem3 ]; + + # A short set. + attrs = { x = 1280; y = 1024; }; + +* Breaking in the middle of a function argument can give hard-to-read + code, like + + someFunction { x = 1280; + y = 1024; } otherArg + yetAnotherArg + + (especially if the argument is very large, spanning multiple lines). + + Better: + + someFunction + { x = 1280; y = 1024; } + otherArg + yetAnotherArg + + or + + let res = { x = 1280; y = 1024; }; + in someFunction res otherArg yetAnotherArg + +* The bodies of functions, asserts, and withs are not indented, so + + assert system == "i686-linux"; + stdenv.mkDerivation { ... + + not + + assert system == "i686-linux"; + stdenv.mkDerivation { ... + +* Function formal arguments are written as: + + {arg1, arg2, arg3}: + + but if they don't fit on one line they're written as: + + { arg1, arg2, arg3 + , arg4, ... + , argN + }: From 50f0ca2d9b967c6340f7b8c7a1b7ffc7e3204101 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:39:16 +0000 Subject: [PATCH 183/320] * Apache 2.2.8. svn path=/nixpkgs/branches/stdenv-updates/; revision=10423 --- pkgs/servers/http/apache-httpd/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/servers/http/apache-httpd/default.nix b/pkgs/servers/http/apache-httpd/default.nix index 92a442728d8a..76865cf3426e 100644 --- a/pkgs/servers/http/apache-httpd/default.nix +++ b/pkgs/servers/http/apache-httpd/default.nix @@ -7,12 +7,12 @@ assert db4Support -> db4 != null; assert expat != null && perl != null; stdenv.mkDerivation { - name = "apache-httpd-2.2.6"; + name = "apache-httpd-2.2.8"; builder = ./builder.sh; src = fetchurl { - url = http://archive.apache.org/dist/httpd/httpd-2.2.6.tar.bz2; - md5 = "203bea91715064f0c787f6499d33a377"; + url = http://archive.apache.org/dist/httpd/httpd-2.2.8.tar.bz2; + md5 = "76d2598a4797163d07cd50e5304aa7cd"; }; inherit sslSupport db4Support; From 4ef94bc9061343bb433834f070b4bae47bd9dd21 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:39:31 +0000 Subject: [PATCH 184/320] * Latest unstable Nix. svn path=/nixpkgs/branches/stdenv-updates/; revision=10424 --- pkgs/tools/package-management/nix/unstable.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index 79d46ce8e845..a204b10f1f5c 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -3,22 +3,23 @@ , stateDir ? "/nix/var" }: -let version = "0.12pre10154"; in +let version = "0.12pre10389"; in stdenv.mkDerivation { name = "nix-${version}"; src = fetchurl { url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2"; - md5 = "9e5833e34ade23852a1270d0f2a98ce2"; + md5 = "5824debe60299ebc9c5aa6532e6a8b67"; }; buildInputs = [perl curl openssl]; - configureFlags = " + configureFlags = '' --with-store-dir=${storeDir} --localstatedir=${stateDir} --with-aterm=${aterm} --with-bdb=${db4} --with-bzip2=${bzip2} - --disable-init-state"; + --disable-init-state + ''; meta = { description = "The Nix Deployment System"; From 671fd9e7212bfe0d1a01578eddb12f0806475f4b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:39:47 +0000 Subject: [PATCH 185/320] Added Apache Tomcat 6.0 svn path=/nixpkgs/branches/stdenv-updates/; revision=10425 --- pkgs/servers/http/tomcat/6.0.nix | 15 +++++++++++++++ pkgs/servers/http/tomcat/builder-6.0.sh | 6 ++++++ pkgs/top-level/all-packages.nix | 4 ++++ 3 files changed, 25 insertions(+) create mode 100644 pkgs/servers/http/tomcat/6.0.nix create mode 100644 pkgs/servers/http/tomcat/builder-6.0.sh diff --git a/pkgs/servers/http/tomcat/6.0.nix b/pkgs/servers/http/tomcat/6.0.nix new file mode 100644 index 000000000000..32a3dedde472 --- /dev/null +++ b/pkgs/servers/http/tomcat/6.0.nix @@ -0,0 +1,15 @@ +{stdenv, fetchurl, jdk}: + +stdenv.mkDerivation { + + name = "apache-tomcat-6.0.14"; + + builder = ./builder-6.0.sh; + + src = fetchurl { + url = http://apache.mirrors.webazilla.nl/tomcat/tomcat-6/v6.0.14/bin/apache-tomcat-6.0.14.tar.gz; + md5 = "3b18ff250d8172737c4f67f11631f68a"; + }; + + inherit jdk; +} diff --git a/pkgs/servers/http/tomcat/builder-6.0.sh b/pkgs/servers/http/tomcat/builder-6.0.sh new file mode 100644 index 000000000000..ae2f934af596 --- /dev/null +++ b/pkgs/servers/http/tomcat/builder-6.0.sh @@ -0,0 +1,6 @@ +source $stdenv/setup + +tar zxf $src + +mkdir $out +mv apache-tomcat*/* $out diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3815255b905e..b4b731b7b2e7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3224,6 +3224,10 @@ rec { inherit fetchurl stdenv jdk; }; + tomcat6 = import ../servers/http/tomcat/6.0.nix { + inherit fetchurl stdenv jdk; + }; + vsftpd = import ../servers/ftp/vsftpd { inherit fetchurl openssl stdenv libcap pam; }; From e6a64be5c8eaf4a99942eb7fbf6c02d04ff2ebfd Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:40:02 +0000 Subject: [PATCH 186/320] subversion: using getConfig svn path=/nixpkgs/branches/stdenv-updates/; revision=10426 --- pkgs/top-level/all-packages.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b4b731b7b2e7..eb1daf82d802 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4602,12 +4602,14 @@ rec { }; subversion14 = import ../applications/version-management/subversion-1.4.x { - inherit fetchurl stdenv apr aprutil neon expat swig zlib; - bdbSupport = true; - httpServer = false; + inherit fetchurl stdenv apr aprutil neon expat swig zlib jdk; + bdbSupport = getConfig ["subversion" "bdbSupport"] true; + httpServer = getConfig ["subversion" "httpServer"] false; + sslSupport = getConfig ["subversion" "sslSupport"] true; + pythonBindings = getConfig ["subversion" "pythonBindings"] false; perlBindings = getConfig ["subversion" "perlBindings"] false; - sslSupport = true; - compressionSupport = true; + javahlBindings = getConfig ["subversion" "javahlBindings"] false; + compressionSupport = getConfig ["subversion" "compressionSupport"] true; httpd = apacheHttpd; }; From 77ccd225e7c393aed5cae5a8af18a5d65d196c37 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:40:09 +0000 Subject: [PATCH 187/320] subversion: corrected location of python-bindings svn path=/nixpkgs/branches/stdenv-updates/; revision=10427 --- .../version-management/subversion-1.4.x/builder.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/version-management/subversion-1.4.x/builder.sh b/pkgs/applications/version-management/subversion-1.4.x/builder.sh index 9a503a926010..70d78b4a6246 100644 --- a/pkgs/applications/version-management/subversion-1.4.x/builder.sh +++ b/pkgs/applications/version-management/subversion-1.4.x/builder.sh @@ -7,8 +7,8 @@ fi postInstall() { if test "$pythonBindings"; then - make swig-py swig_pydir=$(toPythonPath $out) - make install-swig-py swig_pydir=$(toPythonPath $out) + make swig-py swig_pydir=$(toPythonPath $out)/libsvn swig_pydir_extra=$(toPythonPath $out)/svn + make install-swig-py swig_pydir=$(toPythonPath $out)/libsvn swig_pydir_extra=$(toPythonPath $out)/svn fi if test "$perlBindings"; then make swig-pl-lib From b1b8c4f258dbe305f0d2b5d7a94151d6bb7087b6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:40:21 +0000 Subject: [PATCH 188/320] * Added ms-sys, a program for writing Microsoft compatible boot records. svn path=/nixpkgs/branches/stdenv-updates/; revision=10428 --- pkgs/tools/misc/mssys/default.nix | 22 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 26 insertions(+) create mode 100644 pkgs/tools/misc/mssys/default.nix diff --git a/pkgs/tools/misc/mssys/default.nix b/pkgs/tools/misc/mssys/default.nix new file mode 100644 index 000000000000..a9d32205ceab --- /dev/null +++ b/pkgs/tools/misc/mssys/default.nix @@ -0,0 +1,22 @@ +{stdenv, fetchurl, gettext}: + +stdenv.mkDerivation { + name = "ms-sys-2.1.3"; + + src = fetchurl { + url = mirror://sourceforge/ms-sys/ms-sys-2.1.3.tgz; + md5 = "6fad0a69ac89440ad4f696dbbbf11497"; + }; + + buildInputs = [gettext]; + + preBuild = '' + makeFlags=(PREFIX=$out) + ''; + + meta = { + homepage = http://ms-sys.sourceforge.net/; + license = "GPL"; + description = "A program for writing Microsoft compatible boot records"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index eb1daf82d802..ed220b5b5213 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -632,6 +632,10 @@ rec { inherit fetchurl stdenv; }; + mssys = import ../tools/misc/mssys { + inherit fetchurl stdenv gettext; + }; + ncat = import ../tools/networking/ncat { inherit fetchurl stdenv openssl; }; From fbfab88e04178f3c6ab72039e13be95edbeb1b0d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:41:04 +0000 Subject: [PATCH 189/320] Nix-expr style review Unneded args.something replaced with args: with args; line. After this line args is the only place where we can recieve variables from. Also removed several buildInputs = []; lines. svn path=/nixpkgs/branches/stdenv-updates/; revision=10429 --- pkgs/applications/editors/bvi/default.nix | 8 ++++---- .../graphics/exrdisplay/default.nix | 12 ++++++------ pkgs/applications/jedit/default.nix | 8 ++++---- pkgs/applications/jedit/wrapper.nix | 14 +++++++------- pkgs/applications/misc/blender/default.nix | 12 ++++++------ pkgs/applications/misc/d4x/default.nix | 10 +++++----- pkgs/applications/misc/flite/default.nix | 8 +++----- pkgs/applications/misc/freemind/default.nix | 10 +++++----- pkgs/applications/misc/mrxvt/default.nix | 4 ++-- pkgs/applications/misc/pgadmin/default.nix | 8 ++++---- pkgs/applications/misc/pstree/default.nix | 7 +++---- pkgs/applications/misc/rxvt/default.nix | 8 ++++---- pkgs/applications/misc/sbagen/default.nix | 6 +++--- pkgs/applications/misc/synergy/default.nix | 8 ++++---- .../instant-messengers/teamspeak/client.nix | 8 ++++---- pkgs/applications/networking/msmtp/default.nix | 8 +++----- pkgs/applications/networking/skype/default.nix | 10 +++++----- pkgs/applications/video/kino/default.nix | 10 +++++----- pkgs/development/compilers/fpc/binary.nix | 7 +++---- pkgs/development/compilers/fpc/default.nix | 8 ++++---- .../development/libraries/SDL_image/default.nix | 9 ++++----- pkgs/development/libraries/SDL_ttf/default.nix | 9 ++++----- pkgs/development/libraries/ctl/default.nix | 12 ++++++------ pkgs/development/libraries/glew/default.nix | 8 ++++---- pkgs/development/libraries/gsl/default.nix | 8 +++----- .../libraries/libavc1394/default.nix | 8 ++++---- .../libraries/libiec61883/default.nix | 8 ++++---- .../libraries/libraw1394/default.nix | 8 +++----- pkgs/development/libraries/libwmf/default.nix | 11 +++++------ .../libraries/openexr_ctl/default.nix | 14 +++++++------- pkgs/development/libraries/proj.4/default.nix | 8 +++----- pkgs/development/python-modules/pil/default.nix | 12 ++++++------ .../python-modules/pygame/default.nix | 12 ++++++------ pkgs/development/tools/misc/avrdude/default.nix | 2 +- pkgs/development/tools/misc/uisp/default.nix | 8 +++----- .../tools/selenium/remote-control/default.nix | 8 ++++---- pkgs/games/thePenguinMachine/default.nix | 17 ++++++++--------- pkgs/misc/gxemul/default.nix | 2 +- pkgs/misc/maven/maven-2.nix | 8 +++----- pkgs/misc/ntfsprogs/default.nix | 6 ++---- pkgs/os-specific/linux/bridge_utils/default.nix | 8 ++++---- .../os-specific/linux/kernel/acerhk/default.nix | 12 ++++++------ pkgs/os-specific/linux/nfs-utils/default.nix | 8 ++++---- pkgs/os-specific/linux/radeontools/default.nix | 8 ++++---- pkgs/os-specific/linux/tcp-wrapper/default.nix | 8 ++++---- pkgs/servers/irc/ircd-hybrid/default.nix | 12 ++++++------ pkgs/tools/X11/xmacro/default.nix | 9 ++++----- pkgs/tools/backup/rdiff-backup/default.nix | 8 ++++---- pkgs/tools/hddtemp/default.nix | 10 ++++------ pkgs/tools/misc/shebangfix/default.nix | 6 +++--- pkgs/tools/misc/wv/default.nix | 11 +++++------ pkgs/tools/misc/xclip/default.nix | 8 ++++---- pkgs/tools/networking/dnsmasq/default.nix | 8 +++----- 53 files changed, 220 insertions(+), 248 deletions(-) diff --git a/pkgs/applications/editors/bvi/default.nix b/pkgs/applications/editors/bvi/default.nix index 6d9ffdaecc81..223aabcdf82e 100644 --- a/pkgs/applications/editors/bvi/default.nix +++ b/pkgs/applications/editors/bvi/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args : with args; +stdenv.mkDerivation { name = "bvi-1.3.2"; - src = args.fetchurl { + src = fetchurl { url = http://prdownloads.sourceforge.net/bvi/bvi-1.3.2.src.tar.gz; sha256 = "110wxqnyianqamxq4y53drqqxb9vp4k2fcvic45qggvlqkqhlfgz"; }; - buildInputs =(with args; [ncurses]); + buildInputs = [ncurses]; meta = { description = "hex editor with vim style keybindings"; diff --git a/pkgs/applications/graphics/exrdisplay/default.nix b/pkgs/applications/graphics/exrdisplay/default.nix index 980f94e95d43..c4054e687f96 100644 --- a/pkgs/applications/graphics/exrdisplay/default.nix +++ b/pkgs/applications/graphics/exrdisplay/default.nix @@ -1,23 +1,23 @@ -args: +args: with args; -assert args.fltk.flag_set_gl; -args.stdenv.mkDerivation { +assert fltk.flag_set_gl; +stdenv.mkDerivation { name ="openexr_viewers-1.0.1"; - src = args.fetchurl { + src = fetchurl { url = "http://download.savannah.nongnu.org/releases/openexr/openexr_viewers-1.0.1.tar.gz"; sha256 = "1w5qbcdp7sw48z1wk2v07f7p14vqqb1m2ncxyxnbkm9f4ab0ymg6"; }; - inherit (args) fltk mesa; + inherit fltk mesa; configurePhase = " # don't know why.. adding these flags it works #export CXXFLAGS=`fltk-config --use-gl --cxxflags --ldflags` ./configure --prefix=\$out --with-fltk-config=\$fltk/bin/fltk-config"; - buildInputs =(with args; [openexr fltk pkgconfig mesa which openexr_ctl]); + buildInputs = [openexr fltk pkgconfig mesa which openexr_ctl]; meta = { description = "tool to view OpenEXR images"; diff --git a/pkgs/applications/jedit/default.nix b/pkgs/applications/jedit/default.nix index 3d694ee3ed7e..aaf558ace091 100644 --- a/pkgs/applications/jedit/default.nix +++ b/pkgs/applications/jedit/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "jedit-4.2"; - src = args.fetchurl { + src = fetchurl { url = http://kent.dl.sourceforge.net/sourceforge/jedit/jedit42source.tar.gz; sha256 = "1ckqghsw2r30kfkqfgjl4k47gdwpz8c1h85haw0y0ymq4rqh798j"; }; @@ -18,7 +18,7 @@ args.stdenv.mkDerivation { cp modes/catalog \$out/lib/modes "; - buildInputs =(with args; [ant]); + buildInputs = [ant]; meta = { description = "really nice programmers editor written in Java. Give it a try"; diff --git a/pkgs/applications/jedit/wrapper.nix b/pkgs/applications/jedit/wrapper.nix index ff8f6abacfc4..8af3d96918d8 100644 --- a/pkgs/applications/jedit/wrapper.nix +++ b/pkgs/applications/jedit/wrapper.nix @@ -1,18 +1,18 @@ -args: -args.stdenv.mkDerivation { - name = args.jedit.name+"_startscript"; +args: with args; +stdenv.mkDerivation { + name = jedit.name+"_startscript"; - java = args.jre+"/bin/java"; - jeditjar = args.jedit+"/lib/jedit.jar"; + java = jre+"/bin/java"; + jeditjar = jedit+"/lib/jedit.jar"; phases = "buildPhase"; buildPhase = " ensureDir \$out/bin -cat > \$out/bin/${args.jedit.name} << EOF +cat > \$out/bin/${jedit.name} << EOF #!/bin/sh exec $java -jar $jeditjar \\$* EOF - chmod +x \$out/bin/${args.jedit.name} + chmod +x \$out/bin/${jedit.name} "; } diff --git a/pkgs/applications/misc/blender/default.nix b/pkgs/applications/misc/blender/default.nix index e722d4ff9dbd..aa50f67719c3 100644 --- a/pkgs/applications/misc/blender/default.nix +++ b/pkgs/applications/misc/blender/default.nix @@ -1,18 +1,18 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "blender-2.45"; - src = args.fetchurl { + src = fetchurl { url = http://download.blender.org/source/blender-2.45.tar.gz; sha256 = "1bi7j1fcvrpb96sjpcbm4sldf359sgskfhv7a8pgcxj0bnhp47wj"; }; phases="unpackPhase buildPhase"; - inherit (args) scons SDL freetype openal python openexr mesa; + inherit scons SDL freetype openal python openexr mesa; - buildInputs =(with args; [python scons - gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff libXi ]); + buildInputs = [python scons + gettext libjpeg libpng zlib freetype /* fmod smpeg */ freealut openal x11 mesa inputproto libtiff libXi ]; # patch SConstruct so that we can pass on additional include. Either blender # or openEXR is broken. I think OpenEXR should use include "" isntead of <> to diff --git a/pkgs/applications/misc/d4x/default.nix b/pkgs/applications/misc/d4x/default.nix index 5a20893e9f3c..f4ad3cc8421a 100644 --- a/pkgs/applications/misc/d4x/default.nix +++ b/pkgs/applications/misc/d4x/default.nix @@ -1,10 +1,10 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "d4x-2.5.7.1"; - inherit (args) boost; + inherit boost; - src = args.fetchurl { + src = fetchurl { url = http://d4x.krasu.ru/files/d4x-2.5.7.1.tar.bz2; sha256 = "1i1jj02bxynisqapv31481sz9jpfp3f023ky47spz1v1wlwbs13m"; }; @@ -12,7 +12,7 @@ args.stdenv.mkDerivation { configurePhase = "./configure --prefix=\$out " + " --with-boost-libdir=\$boost/lib" + " --with-boost-includedir=\$boost/include"; - buildInputs =(with args; [gtk glib pkgconfig openssl boost]); + buildInputs = [gtk glib pkgconfig openssl boost]; meta = { description = "graphical download manager"; diff --git a/pkgs/applications/misc/flite/default.nix b/pkgs/applications/misc/flite/default.nix index 291cce6c1f9e..ad3b9df164d4 100644 --- a/pkgs/applications/misc/flite/default.nix +++ b/pkgs/applications/misc/flite/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "flite-1.3-release"; - src = args.fetchurl { + src = fetchurl { url = http://www.speech.cs.cmu.edu/flite/packed/flite-1.3/flite-1.3-release.tar.gz; sha256 = "12wanxx57bbqgkag54dlqzv6h2kr9053p0z8mkxs0mqy03vja8lj"; }; @@ -18,8 +18,6 @@ args.stdenv.mkDerivation { cp -r bin \$out "; - buildInputs = (with args; []); - meta = { description = "Flite text to speech engine"; homepage = http://www.speech.cs.cmu.edu/flite/download.html; diff --git a/pkgs/applications/misc/freemind/default.nix b/pkgs/applications/misc/freemind/default.nix index 79b00204fd40..b7bc3f3c8dd7 100644 --- a/pkgs/applications/misc/freemind/default.nix +++ b/pkgs/applications/misc/freemind/default.nix @@ -1,15 +1,15 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "freemind-0.9.0_Beta_13"; - src = args.fetchurl { + src = fetchurl { url = http://downloads.sourceforge.net/freemind/freemind-src-0.9.0_Beta_13_icon_butterfly.tar.gz; sha256 = "00389bhg73qknydrq0f3bskb5lyrdg2p58mnnp19wdvzzmfbic4w"; }; - buildInputs =(with args; [jdk ant]); + buildInputs = [jdk ant]; - inherit (args) jre; + inherit jre; phases="buildPhase installPhase"; diff --git a/pkgs/applications/misc/mrxvt/default.nix b/pkgs/applications/misc/mrxvt/default.nix index aaabef2b6b8c..f58fff56bc08 100644 --- a/pkgs/applications/misc/mrxvt/default.nix +++ b/pkgs/applications/misc/mrxvt/default.nix @@ -10,11 +10,11 @@ let }; }; -in args.stdenv.mkDerivation { +in stdenv.mkDerivation { inherit (co) buildInputs configureFlags; - src = args.fetchurl { + src = fetchurl { url = mirror://sourceforge/materm/mrxvt-0.5.3.tar.gz; sha256 = "04flnn58hp4qvvk6jzyipsj13v1qyrjabgbw5laz5cqxvxzpncp2"; }; diff --git a/pkgs/applications/misc/pgadmin/default.nix b/pkgs/applications/misc/pgadmin/default.nix index a02ee299ef02..a1b9874981e4 100644 --- a/pkgs/applications/misc/pgadmin/default.nix +++ b/pkgs/applications/misc/pgadmin/default.nix @@ -1,14 +1,14 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "pgadmin3-1.8.1"; - src = args.fetchurl { + src = fetchurl { name = "pgadmin3-v1.8.1.tar.gz"; url = "http://ftp3.de.postgresql.org/pub/Mirrors/ftp.postgresql.org//pgadmin3/release/v1.8.1/src/pgadmin3-1.8.1.tar.gz"; sha256 = "1vnpbgb2ksvcgbzab4jjspwvs5cvam53azinfavjad4kpjczdywb"; }; - buildInputs =(with args; [postgresql wxGTK libxml2 libxslt openssl]); + buildInputs = [postgresql wxGTK libxml2 libxslt openssl]; meta = { description = "postgresql admin gui tool"; diff --git a/pkgs/applications/misc/pstree/default.nix b/pkgs/applications/misc/pstree/default.nix index c59148e854e4..c26876f2fcb4 100644 --- a/pkgs/applications/misc/pstree/default.nix +++ b/pkgs/applications/misc/pstree/default.nix @@ -1,14 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "pstree-2.31"; - src = args.fetchurl { + src = fetchurl { url = http://fresh.t-systems-sfr.com/unix/src/misc/pstree-2.31.tar.gz; sha256 = "1zzz29gsyra8csk54cyq0pcdxxg3l4gmksq8q1skv2z84g2yxdhh"; }; unpackPhase="unpackFile \$src; sourceRoot=."; - #buildInputs =(with args; []); buildPhase="pwd; gcc -o pstree pstree.c"; installPhase="ensureDir \$out/bin; cp pstree \$out/bin"; diff --git a/pkgs/applications/misc/rxvt/default.nix b/pkgs/applications/misc/rxvt/default.nix index c875e55a8cb0..58366c6aa048 100644 --- a/pkgs/applications/misc/rxvt/default.nix +++ b/pkgs/applications/misc/rxvt/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "rxvt-2.6.4"; - src = args.fetchurl { + src = fetchurl { url = http://downloads.sourceforge.net/rxvt/rxvt-2.6.4.tar.gz; sha256 = "0hi29whjv8v11nkjbq1i6ms411v6csykghmlpkmayfjn9nxr02xg"; }; - buildInputs =(with args; [ libX11 libXt ]); + buildInputs = [ libX11 libXt ]; meta = { description = "colour vt102 terminal emulator with less features and lower memory consumption"; diff --git a/pkgs/applications/misc/sbagen/default.nix b/pkgs/applications/misc/sbagen/default.nix index d78742bfc5b9..6bf28580b350 100644 --- a/pkgs/applications/misc/sbagen/default.nix +++ b/pkgs/applications/misc/sbagen/default.nix @@ -1,5 +1,5 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "sbagen-1.4.4"; buildPhases="buildPhase installPhase"; @@ -14,7 +14,7 @@ args.stdenv.mkDerivation { "; - src = args.fetchurl { + src = fetchurl { url = http://uazu.net/sbagen/sbagen-1.4.4.tgz; sha256 = "0w62yk1b0hq79kl0angma897yqa8p1ww0dwydf3zlwav333prkd2"; }; diff --git a/pkgs/applications/misc/synergy/default.nix b/pkgs/applications/misc/synergy/default.nix index 7872c6abaaf7..be0c449abc76 100644 --- a/pkgs/applications/misc/synergy/default.nix +++ b/pkgs/applications/misc/synergy/default.nix @@ -1,15 +1,15 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "synergy-cvs"; - src = args.fetchcvs { + src = fetchcvs { url = ":pserver:anonymous@synergy2.cvs.sourceforge.net:/cvsroot/synergy2"; module = "synergy"; date = "NOW"; sha256 = "ef8e2ebfda6e43240051a7af9417092b2af50ece8b5c6c3fbd908ba91c4fe068"; }; - buildInputs =(with args; [x11 xextproto libXtst inputproto]); + buildInputs = [x11 xextproto libXtst inputproto]; meta= { description = "share mouse keyboard and clipboard between computers"; diff --git a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix index bbdd265f7dab..2763969ddecc 100644 --- a/pkgs/applications/networking/instant-messengers/teamspeak/client.nix +++ b/pkgs/applications/networking/instant-messengers/teamspeak/client.nix @@ -33,18 +33,18 @@ Sincerly Marc Weber (small nix contributor) */ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "teamspeak-client-rc2-2032"; - src = args.fetchurl { + src = fetchurl { url = ftp://213.202.254.114/teamspeak/releases/ts2_client_rc2_2032.tar.bz2; md5 = "e93d17a25e07b1cbe400e4eb028ca8f8"; }; phases="installPhase"; - rpathInputs = (with args; [ glibc x11 ] ); + rpathInputs = [ glibc x11 ]; installPhase=" set -x diff --git a/pkgs/applications/networking/msmtp/default.nix b/pkgs/applications/networking/msmtp/default.nix index 523620a403e0..67839833c319 100644 --- a/pkgs/applications/networking/msmtp/default.nix +++ b/pkgs/applications/networking/msmtp/default.nix @@ -1,14 +1,12 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "msmtp-1.4.13"; - src = args.fetchurl { + src = fetchurl { url = http://dfn.dl.sourceforge.net/sourceforge/msmtp/msmtp-1.4.13.tar.bz2; sha256 = "1x8q8dhcpnjym3icz6070l13hz98fvdvgc5j5psj4pmxbswx0r4p"; }; - buildInputs =(with args; []); - meta = { description = "a MUA"; homepage = http://msmtp.sourceforge.net/; diff --git a/pkgs/applications/networking/skype/default.nix b/pkgs/applications/networking/skype/default.nix index 443c92527f2e..285cba82a3fe 100644 --- a/pkgs/applications/networking/skype/default.nix +++ b/pkgs/applications/networking/skype/default.nix @@ -1,16 +1,16 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "skype-1.4"; - src = args.fetchurl { + src = fetchurl { url = http://www.skype.com/go/getskype-linux-static; sha256 = "0k71byzaipmw8lb92aad4qyh9rk0fnn3za74v1h268h09gkkd8mz"; name = "skype_static-1.4.0.99.tar.bz2"; }; - buildInputs =(with args; [alsaLib glibc libSM libICE libXi libXrender libXrandr libXfixes + buildInputs = [alsaLib glibc libSM libICE libXi libXrender libXrandr libXfixes libXcursor libXinerama freetype fontconfig libXext libX11 - fontconfig libXinerama libsigcxx gcc41.gcc ]); + fontconfig libXinerama libsigcxx gcc41.gcc ]; phases = "installPhase"; installPhase =" diff --git a/pkgs/applications/video/kino/default.nix b/pkgs/applications/video/kino/default.nix index 8e501f40cc0e..cac769d60de3 100644 --- a/pkgs/applications/video/kino/default.nix +++ b/pkgs/applications/video/kino/default.nix @@ -51,19 +51,19 @@ #AMR-WB IF2 support no -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "kino-1.2.0"; phases = "unpackPhase configurePhase buildPhase installPhase"; - src = args.fetchurl { + src = fetchurl { url = http://downloads.sourceforge.net/kino/kino-1.2.0.tar.gz; sha256 = "15q1qmii5a2zbrrrg8iba2d1rjzaisa75zvxjhrs86jwglpn4lp9"; }; - buildInputs =(with args; [ gtk libglade libxml2 libraw1394 libsamplerate libdv - pkgconfig perl perlXMLParser libavc1394 libiec61883 x11 libXv gettext libX11 glib cairo ]); # TODOoptional packages + buildInputs = [ gtk libglade libxml2 libraw1394 libsamplerate libdv + pkgconfig perl perlXMLParser libavc1394 libiec61883 x11 libXv gettext libX11 glib cairo ]; # TODOoptional packages #preConfigure = " # grep 11 env-vars diff --git a/pkgs/development/compilers/fpc/binary.nix b/pkgs/development/compilers/fpc/binary.nix index b76441e38d68..99725b501c08 100644 --- a/pkgs/development/compilers/fpc/binary.nix +++ b/pkgs/development/compilers/fpc/binary.nix @@ -1,9 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "fpc-2.0.4-binary"; - src = args. - fetchurl { + src = fetchurl { url = ftp://ftp.chg.ru/pub/lang/pascal/fpc/dist/i386-linux-2.0.4/fpc-2.0.4.i386-linux.tar; sha256 = "0b2szv2anbf58h4i5mlph93afv9qdx6i0jqggba04d3anjbl9gfy"; }; diff --git a/pkgs/development/compilers/fpc/default.nix b/pkgs/development/compilers/fpc/default.nix index 5da4f65aea7d..0d2f1fb525d7 100644 --- a/pkgs/development/compilers/fpc/default.nix +++ b/pkgs/development/compilers/fpc/default.nix @@ -1,16 +1,16 @@ args: if ((args ? startFPC) && (args.startFPC != null)) then -args.stdenv.mkDerivation { +with args; +stdenv.mkDerivation { name = "fpc-2.2.0"; - src = args. - fetchurl { + src = fetchurl { url = ftp://freepascal.stack.nl/pub/fpc/dist/source-2.2.0/fpcbuild-2.2.0.tar.gz; sha256 = "0pvsdmimknkgy8jgdz9kd7w5bs9fy5ynrgswpk0ib6x0y26zxijm"; }; - buildInputs = [args.startFPC args.gawk]; + buildInputs = [startFPC gawk]; installFlags = "INSTALL_PREFIX=\${out}"; postInstall = "ln -fs $out/lib/fpc/*/ppc386 $out/bin; diff --git a/pkgs/development/libraries/SDL_image/default.nix b/pkgs/development/libraries/SDL_image/default.nix index 93e1cc31f443..4dd7d3679b84 100644 --- a/pkgs/development/libraries/SDL_image/default.nix +++ b/pkgs/development/libraries/SDL_image/default.nix @@ -1,14 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "SDL_image-1.2.6"; - src = args. - fetchurl { + src = fetchurl { url = http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.6.tar.gz; sha256 = "1i3f72dw3i3l6d77dk81gw57sp0629rng9k76qb37brlz7dv3z48"; }; - buildInputs =(with args; [SDL libpng libjpeg libtiff libungif libXpm]); + buildInputs = [SDL libpng libjpeg libtiff libungif libXpm]; postInstall = "ln -s \${out}/include/SDL/SDL_image.h \${out}/include/"; diff --git a/pkgs/development/libraries/SDL_ttf/default.nix b/pkgs/development/libraries/SDL_ttf/default.nix index 77b95d02cc33..c7a356adc613 100644 --- a/pkgs/development/libraries/SDL_ttf/default.nix +++ b/pkgs/development/libraries/SDL_ttf/default.nix @@ -1,14 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "SDL_image-1.2.6"; - src = args. - fetchurl { + src = fetchurl { url = http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.9.tar.gz; sha256 = "0ls6anmlmwrmy21p3y9nfyl6fkwz4jpgh74kw7xd0hwbg5v8h95l"; }; - buildInputs =(with args; [SDL freetype]); + buildInputs = [SDL freetype]; postInstall = "ln -s \${out}/include/SDL/SDL_ttf.h \${out}/include/"; diff --git a/pkgs/development/libraries/ctl/default.nix b/pkgs/development/libraries/ctl/default.nix index c6a6cee0ca67..6e1c212703c6 100644 --- a/pkgs/development/libraries/ctl/default.nix +++ b/pkgs/development/libraries/ctl/default.nix @@ -1,16 +1,16 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "ctl-1.4.1"; - src = args.fetchurl { + src = fetchurl { url = http://surfnet.dl.sourceforge.net/sourceforge/ampasctl/ctl-1.4.1.tar.gz; sha256 = "16lzgbpxdyhykdwndj1i9vx3h4bfkxqqcrvasvgg70gb5raxj0mj"; }; - propagatedBuildInputs = (with args; [ilmbase]); - configureFlags="--with-ilmbase-prefix=${args.ilmbase}"; + propagatedBuildInputs = [ilmbase]; + configureFlags="--with-ilmbase-prefix=${ilmbase}"; #configurePhase = " - #export CXXFLAGS=\"-I${args.ilmbase}/include -L${args.ilmbase}/lib\" + #export CXXFLAGS=\"-I${ilmbase}/include -L${ilmbase}/lib\" #echo $CXXFLAGS #unset configurePhase; configurePhase #"; diff --git a/pkgs/development/libraries/glew/default.nix b/pkgs/development/libraries/glew/default.nix index 2af500b3db6c..82925d144b5b 100644 --- a/pkgs/development/libraries/glew/default.nix +++ b/pkgs/development/libraries/glew/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "glew-1.5.0"; - src = args.fetchurl { + src = fetchurl { url = http://dfn.dl.sourceforge.net/sourceforge/glew/glew-1.5.0-src.tgz; sha256 = "1kjr1fchnl785wsg11vzc03q3pm12lh20n1i593zr1xqfjgx2b4h"; }; - buildInputs =(with args; [mesa x11 libXmu libXi]); + buildInputs = [mesa x11 libXmu libXi]; meta = { description = "cross-platform open-source C/C++ extension loading library"; diff --git a/pkgs/development/libraries/gsl/default.nix b/pkgs/development/libraries/gsl/default.nix index a5248d422996..19655f97b0d4 100644 --- a/pkgs/development/libraries/gsl/default.nix +++ b/pkgs/development/libraries/gsl/default.nix @@ -1,14 +1,12 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "gsl-1.9"; - src = args.fetchurl { + src = fetchurl { url = ftp://ftp.gnu.org/gnu/gsl/gsl-1.9.tar.gz; sha256 = "0l12js65c1qf3s7gmgay6gj5nbs6635py41dj8nk3hlp95wcdlgw"; }; - buildInputs =(with args; []); - meta = { description = "numerical library (>1000 functions)"; homepage = http://www.gnu.org/software/gsl; diff --git a/pkgs/development/libraries/libavc1394/default.nix b/pkgs/development/libraries/libavc1394/default.nix index 3d1d63780c23..0834c212fe97 100644 --- a/pkgs/development/libraries/libavc1394/default.nix +++ b/pkgs/development/libraries/libavc1394/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "libavc1394-0.5.3"; - src = args.fetchurl { + src = fetchurl { url = mirror://sourceforge/libavc1394/libavc1394-0.5.3.tar.gz; sha256 = "19i40i3722ilhziknfds3a6w5xzv66fvc68gvbir1p2fvwi6ij93"; }; - buildInputs =(with args; [pkgconfig libraw1394]); + buildInputs = [pkgconfig libraw1394]; meta = { description = "programming interface for the 1394 Trade Association AV/C (Audio/Video Control) Digital Interface Command Set"; diff --git a/pkgs/development/libraries/libiec61883/default.nix b/pkgs/development/libraries/libiec61883/default.nix index 3f167eb81de6..c4062403d381 100644 --- a/pkgs/development/libraries/libiec61883/default.nix +++ b/pkgs/development/libraries/libiec61883/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "libiec61883-1.1.0"; - src = args.fetchurl { + src = fetchurl { url = http://www.linux1394.org/dl/libiec61883-1.1.0.tar.gz; sha256 = "09f0ca7bp6lqlz6601gnyl04mfabv0azg49n1cmjyqpzh35cgxkq"; }; - buildInputs =(with args; [pkgconfig libraw1394]); + buildInputs = [pkgconfig libraw1394]; meta = { description = "TODO"; diff --git a/pkgs/development/libraries/libraw1394/default.nix b/pkgs/development/libraries/libraw1394/default.nix index 62398404ac24..8463749fcb3f 100644 --- a/pkgs/development/libraries/libraw1394/default.nix +++ b/pkgs/development/libraries/libraw1394/default.nix @@ -1,14 +1,12 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "libraw1394-1.2.0"; - src = args.fetchurl { + src = fetchurl { url = "mirror://sourceforge/libraw1394/libraw1394-1.2.0.tar.gz"; sha256 = "1b9zqqzyz0ihyfvhn135y3wc6vmym5yz21jxj9dp0f09b96gmp0z"; }; - buildInputs =(with args; []); - meta = { description = "library providing direct access to the IEEE 1394 bus through the Linux 1394 subsystem's raw1394 user space interface"; homepage = "http://wiki.linux1394.org/"; diff --git a/pkgs/development/libraries/libwmf/default.nix b/pkgs/development/libraries/libwmf/default.nix index ea2eecd90d25..6f580613b16f 100644 --- a/pkgs/development/libraries/libwmf/default.nix +++ b/pkgs/development/libraries/libwmf/default.nix @@ -1,15 +1,14 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "libwmf-0.2.8.4"; - src = args. - fetchurl { + src = fetchurl { url = mirror://sourceforge/wvware/libwmf-0.2.8.4.tar.gz; sha256 = "1y3wba4q8pl7kr51212jwrsz1x6nslsx1gsjml1x0i8549lmqd2v"; }; - buildInputs =(with args; [zlib imagemagick libpng - pkgconfig glib freetype libjpeg libxml2]); + buildInputs = [zlib imagemagick libpng + pkgconfig glib freetype libjpeg libxml2]; meta = { description = " diff --git a/pkgs/development/libraries/openexr_ctl/default.nix b/pkgs/development/libraries/openexr_ctl/default.nix index 634a38990cb1..288067a4bf25 100644 --- a/pkgs/development/libraries/openexr_ctl/default.nix +++ b/pkgs/development/libraries/openexr_ctl/default.nix @@ -1,17 +1,17 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "openexr_ctl-1.0.1"; - src = args.fetchurl { + src = fetchurl { url = http://kent.dl.sourceforge.net/sourceforge/ampasctl/openexr_ctl-1.0.1.tar.gz; sha256 = "1jg9smpaplal8l14djp184wzk11nwd3dvm4lhkp69kjgw8jdd21d"; }; - propagatedBuildInputs = (with args; [ilmbase]); - buildInputs = ( with args; [openexr ctl]); - configureFlags="--with-ilmbase-prefix=${args.ilmbase}"; + propagatedBuildInputs = [ilmbase]; + buildInputs = [openexr ctl]; + configureFlags="--with-ilmbase-prefix=${ilmbase}"; #configurePhase = " - #export CXXFLAGS=\"-I${args.ilmbase}/include -L${args.ilmbase}/lib\" + #export CXXFLAGS=\"-I${ilmbase}/include -L${ilmbase}/lib\" #echo $CXXFLAGS #unset configurePhase; configurePhase #"; diff --git a/pkgs/development/libraries/proj.4/default.nix b/pkgs/development/libraries/proj.4/default.nix index 6449a188f2be..ffb3bed5054d 100644 --- a/pkgs/development/libraries/proj.4/default.nix +++ b/pkgs/development/libraries/proj.4/default.nix @@ -1,14 +1,12 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "proj-4.5.0"; - src = args.fetchurl { + src = fetchurl { url = ftp://ftp.remotesensing.org/proj/proj-4.5.0.tar.gz; sha256 = "1d2qz0vgp13hkfgaz7hkblhb9w2fh2blbjqz73xdinwc08cmflqv"; }; - buildInputs =(with args; []); - meta = { description = "Cartographic Projections Library"; homepage = http://proj.maptools.org; diff --git a/pkgs/development/python-modules/pil/default.nix b/pkgs/development/python-modules/pil/default.nix index 863366f1a428..d5ed9aae12a3 100644 --- a/pkgs/development/python-modules/pil/default.nix +++ b/pkgs/development/python-modules/pil/default.nix @@ -1,20 +1,20 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "python-imaging-1.1.6"; - src = args.fetchurl { + src = fetchurl { url = http://effbot.org/downloads/Imaging-1.1.6.tar.gz; sha256 = "141zidl3s9v4vfi3nsbg42iq1lc2a932gprqr1kij5hrnn53bmvx"; }; - buildInputs =(with args; [python zlib libtiff libjpeg freetype]); + buildInputs = [python zlib libtiff libjpeg freetype]; - configurePhase = (with args;" + configurePhase = " sed -e 's@FREETYPE_ROOT = None@FREETYPE_ROOT = libinclude(\"${freetype}\")@' -i setup.py sed -e 's@JPEG_ROOT = None@JPEG_ROOT = libinclude(\"${libjpeg}\")@' -i setup.py sed -e 's@TIFF_ROOT = None@TIFF_ROOT = libinclude(\"${libtiff}\")@' -i setup.py sed -e 's@ZLIB_ROOT = None@ZLIB_ROOT = libinclude(\"${zlib}\")@' -i setup.py - "); + "; buildPhase = "true"; diff --git a/pkgs/development/python-modules/pygame/default.nix b/pkgs/development/python-modules/pygame/default.nix index 0ed717479d84..cad9b17ebad2 100644 --- a/pkgs/development/python-modules/pygame/default.nix +++ b/pkgs/development/python-modules/pygame/default.nix @@ -1,22 +1,22 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "pygame-1.7"; - src = args.fetchurl { + src = fetchurl { url = http://www.pygame.org/ftp/pygame-1.7.1release.tar.gz ; sha256 = "0hl0rmgjcqj217fibwyilz7w9jpg0kh7hsa7vyzd4cgqyliskpqi"; }; - buildInputs =(with args; [python pkgconfig SDL SDL_image SDL_ttf]); + buildInputs = [python pkgconfig SDL SDL_image SDL_ttf]; - configurePhase = (with args; + configurePhase = " export LOCALBASE=/// sed -e \"/origincdirs =/a'${SDL_image}/include/SDL','${SDL_image}/include',\" -i config_unix.py sed -e \"/origlibdirs =/aoriglibdirs += '${SDL_image}/lib',\" -i config_unix.py sed -e \"/origincdirs =/a'${SDL_ttf}/include/SDL','${SDL_ttf}/include',\" -i config_unix.py sed -e \"/origlibdirs =/aoriglibdirs += '${SDL_ttf}/lib',\" -i config_unix.py - yes Y | python config.py "); + yes Y | python config.py "; buildPhase = "yes Y | python setup.py build"; diff --git a/pkgs/development/tools/misc/avrdude/default.nix b/pkgs/development/tools/misc/avrdude/default.nix index e573d0751f2c..f87d305dfb2c 100644 --- a/pkgs/development/tools/misc/avrdude/default.nix +++ b/pkgs/development/tools/misc/avrdude/default.nix @@ -12,7 +12,7 @@ let #defaultFlags = ["doc"]; }; -in args.stdenv.mkDerivation { +in stdenv.mkDerivation { # passing the flags in case a library using this want's to check them (*) .. inherit (co) /* flags */ buildInputs configureFlags; diff --git a/pkgs/development/tools/misc/uisp/default.nix b/pkgs/development/tools/misc/uisp/default.nix index c6810939dd4a..694dc940d929 100644 --- a/pkgs/development/tools/misc/uisp/default.nix +++ b/pkgs/development/tools/misc/uisp/default.nix @@ -1,16 +1,14 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "uisp-20050207"; configureFlags="--disable-dependency-tracking"; - src = args.fetchurl { + src = fetchurl { url = http://mirror.switch.ch/mirror/gentoo/distfiles/uisp-20050207.tar.gz; sha256 = "1bncxp5yxh9r1yrp04vvhfiva8livi1pwic7v8xj99q09zrwahvw"; }; - #buildInputs =(with args; []); - meta = { description = "tool for AVR microcontrollers which can interface to many hardware in-system programmers"; license = "GPL-2"; diff --git a/pkgs/development/tools/selenium/remote-control/default.nix b/pkgs/development/tools/selenium/remote-control/default.nix index e2bf63264a6d..4c55805e5c8c 100644 --- a/pkgs/development/tools/selenium/remote-control/default.nix +++ b/pkgs/development/tools/selenium/remote-control/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "selenium-rc-0.8.3-binary"; - src = args.fetchurl { + src = fetchurl { url = http://release.openqa.org/cgi-bin/selenium-remote-control-redirect.zip; sha256 = "694b46a8440011bcedc4fdc6d01fd91c8b4b4b62b7c6629ace4e745ef47f583e"; }; @@ -13,7 +13,7 @@ args.stdenv.mkDerivation { cp selenium-server-*/*.jar \$out/lib "; - buildInputs =(with args; [unzip]); + buildInputs = [unzip]; meta = { description = "test tool for web applications"; diff --git a/pkgs/games/thePenguinMachine/default.nix b/pkgs/games/thePenguinMachine/default.nix index 89f675e083d9..4ce42934b5a5 100644 --- a/pkgs/games/thePenguinMachine/default.nix +++ b/pkgs/games/thePenguinMachine/default.nix @@ -1,20 +1,19 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "thePenguinMachine"; - src = args. - fetchurl { + src = fetchurl { url = http://www.migniot.com/matrix/projects/thepenguinmachine/ThePenguinMachine.tar.gz; sha256 = "09ljks8vj75g00h3azc83yllbfsrxwmv1c9g32gylcmsshik0dqv"; }; - buildInputs =(with args; [python24 pil pygame SDL]); + buildInputs = [python24 pil pygame SDL]; - configurePhase = (with args; " + configurePhase = " sed -e \"/includes = /aincludes.append('${SDL}/include/SDL')\" -i setup.py; sed -e \"/includes = /aincludes.append('${pygame}/include/python2.4')\" -i setup.py; cat setup.py; - "); + "; buildPhase = " python setup.py build; python setup.py build_clib; @@ -22,13 +21,13 @@ args.stdenv.mkDerivation { python setup.py build_py; python setup.py build_scripts; "; - installPhase = (with args ; " + installPhase = " python setup.py install --prefix=\${out} cp -r . /tmp/tpm-build echo 'export PYTHONPATH=$PYTHONPATH:${pygame}/lib/python2.4/site-packages:${pil}/lib/python2.4/site-packages/PIL python ThePenguinMachine.py' >/tmp/tpm-build/tpm.sh; chmod a+rx /tmp/tpm-build/tpm.sh - "); + "; meta = { description = " diff --git a/pkgs/misc/gxemul/default.nix b/pkgs/misc/gxemul/default.nix index e7fdc96d32ed..e7d0c92a1c56 100644 --- a/pkgs/misc/gxemul/default.nix +++ b/pkgs/misc/gxemul/default.nix @@ -12,7 +12,7 @@ let optionals = ["libX11"]; defaultFlags = [ "demos" "doc" ]; }; -in args.stdenv.mkDerivation { +in stdenv.mkDerivation { inherit name; inherit (co) /* flags */ buildInputs configureFlags; diff --git a/pkgs/misc/maven/maven-2.nix b/pkgs/misc/maven/maven-2.nix index 9f96639689b5..be84f212e8b0 100644 --- a/pkgs/misc/maven/maven-2.nix +++ b/pkgs/misc/maven/maven-2.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "maven-2.0.8-bin"; - src = args.fetchurl { + src = fetchurl { # TODO mirrors url = http://apache.linux-mirror.org/maven/binaries/apache-maven-2.0.8-bin.tar.bz2; sha256 = "1wasvqplw7xk04j38vsq94zbrlpdg2k4348bg8730snr6zgaasai"; @@ -14,8 +14,6 @@ args.stdenv.mkDerivation { ensureDir \$out; mv * \$out "; - buildInputs =(with args; []); - meta = { description = "Java build tool"; homepage = "apache.org"; diff --git a/pkgs/misc/ntfsprogs/default.nix b/pkgs/misc/ntfsprogs/default.nix index 6e79ea61d89e..8f2e68393090 100644 --- a/pkgs/misc/ntfsprogs/default.nix +++ b/pkgs/misc/ntfsprogs/default.nix @@ -1,15 +1,13 @@ -args: +args: with args; args.stdenv.mkDerivation { name = "ntfsprogs-2.0.0"; - src = args.fetchurl { + src = fetchurl { name = "ntfsprogs-2.0.0.tar.bz2"; url = "http://garr.dl.sourceforge.net/sourceforge/linux-ntfs/ntfsprogs-2.0.0.tar.bz2"; sha256 = "ad36e19706c7303b10aa0a9bf2c2dd0309b91cd0171f1c9eb361d94a85017432"; }; - buildInputs =(with args; []); - meta = { description = "ntfs utilities"; homepage = http://sourceforge.net/projects/linux-ntfs; diff --git a/pkgs/os-specific/linux/bridge_utils/default.nix b/pkgs/os-specific/linux/bridge_utils/default.nix index 2c71f8fb0a93..66d01a7d4331 100644 --- a/pkgs/os-specific/linux/bridge_utils/default.nix +++ b/pkgs/os-specific/linux/bridge_utils/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "bridge-utils-1.2"; - src = args.fetchurl { + src = fetchurl { url = mirror://sourceforge/bridge/bridge-utils-1.2.tar.gz; sha256 = "0jg3z51c2c34byg4zi39j9g4b66js5kanjhid77hpa0jdfmryfy9"; }; - buildInputs =(with args; [autoconf automake]); + buildInputs = [autoconf automake]; preConfigure="autoreconf"; diff --git a/pkgs/os-specific/linux/kernel/acerhk/default.nix b/pkgs/os-specific/linux/kernel/acerhk/default.nix index 577d0f51027b..8fe45048d7fc 100644 --- a/pkgs/os-specific/linux/kernel/acerhk/default.nix +++ b/pkgs/os-specific/linux/kernel/acerhk/default.nix @@ -1,14 +1,14 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "acerhk_kernel_patch-0.5.35"; - kernel = args.kernel.src; - inherit (args) debug; - acerhk = args.fetchurl { + kernel = kernel.src; + inherit debug; + acerhk = fetchurl { url = http://mirror.switch.ch/mirror/gentoo/distfiles/acerhk-0.5.35.tar.bz2; sha256 = "1kg002qraa8vha2cgza3z74d9j46g180g5b44zbv64dsa9n2j4b0"; }; - buildInputs =(with args; [gnupatch]); + buildInputs = [gnupatch]; builder = ./builder.sh; diff --git a/pkgs/os-specific/linux/nfs-utils/default.nix b/pkgs/os-specific/linux/nfs-utils/default.nix index 5240bba5d14a..18278ef3c34f 100644 --- a/pkgs/os-specific/linux/nfs-utils/default.nix +++ b/pkgs/os-specific/linux/nfs-utils/default.nix @@ -1,13 +1,13 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "nfs-utils-1.1.1"; - src = args.fetchurl { + src = fetchurl { url = mirror://sourceforge/nfs/nfs-utils-1.1.1.tar.gz; sha256 = "0aa434cv7lgbrhks0rzhwxvbk2zsa17kjwxqjrrh87zrv9d2sr1x"; }; - buildInputs =(with args; [kernelHeaders tcp_wrapper]); + buildInputs = [kernelHeaders tcp_wrapper]; meta = { description = "nfs utils"; diff --git a/pkgs/os-specific/linux/radeontools/default.nix b/pkgs/os-specific/linux/radeontools/default.nix index 67d6cc4575fa..d4d39606d626 100644 --- a/pkgs/os-specific/linux/radeontools/default.nix +++ b/pkgs/os-specific/linux/radeontools/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "radeontool-1.5"; - inherit (args) pciutils; + inherit pciutils; # Don't know wether it's a good idea to hardcode the lspci path.. # But it will work on nix.. @@ -12,7 +12,7 @@ args.stdenv.mkDerivation { cd .. "; - src = args.fetchurl { + src = fetchurl { url = http://fdd.com/software/radeon/radeontool-1.5.tar.gz; sha256 = "0qbkawhhq0y0gqbbql7q04y0v0hims5c4jkjsbc1y03rf9kr10ar"; }; diff --git a/pkgs/os-specific/linux/tcp-wrapper/default.nix b/pkgs/os-specific/linux/tcp-wrapper/default.nix index 35c68a6d9a49..9c952bcabf83 100644 --- a/pkgs/os-specific/linux/tcp-wrapper/default.nix +++ b/pkgs/os-specific/linux/tcp-wrapper/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "tcp-wrappers-7.6"; - src = args.fetchurl { + src = fetchurl { url = http://ftp.debian.org/debian/pool/main/t/tcp-wrappers/tcp-wrappers_7.6.dbs.orig.tar.gz; sha256 = "0k68ziinx6biwar5lcb9jvv0rp6b3vmj6861n75bvrz4w1piwkdp"; }; @@ -20,7 +20,7 @@ args.stdenv.mkDerivation { make CFLAGS='-DSYS_ERRLIST_DEFINED=1 -Dvsyslog=1' tcpd " - buildInputs =(with args; [kernelHeaders gnused]); + buildInputs = [kernelHeaders gnused]; # meta = ... } diff --git a/pkgs/servers/irc/ircd-hybrid/default.nix b/pkgs/servers/irc/ircd-hybrid/default.nix index 3f9fd380d140..572cc28e55b3 100644 --- a/pkgs/servers/irc/ircd-hybrid/default.nix +++ b/pkgs/servers/irc/ircd-hybrid/default.nix @@ -1,17 +1,17 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "ircd-hybrid-7.2.2"; - src = args.fetchurl { + src = fetchurl { url = mirror://sourceforge/ircd-hybrid/ircd-hybrid-7.2.2.tgz; sha256 = "1xn4dfbgx019mhismfnr2idhslvarlajyahj7c6bqzmarcwwrvck"; }; - buildInputs =(with args; [openssl zlib]); + buildInputs = [openssl zlib]; - configureFlags = (with args; ["--with-nicklen=100" + configureFlags = ["--with-nicklen=100" "--with-topiclen=360" - ("--enable-openssl=" + openssl)]); + ("--enable-openssl=" + openssl)]; preInstall = "mkdir -p \${out}/ ; ln -s /home/ircd \${out}/logs;"; diff --git a/pkgs/tools/X11/xmacro/default.nix b/pkgs/tools/X11/xmacro/default.nix index c1f039a92157..4cceb720e192 100644 --- a/pkgs/tools/X11/xmacro/default.nix +++ b/pkgs/tools/X11/xmacro/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "xmacro"; - src = args.fetchurl { + src = fetchurl { url = mirror://sourceforge/xmacro/xmacro-pre0.3-20000911.tar.gz; md5 = "d2956b82f3d5380e58a75ccc721fb746"; }; @@ -11,6 +11,5 @@ args.stdenv.mkDerivation { preInstall="echo -e 'install:\n mkdir \${out}/bin;\n cp xmacrorec xmacrorec2 xmacroplay \${out}/bin;' >>Makefile; "; - buildInputs = (with args; - [libX11 libXtst xextproto libXi inputproto]); + buildInputs = [libX11 libXtst xextproto libXi inputproto]; } diff --git a/pkgs/tools/backup/rdiff-backup/default.nix b/pkgs/tools/backup/rdiff-backup/default.nix index 43fd17a61782..8cd660adc8c6 100644 --- a/pkgs/tools/backup/rdiff-backup/default.nix +++ b/pkgs/tools/backup/rdiff-backup/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "rdiff-backup-1.1.14"; - src = args.fetchurl { + src = fetchurl { url = http://savannah.nongnu.org/download/rdiff-backup/rdiff-backup-1.1.14.tar.gz; sha256 = "0sh2kz90z47yfa9786dyn3q9ba1xcmjvd65rykvm7mg5apnrg27h"; }; @@ -14,7 +14,7 @@ args.stdenv.mkDerivation { "; - buildInputs = (with args; [python librsync gnused ]); + buildInputs = [python librsync gnused ]; meta = { description = "backup system trying to combine best a mirror and an incremental backup system"; diff --git a/pkgs/tools/hddtemp/default.nix b/pkgs/tools/hddtemp/default.nix index 0bb512874743..9f285a6cd519 100644 --- a/pkgs/tools/hddtemp/default.nix +++ b/pkgs/tools/hddtemp/default.nix @@ -1,12 +1,12 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "hddtemp-0.3-beta15"; - db = args.fetchurl{ + db = fetchurl{ url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp.db; sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya"; }; - src = args.fetchurl { + src = fetchurl { url = http://download.savannah.nongnu.org/releases/hddtemp/hddtemp-0.3-beta15.tar.bz2; sha256 = "0nzgg4nl8zm9023wp4dg007z6x3ir60rwbcapr9ks2al81c431b1"; }; @@ -17,8 +17,6 @@ args.stdenv.mkDerivation { ./configure --prefix=\$out --with-db-path=\$out/nix-support/hddtemp.db "; - buildInputs =(with args; []); - meta = { description = "shows the harddisk temperature"; homepage = https://savannah.nongnu.org/projects/hddtemp/; diff --git a/pkgs/tools/misc/shebangfix/default.nix b/pkgs/tools/misc/shebangfix/default.nix index 94ecc1e00f7b..f5ed86e99f7d 100644 --- a/pkgs/tools/misc/shebangfix/default.nix +++ b/pkgs/tools/misc/shebangfix/default.nix @@ -1,8 +1,8 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "shebangfix-0.0"; - buildInputs = [args.perl]; + buildInputs = [perl]; file = ./shebangfix.pl; diff --git a/pkgs/tools/misc/wv/default.nix b/pkgs/tools/misc/wv/default.nix index 1bf88edef2a6..9fe71248e8d3 100644 --- a/pkgs/tools/misc/wv/default.nix +++ b/pkgs/tools/misc/wv/default.nix @@ -1,15 +1,14 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "wv-1.2.4"; - src = args. - fetchurl { + src = fetchurl { url = mirror://sourceforge/wvware/wv-1.2.4.tar.gz; sha256 = "1mn2ax6qjy3pvixlnvbkn6ymy6y4l2wxrr4brjaczm121s8hjcb7"; }; - buildInputs =(with args; [zlib imagemagick libpng glib - pkgconfig libgsf libxml2 bzip2]); + buildInputs = [zlib imagemagick libpng glib + pkgconfig libgsf libxml2 bzip2]; meta = { description = " diff --git a/pkgs/tools/misc/xclip/default.nix b/pkgs/tools/misc/xclip/default.nix index 305e38da464c..fbf148721cab 100644 --- a/pkgs/tools/misc/xclip/default.nix +++ b/pkgs/tools/misc/xclip/default.nix @@ -1,15 +1,15 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "xclip-0.08"; - src = args.fetchurl { + src = fetchurl { url = http://people.debian.org/~kims/xclip/xclip-0.08.tar.gz; sha256 = "0py6ijw7ln892gzxxm2w47nn97nb6psb8g6clkpz86gg706yjxpf"; }; patchPhase = "sed -i s=/usr/X11R6/bin=/bin= Makefile"; - buildInputs =(with args; [x11 libXmu]); + buildInputs = [x11 libXmu]; installPhase="make install DESTDIR=\$out"; diff --git a/pkgs/tools/networking/dnsmasq/default.nix b/pkgs/tools/networking/dnsmasq/default.nix index 7b3cd59ba6c8..b50cdeadfa39 100644 --- a/pkgs/tools/networking/dnsmasq/default.nix +++ b/pkgs/tools/networking/dnsmasq/default.nix @@ -1,16 +1,14 @@ -args: -args.stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "dnsmasq-2.40"; - src = args.fetchurl { + src = fetchurl { url = http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.40.tar.gz; sha256 = "1q346l403rvvmvr14fk2l201p8fl3p5417vkp95zlx00jdb7hl8n"; }; installPhase = "ensureDir \$out; make DESTDIR=\$out PREFIX=ôônstall"; - buildInputs =(with args; []); - meta = { description = "DNS forwarder and DHCP server"; homepage = http://www.thekelleys.org.uk/dnsmasq/doc.html; From 21bfc11e8ce731c94f114a8cd8ecb1a210ddc32b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:41:13 +0000 Subject: [PATCH 190/320] lyx added svn path=/nixpkgs/branches/stdenv-updates/; revision=10430 --- pkgs/applications/misc/lyx/default.nix | 18 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 23 insertions(+) create mode 100644 pkgs/applications/misc/lyx/default.nix diff --git a/pkgs/applications/misc/lyx/default.nix b/pkgs/applications/misc/lyx/default.nix new file mode 100644 index 000000000000..246b8caa3ca0 --- /dev/null +++ b/pkgs/applications/misc/lyx/default.nix @@ -0,0 +1,18 @@ +# I haven't put much effort into this expressions .. so some optional depencencies may be missing - Marc +args: +args.stdenv.mkDerivation { + name = "lyx-1.5.3"; + + src = args.fetchurl { + url = http://lyx.cybermirror.org/stable/lyx-1.5.3.tar.bz2; + sha256 = "1q0xlhrvj87iw9rk9z2vfka4jw5pw7n5fsmmiyzram9y4hghavav"; + }; + + buildInputs =(with args; [tetex qt python]); + + meta = { + description = "WYSIWYM frontend for LaTeX, DocBook, etc."; + homepage = "http://www.lyx.org"; + license = "GPL2"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ed220b5b5213..251c7171f184 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4343,6 +4343,11 @@ rec { inherit fetchurl stdenv ncurses openssl; }; + lyx = import ../applications/misc/lyx { + inherit fetchurl stdenv tetex python; + qt = qt4; + }; + maxima = import ../applications/misc/maxima { inherit fetchurl stdenv clisp; }; From 98a81beaacb07b63b2ae54d9c63c563b6f6b5066 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:41:45 +0000 Subject: [PATCH 191/320] meta.homepage added to several packages svn path=/nixpkgs/branches/stdenv-updates/; revision=10431 --- pkgs/applications/audio/audacity/default.nix | 5 ++--- pkgs/applications/audio/cdparanoia/default.nix | 4 ++++ pkgs/applications/audio/flac/default.nix | 3 +++ pkgs/applications/audio/lame/default.nix | 2 +- pkgs/applications/audio/snd/default.nix | 5 ++--- pkgs/applications/audio/xmms/default.nix | 1 + .../applications/display-managers/slim/default.nix | 4 ++++ pkgs/applications/editors/joe/default.nix | 14 +++++++++----- pkgs/applications/editors/nano/default.nix | 4 ++++ pkgs/applications/editors/nedit/default.nix | 4 ++++ pkgs/applications/editors/vim-diet/default.nix | 4 ++++ pkgs/applications/editors/vim/default.nix | 1 + pkgs/applications/graphics/ImageMagick/default.nix | 7 +++++-- .../applications/graphics/PythonMagick/default.nix | 3 +++ pkgs/applications/graphics/dia/default.nix | 1 + pkgs/applications/graphics/f-spot/default.nix | 4 ++++ pkgs/applications/graphics/gqview/default.nix | 1 + pkgs/applications/graphics/inkscape/default.nix | 4 ++++ pkgs/applications/graphics/xfig/default.nix | 1 + pkgs/applications/jedit/default.nix | 4 ++-- pkgs/applications/misc/acrobat-reader/default.nix | 4 ++++ pkgs/applications/misc/bluez-firmware/default.nix | 4 ++++ pkgs/applications/misc/bluez-utils/default.nix | 4 ++++ pkgs/applications/misc/djvulibre/default.nix | 1 + pkgs/applications/misc/fetchmail/default.nix | 9 ++++++++- .../applications/misc/fetchmail/security-fix.patch | 11 +++++++++++ pkgs/applications/misc/gphoto2/default.nix | 4 ++++ pkgs/applications/misc/gv/default.nix | 4 ++++ pkgs/applications/misc/hello/ex-1/default.nix | 1 + pkgs/applications/misc/maxima/default.nix | 5 ++--- pkgs/applications/misc/pgadmin/default.nix | 2 +- pkgs/applications/misc/procmail/default.nix | 3 ++- pkgs/applications/misc/rxvt_unicode/default.nix | 3 ++- pkgs/applications/misc/synergy/default.nix | 2 +- pkgs/applications/misc/xchm/default.nix | 1 + pkgs/applications/misc/xterm/default.nix | 4 ++++ .../networking/browsers/firefox3b1/default.nix | 1 + .../networking/browsers/mozilla/default.nix | 3 +++ .../networking/browsers/opera/default.nix | 4 ++++ .../networking/browsers/w3m/default.nix | 4 ++++ .../networking/instant-messengers/amsn/default.nix | 4 ++++ .../pidgin-plugins/otr/default.nix | 1 + .../pidgin-plugins/pidgin-latex/default.nix | 1 + .../instant-messengers/pidgin/default.nix | 1 + pkgs/applications/networking/irc/irssi/default.nix | 4 ++++ pkgs/applications/networking/irc/xchat/default.nix | 4 ++++ .../networking/mailreaders/mutt/default.nix | 4 ++++ 47 files changed, 145 insertions(+), 24 deletions(-) create mode 100644 pkgs/applications/misc/fetchmail/security-fix.patch diff --git a/pkgs/applications/audio/audacity/default.nix b/pkgs/applications/audio/audacity/default.nix index 3eaf1ed3ee08..159c99c49990 100644 --- a/pkgs/applications/audio/audacity/default.nix +++ b/pkgs/applications/audio/audacity/default.nix @@ -29,8 +29,7 @@ stdenv.mkDerivation { (textClosure localDefs [addInputs (doDump "0") (noDepEntry "echo \$PATH; ar --version") doConfigure preBuild doMakeInstall postInstall doForceShare]); meta = { - description = " - Audacity sound editor. -"; + description = "Audacity sound editor."; + homepage = http://audacity.sourceforge.net; }; } diff --git a/pkgs/applications/audio/cdparanoia/default.nix b/pkgs/applications/audio/cdparanoia/default.nix index e8d317726117..6fa69beee20e 100644 --- a/pkgs/applications/audio/cdparanoia/default.nix +++ b/pkgs/applications/audio/cdparanoia/default.nix @@ -8,4 +8,8 @@ stdenv.mkDerivation { }; patches = [./fix.patch]; + + meta = { + homepage = http://xiph.org/paranoia; + }; } diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix index b1636855aae9..6095e59fa07a 100644 --- a/pkgs/applications/audio/flac/default.nix +++ b/pkgs/applications/audio/flac/default.nix @@ -7,6 +7,9 @@ let url = "http://downloads.xiph.org/releases/flac/${name}.tar.gz"; } // hash); buildInputs = [libogg]; + meta = { + homepage = http://flac.sourceforge.net; + }; }; in stdenv.lib.listOfListsToAttrs [ diff --git a/pkgs/applications/audio/lame/default.nix b/pkgs/applications/audio/lame/default.nix index fa0fa679079a..4a97b25cd60c 100644 --- a/pkgs/applications/audio/lame/default.nix +++ b/pkgs/applications/audio/lame/default.nix @@ -4,6 +4,6 @@ stdenv.mkDerivation { name = "lame-3.97"; src = fetchurl { url = mirror://sourceforge/lame/lame-3.97.tar.gz ; - sha256 = "05xy9lv6m9s013lzlvhxwvr1586c239xaiiwka52k18hs6k388qa"; + sha256 = "05xy9lv6m9s013lzlvhxwvr1586c239xaiiwka52k18hs6k388qa"; }; } diff --git a/pkgs/applications/audio/snd/default.nix b/pkgs/applications/audio/snd/default.nix index 961d82fb8893..38bebb12fd3b 100644 --- a/pkgs/applications/audio/snd/default.nix +++ b/pkgs/applications/audio/snd/default.nix @@ -30,8 +30,7 @@ stdenv.mkDerivation rec { builder = writeScript (name + "-builder") (textClosure localDefs [doConfigure preBuild doMakeInstall doForceShare]); meta = { - description = " - Snd sound editor. -"; + description = "Snd sound editor."; + homepage = http://ccrma.stanford.edu/software/snd; }; } diff --git a/pkgs/applications/audio/xmms/default.nix b/pkgs/applications/audio/xmms/default.nix index bd5bb53414ec..8e2650fd7c09 100644 --- a/pkgs/applications/audio/xmms/default.nix +++ b/pkgs/applications/audio/xmms/default.nix @@ -14,5 +14,6 @@ stdenv.mkDerivation { meta = { description = "A music player very similar to Winamp"; + homepage = http://www.xmms.org; }; } diff --git a/pkgs/applications/display-managers/slim/default.nix b/pkgs/applications/display-managers/slim/default.nix index c16582fc3880..5b711111c917 100644 --- a/pkgs/applications/display-managers/slim/default.nix +++ b/pkgs/applications/display-managers/slim/default.nix @@ -20,4 +20,8 @@ stdenv.mkDerivation { substituteInPlace Makefile --replace /usr /no-such-path makeFlagsArray=(CC=gcc CXX=g++ PREFIX=$out MANDIR=$out/share/man CFGDIR=$out/etc) "; + + meta = { + homepage = http://slim.berlios.de; + }; } diff --git a/pkgs/applications/editors/joe/default.nix b/pkgs/applications/editors/joe/default.nix index 0228beb78d69..b6324e5879ce 100644 --- a/pkgs/applications/editors/joe/default.nix +++ b/pkgs/applications/editors/joe/default.nix @@ -1,9 +1,13 @@ {stdenv, fetchurl} : stdenv.mkDerivation { -name = "joe-3.3"; -src = fetchurl { - url = mirror://sourceforge/joe-editor/joe-3.3.tar.gz; - md5 = "02221716679c039c5da00c275d61dbf4"; - }; + name = "joe-3.3"; + src = fetchurl { + url = mirror://sourceforge/joe-editor/joe-3.3.tar.gz; + md5 = "02221716679c039c5da00c275d61dbf4"; + }; + + meta = { + homepage = http://joe-editor.sourceforge.net; + }; } diff --git a/pkgs/applications/editors/nano/default.nix b/pkgs/applications/editors/nano/default.nix index 28bc07141a39..a0eee03c4770 100644 --- a/pkgs/applications/editors/nano/default.nix +++ b/pkgs/applications/editors/nano/default.nix @@ -8,4 +8,8 @@ stdenv.mkDerivation { }; buildInputs = [ncurses gettext]; configureFlags = "--enable-tiny"; + + meta = { + homepage = http://www.nano-editor.org; + }; } diff --git a/pkgs/applications/editors/nedit/default.nix b/pkgs/applications/editors/nedit/default.nix index 345eccb0ff9d..41028601da74 100644 --- a/pkgs/applications/editors/nedit/default.nix +++ b/pkgs/applications/editors/nedit/default.nix @@ -16,4 +16,8 @@ stdenv.mkDerivation { buildInputs = [x11 motif libXpm]; buildFlags = if stdenv.system == "i686-linux" then "linux" else ""; + + meta = { + homepage = http://www.nedit.org; + }; } diff --git a/pkgs/applications/editors/vim-diet/default.nix b/pkgs/applications/editors/vim-diet/default.nix index 76c022896fe9..7e56d902282c 100644 --- a/pkgs/applications/editors/vim-diet/default.nix +++ b/pkgs/applications/editors/vim-diet/default.nix @@ -12,4 +12,8 @@ stdenv.mkDerivation { buildInputs = [ncurses]; NIX_CFLAGS_COMPILE="-D_BSD_SOURCE=1"; + + meta = { + homepage = http://www.vim.org; + }; } diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix index 5a524d6dabef..6839f337b6a4 100644 --- a/pkgs/applications/editors/vim/default.nix +++ b/pkgs/applications/editors/vim/default.nix @@ -57,5 +57,6 @@ args.stdenv.mkDerivation { meta = { description = "The most popular clone of the VI editor"; + homepage = http://www.vim.org; }; } diff --git a/pkgs/applications/graphics/ImageMagick/default.nix b/pkgs/applications/graphics/ImageMagick/default.nix index 1795d29e7fb0..99df6bfe975b 100644 --- a/pkgs/applications/graphics/ImageMagick/default.nix +++ b/pkgs/applications/graphics/ImageMagick/default.nix @@ -14,8 +14,11 @@ args: with args; buildInputs = [bzip2 freetype ghostscript graphviz libjpeg libpng libtiff libX11 libxml2 zlib libtool] ++ (if args ? tetex then [args.tetex] else []) - ++ (if args ? librsvg then [args.librsvg] else []) - ; + ++ (if args ? librsvg then [args.librsvg] else []); + + meta = { + homepage = http://www.imagemagick.org; + }; } // (if args ? tetex then { preConfigure = " export DVIDecodeDelegate=${args.tetex}/bin/dvips diff --git a/pkgs/applications/graphics/PythonMagick/default.nix b/pkgs/applications/graphics/PythonMagick/default.nix index 9096de6baa19..3e01dc7b2dbe 100644 --- a/pkgs/applications/graphics/PythonMagick/default.nix +++ b/pkgs/applications/graphics/PythonMagick/default.nix @@ -10,4 +10,7 @@ stdenv.mkDerivation { buildInputs = [python boost pkgconfig imagemagick]; + meta = { + homepage = http://www.imagemagick.org/script/api.php; + }; } diff --git a/pkgs/applications/graphics/dia/default.nix b/pkgs/applications/graphics/dia/default.nix index 606d58865b88..92bc477036a1 100644 --- a/pkgs/applications/graphics/dia/default.nix +++ b/pkgs/applications/graphics/dia/default.nix @@ -11,5 +11,6 @@ stdenv.mkDerivation { meta = { description = "Gnome Diagram drawing software."; + homepage = http://www.gnome.org/projects/dia; }; } diff --git a/pkgs/applications/graphics/f-spot/default.nix b/pkgs/applications/graphics/f-spot/default.nix index 0da1d4fe473b..40329412449b 100644 --- a/pkgs/applications/graphics/f-spot/default.nix +++ b/pkgs/applications/graphics/f-spot/default.nix @@ -23,4 +23,8 @@ stdenv.mkDerivation { ]; inherit monoDLLFixer gtksharp sqlite libgnomeui; + + meta = { + homepage = http://f-spot.org; + }; } diff --git a/pkgs/applications/graphics/gqview/default.nix b/pkgs/applications/graphics/gqview/default.nix index 292c3b29bddc..a8132e30c724 100644 --- a/pkgs/applications/graphics/gqview/default.nix +++ b/pkgs/applications/graphics/gqview/default.nix @@ -17,5 +17,6 @@ stdenv.mkDerivation { meta = { description = "A fast image viewer"; + homepage = http://gqview.sourceforge.net; }; } diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix index d09263576e55..dfed92f691eb 100644 --- a/pkgs/applications/graphics/inkscape/default.nix +++ b/pkgs/applications/graphics/inkscape/default.nix @@ -33,4 +33,8 @@ stdenv.mkDerivation { boost gettext ]; + + meta = { + homepage = http://www.inkscape.org; + }; } diff --git a/pkgs/applications/graphics/xfig/default.nix b/pkgs/applications/graphics/xfig/default.nix index 49de840e2dcb..9b0d009e4170 100644 --- a/pkgs/applications/graphics/xfig/default.nix +++ b/pkgs/applications/graphics/xfig/default.nix @@ -17,5 +17,6 @@ stdenv.mkDerivation { meta = { description = "An interactive drawing tool for X11"; + homepage = http://xfig.org; }; } diff --git a/pkgs/applications/jedit/default.nix b/pkgs/applications/jedit/default.nix index aaf558ace091..c43b7f869146 100644 --- a/pkgs/applications/jedit/default.nix +++ b/pkgs/applications/jedit/default.nix @@ -3,7 +3,7 @@ stdenv.mkDerivation { name = "jedit-4.2"; src = fetchurl { - url = http://kent.dl.sourceforge.net/sourceforge/jedit/jedit42source.tar.gz; + url = mirror://sf/jedit/jedit42source.tar.gz; sha256 = "1ckqghsw2r30kfkqfgjl4k47gdwpz8c1h85haw0y0ymq4rqh798j"; }; @@ -22,7 +22,7 @@ stdenv.mkDerivation { meta = { description = "really nice programmers editor written in Java. Give it a try"; - homepage = http://sourceforge.net/project/showfiles.php?group_id=588; + homepage = http://www.jedit.org; license = "GPL"; }; } diff --git a/pkgs/applications/misc/acrobat-reader/default.nix b/pkgs/applications/misc/acrobat-reader/default.nix index 1cbdd09bc58e..3c2e5bafeb23 100644 --- a/pkgs/applications/misc/acrobat-reader/default.nix +++ b/pkgs/applications/misc/acrobat-reader/default.nix @@ -18,4 +18,8 @@ stdenv.mkDerivation { (if xineramaSupport then libXinerama else null) ]; inherit fastStart; + + meta = { + homepage = http://www.adobe.com/products/reader; + }; } diff --git a/pkgs/applications/misc/bluez-firmware/default.nix b/pkgs/applications/misc/bluez-firmware/default.nix index 91b8dbdf8f48..f38a269408dd 100644 --- a/pkgs/applications/misc/bluez-firmware/default.nix +++ b/pkgs/applications/misc/bluez-firmware/default.nix @@ -6,4 +6,8 @@ stdenv.mkDerivation { url = http://bluez.sf.net/download/bluez-firmware-1.1.tar.gz; md5 = "2f1c2d939108c865dd07bae3e819c573"; }; + + meta = { + homepage = http://www.bluez.org; + }; } diff --git a/pkgs/applications/misc/bluez-utils/default.nix b/pkgs/applications/misc/bluez-utils/default.nix index 7cf88851fc3c..06bc2b2555f3 100644 --- a/pkgs/applications/misc/bluez-utils/default.nix +++ b/pkgs/applications/misc/bluez-utils/default.nix @@ -7,4 +7,8 @@ stdenv.mkDerivation { md5 = "ae3729ab5592be06ed01b973d4b3e9fe"; }; buildInputs = [bluezLibs]; + + meta = { + homepage = http://www.bluez.org; + }; } diff --git a/pkgs/applications/misc/djvulibre/default.nix b/pkgs/applications/misc/djvulibre/default.nix index e2082088fc99..81aa12e59f65 100644 --- a/pkgs/applications/misc/djvulibre/default.nix +++ b/pkgs/applications/misc/djvulibre/default.nix @@ -15,6 +15,7 @@ stdenv.mkDerivation { DjVu libre - a library and a viewer for djvu format - compression for scanned images. "; + homepage = http://djvu.sourceforge.net; }; } diff --git a/pkgs/applications/misc/fetchmail/default.nix b/pkgs/applications/misc/fetchmail/default.nix index 95fc61668fcb..9639ff19fb06 100644 --- a/pkgs/applications/misc/fetchmail/default.nix +++ b/pkgs/applications/misc/fetchmail/default.nix @@ -1,7 +1,14 @@ -args: with args; stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name="fetchmail-6.3.8"; src = fetchurl { url = http://download.berlios.de/fetchmail/fetchmail-6.3.8.tar.bz2; sha256 = "5612f9af367f641e0efd084f44fcf1889669e711dbd8c60f6b7953e494d1b09b"; }; + + patches = [ ./security-fix.patch ]; + + meta = { + homepage = http://www.fetchmail.info; + }; } diff --git a/pkgs/applications/misc/fetchmail/security-fix.patch b/pkgs/applications/misc/fetchmail/security-fix.patch new file mode 100644 index 000000000000..4d48c7aa0556 --- /dev/null +++ b/pkgs/applications/misc/fetchmail/security-fix.patch @@ -0,0 +1,11 @@ +--- old/sink.c (revision 5118) ++++ new/sink.c (revision 5119) +@@ -262,7 +262,7 @@ + const char *md1 = "MAILER-DAEMON", *md2 = "MAILER-DAEMON@"; + + /* don't bounce in reply to undeliverable bounces */ +- if (!msg->return_path[0] || ++ if (!msg || !msg->return_path[0] || + strcmp(msg->return_path, "<>") == 0 || + strcasecmp(msg->return_path, md1) == 0 || + strncasecmp(msg->return_path, md2, strlen(md2)) == 0) diff --git a/pkgs/applications/misc/gphoto2/default.nix b/pkgs/applications/misc/gphoto2/default.nix index ef70b54384a7..e6dad337eb31 100644 --- a/pkgs/applications/misc/gphoto2/default.nix +++ b/pkgs/applications/misc/gphoto2/default.nix @@ -9,4 +9,8 @@ stdenv.mkDerivation rec { buildInputs = [pkgconfig libgphoto2 libexif popt gettext]; # There is a bug in 2.4.0 configure.ac (in their m4 macroses) patchPhase = "sed -e 's@_tmp=true@_tmp=false@' -i configure configure.ac"; + + meta = { + homepage = http://www.gphoto.org; + }; } diff --git a/pkgs/applications/misc/gv/default.nix b/pkgs/applications/misc/gv/default.nix index 2a0603e27c9b..4566761e6903 100644 --- a/pkgs/applications/misc/gv/default.nix +++ b/pkgs/applications/misc/gv/default.nix @@ -13,4 +13,8 @@ stdenv.mkDerivation { postConfigure = [ "sed 's|\\|${ghostscriptX}/bin/gs|g' -i src/*.am src/*.ad" ]; inherit ghostscriptX; + + meta = { + homepage = http://wwwthep.physik.uni-mainz.de/~plass/gv; + }; } diff --git a/pkgs/applications/misc/hello/ex-1/default.nix b/pkgs/applications/misc/hello/ex-1/default.nix index 6411e1a845ef..51b2ccb58ed3 100644 --- a/pkgs/applications/misc/hello/ex-1/default.nix +++ b/pkgs/applications/misc/hello/ex-1/default.nix @@ -11,5 +11,6 @@ stdenv.mkDerivation { meta = { description = "GNU Hello, a classic computer science tool"; + homepage = http://www.gnu.org/software/hello/; }; } diff --git a/pkgs/applications/misc/maxima/default.nix b/pkgs/applications/misc/maxima/default.nix index ad44a7b5d0fd..72770c9a918f 100644 --- a/pkgs/applications/misc/maxima/default.nix +++ b/pkgs/applications/misc/maxima/default.nix @@ -11,8 +11,7 @@ stdenv.mkDerivation { buildInputs =[clisp]; meta = { - description = " - Maxima computer algebra system -"; + description = "Maxima computer algebra system"; + homepage = http://maxima.sourceforge.net; }; } diff --git a/pkgs/applications/misc/pgadmin/default.nix b/pkgs/applications/misc/pgadmin/default.nix index a1b9874981e4..4b43f4bc48c3 100644 --- a/pkgs/applications/misc/pgadmin/default.nix +++ b/pkgs/applications/misc/pgadmin/default.nix @@ -12,7 +12,7 @@ stdenv.mkDerivation { meta = { description = "postgresql admin gui tool"; - homepage = http://www.pgadmin.org/download/; + homepage = http://www.pgadmin.org; license = "GPL2"; }; } diff --git a/pkgs/applications/misc/procmail/default.nix b/pkgs/applications/misc/procmail/default.nix index b1d54ef5fc93..50767a7dde80 100644 --- a/pkgs/applications/misc/procmail/default.nix +++ b/pkgs/applications/misc/procmail/default.nix @@ -1,4 +1,5 @@ -args: with args; stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name="procmail-3.22"; buildInputs = [stdenv.gcc.libc]; installPhase = " diff --git a/pkgs/applications/misc/rxvt_unicode/default.nix b/pkgs/applications/misc/rxvt_unicode/default.nix index c128ca11a5ad..a44530987c43 100644 --- a/pkgs/applications/misc/rxvt_unicode/default.nix +++ b/pkgs/applications/misc/rxvt_unicode/default.nix @@ -1,4 +1,5 @@ -args: with args; stdenv.mkDerivation { +args: with args; +stdenv.mkDerivation { name = "rxvt-unicode-8.9"; buildInputs = [ libX11 libXt libXft perl ]; diff --git a/pkgs/applications/misc/synergy/default.nix b/pkgs/applications/misc/synergy/default.nix index be0c449abc76..ea3fb6e7a91e 100644 --- a/pkgs/applications/misc/synergy/default.nix +++ b/pkgs/applications/misc/synergy/default.nix @@ -13,7 +13,7 @@ stdenv.mkDerivation { meta= { description = "share mouse keyboard and clipboard between computers"; - homepage = http://synergy2; + homepage = http://synergy2.sourceforge.net; license = "GPL"; }; } diff --git a/pkgs/applications/misc/xchm/default.nix b/pkgs/applications/misc/xchm/default.nix index ccd14b1f6528..d9ffe8515db1 100644 --- a/pkgs/applications/misc/xchm/default.nix +++ b/pkgs/applications/misc/xchm/default.nix @@ -10,5 +10,6 @@ stdenv.mkDerivation { meta = { description = "A viewer for Microsoft HTML Help files"; + homepage = http://xchm.sourceforge.net; }; } diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix index 97c8b42697f0..aba6a6a07a3c 100644 --- a/pkgs/applications/misc/xterm/default.nix +++ b/pkgs/applications/misc/xterm/default.nix @@ -8,5 +8,9 @@ stdenv.mkDerivation rec { }; buildInputs = [libXaw xproto libXt libX11 libSM libICE ncurses]; configureFlags = ["--enable-wide-chars"]; + + meta = { + homepage = http://invisible-island.net/xterm; + }; } diff --git a/pkgs/applications/networking/browsers/firefox3b1/default.nix b/pkgs/applications/networking/browsers/firefox3b1/default.nix index 834376bb160c..675f2935d2f9 100644 --- a/pkgs/applications/networking/browsers/firefox3b1/default.nix +++ b/pkgs/applications/networking/browsers/firefox3b1/default.nix @@ -50,6 +50,7 @@ stdenv.mkDerivation { meta = { description = "Mozilla Firefox - the browser, reloaded"; + homepage = http://www.mozilla.com/en-US/firefox/; }; passthru = {inherit gtk;}; diff --git a/pkgs/applications/networking/browsers/mozilla/default.nix b/pkgs/applications/networking/browsers/mozilla/default.nix index cb7573eb8a14..a2c667fa9684 100644 --- a/pkgs/applications/networking/browsers/mozilla/default.nix +++ b/pkgs/applications/networking/browsers/mozilla/default.nix @@ -15,4 +15,7 @@ stdenv.mkDerivation { inherit gtk; #patches = [./writable-copies.patch]; + meta = { + homepage = http://www.mozilla.org; + }; } diff --git a/pkgs/applications/networking/browsers/opera/default.nix b/pkgs/applications/networking/browsers/opera/default.nix index 7393cffe316d..2adcf92540f7 100644 --- a/pkgs/applications/networking/browsers/opera/default.nix +++ b/pkgs/applications/networking/browsers/opera/default.nix @@ -34,4 +34,8 @@ stdenv.mkDerivation rec { libPath = [glibc qt motif zlib libX11 libXt libXext libSM libICE libstdcpp5] ++ (if motif != null then [motif ] else []); + + meta = { + homepage = http://www.opera.com; + }; } diff --git a/pkgs/applications/networking/browsers/w3m/default.nix b/pkgs/applications/networking/browsers/w3m/default.nix index 640dffd0baa9..1cda828cf531 100644 --- a/pkgs/applications/networking/browsers/w3m/default.nix +++ b/pkgs/applications/networking/browsers/w3m/default.nix @@ -21,4 +21,8 @@ stdenv.mkDerivation { (if graphicsSupport then gdkpixbuf else null) ]; #patches = [./bsd.patch]; + + meta = { + homepage = http://w3m.sourceforge.net; + }; } diff --git a/pkgs/applications/networking/instant-messengers/amsn/default.nix b/pkgs/applications/networking/instant-messengers/amsn/default.nix index 0f357c16514e..330d7e9d2813 100644 --- a/pkgs/applications/networking/instant-messengers/amsn/default.nix +++ b/pkgs/applications/networking/instant-messengers/amsn/default.nix @@ -10,4 +10,8 @@ stdenv.mkDerivation { inherit tcl tk libstdcpp; buildInputs = [which tcl tk x11 ]; + + meta = { + homepage = http://amsn-project.net; + }; } diff --git a/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix b/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix index cde1cb2534b2..2d70c583caba 100644 --- a/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix +++ b/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix @@ -9,6 +9,7 @@ stdenv.mkDerivation { meta = { description = "OTR plugin for Pidgin IM."; + homepage = http://www.cypherpunks.ca/otr; }; postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr"; diff --git a/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix b/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix index 894da72b38f5..95664d0fbeb5 100644 --- a/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix +++ b/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix @@ -37,5 +37,6 @@ stdenv.mkDerivation { Enable it for user by linking to ~/.purple/plugins - from sw/share/pidgin-latex , not from store of course. "; + homepage = http://tapas.affenbande.org/wordpress/?page_id=70; }; } diff --git a/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/pkgs/applications/networking/instant-messengers/pidgin/default.nix index 46af85334748..bc49144565c3 100644 --- a/pkgs/applications/networking/instant-messengers/pidgin/default.nix +++ b/pkgs/applications/networking/instant-messengers/pidgin/default.nix @@ -38,5 +38,6 @@ stdenv.mkDerivation { configureFlags="--with-nspr-includes=${nss}/include/nspr --with-nspr-libs=${nss}/lib --with-nss-includes=${nss}/include/nss --with-nss-libs=${nss}/lib --with-ncurses-headers=${ncurses}/include"; meta = { description = "Pidgin IM - XMPP(Jabber), AIM/ICQ, IRC, SIP etc client."; + homepage = http://pidgin.im; }; } diff --git a/pkgs/applications/networking/irc/irssi/default.nix b/pkgs/applications/networking/irc/irssi/default.nix index a120db5a87ba..e5d60ef7dfef 100644 --- a/pkgs/applications/networking/irc/irssi/default.nix +++ b/pkgs/applications/networking/irc/irssi/default.nix @@ -9,4 +9,8 @@ stdenv.mkDerivation { buildInputs = [pkgconfig ncurses glib openssl]; NIX_LDFLAGS = "-lncurses"; configureFlags = "--with-proxy --with-ncurses --enable-ssl"; + + meta = { + homepage = http://irssi.org; + }; } diff --git a/pkgs/applications/networking/irc/xchat/default.nix b/pkgs/applications/networking/irc/xchat/default.nix index e75201f20814..f7e4395e5309 100644 --- a/pkgs/applications/networking/irc/xchat/default.nix +++ b/pkgs/applications/networking/irc/xchat/default.nix @@ -8,4 +8,8 @@ stdenv.mkDerivation { }; buildInputs = [pkgconfig tcl gtk]; configureFlags = "--disable-nls"; + + meta = { + homepage = http://www.xchat.org; + }; } diff --git a/pkgs/applications/networking/mailreaders/mutt/default.nix b/pkgs/applications/networking/mailreaders/mutt/default.nix index 6b10cfc04a29..c3b4fe54d023 100644 --- a/pkgs/applications/networking/mailreaders/mutt/default.nix +++ b/pkgs/applications/networking/mailreaders/mutt/default.nix @@ -21,4 +21,8 @@ stdenv.mkDerivation { (if sslSupport then "--with-ssl" else "--without-ssl") (if imapSupport then "--enable-imap" else "--disable-imap") ]; + + meta = { + homepage = http://www.mutt.org; + }; } From 891295a46a563182b7ef1322a82fe95bf71d9d54 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 10:42:02 +0000 Subject: [PATCH 192/320] More homepages svn path=/nixpkgs/branches/stdenv-updates/; revision=10432 --- pkgs/os-specific/linux/alsa/library/default.nix | 4 ++++ pkgs/os-specific/linux/alsa/utils/default.nix | 4 ++++ pkgs/tools/archivers/unzip/default.nix | 4 ++++ pkgs/tools/archivers/zip/default.nix | 4 ++++ pkgs/tools/compression/bzip2/default.nix | 3 +++ pkgs/tools/compression/zdelta/default.nix | 8 ++++++-- 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/alsa/library/default.nix b/pkgs/os-specific/linux/alsa/library/default.nix index 32df29d722f2..6ab8143c7ab6 100644 --- a/pkgs/os-specific/linux/alsa/library/default.nix +++ b/pkgs/os-specific/linux/alsa/library/default.nix @@ -6,4 +6,8 @@ stdenv.mkDerivation { url = ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.14.tar.bz2; sha256 = "18xhm53adgss20jnva2nfl9gk46kb5an6ah820pazqn0ykd97rh1"; }; + + meta = { + homepage = http://www.alsa-project.org; + }; } diff --git a/pkgs/os-specific/linux/alsa/utils/default.nix b/pkgs/os-specific/linux/alsa/utils/default.nix index ccc494325664..658d8d8e9f74 100644 --- a/pkgs/os-specific/linux/alsa/utils/default.nix +++ b/pkgs/os-specific/linux/alsa/utils/default.nix @@ -7,4 +7,8 @@ stdenv.mkDerivation { sha256 = "1jx5bwa8abx7aih4lymx4bnrmyip2yb0rp1mza97wpni1q7n6z9h"; }; buildInputs = [alsaLib ncurses gettext]; + + meta = { + homepage = http://www.alsa-project.org; + }; } diff --git a/pkgs/tools/archivers/unzip/default.nix b/pkgs/tools/archivers/unzip/default.nix index e19e564a421c..a690a8e71639 100644 --- a/pkgs/tools/archivers/unzip/default.nix +++ b/pkgs/tools/archivers/unzip/default.nix @@ -7,4 +7,8 @@ stdenv.mkDerivation { url = http://nix.cs.uu.nl/dist/tarballs/unzip552.tar.gz; md5 = "9d23919999d6eac9217d1f41472034a9"; }; + + meta = { + homepage = http://www.info-zip.org; + }; } diff --git a/pkgs/tools/archivers/zip/default.nix b/pkgs/tools/archivers/zip/default.nix index f3fb96ae1e55..9498bf089ff2 100644 --- a/pkgs/tools/archivers/zip/default.nix +++ b/pkgs/tools/archivers/zip/default.nix @@ -5,4 +5,8 @@ url = ftp://ftp.info-zip.org/pub/infozip/src/zip232.tgz; md5 = "8a4da4460386e324debe97f3b7fe4d96"; }; + + meta = { + homepage = http://www.info-zip.org; + }; } diff --git a/pkgs/tools/compression/bzip2/default.nix b/pkgs/tools/compression/bzip2/default.nix index 1a5dd61803aa..9ed3e941bf6e 100644 --- a/pkgs/tools/compression/bzip2/default.nix +++ b/pkgs/tools/compression/bzip2/default.nix @@ -11,4 +11,7 @@ stdenv.mkDerivation { sharedLibrary = !stdenv.isDarwin && !(stdenv ? isDietLibC) && stdenv.system != "i686-cygwin"; + meta = { + homepage = http://www.bzip.org; + }; } diff --git a/pkgs/tools/compression/zdelta/default.nix b/pkgs/tools/compression/zdelta/default.nix index 8bd6d8a0e16b..a07deac41486 100644 --- a/pkgs/tools/compression/zdelta/default.nix +++ b/pkgs/tools/compression/zdelta/default.nix @@ -1,10 +1,14 @@ {stdenv, fetchurl}: -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "zdelta-2.1"; builder = ./builder.sh; src = fetchurl { - url = http://cis.poly.edu/zdelta/downloads/zdelta-2.1.tar.gz; + url = "${meta.homepage}/downloads/${name}.tar.gz"; md5 = "c69583a64f42f69a39e297d0d27d77e5"; }; + + meta = { + homepage = http://cis.poly.edu/zdelta; + }; } From 7e13db278039f568a977b7b269832f6eb0eecce4 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 13:50:53 +0000 Subject: [PATCH 193/320] Removed duplicated ghc68_extra_libs (introduced by incorrect trunk merge) svn path=/nixpkgs/branches/stdenv-updates/; revision=10434 --- pkgs/top-level/all-packages.nix | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 251c7171f184..ac8bbbc10412 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1061,22 +1061,6 @@ rec { # using nvs to be able to use mtl-1.1.0.0 as name in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "cd libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); - # this will change in the future - ghc68_extra_libs = - ghc : let - deriv = name : goSrcDir : deps : - let bd = builderDefs { - goSrcDir = "ghc-* /libraries"; - src = ghc.extra_src; - } null; in - stdenv.mkDerivation rec { - inherit name; - builder = bd.writeScript (name + "-builder") - (bd.textClosure [builderDefs.haskellBuilderDefs]); - }; - # using nvs to be able to use mtl-1.1.0.0 as name - in lib.nvs "mtl-1.1.0.0" (deriv "mtl-1.1.0.0" "libraries/mtl" [ (__getAttr "base-3.0.1.0" ghc.core_libs) ]); - # the wrappers basically does one thing: It defines GHC_PACKAGE_PATH before calling ghc{i,-pkg} # So you can have different wrappers with different library combinations # So installing ghc libraries isn't done by nix-env -i package but by adding the lib to the libraries list below From ecea9e1e0d0a39557e20dae63fe1edf5f7c94d98 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 17:32:06 +0000 Subject: [PATCH 194/320] procmail: syntax changed, mailstat should work svn path=/nixpkgs/branches/stdenv-updates/; revision=10437 --- pkgs/applications/misc/procmail/default.nix | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/pkgs/applications/misc/procmail/default.nix b/pkgs/applications/misc/procmail/default.nix index 50767a7dde80..22bdeb56da8d 100644 --- a/pkgs/applications/misc/procmail/default.nix +++ b/pkgs/applications/misc/procmail/default.nix @@ -1,18 +1,13 @@ args: with args; stdenv.mkDerivation { name="procmail-3.22"; - buildInputs = [stdenv.gcc.libc]; - installPhase = " - ensureDir \$out/bin - find . -exec sed -e \"s%^RM[ \\t]*=%RM=`type -f rm | awk '{print $3;}'`%\" -i '{}' ';' - sed -e 's%\\(LDFLAGS = \$(LDFLAGS1) -lnsl -ldl -lc\\)%\\1 -m%' -i src/Makefile - sed -e \"s%^BASENAME.*%\BASENAME=$out%\" -i Makefile - make DESTDIR=\$out install - "; - phases ="installPhase"; + patchPhase = "find . -type f | xargs sed -i 's@/bin/rm@rm@g' "; + configurePhase= "make init"; + makeFlags = ''BASENAME=$(out) LIBS=-lm''; + + postInstall = '' sed -i /^PATH/d $out/bin/mailstat ''; src = fetchurl { url = ftp://ftp.fu-berlin.de/pub/unix/mail/procmail/procmail-3.22.tar.gz; sha256 = "05z1c803n5cppkcq99vkyd5myff904lf9sdgynfqngfk9nrpaz08"; }; - o=62; } From 3c14fa98a495a3537031e1aa0edb30baf51469da Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 17:32:13 +0000 Subject: [PATCH 195/320] fetchmail: more features, more dependencies svn path=/nixpkgs/branches/stdenv-updates/; revision=10438 --- pkgs/applications/misc/fetchmail/default.nix | 4 ++++ pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/applications/misc/fetchmail/default.nix b/pkgs/applications/misc/fetchmail/default.nix index 9639ff19fb06..f62267c10d64 100644 --- a/pkgs/applications/misc/fetchmail/default.nix +++ b/pkgs/applications/misc/fetchmail/default.nix @@ -8,6 +8,10 @@ stdenv.mkDerivation { patches = [ ./security-fix.patch ]; + configureFlags = "--enable-fallback=procmail --with-ssl=${openssl}"; + + buildInputs = [ openssl python procmail ]; + meta = { homepage = http://www.fetchmail.info; }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ac8bbbc10412..8bdc5ce2efa0 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4087,7 +4087,7 @@ rec { fbpanel = fbpanelFun {version="4.12";} null; fetchmail = import ../applications/misc/fetchmail { - inherit stdenv fetchurl; + inherit stdenv fetchurl openssl python procmail; }; wireshark = import ../applications/networking/sniffers/wireshark { From b7ff9b6d223a092f1a3f168e1a1b417a139f5a25 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 31 Jan 2008 17:32:28 +0000 Subject: [PATCH 196/320] selectVersion syntax changed to support getConfig out of the box svn path=/nixpkgs/branches/stdenv-updates/; revision=10439 --- pkgs/top-level/all-packages.nix | 150 ++++++++++++-------------------- 1 file changed, 58 insertions(+), 92 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8bdc5ce2efa0..672a881ced95 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -226,7 +226,15 @@ rec { # Call a specific version of a Nix expression, that is, # `selectVersion ./foo {version = "0.1.2"; args...}' evaluates to # `import ./foo/0.1.2.nix args'. - selectVersion = dir: args: import (dir + "/${args.version}.nix") args; + selectVersion = dir: defVersion: args: + let + pVersion = + if (args ? version && args.version != "") then + args.version + else + getConfig [ (baseNameOf (toString dir)) "version" ] defVersion; + in + import (dir + "/${pVersion}.nix") (args // { version = pVersion; }); ### STANDARD ENVIRONMENT @@ -463,15 +471,13 @@ rec { inherit fetchurl stdenv; }); - gdmapFun = lib.sumArgs (selectVersion ../tools/system/gdmap) { + gdmapFun = lib.sumArgs (selectVersion ../tools/system/gdmap "0.7.5") { inherit stdenv fetchurl builderDefs pkgconfig libxml2 intltool; inherit (gtkLibs) gtk; }; - gdmap = gdmapFun { - version = "0.7.5"; - } null; + gdmap = gdmapFun null; getopt = import ../tools/misc/getopt { inherit fetchurl stdenv; @@ -564,17 +570,13 @@ rec { inherit fetchurl stdenv ocaml; }; - /*hyppocampusFun = lib.sumArgs ( selectVersion ../tools/misc/hyppocampus ) { + /*hyppocampusFun = lib.sumArgs ( selectVersion ../tools/misc/hyppocampus "0.3rc1") { inherit builderDefs stdenv fetchurl libdbi libdbiDrivers fuse pkgconfig perl gettext dbus dbus_glib pcre libscd; inherit (gtkLibs) glib; bison = bison23; flex = flex2533; - }; - - hyppocampus = hyppocampusFun { - version = "0.3rc1"; - } null;*/ + };*/ jdiskreport = import ../tools/misc/jdiskreport { inherit fetchurl stdenv unzip jdk; @@ -709,15 +711,13 @@ rec { zlibSupport = !stdenv ? isDietLibC; }; - relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs) { + relfsFun = lib.sumArgs (selectVersion ../tools/misc/relfs "cvs.2007.12.01") { inherit fetchcvs stdenv ocaml postgresql fuse pcre builderDefs e2fsprogs pkgconfig; inherit (gnome) gnomevfs GConf; }; - relfs = relfsFun { - version = "cvs.2007.12.01"; - } null; + relfs = relfsFun null; replace = import ../tools/text/replace { inherit fetchurl stdenv; @@ -730,9 +730,8 @@ rec { }; */ - rlwrapFun = lib.sumArgs (selectVersion ../tools/misc/rlwrap) { - version = "0.28"; - inherit builderDefs readline; + rlwrapFun = lib.sumArgs (selectVersion ../tools/misc/rlwrap "0.28") { + inherit builderDefs readline; }; rlwrap = rlwrapFun null; @@ -757,8 +756,7 @@ rec { inherit fetchurl stdenv; }; - smbfsFuseFun = lib.sumArgs (selectVersion ../tools/networking/smbfs-fuse) { - version = "0.8.7"; + smbfsFuseFun = lib.sumArgs (selectVersion ../tools/networking/smbfs-fuse "0.8.7") { inherit builderDefs samba fuse; }; @@ -1356,20 +1354,18 @@ rec { inherit fetchurl stdenv zlib bzip2; }; - pyrexFun = lib.sumArgs (selectVersion ../development/interpreters/pyrex) { + pyrexFun = lib.sumArgs (selectVersion ../development/interpreters/pyrex "0.9.6") { inherit fetchurl stdenv stringsWithDeps lib builderDefs; python = builtins.getAttr "2.5" python_alts; }; - pyrex = pyrexFun {version = "0.9.6";} null; + pyrex = pyrexFun null; - QiFun = lib.sumArgs (selectVersion ../development/compilers/qi) { + QiFun = lib.sumArgs (selectVersion ../development/compilers/qi "9.1") { inherit clisp stdenv fetchurl builderDefs unzip; }; - Qi = QiFun { - version = getConfig ["Qi" "version"] "9.1"; - } null; + Qi = QiFun null; realPerl = import ../development/interpreters/perl { inherit fetchurl stdenv; @@ -1498,13 +1494,11 @@ rec { }; elfutilsFun = lib.sumArgs - (selectVersion ../development/tools/misc/elfutils) { + (selectVersion ../development/tools/misc/elfutils "0.131") { inherit fetchurl stdenv; }; - elfutils = elfutilsFun { - version = "0.131"; - } null; + elfutils = elfutilsFun null; epm = import ../development/tools/misc/epm { inherit fetchurl stdenv rpm; @@ -1563,13 +1557,11 @@ rec { inherit fetchurl stdenv perl perlXMLSimple; }; - indentFun = lib.sumArgs (selectVersion ../development/tools/misc/indent) { + indentFun = lib.sumArgs (selectVersion ../development/tools/misc/indent "2.2.9") { inherit fetchurl stdenv builderDefs; }; - indent = indentFun { - version = "2.2.9"; - } null; + indent = indentFun null; jikespg = import ../development/tools/parsing/jikespg { inherit fetchurl stdenv; @@ -2117,12 +2109,12 @@ rec { inherit fetchurl stdenv; }; - intltoolFun = lib.sumArgs (selectVersion ../development/tools/misc/intltool) { + intltoolFun = lib.sumArgs (selectVersion ../development/tools/misc/intltool "0.36.2") { inherit fetchurl stdenv lib builderDefs stringsWithDeps perl perlXMLParser; }; - intltool = intltoolFun {version = "0.36.2";} null; + intltool = intltoolFun null; jasper = import ../development/libraries/jasper { inherit fetchurl stdenv unzip libjpeg freeglut mesa; @@ -2172,20 +2164,17 @@ rec { inherit fetchurl stdenv; }; - libdbiFun = lib.sumArgs (selectVersion ../development/libraries/libdbi) { + libdbiFun = lib.sumArgs (selectVersion ../development/libraries/libdbi "0.8.2") { inherit stdenv fetchurl builderDefs; }; - libdbi = libdbiFun { - version = "0.8.2"; - } null; + libdbi = libdbiFun null; - libdbiDriversFun = lib.sumArgs (selectVersion ../development/libraries/libdbi-drivers) { + libdbiDriversFun = lib.sumArgs (selectVersion ../development/libraries/libdbi-drivers "0.8.2-1") { inherit stdenv fetchurl builderDefs libdbi; }; libdbiDrivers = libdbiDriversFun { - version = "0.8.2-1"; inherit sqlite mysql; } null; @@ -2217,14 +2206,12 @@ rec { inherit fetchurl stdenv gettext; }; - libextractorFun = lib.sumArgs (selectVersion ../development/libraries/libextractor) + libextractorFun = lib.sumArgs (selectVersion ../development/libraries/libextractor "0.5.18") { inherit fetchurl stdenv builderDefs zlib; }; - libextractor = libextractorFun { - version = "0.5.18"; - } null; + libextractor = libextractorFun null; libgcrypt = import ../development/libraries/libgcrypt { inherit fetchurl stdenv libgpgerror; @@ -2302,13 +2289,11 @@ rec { inherit fetchurl stdenv zlib; }; - /*libscdFun = lib.sumArgs (selectVersion ../development/libraries/libscd) { + /*libscdFun = lib.sumArgs (selectVersion ../development/libraries/libscd "0.4.2") { inherit stdenv fetchurl builderDefs libextractor perl pkgconfig; }; - libscd = libscdFun { - version = "0.4.2"; - } null;*/ + libscd = libscdFun null;*/ libsigcxx = import ../development/libraries/libsigcxx { inherit fetchurl stdenv pkgconfig; @@ -3250,14 +3235,11 @@ rec { inherit fetchurl stdenv; }; - atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros) { + atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros "r3122") { inherit fetchurl stdenv builderDefs; }; - atherosVersion = "r3122"; - atherosFunCurrent = kernel: atherosFun { - version = atherosVersion; inherit kernel; } null; @@ -3286,13 +3268,11 @@ rec { static = true; })); - dmidecodeFun = lib.sumArgs (selectVersion ../os-specific/linux/dmidecode) { + dmidecodeFun = lib.sumArgs (selectVersion ../os-specific/linux/dmidecode "2.9") { inherit fetchurl stdenv builderDefs; }; - dmidecode = dmidecodeFun { - version = "2.9"; - } null; + dmidecode = dmidecodeFun null; dietlibc = import ../os-specific/linux/dietlibc { inherit fetchurl glibc; @@ -3432,13 +3412,12 @@ rec { configFile = getConfig ["kernel" "configFile"] null; }; - kqemuFun = lib.sumArgs (selectVersion ../os-specific/linux/kqemu) { + kqemuFun = lib.sumArgs (selectVersion ../os-specific/linux/kqemu "1.3.0pre11") { inherit fetchurl stdenv builderDefs; }; # No finished expression is provided - pick your own kernel kqemuFunCurrent = theKernel: (kqemuFun { - version = "1.3.0pre11"; kernel = theKernel; } null); @@ -3624,13 +3603,11 @@ rec { inherit fetchurl stdenv; }; - sdparmFun = lib.sumArgs (selectVersion ../os-specific/linux/sdparm) { + sdparmFun = lib.sumArgs (selectVersion ../os-specific/linux/sdparm "1.02") { inherit fetchurl stdenv builderDefs; }; - sdparm = sdparmFun { - version = "1.02"; - } null; + sdparm = sdparmFun null; shadowutils = import ../os-specific/linux/shadow { inherit fetchurl stdenv; @@ -3932,7 +3909,7 @@ rec { version = "0.6.2"; }; - compizFun = lib.sumArgs (assert mesaSupported; selectVersion ../applications/window-managers/compiz) { + compizFun = lib.sumArgs (assert mesaSupported; selectVersion ../applications/window-managers/compiz "0.6.2") { inherit lib builderDefs stringsWithDeps; inherit fetchurl stdenv pkgconfig libpng mesa perl perlXMLParser libxslt; inherit (xorg) libXcomposite libXfixes libXdamage libXrandr @@ -3950,7 +3927,6 @@ rec { }; compiz = compizFun { - version = getConfig ["compiz" "version"] "0.6.2"; extraConfigureFlags = getConfig ["compiz" "extraConfigureFlags"] []; } null; @@ -4020,13 +3996,12 @@ rec { inherit fetchurl stdenv qt4 djvulibre; }; - dvdplusrwtoolsFun = lib.sumArgs (selectVersion ../os-specific/linux/dvd+rw-tools) { + /* TODO: rename to be able to set version */ + dvdplusrwtoolsFun = lib.sumArgs (selectVersion ../os-specific/linux/dvd+rw-tools "7.0") { inherit fetchurl stdenv builderDefs cdrkit m4; }; - dvdplusrwtools = dvdplusrwtoolsFun { - version = "7.0"; - } null; + dvdplusrwtools = dvdplusrwtoolsFun null; eclipse = plugins: import ../applications/editors/eclipse { @@ -4078,13 +4053,13 @@ rec { openexr = openexr_1_6_1; }; - fbpanelFun = lib.sumArgs (selectVersion ../applications/window-managers/fbpanel) { + fbpanelFun = lib.sumArgs (selectVersion ../applications/window-managers/fbpanel "4.12") { inherit fetchurl stdenv builderDefs pkgconfig libpng libjpeg libtiff librsvg; inherit (gtkLibs) gtk; inherit (xlibs) libX11 libXmu libXpm; }; - fbpanel = fbpanelFun {version="4.12";} null; + fbpanel = fbpanelFun null; fetchmail = import ../applications/misc/fetchmail { inherit stdenv fetchurl openssl python procmail; @@ -4206,11 +4181,11 @@ rec { inherit (xlibs) libX11 libXext libXi libXmu; }; - gocrFun = lib.sumArgs (selectVersion ../applications/graphics/gocr) { + gocrFun = lib.sumArgs (selectVersion ../applications/graphics/gocr "0.44") { inherit builderDefs fetchurl stdenv; }; - gocr = gocrFun {version = "0.44";} null; + gocr = gocrFun null; gphoto2 = import ../applications/misc/gphoto2 { inherit fetchurl stdenv pkgconfig libgphoto2 libexif popt readline gettext; @@ -4478,7 +4453,7 @@ rec { python = builtins.getAttr "2.5" python_alts; }; - qemuFun = lib.sumArgs (selectVersion ../applications/virtualization/qemu ) { + qemuFun = lib.sumArgs (selectVersion ../applications/virtualization/qemu "0.9.0") { inherit fetchurl; stdenv = overrideGCC stdenv gcc34; builderDefs = builderDefs { @@ -4487,18 +4462,14 @@ rec { inherit SDL zlib which; }; - qemu = qemuFun { - version = "0.9.0"; - } null; + qemu = qemuFun null; qemuImageFun = lib.sumArgs - (selectVersion ../applications/virtualization/qemu/linux-img ) { + (selectVersion ../applications/virtualization/qemu/linux-img "0.2") { inherit builderDefs fetchurl stdenv; }; - qemuImage = qemuImageFun { - version = "0.2"; - } null; + qemuImage = qemuImageFun null; ratpoison = import ../applications/window-managers/ratpoison { inherit fetchurl stdenv fontconfig readline; @@ -4695,16 +4666,14 @@ rec { flags = [ "X11" ]; # only flag "X11" by now }; - /*virtualboxFun = lib.sumArgs (selectVersion ../applications/virtualization/virtualbox) { + /*virtualboxFun = lib.sumArgs (selectVersion ../applications/virtualization/virtualbox "1.5.2") { inherit stdenv fetchurl builderDefs bridge_utils umlutilities kernelHeaders wine jre libxslt SDL qt3 openssl zlib; inherit (xorg) libXcursor; inherit (gnome) libIDL; }; - virtualbox = virtualboxFun { - version = "1.5.2"; - } null;*/ + virtualbox = virtualboxFun null;*/ vlc = import ../applications/video/vlc { inherit fetchurl stdenv perl x11 wxGTK @@ -4794,13 +4763,12 @@ rec { base14Fonts = "${ghostscript}/share/ghostscript/fonts"; }; - xscreensaverFun = lib.sumArgs (selectVersion ../applications/graphics/xscreensaver) { + xscreensaverFun = lib.sumArgs (selectVersion ../applications/graphics/xscreensaver "5.04") { inherit stdenv fetchurl builderDefs lib pkgconfig bc perl intltool; inherit (xlibs) libX11 libXmu; }; xscreensaver = xscreensaverFun { - version = "5.04"; flags = ["GL" "gdkpixbuf" "DPMS" "gui" "jpeg"]; inherit mesa libxml2 libjpeg; inherit (gtkLibs) gtk; @@ -4868,7 +4836,7 @@ rec { ### GAMES - construoFun = lib.sumArgs (selectVersion ../games/construo) { + construoFun = lib.sumArgs (selectVersion ../games/construo "0.2.2") { inherit stdenv fetchurl builderDefs zlib; inherit (xlibs) libX11 xproto; @@ -4876,7 +4844,6 @@ rec { construo = construoFun { inherit mesa freeglut; - version = "0.2.2"; } null; exult = import ../games/exult { @@ -4928,12 +4895,11 @@ rec { }; # You still can override by passing more arguments. - spaceOrbitFun = lib.sumArgs (selectVersion ../games/orbit ) { + spaceOrbitFun = lib.sumArgs (selectVersion ../games/orbit "1.01") { inherit fetchurl stdenv builderDefs mesa freeglut; inherit (gnome) esound; inherit (xlibs) libXt libX11 libXmu libXi libXext; - version = "1.01"; }; spaceOrbit = spaceOrbitFun null; From 45b91c969c69fb2d3afcabc0421fbd65aadd7d1c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:39:12 +0000 Subject: [PATCH 197/320] gettext: using selectVersion svn path=/nixpkgs/branches/stdenv-updates/; revision=10453 --- pkgs/development/libraries/gettext/default.nix | 8 -------- pkgs/top-level/all-packages.nix | 6 +++--- 2 files changed, 3 insertions(+), 11 deletions(-) delete mode 100644 pkgs/development/libraries/gettext/default.nix diff --git a/pkgs/development/libraries/gettext/default.nix b/pkgs/development/libraries/gettext/default.nix deleted file mode 100644 index b0e64639d87d..000000000000 --- a/pkgs/development/libraries/gettext/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -args: -args.stdenv.lib.listOfListsToAttrs [ - [ "recurseForDerivations" true ] - [ "0.14.6" (import ./0.14.6.nix args) ] - [ "0.15" (import ./0.15.nix args) ] - [ "0.16.x" (import ./0.16.x.nix args) ] - [ "default" (import ./0.16.x.nix args) ] -] diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 672a881ced95..87ecc5c31c3d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1929,12 +1929,12 @@ rec { # python / ruby support }; - gettext = getVersion "gettext" gettext_alts; - - gettext_alts = import ../development/libraries/gettext { + gettextFun = lib.sumArgs (selectVersion ../development/libraries/gettext "0.16.x") { inherit fetchurl stdenv; }; + gettext = gettextFun null; + gd = import ../development/libraries/gd { inherit fetchurl stdenv zlib libpng freetype libjpeg fontconfig; }; From d52ed394ae143e260cdb8fa9b3132bf67feeb951 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:39:21 +0000 Subject: [PATCH 198/320] gettext: removed old versions, added 0.17 svn path=/nixpkgs/branches/stdenv-updates/; revision=10454 --- pkgs/development/libraries/gettext/0.14.6.nix | 9 --------- pkgs/development/libraries/gettext/0.15.nix | 9 --------- pkgs/development/libraries/gettext/0.17.nix | 9 +++++++++ 3 files changed, 9 insertions(+), 18 deletions(-) delete mode 100644 pkgs/development/libraries/gettext/0.14.6.nix delete mode 100644 pkgs/development/libraries/gettext/0.15.nix create mode 100644 pkgs/development/libraries/gettext/0.17.nix diff --git a/pkgs/development/libraries/gettext/0.14.6.nix b/pkgs/development/libraries/gettext/0.14.6.nix deleted file mode 100644 index bceacd318ec6..000000000000 --- a/pkgs/development/libraries/gettext/0.14.6.nix +++ /dev/null @@ -1,9 +0,0 @@ -args: with args; -stdenv.mkDerivation { - name = "gettext-0.14.6"; - src = fetchurl { - url = mirror://gnu/gettext/gettext-0.14.6.tar.gz; - md5 = "c26fc7f0a493c5c7c39bbc4e7ed42790"; - }; - configureFlags = "--disable-csharp"; -} diff --git a/pkgs/development/libraries/gettext/0.15.nix b/pkgs/development/libraries/gettext/0.15.nix deleted file mode 100644 index 0c417aafe50f..000000000000 --- a/pkgs/development/libraries/gettext/0.15.nix +++ /dev/null @@ -1,9 +0,0 @@ -args: with args; -stdenv.mkDerivation { - name = "gettext-0.15"; - src = fetchurl { - url = mirror://gnu/gettext/gettext-0.15.tar.gz; - md5 = "16bc6e4d37ac3d07495f737a2349a22b"; - }; - configureFlags = "--disable-csharp"; -} diff --git a/pkgs/development/libraries/gettext/0.17.nix b/pkgs/development/libraries/gettext/0.17.nix new file mode 100644 index 000000000000..6063f74612b5 --- /dev/null +++ b/pkgs/development/libraries/gettext/0.17.nix @@ -0,0 +1,9 @@ +args: with args; +stdenv.mkDerivation rec { + name = "gettext-" + version; + src = fetchurl { + url = "mirror://gnu/gettext/${name}.tar.gz"; + sha256 = "1fipjpaxxwifdw6cbr7mkxp1yvy643i38nhlh7124bqnisxki5i0"; + }; + configureFlags = "--disable-csharp"; +} From 33bb9b56eb7d62556728cf5d23e68dbeb370a83b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:39:32 +0000 Subject: [PATCH 199/320] gettext: 0.17 is now default version svn path=/nixpkgs/branches/stdenv-updates/; revision=10455 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 87ecc5c31c3d..143cf980c470 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1929,7 +1929,7 @@ rec { # python / ruby support }; - gettextFun = lib.sumArgs (selectVersion ../development/libraries/gettext "0.16.x") { + gettextFun = lib.sumArgs (selectVersion ../development/libraries/gettext "0.17") { inherit fetchurl stdenv; }; From f5bf68f9a8f2ffefba569d562590d99f33e7f915 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:39:44 +0000 Subject: [PATCH 200/320] wget: version 1.11 added, made default. svn path=/nixpkgs/branches/stdenv-updates/; revision=10456 --- .../networking/wget/{default.nix => 1.10.2.nix} | 0 pkgs/tools/networking/wget/1.11.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 4 +++- 3 files changed, 19 insertions(+), 1 deletion(-) rename pkgs/tools/networking/wget/{default.nix => 1.10.2.nix} (100%) create mode 100644 pkgs/tools/networking/wget/1.11.nix diff --git a/pkgs/tools/networking/wget/default.nix b/pkgs/tools/networking/wget/1.10.2.nix similarity index 100% rename from pkgs/tools/networking/wget/default.nix rename to pkgs/tools/networking/wget/1.10.2.nix diff --git a/pkgs/tools/networking/wget/1.11.nix b/pkgs/tools/networking/wget/1.11.nix new file mode 100644 index 000000000000..c7295f1df943 --- /dev/null +++ b/pkgs/tools/networking/wget/1.11.nix @@ -0,0 +1,16 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "wget-" + version; + src = fetchurl { + url = "mirror://gnu/wget/${name}.tar.bz2"; + sha256 = "0mhd3181zdp1fwirxw0km7502sfvjmm1ncska9w6s2drczf37aix"; + }; + + buildInputs = [gettext]; + + meta = { + description = "A console downloading program. Has some features for mirroring sites."; + homepage = http://www.gnu.org/software/wget; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 143cf980c470..3d558190b97d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -832,10 +832,12 @@ rec { inherit fetchurl stdenv; }; - wget = import ../tools/networking/wget { + wgetFun = lib.sumArgs (selectVersion ../tools/networking/wget "1.11") { inherit fetchurl stdenv gettext; }; + wget = wgetFun null; + which = import ../tools/system/which { inherit fetchurl stdenv readline; }; From a20bd6bfa9afbcac324795563642b70af3988a5c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:40:05 +0000 Subject: [PATCH 201/320] libexif: removed unneeded gettext dependency svn path=/nixpkgs/branches/stdenv-updates/; revision=10457 --- pkgs/development/libraries/libexif/default.nix | 7 ++++++- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libexif/default.nix b/pkgs/development/libraries/libexif/default.nix index 76434d2c30bd..9e77de0df322 100644 --- a/pkgs/development/libraries/libexif/default.nix +++ b/pkgs/development/libraries/libexif/default.nix @@ -8,5 +8,10 @@ stdenv.mkDerivation rec { sha256 = "0hxc3aik3sn8xq4mbmxxb8ycx2lwffmhi5xvz0zjffhfwkaqas6v"; }; - buildInputs = [gettext]; + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://libexif.sourceforge.net; + description = "The EXIF parsing library"; + }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3d558190b97d..da0918f47950 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2205,7 +2205,7 @@ rec { }; libexif = import ../development/libraries/libexif { - inherit fetchurl stdenv gettext; + inherit fetchurl stdenv; }; libextractorFun = lib.sumArgs (selectVersion ../development/libraries/libextractor "0.5.18") From 56e0a4b43a92e19eb8dd53c82ef13bf3e4f5f916 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:40:23 +0000 Subject: [PATCH 202/320] libgphoto2: removed unneeded gettext dependency svn path=/nixpkgs/branches/stdenv-updates/; revision=10458 --- pkgs/development/libraries/libgphoto2/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libgphoto2/default.nix b/pkgs/development/libraries/libgphoto2/default.nix index 6e332117a2db..9397530287b7 100644 --- a/pkgs/development/libraries/libgphoto2/default.nix +++ b/pkgs/development/libraries/libgphoto2/default.nix @@ -7,9 +7,10 @@ stdenv.mkDerivation rec { url = "mirror://sourceforge/gphoto/${name}.tar.bz2"; sha256 = "0yfvpgfly774jnjrfqjf89h99az3sgvzkfpb9diygpk8hmx6phhd"; }; - buildInputs = [pkgconfig libusb libtool libexif libjpeg gettext]; + buildInputs = [pkgconfig libusb libtool libexif libjpeg]; meta = { - license = "LGPL-2"; + license = "LGPL-2"; + homepage = http://www.gphoto.org/proj/libgphoto2; }; } From 74d3d736f5c623a30c5b843bf5915b58dddd007b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:40:39 +0000 Subject: [PATCH 203/320] Removed unused patches (libexif, libgphoto2) svn path=/nixpkgs/branches/stdenv-updates/; revision=10459 --- .../development/libraries/libexif/no-po.patch | 20 ------------------- .../libgphoto2/libgphoto2-2.2.1.patch | 14 ------------- 2 files changed, 34 deletions(-) delete mode 100644 pkgs/development/libraries/libexif/no-po.patch delete mode 100644 pkgs/development/libraries/libgphoto2/libgphoto2-2.2.1.patch diff --git a/pkgs/development/libraries/libexif/no-po.patch b/pkgs/development/libraries/libexif/no-po.patch deleted file mode 100644 index 77e61236939a..000000000000 --- a/pkgs/development/libraries/libexif/no-po.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -rc libexif-0.6.14/Makefile.in libexif-0.6.14.new/Makefile.in -*** libexif-0.6.14/Makefile.in 2007-05-10 17:14:58.000000000 +0200 ---- libexif-0.6.14.new/Makefile.in 2007-05-13 23:04:05.000000000 +0200 -*************** -*** 224,230 **** - target_alias = @target_alias@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ -! SUBDIRS = m4m po libexif test doc binary - @SHIP_BINARIES_TRUE@README_W32_XDIST = README-Win32.txt - EXTRA_DIST = @PACKAGE_TARNAME@.spec autogen.sh $(README_W32_XDIST) - ACLOCAL_AMFLAGS = -I auto-m4 -I m4m ---- 224,230 ---- - target_alias = @target_alias@ - top_builddir = @top_builddir@ - top_srcdir = @top_srcdir@ -! SUBDIRS = m4m libexif test binary - @SHIP_BINARIES_TRUE@README_W32_XDIST = README-Win32.txt - EXTRA_DIST = @PACKAGE_TARNAME@.spec autogen.sh $(README_W32_XDIST) - ACLOCAL_AMFLAGS = -I auto-m4 -I m4m diff --git a/pkgs/development/libraries/libgphoto2/libgphoto2-2.2.1.patch b/pkgs/development/libraries/libgphoto2/libgphoto2-2.2.1.patch deleted file mode 100644 index 8d39d663719d..000000000000 --- a/pkgs/development/libraries/libgphoto2/libgphoto2-2.2.1.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff -ruN libgphoto2-2.2.1/packaging/generic/print-camera-list.c libgphoto2-2.2.1.new/packaging/generic/print-camera-list.c ---- libgphoto2-2.2.1/packaging/generic/print-camera-list.c 2006-04-19 03:54:05.000000000 +0200 -+++ libgphoto2-2.2.1.new/packaging/generic/print-camera-list.c 2006-07-06 22:54:42.000000000 +0200 -@@ -48,8 +48,8 @@ - #include - #include - --#include --#include -+#include -+#include - - #ifndef TRUE - #define TRUE (0==0) From 2ac45781aa956be38af8006ac064c7ce05436379 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:40:46 +0000 Subject: [PATCH 204/320] tab->spaces svn path=/nixpkgs/branches/stdenv-updates/; revision=10460 --- pkgs/top-level/all-packages.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index da0918f47950..1c8211d7fcad 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1300,8 +1300,8 @@ rec { clisp = import ../development/interpreters/clisp { - inherit fetchurl stdenv libsigsegv gettext - readline ncurses coreutils pcre zlib; + inherit fetchurl stdenv libsigsegv gettext + readline ncurses coreutils pcre zlib; inherit (xlibs) libX11 libXau libXt; }; From aa4d93482dfd77012c8494abfdffec876e466521 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:41:06 +0000 Subject: [PATCH 205/320] D-Bus splitted into two packages: dbus.libs and dbus.tools svn path=/nixpkgs/branches/stdenv-updates/; revision=10461 --- .../networking/browsers/firefox3b1/3b2.nix | 2 +- .../compiz-fusion/general-dependencies.nix | 2 +- .../window-managers/compiz/0.6.2.nix | 2 +- .../window-managers/compiz/extra.nix | 2 +- .../libraries/dbus-glib/default.nix | 2 +- pkgs/development/libraries/dbus/default.nix | 48 ++++++++++++------- .../libraries/libnotify/default.nix | 7 +-- pkgs/development/libraries/qt-4/default.nix | 2 +- pkgs/os-specific/linux/hal/default.nix | 8 +--- pkgs/top-level/all-packages.nix | 18 ++----- 10 files changed, 46 insertions(+), 47 deletions(-) diff --git a/pkgs/applications/networking/browsers/firefox3b1/3b2.nix b/pkgs/applications/networking/browsers/firefox3b1/3b2.nix index 29ea90d9d893..bf812f6a7ad9 100644 --- a/pkgs/applications/networking/browsers/firefox3b1/3b2.nix +++ b/pkgs/applications/networking/browsers/firefox3b1/3b2.nix @@ -11,7 +11,7 @@ stdenv.mkDerivation { buildInputs = [ pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo - python curl coreutils dbus dbus_glib pango freetype fontconfig + python curl coreutils dbus.libs dbus_glib pango freetype fontconfig libX11 libXrender libXft libXt ]; diff --git a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix index 717d66e2c29b..f02857cf80a9 100644 --- a/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix +++ b/pkgs/applications/window-managers/compiz-fusion/general-dependencies.nix @@ -4,6 +4,6 @@ build-essential libxcomposite-dev libpng12-dev libsm-dev libxrandr-dev libxdamag args: with args; [ libpng - GConf mesa metacity librsvg dbus dbus_glib gnomedesktop git autoconf automake + GConf mesa metacity librsvg dbus.libs dbus_glib gnomedesktop git autoconf automake libtool libxslt libwnck intltool perl perlXMLParser compiz ] diff --git a/pkgs/applications/window-managers/compiz/0.6.2.nix b/pkgs/applications/window-managers/compiz/0.6.2.nix index 78369081bc9d..8827b3cb7a06 100644 --- a/pkgs/applications/window-managers/compiz/0.6.2.nix +++ b/pkgs/applications/window-managers/compiz/0.6.2.nix @@ -14,7 +14,7 @@ args : with args; propagatedBuildInputs = [ libpng libXcomposite libXfixes libXdamage libXrandr libXinerama libICE libSM startupnotification mesa GConf perl perlXMLParser libxslt - dbus dbus_glib compositeproto fixesproto damageproto randrproto + dbus.libs dbus_glib compositeproto fixesproto damageproto randrproto xineramaproto renderproto kbproto xextproto libXrender ]; configureFlags = ["--enable-gtk" "--enable-fuse" diff --git a/pkgs/applications/window-managers/compiz/extra.nix b/pkgs/applications/window-managers/compiz/extra.nix index 501518d3f679..70f4e5dd8c38 100644 --- a/pkgs/applications/window-managers/compiz/extra.nix +++ b/pkgs/applications/window-managers/compiz/extra.nix @@ -8,7 +8,7 @@ stdenv.mkDerivation { sha256 = "7fc7faafccfdf22dea7ac1de6629dcb55ec63d84fcb57a14559309cf284fa94f"; }; buildInputs = [ - pkgconfig compiz perl perlXMLParser GConf dbus gtk + pkgconfig compiz perl perlXMLParser GConf dbus.libs gtk ]; preBuild = " makeFlagsArray=(moduledir=$out/lib/compiz) diff --git a/pkgs/development/libraries/dbus-glib/default.nix b/pkgs/development/libraries/dbus-glib/default.nix index 8324980126ca..2476ba4fabd5 100644 --- a/pkgs/development/libraries/dbus-glib/default.nix +++ b/pkgs/development/libraries/dbus-glib/default.nix @@ -8,7 +8,7 @@ stdenv.mkDerivation rec { }; inherit dbus glib; buildInputs = [pkgconfig gettext glib expat]; - propagatedBuildInputs = [dbus]; + propagatedBuildInputs = [dbus.libs]; meta = { homepage = http://dbus.freedesktop.org; diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix index cd4b8f49e05f..04f08be8853b 100644 --- a/pkgs/development/libraries/dbus/default.nix +++ b/pkgs/development/libraries/dbus/default.nix @@ -1,22 +1,38 @@ -{stdenv, fetchurl, pkgconfig, expat}: - -stdenv.mkDerivation { - name = "dbus-1.0.2"; +args: with args; +let + version = "1.0.2"; src = fetchurl { - url = http://dbus.freedesktop.org/releases/dbus/dbus-1.0.2.tar.gz; + url = "http://dbus.freedesktop.org/releases/dbus/dbus-${version}.tar.gz"; sha256 = "1jn652zb81mczsx4rdcwrrzj3lfhx9d107zjfnasc4l5yljl204a"; }; - buildInputs = [pkgconfig expat]; - configureFlags = "--without-x --localstatedir=/var"; + configureFlags = "--disable-static --localstatedir=/var --with-session-socket-dir=/tmp"; +in rec { + libs = stdenv.mkDerivation { + name = "dbus-library-" + version; + buildInputs = [pkgconfig expat]; + inherit src configureFlags; + patchPhase = '' + sed -i /mkinstalldirs.*localstatedir/d bus/Makefile.in + sed -i '/SUBDIRS/s/ tools//' Makefile.in + ''; + }; - # Awful hack: `make install' wants to write in /var, but it - # can't. So redirect it with a DESTDIR. - preInstall = " - installFlagsArray=(DESTDIR=$out/destdir) - "; + tools = stdenv.mkDerivation { + name = "dbus-tools-" + version; + inherit src configureFlags; + buildInputs = [pkgconfig expat libs] + ++ if useX11 then [libX11 libICE libSM] else []; + postConfigure = "cd tools"; - postInstall = " - mv $out/destdir/$out/* $out - rm -rf $out/destdir - "; + NIX_LDFLAGS = "-ldbus-1"; + makeFlags = "DBUS_DAEMONDIR=${daemon}/bin"; + + patchPhase = '' + sed -i 's@ $(top_builddir)/dbus/libdbus-1.la@@' tools/Makefile.in + sed -i '/mkdir.*localstate/d' tools/Makefile.in + ''; + }; + +# I'm too lazy to separate daemon and libs now. + daemon = libs; } diff --git a/pkgs/development/libraries/libnotify/default.nix b/pkgs/development/libraries/libnotify/default.nix index 42747db95a1b..8b58fe857e9d 100644 --- a/pkgs/development/libraries/libnotify/default.nix +++ b/pkgs/development/libraries/libnotify/default.nix @@ -1,7 +1,4 @@ -{ stdenv, fetchurl -, pkgconfig, dbus, dbus_glib -, gtk, glib -}: +args: with args; stdenv.mkDerivation { name = "libnotify-0.4.4"; @@ -13,7 +10,7 @@ stdenv.mkDerivation { }; buildInputs = [ - pkgconfig dbus dbus_glib gtk glib + pkgconfig dbus.libs dbus_glib gtk glib ]; configureFlags=""; diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix index 2d6366c81d73..2d05ad22db0e 100644 --- a/pkgs/development/libraries/qt-4/default.nix +++ b/pkgs/development/libraries/qt-4/default.nix @@ -4,7 +4,7 @@ rec { setupHook = ./setup-hook.sh; propagatedBuildInputs = [libXft libXrender libXrandr randrproto xextproto libXinerama xineramaproto libXcursor zlib libjpeg mysql libpng which mesa - libXmu openssl dbus cups pkgconfig libXext freetype fontconfig inputproto + libXmu openssl dbus.libs cups pkgconfig libXext freetype fontconfig inputproto fixesproto libXfixes glib libtiff]; prefixKey = "-prefix "; configureFlags = " diff --git a/pkgs/os-specific/linux/hal/default.nix b/pkgs/os-specific/linux/hal/default.nix index 1fc012981053..ce41a29a9fe8 100644 --- a/pkgs/os-specific/linux/hal/default.nix +++ b/pkgs/os-specific/linux/hal/default.nix @@ -1,8 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, python, pciutils, usbutils, expat -, libusb, dbus, dbus_glib, glib, libvolume_id, perl, perlXMLParser -, gettext, zlib /* required by pciutils */, eject, libsmbios -, udev -}: +args: with args; stdenv.mkDerivation { name = "hal-0.5.9"; @@ -13,7 +9,7 @@ stdenv.mkDerivation { }; buildInputs = [ - pkgconfig python pciutils expat libusb dbus dbus_glib glib + pkgconfig python pciutils expat libusb dbus.libs dbus_glib glib libvolume_id perl perlXMLParser gettext zlib libsmbios ]; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1c8211d7fcad..9bcb581aedeb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1825,20 +1825,11 @@ rec { inherit fetchurl stdenv; }; - # I think, this is a bad practice to use getVersion for various build - # variants, but it's 5 o'clock now... - dbus = getVersion "dbus" dbus_alts; - - dbus_alts = rec - { - noX11 = import ../development/libraries/dbus { + dbus = import ../development/libraries/dbus { inherit fetchurl stdenv pkgconfig expat; - }; - withX11 = import ../development/libraries/dbus_x { - inherit fetchurl stdenv pkgconfig expat; inherit (xlibs) libX11 libICE libSM; - }; - default = noX11; + useX11 = getConfig [ "dbus" "tools" "useX11" ] + (getConfig [ "services" "xserver" "enable" ] false); }; dbus_glib = import ../development/libraries/dbus-glib { @@ -4955,7 +4946,7 @@ rec { xineLib libgphoto2 djvulibre libogg lame libvorbis poppler readline saneBackends chmlib python libzip gmp sqlite libidn runCommand lib openbabel ocaml facile stdenv jasper fam indilib libnova - libarchive; + libarchive dbus; flac = builtins.getAttr "1.1.2" flacAlts; cdparanoia = cdparanoiaIII; inherit (xlibs) @@ -4966,7 +4957,6 @@ rec { libxkbfile libXinerama libpthreadstubs libXxf86vm xset xprop; inherit (gtkLibs) glib; qt = qt4; - dbus = dbus_alts.withX11; bison = bison23; openexr = openexr_1_6_1 ; }); From 0facf68545ac2c06562663c28ea18d93168765a8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:41:20 +0000 Subject: [PATCH 206/320] ImageMagick: 6.3.8-2 svn path=/nixpkgs/branches/stdenv-updates/; revision=10462 --- pkgs/applications/graphics/ImageMagick/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/graphics/ImageMagick/default.nix b/pkgs/applications/graphics/ImageMagick/default.nix index 99df6bfe975b..67df0c7b3c44 100644 --- a/pkgs/applications/graphics/ImageMagick/default.nix +++ b/pkgs/applications/graphics/ImageMagick/default.nix @@ -1,10 +1,10 @@ args: with args; -(stdenv.mkDerivation ({ - name = "ImageMagick-6.3.7-9"; +stdenv.mkDerivation (rec { + name = "ImageMagick-6.3.8-2"; src = fetchurl { - url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.7-9.tar.bz2; - sha256 = "1s38s78xvzm20ib22zypsb9vvzva0kbqjf0pf4c1q89jzg205pk0"; + url = "ftp://ftp.imagemagick.org/pub/ImageMagick/${name}.tar.bz2"; + sha256 = "05bp10dzpw691w8hdw0n2xr65194xgslpqhzf4xbxla7gz8clnmg"; }; configureFlags = " --with-dots --with-gs-font-dir="+ ghostscript + @@ -23,4 +23,4 @@ args: with args; preConfigure = " export DVIDecodeDelegate=${args.tetex}/bin/dvips "; -} else {}))) +} else {})) From a01c3860e56aa55208963b88e427dfba54713f0f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:41:40 +0000 Subject: [PATCH 207/320] Added luit svn path=/nixpkgs/branches/stdenv-updates/; revision=10463 --- pkgs/applications/misc/luit/default.nix | 17 +++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++++ 2 files changed, 22 insertions(+) create mode 100644 pkgs/applications/misc/luit/default.nix diff --git a/pkgs/applications/misc/luit/default.nix b/pkgs/applications/misc/luit/default.nix new file mode 100644 index 000000000000..f27ddc302819 --- /dev/null +++ b/pkgs/applications/misc/luit/default.nix @@ -0,0 +1,17 @@ +args: with args; +stdenv.mkDerivation rec { + name = "luit-20060820"; + src = fetchurl { + url = "${meta.homepage}/${name}.tgz"; + sha256 = "0cxf4agl7ky3ip01qi1vzmis8y1ddngbi2fi0q6bzv1jw458rlpi"; + }; + + buildInputs = [libXt zlib pkgconfig libXfont libX11 libfontenc]; + + configureFlags = "--with-locale-alias=${libX11}/share/X11/locale/locale.alias"; + meta = { + description = "Luit is a filter that can be run between an arbitrary + application and a UTF-8 terminal emulator."; + homepage = http://invisible-island.net/luit; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 9bcb581aedeb..d00ae4542eb7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4291,6 +4291,11 @@ rec { inherit fetchurl stdenv; }; + luit = import ../applications/misc/luit { + inherit fetchurl stdenv zlib pkgconfig; + inherit (xlibs) libXt libX11 libXfont libfontenc; + }; + lynx = import ../applications/networking/browsers/lynx { inherit fetchurl stdenv ncurses openssl; }; From ab9a4ef69533328a210fa0e427ca1be17b4066f3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:41:51 +0000 Subject: [PATCH 208/320] xterm: trying to let it work in ru_RU.UTF-8 locale... svn path=/nixpkgs/branches/stdenv-updates/; revision=10464 --- pkgs/applications/misc/xterm/default.nix | 9 ++++++--- pkgs/top-level/all-packages.nix | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/misc/xterm/default.nix b/pkgs/applications/misc/xterm/default.nix index aba6a6a07a3c..02ee7acf9468 100644 --- a/pkgs/applications/misc/xterm/default.nix +++ b/pkgs/applications/misc/xterm/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, libXaw, xproto, libXt, libX11, libSM, libICE, ncurses}: +args: with args; stdenv.mkDerivation rec { name = "xterm-231"; @@ -6,8 +6,11 @@ stdenv.mkDerivation rec { url = "ftp://invisible-island.net/xterm/${name}.tgz"; sha256 = "0qlz5nkdqkahdg9kbd1ni96n69srj1pd9yggwrw3z0kghaajb2sr"; }; - buildInputs = [libXaw xproto libXt libX11 libSM libICE ncurses]; - configureFlags = ["--enable-wide-chars"]; + buildInputs = [libXaw xproto libXt libXext libX11 libSM libICE ncurses + freetype pkgconfig libXft luit]; + configureFlags = "--enable-wide-chars --enable-256-color + --enable-load-vt-fonts --enable-i18n --enable-doublechars --enable-luit + --enable-mini-luit"; meta = { homepage = http://invisible-island.net/xterm; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d00ae4542eb7..615b76f40ea4 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4774,8 +4774,8 @@ rec { } null; xterm = import ../applications/misc/xterm { - inherit fetchurl stdenv ncurses; - inherit (xlibs) libXaw xproto libXt libX11 libSM libICE; + inherit fetchurl stdenv ncurses freetype pkgconfig luit; + inherit (xlibs) libXaw xproto libXt libX11 libSM libICE libXext libXft; }; xlaunch = import ../tools/X11/xlaunch { From 1a12f687e2f23f555ed2ea05208fe619a93495be Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:42:13 +0000 Subject: [PATCH 209/320] dbus-glib: propagating glib svn path=/nixpkgs/branches/stdenv-updates/; revision=10465 --- pkgs/development/libraries/dbus-glib/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/dbus-glib/default.nix b/pkgs/development/libraries/dbus-glib/default.nix index 2476ba4fabd5..9a9851521b47 100644 --- a/pkgs/development/libraries/dbus-glib/default.nix +++ b/pkgs/development/libraries/dbus-glib/default.nix @@ -6,9 +6,10 @@ stdenv.mkDerivation rec { url = "${meta.homepage}/releases/dbus-glib/${name}.tar.gz"; sha256 = "1qmbnd9xgg7vahlfywd8sfd9yqhx8jdyczz3cshfsd4qc76xhw78"; }; - inherit dbus glib; - buildInputs = [pkgconfig gettext glib expat]; - propagatedBuildInputs = [dbus.libs]; + buildInputs = [pkgconfig expat gettext]; + propagatedBuildInputs = [dbus.libs glib]; + configureFlags = "--enable-shared --disable-static"; + passthru = { inherit dbus glib; }; meta = { homepage = http://dbus.freedesktop.org; From e0d1a176805470e2ae717eb08b7fc3fdabbd22f6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:42:36 +0000 Subject: [PATCH 210/320] dbus: fixed a typo svn path=/nixpkgs/branches/stdenv-updates/; revision=10466 --- pkgs/development/libraries/dbus/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix index 04f08be8853b..98fb6c682b1a 100644 --- a/pkgs/development/libraries/dbus/default.nix +++ b/pkgs/development/libraries/dbus/default.nix @@ -21,7 +21,7 @@ in rec { name = "dbus-tools-" + version; inherit src configureFlags; buildInputs = [pkgconfig expat libs] - ++ if useX11 then [libX11 libICE libSM] else []; + ++ (if useX11 then [libX11 libICE libSM] else []); postConfigure = "cd tools"; NIX_LDFLAGS = "-ldbus-1"; From c0496c041343219ad4e4333c2687a4122ee1dd94 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sat, 2 Feb 2008 20:42:55 +0000 Subject: [PATCH 211/320] X.Org: added dbus, hal; removed unused gettext svn path=/nixpkgs/branches/stdenv-updates/; revision=10467 --- pkgs/servers/x11/xorg/default.nix | 18 ++++++++---------- .../x11/xorg/generate-expr-from-tarballs.pl | 13 ++++++------- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/pkgs/servers/x11/xorg/default.nix b/pkgs/servers/x11/xorg/default.nix index 0fc27acbc1f6..9ce0ce47bc82 100644 --- a/pkgs/servers/x11/xorg/default.nix +++ b/pkgs/servers/x11/xorg/default.nix @@ -1,8 +1,5 @@ # This is a generated file. Do not edit! -{ stdenv, fetchurl, pkgconfig, freetype, fontconfig -, libxslt, expat, libdrm, libpng, zlib, perl, mesa, mesaHeaders -, xkeyboard_config, gettext -}: +args: with args; rec { @@ -883,8 +880,9 @@ rec { url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/libXpm-3.5.7.tar.bz2; sha256 = "1aibr6y6hnlgc7m1a1y5s1qx7863praq4pdp0xrpkc75gkk1lw34"; }; - buildInputs = [pkgconfig gettext libX11 libXext xextproto xproto libXt ]; - }) // {inherit gettext libX11 libXext xextproto xproto libXt ;}; + buildInputs = [pkgconfig libX11 libXext xextproto xproto libXt ]; + patchPhase = "sed -i '/USE_GETTEXT_TRUE/d' sxpm/Makefile.in cxpm/Makefile.in"; + }) // {inherit libX11 libXext xextproto xproto libXt ;}; libXprintAppUtil = (stdenv.mkDerivation { name = "libXprintAppUtil-1.0.1"; @@ -1283,7 +1281,7 @@ rec { url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/setxkbmap-1.0.4.tar.bz2; sha256 = "1b1brw1v98q2rqhr5x7f8mr3clxq62nw5175gpamg5s172916nwv"; }; - buildInputs = [pkgconfig libX11 libxkbfile ]; postInstall = "ensureDir $out/share; ln -sfn ${xkeyboard_config}/etc/X11 $out/share/X11"; + buildInputs = [pkgconfig libX11 libxkbfile ]; postInstall = "ensureDir $out/share; ln -sfn ${xkeyboard_config}/etc/X11 $out/share/X11"; }) // {inherit libX11 libxkbfile ;}; showfont = (stdenv.mkDerivation { @@ -1744,7 +1742,7 @@ rec { sha256 = "15avwy8isbqagzcdj20ngqajl22k40pssfx7vjirhrqyyq19fiwb"; }; preBuild = " - sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c + sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c "; buildInputs = [pkgconfig inputproto kbproto randrproto xorgserver xproto ]; }) // {inherit inputproto kbproto randrproto xorgserver xproto ;}; @@ -2716,8 +2714,8 @@ rec { url = http://mirror.switch.ch/ftp/mirror/X11/pub/X11R7.3/src/everything/xorg-server-1.4.tar.bz2; sha256 = "1hpbq0bl1jkq84gvksp0xzbbrwwgl0wz2wakf11p2hld6bgl5cai"; }; - buildInputs = [pkgconfig pixman renderproto bigreqsproto compositeproto damageproto libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ]; mesaSrc = mesa.src; x11BuildHook = ./xorgserver.sh; patches = [./xorgserver-dri-path.patch ./xorgserver-xkbcomp-path.patch ./xorgserver-xkb-leds.patch ]; - }) // {inherit pixman renderproto bigreqsproto compositeproto damageproto libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ;}; + buildInputs = [pkgconfig pixman renderproto bigreqsproto compositeproto damageproto dbus.libs libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto hal inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ]; mesaSrc = mesa.src; x11BuildHook = ./xorgserver.sh; patches = [./xorgserver-dri-path.patch ./xorgserver-xkbcomp-path.patch ./xorgserver-xkb-leds.patch ]; + }) // {inherit pixman renderproto bigreqsproto compositeproto damageproto libdmx dmxproto evieext fixesproto fontcacheproto libfontenc fontsproto freetype glproto hal inputproto kbproto libdrm mkfontdir mkfontscale perl printproto randrproto recordproto resourceproto scrnsaverproto trapproto videoproto libX11 libXau libXaw xcmiscproto libXdmcp libXext xextproto xf86bigfontproto xf86dgaproto xf86driproto xf86miscproto xf86vidmodeproto libXfixes libXfont libXi xineramaproto libxkbfile libxkbui libXmu libXpm xproto libXrender libXres libXt xtrans libXtst libXxf86misc libXxf86vm zlib ;}; xorgsgmldoctools = (stdenv.mkDerivation { name = "xorg-sgml-doctools-1.2"; diff --git a/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl b/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl index d68944bf71a2..7fb122330441 100755 --- a/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl +++ b/pkgs/servers/x11/xorg/generate-expr-from-tarballs.pl @@ -35,7 +35,8 @@ $pcMap{"mkfontscale"} = "mkfontscale"; $pcMap{"mkfontdir"} = "mkfontdir"; $pcMap{"bdftopcf"} = "bdftopcf"; $pcMap{"libxslt"} = "libxslt"; -$pcMap{"gettext"} = "gettext"; +$pcMap{"dbus-1"} = "dbus"; +$pcMap{"hal"} = "hal"; $pcMap{"\$PIXMAN"} = "pixman"; $pcMap{"\$RENDERPROTO"} = "renderproto"; @@ -56,6 +57,8 @@ $extraAttrs{"xf86inputevdev"} = " sed -e '/motion_history_proc/d; /history_size/d;' -i src/*.c \";"; +$extraAttrs{"libXpm"} = " + patchPhase = \"sed -i '/USE_GETTEXT_TRUE/d' sxpm/Makefile.in cxpm/Makefile.in\";"; my $downloadCache = "./download-cache"; $ENV{'NIX_DOWNLOAD_CACHE'} = $downloadCache; @@ -112,7 +115,7 @@ while (<>) { my $file; { local $/; - open FOO, "cd '$tmpDir'/* && cat configure.ac |"; + open FOO, "cd '$tmpDir'/* && grep -v '^ *#' configure.ac |"; $file = ; close FOO; } @@ -184,7 +187,6 @@ while (<>) { push @requires, "zlib" if $pkg =~ /xorgserver/; push @requires, "xf86bigfontproto" if $pkg =~ /xorgserver/; push @requires, "libxslt" if $pkg =~ /libxcb/; - push @requires, "gettext" if $pkg =~ /libXpm/; print "REQUIRES @requires => $pkg\n"; $pkgRequires{$pkg} = \@requires; @@ -200,10 +202,7 @@ open OUT, ">default2.nix"; print OUT ""; print OUT < Date: Sat, 2 Feb 2008 20:43:11 +0000 Subject: [PATCH 212/320] gnome-vfs: added hal, ssl and samba svn path=/nixpkgs/branches/stdenv-updates/; revision=10468 --- pkgs/desktops/gnome/default.nix | 10 ++-------- pkgs/desktops/gnome/gnome-vfs.nix | 7 ++----- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/pkgs/desktops/gnome/default.nix b/pkgs/desktops/gnome/default.nix index a3f8d4a9c052..014a99b674ae 100644 --- a/pkgs/desktops/gnome/default.nix +++ b/pkgs/desktops/gnome/default.nix @@ -1,12 +1,6 @@ # todo audiofile is also part of the gnome platform. Move it to this collection? -{ stdenv, fetchurl, pkgconfig, audiofile -, flex, bison, popt, perl, zlib, libxml2, libxslt -, perlXMLParser, docbook_xml_dtd_42, docbook_xml_dtd_412 -, gettext, x11, libtiff, libjpeg -, libpng, gtkLibs, xlibs, bzip2, libcm, python, dbus_glib, ncurses -, which, libxml2Python, iconnamingutils -}: +args: with args; assert dbus_glib.glib == gtkLibs.glib; @@ -57,7 +51,7 @@ rec { gnomevfs = import ./gnome-vfs.nix { inherit fetchurl stdenv gnome pkgconfig perl libxml2 popt - perlXMLParser gettext bzip2 dbus_glib; + perlXMLParser gettext bzip2 dbus_glib openssl hal samba fam; input = platform.gnomevfs; }; diff --git a/pkgs/desktops/gnome/gnome-vfs.nix b/pkgs/desktops/gnome/gnome-vfs.nix index b374ad4d94d5..24b99fb3b832 100644 --- a/pkgs/desktops/gnome/gnome-vfs.nix +++ b/pkgs/desktops/gnome/gnome-vfs.nix @@ -1,14 +1,11 @@ -{ input, stdenv, fetchurl, gnome, pkgconfig, perl, libxml2 -, popt, perlXMLParser, gettext, bzip2, dbus_glib -}: +args: with args; stdenv.mkDerivation { inherit (input) name src; buildInputs = [ pkgconfig perl gnome.glib libxml2 gnome.GConf gnome.libbonobo gnome.gnomemimedata popt perlXMLParser gettext bzip2 - dbus_glib + dbus_glib hal openssl samba fam ]; patches = [./no-kerberos.patch]; - configureFlags = "--disable-hal"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 110c8cf713d7..ddde745fe458 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4930,7 +4930,7 @@ rec { perl perlXMLParser docbook_xml_dtd_42 docbook_xml_dtd_412 gettext x11 libtiff libjpeg libpng gtkLibs xlibs bzip2 libcm python dbus_glib ncurses which libxml2Python - iconnamingutils; + iconnamingutils openssl hal samba fam; }); kdelibs = import ../desktops/kde/kdelibs { From cb4d31fcf9f5707c7a93734234df681e115f043f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:16:20 +0000 Subject: [PATCH 213/320] Removed old (2.2 and 2.4) gtk-libs svn path=/nixpkgs/branches/stdenv-updates/; revision=10471 --- .../libraries/gtk-libs-2.2/atk/default.nix | 13 ----------- .../libraries/gtk-libs-2.2/default.nix | 23 ------------------- .../libraries/gtk-libs-2.2/glib/default.nix | 12 ---------- .../libraries/gtk-libs-2.2/gtk+/default.nix | 21 ----------------- .../libraries/gtk-libs-2.2/pango/default.nix | 14 ----------- .../libraries/gtk-libs-2.4/atk/default.nix | 13 ----------- .../libraries/gtk-libs-2.4/default.nix | 23 ------------------- .../libraries/gtk-libs-2.4/glib/default.nix | 12 ---------- .../libraries/gtk-libs-2.4/gtk+/default.nix | 21 ----------------- .../libraries/gtk-libs-2.4/pango/default.nix | 14 ----------- pkgs/top-level/all-packages.nix | 10 -------- 11 files changed, 176 deletions(-) delete mode 100644 pkgs/development/libraries/gtk-libs-2.2/atk/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.2/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.2/glib/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.2/pango/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.4/atk/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.4/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.4/glib/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs-2.4/pango/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.2/atk/default.nix b/pkgs/development/libraries/gtk-libs-2.2/atk/default.nix deleted file mode 100644 index 1089f571099e..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.2/atk/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, pkgconfig, glib, perl}: - -assert pkgconfig != null && glib != null && perl != null; - -stdenv.mkDerivation { - name = "atk-1.2.4"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.2/atk-1.2.4.tar.bz2; - md5 = "2d6d50df31abe0e8892b5d3e7676a02d"; - }; - buildInputs = [pkgconfig perl]; - propagatedBuildInputs = [glib]; -} diff --git a/pkgs/development/libraries/gtk-libs-2.2/default.nix b/pkgs/development/libraries/gtk-libs-2.2/default.nix deleted file mode 100644 index dc01a534d814..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.2/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, gettext, perl, x11 -, libtiff, libjpeg, libpng}: - -rec { - - glib = (import ./glib) { - inherit fetchurl stdenv pkgconfig gettext perl; - }; - - atk = (import ./atk) { - inherit fetchurl stdenv pkgconfig glib perl; - }; - - pango = (import ./pango) { - inherit fetchurl stdenv pkgconfig glib x11; - }; - - gtk = (import ./gtk+) { - inherit fetchurl stdenv pkgconfig glib atk pango perl - libtiff libjpeg libpng x11; - }; - -} diff --git a/pkgs/development/libraries/gtk-libs-2.2/glib/default.nix b/pkgs/development/libraries/gtk-libs-2.2/glib/default.nix deleted file mode 100644 index 22d01d0d86f6..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.2/glib/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, pkgconfig, gettext, perl}: - -assert pkgconfig != null && gettext != null && perl != null; - -stdenv.mkDerivation { - name = "glib-2.2.3"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.2/glib-2.2.3.tar.bz2; - md5 = "aa214a10d873b68ddd67cd9de2ccae55"; - }; - buildInputs = [pkgconfig gettext perl]; -} diff --git a/pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix b/pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix deleted file mode 100644 index e1eef8058035..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.2/gtk+/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, x11, glib, atk -, pango, perl, libtiff, libjpeg, libpng}: - -assert pkgconfig != null && x11 != null && glib != null && atk != null - && pango != null && perl != null && perl != null && libtiff != null - && libjpeg != null && libpng != null; -assert x11.buildClientLibs; -#assert glib == atk.glib; -#assert glib == pango.glib; -#assert x11 == pango.x11; - -stdenv.mkDerivation { - name = "gtk+-2.2.4"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.2/gtk+-2.2.4.tar.bz2; - md5 = "605332199533e73bc6eec481fb4f1671"; - }; - buildInputs = [pkgconfig perl libtiff libjpeg libpng]; - propagatedBuildInputs = [x11 glib atk pango]; - inherit libtiff libjpeg libpng; -} diff --git a/pkgs/development/libraries/gtk-libs-2.2/pango/default.nix b/pkgs/development/libraries/gtk-libs-2.2/pango/default.nix deleted file mode 100644 index 5d5e5184dda7..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.2/pango/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{stdenv, fetchurl, pkgconfig, x11, glib}: - -assert pkgconfig != null && x11 != null && glib != null; -assert x11.buildClientLibs; - -stdenv.mkDerivation { - name = "pango-1.2.5"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.2/pango-1.2.5.tar.bz2; - md5 = "df00fe3e71cd297010f24f439b6c8ee6"; - }; - buildInputs = [pkgconfig]; - propagatedBuildInputs = [x11 glib]; -} diff --git a/pkgs/development/libraries/gtk-libs-2.4/atk/default.nix b/pkgs/development/libraries/gtk-libs-2.4/atk/default.nix deleted file mode 100644 index 095ff32b2aa1..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.4/atk/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, pkgconfig, glib, perl}: - -assert pkgconfig != null && glib != null && perl != null; - -stdenv.mkDerivation { - name = "atk-1.6.1"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.4/atk-1.6.1.tar.bz2; - md5 = "f77be7e128c957bd3056c2e270b5f283"; - }; - buildInputs = [pkgconfig perl]; - propagatedBuildInputs = [glib]; -} diff --git a/pkgs/development/libraries/gtk-libs-2.4/default.nix b/pkgs/development/libraries/gtk-libs-2.4/default.nix deleted file mode 100644 index dc01a534d814..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.4/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, gettext, perl, x11 -, libtiff, libjpeg, libpng}: - -rec { - - glib = (import ./glib) { - inherit fetchurl stdenv pkgconfig gettext perl; - }; - - atk = (import ./atk) { - inherit fetchurl stdenv pkgconfig glib perl; - }; - - pango = (import ./pango) { - inherit fetchurl stdenv pkgconfig glib x11; - }; - - gtk = (import ./gtk+) { - inherit fetchurl stdenv pkgconfig glib atk pango perl - libtiff libjpeg libpng x11; - }; - -} diff --git a/pkgs/development/libraries/gtk-libs-2.4/glib/default.nix b/pkgs/development/libraries/gtk-libs-2.4/glib/default.nix deleted file mode 100644 index 58f91b3f83c5..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.4/glib/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, pkgconfig, gettext, perl}: - -assert pkgconfig != null && gettext != null && perl != null; - -stdenv.mkDerivation { - name = "glib-2.4.7"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.4/glib-2.4.7.tar.bz2; - md5 = "eff6fec89455addf8b0dee5a19e343be"; - }; - buildInputs = [pkgconfig gettext perl]; -} diff --git a/pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix b/pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix deleted file mode 100644 index 56a6e41e7311..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.4/gtk+/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, x11, glib, atk -, pango, perl, libtiff, libjpeg, libpng}: - -assert pkgconfig != null && x11 != null && glib != null && atk != null - && pango != null && perl != null && perl != null && libtiff != null - && libjpeg != null && libpng != null; -assert x11.buildClientLibs; -#assert glib == atk.glib; -#assert glib == pango.glib; -#assert x11 == pango.x11; - -stdenv.mkDerivation { - name = "gtk+-2.4.13"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.4/gtk+-2.4.13.tar.bz2; - md5 = "3a438e1010704b11acaf060c9ba0fd7b"; - }; - buildInputs = [pkgconfig perl libtiff libjpeg libpng]; - propagatedBuildInputs = [x11 glib atk pango]; - inherit libtiff libjpeg libpng; -} diff --git a/pkgs/development/libraries/gtk-libs-2.4/pango/default.nix b/pkgs/development/libraries/gtk-libs-2.4/pango/default.nix deleted file mode 100644 index 986891b98b97..000000000000 --- a/pkgs/development/libraries/gtk-libs-2.4/pango/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{stdenv, fetchurl, pkgconfig, x11, glib}: - -assert pkgconfig != null && x11 != null && glib != null; -assert x11.buildClientLibs; - -stdenv.mkDerivation { - name = "pango-1.4.1"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.4/pango-1.4.1.tar.bz2; - md5 = "39868e0da250fd4c00b2970e4eb84389"; - }; - buildInputs = [pkgconfig]; - propagatedBuildInputs = [x11 glib]; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ddde745fe458..c12d83bf49ca 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2002,16 +2002,6 @@ rec { xineramaSupport = true; }; - gtkLibs22 = import ../development/libraries/gtk-libs-2.2 { - inherit fetchurl stdenv pkgconfig gettext perl x11 - libtiff libjpeg libpng; - }; - - gtkLibs24 = import ../development/libraries/gtk-libs-2.4 { - inherit fetchurl stdenv pkgconfig gettext perl x11 - libtiff libjpeg libpng; - }; - gtkLibs26 = import ../development/libraries/gtk-libs-2.6 { inherit fetchurl stdenv pkgconfig gettext perl x11 libtiff libjpeg libpng; From 702786d80e52333bff5ec962523185275d028fab Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:16:32 +0000 Subject: [PATCH 214/320] Unused dbus_x directory removed svn path=/nixpkgs/branches/stdenv-updates/; revision=10472 --- pkgs/development/libraries/dbus_x/default.nix | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 pkgs/development/libraries/dbus_x/default.nix diff --git a/pkgs/development/libraries/dbus_x/default.nix b/pkgs/development/libraries/dbus_x/default.nix deleted file mode 100644 index dfe3ea0ee7e9..000000000000 --- a/pkgs/development/libraries/dbus_x/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -args: with args; - -stdenv.mkDerivation { - name = "dbus-1.0.2"; - src = fetchurl { - url = http://dbus.freedesktop.org/releases/dbus/dbus-1.0.2.tar.gz; - sha256 = "1jn652zb81mczsx4rdcwrrzj3lfhx9d107zjfnasc4l5yljl204a"; - }; - buildInputs = [pkgconfig expat libX11 libICE libSM]; - - configureFlags = "--with-x --disable-static --localstatedir=/var --with-session-socket-dir=/tmp"; - patchPhase = "sed -e /mkinstalldirs.*localstatedir/d -i bus/Makefile.in"; -} From 0032a3245ea2c58fb0c94d87732de752cec10a95 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:17:07 +0000 Subject: [PATCH 215/320] Moved gtk-libs-x.xx to gtk-libs/x.xx svn path=/nixpkgs/branches/stdenv-updates/; revision=10473 --- .../{gtk-libs-1.x => gtk-libs/1.x}/default.nix | 0 .../1.x}/gdk-pixbuf/default.nix | 0 .../{gtk-libs-1.x => gtk-libs/1.x}/glib/default.nix | 0 .../{gtk-libs-1.x => gtk-libs/1.x}/glib/gcc34.patch | 0 .../{gtk-libs-1.x => gtk-libs/1.x}/gtk+/builder.sh | 0 .../{gtk-libs-1.x => gtk-libs/1.x}/gtk+/default.nix | 0 .../{gtk-libs-2.10 => gtk-libs/2.10}/atk/default.nix | 0 .../{gtk-libs-2.10 => gtk-libs/2.10}/default.nix | 0 .../2.10}/glib/default.nix | 0 .../2.10}/glibmm/default.nix | 0 .../2.10}/gtk+/default.nix | 0 .../2.10}/gtkmm/default.nix | 0 .../2.10}/pango/default.nix | 0 .../{gtk-libs-2.6 => gtk-libs/2.6}/atk/default.nix | 0 .../{gtk-libs-2.6 => gtk-libs/2.6}/default.nix | 0 .../{gtk-libs-2.6 => gtk-libs/2.6}/glib/default.nix | 0 .../2.6}/glibmm/default.nix | 0 .../{gtk-libs-2.6 => gtk-libs/2.6}/gtk+/default.nix | 0 .../{gtk-libs-2.6 => gtk-libs/2.6}/gtkmm/default.nix | 0 .../{gtk-libs-2.6 => gtk-libs/2.6}/pango/default.nix | 0 .../{gtk-libs-2.8 => gtk-libs/2.8}/atk/default.nix | 0 .../{gtk-libs-2.8 => gtk-libs/2.8}/default.nix | 0 .../{gtk-libs-2.8 => gtk-libs/2.8}/glib/default.nix | 0 .../2.8}/glibmm/default.nix | 0 .../{gtk-libs-2.8 => gtk-libs/2.8}/gtk+/default.nix | 0 .../{gtk-libs-2.8 => gtk-libs/2.8}/gtkmm/default.nix | 0 .../{gtk-libs-2.8 => gtk-libs/2.8}/pango/default.nix | 0 pkgs/top-level/all-packages.nix | 12 ++++++------ 28 files changed, 6 insertions(+), 6 deletions(-) rename pkgs/development/libraries/{gtk-libs-1.x => gtk-libs/1.x}/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-1.x => gtk-libs/1.x}/gdk-pixbuf/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-1.x => gtk-libs/1.x}/glib/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-1.x => gtk-libs/1.x}/glib/gcc34.patch (100%) rename pkgs/development/libraries/{gtk-libs-1.x => gtk-libs/1.x}/gtk+/builder.sh (100%) rename pkgs/development/libraries/{gtk-libs-1.x => gtk-libs/1.x}/gtk+/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/atk/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/glib/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/glibmm/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/gtk+/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/gtkmm/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.10 => gtk-libs/2.10}/pango/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/atk/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/glib/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/glibmm/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/gtk+/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/gtkmm/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.6 => gtk-libs/2.6}/pango/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/atk/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/glib/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/glibmm/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/gtk+/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/gtkmm/default.nix (100%) rename pkgs/development/libraries/{gtk-libs-2.8 => gtk-libs/2.8}/pango/default.nix (100%) diff --git a/pkgs/development/libraries/gtk-libs-1.x/default.nix b/pkgs/development/libraries/gtk-libs/1.x/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-1.x/default.nix rename to pkgs/development/libraries/gtk-libs/1.x/default.nix diff --git a/pkgs/development/libraries/gtk-libs-1.x/gdk-pixbuf/default.nix b/pkgs/development/libraries/gtk-libs/1.x/gdk-pixbuf/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-1.x/gdk-pixbuf/default.nix rename to pkgs/development/libraries/gtk-libs/1.x/gdk-pixbuf/default.nix diff --git a/pkgs/development/libraries/gtk-libs-1.x/glib/default.nix b/pkgs/development/libraries/gtk-libs/1.x/glib/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-1.x/glib/default.nix rename to pkgs/development/libraries/gtk-libs/1.x/glib/default.nix diff --git a/pkgs/development/libraries/gtk-libs-1.x/glib/gcc34.patch b/pkgs/development/libraries/gtk-libs/1.x/glib/gcc34.patch similarity index 100% rename from pkgs/development/libraries/gtk-libs-1.x/glib/gcc34.patch rename to pkgs/development/libraries/gtk-libs/1.x/glib/gcc34.patch diff --git a/pkgs/development/libraries/gtk-libs-1.x/gtk+/builder.sh b/pkgs/development/libraries/gtk-libs/1.x/gtk+/builder.sh similarity index 100% rename from pkgs/development/libraries/gtk-libs-1.x/gtk+/builder.sh rename to pkgs/development/libraries/gtk-libs/1.x/gtk+/builder.sh diff --git a/pkgs/development/libraries/gtk-libs-1.x/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/1.x/gtk+/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-1.x/gtk+/default.nix rename to pkgs/development/libraries/gtk-libs/1.x/gtk+/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/atk/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/atk/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/default.nix b/pkgs/development/libraries/gtk-libs/2.10/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/glib/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/glib/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/glibmm/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/gtk+/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/gtkmm/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.10/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.10/pango/default.nix rename to pkgs/development/libraries/gtk-libs/2.10/pango/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.6/atk/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/atk/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/atk/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/default.nix b/pkgs/development/libraries/gtk-libs/2.6/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.6/glib/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/glib/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/glib/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/glibmm/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/gtk+/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/gtkmm/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.6/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.6/pango/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.6/pango/default.nix rename to pkgs/development/libraries/gtk-libs/2.6/pango/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.8/atk/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/atk/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/atk/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/default.nix b/pkgs/development/libraries/gtk-libs/2.8/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.8/glib/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/glib/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/glib/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/glibmm/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/gtk+/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/gtkmm/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix diff --git a/pkgs/development/libraries/gtk-libs-2.8/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.8/pango/default.nix similarity index 100% rename from pkgs/development/libraries/gtk-libs-2.8/pango/default.nix rename to pkgs/development/libraries/gtk-libs/2.8/pango/default.nix diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c12d83bf49ca..f2ead2f6a330 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1951,7 +1951,7 @@ rec { #installLocales = false; }); - glibmm = import ../development/libraries/gtk-libs-2.6/glibmm { + glibmm = import ../development/libraries/gtk-libs/2.6/glibmm { inherit fetchurl stdenv pkgconfig libsigcxx; inherit (gtkLibs26) glib; }; @@ -1991,30 +1991,30 @@ rec { gtkLibs = recurseIntoAttrs gtkLibs210; - gtkLibs1x = import ../development/libraries/gtk-libs-1.x { + gtkLibs1x = import ../development/libraries/gtk-libs/1.x { inherit fetchurl stdenv x11 libtiff libjpeg libpng; }; - gtkLibs210 = import ../development/libraries/gtk-libs-2.10 { + gtkLibs210 = import ../development/libraries/gtk-libs/2.10 { inherit fetchurl stdenv pkgconfig gettext perl x11 libtiff libjpeg libpng cairo; inherit (xlibs) libXinerama libXrandr; xineramaSupport = true; }; - gtkLibs26 = import ../development/libraries/gtk-libs-2.6 { + gtkLibs26 = import ../development/libraries/gtk-libs/2.6 { inherit fetchurl stdenv pkgconfig gettext perl x11 libtiff libjpeg libpng; }; - gtkLibs28 = import ../development/libraries/gtk-libs-2.8 { + gtkLibs28 = import ../development/libraries/gtk-libs/2.8 { inherit fetchurl stdenv pkgconfig gettext perl x11 libtiff libjpeg libpng cairo; inherit (xlibs) libXinerama; xineramaSupport = true; }; - gtkmm = import ../development/libraries/gtk-libs-2.6/gtkmm { + gtkmm = import ../development/libraries/gtk-libs/2.6/gtkmm { inherit fetchurl stdenv pkgconfig libsigcxx; inherit (gtkLibs26) gtk atk; inherit glibmm; From 598199c93d20c2ec16175c43d98bdeb1c064b02d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:17:25 +0000 Subject: [PATCH 216/320] Removed unused gtkLibs28 svn path=/nixpkgs/branches/stdenv-updates/; revision=10474 --- .../libraries/gtk-libs/2.8/atk/default.nix | 13 ---------- .../libraries/gtk-libs/2.8/default.nix | 26 ------------------- .../libraries/gtk-libs/2.8/glib/default.nix | 13 ---------- .../libraries/gtk-libs/2.8/glibmm/default.nix | 12 --------- .../libraries/gtk-libs/2.8/gtk+/default.nix | 22 ---------------- .../libraries/gtk-libs/2.8/gtkmm/default.nix | 12 --------- .../libraries/gtk-libs/2.8/pango/default.nix | 13 ---------- pkgs/top-level/all-packages.nix | 7 ----- 8 files changed, 118 deletions(-) delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/atk/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/glib/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.8/pango/default.nix diff --git a/pkgs/development/libraries/gtk-libs/2.8/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.8/atk/default.nix deleted file mode 100644 index 075375675203..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/atk/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, pkgconfig, glib, perl}: - -assert pkgconfig != null && glib != null && perl != null; - -stdenv.mkDerivation { - name = "atk-1.10.3"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.8/atk-1.10.3.tar.bz2; - md5 = "c84a01fea567b365c0d44b227fead948"; - }; - buildInputs = [pkgconfig perl]; - propagatedBuildInputs = [glib]; -} diff --git a/pkgs/development/libraries/gtk-libs/2.8/default.nix b/pkgs/development/libraries/gtk-libs/2.8/default.nix deleted file mode 100644 index ee5abd562b1e..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/default.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ xineramaSupport ? false -, stdenv, fetchurl, pkgconfig, gettext, perl, x11 -, libtiff, libjpeg, libpng, cairo, libXinerama ? null -}: - -rec { - - glib = (import ./glib) { - inherit fetchurl stdenv pkgconfig gettext perl; - }; - - atk = (import ./atk) { - inherit fetchurl stdenv pkgconfig glib perl; - }; - - pango = (import ./pango) { - inherit fetchurl stdenv pkgconfig glib x11 cairo; - }; - - gtk = (import ./gtk+) { - inherit fetchurl stdenv pkgconfig glib atk pango perl - libtiff libjpeg libpng x11 cairo libXinerama - xineramaSupport; - }; - -} diff --git a/pkgs/development/libraries/gtk-libs/2.8/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.8/glib/default.nix deleted file mode 100644 index f73a1f388f4e..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/glib/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, pkgconfig, gettext, perl}: - -assert pkgconfig != null && gettext != null && perl != null; - -stdenv.mkDerivation { - name = "glib-2.10.3"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/glib/2.10/glib-2.10.3.tar.bz2; - md5 = "87206e721c12d185d17dd9ecd7e30369"; - }; - buildInputs = [pkgconfig perl]; - propagatedBuildInputs = [gettext]; -} diff --git a/pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix deleted file mode 100644 index 957c596fc7b1..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/glibmm/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, pkgconfig, glib, libsigcxx}: - -stdenv.mkDerivation { - name = "glibmm-2.6.4"; - src = fetchurl { - url = http://ftp.gnome.org/pub/GNOME/sources/glibmm/2.6/glibmm-2.6.1.tar.bz2; - md5 = "e37da352bf581503c5866f0231fd4a74"; - }; - - buildInputs = [pkgconfig glib libsigcxx]; -} - diff --git a/pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix deleted file mode 100644 index c5a012d9baaa..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/gtk+/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ xineramaSupport ? false -, stdenv, fetchurl, pkgconfig, x11, glib, atk -, pango, perl, libtiff, libjpeg, libpng, cairo, libXinerama ? null -}: - -assert x11.buildClientLibs; -assert xineramaSupport -> libXinerama != null; - - -stdenv.mkDerivation { - name = "gtk+-2.8.20"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.8/gtk+-2.8.20.tar.bz2; - md5 = "74e7ca98194f1fadfe906e66d763d05d"; - }; - buildInputs = [ - pkgconfig perl libtiff libjpeg libpng cairo - (if xineramaSupport then libXinerama else null) - ]; - propagatedBuildInputs = [x11 glib atk pango]; - inherit libtiff libjpeg libpng; -} diff --git a/pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix deleted file mode 100644 index ebc1e881c471..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/gtkmm/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, gtk, atk, glibmm, libsigcxx}: - -stdenv.mkDerivation { - name = "gtkmm-2.6.4"; - src = fetchurl { - url = http://ftp.gnome.org/pub/GNOME/sources/gtkmm/2.6/gtkmm-2.6.4.tar.bz2; - md5 = "f71d1c4a89c4f9e054400f12a82dec5f"; - }; - - buildInputs = [pkgconfig gtk atk glibmm libsigcxx]; -} - diff --git a/pkgs/development/libraries/gtk-libs/2.8/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.8/pango/default.nix deleted file mode 100644 index 9e3296e00a1c..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.8/pango/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, pkgconfig, x11, glib, cairo}: - -assert x11.buildClientLibs; - -stdenv.mkDerivation { - name = "pango-1.12.4"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/pango/1.12/pango-1.12.4.tar.bz2; - md5 = "8f6749fe961e41dbeed72d1efcd55224"; - }; - buildInputs = [pkgconfig]; - propagatedBuildInputs = [x11 glib cairo]; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f2ead2f6a330..0c5bf3841327 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2007,13 +2007,6 @@ rec { libtiff libjpeg libpng; }; - gtkLibs28 = import ../development/libraries/gtk-libs/2.8 { - inherit fetchurl stdenv pkgconfig gettext perl x11 - libtiff libjpeg libpng cairo; - inherit (xlibs) libXinerama; - xineramaSupport = true; - }; - gtkmm = import ../development/libraries/gtk-libs/2.6/gtkmm { inherit fetchurl stdenv pkgconfig libsigcxx; inherit (gtkLibs26) gtk atk; From 09e96afbdac5971983069b6b47b4cf390406f97f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:17:41 +0000 Subject: [PATCH 217/320] gtk-libs-2.10: other syntax svn path=/nixpkgs/branches/stdenv-updates/; revision=10475 --- .../libraries/gtk-libs/2.10/atk/default.nix | 4 +--- .../libraries/gtk-libs/2.10/default.nix | 24 ++++--------------- .../libraries/gtk-libs/2.10/glib/default.nix | 4 +--- .../gtk-libs/2.10/glibmm/default.nix | 2 +- .../libraries/gtk-libs/2.10/gtk+/default.nix | 9 +------ .../libraries/gtk-libs/2.10/gtkmm/default.nix | 2 +- .../libraries/gtk-libs/2.10/pango/default.nix | 4 +--- 7 files changed, 11 insertions(+), 38 deletions(-) diff --git a/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix index 34d23bc6daaa..1dae480423f8 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/atk/default.nix @@ -1,6 +1,4 @@ -{stdenv, fetchurl, pkgconfig, glib, perl}: - -assert pkgconfig != null && glib != null && perl != null; +args: with args; stdenv.mkDerivation { name = "atk-1.12.4"; diff --git a/pkgs/development/libraries/gtk-libs/2.10/default.nix b/pkgs/development/libraries/gtk-libs/2.10/default.nix index ed5ae35f05d5..f9179226c62d 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/default.nix @@ -1,26 +1,12 @@ -{ xineramaSupport ? false -, stdenv, fetchurl, pkgconfig, gettext, perl, x11 -, libtiff, libjpeg, libpng, cairo, libXinerama ? null, libXrandr -}: +args: with args; rec { - glib = (import ./glib) { - inherit fetchurl stdenv pkgconfig gettext perl; - }; + glib = (import ./glib) args; - atk = (import ./atk) { - inherit fetchurl stdenv pkgconfig glib perl; - }; + atk = (import ./atk) (args // { inherit glib; }); - pango = (import ./pango) { - inherit fetchurl stdenv pkgconfig glib x11 cairo libpng; - }; - - gtk = (import ./gtk+) { - inherit fetchurl stdenv pkgconfig glib atk pango perl - libtiff libjpeg libpng x11 cairo libXinerama - xineramaSupport libXrandr; - }; + pango = (import ./pango) (args // { inherit glib; }); + gtk = (import ./gtk+) (args // { inherit glib atk pango; } ); } diff --git a/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix index b29f6b62f937..9af2ab959b12 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/glib/default.nix @@ -1,6 +1,4 @@ -{stdenv, fetchurl, pkgconfig, gettext, perl}: - -assert pkgconfig != null && gettext != null && perl != null; +args: with args; stdenv.mkDerivation { name = "glib-2.12.13"; # <- sic! gtk 2.10 needs glib 2.12 diff --git a/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix index e1d275b99747..be5f0fdc91fe 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, pkgconfig, glib, libsigcxx}: +args: with args; stdenv.mkDerivation { name = "glibmm-2.12.10"; diff --git a/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix index 474c6499380e..31a2078d670e 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix @@ -1,11 +1,4 @@ -{ xineramaSupport ? false -, stdenv, fetchurl, pkgconfig, x11, glib, atk -, pango, perl, libtiff, libjpeg, libpng, cairo, libXinerama ? null, libXrandr -}: - -assert x11.buildClientLibs; -assert xineramaSupport -> libXinerama != null; - +args: with args; stdenv.mkDerivation { name = "gtk+-2.10.14"; diff --git a/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix index 4f476f73d50e..4fbabb20e194 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix @@ -1,4 +1,4 @@ -{ stdenv, fetchurl, pkgconfig, gtk, atk, glibmm, libsigcxx}: +args: with args; stdenv.mkDerivation { name = "gtkmm-2.10.11"; diff --git a/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix index 25d4aa17e914..87e8b179ba3c 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix @@ -1,6 +1,4 @@ -{stdenv, fetchurl, pkgconfig, x11, glib, cairo, libpng}: - -assert x11.buildClientLibs; +args: with args; stdenv.mkDerivation { name = "pango-1.14.10"; From e7ada570fcebd57d6a02d2e85a836a4b27c9a912 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:17:59 +0000 Subject: [PATCH 218/320] inkscape: nix-expr review, version corrected svn path=/nixpkgs/branches/stdenv-updates/; revision=10476 --- .../graphics/inkscape/default.nix | 33 ++++--------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/pkgs/applications/graphics/inkscape/default.nix b/pkgs/applications/graphics/inkscape/default.nix index dfed92f691eb..b8ff24863300 100644 --- a/pkgs/applications/graphics/inkscape/default.nix +++ b/pkgs/applications/graphics/inkscape/default.nix @@ -1,37 +1,16 @@ -{ stdenv, fetchurl, pkgconfig, - perl, perlXMLParser, - gtk, libXft, fontconfig, - libpng, lcms, - zlib, popt, - boehmgc, - libxml2, libxslt, - glib, - gtkmm, glibmm, libsigcxx, - boost, - gettext -}: +args: with args; -stdenv.mkDerivation { - name = "inkscape-0.45"; +stdenv.mkDerivation rec { + name = "inkscape-0.45.1"; src = fetchurl { - url = mirror://sourceforge/inkscape/inkscape-0.45.1.tar.gz; + url = "mirror://sf/inkscape/${name}.tar.gz"; sha256 = "1y0b9bm8chn6a2ip99dj4dhg0188yn67v571ha0x38wrlmvn4k0d"; }; buildInputs = [ - pkgconfig - perl perlXMLParser - gtk libXft fontconfig - libpng - zlib popt - boehmgc - libxml2 libxslt - glib - gtkmm glibmm libsigcxx - lcms - boost - gettext + pkgconfig perl perlXMLParser gtk libXft fontconfig libpng zlib popt boehmgc + libxml2 libxslt glib gtkmm glibmm libsigcxx lcms boost gettext ]; meta = { From 2ca177e6ae4f7b5d7e11730b93f99fd02653cc13 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:18:15 +0000 Subject: [PATCH 219/320] cairomm added svn path=/nixpkgs/branches/stdenv-updates/; revision=10477 --- pkgs/development/libraries/cairomm/default.nix | 15 +++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 19 insertions(+) create mode 100644 pkgs/development/libraries/cairomm/default.nix diff --git a/pkgs/development/libraries/cairomm/default.nix b/pkgs/development/libraries/cairomm/default.nix new file mode 100644 index 000000000000..a22788c288ec --- /dev/null +++ b/pkgs/development/libraries/cairomm/default.nix @@ -0,0 +1,15 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "cairomm-1.4.6"; + + src = fetchurl { + url = "http://cairographics.org/releases/${name}.tar.gz"; + sha256 = "1zd5pq5jd507w1v994awpsl7m26g4dfl0rwgrxig2823hl3rqmrp"; + }; + + buildInputs = [pkgconfig]; + propagatedBuildInputs = [cairo x11 fontconfig freetype]; + + configureFlags = "--enable-shared --disable-static"; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0c5bf3841327..ec7dbfe1ac16 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1769,6 +1769,10 @@ rec { inherit fetchurl stdenv pkgconfig x11 fontconfig freetype zlib libpng; }; + cairomm = import ../development/libraries/cairomm { + inherit fetchurl stdenv pkgconfig cairo x11 fontconfig freetype; + }; + chmlib = import ../development/libraries/chmlib { inherit fetchurl stdenv; }; From 00af084c1cfd38435daed550afba5d97a4b95321 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:18:37 +0000 Subject: [PATCH 220/320] glibmm and gtkmm moved into gtkLibs svn path=/nixpkgs/branches/stdenv-updates/; revision=10478 --- .../libraries/gtk-libs/2.10/default.nix | 4 ++++ .../gtk-libs/2.10/glibmm/default.nix | 3 ++- .../libraries/gtk-libs/2.10/gtk+/default.nix | 10 ++++------ .../libraries/gtk-libs/2.10/gtkmm/default.nix | 3 ++- .../libraries/gtk-libs/2.10/pango/default.nix | 4 ++-- pkgs/top-level/all-packages.nix | 19 ++++--------------- 6 files changed, 18 insertions(+), 25 deletions(-) diff --git a/pkgs/development/libraries/gtk-libs/2.10/default.nix b/pkgs/development/libraries/gtk-libs/2.10/default.nix index f9179226c62d..0fc77dde6274 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/default.nix @@ -9,4 +9,8 @@ rec { pango = (import ./pango) (args // { inherit glib; }); gtk = (import ./gtk+) (args // { inherit glib atk pango; } ); + + glibmm = (import ./glibmm) (args // { inherit glib; }); + + gtkmm = (import ./gtkmm) (args // { inherit gtk atk glibmm; }); } diff --git a/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix index be5f0fdc91fe..bbdde49b75d0 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/glibmm/default.nix @@ -7,6 +7,7 @@ stdenv.mkDerivation { sha256 = "02rjjdh0f6kafa1sn4y5ykvm4f2qn3yh4kr4lngcv7vzasqn1dr1"; }; - buildInputs = [pkgconfig glib libsigcxx]; + buildInputs = [pkgconfig]; + propagatedBuildInputs = [glib libsigcxx]; } diff --git a/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix index 31a2078d670e..a819c1fc2755 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/gtk+/default.nix @@ -6,10 +6,8 @@ stdenv.mkDerivation { url = ftp://ftp.gtk.org/pub/gtk/v2.10/gtk+-2.10.14.tar.bz2; sha256 = "1qjdx9kdc533dajdy1kv3ssxzh7gz7j7vzgw0ax910q4klil88yh"; }; - buildInputs = [ - pkgconfig perl libtiff libjpeg libpng cairo libXrandr - (if xineramaSupport then libXinerama else null) - ]; - propagatedBuildInputs = [x11 glib atk pango]; - inherit libtiff libjpeg libpng; + buildInputs = [ pkgconfig perl ]; + propagatedBuildInputs = [x11 glib atk pango libtiff libjpeg libpng cairo + libXrandr (if xineramaSupport then libXinerama else null)]; + passthru = { inherit libtiff libjpeg libpng; }; } diff --git a/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix index 4fbabb20e194..9a44e9a6ba22 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/gtkmm/default.nix @@ -7,6 +7,7 @@ stdenv.mkDerivation { sha256 = "1bri9r0k69dmi5xgzrlfllp3adfzhz8dh9zkcvi6sjkgfwi594vx"; }; - buildInputs = [pkgconfig gtk atk glibmm libsigcxx]; + buildInputs = [pkgconfig]; + propagatedBuildInputs = [glibmm gtk atk cairomm]; } diff --git a/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix index 87e8b179ba3c..faf5ffb47240 100644 --- a/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix +++ b/pkgs/development/libraries/gtk-libs/2.10/pango/default.nix @@ -6,6 +6,6 @@ stdenv.mkDerivation { url = ftp://ftp.gtk.org/pub/pango/1.14/pango-1.14.10.tar.bz2; md5 = "e9fc2f8168e74e2fa0aa8238ee0e9c06"; }; - buildInputs = [pkgconfig libpng]; - propagatedBuildInputs = [x11 glib cairo]; + buildInputs = [pkgconfig]; + propagatedBuildInputs = [x11 glib cairo libpng]; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ec7dbfe1ac16..02a12240d133 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1955,11 +1955,6 @@ rec { #installLocales = false; }); - glibmm = import ../development/libraries/gtk-libs/2.6/glibmm { - inherit fetchurl stdenv pkgconfig libsigcxx; - inherit (gtkLibs26) glib; - }; - gmime = import ../development/libraries/gmime { inherit fetchurl stdenv pkgconfig zlib; inherit (gtkLibs) glib; @@ -2001,7 +1996,7 @@ rec { gtkLibs210 = import ../development/libraries/gtk-libs/2.10 { inherit fetchurl stdenv pkgconfig gettext perl x11 - libtiff libjpeg libpng cairo; + libtiff libjpeg libpng cairo libsigcxx cairomm; inherit (xlibs) libXinerama libXrandr; xineramaSupport = true; }; @@ -2011,12 +2006,6 @@ rec { libtiff libjpeg libpng; }; - gtkmm = import ../development/libraries/gtk-libs/2.6/gtkmm { - inherit fetchurl stdenv pkgconfig libsigcxx; - inherit (gtkLibs26) gtk atk; - inherit glibmm; - }; - gtkmozembedsharp = import ../development/libraries/gtkmozembed-sharp { inherit fetchurl stdenv mono pkgconfig monoDLLFixer; inherit (gnome) gtk; @@ -4220,9 +4209,9 @@ rec { inkscape = import ../applications/graphics/inkscape { inherit fetchurl stdenv perl perlXMLParser pkgconfig zlib - popt libxml2 libxslt libpng boehmgc fontconfig gtkmm - glibmm libsigcxx lcms boost gettext; - inherit (gtkLibs) gtk glib; + popt libxml2 libxslt libpng boehmgc fontconfig + libsigcxx lcms boost gettext cairomm; + inherit (gtkLibs) gtk glib glibmm gtkmm; inherit (xlibs) libXft; }; From 465316c02bbc2cfa011f5c38dd2a733545ddc92d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:19:03 +0000 Subject: [PATCH 221/320] gtk-libs-2.6 removed svn path=/nixpkgs/branches/stdenv-updates/; revision=10479 --- .../libraries/gtk-libs/2.6/atk/default.nix | 13 ----------- .../libraries/gtk-libs/2.6/default.nix | 23 ------------------- .../libraries/gtk-libs/2.6/glib/default.nix | 12 ---------- .../libraries/gtk-libs/2.6/glibmm/default.nix | 12 ---------- .../libraries/gtk-libs/2.6/gtk+/default.nix | 21 ----------------- .../libraries/gtk-libs/2.6/gtkmm/default.nix | 12 ---------- .../libraries/gtk-libs/2.6/pango/default.nix | 14 ----------- pkgs/top-level/all-packages.nix | 5 ---- 8 files changed, 112 deletions(-) delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/atk/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/glib/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix delete mode 100644 pkgs/development/libraries/gtk-libs/2.6/pango/default.nix diff --git a/pkgs/development/libraries/gtk-libs/2.6/atk/default.nix b/pkgs/development/libraries/gtk-libs/2.6/atk/default.nix deleted file mode 100644 index 66720d4dbebe..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/atk/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, pkgconfig, glib, perl}: - -assert pkgconfig != null && glib != null && perl != null; - -stdenv.mkDerivation { - name = "atk-1.9.0"; - src = fetchurl { - url = http://nix.cs.uu.nl/dist/tarballs/atk-1.9.0.tar.bz2; - md5 = "7f41bd9c6dcd83c8df391dc1805be653"; - }; - buildInputs = [pkgconfig perl]; - propagatedBuildInputs = [glib]; -} diff --git a/pkgs/development/libraries/gtk-libs/2.6/default.nix b/pkgs/development/libraries/gtk-libs/2.6/default.nix deleted file mode 100644 index dc01a534d814..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, gettext, perl, x11 -, libtiff, libjpeg, libpng}: - -rec { - - glib = (import ./glib) { - inherit fetchurl stdenv pkgconfig gettext perl; - }; - - atk = (import ./atk) { - inherit fetchurl stdenv pkgconfig glib perl; - }; - - pango = (import ./pango) { - inherit fetchurl stdenv pkgconfig glib x11; - }; - - gtk = (import ./gtk+) { - inherit fetchurl stdenv pkgconfig glib atk pango perl - libtiff libjpeg libpng x11; - }; - -} diff --git a/pkgs/development/libraries/gtk-libs/2.6/glib/default.nix b/pkgs/development/libraries/gtk-libs/2.6/glib/default.nix deleted file mode 100644 index 1dc3407a76e8..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/glib/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, pkgconfig, gettext, perl}: - -assert pkgconfig != null && gettext != null && perl != null; - -stdenv.mkDerivation { - name = "glib-2.6.6"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.6/glib-2.6.6.tar.bz2; - md5 = "6e22b0639d314536f23ee118f29b43de"; - }; - buildInputs = [pkgconfig gettext perl]; -} diff --git a/pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix b/pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix deleted file mode 100644 index 957c596fc7b1..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/glibmm/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, pkgconfig, glib, libsigcxx}: - -stdenv.mkDerivation { - name = "glibmm-2.6.4"; - src = fetchurl { - url = http://ftp.gnome.org/pub/GNOME/sources/glibmm/2.6/glibmm-2.6.1.tar.bz2; - md5 = "e37da352bf581503c5866f0231fd4a74"; - }; - - buildInputs = [pkgconfig glib libsigcxx]; -} - diff --git a/pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix b/pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix deleted file mode 100644 index 06e37f070da2..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/gtk+/default.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, x11, glib, atk -, pango, perl, libtiff, libjpeg, libpng}: - -assert pkgconfig != null && x11 != null && glib != null && atk != null - && pango != null && perl != null && perl != null && libtiff != null - && libjpeg != null && libpng != null; -assert x11.buildClientLibs; -#assert glib == atk.glib; -#assert glib == pango.glib; -#assert x11 == pango.x11; - -stdenv.mkDerivation { - name = "gtk+-2.6.10"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.6/gtk+-2.6.10.tar.bz2; - md5 = "520090ef291e35ba93397060e20f5025"; - }; - buildInputs = [pkgconfig perl libtiff libjpeg libpng]; - propagatedBuildInputs = [x11 glib atk pango]; - inherit libtiff libjpeg libpng; -} diff --git a/pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix b/pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix deleted file mode 100644 index ebc1e881c471..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/gtkmm/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ stdenv, fetchurl, pkgconfig, gtk, atk, glibmm, libsigcxx}: - -stdenv.mkDerivation { - name = "gtkmm-2.6.4"; - src = fetchurl { - url = http://ftp.gnome.org/pub/GNOME/sources/gtkmm/2.6/gtkmm-2.6.4.tar.bz2; - md5 = "f71d1c4a89c4f9e054400f12a82dec5f"; - }; - - buildInputs = [pkgconfig gtk atk glibmm libsigcxx]; -} - diff --git a/pkgs/development/libraries/gtk-libs/2.6/pango/default.nix b/pkgs/development/libraries/gtk-libs/2.6/pango/default.nix deleted file mode 100644 index 6b9391e0a0b1..000000000000 --- a/pkgs/development/libraries/gtk-libs/2.6/pango/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{stdenv, fetchurl, pkgconfig, x11, glib}: - -assert pkgconfig != null && x11 != null && glib != null; -assert x11.buildClientLibs; - -stdenv.mkDerivation { - name = "pango-1.8.2"; - src = fetchurl { - url = ftp://ftp.gtk.org/pub/gtk/v2.6/pango-1.8.2.tar.bz2; - md5 = "f5b5da7a173f0566d8217ec112fde993"; - }; - buildInputs = [pkgconfig]; - propagatedBuildInputs = [x11 glib]; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 02a12240d133..c06f6cc3b932 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2001,11 +2001,6 @@ rec { xineramaSupport = true; }; - gtkLibs26 = import ../development/libraries/gtk-libs/2.6 { - inherit fetchurl stdenv pkgconfig gettext perl x11 - libtiff libjpeg libpng; - }; - gtkmozembedsharp = import ../development/libraries/gtkmozembed-sharp { inherit fetchurl stdenv mono pkgconfig monoDLLFixer; inherit (gnome) gtk; From c975a01af39eb14105708f488508a64029145093 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:19:16 +0000 Subject: [PATCH 222/320] useFromStdenv syntax changed svn path=/nixpkgs/branches/stdenv-updates/; revision=10480 --- pkgs/top-level/all-packages.nix | 39 +++++++++++++++++---------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c06f6cc3b932..c81f37ea3f65 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -119,7 +119,8 @@ rec { # inside the set for derivations. recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;}; - useFromStdenv = hasIt: it: alternative: if hasIt then it else alternative; + useFromStdenv = it : alternative : if (builtins.hasAttr it stdenv) then + (builtins.getAttr it stdenv) else alternative; lib = library; @@ -283,7 +284,7 @@ rec { # Allow the stdenv to determine fetchurl, to cater for strange # requirements. - fetchurl = useFromStdenv (stdenv ? fetchurl) stdenv.fetchurl + fetchurl = useFromStdenv "fetchurl" (import ../build-support/fetchurl { inherit stdenv curl; }); @@ -362,7 +363,7 @@ rec { inherit fetchurl stdenv; }; - bzip2 = useFromStdenv (stdenv ? bzip2) stdenv.bzip2 + bzip2 = useFromStdenv "bzip2" (import ../tools/compression/bzip2 { inherit fetchurl stdenv; }); @@ -379,7 +380,7 @@ rec { inherit fetchurl stdenv; }; - coreutils = useFromStdenv (stdenv ? coreutils) stdenv.coreutils + coreutils = useFromStdenv "coreutils" ((if stdenv ? isDietLibC then import ../tools/misc/coreutils-5 else import ../tools/misc/coreutils) @@ -411,7 +412,7 @@ rec { inherit fetchurl stdenv groff nettools coreutils iputils gnused bash; }; - diffutils = useFromStdenv (stdenv ? diffutils) stdenv.diffutils + diffutils = useFromStdenv "diffutils" (import ../tools/text/diffutils { inherit fetchurl stdenv coreutils; }); @@ -442,7 +443,7 @@ rec { qt = qt3; }; - findutils = useFromStdenv (stdenv ? findutils) stdenv.findutils + findutils = useFromStdenv "findutils" (if system == "i686-darwin" then findutils4227 else import ../tools/misc/findutils { inherit fetchurl stdenv coreutils; @@ -466,7 +467,7 @@ rec { libungif libpng libjpeg libtiff libxml2; }; - gawk = useFromStdenv (stdenv ? gawk) stdenv.gawk + gawk = useFromStdenv "gawk" (import ../tools/text/gawk { inherit fetchurl stdenv; }); @@ -488,12 +489,12 @@ rec { inherit (xlibs) libXext; }; - gnugrep = useFromStdenv (stdenv ? gnugrep) stdenv.gnugrep + gnugrep = useFromStdenv "gnugrep" (import ../tools/text/gnugrep { inherit fetchurl stdenv pcre; }); - gnupatch = useFromStdenv (stdenv ? patch) stdenv.patch (import ../tools/text/gnupatch { + gnupatch = useFromStdenv "patch" (import ../tools/text/gnupatch { inherit fetchurl stdenv; }); @@ -517,7 +518,7 @@ rec { x11Support = true; }; - gnused = useFromStdenv (stdenv ? gnused) stdenv.gnused + gnused = useFromStdenv "gnused" (import ../tools/text/gnused { inherit fetchurl stdenv; }); @@ -526,7 +527,7 @@ rec { inherit fetchurl stdenv; }; - gnutar = useFromStdenv (stdenv ? gnutar) stdenv.gnutar + gnutar = useFromStdenv "gnutar" (import ../tools/archivers/gnutar { inherit fetchurl stdenv; }); @@ -557,7 +558,7 @@ rec { inherit (gtkLibs) glib gtk; }; - gzip = useFromStdenv (stdenv ? gzip) stdenv.gzip + gzip = useFromStdenv "gzip" (import ../tools/compression/gzip { inherit fetchurl stdenv; }); @@ -896,7 +897,7 @@ rec { ### SHELLS - bash = lowPrio (useFromStdenv (stdenv ? bash) stdenv.bash + bash = lowPrio (useFromStdenv "bash" (import ../shells/bash { inherit fetchurl stdenv; bison = bison23; @@ -1014,7 +1015,7 @@ rec { profiledCompiler = false; }); - gcc42 = useFromStdenv (stdenv ? gcc) stdenv.gcc (wrapGCC (import ../development/compilers/gcc-4.2 { + gcc42 = useFromStdenv "gcc" (wrapGCC (import ../development/compilers/gcc-4.2 { inherit fetchurl stdenv noSysDirs; profiledCompiler = true; })); @@ -1472,7 +1473,7 @@ rec { # inherit lib fetchurl stdenv flex yacc; #}; - binutils = useFromStdenv (stdenv ? binutils) stdenv.binutils + binutils = useFromStdenv "binutils" (import ../development/tools/misc/binutils { inherit fetchurl stdenv noSysDirs; }); @@ -1526,7 +1527,7 @@ rec { inherit fetchurl stdenv; }; - gnumake = useFromStdenv (stdenv ? gnumake) stdenv.gnumake + gnumake = useFromStdenv "gnumake" (import ../development/tools/build-managers/gnumake { inherit fetchurl stdenv; }); @@ -1600,7 +1601,7 @@ rec { inherit fetchurl stdenv; }; - patchelf = useFromStdenv (stdenv ? patchelf) stdenv.patchelf + patchelf = useFromStdenv "patchelf" (import ../development/tools/misc/patchelf { inherit fetchurl stdenv; }); @@ -1609,7 +1610,7 @@ rec { * pkgconfig is optionally taken from the stdenv to allow bootstrapping * of glib and pkgconfig itself on MinGW. */ - pkgconfig = useFromStdenv (stdenv ? pkgconfig) stdenv.pkgconfig + pkgconfig = useFromStdenv "pkgconfig" (import ../development/tools/misc/pkgconfig { inherit fetchurl stdenv; }); @@ -1949,7 +1950,7 @@ rec { inherit (xlibs) libXmu libXi; }; - glibc = useFromStdenv (stdenv ? glibc) stdenv.glibc + glibc = useFromStdenv "glibc" (import ../development/libraries/glibc-2.7 { inherit fetchurl stdenv kernelHeaders; #installLocales = false; From 900a743888d13dceea0b9b4d3d3e348932dac0c5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 13:19:36 +0000 Subject: [PATCH 223/320] Removed applications/misc/luit: using from xorg svn path=/nixpkgs/branches/stdenv-updates/; revision=10481 --- pkgs/applications/misc/luit/default.nix | 17 ----------------- pkgs/top-level/all-packages.nix | 9 ++------- 2 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 pkgs/applications/misc/luit/default.nix diff --git a/pkgs/applications/misc/luit/default.nix b/pkgs/applications/misc/luit/default.nix deleted file mode 100644 index f27ddc302819..000000000000 --- a/pkgs/applications/misc/luit/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -args: with args; -stdenv.mkDerivation rec { - name = "luit-20060820"; - src = fetchurl { - url = "${meta.homepage}/${name}.tgz"; - sha256 = "0cxf4agl7ky3ip01qi1vzmis8y1ddngbi2fi0q6bzv1jw458rlpi"; - }; - - buildInputs = [libXt zlib pkgconfig libXfont libX11 libfontenc]; - - configureFlags = "--with-locale-alias=${libX11}/share/X11/locale/locale.alias"; - meta = { - description = "Luit is a filter that can be run between an arbitrary - application and a UTF-8 terminal emulator."; - homepage = http://invisible-island.net/luit; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c81f37ea3f65..46d363ae5a9d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4263,11 +4263,6 @@ rec { inherit fetchurl stdenv; }; - luit = import ../applications/misc/luit { - inherit fetchurl stdenv zlib pkgconfig; - inherit (xlibs) libXt libX11 libXfont libfontenc; - }; - lynx = import ../applications/networking/browsers/lynx { inherit fetchurl stdenv ncurses openssl; }; @@ -4746,8 +4741,8 @@ rec { } null; xterm = import ../applications/misc/xterm { - inherit fetchurl stdenv ncurses freetype pkgconfig luit; - inherit (xlibs) libXaw xproto libXt libX11 libSM libICE libXext libXft; + inherit fetchurl stdenv ncurses freetype pkgconfig; + inherit (xlibs) libXaw xproto libXt libX11 libSM libICE libXext libXft luit; }; xlaunch = import ../tools/X11/xlaunch { From b4c440e72e8f81c46c5e8511506ee2de8cb4d321 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 3 Feb 2008 16:42:28 +0000 Subject: [PATCH 224/320] Typo in strigi svn path=/nixpkgs/branches/stdenv-updates/; revision=10485 --- pkgs/desktops/kde-4/support/strigi.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/desktops/kde-4/support/strigi.nix b/pkgs/desktops/kde-4/support/strigi.nix index 75a9ed8c651e..0ed955ed7108 100644 --- a/pkgs/desktops/kde-4/support/strigi.nix +++ b/pkgs/desktops/kde-4/support/strigi.nix @@ -4,6 +4,6 @@ stdenv.mkDerivation { name = "strigi-svn"; src = svnSrc "strigi" "0zmfy7ga4y49hl3rgw8ypqag36k78k2wfkkxka8xskrd249516ha"; CLUCENE_HOME=cluceneCore; - buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus + buildInputs = [ cmake zlib cluceneCore bzip2 libxml2 qt dbus.libs log4cxx stdenv.gcc.libc exiv2 bison cppunit perl ]; } From d3993b18fb8e84677c44ad1b06844564f54a207d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 4 Feb 2008 15:15:06 +0000 Subject: [PATCH 225/320] * GCC 4.2.3. svn path=/nixpkgs/branches/stdenv-updates/; revision=10499 --- pkgs/development/compilers/gcc-4.2/default.nix | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pkgs/development/compilers/gcc-4.2/default.nix b/pkgs/development/compilers/gcc-4.2/default.nix index c763f8262c2b..7fcf7717c5a2 100644 --- a/pkgs/development/compilers/gcc-4.2/default.nix +++ b/pkgs/development/compilers/gcc-4.2/default.nix @@ -8,22 +8,24 @@ assert langC; with import ../../../lib; +let version = "4.2.3"; in + stdenv.mkDerivation { - name = "gcc-4.2.2"; + name = "gcc-${version}"; builder = ./builder.sh; src = optional /*langC*/ true (fetchurl { - url = mirror://gnu/gcc/gcc-4.2.2/gcc-core-4.2.2.tar.bz2; - sha256 = "01hdwd4im2xzg159fk022zqyhlxphqvpmabd25bqb8fjbs2yi80a"; + url = "mirror://gnu/gcc/gcc-${version}/gcc-core-${version}.tar.bz2"; + sha256 = "04y84s46wzy4h44hpacf7vyla7b5zfc1qvdq3myvrhp82cp0bv4r"; }) ++ optional langCC (fetchurl { - url = mirror://gnu/gcc/gcc-4.2.2/gcc-g++-4.2.2.tar.bz2; - sha256 = "04xankxi3bi4gvgv8rq9h6w3bdx59bg9zh0zv6lyw373gy26ygmq"; + url = "mirror://gnu/gcc/gcc-${version}/gcc-g++-${version}.tar.bz2"; + sha256 = "0spzz549fifwv02ym33azzwizl0zkq5m1fgy88ccmcyzmwpgyzfq"; }) ++ optional langF77 (fetchurl { - url = mirror://gnu/gcc/gcc-4.2.2/gcc-fortran-4.2.2.tar.bz2; - sha256 = "1fybl88w0l99cqppx18i6hnq5dsrssx3qd7vr2ybmmk3nfx8pziq"; + url = "mirror://gnu/gcc/gcc-${version}/gcc-fortran-${version}.tar.bz2"; + sha256 = "1l3ww6qymrkcfqlssb41a5fdnh6w2hqk0v2ijx56jgjbdnzawyp0"; }); patches = From 8cd1b893cf5f8f4211378ec6222ce74adf20745e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 6 Feb 2008 13:18:50 +0000 Subject: [PATCH 226/320] * coreutils-6.10, findutils-4.2.32. * Added some meta attributes. svn path=/nixpkgs/branches/stdenv-updates/; revision=10511 --- pkgs/shells/bash/default.nix | 1 + pkgs/tools/archivers/gnutar/default.nix | 7 +++++++ pkgs/tools/compression/gzip/default.nix | 9 ++++++++- pkgs/tools/misc/coreutils/default.nix | 13 +++++++++---- pkgs/tools/misc/findutils/default.nix | 11 ++++++++--- pkgs/tools/text/diffutils/default.nix | 7 +++++++ pkgs/tools/text/gawk/default.nix | 6 ++++++ pkgs/tools/text/gnugrep/default.nix | 7 +++++++ pkgs/tools/text/gnused/default.nix | 7 +++++++ 9 files changed, 60 insertions(+), 8 deletions(-) diff --git a/pkgs/shells/bash/default.nix b/pkgs/shells/bash/default.nix index 9e7090472880..0d5c440a105c 100644 --- a/pkgs/shells/bash/default.nix +++ b/pkgs/shells/bash/default.nix @@ -21,6 +21,7 @@ stdenv.mkDerivation { buildInputs = [bison] ++ stdenv.lib.optional interactive ncurses; meta = { + homepage = http://www.gnu.org/software/bash/; description = "GNU Bourne-Again Shell, the de facto standard shell on Linux" + (if interactive then " (for interactive use)" else ""); diff --git a/pkgs/tools/archivers/gnutar/default.nix b/pkgs/tools/archivers/gnutar/default.nix index 9205612f3bce..7242f32f71c9 100644 --- a/pkgs/tools/archivers/gnutar/default.nix +++ b/pkgs/tools/archivers/gnutar/default.nix @@ -2,9 +2,16 @@ stdenv.mkDerivation { name = "gnutar-1.19"; + src = fetchurl { url = mirror://gnu/tar/tar-1.19.tar.bz2; sha256 = "1d4wh27wlgryz3ld6gp6fn56knh7dmny93bmgixy07kvlxnx9466"; }; + patches = [./implausible.patch]; + + meta = { + homepage = http://www.gnu.org/software/grep/; + description = "GNU implementation of the tar archiver"; + }; } diff --git a/pkgs/tools/compression/gzip/default.nix b/pkgs/tools/compression/gzip/default.nix index 58d6e8b97078..0a2afd053729 100644 --- a/pkgs/tools/compression/gzip/default.nix +++ b/pkgs/tools/compression/gzip/default.nix @@ -2,9 +2,16 @@ stdenv.mkDerivation { name = "gzip-1.3.12"; + src = fetchurl { url = http://ftp.gnu.org/gnu/gzip/gzip-1.3.12.tar.gz; sha256 = "1bw7sm68xjlnlzgcx66hnw80ac1qqyvhw0vw27zilgbzbzh5nmiz"; }; - patches = [./gnulib-futimens.patch]; + + meta = { + homepage = http://www.gzip.org/; + description = "The gzip compression program"; + }; + + patches = [./gnulib-futimens.patch]; } diff --git a/pkgs/tools/misc/coreutils/default.nix b/pkgs/tools/misc/coreutils/default.nix index 770a1dbfbc9a..8292c56f0ea8 100644 --- a/pkgs/tools/misc/coreutils/default.nix +++ b/pkgs/tools/misc/coreutils/default.nix @@ -1,10 +1,15 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "coreutils-6.9"; + name = "coreutils-6.10"; + src = fetchurl { - url = mirror://gnu/coreutils/coreutils-6.9.tar.bz2; - sha256 = "1c4p2kiy4m024qcl1przvphy8vhivf8jvclq6bjm1pjps5d8khl9"; + url = mirror://gnu/coreutils/coreutils-6.10.tar.gz; + sha256 = "0zpbxfl16sq45s53fxw43i9i8lrdcc845714c1j5f84zi13ka08x"; + }; + + meta = { + homepage = http://www.gnu.org/software/coreutils/; + description = "The basic file, shell and text manipulation utilities of the GNU operating system"; }; - patches = [ ./gnulib-futimens.patch ] ; } diff --git a/pkgs/tools/misc/findutils/default.nix b/pkgs/tools/misc/findutils/default.nix index 5aa28d0c451f..acfbf90d9464 100644 --- a/pkgs/tools/misc/findutils/default.nix +++ b/pkgs/tools/misc/findutils/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, coreutils}: stdenv.mkDerivation { - name = "findutils-4.2.31"; + name = "findutils-4.2.32"; src = fetchurl { - url = mirror://gnu/findutils/findutils-4.2.31.tar.gz; - sha256 = "01329mrgg7pc2069hdbcl45jzrzvi94nnv1zf2hcrcx0mj7lplz0"; + url = mirror://gnu/findutils/findutils-4.2.32.tar.gz; + sha256 = "05sj0154kl4mbqg7dcabiaa16snjv2ppfwwhcvl2zyn2yc28igc7"; }; buildInputs = [coreutils]; @@ -12,4 +12,9 @@ stdenv.mkDerivation { # Note: the dietlibc patch is just to get findutils to compile. # The locate command probably won't work though. ++ stdenv.lib.optional (stdenv ? isDietLibC) ./dietlibc-hack.patch; + + meta = { + homepage = http://www.gnu.org/software/findutils/; + description = "The basic directory searching utilities of the GNU operating system"; + }; } diff --git a/pkgs/tools/text/diffutils/default.nix b/pkgs/tools/text/diffutils/default.nix index 3c0d5479ec55..44b7715607c8 100644 --- a/pkgs/tools/text/diffutils/default.nix +++ b/pkgs/tools/text/diffutils/default.nix @@ -2,10 +2,17 @@ stdenv.mkDerivation { name = "diffutils-2.8.1"; + src = fetchurl { url = mirror://gnu/diffutils/diffutils-2.8.1.tar.gz; md5 = "71f9c5ae19b60608f6c7f162da86a428"; }; + /* If no explicit coreutils is given, use the one from stdenv. */ buildInputs = [coreutils]; + + meta = { + homepage = http://www.gnu.org/software/diffutils/diffutils.html; + description = "Commands for showing the differences between files (diff, cmp, etc.)"; + }; } diff --git a/pkgs/tools/text/gawk/default.nix b/pkgs/tools/text/gawk/default.nix index b50b3aa9bd06..10dd08214aff 100644 --- a/pkgs/tools/text/gawk/default.nix +++ b/pkgs/tools/text/gawk/default.nix @@ -2,8 +2,14 @@ stdenv.mkDerivation { name = "gawk-3.1.6"; + src = fetchurl { url = mirror://gnu/gawk/gawk-3.1.6.tar.bz2; sha256 = "0v6ba4hxfiiy3bny5japd3zmzxlh8vdkmswk96yngd6i1dddsgsi"; }; + + meta = { + homepage = http://www.gnu.org/software/gawk/; + description = "GNU implementation of the AWK programming language"; + }; } diff --git a/pkgs/tools/text/gnugrep/default.nix b/pkgs/tools/text/gnugrep/default.nix index 6979e4a1b01d..9b36dad6cfe2 100644 --- a/pkgs/tools/text/gnugrep/default.nix +++ b/pkgs/tools/text/gnugrep/default.nix @@ -2,9 +2,16 @@ stdenv.mkDerivation { name = "gnugrep-2.5.3"; + src = fetchurl { url = http://nix.cs.uu.nl/dist/tarballs/grep-2.5.3-with-info.tar.bz2; sha256 = "0rg9dipksqzbg8v1xalib1n3xkkycc5r1l2gb9cxy1cz3cjip5l8"; }; + buildInputs = [pcre]; + + meta = { + homepage = http://www.gnu.org/software/grep/; + description = "GNU implementation of the Unix grep command"; + }; } diff --git a/pkgs/tools/text/gnused/default.nix b/pkgs/tools/text/gnused/default.nix index c70cf0225706..2425147688b1 100644 --- a/pkgs/tools/text/gnused/default.nix +++ b/pkgs/tools/text/gnused/default.nix @@ -2,10 +2,17 @@ stdenv.mkDerivation { name = "gnused-4.1.5"; + src = fetchurl { url = mirror://gnu/sed/sed-4.1.5.tar.gz; md5 = "7a1cbbbb3341287308e140bd4834c3ba"; }; + # !!! hack: this should go away in gnused > 4.1.5 patches = [./gettext-fix.patch]; + + meta = { + homepage = http://www.gnu.org/software/grep/; + description = "GNU implementation of the Unix sed command"; + }; } From a18e6606c8fbb5648b07841e6f15b1c9ded2f67c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 6 Feb 2008 13:26:27 +0000 Subject: [PATCH 227/320] * Bash 3.2 updated to patch level 33. svn path=/nixpkgs/branches/stdenv-updates/; revision=10512 --- pkgs/shells/bash/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/shells/bash/default.nix b/pkgs/shells/bash/default.nix index 0d5c440a105c..31fa5e77649b 100644 --- a/pkgs/shells/bash/default.nix +++ b/pkgs/shells/bash/default.nix @@ -3,11 +3,11 @@ assert interactive -> ncurses != null; stdenv.mkDerivation { - name = "bash-3.2-p25"; + name = "bash-3.2-p33"; src = fetchurl { - url = http://losser.st-lab.cs.uu.nl/~eelco/dist/bash-3.2-p25.tar.bz2; - sha256 = "1x19z386ysvwk00zigzf3nkv1x1xq4kvyckz9ah8qz65a7626cs4"; + url = http://losser.st-lab.cs.uu.nl/~eelco/dist/bash-3.2-p33.tar.bz2; + sha256 = "11fv73nbcckmm4f1q9cf73754chsgfps9pklwcaj2ryfd5ql9wnb"; }; postInstall = "ln -s bash $out/bin/sh"; From 2d2aef01a5ecdda0356a398c5bf5f31c96916183 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:04 +0000 Subject: [PATCH 228/320] gstreamer moved to development/libraries/gstreamer, base and good plugins added. svn path=/nixpkgs/branches/stdenv-updates/; revision=10515 --- pkgs/applications/audio/GStreamer/default.nix | 13 --------- .../libraries/gstreamer/default.nix | 13 +++++++++ .../gstreamer/gst-plugins-base/0.10.17.nix | 24 +++++++++++++++++ .../gstreamer/gst-plugins-good/0.10.6.nix | 23 ++++++++++++++++ .../gst-plugins-good/tag_defines.patch | 22 +++++++++++++++ .../libraries/gstreamer/gstreamer/0.10.17.nix | 20 ++++++++++++++ pkgs/top-level/all-packages.nix | 27 ++++++++++++------- 7 files changed, 120 insertions(+), 22 deletions(-) delete mode 100644 pkgs/applications/audio/GStreamer/default.nix create mode 100644 pkgs/development/libraries/gstreamer/default.nix create mode 100644 pkgs/development/libraries/gstreamer/gst-plugins-base/0.10.17.nix create mode 100644 pkgs/development/libraries/gstreamer/gst-plugins-good/0.10.6.nix create mode 100644 pkgs/development/libraries/gstreamer/gst-plugins-good/tag_defines.patch create mode 100644 pkgs/development/libraries/gstreamer/gstreamer/0.10.17.nix diff --git a/pkgs/applications/audio/GStreamer/default.nix b/pkgs/applications/audio/GStreamer/default.nix deleted file mode 100644 index 0239b29f7ee2..000000000000 --- a/pkgs/applications/audio/GStreamer/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl, perl -, bison, flex, glib -, pkgconfig, libxml2}: - -stdenv.mkDerivation { - name = "GStreamer-0.10.10"; - src = fetchurl { - url = http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-0.10.10.tar.bz2; - md5 = "6875bf0bd3cf38b9ae1362b9e644e6fc"; - }; - - buildInputs = [perl bison flex glib pkgconfig libxml2]; -} diff --git a/pkgs/development/libraries/gstreamer/default.nix b/pkgs/development/libraries/gstreamer/default.nix new file mode 100644 index 000000000000..678fbdb137a0 --- /dev/null +++ b/pkgs/development/libraries/gstreamer/default.nix @@ -0,0 +1,13 @@ +args: with args; +rec { + gstreamerFun = lib.sumArgs (selectVersion ./gstreamer "0.10.17") args; + gstreamer = gstreamerFun null; + + gstPluginsBaseFun = lib.sumArgs (selectVersion ./gst-plugins-base "0.10.17") + args { inherit gstreamer; }; + gstPluginsBase = gstPluginsBaseFun null; + + gstPluginsGoodFun = lib.sumArgs (selectVersion ./gst-plugins-good "0.10.6") + args { inherit gstPluginsBase; }; + gstPluginsGood = gstPluginsGoodFun null; +} diff --git a/pkgs/development/libraries/gstreamer/gst-plugins-base/0.10.17.nix b/pkgs/development/libraries/gstreamer/gst-plugins-base/0.10.17.nix new file mode 100644 index 000000000000..036134c82c14 --- /dev/null +++ b/pkgs/development/libraries/gstreamer/gst-plugins-base/0.10.17.nix @@ -0,0 +1,24 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "gst-plugins-base-" + version; + + src = fetchurl { + url = "${meta.homepage}/src/gst-plugins-base/${name}.tar.bz2"; + sha256 = "03gpfhdaw7yz83y0wpq966b9dqpvw8v5kpixa1pp4mn7d5bgsb7q"; + }; + + patchPhase = "sed -i 's@/bin/echo@echo@g' configure"; + + configureFlags = "--enable-shared --disable-static"; + +# TODO : v4l, libvisual + propagatedBuildInputs = [gstreamer libX11 libXv libXext alsaLib cdparanoia + gnomevfs libogg libtheora libvorbis freetype pango liboil gtk]; + + buildInputs = [pkgconfig python]; + + meta = { + homepage = http://gstreamer.freedesktop.org; + }; +} diff --git a/pkgs/development/libraries/gstreamer/gst-plugins-good/0.10.6.nix b/pkgs/development/libraries/gstreamer/gst-plugins-good/0.10.6.nix new file mode 100644 index 000000000000..104853307725 --- /dev/null +++ b/pkgs/development/libraries/gstreamer/gst-plugins-good/0.10.6.nix @@ -0,0 +1,23 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "gst-plugins-good-" + version; + + src = fetchurl { + url = "${meta.homepage}/src/gst-plugins-good/${name}.tar.bz2"; + sha256 = "0rid0gjj8nsk0r5yn4bz1xfsbp446r92wc6wp4099hilw6jxd74y"; + }; + + propagatedBuildInputs = [gstPluginsBase aalib cairo flac hal libjpeg + zlib speex libpng libdv libcaca dbus.libs libiec61883 libavc1394 ladspaH + taglib ]; + buildInputs = [pkgconfig]; + + configureFlags = "--enable-shared --disable-static --enable-ladspa"; + + patches = [ ./tag_defines.patch ]; + + meta = { + homepage = http://gstreamer.freedesktop.org; + }; +} diff --git a/pkgs/development/libraries/gstreamer/gst-plugins-good/tag_defines.patch b/pkgs/development/libraries/gstreamer/gst-plugins-good/tag_defines.patch new file mode 100644 index 000000000000..0ece094229b9 --- /dev/null +++ b/pkgs/development/libraries/gstreamer/gst-plugins-good/tag_defines.patch @@ -0,0 +1,22 @@ +diff -Nur gst-plugins-good0.10-0.10.6/ext/taglib/gstid3v2mux.cc gst-plugins-good0.10-0.10.6.new/ext/taglib/gstid3v2mux.cc +--- gst-plugins-good0.10-0.10.6/ext/taglib/gstid3v2mux.cc 2007-06-13 11:21:10.000000000 +0200 ++++ gst-plugins-good0.10-0.10.6.new/ext/taglib/gstid3v2mux.cc 2007-11-24 21:56:04.000000000 +0100 +@@ -532,6 +532,7 @@ + GST_TAG_TITLE, add_text_tag, "TIT2"}, { + GST_TAG_ALBUM, add_text_tag, "TALB"}, { + GST_TAG_COPYRIGHT, add_text_tag, "TCOP"}, { ++ GST_TAG_COMPOSER, add_text_tag, "TCOM"}, { + GST_TAG_GENRE, add_text_tag, "TCON"}, { + GST_TAG_COMMENT, add_comment_tag, ""}, { + GST_TAG_EXTENDED_COMMENT, add_comment_tag, ""}, { +@@ -544,7 +545,9 @@ + GST_TAG_MUSICBRAINZ_ALBUMARTISTID, add_musicbrainz_tag, "\002"}, { + GST_TAG_MUSICBRAINZ_TRMID, add_musicbrainz_tag, "\003"}, { + GST_TAG_MUSICBRAINZ_TRACKID, add_unique_file_id_tag, ""}, { +- GST_TAG_MUSICBRAINZ_SORTNAME, add_text_tag, "TSOP"}, { ++ GST_TAG_ARTIST_SORTNAME, add_text_tag, "TSOP"}, { ++ GST_TAG_ALBUM_SORTNAME, add_text_tag, "TSOA"}, { ++ GST_TAG_TITLE_SORTNAME, add_text_tag, "TSOT"}, { + GST_TAG_TRACK_NUMBER, add_count_or_num_tag, "TRCK"}, { + GST_TAG_TRACK_COUNT, add_count_or_num_tag, "TRCK"}, { + GST_TAG_ALBUM_VOLUME_NUMBER, add_count_or_num_tag, "TPOS"}, { diff --git a/pkgs/development/libraries/gstreamer/gstreamer/0.10.17.nix b/pkgs/development/libraries/gstreamer/gstreamer/0.10.17.nix new file mode 100644 index 000000000000..3508145c22c8 --- /dev/null +++ b/pkgs/development/libraries/gstreamer/gstreamer/0.10.17.nix @@ -0,0 +1,20 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "gstreamer-" + version; + + src = fetchurl { + url = "${meta.homepage}/src/gstreamer/${name}.tar.bz2"; + sha256 = "172nqf6l6mq4r1923bph53xd6h3svha3kkrvy5cald77jgf64a24"; + }; + + buildInputs = [perl bison flex pkgconfig python]; + propagatedBuildInputs = [glib libxml2]; + + configureFlags = "--enable-shared --disable-static --enable-failing-tests + --localstatedir=/var"; + + meta = { + homepage = http://gstreamer.freedesktop.org; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 46d363ae5a9d..8125a35af53a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1970,6 +1970,16 @@ rec { inherit fetchurl stdenv gmp; }; + gst_all = import ../development/libraries/gstreamer { + inherit lib selectVersion stdenv fetchurl perl bison flex pkgconfig libxml2 + python alsaLib cdparanoia libogg libvorbis libtheora freetype liboil + libjpeg zlib speex libpng libdv aalib cairo libcaca flac hal libiec61883 + dbus libavc1394 ladspaH taglib; + inherit (xorg) libX11 libXv libXext; + inherit (gtkLibs) glib pango gtk; + inherit (gnome) gnomevfs; + }; + gnet = import ../development/libraries/gnet { inherit fetchurl stdenv pkgconfig; inherit (gtkLibs) glib; @@ -2554,7 +2564,7 @@ rec { tapioca_qt = import ../development/libraries/tapioca-qt { inherit fetchsvn stdenv cmake telepathy_qt; - qt = qt4; + qt = qt4; }; telepathy_gabble = import ../development/libraries/telepathy-gabble { @@ -3837,6 +3847,8 @@ rec { inherit fetchurl stdenv ncurses; }; + cdparanoia = cdparanoiaIII; + cdparanoiaIII = import ../applications/audio/cdparanoia { inherit fetchurl stdenv; }; @@ -4113,7 +4125,9 @@ rec { }; pidgin = import ../applications/networking/instant-messengers/pidgin { - inherit fetchurl stdenv pkgconfig perl perlXMLParser libxml2 openssl nss gtkspell GStreamer aspell gettext ncurses; + inherit fetchurl stdenv pkgconfig perl perlXMLParser libxml2 openssl nss + gtkspell aspell gettext ncurses; + GStreamer = gst_all.gstreamer; inherit (gtkLibs) gtk; inherit (gnome) startupnotification; inherit (xlibs) libXScrnSaver; @@ -4141,8 +4155,8 @@ rec { }; gnash = assert mesaSupported; import ../applications/video/gnash { - inherit fetchurl stdenv SDL SDL_mixer GStreamer - libogg libxml2 libjpeg mesa libpng; + inherit fetchurl stdenv SDL SDL_mixer libogg libxml2 libjpeg mesa libpng; + GStreamer = gst_all.gstreamer; inherit (xlibs) libX11 libXext libXi libXmu; }; @@ -4161,11 +4175,6 @@ rec { inherit (gtkLibs) gtk; }; - GStreamer = import ../applications/audio/GStreamer { - inherit fetchurl stdenv perl bison flex pkgconfig libxml2; - inherit (gtkLibs) glib; - }; - gv = import ../applications/misc/gv { inherit fetchurl stdenv Xaw3d ghostscriptX; }; From 7c1e5d4200a866d228c32bc243e96235f17a1642 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:15 +0000 Subject: [PATCH 229/320] libdv: more flags svn path=/nixpkgs/branches/stdenv-updates/; revision=10516 --- pkgs/development/libraries/libdv/default.nix | 28 +++++++++++++------- pkgs/top-level/all-packages.nix | 3 ++- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/pkgs/development/libraries/libdv/default.nix b/pkgs/development/libraries/libdv/default.nix index 4b0e05acf98d..cf27bfa5ef1e 100644 --- a/pkgs/development/libraries/libdv/default.nix +++ b/pkgs/development/libraries/libdv/default.nix @@ -1,15 +1,21 @@ args: let edf = args.lib.enableDisableFeature; in ( args.mkDerivationByConfiguration { - flagConfig = { } + flagConfig = { + mandatory = { buildInputs = [ "popt" "pkgconfig" ]; }; + libX11 = { cfgOption = "--with-x11"; buildInputs = "libX11"; }; + no_libX11 = { cfgOption = "--without-x11"; }; + } # TODO! implement flags # I want to get kino and cinelerra working. That's why I don't spend more time on this now // edf "libtool_lock" "libtool_lock" { } #avoid locking (might break parallel builds) // edf "asm" "asm" { } #disable use of architecture specific assembly code - // edf "sdl" "sdl" { } #enable use of SDL for display - // edf "gtk" "gtk" { } #disable use of gtk for display - // edf "xv" "xv" { } #disable use of XVideo extension for display + // edf "SDL" "sdl" { buildInputs = "SDL"; } #enable use of SDL for display + // edf "gtk" "gtk" { buildInputs = "gtk"; } #disable use of gtk for display + // edf "libXv" "xv" { buildInputs = "libXv"; } #disable use of XVideo extension for display // edf "gprof" "gprof" { } #enable compiler options for gprof profiling + // edf "shared" "shared" { } + // edf "static" "static" { } ; extraAttrs = co : { @@ -20,11 +26,13 @@ let edf = args.lib.enableDisableFeature; in sha256 = "1fl96f2xh2slkv1i1ix7kqk576a0ak1d33cylm0mbhm96d0761d3"; }; - meta = { - description = "software decoder for DV format video, as defined by the IEC 61834 and SMPTE 314M standards"; - homepage = http://sourceforge.net/projects/libdv/; - # you can choose one of the following licenses: - license = []; + meta = { + description = "software decoder for DV format video, as defined by the IEC 61834 and SMPTE 314M standards"; + homepage = http://sourceforge.net/projects/libdv/; + # you can choose one of the following licenses: + license = []; + }; }; - }; + optionals = [ "SDL" "gtk" "libXv" "libX11" ]; + defaults = [ "shared" "libtool_lock" ]; } ) args diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8125a35af53a..5ce9ee7eca37 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2154,7 +2154,8 @@ rec { } null; libdv = import ../development/libraries/libdv { - inherit fetchurl stdenv lib mkDerivationByConfiguration; + inherit fetchurl stdenv lib mkDerivationByConfiguration SDL popt pkgconfig; + inherit (xorg) libXv libX11; }; libdrm = import ../development/libraries/libdrm { From 2e3480708ad230cbe2759cedc674c587b5a36354 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:22 +0000 Subject: [PATCH 230/320] liboil, libosip2 and libeXosip2 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10517 --- .../libraries/libeXosip2/3.0.3.nix | 13 ++++++++++++ pkgs/development/libraries/libeXosip2/result | 1 + pkgs/development/libraries/liboil/0.3.12.nix | 20 ++++++++++++++++++ .../libraries/libosip2/3.0.3-2.nix | 12 +++++++++++ pkgs/top-level/all-packages.nix | 21 +++++++++++++++++++ 5 files changed, 67 insertions(+) create mode 100644 pkgs/development/libraries/libeXosip2/3.0.3.nix create mode 120000 pkgs/development/libraries/libeXosip2/result create mode 100644 pkgs/development/libraries/liboil/0.3.12.nix create mode 100644 pkgs/development/libraries/libosip2/3.0.3-2.nix diff --git a/pkgs/development/libraries/libeXosip2/3.0.3.nix b/pkgs/development/libraries/libeXosip2/3.0.3.nix new file mode 100644 index 000000000000..59eed17b417a --- /dev/null +++ b/pkgs/development/libraries/libeXosip2/3.0.3.nix @@ -0,0 +1,13 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "libeXosip2-" + version; + + src = fetchurl { + url = "http://downloa.savannah.nongnu.org/releases/exosip/${name}.tar.gz"; + sha256 = "0jgy2mjq7r4kp8afl8zhymvca6hghp6chv36laiqz4bizcddzvxa"; + }; + + propagatedBuildInputs = [libosip2]; + configureFlags = "--enable-shared --disable-static"; +} diff --git a/pkgs/development/libraries/libeXosip2/result b/pkgs/development/libraries/libeXosip2/result new file mode 120000 index 000000000000..efa7575ab3a8 --- /dev/null +++ b/pkgs/development/libraries/libeXosip2/result @@ -0,0 +1 @@ +/nix/store/kc4kxnsi33x8a5p9xa3kv6w7dhj52w2f-libeXosip2-3.0.3 \ No newline at end of file diff --git a/pkgs/development/libraries/liboil/0.3.12.nix b/pkgs/development/libraries/liboil/0.3.12.nix new file mode 100644 index 000000000000..3e6537530614 --- /dev/null +++ b/pkgs/development/libraries/liboil/0.3.12.nix @@ -0,0 +1,20 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "liboil-" + version; + + src = fetchurl { + url = "${meta.homepage}/liboil/${name}.tar.gz"; + sha256 = "0gdmly9sli1918pnb4ds1g38ipxikn651hdss86mp4qlfb8wvqlv"; + }; + + configureFlags = "--enable-shared --disable-static"; + + buildInputs = [pkgconfig]; + + meta = { + homepage = http://liboil.freedesktop.org; + description = "Liboil is a library of simple functions that are optimized + for various CPUs."; + }; +} diff --git a/pkgs/development/libraries/libosip2/3.0.3-2.nix b/pkgs/development/libraries/libosip2/3.0.3-2.nix new file mode 100644 index 000000000000..f8385807939f --- /dev/null +++ b/pkgs/development/libraries/libosip2/3.0.3-2.nix @@ -0,0 +1,12 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "libosip2-" + version; + + src = fetchurl { + url = "mirror://gnu/osip/${name}.tar.gz"; + sha256 = "0jna6xwc42g1sh91hwzi71875mpazmnsaaq68hjirwldh39qlp69"; + }; + + configureFlags = "--enable-shared --disable-static"; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5ce9ee7eca37..8b6dd327bdd6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2189,6 +2189,13 @@ rec { libextractor = libextractorFun null; + libeXosip2Fun = lib.sumArgs + (selectVersion ../development/libraries/libeXosip2 "3.0.3") { + inherit fetchurl stdenv libosip2; + }; + + libeXosip2 = libeXosip2Fun null; + libgcrypt = import ../development/libraries/libgcrypt { inherit fetchurl stdenv libgpgerror; }; @@ -2253,6 +2260,20 @@ rec { inherit fetchurl stdenv; }; + liboilFun = lib.sumArgs + (selectVersion ../development/libraries/liboil "0.3.12") { + inherit fetchurl stdenv pkgconfig; + }; + + liboil = liboilFun null; + + libosip2Fun = lib.sumArgs + (selectVersion ../development/libraries/libosip2 "3.0.3-2") { + inherit fetchurl stdenv; + }; + + libosip2 = libosip2Fun null; + libotr = import ../development/libraries/libotr { inherit fetchurl stdenv libgcrypt; }; From 503d0bfc6532fb2b487fe0a1c178416389d17ee7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:30 +0000 Subject: [PATCH 231/320] gnome-vfs: propagating GConf svn path=/nixpkgs/branches/stdenv-updates/; revision=10518 --- pkgs/desktops/gnome/gnome-vfs.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/desktops/gnome/gnome-vfs.nix b/pkgs/desktops/gnome/gnome-vfs.nix index 24b99fb3b832..7f1e6a67c713 100644 --- a/pkgs/desktops/gnome/gnome-vfs.nix +++ b/pkgs/desktops/gnome/gnome-vfs.nix @@ -3,9 +3,11 @@ args: with args; stdenv.mkDerivation { inherit (input) name src; buildInputs = [ - pkgconfig perl gnome.glib libxml2 gnome.GConf gnome.libbonobo + pkgconfig perl gnome.glib libxml2 gnome.libbonobo gnome.gnomemimedata popt perlXMLParser gettext bzip2 dbus_glib hal openssl samba fam ]; + + propagatedBuildInputs = [gnome.GConf]; patches = [./no-kerberos.patch]; } From 4086ba92fadd8020ffd108d47b5cd953dfacc2c2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:36 +0000 Subject: [PATCH 232/320] python: --with-wctype-functions svn path=/nixpkgs/branches/stdenv-updates/; revision=10519 --- pkgs/development/interpreters/python/2.5/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/python/2.5/default.nix b/pkgs/development/interpreters/python/2.5/default.nix index 9a84bfa7ff87..161584ee707b 100644 --- a/pkgs/development/interpreters/python/2.5/default.nix +++ b/pkgs/development/interpreters/python/2.5/default.nix @@ -30,7 +30,7 @@ stdenv.mkDerivation { C_INCLUDE_PATH = concatStringsSep ":" (map (p: "${p}/include") buildInputs); LIBRARY_PATH = concatStringsSep ":" (map (p: "${p}/lib") buildInputs); - configureFlags = "--enable-shared"; + configureFlags = "--enable-shared --with-wctype-functions"; preConfigure = " # Purity. From 4f5f90015f3349183e7d23eb81037661a95dd51b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:41 +0000 Subject: [PATCH 233/320] libraw1394: 1.3.0 svn path=/nixpkgs/branches/stdenv-updates/; revision=10520 --- pkgs/development/libraries/libraw1394/default.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/libraw1394/default.nix b/pkgs/development/libraries/libraw1394/default.nix index 8463749fcb3f..af0553d49f78 100644 --- a/pkgs/development/libraries/libraw1394/default.nix +++ b/pkgs/development/libraries/libraw1394/default.nix @@ -1,15 +1,15 @@ args: with args; -stdenv.mkDerivation { - name = "libraw1394-1.2.0"; +stdenv.mkDerivation rec { + name = "libraw1394-1.3.0"; src = fetchurl { - url = "mirror://sourceforge/libraw1394/libraw1394-1.2.0.tar.gz"; - sha256 = "1b9zqqzyz0ihyfvhn135y3wc6vmym5yz21jxj9dp0f09b96gmp0z"; + url = "${meta.homepage}/dl/${name}.tar.gz"; + sha256 = "035mrca9fhg4kq8r1s5yjgzg3vrn1nc3ndy13yg3chhqgx4dzzr0"; }; meta = { description = "library providing direct access to the IEEE 1394 bus through the Linux 1394 subsystem's raw1394 user space interface"; - homepage = "http://wiki.linux1394.org/"; + homepage = "http://wiki.linux1394.org"; license = ["GPL" "LGPL"]; }; } From da2e5a04c06ca7dccbdc465f455e06f47ede7ef6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:46 +0000 Subject: [PATCH 234/320] libiec61883: propagating libraw1394 svn path=/nixpkgs/branches/stdenv-updates/; revision=10521 --- pkgs/development/libraries/libiec61883/default.nix | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/libiec61883/default.nix b/pkgs/development/libraries/libiec61883/default.nix index c4062403d381..6fe199f5b91b 100644 --- a/pkgs/development/libraries/libiec61883/default.nix +++ b/pkgs/development/libraries/libiec61883/default.nix @@ -1,17 +1,18 @@ args: with args; -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "libiec61883-1.1.0"; src = fetchurl { - url = http://www.linux1394.org/dl/libiec61883-1.1.0.tar.gz; + url = "${meta.homepage}/dl/${name}.tar.gz"; sha256 = "09f0ca7bp6lqlz6601gnyl04mfabv0azg49n1cmjyqpzh35cgxkq"; }; - buildInputs = [pkgconfig libraw1394]; + buildInputs = [pkgconfig]; + propagatedBuildInputs = [libraw1394]; meta = { description = "TODO"; - homepage = http://www.linux1394.org/; + homepage = http://www.linux1394.org; license = "LGPL"; }; } From 112024a954e89d38614ce3797b21a56698f34dff Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:51 +0000 Subject: [PATCH 235/320] libavc1394: propagating libraw1394 svn path=/nixpkgs/branches/stdenv-updates/; revision=10522 --- pkgs/development/libraries/libavc1394/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/libavc1394/default.nix b/pkgs/development/libraries/libavc1394/default.nix index 0834c212fe97..672ca202354f 100644 --- a/pkgs/development/libraries/libavc1394/default.nix +++ b/pkgs/development/libraries/libavc1394/default.nix @@ -7,7 +7,8 @@ stdenv.mkDerivation { sha256 = "19i40i3722ilhziknfds3a6w5xzv66fvc68gvbir1p2fvwi6ij93"; }; - buildInputs = [pkgconfig libraw1394]; + buildInputs = [pkgconfig]; + propagatedBuildInputs = [libraw1394]; meta = { description = "programming interface for the 1394 Trade Association AV/C (Audio/Video Control) Digital Interface Command Set"; From 1bd8ddd18ed61ac879bbf20f5682c4abf8abd49a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:00:56 +0000 Subject: [PATCH 236/320] a52dec: nix-expr review, shared build svn path=/nixpkgs/branches/stdenv-updates/; revision=10523 --- pkgs/development/libraries/a52dec/default.nix | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/a52dec/default.nix b/pkgs/development/libraries/a52dec/default.nix index 4a75e11ec304..46dfe38c4556 100644 --- a/pkgs/development/libraries/a52dec/default.nix +++ b/pkgs/development/libraries/a52dec/default.nix @@ -1,9 +1,15 @@ -{stdenv, fetchurl}: +args: with args; -stdenv.mkDerivation { +stdenv.mkDerivation rec { name = "a52dec-0.7.4"; src = fetchurl { - url = http://liba52.sourceforge.net/files/a52dec-0.7.4.tar.gz; - md5 = "caa9f5bc44232dc8aeea773fea56be80"; + url = "${meta.homepage}/files/a52dec-0.7.4.tar.gz"; + sha256 = "0czccp4fcpf2ykp16xcrzdfmnircz1ynhls334q374xknd5747d2"; + }; + + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://liba52.sourceforge.net; }; } From 410197a73477b2cc6d3902e05139bef312c8b6af Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:01:01 +0000 Subject: [PATCH 237/320] ffmpeg: new has, more features svn path=/nixpkgs/branches/stdenv-updates/; revision=10524 --- .../libraries/ffmpeg_svn_snapshot/default.nix | 16 ++++++++-------- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix index 90978eb2908b..5cfb90e48584 100644 --- a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix +++ b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix @@ -1,17 +1,17 @@ -{stdenv, fetchsvn}: +args: with args; stdenv.mkDerivation { name = "ffmpeg-svn-2007-12-04"; src = fetchsvn { url = svn://svn.mplayerhq.hu/ffmpeg/trunk ; rev = "11164"; - #sha256 = "95658455e466aeab5a302ddd6e7b2f79f620d4495012add46028a548e6c364b2"; - sha256 = "c97b0cd791f8408cfc69452ff7afbf00d34b367e493dfbcae830fba99c229189"; + sha256 = "80d3b3311abaf8343b73c711f02d269e8c87991f2c3d0f08e32309d39ad6aa3b"; }; - /*fetchurl { - url = http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2; - sha256 = "040a35f0c004323af14329c09ad3cff8d040e2cf9797d97cde3d9d83d02b4d87"; - };*/ + + propagatedBuildInputs = [ a52dec lame libtheora x11 zlib SDL]; # !!! Hm, what are the legal consequences of --enable-gpl? - configureFlags = "--enable-shared --enable-pp --enable-gpl --disable-ffserver --disable-ffplay"; + configureFlags = "--enable-pthreads --enable-gpl --enable-pp --enable-shared + --disable-static --enable-x11grab --enable-liba52 --enable-libmp3lame + --enable-libtheora --enable-swscaler"; } + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8b6dd327bdd6..cde6b8839334 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1874,7 +1874,7 @@ rec { }; ffmpeg_svn = import ../development/libraries/ffmpeg_svn_snapshot { - inherit fetchsvn stdenv; + inherit fetchsvn stdenv a52dec libtheora x11 lame zlib SDL; }; fftw = import ../development/libraries/fftw { From e281a287b2b0e83cdb6257e03d900f3644a26744 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 19:01:06 +0000 Subject: [PATCH 238/320] vim: now compiles in stdenv-updates (-lutil -lpthread) svn path=/nixpkgs/branches/stdenv-updates/; revision=10525 --- pkgs/applications/editors/vim/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/applications/editors/vim/default.nix b/pkgs/applications/editors/vim/default.nix index 6839f337b6a4..2f1677622a9c 100644 --- a/pkgs/applications/editors/vim/default.nix +++ b/pkgs/applications/editors/vim/default.nix @@ -55,6 +55,8 @@ args.stdenv.mkDerivation { preBuild="touch src/auto/link.sed"; configureFlags = args.lib.condConcat "" configFlags check; + NIX_LDFLAGS = "-lpthread -lutil"; + meta = { description = "The most popular clone of the VI editor"; homepage = http://www.vim.org; From c5fafa326b1e32e8aadb548d45845239cc688da8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Wed, 6 Feb 2008 22:45:59 +0000 Subject: [PATCH 239/320] Alsa: 1.0.16 svn path=/nixpkgs/branches/stdenv-updates/; revision=10531 --- pkgs/os-specific/linux/alsa/1.0.14.nix | 14 ++++++++++++++ pkgs/os-specific/linux/alsa/1.0.16.nix | 15 +++++++++++++++ pkgs/os-specific/linux/alsa/common.nix | 13 +++++++++++++ pkgs/os-specific/linux/alsa/library/default.nix | 13 ------------- pkgs/os-specific/linux/alsa/utils/default.nix | 14 -------------- pkgs/top-level/all-packages.nix | 12 ++++++------ 6 files changed, 48 insertions(+), 33 deletions(-) create mode 100644 pkgs/os-specific/linux/alsa/1.0.14.nix create mode 100644 pkgs/os-specific/linux/alsa/1.0.16.nix create mode 100644 pkgs/os-specific/linux/alsa/common.nix delete mode 100644 pkgs/os-specific/linux/alsa/library/default.nix delete mode 100644 pkgs/os-specific/linux/alsa/utils/default.nix diff --git a/pkgs/os-specific/linux/alsa/1.0.14.nix b/pkgs/os-specific/linux/alsa/1.0.14.nix new file mode 100644 index 000000000000..c7799af559a2 --- /dev/null +++ b/pkgs/os-specific/linux/alsa/1.0.14.nix @@ -0,0 +1,14 @@ +args: with args; + +rec { + alsaLib = (import ./common.nix) { + aName = "lib"; + sha256 = "18xhm53adgss20jnva2nfl9gk46kb5an6ah820pazqn0ykd97rh1"; + } args; + + alsaUtils = (import ./common.nix) { + aName = "utils"; + sha256 = "1jx5bwa8abx7aih4lymx4bnrmyip2yb0rp1mza97wpni1q7n6z9h"; + buildInputs = [alsaLib ncurses gettext]; + } args; +} diff --git a/pkgs/os-specific/linux/alsa/1.0.16.nix b/pkgs/os-specific/linux/alsa/1.0.16.nix new file mode 100644 index 000000000000..01b8bc932dbe --- /dev/null +++ b/pkgs/os-specific/linux/alsa/1.0.16.nix @@ -0,0 +1,15 @@ +args: with args; + +rec { + alsaLib = (import ./common.nix) { + aName = "lib"; + sha256 = "1k96razf5h7blidh5ib54plcrfnbysvwm7vhvz28b4cy20zv66df"; + } args; + + alsaUtils = (import ./common.nix) { + aName = "utils"; + sha256 = "10bj4pw2hp3f6qzkxsrlnvsxjlpqha696fn10gzdnnzym072skzb"; + buildInputs = [alsaLib ncurses gettext]; + } args; +} +0rb5rc8ppxjrpg5bcb5fw24v7gm5983zphz9762i8is5q2hbcqif diff --git a/pkgs/os-specific/linux/alsa/common.nix b/pkgs/os-specific/linux/alsa/common.nix new file mode 100644 index 000000000000..218a4b91c8e7 --- /dev/null +++ b/pkgs/os-specific/linux/alsa/common.nix @@ -0,0 +1,13 @@ +{aName, sha256, buildInputs ? [], propagatedBuildInputs ? [] } : +args: with args; stdenv.mkDerivation rec { + name = "alsa-" + aName + "-" + version; + + src = fetchurl { + url = "ftp://ftp.alsa-project.org/pub/" + aName + "/" + name + ".tar.bz2"; + inherit sha256; + }; + + inherit buildInputs propagatedBuildInputs; + + meta = { homepage = http://www.alsa-project.org; }; +} diff --git a/pkgs/os-specific/linux/alsa/library/default.nix b/pkgs/os-specific/linux/alsa/library/default.nix deleted file mode 100644 index 6ab8143c7ab6..000000000000 --- a/pkgs/os-specific/linux/alsa/library/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{stdenv, fetchurl}: - -stdenv.mkDerivation { - name = "alsa-lib-1.0.14"; - src = fetchurl { - url = ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.14.tar.bz2; - sha256 = "18xhm53adgss20jnva2nfl9gk46kb5an6ah820pazqn0ykd97rh1"; - }; - - meta = { - homepage = http://www.alsa-project.org; - }; -} diff --git a/pkgs/os-specific/linux/alsa/utils/default.nix b/pkgs/os-specific/linux/alsa/utils/default.nix deleted file mode 100644 index 658d8d8e9f74..000000000000 --- a/pkgs/os-specific/linux/alsa/utils/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{stdenv, fetchurl, alsaLib, ncurses, gettext}: - -stdenv.mkDerivation { - name = "alsa-utils-1.0.14"; - src = fetchurl { - url = ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.14.tar.bz2; - sha256 = "1jx5bwa8abx7aih4lymx4bnrmyip2yb0rp1mza97wpni1q7n6z9h"; - }; - buildInputs = [alsaLib ncurses gettext]; - - meta = { - homepage = http://www.alsa-project.org; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cde6b8839334..991d2149a371 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3228,10 +3228,14 @@ rec { }; */ - alsaLib = import ../os-specific/linux/alsa/library { - inherit fetchurl stdenv; + alsaFun = lib.sumArgs (selectVersion ../os-specific/linux/alsa "1.0.16") { + inherit fetchurl stdenv ncurses gettext; }; + alsa = alsaFun null; + + alsaLib = alsa.alsaLib; + atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros "r3122") { inherit fetchurl stdenv builderDefs; }; @@ -3248,10 +3252,6 @@ rec { inherit fetchurl stdenv autoconf automake; }; - alsaUtils = import ../os-specific/linux/alsa/utils { - inherit fetchurl stdenv alsaLib ncurses gettext; - }; - cramfsswap = import ../os-specific/linux/cramfsswap { inherit fetchurl stdenv zlib; }; From 4b881c08e3f93d1a22864478b4e0c1cfa8fbedfe Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 7 Feb 2008 09:43:10 +0000 Subject: [PATCH 240/320] alsaUtils = alsa.alsaUtils added: services need this svn path=/nixpkgs/branches/stdenv-updates/; revision=10535 --- pkgs/top-level/all-packages.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 991d2149a371..5a9daf8f55dc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2387,6 +2387,13 @@ rec { inherit fetchurl stdenv; }; + mediastreamerFun = lib.sumArgs (selectVersion + ../development/libraries/mediastreamer "2.2.0cvs") { + inherit fetchcvs stdenv; + }; + + mediastreamer = mediastreamerFun null; + mesaSupported = system == "i686-linux" || system == "x86_64-linux"; @@ -3236,6 +3243,8 @@ rec { alsaLib = alsa.alsaLib; + alsaUtils = alsa.alsaUtils; + atherosFun = lib.sumArgs (selectVersion ../os-specific/linux/atheros "r3122") { inherit fetchurl stdenv builderDefs; }; From dd184fa88dde3df5f3510a31bff0c09f2564da6a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 7 Feb 2008 10:43:05 +0000 Subject: [PATCH 241/320] erlang and libsigsegv upgraded svn path=/nixpkgs/branches/stdenv-updates/; revision=10537 --- pkgs/development/interpreters/erlang/R11B-5.nix | 12 ++++++++++++ pkgs/development/interpreters/erlang/R12B-1.nix | 12 ++++++++++++ pkgs/development/interpreters/erlang/builder.sh | 14 -------------- pkgs/development/interpreters/erlang/default.nix | 11 ----------- pkgs/development/libraries/libsigsegv/2.5.nix | 14 ++++++++++++++ pkgs/development/libraries/libsigsegv/default.nix | 9 --------- pkgs/top-level/all-packages.nix | 4 ++-- 7 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 pkgs/development/interpreters/erlang/R11B-5.nix create mode 100644 pkgs/development/interpreters/erlang/R12B-1.nix delete mode 100644 pkgs/development/interpreters/erlang/builder.sh delete mode 100644 pkgs/development/interpreters/erlang/default.nix create mode 100644 pkgs/development/libraries/libsigsegv/2.5.nix delete mode 100644 pkgs/development/libraries/libsigsegv/default.nix diff --git a/pkgs/development/interpreters/erlang/R11B-5.nix b/pkgs/development/interpreters/erlang/R11B-5.nix new file mode 100644 index 000000000000..68cc3b5f2b5d --- /dev/null +++ b/pkgs/development/interpreters/erlang/R11B-5.nix @@ -0,0 +1,12 @@ +args: with args; + +stdenv.mkDerivation { + name = "erlang-" + version; + src = fetchurl { + url = http://www.erlang.org/download/otp_src_R11B-5.tar.gz; + md5 = "96acec41da87d6ee0ef18e1aab36ffdd"; + }; + buildInputs = [perl gnum4 ncurses openssl]; + patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure erts/configure ''; + configureFlags = "--with-ssl=${openssl}"; +} diff --git a/pkgs/development/interpreters/erlang/R12B-1.nix b/pkgs/development/interpreters/erlang/R12B-1.nix new file mode 100644 index 000000000000..37ebdbf6ab8a --- /dev/null +++ b/pkgs/development/interpreters/erlang/R12B-1.nix @@ -0,0 +1,12 @@ +args: with args; + +stdenv.mkDerivation { + name = "erlang-" + version; + src = fetchurl { + url = "http://www.erlang.org/download/otp_src_" + version + ".tar.gz"; + sha256 = "16w7snhbjzwiywppsp04yiy2bkncff8pf4i643kqzkqx578jhaqz"; + }; + buildInputs = [perl gnum4 ncurses openssl]; + patchPhase = '' sed -i "s@/bin/rm@rm@" lib/odbc/configure erts/configure ''; + configureFlags = "--with-ssl=${openssl}"; +} diff --git a/pkgs/development/interpreters/erlang/builder.sh b/pkgs/development/interpreters/erlang/builder.sh deleted file mode 100644 index 43c964d88b80..000000000000 --- a/pkgs/development/interpreters/erlang/builder.sh +++ /dev/null @@ -1,14 +0,0 @@ -buildInputs="$perl $gnum4 $ncurses $openssl" - -source $stdenv/setup - -tar xfvz $src -cd otp_src_* - -# Fix some hard coded paths to /bin/rm -sed -i -e "s|/bin/rm|rm|" lib/odbc/configure -sed -i -e "s|/bin/rm|rm|" erts/configure - -./configure --prefix=$out --with-ssl=$openssl -make -make install diff --git a/pkgs/development/interpreters/erlang/default.nix b/pkgs/development/interpreters/erlang/default.nix deleted file mode 100644 index f8caed7f329b..000000000000 --- a/pkgs/development/interpreters/erlang/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{stdenv, fetchurl, perl, ncurses, gnum4, openssl}: - -stdenv.mkDerivation { - name = "erlang-R11B-5"; - builder = ./builder.sh; - src = fetchurl { - url = http://www.erlang.org/download/otp_src_R11B-5.tar.gz; - md5 = "96acec41da87d6ee0ef18e1aab36ffdd"; - }; - inherit perl ncurses gnum4 openssl; -} diff --git a/pkgs/development/libraries/libsigsegv/2.5.nix b/pkgs/development/libraries/libsigsegv/2.5.nix new file mode 100644 index 000000000000..11f69753dc80 --- /dev/null +++ b/pkgs/development/libraries/libsigsegv/2.5.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "libsigsegv-" + version; + src = fetchurl { + url = "mirror://gnu/libsigsegv/${name}.tar.gz"; + sha256 = "0fvcsq9msi63vrbpvks6mqkrnls5cfy6bzww063sqhk2h49vsyyg"; + }; + + meta = { + homepage = http://libsigsegv.sf.net; + description = "A library for handling page faults in user mode"; + }; +} diff --git a/pkgs/development/libraries/libsigsegv/default.nix b/pkgs/development/libraries/libsigsegv/default.nix deleted file mode 100644 index 07d4bdaacc80..000000000000 --- a/pkgs/development/libraries/libsigsegv/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{stdenv, fetchurl}: - -stdenv.mkDerivation { - name = "libsigsegv-2.1"; - src = fetchurl { - url = mirror://gnu/libsigsegv/libsigsegv-2.1.tar.gz; - md5 = "6d75ca3fede5fbfd72a78bc918d9e174"; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5a9daf8f55dc..74f99062525e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1306,7 +1306,7 @@ rec { inherit (xlibs) libX11 libXau libXt; }; - erlang = import ../development/interpreters/erlang { + erlang = selectVersion ../development/interpreters/erlang "R12B-1" { inherit fetchurl perl gnum4 ncurses openssl stdenv; }; @@ -2296,7 +2296,7 @@ rec { inherit fetchurl stdenv pkgconfig; }; - libsigsegv = import ../development/libraries/libsigsegv { + libsigsegv = selectVersion ../development/libraries/libsigsegv "2.5" { inherit fetchurl stdenv; }; From ef9c7dccc09c8612b4cd9c92d83911833bbb0407 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 7 Feb 2008 11:07:21 +0000 Subject: [PATCH 242/320] typo in alsa svn path=/nixpkgs/branches/stdenv-updates/; revision=10538 --- pkgs/os-specific/linux/alsa/1.0.16.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/pkgs/os-specific/linux/alsa/1.0.16.nix b/pkgs/os-specific/linux/alsa/1.0.16.nix index 01b8bc932dbe..5cac6f268aa2 100644 --- a/pkgs/os-specific/linux/alsa/1.0.16.nix +++ b/pkgs/os-specific/linux/alsa/1.0.16.nix @@ -12,4 +12,3 @@ rec { buildInputs = [alsaLib ncurses gettext]; } args; } -0rb5rc8ppxjrpg5bcb5fw24v7gm5983zphz9762i8is5q2hbcqif From 58d6720165d7c14f47152e6962a24cea62ba3eda Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Thu, 7 Feb 2008 11:07:27 +0000 Subject: [PATCH 243/320] added mediastreamer (failed to build now) svn path=/nixpkgs/branches/stdenv-updates/; revision=10539 --- .../mediastreamer/2.2.0-cvs20080207.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 5 +++-- 2 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix diff --git a/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix b/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix new file mode 100644 index 000000000000..221954aa3fe2 --- /dev/null +++ b/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix @@ -0,0 +1,16 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "mediastreamer-" + version; + +# This url is not related to mediastreamer. fetchcvs doesn't work on my laptop, +# so I've created cvs snapshot and put it to my server. + src = fetchurl { + url = "http://www.loegria.net/misc/" + name + ".tar.bz2"; + sha256 = "1nmvyqh4x3nsw4qbj754jwagj9ia183kvp8valdr7m44my0sw5p1"; + }; + + buildInputs = [automake]; + + preConfigure = "./autogen.sh"; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 74f99062525e..6d6add025c8a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2387,9 +2387,10 @@ rec { inherit fetchurl stdenv; }; +#failed to build mediastreamerFun = lib.sumArgs (selectVersion - ../development/libraries/mediastreamer "2.2.0cvs") { - inherit fetchcvs stdenv; + ../development/libraries/mediastreamer "2.2.0-cvs20080207") { + inherit fetchurl stdenv automake; }; mediastreamer = mediastreamerFun null; From c264b316b1eeaadd15ee0e7ba11b78a2deff88c9 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Fri, 8 Feb 2008 10:39:20 +0000 Subject: [PATCH 244/320] Some updates. Now I can build system at least with some settings. svn path=/nixpkgs/branches/stdenv-updates/; revision=10551 --- pkgs/development/libraries/dbus/default.nix | 4 ++++ pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/development/libraries/dbus/default.nix b/pkgs/development/libraries/dbus/default.nix index 98fb6c682b1a..b60705f21f68 100644 --- a/pkgs/development/libraries/dbus/default.nix +++ b/pkgs/development/libraries/dbus/default.nix @@ -35,4 +35,8 @@ in rec { # I'm too lazy to separate daemon and libs now. daemon = libs; + + # FIXME TODO + # After merger it will be better to correct upstart-job instead. + outPath = daemon.outPath; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 6d6add025c8a..0f211793b1a7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1347,7 +1347,7 @@ rec { php = (import ../development/interpreters/php_configurable) { inherit mkDerivationByConfiguration stdenv mysql lib; inherit fetchurl flex bison apacheHttpd; # gettext; - inherit libxml2; + inherit libxml2 automake autoconf postgresql; flags = [ "xdebug" "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ]; }; From 4df190c703f8779fcbdc32df19e6fbed36654e99 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Sun, 10 Feb 2008 16:44:43 +0000 Subject: [PATCH 245/320] Various fixes and updates to build that all. svn path=/nixpkgs/branches/stdenv-updates/; revision=10568 --- .../ImageMagick/{default.nix => 6.3.8-5.nix} | 4 +-- .../development/tools/misc/elfutils/0.127.nix | 1 + .../misc/ltrace/{default.nix => 0.5-3deb.nix} | 15 ++++++-- pkgs/lib/default.nix | 4 +++ pkgs/os-specific/linux/dvd+rw-tools/7.0.nix | 3 +- pkgs/servers/xmpp/ejabberd/builder.sh | 2 +- pkgs/servers/xmpp/ejabberd/default.nix | 6 ++-- pkgs/tools/compression/lzma/default.nix | 18 ++++++++++ pkgs/tools/misc/dosfstools/2.11deb.nix | 33 ++++++++++++++++++ pkgs/tools/networking/nc6/1.0.nix | 25 ++++++++++++++ pkgs/tools/networking/socat/1.6.0.0.nix | 34 +++++++++++++++++++ pkgs/tools/networking/socat/2.0.0-b1.nix | 25 ++++++++++++++ pkgs/top-level/all-packages.nix | 29 ++++++++++++++-- 13 files changed, 187 insertions(+), 12 deletions(-) rename pkgs/applications/graphics/ImageMagick/{default.nix => 6.3.8-5.nix} (81%) rename pkgs/development/tools/misc/ltrace/{default.nix => 0.5-3deb.nix} (54%) create mode 100644 pkgs/tools/compression/lzma/default.nix create mode 100644 pkgs/tools/misc/dosfstools/2.11deb.nix create mode 100644 pkgs/tools/networking/nc6/1.0.nix create mode 100644 pkgs/tools/networking/socat/1.6.0.0.nix create mode 100644 pkgs/tools/networking/socat/2.0.0-b1.nix diff --git a/pkgs/applications/graphics/ImageMagick/default.nix b/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix similarity index 81% rename from pkgs/applications/graphics/ImageMagick/default.nix rename to pkgs/applications/graphics/ImageMagick/6.3.8-5.nix index 67df0c7b3c44..87e40ae74a12 100644 --- a/pkgs/applications/graphics/ImageMagick/default.nix +++ b/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix @@ -3,8 +3,8 @@ stdenv.mkDerivation (rec { name = "ImageMagick-6.3.8-2"; src = fetchurl { - url = "ftp://ftp.imagemagick.org/pub/ImageMagick/${name}.tar.bz2"; - sha256 = "05bp10dzpw691w8hdw0n2xr65194xgslpqhzf4xbxla7gz8clnmg"; + url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.8-5.tar.bz2; + sha256 = "0lsvi2z5b5zam6yvjzsyjpa36rg1c0kczifz73k9b4v8zz9a9vfl"; }; configureFlags = " --with-dots --with-gs-font-dir="+ ghostscript + diff --git a/pkgs/development/tools/misc/elfutils/0.127.nix b/pkgs/development/tools/misc/elfutils/0.127.nix index 2337ebbdbd08..efa91fa637c0 100644 --- a/pkgs/development/tools/misc/elfutils/0.127.nix +++ b/pkgs/development/tools/misc/elfutils/0.127.nix @@ -6,4 +6,5 @@ stdenv.mkDerivation { url = http://nix.cs.uu.nl/dist/tarballs/elfutils-0.127.tar.gz; sha256 = "12n3h5r3c24a6l2wxz0w2dqq072bvgms0dzckivrwp5vdn22lpdv"; }; + preBuild = "sed -e 's/-Werror//' -i */Makefile "; } diff --git a/pkgs/development/tools/misc/ltrace/default.nix b/pkgs/development/tools/misc/ltrace/0.5-3deb.nix similarity index 54% rename from pkgs/development/tools/misc/ltrace/default.nix rename to pkgs/development/tools/misc/ltrace/0.5-3deb.nix index cd77984ded6c..bff3e6a8fbc4 100644 --- a/pkgs/development/tools/misc/ltrace/default.nix +++ b/pkgs/development/tools/misc/ltrace/0.5-3deb.nix @@ -1,5 +1,10 @@ -args : with args; - let localDefs = builderDefs { +args : with args; let + patch = fetchurl { + url = ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.5-3.diff.gz; + sha256 = "0rin25si7117wld5bc7vf3d73c5k9ph3zach7cbg9h9vvz376c26"; + }; + localDefs = with (builderDefs {src="";} null); + builderDefs { src = /* put a fetchurl here */ fetchurl { url = ftp://ftp.debian.org/debian/pool/main/l/ltrace/ltrace_0.5.orig.tar.gz; @@ -11,6 +16,10 @@ args : with args; goSrcDir = " cd ltrace-*; "; + preBuild = FullDepEntry ('' + gunzip < ${patch} | patch -Np1 + sed -e s@-Werror@@ -i Makefile.in + '')["minInit" "doUnpack"]; } null; /* null is a terminator for sumArgs */ in with localDefs; let @@ -21,7 +30,7 @@ in stdenv.mkDerivation rec { name = "ltrace-0.5"; builder = writeScript (name + "-builder") - (textClosure localDefs [preConfigure doConfigure doMakeInstall doForceShare]); + (textClosure localDefs [preBuild preConfigure doConfigure doMakeInstall doForceShare]); meta = { description = " Library call tracer. diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 87d08ab7c1c0..1018d9609078 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -176,6 +176,10 @@ rec { # (e.g. `++ optional (system == "i686-linux") flashplayer'). optional = cond: elem: if cond then [elem] else []; + + # Return a list or an empty list, dependening on a boolean value. + optionals = cond: elems: if cond then elems else []; + # Return a list of integers from `first' up to and including `last'. range = first: last: diff --git a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix index 658bdbf55fa2..091f0c910f6d 100644 --- a/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix +++ b/pkgs/os-specific/linux/dvd+rw-tools/7.0.nix @@ -13,13 +13,14 @@ args : with args; in with localDefs; let preBuild = FullDepEntry (" + sed -e '1i#define INT_MAX __INT_MAX__' -i *.c *.cpp sed -e 's@/usr/local@'\$out'@g' -i Makefile.m4 Makefile ") [minInit doUnpack]; in stdenv.mkDerivation rec { name = "dvd+rw-tools-"+version; builder = writeScript (name + "-builder") - (textClosure localDefs [preBuild doMakeInstall doForceShare doPropagate]); + (textClosure localDefs [preBuild addInputs (doDump "0") doMakeInstall doForceShare doPropagate]); meta = { description = " DVD+RW tools. diff --git a/pkgs/servers/xmpp/ejabberd/builder.sh b/pkgs/servers/xmpp/ejabberd/builder.sh index 4abf8da0682e..3d746054f384 100644 --- a/pkgs/servers/xmpp/ejabberd/builder.sh +++ b/pkgs/servers/xmpp/ejabberd/builder.sh @@ -3,7 +3,7 @@ buildInputs="$expat $erlang $zlib $openssl" source $stdenv/setup tar xfvz $src -cd $name/src +cd ejabberd-*/src ./configure --prefix=$out make make install diff --git a/pkgs/servers/xmpp/ejabberd/default.nix b/pkgs/servers/xmpp/ejabberd/default.nix index 8ce1b0912de2..c3c88337c5d4 100644 --- a/pkgs/servers/xmpp/ejabberd/default.nix +++ b/pkgs/servers/xmpp/ejabberd/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, expat, erlang, zlib, openssl}: stdenv.mkDerivation { - name = "ejabberd-1.1.4"; + name = "ejabberd-2.0.0-rc1"; builder = ./builder.sh; src = fetchurl { - url = http://www.process-one.net/downloads/ejabberd/1.1.4/ejabberd-1.1.4.tar.gz; - md5 = "65e9cd346f11a28afbacfe1d7be3a33b"; + url = http://www.process-one.net/downloads/ejabberd/2.0.0-rc1/ejabberd-2.0.0-rc1.tar.gz; + sha256 = "02ldssvsy0rkvxm96018fpk5lc3iqgkrira9cw1ym2snas0k8nzy"; }; inherit expat erlang zlib openssl; } diff --git a/pkgs/tools/compression/lzma/default.nix b/pkgs/tools/compression/lzma/default.nix new file mode 100644 index 000000000000..67ef9c3add12 --- /dev/null +++ b/pkgs/tools/compression/lzma/default.nix @@ -0,0 +1,18 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "lzma-4.32.5"; + + src = fetchurl { + url = http://tukaani.org/lzma/lzma-4.32.5.tar.gz; + sha256 = "1mqy1biy46gqky6n3gyr2l395hwckh0xyi96waz5p5x8mgp372ch"; + }; + + CFLAGS = "-O3"; + CXXFLAGS = "-O3"; + + meta = { + homepage = http://tukaani.org/lzma/; + description = "The LZMA compression program"; + }; +} diff --git a/pkgs/tools/misc/dosfstools/2.11deb.nix b/pkgs/tools/misc/dosfstools/2.11deb.nix new file mode 100644 index 000000000000..13f327dcff56 --- /dev/null +++ b/pkgs/tools/misc/dosfstools/2.11deb.nix @@ -0,0 +1,33 @@ +args : with args; with builderDefs {src="";} null; + let patch = + fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_2.11-2.3.diff.gz; + sha256 = "0bzjhpgg4ih6c76ax8byis9vxgkr2c7bbbshqrkfq8j7ar48n5ld"; + }; + localDefs = builderDefs (rec { + src = /* put a fetchurl here */ + fetchurl { + url = http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_2.11.orig.tar.gz; + sha256 = "1154k0y04npblgac81p4pcmglilk1ldrqll4hvbrwgcb7096vb0f"; + }; + preBuild = FullDepEntry ('' + gunzip < ${patch} | patch -Np1 + '')["minInit" "doUnpack"]; + + buildInputs = []; + configureFlags = []; + makeFlags = " PREFIX=$out "; + }) null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "dosfstools-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [preBuild "doMakeInstall" doForceShare doPropagate]); + meta = { + description = " + Dosfstools - utilities for vfat file system. +"; + homepage = "http://sixpak.org/dosfstools/dosfstools-2.8vb2.tar.gz"; + }; +} diff --git a/pkgs/tools/networking/nc6/1.0.nix b/pkgs/tools/networking/nc6/1.0.nix new file mode 100644 index 000000000000..1a28e3b0cadb --- /dev/null +++ b/pkgs/tools/networking/nc6/1.0.nix @@ -0,0 +1,25 @@ +args : with args; with builderDefs {src="";} null; +let localDefs = builderDefs (rec { + src = /* put a fetchurl here */ + fetchurl { + url = ftp://ftp.deepspace6.net/pub/ds6/sources/nc6/nc6-1.0.tar.bz2; + sha256 = "01l28zv1yal58ilfnz6albdzqqxzsx3a58vmc14r9gv0bahffdgb"; + }; + + buildInputs = []; + configureFlags = []; + }) null; /* null is a terminator for sumArgs */ +in with localDefs; +stdenv.mkDerivation rec { + name = "nc6-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + nc6 - one more netcat, IPv6 support included. + "; + homepage = "http://www.deepspace6.net/projects/netcat6.html"; + }; +} + diff --git a/pkgs/tools/networking/socat/1.6.0.0.nix b/pkgs/tools/networking/socat/1.6.0.0.nix new file mode 100644 index 000000000000..1e176f477205 --- /dev/null +++ b/pkgs/tools/networking/socat/1.6.0.0.nix @@ -0,0 +1,34 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs (rec { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.dest-unreach.org/socat/download/socat-1.6.0.0.tar.bz2; + sha256 = "1j01iazwfr63q71cfcfzrdz8digqlg3ldhlbb72yl5mn9awr0w0m"; + }; + patches = [ + (fetchurl { + url = http://www.dest-unreach.org/socat/contrib/socat-servicenames.patch; + sha256 = "1r8zd6mk257n01i34i5syxl2k6fr35nlr7bqs9sfc79irjl62z66"; + }) + (fetchurl { + url = http://www.dest-unreach.org/socat/contrib/socat-maxfds.patch.gz; + sha256 = "0fsn0k0qsrdbjbhj09a6kxfsxb7yhxs4cad26znd9naginsj7pxa"; + }) + ]; + buildInputs = [openssl]; + configureFlags = []; + }) null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "socat-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [doPatch doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Socat, one more analogue of netcat, but not mimicking it. + 'netcat++' (extended design, new implementation) +"; + homepage = "http://www.dest-unreach.org/socat/"; + }; +} diff --git a/pkgs/tools/networking/socat/2.0.0-b1.nix b/pkgs/tools/networking/socat/2.0.0-b1.nix new file mode 100644 index 000000000000..5fb3fee78791 --- /dev/null +++ b/pkgs/tools/networking/socat/2.0.0-b1.nix @@ -0,0 +1,25 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs (rec { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.dest-unreach.org/socat/download/socat-2.0.0-b1.tar.bz2; + sha256 = "0ybd5fw22icl10r33k987rskh9gvysm1jph90a1pfdjj57cy44fk"; + }; + + buildInputs = [openssl]; + configureFlags = []; + }) null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "socat-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [doPatch doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + Socat, one more analogue of netcat, but not mimicking it. + 'netcat++' (extended design, new implementation) +"; + homepage = "http://www.dest-unreach.org/socat/"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0f211793b1a7..eaf25a2a0699 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -417,6 +417,13 @@ rec { inherit fetchurl stdenv coreutils; }); + dosfstoolsFun = lib.sumArgs (selectVersion ../tools/misc/dosfstools "2.11deb") + { + inherit builderDefs; + }; + + dosfstools = dosfstoolsFun null; + ed = import ../tools/text/ed { inherit fetchurl stdenv; }; @@ -612,6 +619,10 @@ rec { inherit fetchurl stdenv ghc tetex polytable; }; + lzma = import ../tools/compression/lzma { + inherit fetchurl stdenv; + }; + man = import ../tools/misc/man { inherit fetchurl stdenv db4 groff; }; @@ -639,6 +650,12 @@ rec { inherit fetchurl stdenv gettext; }; + nc6Fun = lib.sumArgs (selectVersion ../tools/networking/nc6 "1.0") { + inherit builderDefs; + }; + + nc6 = nc6Fun null; + ncat = import ../tools/networking/ncat { inherit fetchurl stdenv openssl; }; @@ -763,6 +780,12 @@ rec { smbfsFuse = smbfsFuseFun null; + socatFun = lib.sumArgs (selectVersion ../tools/networking/socat "1.6.0.0") { + inherit builderDefs openssl; + }; + + socat = socatFun null; + sudo = import ../tools/security/sudo { inherit fetchurl stdenv coreutils pam; }; @@ -1588,11 +1611,13 @@ rec { inherit fetchurl stdenv; }; - ltrace = import ../development/tools/misc/ltrace { + ltraceFun = lib.sumArgs (selectVersion ../development/tools/misc/ltrace "0.5-3deb") { inherit fetchurl stdenv builderDefs stringsWithDeps lib; elfutils = elfutilsFun {version = "0.127";} null; }; + ltrace = ltraceFun null; + mk = import ../development/tools/build-managers/mk { inherit fetchurl stdenv; }; @@ -4228,7 +4253,7 @@ rec { inherit (xlibs) libX11 libXft libXext libXinerama libXrandr; }; - imagemagickFun = lib.sumArgs (import ../applications/graphics/ImageMagick) { + imagemagickFun = lib.sumArgs (selectVersion ../applications/graphics/ImageMagick "6.3.8-5" ) { inherit stdenv fetchurl libtool; }; From a4512a4a49fbb1190a2bdf56bb1f5b1f590117e1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:34:49 +0000 Subject: [PATCH 246/320] Mediastreamer: compilable svn path=/nixpkgs/branches/stdenv-updates/; revision=10569 --- .../mediastreamer/2.2.0-cvs20080207.nix | 10 +++- .../libraries/mediastreamer/h264.patch | 12 +++++ .../libraries/mediastreamer/plugins.patch | 49 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 +- 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 pkgs/development/libraries/mediastreamer/h264.patch create mode 100644 pkgs/development/libraries/mediastreamer/plugins.patch diff --git a/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix b/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix index 221954aa3fe2..6391ce4dd6ca 100644 --- a/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix +++ b/pkgs/development/libraries/mediastreamer/2.2.0-cvs20080207.nix @@ -1,7 +1,7 @@ args: with args; stdenv.mkDerivation rec { - name = "mediastreamer-" + version; + name = "mediastreamer2-" + version; # This url is not related to mediastreamer. fetchcvs doesn't work on my laptop, # so I've created cvs snapshot and put it to my server. @@ -10,7 +10,13 @@ stdenv.mkDerivation rec { sha256 = "1nmvyqh4x3nsw4qbj754jwagj9ia183kvp8valdr7m44my0sw5p1"; }; - buildInputs = [automake]; + buildInputs = [automake libtool autoconf pkgconfig]; + + propagatedBuildInputs = [alsaLib ffmpeg speex ortp]; preConfigure = "./autogen.sh"; + + patches = [ ./h264.patch ./plugins.patch ]; + + configureFlags = "--enable-external-ortp --enable-shared --disable-static"; } diff --git a/pkgs/development/libraries/mediastreamer/h264.patch b/pkgs/development/libraries/mediastreamer/h264.patch new file mode 100644 index 000000000000..0c6dc9e91092 --- /dev/null +++ b/pkgs/development/libraries/mediastreamer/h264.patch @@ -0,0 +1,12 @@ +diff --git a/tests/mediastream.c b/tests/mediastream.c +index 12e1605..cdc8cd1 100644 +--- a/tests/mediastream.c ++++ b/tests/mediastream.c +@@ -144,7 +144,6 @@ int main(int argc, char * argv[]) + rtp_profile_set_payload(&av_profile,97,&payload_type_theora); + rtp_profile_set_payload(&av_profile,99,&payload_type_mp4v); + rtp_profile_set_payload(&av_profile,100,&payload_type_x_snow); +- rtp_profile_set_payload(&av_profile,102,&payload_type_h264); + #endif + if (argc<4) { + printf(usage); diff --git a/pkgs/development/libraries/mediastreamer/plugins.patch b/pkgs/development/libraries/mediastreamer/plugins.patch new file mode 100644 index 000000000000..e82b85035f08 --- /dev/null +++ b/pkgs/development/libraries/mediastreamer/plugins.patch @@ -0,0 +1,49 @@ +diff --git a/src/mscommon.c b/src/mscommon.c +index 1a12b2f..2399444 100644 +--- a/src/mscommon.c ++++ b/src/mscommon.c +@@ -428,6 +428,7 @@ static MSSndCardDesc * ms_snd_card_descs[]={ + void ms_init(){ + int i; + MSSndCardManager *cm; ++ char *ms_plugin_path; + + #ifdef __APPLE__ + NSApplicationLoad(); +@@ -451,7 +452,35 @@ void ms_init(){ + } + + ms_message("Loading plugins"); +- ms_load_plugins(PACKAGE_PLUGINS_DIR); ++ ms_plugin_path = getenv("MS_PLUGIN_PATH"); ++ do ++ { ++ if (!ms_plugin_path) ++ { ++ ms_load_plugins(PACKAGE_PLUGINS_DIR); ++ break; ++ } ++ char *dup_plugins_path = strdup (ms_plugin_path); ++ char *cur_plugins_dir = dup_plugins_path; ++ if (!dup_plugins_path) ++ { ++ ms_message("Failed to duplicate plugins path, not loading plugins"); ++ break; ++ } ++ while (1) ++ { ++ char *next_delimiter = strchr(cur_plugins_dir, ":"); ++ if (next_delimiter) ++ next_delimiter[0] = '\0'; ++ ms_load_plugins(cur_plugins_dir); ++ if (!next_delimiter) ++ break; ++ cur_plugins_dir = next_delimiter + 1; ++ } ++ free(dup_plugins_path); ++ } ++ while (0); ++ + ms_message("ms_init() done"); + } + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index eaf25a2a0699..b38ecf372982 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2415,7 +2415,9 @@ rec { #failed to build mediastreamerFun = lib.sumArgs (selectVersion ../development/libraries/mediastreamer "2.2.0-cvs20080207") { - inherit fetchurl stdenv automake; + inherit fetchurl stdenv automake libtool autoconf alsaLib pkgconfig speex + ortp; + ffmpeg = ffmpeg_svn; }; mediastreamer = mediastreamerFun null; From f4eda0eb22aa81deeba8c4a494f6d2ed42a4f45a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:35:03 +0000 Subject: [PATCH 247/320] ilbc and msilbc libraries added svn path=/nixpkgs/branches/stdenv-updates/; revision=10570 --- pkgs/development/libraries/ilbc/default.nix | 17 +++++++++++++++ pkgs/development/libraries/msilbc/2.0.0.nix | 24 +++++++++++++++++++++ pkgs/top-level/all-packages.nix | 8 +++++++ 3 files changed, 49 insertions(+) create mode 100644 pkgs/development/libraries/ilbc/default.nix create mode 100644 pkgs/development/libraries/msilbc/2.0.0.nix diff --git a/pkgs/development/libraries/ilbc/default.nix b/pkgs/development/libraries/ilbc/default.nix new file mode 100644 index 000000000000..360644cf9116 --- /dev/null +++ b/pkgs/development/libraries/ilbc/default.nix @@ -0,0 +1,17 @@ +args: with args; +stdenv.mkDerivation { + name = "ilbc-rfc3951"; + +# I'm too lazy to extract .c source from rfc3951. So, I'm using autotools stuff +# from linphone project + src = stdenv.mkDerivation { + name = "ilbc-rfc3951.tar.gz"; + src = msilbc.src; + outputHashAlgo = "sha256"; + outputHash = "0f6scsp72bz2ifscd8c0x57ipcxi2i4a9b4nwlnwx7a7a0hrazhj"; + phases = "unpackPhase installPhase"; + installPhase = "cp ilbc-rfc3951.tar.gz \${out}"; + }; + + configureFlags = "--enable-shared --disable-static"; +} diff --git a/pkgs/development/libraries/msilbc/2.0.0.nix b/pkgs/development/libraries/msilbc/2.0.0.nix new file mode 100644 index 000000000000..8bc8f2a6c1db --- /dev/null +++ b/pkgs/development/libraries/msilbc/2.0.0.nix @@ -0,0 +1,24 @@ +args: with args; +stdenv.mkDerivation rec { + name = "msilbc-" + version; + src = fetchurl { + url = "http://download.savannah.gnu.org/releases/linphone/plugins/sources/${name}.tar.gz"; + sha256 = "0ifydb7qmpync56l4hbrp36n5wrb7gadb76isp643s6wsg7l743j"; + }; + + patchPhase = "sed -i /MS_FILTER_SET_FMTP/d ilbc.c"; + + propagatedBuildInputs = [ilbc mediastreamer]; + buildInputs = [pkgconfig]; + + buildPhase = '' + cc -fPIC -c -pthread -o ilbc.o ilbc.c `pkg-config --cflags mediastreamer` + echo "next" + cc `pkg-config --libs mediastreamer` -shared -pthread -o libilbc.so + ''; + + installPhase = " + ensureDir \${out}/lib/mediastreamer/plugins + cp libilbc.so \${out}/lib/mediastreamer/plugins + "; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b38ecf372982..3f081a74b95c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2088,6 +2088,10 @@ rec { inherit fetchurl stdenv; }; + ilbc = import ../development/libraries/ilbc { + inherit stdenv msilbc; + }; + ilmbase = import ../development/libraries/ilmbase { inherit fetchurl stdenv; }; @@ -2439,6 +2443,10 @@ rec { inherit fetchurl stdenv; }; + msilbc = selectVersion ../development/libraries/msilbc "2.0.0" { + inherit fetchurl stdenv ilbc mediastreamer pkgconfig; + }; + mysqlConnectorODBC = import ../development/libraries/mysql-connector-odbc { inherit fetchurl stdenv mysql libtool zlib unixODBC; }; From 8a3676ebf6a06e031c6779fa3b99f1ae006a767b Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:35:17 +0000 Subject: [PATCH 248/320] qt-4: updated to 772114 svn path=/nixpkgs/branches/stdenv-updates/; revision=10571 --- pkgs/development/libraries/qt-4/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix index 2d05ad22db0e..9d7c1e336d6c 100644 --- a/pkgs/development/libraries/qt-4/default.nix +++ b/pkgs/development/libraries/qt-4/default.nix @@ -14,7 +14,7 @@ rec { -opengl -xrender -xrandr -xinerama -xcursor -qt-sql-mysql -qdbus -cups -glib -xfixes -fontconfig -I${freetype}/include/freetype2"; - patchPhase = "sed -e 's@/bin/pwd@pwd@' -i configure; sed -e 's@/usr@/FOO@' -i config.tests/*/*.test -i mkspecs/*/*.conf"; + patchPhase = "sed -i 's@/bin/pwd@pwd@' configure; sed -i 's@/usr@/FOO@' config.tests/*/*.test mkspecs/*/*.conf"; }; in rec { trolltech = stdenv.mkDerivation (common // { @@ -29,8 +29,8 @@ rec { name = "qt-kde-4.3svn"; src = fetchsvn { url = svn://anonsvn.kde.org/home/kde/trunk/qt-copy; - rev = "761061"; - sha256 = "0mwbmzgqs9psw6hyh913g1jgvgr702qh4kfi2pvmrpkqvyagysg9"; + rev = "772114"; + sha256 = "0nd437yikz5skyqfczk0376rbgdgmsfc9gpqw207gqv6x5hcp3rj"; }; patchPhase = "mkdir .svn; bash apply_patches;" + common.patchPhase; }); From 053ea5ebe6f144b9e13f74e5ce466162f6cc8754 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:35:30 +0000 Subject: [PATCH 249/320] Fix enabling switching to kernels not already running (depmod uses uname-r as default to look for modules) svn path=/nixpkgs/branches/stdenv-updates/; revision=10572 --- pkgs/os-specific/linux/module-init-tools/aggregator.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkgs/os-specific/linux/module-init-tools/aggregator.nix b/pkgs/os-specific/linux/module-init-tools/aggregator.nix index ed30be250d23..76111eacfd2c 100644 --- a/pkgs/os-specific/linux/module-init-tools/aggregator.nix +++ b/pkgs/os-specific/linux/module-init-tools/aggregator.nix @@ -18,7 +18,8 @@ done rm -rf nix-support cd lib/modules/ rm */modules.* -MODULE_DIR=$PWD/ depmod -a * +# linux-* will pass the new kernel version to depmod to take rather than `uname -r` (see man page) +MODULE_DIR=$PWD/ depmod -a $(basename lib/modules/2.*) cd $out/ '') [minInit addInputs defEnsureDir]; in From 7b9937f24d46f5afba1947cab66dcfbd139fd279 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:35:43 +0000 Subject: [PATCH 250/320] * Driver for the Go 7007, used in the Plextor ConvertX USB TV tuner. Thanks to Martin Bravenboer for donating the hardware :-) * Latest udev. svn path=/nixpkgs/branches/stdenv-updates/; revision=10573 --- pkgs/os-specific/linux/udev/default.nix | 6 +-- pkgs/os-specific/linux/wis-go7007/default.nix | 53 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++ 3 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 pkgs/os-specific/linux/wis-go7007/default.nix diff --git a/pkgs/os-specific/linux/udev/default.nix b/pkgs/os-specific/linux/udev/default.nix index 14393f599582..cb7bf4fabd55 100644 --- a/pkgs/os-specific/linux/udev/default.nix +++ b/pkgs/os-specific/linux/udev/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "udev-112"; + name = "udev-118"; src = fetchurl { - url = mirror://kernel/linux/utils/kernel/hotplug/udev-112.tar.bz2; - sha256 = "0vhqnli4va3yzvr90rcpbgs42sphpk9prdis9x2qmlmdynzangw2"; + url = mirror://kernel/linux/utils/kernel/hotplug/udev-118.tar.bz2; + sha256 = "1i488wqm7i6nz6gidbkxkb47hr427ika48i8imwrvvnpg1kzhska"; }; preBuild = "makeFlagsArray=(etcdir=$out/etc sbindir=$out/sbin usrbindir=$out/bin usrsbindir=$out/sbin mandir=$out/share/man INSTALL='install -c')"; preInstall = "installFlagsArray=(udevdir=dummy)"; diff --git a/pkgs/os-specific/linux/wis-go7007/default.nix b/pkgs/os-specific/linux/wis-go7007/default.nix new file mode 100644 index 000000000000..8637cc5d68e6 --- /dev/null +++ b/pkgs/os-specific/linux/wis-go7007/default.nix @@ -0,0 +1,53 @@ +{stdenv, fetchurl, kernel, ncurses}: + +stdenv.mkDerivation { + name = "wis-go7007-linux-0.9.8"; + + src = fetchurl { + url = http://gentoo.osuosl.org/distfiles/wis-go7007-linux-0.9.8.tar.bz2; + sha256 = "06lvlz42c5msvwc081p8vjcbv8qq1j1g1myxhh27xi8zi06n1mzg"; + }; + + patches = map fetchurl [ + { url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/media-tv/wis-go7007/files/wis-go7007-0.9.8-kernel-2.6.17.diff?rev=1.1"; + sha256 = "0cizbg82fdl5byhvpkdx64qa02xcahdyddi2l2jn95sxab28a5yg"; + } + { url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/media-tv/wis-go7007/files/wis-go7007-0.9.8-fix-udev.diff?rev=1.2"; + sha256 = "1985lcb7gh5zsf3lm0b43zd6q0cb9q4z376n9q060bh99yw6m0w1"; + } + { url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/media-tv/wis-go7007/files/snd.patch?rev=1.1"; + sha256 = "0a6dz1l16pz1fk77s3awxh635cacbivfcfnd1carbx5jp2gq3jna"; + } + ]; + + buildInputs = [ncurses]; + + preBuild = '' + # Urgh, we need the complete kernel sources for some header + # files. So unpack the original kernel source tarball and copy + # the configured include directory etc. on top of it. + kernelVersion=$(cd ${kernel}/lib/modules && ls) + kernelBuild=$(echo ${kernel}/lib/modules/$kernelVersion/source) + tar xvfj ${kernel.src} + kernelSource=$(echo $(pwd)/linux-*) + cp -prd $kernelBuild/* $kernelSource + + #includeDir=$out/lib/modules/$kernelVersion/source/include/linux + includeDir=$TMPDIR/scratch + substituteInPlace Makefile \ + --replace '$(DESTDIR)$(KSRC)/include/linux' $includeDir + ensureDir $includeDir + ensureDir $out/etc/hotplug/usb + ensureDir $out/etc/udev/rules.d + + makeFlagsArray=(KERNELSRC=$kernelSource \ + FIRMWARE_DIR=/firmware FXLOAD=false \ + DESTDIR=$out SKIP_DEPMOD=1 \ + USE_UDEV=y) + ''; # */ + + meta = { + description = "Kernel module for the Micronas GO7007, used in a number of USB TV devices"; + homepage = http://oss.wischip.com/; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3f081a74b95c..018784c1937f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3736,6 +3736,10 @@ rec { inherit fetchurl stdenv; }; + wis_go7007 = import ../os-specific/linux/wis-go7007 { + inherit fetchurl stdenv kernel ncurses; + }; + wpa_supplicant = import ../os-specific/linux/wpa_supplicant { inherit fetchurl stdenv openssl; }; From 9f913848192e5ac6bbcd217b98262d298da036e0 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:35:57 +0000 Subject: [PATCH 251/320] Added nc6, updated xkeyboard-config svn path=/nixpkgs/branches/stdenv-updates/; revision=10574 --- pkgs/data/misc/xkeyboard-config/0.9.nix | 23 +++++++++++++++++++ pkgs/data/misc/xkeyboard-config/1.2.nix | 22 ++++++++++++++++++ .../xkeyboard-config/level3-deadkeys-us-intl | 2 +- pkgs/top-level/all-packages.nix | 14 +++++++++-- 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 pkgs/data/misc/xkeyboard-config/0.9.nix create mode 100644 pkgs/data/misc/xkeyboard-config/1.2.nix diff --git a/pkgs/data/misc/xkeyboard-config/0.9.nix b/pkgs/data/misc/xkeyboard-config/0.9.nix new file mode 100644 index 000000000000..c7c92cd6c27b --- /dev/null +++ b/pkgs/data/misc/xkeyboard-config/0.9.nix @@ -0,0 +1,23 @@ +args: with args; + +stdenv.mkDerivation { + name = "xkeyboard-config-0.9"; + + src = fetchurl { + url = http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-0.9.tar.bz2; + sha256 = "0zbpprhlv8ggsvgnwqw8d4cx0ry86szm36ghigwb1sn46q0c915v"; + }; + + buildInputs = [perl perlXMLParser xkbcomp]; + + ICONV = "iconv"; + + preConfigure = " + configureFlags=\"--with-xkb-base=$out/etc/X11/xkb -with-xkb-rules-symlink=xorg,xfree86\" + "; + + postInstall = '' + rm ''${out}/etc/X11/xkb/compiled + cat ${./level3-deadkeys-us-intl} >> $out/etc/X11/xkb/symbols/us + ''; +} diff --git a/pkgs/data/misc/xkeyboard-config/1.2.nix b/pkgs/data/misc/xkeyboard-config/1.2.nix new file mode 100644 index 000000000000..de67b00baeab --- /dev/null +++ b/pkgs/data/misc/xkeyboard-config/1.2.nix @@ -0,0 +1,22 @@ +args: with args; + +stdenv.mkDerivation { + name = "xkeyboard-config-${version}"; + + src = fetchurl { + url = http://xlibs.freedesktop.org/xkbdesc/xkeyboard-config-1.2.tar.bz2; + sha256 = "1xr7vfgabgyggnkjb56a0bd39yxjhyrldcdsq9pqnw3izfb6i1b4"; + }; + buildInputs = [perl perlXMLParser xkbcomp gettext]; + + ICONV = "iconv"; + + preConfigure = " + configureFlags=\"--with-xkb-base=$out/etc/X11/xkb -with-xkb-rules-symlink=xorg,xfree86\" + "; + + postInstall = '' + rm ''${out}/etc/X11/xkb/compiled || true; + cat ${./level3-deadkeys-us-intl} | sed -e 's/altgr-intl/altgr-intl-rich/g' >> $out/etc/X11/xkb/symbols/us + ''; +} diff --git a/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl b/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl index 6b7d263da7ff..91d21f761436 100644 --- a/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl +++ b/pkgs/data/misc/xkeyboard-config/level3-deadkeys-us-intl @@ -44,7 +44,7 @@ xkb_symbols "altgr-intl" { key { [ 3, numbersign, threesuperior, dead_macron ] }; key { [ 4, dollar, currency, sterling ] }; key { [ 5, percent, EuroSign ] }; - key { [ 6, asciicircum, dead_circumflex ] }; + key { [ 6, asciicircum, dead_circumflex, dead_stroke ] }; key { [ 7, ampersand, dead_horn ] }; key { [ 8, asterisk, dead_ogonek ] }; key { [ 9, parenleft, leftsinglequotemark,dead_breve ] }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 018784c1937f..2787f9119a1e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3824,11 +3824,14 @@ rec { inherit fetchurl stdenv cabextract; }; - xkeyboard_config = import ../data/misc/xkeyboard-config { - inherit fetchurl stdenv perl perlXMLParser; + xkeyboard_configFun = lib.sumArgs (selectVersion ../data/misc/xkeyboard-config ) { + inherit fetchurl stdenv perl perlXMLParser gettext; inherit (xlibs) xkbcomp; + version = "1.2"; }; + xkeyboard_config = xkeyboard_configFun null; + ### APPLICATIONS @@ -5194,6 +5197,13 @@ rec { inherit fetchurl stdenv flex bison zlib libpng ncurses ed; }; + /*tetexX11 = import ../misc/tex/tetex { + inherit fetchurl stdenv flex bison zlib libpng ncurses ed; + inherit (xlibs) libX11 libXext libXmu libXaw libXt libXpm; + inherit freetype t1lib; + builderX11 = true; + };*/ + texFunctions = import ../misc/tex/nix { inherit stdenv perl tetex graphviz ghostscript; }; From b7b4efd867df6b850a0423eec1898dcc65354ead Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:36:10 +0000 Subject: [PATCH 252/320] Added socat, updated zsh svn path=/nixpkgs/branches/stdenv-updates/; revision=10575 --- pkgs/shells/zsh/{default.nix => 4.3.4.nix} | 2 +- pkgs/shells/zsh/4.3.5.nix | 22 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 5 ++++- 3 files changed, 27 insertions(+), 2 deletions(-) rename pkgs/shells/zsh/{default.nix => 4.3.4.nix} (88%) create mode 100644 pkgs/shells/zsh/4.3.5.nix diff --git a/pkgs/shells/zsh/default.nix b/pkgs/shells/zsh/4.3.4.nix similarity index 88% rename from pkgs/shells/zsh/default.nix rename to pkgs/shells/zsh/4.3.4.nix index 0b227b031b82..ea9a82cf6839 100644 --- a/pkgs/shells/zsh/default.nix +++ b/pkgs/shells/zsh/4.3.4.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, coreutils, ncurses}: +args: with args; stdenv.mkDerivation { name = "zsh-4.3.4"; diff --git a/pkgs/shells/zsh/4.3.5.nix b/pkgs/shells/zsh/4.3.5.nix new file mode 100644 index 000000000000..227da7995fb4 --- /dev/null +++ b/pkgs/shells/zsh/4.3.5.nix @@ -0,0 +1,22 @@ +args: with args; +let documentation = fetchurl { + url = http://www.math.technion.ac.il/pub/zsh/zsh-4.3.5-doc.tar.bz2; + sha256 = "0jf35xibp8wfka7rdk9q8spkwprlhjx1sp7vp6img8wks12cvlkx"; + }; +in +stdenv.mkDerivation { + name = "zsh-${version}"; + + src = fetchurl { + url = http://www.math.technion.ac.il/pub/zsh/zsh-4.3.5.tar.bz2; + sha256 = "0191j3liflkjrj39i2yrs3ab9jcx4zd93rirx3j17dymfgqlvrzb"; + }; + configureFlags = "--with-tcsetpgrp --enable-maildir-support --enable-multibyte"; + + postInstall = '' + ensureDir $out/share/ + tar xf ${documentation} -C $out/share + ''; + + buildInputs = [ncurses coreutils]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2787f9119a1e..c95a8264f8ac 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -936,10 +936,13 @@ rec { inherit fetchurl stdenv ncurses; }; - zsh = import ../shells/zsh { + zshFun = lib.sumArgs (selectVersion ../shells/zsh) { inherit fetchurl stdenv ncurses coreutils; + version = "4.3.5"; }; + zsh = zshFun null; + ### DEVELOPMENT / COMPILERS From 63e46d78d03edbafc8dcea1bcf41c71f1b6347ea Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:36:23 +0000 Subject: [PATCH 253/320] Fixed stable socat (applied patch by Nicolas Pierron); updated Tk installation step for XMaxima compatibility svn path=/nixpkgs/branches/stdenv-updates/; revision=10576 --- pkgs/development/libraries/tk/8.4.16.nix | 18 ++++++++++++++++++ pkgs/development/libraries/tk/builder.sh | 10 ---------- pkgs/development/libraries/tk/default.nix | 12 ------------ pkgs/top-level/all-packages.nix | 5 ++++- 4 files changed, 22 insertions(+), 23 deletions(-) create mode 100644 pkgs/development/libraries/tk/8.4.16.nix delete mode 100644 pkgs/development/libraries/tk/builder.sh delete mode 100644 pkgs/development/libraries/tk/default.nix diff --git a/pkgs/development/libraries/tk/8.4.16.nix b/pkgs/development/libraries/tk/8.4.16.nix new file mode 100644 index 000000000000..c43e53cc8279 --- /dev/null +++ b/pkgs/development/libraries/tk/8.4.16.nix @@ -0,0 +1,18 @@ +args: with args; + +stdenv.mkDerivation { + name = "tk-${version}"; + src = fetchurl { + url = "mirror://sourceforge/tcl/tk${version}-src.tar.gz"; + sha256 = "0cciavzd05bpm5yfppid0s0vsf8kabwia9620vgvi26sv1gjgwhb"; + }; + postInstall = '' + echo -e '#! /bin/sh \n $( readlink -f $( which wish${__substring 0 3 version}) ) "$@"' >$out/bin/wish + chmod a+x $out/bin/wish + ''; + configureFlags="--with-tcl=${tcl}/lib"; + preConfigure = "cd unix"; + + buildInputs = [tcl x11]; + inherit tcl; +} diff --git a/pkgs/development/libraries/tk/builder.sh b/pkgs/development/libraries/tk/builder.sh deleted file mode 100644 index 999488a35310..000000000000 --- a/pkgs/development/libraries/tk/builder.sh +++ /dev/null @@ -1,10 +0,0 @@ -source $stdenv/setup - -configureFlags="--with-tcl=$tcl/lib" -preConfigure() { - cd unix -} - -preConfigure=preConfigure - -genericBuild diff --git a/pkgs/development/libraries/tk/default.nix b/pkgs/development/libraries/tk/default.nix deleted file mode 100644 index 9e0a6b8c0dae..000000000000 --- a/pkgs/development/libraries/tk/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, tcl, x11}: - -stdenv.mkDerivation { - name = "tk-8.4.16"; - builder = ./builder.sh; - src = fetchurl { - url = mirror://sourceforge/tcl/tk8.4.16-src.tar.gz; - sha256 = "0cciavzd05bpm5yfppid0s0vsf8kabwia9620vgvi26sv1gjgwhb"; - }; - buildInputs = [tcl x11]; - inherit tcl; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c95a8264f8ac..c3a7ed9c89d7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2649,10 +2649,13 @@ rec { qt = qt4; }; - tk = import ../development/libraries/tk { + tkFun = lib.sumArgs (selectVersion ../development/libraries/tk) { inherit fetchurl stdenv tcl x11; + version = "8.4.16"; }; + tk = tkFun null; + unixODBC = import ../development/libraries/unixODBC { inherit fetchurl stdenv; }; From 0d4ff25ce9791e9bafe7c1818047c19311bd1d8c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:36:37 +0000 Subject: [PATCH 254/320] * Added fxload, a tool to upload firmware to Cypress EZ-USB microcontrollers. svn path=/nixpkgs/branches/stdenv-updates/; revision=10577 --- pkgs/os-specific/linux/fxload/default.nix | 39 +++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 +++ 2 files changed, 43 insertions(+) create mode 100644 pkgs/os-specific/linux/fxload/default.nix diff --git a/pkgs/os-specific/linux/fxload/default.nix b/pkgs/os-specific/linux/fxload/default.nix new file mode 100644 index 000000000000..0eb37c0d50ee --- /dev/null +++ b/pkgs/os-specific/linux/fxload/default.nix @@ -0,0 +1,39 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "fxload-2002_04_11"; + + src = fetchurl { + url = mirror://sourceforge/linux-hotplug/fxload-2002_04_11.tar.gz; + sha256 = "1hql93bp3dxrv1p67nc63xsbqwljyynm997ysldrc3n9ifi6s48m"; + }; + + patches = [ + # Will be needed after linux-headers is updated to >= 2.6.21. + #(fetchurl { + # url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/sys-apps/fxload/files/fxload-20020411-linux-headers-2.6.21.patch?rev=1.1"; + # sha256 = "0ij0c8nr1rbyl5wmyv1cklhkxglvsqz32h21cjw4bjm151kgmk7p"; + #}) + + (fetchurl { + url = "http://sources.gentoo.org/viewcvs.py/*checkout*/gentoo-x86/sys-apps/fxload/files/fxload-20020411-linux-headers-2.6.19.patch?rev=1.1"; + sha256 = "05q7c1yvi479q5z91s9ra2rgn589qljgmdl6phqf30pgzf09r0r6"; + }) + ]; + + preBuild = '' + substituteInPlace Makefile --replace /usr / + makeFlagsArray=(INSTALL=install prefix=$out) + ''; + + preInstall = '' + ensureDir $out/sbin + ensureDir $out/share/man/man8 + ensureDir $out/share/usb + ''; + + meta = { + homepage = http://linux-hotplug.sourceforge.net/?selected=usb; + description = "Tool to upload firmware to Cypress EZ-USB microcontrollers"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c3a7ed9c89d7..b4f2b882f31d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3354,6 +3354,10 @@ rec { inherit fetchurl stdenv utillinux; }; + fxload = import ../os-specific/linux/fxload { + inherit fetchurl stdenv; + }; + genext2fs = import ../os-specific/linux/genext2fs { inherit fetchurl stdenv; }; From 591ae36522a0f8906702b635a9014fafcf0191ff Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:36:51 +0000 Subject: [PATCH 255/320] 2.4.3 -> 2.4.4, still Python warnings svn path=/nixpkgs/branches/stdenv-updates/; revision=10578 --- pkgs/applications/graphics/gimp/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix index a591091d92fa..5ba3c11184dc 100644 --- a/pkgs/applications/graphics/gimp/default.nix +++ b/pkgs/applications/graphics/gimp/default.nix @@ -4,10 +4,10 @@ }: stdenv.mkDerivation { - name = "gimp-2.4.3"; + name = "gimp-2.4.4"; src = fetchurl { - url = ftp://ftp.gtk.org/pub/gimp/v2.4/gimp-2.4.3.tar.bz2; - sha256 = "1m9gdm6wa33x1bymy3c2d006ks0acq1y8a94rc4401f6mrw8jj8b"; + url = ftp://ftp.gtk.org/pub/gimp/v2.4/gimp-2.4.4.tar.bz2; + sha256 = "1mnl30b4p7c2lxi68z3fhwmganhwppyiw7r0m3r90vnakcawfnfh"; }; buildInputs = [ From 703135a4de1565e98f16aaf889500f6d7b10aaa0 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:37:10 +0000 Subject: [PATCH 256/320] Don't know wether you want to build perl and zip because of mc.. But one of mc's features is beeing able to unpack on the fly. You can do that now (.zip) svn path=/nixpkgs/branches/stdenv-updates/; revision=10579 --- pkgs/tools/misc/mc/default.nix | 9 ++++++++- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix index e5cce46bba85..b82ad4cd3e6f 100644 --- a/pkgs/tools/misc/mc/default.nix +++ b/pkgs/tools/misc/mc/default.nix @@ -6,8 +6,15 @@ stdenv.mkDerivation rec { url = "http://www.ibiblio.org/pub/Linux/utils/file/managers/mc/${name}.tar.gz"; sha256 = "0zly25mwdn84s0wqx9mzyqi177mm828716nv1n6a4a5cm8yv0sh8"; }; - buildInputs = [pkgconfig glib ncurses libX11]; + buildInputs = [pkgconfig glib ncurses libX11 shebangfix perl zip]; configureFlags = "--with-screen=ncurses"; + # small hacks to support zip + postUnpack = " + sed -i 's=/usr/bin/==g' `find -type f` + "; + postInstall = " + find \$out -iname \"*.pl\" | xargs shebangfix; + "; meta = { description = "File Manager and User Shell for the GNU Project"; homepage = http://www.ibiblio.org/mc; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b4f2b882f31d..4665284a2a84 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -632,7 +632,7 @@ rec { }; mc = import ../tools/misc/mc { - inherit fetchurl stdenv pkgconfig ncurses; + inherit fetchurl stdenv pkgconfig ncurses shebangfix perl zip; inherit (gtkLibs) glib; inherit (xlibs) libX11; }; From 6edb12e639a218754b0f14be93ee532da3c4eb1f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:37:27 +0000 Subject: [PATCH 257/320] * Use fxload. svn path=/nixpkgs/branches/stdenv-updates/; revision=10580 --- pkgs/os-specific/linux/wis-go7007/default.nix | 14 ++++++++++---- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pkgs/os-specific/linux/wis-go7007/default.nix b/pkgs/os-specific/linux/wis-go7007/default.nix index 8637cc5d68e6..3e35c83488aa 100644 --- a/pkgs/os-specific/linux/wis-go7007/default.nix +++ b/pkgs/os-specific/linux/wis-go7007/default.nix @@ -1,7 +1,7 @@ -{stdenv, fetchurl, kernel, ncurses}: +{stdenv, fetchurl, kernel, ncurses, fxload}: stdenv.mkDerivation { - name = "wis-go7007-linux-0.9.8"; + name = "wis-go7007-0.9.8"; src = fetchurl { url = http://gentoo.osuosl.org/distfiles/wis-go7007-linux-0.9.8.tar.bz2; @@ -35,17 +35,23 @@ stdenv.mkDerivation { #includeDir=$out/lib/modules/$kernelVersion/source/include/linux includeDir=$TMPDIR/scratch substituteInPlace Makefile \ - --replace '$(DESTDIR)$(KSRC)/include/linux' $includeDir + --replace '$(DESTDIR)$(KSRC)/include/linux' $includeDir \ + --replace '$(DESTDIR)$(FIRMWARE_DIR)' '$(FIRMWARE_DIR)' ensureDir $includeDir ensureDir $out/etc/hotplug/usb ensureDir $out/etc/udev/rules.d makeFlagsArray=(KERNELSRC=$kernelSource \ - FIRMWARE_DIR=/firmware FXLOAD=false \ + FIRMWARE_DIR=$out/firmware FXLOAD=${fxload}/sbin/fxload \ DESTDIR=$out SKIP_DEPMOD=1 \ USE_UDEV=y) ''; # */ + postInstall = '' + ensureDir $out/bin + cp apps/gorecord apps/modet $out/bin/ + ''; + meta = { description = "Kernel module for the Micronas GO7007, used in a number of USB TV devices"; homepage = http://oss.wischip.com/; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4665284a2a84..7e390142eefc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3747,7 +3747,7 @@ rec { }; wis_go7007 = import ../os-specific/linux/wis-go7007 { - inherit fetchurl stdenv kernel ncurses; + inherit fetchurl stdenv kernel ncurses fxload; }; wpa_supplicant = import ../os-specific/linux/wpa_supplicant { From 7b3c313ec63695619be61bb5258c167491f6ce2f Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:37:38 +0000 Subject: [PATCH 258/320] Fixed shebangfix svn path=/nixpkgs/branches/stdenv-updates/; revision=10581 --- pkgs/tools/misc/shebangfix/default.nix | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pkgs/tools/misc/shebangfix/default.nix b/pkgs/tools/misc/shebangfix/default.nix index f5ed86e99f7d..ca4a0004d19b 100644 --- a/pkgs/tools/misc/shebangfix/default.nix +++ b/pkgs/tools/misc/shebangfix/default.nix @@ -8,13 +8,14 @@ stdenv.mkDerivation { phases = "buildPhase"; - buildPhase = " - ensureDir \$out/bin - s=\$out/bin/shebangfix - cp \$file \$s - chmod +x \$s - perl \$s \$s - "; + buildPhase = '' + ensureDir $out/bin + s=$out/bin/shebangfix + cp $file $s + chmod +wx $s + ls -l $s + perl $s $s + ''; meta = { description = "replaces the #!executable with $#!correctpath/executable "; }; } From 150ea51a9c894dcbd2cb48a7e21272356973e6dc Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:37:50 +0000 Subject: [PATCH 259/320] Added Apache Axis2 svn path=/nixpkgs/branches/stdenv-updates/; revision=10582 --- pkgs/servers/http/tomcat/axis2/builder.sh | 8 ++++++++ pkgs/servers/http/tomcat/axis2/default.nix | 15 +++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 3 files changed, 27 insertions(+) create mode 100644 pkgs/servers/http/tomcat/axis2/builder.sh create mode 100644 pkgs/servers/http/tomcat/axis2/default.nix diff --git a/pkgs/servers/http/tomcat/axis2/builder.sh b/pkgs/servers/http/tomcat/axis2/builder.sh new file mode 100644 index 000000000000..e97c8c77b60c --- /dev/null +++ b/pkgs/servers/http/tomcat/axis2/builder.sh @@ -0,0 +1,8 @@ +buildInputs="$unzip $apacheAnt $jdk" +source $stdenv/setup + +unzip $src +cd axis2-*/webapp +ant +ensureDir $out/webapps +cp ../dist/axis2.war $out/webapps diff --git a/pkgs/servers/http/tomcat/axis2/default.nix b/pkgs/servers/http/tomcat/axis2/default.nix new file mode 100644 index 000000000000..aeb103c0e7d6 --- /dev/null +++ b/pkgs/servers/http/tomcat/axis2/default.nix @@ -0,0 +1,15 @@ +{stdenv, fetchurl, apacheAnt, jdk, unzip}: + +stdenv.mkDerivation { + + name = "axis2-1.3"; + + builder = ./builder.sh; + + src = fetchurl { + url = http://apache.hippo.nl/ws/axis2/1_3/axis2-1.3-bin.zip; + md5 = "ab2bc77452288ebf80d861270734a83e"; + }; + + inherit apacheAnt jdk unzip; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7e390142eefc..b2c77f0f2bb9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3247,6 +3247,10 @@ rec { inherit fetchurl stdenv jdk; }; + axis2 = import ../servers/http/tomcat/axis2 { + inherit fetchurl stdenv jdk apacheAnt unzip; + }; + vsftpd = import ../servers/ftp/vsftpd { inherit fetchurl openssl stdenv libcap pam; }; From 83e82c9872ce064a1c476fe87bbde1c708ca10a9 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:38:01 +0000 Subject: [PATCH 260/320] * udev: get rid of silly warnings in make install. svn path=/nixpkgs/branches/stdenv-updates/; revision=10583 --- pkgs/os-specific/linux/udev/default.nix | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/udev/default.nix b/pkgs/os-specific/linux/udev/default.nix index cb7bf4fabd55..a2de2e08ce93 100644 --- a/pkgs/os-specific/linux/udev/default.nix +++ b/pkgs/os-specific/linux/udev/default.nix @@ -2,10 +2,24 @@ stdenv.mkDerivation { name = "udev-118"; + src = fetchurl { url = mirror://kernel/linux/utils/kernel/hotplug/udev-118.tar.bz2; sha256 = "1i488wqm7i6nz6gidbkxkb47hr427ika48i8imwrvvnpg1kzhska"; }; - preBuild = "makeFlagsArray=(etcdir=$out/etc sbindir=$out/sbin usrbindir=$out/bin usrsbindir=$out/sbin mandir=$out/share/man INSTALL='install -c')"; - preInstall = "installFlagsArray=(udevdir=dummy)"; + + # "DESTDIR=/" is a hack to prevent "make install" from trying to + # mess with /dev. + preBuild = '' + makeFlagsArray=(etcdir=$out/etc sbindir=$out/sbin usrbindir=$out/bin usrsbindir=$out/sbin mandir=$out/share/man INSTALL='install -c' DESTDIR=/) + ''; + + preInstall = '' + installFlagsArray=(udevdir=$TMPDIR/dummy) + ''; + + meta = { + homepage = http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html; + description = "Udev manages the /dev filesystem"; + }; } From f27c53669a3bbf4cf9a572f3e69f227eeeda97f6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:38:12 +0000 Subject: [PATCH 261/320] Fixed wish in Tk svn path=/nixpkgs/branches/stdenv-updates/; revision=10584 --- pkgs/development/libraries/tk/8.4.16.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/tk/8.4.16.nix b/pkgs/development/libraries/tk/8.4.16.nix index c43e53cc8279..1f26db83f1b3 100644 --- a/pkgs/development/libraries/tk/8.4.16.nix +++ b/pkgs/development/libraries/tk/8.4.16.nix @@ -7,7 +7,7 @@ stdenv.mkDerivation { sha256 = "0cciavzd05bpm5yfppid0s0vsf8kabwia9620vgvi26sv1gjgwhb"; }; postInstall = '' - echo -e '#! /bin/sh \n $( readlink -f $( which wish${__substring 0 3 version}) ) "$@"' >$out/bin/wish + echo -e '#! /bin/sh \n $( readlink -f $( type -tP wish${__substring 0 3 version}) ) "$@"' >$out/bin/wish chmod a+x $out/bin/wish ''; configureFlags="--with-tcl=${tcl}/lib"; From 17a801ad4c39d094e6890a93449e609d6ef012f9 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:38:24 +0000 Subject: [PATCH 262/320] * Remove the Reiser4 patch from Gentoo, it broke Grub, with a message like Running "install --stage2=/boot/grub/stage2 /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,5)/boot/grub/stage /boot/grub/menu.lst"... failed Error 15: File not found svn path=/nixpkgs/branches/stdenv-updates/; revision=10585 --- pkgs/tools/misc/grub/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/tools/misc/grub/default.nix b/pkgs/tools/misc/grub/default.nix index 87ba35566c00..9f021a669550 100644 --- a/pkgs/tools/misc/grub/default.nix +++ b/pkgs/tools/misc/grub/default.nix @@ -25,6 +25,7 @@ stdenv.mkDerivation { preConfigure = '' unpackFile $gentooPatches + rm patch/400_all_grub-0.97-reiser4-20050808-gentoo.patch for i in patch/*.patch; do echo "applying patch $i" patch -p1 < $i || patch -p0 < $i From d8688a1eb92ea5f9fd32d880c47361be6121259c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:38:36 +0000 Subject: [PATCH 263/320] * Reiser4 stuff. svn path=/nixpkgs/branches/stdenv-updates/; revision=10586 --- pkgs/development/libraries/libaal/default.nix | 19 +++++++++++++++++ .../linux/reiser4progs/default.nix | 21 +++++++++++++++++++ .../linux/reiserfsprogs/default.nix | 13 ++++++------ pkgs/top-level/all-packages.nix | 8 +++++++ 4 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 pkgs/development/libraries/libaal/default.nix create mode 100644 pkgs/os-specific/linux/reiser4progs/default.nix diff --git a/pkgs/development/libraries/libaal/default.nix b/pkgs/development/libraries/libaal/default.nix new file mode 100644 index 000000000000..596b8e2e84cd --- /dev/null +++ b/pkgs/development/libraries/libaal/default.nix @@ -0,0 +1,19 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "libaal-1.0.5"; + + src = fetchurl { + url = http://chichkin_i.zelnet.ru/namesys/libaal-1.0.5.tar.gz; + sha256 = "109f464hxwms90mpczc7h7lmrdlcmlglabkzh86h25xrlxxdn6pz"; + }; + + preInstall = '' + substituteInPlace Makefile --replace ./run-ldconfig true + ''; + + meta = { + homepage = http://www.namesys.com/; + description = "Support library for Reiser4"; + }; +} diff --git a/pkgs/os-specific/linux/reiser4progs/default.nix b/pkgs/os-specific/linux/reiser4progs/default.nix new file mode 100644 index 000000000000..235b2b8381ba --- /dev/null +++ b/pkgs/os-specific/linux/reiser4progs/default.nix @@ -0,0 +1,21 @@ +{stdenv, fetchurl, libaal}: + +stdenv.mkDerivation { + name = "reiser4progs-1.0.6"; + + src = fetchurl { + url = http://chichkin_i.zelnet.ru/namesys/reiser4progs-1.0.6.tar.gz; + sha256 = "0x6m6px19hz54r8q4wwpf437qmqh44c5ddw9846isr64zs2rpld0"; + }; + + buildInputs = [libaal]; + + preInstall = '' + substituteInPlace Makefile --replace ./run-ldconfig true + ''; + + meta = { + homepage = http://www.namesys.com/; + description = "Reiser4 utilities"; + }; +} diff --git a/pkgs/os-specific/linux/reiserfsprogs/default.nix b/pkgs/os-specific/linux/reiserfsprogs/default.nix index 324ba28524c4..040bae1dd475 100644 --- a/pkgs/os-specific/linux/reiserfsprogs/default.nix +++ b/pkgs/os-specific/linux/reiserfsprogs/default.nix @@ -2,15 +2,16 @@ args: with args; stdenv.mkDerivation { name = "reiserfsprogs-3.6.19"; + src = fetchurl { - url = ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.6.19.tar.gz; - sha256 = "1gv8gr0l5l2j52540y2wj9c9h7fn0r3vabykf95748ydmr9jr1n0"; - }; + url = http://chichkin_i.zelnet.ru/namesys/reiserfsprogs-3.6.19.tar.gz; + sha256 = "1gv8gr0l5l2j52540y2wj9c9h7fn0r3vabykf95748ydmr9jr1n0"; + }; patches = [./headers-fix.patch]; meta = { - homepage=http://www.namesys.com/; - description="Reiserfs Utilities"; - license="GPL-2"; + homepage = http://www.namesys.com/; + description = "Reiserfs utilities"; + license = "GPL-2"; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b2c77f0f2bb9..3190d145a62d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2142,6 +2142,10 @@ rec { inherit (xlibs) libXp libXau; }; + libaal = import ../development/libraries/libaal { + inherit fetchurl stdenv; + }; + libarchive = import ../development/libraries/libarchive { inherit fetchurl stdenv zlib; }; @@ -3654,6 +3658,10 @@ rec { inherit fetchurl stdenv; }; + reiser4progs = import ../os-specific/linux/reiser4progs { + inherit fetchurl stdenv libaal; + }; + radeontools = import ../os-specific/linux/radeontools { inherit pciutils; inherit fetchurl stdenv; From 7753a1c5e970110ad6946b38fb019dca3ffad01a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:38:46 +0000 Subject: [PATCH 264/320] * Remove a time-dependent impurity from mc which was caused by touching all the source files. Depending on whether files were touched in the same second things would either be rebuilt (which would fail) or not. Maybe this breaks unzip support, not tested. svn path=/nixpkgs/branches/stdenv-updates/; revision=10587 --- pkgs/tools/misc/mc/default.nix | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pkgs/tools/misc/mc/default.nix b/pkgs/tools/misc/mc/default.nix index b82ad4cd3e6f..344e8a5ceeaf 100644 --- a/pkgs/tools/misc/mc/default.nix +++ b/pkgs/tools/misc/mc/default.nix @@ -8,15 +8,12 @@ stdenv.mkDerivation rec { }; buildInputs = [pkgconfig glib ncurses libX11 shebangfix perl zip]; configureFlags = "--with-screen=ncurses"; - # small hacks to support zip - postUnpack = " - sed -i 's=/usr/bin/==g' `find -type f` - "; - postInstall = " - find \$out -iname \"*.pl\" | xargs shebangfix; - "; + makeFlags = "UNZIP=unzip"; + postInstall = '' + find $out -iname "*.pl" | xargs shebangfix; + ''; meta = { - description = "File Manager and User Shell for the GNU Project"; - homepage = http://www.ibiblio.org/mc; + description = "File Manager and User Shell for the GNU Project"; + homepage = http://www.ibiblio.org/mc; }; } From e7bc12a93265dce5704be7024e9dbac4f6ec07ae Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:38:56 +0000 Subject: [PATCH 265/320] * Function concatMap as in Haskell. svn path=/nixpkgs/branches/stdenv-updates/; revision=10588 --- pkgs/lib/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 1018d9609078..0d22070ee98d 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -52,6 +52,10 @@ rec { fold (x: y: x + y) ""; + # Map and concatenate the result. + concatMap = f: list: concatLists (map f list); + + # Place an element between each element of a list, e.g., # `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"]. intersperse = separator: list: From 156b7f93efa13aefb228cab262a0c3cc000cd399 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:39:07 +0000 Subject: [PATCH 266/320] * Updated Apache-related packages. svn path=/nixpkgs/branches/stdenv-updates/; revision=10589 --- .../interpreters/php_configurable/default.nix | 68 +++++++++---------- .../libraries/apr-util/default.nix | 26 +++++-- pkgs/development/libraries/apr/default.nix | 12 +++- .../apache-modules/mod_python/default.nix | 6 +- 4 files changed, 65 insertions(+), 47 deletions(-) diff --git a/pkgs/development/interpreters/php_configurable/default.nix b/pkgs/development/interpreters/php_configurable/default.nix index 91e0518ccd3b..35583c9d37e9 100644 --- a/pkgs/development/interpreters/php_configurable/default.nix +++ b/pkgs/development/interpreters/php_configurable/default.nix @@ -9,6 +9,7 @@ | http://www.php.net/manual/security.php for more details. | */ +let version = "5.2.5"; in args: ( args.mkDerivationByConfiguration { @@ -462,58 +463,57 @@ args: extraAttrs = co : { - name = "php_configurable-5.2.4"; + name = "php_configurable-${version}"; buildInputs = ( args.lib.getAttr [ "phpIncludes" ] [] args ) ++ co.buildInputs; - configurePhase = - " - iniFile=\$out/etc/\$name.ini - [[ -z \"\$libxml2\" ]] || export PATH=\$PATH:\$libxml2/bin - ./configure --with-config-file-scan-dir=/etc --with-config-file-path=\$iniFile --prefix=\$out " + co.configureFlags + " + configurePhase = '' + iniFile=$out/etc/$name.ini + [[ -z "$libxml2" ]] || export PATH=$PATH:$libxml2/bin + ./configure --with-config-file-scan-dir=/etc --with-config-file-path=$iniFile --prefix=$out ${co.configureFlags} echo configurePhase end - "; + ''; - installPhase = " + installPhase = '' unset installPhase; installPhase; - cp php.ini-recommended $\iniFile + cp php.ini-recommended $iniFile # Now Let's build xdebug if flag has been given # TODO I think there are better paths than the given below - if [ -n \$flag_set_xdebug ]; then - PATH=\$PATH:\$out/bin - tar xfz \$xdebug_src; + if [ -n $flag_set_xdebug ]; then + PATH=$PATH:$out/bin + tar xfz $xdebug_src; cd xdebug* phpize - ./configure --prefix=\$out + ./configure --prefix=$out make - ensureDir \$out/lib; cp modules/xdebug.so $out/lib -cat >> $iniFile << EOF -zend_extension=\"\$out/lib/xdebug.so\" -zend_extension_ts=\"\$out/lib/xdebug.so\" -zend_extension_debug=\"\$out/lib/xdebug.so\" -xdebug.remote_enable=true -xdebug.remote_host=127.0.0.1 -xdebug.remote_port=9000 -xdebug.remote_handler=dbgp -xdebug.profiler_enable=0 -xdebug.profiler_output_dir=\"/tmp/xdebug\" -xdebug.remote_mode=req -EOF + ensureDir $out/lib; cp modules/xdebug.so $out/lib + cat >> $iniFile << EOF + zend_extension="$out/lib/xdebug.so" + zend_extension_ts="$out/lib/xdebug.so" + zend_extension_debug="$out/lib/xdebug.so" + xdebug.remote_enable=true + xdebug.remote_host=127.0.0.1 + xdebug.remote_port=9000 + xdebug.remote_handler=dbgp + xdebug.profiler_enable=0 + xdebug.profiler_output_dir="/tmp/xdebug" + xdebug.remote_mode=req + EOF fi - "; + ''; src = args.fetchurl { - url = http://de.php.net/get/php-5.2.4.tar.bz2/from/this/mirror; - sha256 = "1h513j7crz08n7rlh8v7cvxfzisj87mvvyfrkiaa76v1wicm4bsh"; - name = "php-5.2.4.tar.bz2"; + url = "http://nl.php.net/get/php-${version}.tar.bz2/from/this/mirror"; + sha256 = "18xv961924rkk66gdjcmk1mzbzgp2srbiq5jvbgyn6ahvxq1xb2w"; + name = "php-${version}.tar.bz2"; }; meta = { - description = "The PHP language runtime engine"; # : CLI, CGI and Apache2 SAPIs ? as well TODO - homepage = http://www.php.net/; - license = "PHP-3"; - }; + description = "The PHP language runtime engine"; # : CLI, CGI and Apache2 SAPIs ? as well TODO + homepage = http://www.php.net/; + license = "PHP-3"; + }; patches = [./fix.patch]; }; diff --git a/pkgs/development/libraries/apr-util/default.nix b/pkgs/development/libraries/apr-util/default.nix index 7f2ce3e3882a..967408e0cb43 100644 --- a/pkgs/development/libraries/apr-util/default.nix +++ b/pkgs/development/libraries/apr-util/default.nix @@ -4,14 +4,26 @@ assert bdbSupport -> db4 != null; -(stdenv.mkDerivation { - name = "apr-util-1.2.7"; +stdenv.mkDerivation { + name = "apr-util-1.2.12"; + src = fetchurl { - url = http://archive.apache.org/dist/apr/apr-util-1.2.7.tar.bz2; - md5 = "a4c527f08ae2298e62a88472291bf066"; + url = http://archive.apache.org/dist/apr/apr-util-1.2.12.tar.bz2; + sha256 = "152xwaxikp22acz7ypqsvlyjxhak6p40805wwbw7hcg1gyg2scyl"; }; - configureFlags = " + + configureFlags = '' --with-apr=${apr} --with-expat=${expat} ${if bdbSupport then "--with-berkeley-db=${db4}" else ""} - "; -}) // {inherit bdbSupport;} + ''; + + passthru = { + inherit bdbSupport; + }; + + meta = { + homepage = http://apr.apache.org/; + description = "A companion library to APR, the Apache Portable Runtime"; + }; +} + diff --git a/pkgs/development/libraries/apr/default.nix b/pkgs/development/libraries/apr/default.nix index a42699063c50..ceae8a1d12a9 100644 --- a/pkgs/development/libraries/apr/default.nix +++ b/pkgs/development/libraries/apr/default.nix @@ -1,9 +1,15 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "apr-1.2.7"; + name = "apr-1.2.12"; + src = fetchurl { - url = http://archive.apache.org/dist/apr/apr-1.2.7.tar.bz2; - md5 = "e77887dbafc515c63feac84686bcb3bc"; + url = http://archive.apache.org/dist/apr/apr-1.2.12.tar.bz2; + sha256 = "0d11wa2hlhb5lnny5rcazca056b35kgccx94cd38bazw1d6b68nv"; + }; + + meta = { + homepage = http://apr.apache.org/; + description = "The Apache Portable Runtime library"; }; } diff --git a/pkgs/servers/http/apache-modules/mod_python/default.nix b/pkgs/servers/http/apache-modules/mod_python/default.nix index 16d247fe8dc6..4c83070e9cab 100644 --- a/pkgs/servers/http/apache-modules/mod_python/default.nix +++ b/pkgs/servers/http/apache-modules/mod_python/default.nix @@ -1,13 +1,13 @@ {stdenv, fetchurl, apacheHttpd, python}: stdenv.mkDerivation { - name = "mod_python-3.2.10"; + name = "mod_python-3.3.1"; builder = ./builder.sh; src = fetchurl { - url = http://apache.surfnet.nl/httpd/modpython/mod_python-3.2.10.tgz; - md5 = "cc6439f546a6e70cfff7ca51b8c62541"; + url = http://archive.eu.apache.org/dist/httpd/modpython/mod_python-3.3.1.tgz; + sha256 = "0sss2xi6l1a2z8y6ji0cp8vgyvnhq8zrg0ilkvpj1mygbzyk28xd"; }; patches = [./install.patch]; From 520452ae4ff3672afe47cb76acb412bb32537bf2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:39:16 +0000 Subject: [PATCH 267/320] Added Savannah mirror list (source suggested by Ludovic Court\`es) svn path=/nixpkgs/branches/stdenv-updates/; revision=10590 --- pkgs/build-support/fetchurl/mirrors.nix | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pkgs/build-support/fetchurl/mirrors.nix b/pkgs/build-support/fetchurl/mirrors.nix index 52fc9dfa2c18..a154be316882 100644 --- a/pkgs/build-support/fetchurl/mirrors.nix +++ b/pkgs/build-support/fetchurl/mirrors.nix @@ -48,4 +48,24 @@ rec { http://www.ibiblio.org/pub/Linux/distributions/gentoo/ http://distfiles.gentoo.org/ ]; + + savannah = [ + ftp://ftp.twaren.net/Unix/NonGNU/ + ftp://mirror.csclub.uwaterloo.ca/nongnu/ + ftp://mirror.publicns.net/pub/nongnu/ + ftp://savannah.c3sl.ufpr.br/ + http://download.savannah.gnu.org/ + http://ftp.cc.uoc.gr/mirrors/nongnu.org/ + http://ftp.twaren.net/Unix/NonGNU/ + http://mirror.csclub.uwaterloo.ca/nongnu/ + http://mirror.publicns.net/pub/nongnu/ + http://nongnu.askapache.com/ + http://nongnu.bigsearcher.com/ + http://savannah.c3sl.ufpr.br/ + http://www.centervenus.com/mirrors/nongnu/ + http://www.de-mirrors.de/nongnu/ + http://www.very-clever.com/download/nongnu/ + http://www.wikifusion.info/nongnu/ + ]; + } From 07da3cba4c91fdf1b4899284f0d7145766e89454 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:39:25 +0000 Subject: [PATCH 268/320] PHP now with postgresql support svn path=/nixpkgs/branches/stdenv-updates/; revision=10591 --- pkgs/development/interpreters/php_configurable/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/php_configurable/default.nix b/pkgs/development/interpreters/php_configurable/default.nix index 35583c9d37e9..6b755066359b 100644 --- a/pkgs/development/interpreters/php_configurable/default.nix +++ b/pkgs/development/interpreters/php_configurable/default.nix @@ -418,6 +418,8 @@ args: no_libxml2 = { cfgOption = "--disable-libxml"; }; + postgresql = { cfgOption = "--with-pgsql=\$postgresql"; + pass = { inherit (args) postgresql;}; }; mysql = { cfgOption = "--with-mysql=\$mysql"; pass = { inherit (args) mysql;}; }; @@ -457,7 +459,7 @@ args: }; defaults = [ "mysql" "mysqli" "pdo_mysql" "libxml2" "apxs2" ]; - optionals = [ "libxml2" "gettext" ]; + optionals = [ "libxml2" "gettext" "postgresql"]; # Don't konw wether they should be default.. I use them - Marc From 8bcddb041344aec0342d4300d284d51390d0e405 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:39:34 +0000 Subject: [PATCH 269/320] svn path=/nixpkgs/branches/stdenv-updates/; revision=10592 --- pkgs/tools/archivers/p7zip/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/tools/archivers/p7zip/default.nix b/pkgs/tools/archivers/p7zip/default.nix index c9d970335001..00bc47878f4e 100644 --- a/pkgs/tools/archivers/p7zip/default.nix +++ b/pkgs/tools/archivers/p7zip/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "p7zip-4.53"; + name = "p7zip-4.57"; src = fetchurl { - url = mirror://sourceforge/p7zip/p7zip_4.53_src_all.tar.bz2; - sha256 = "0pbgvpq852qnzq4isgc13p4nnp416xhy5vmn1rcwm8fk43l5rbqd"; + url = mirror://sourceforge/p7zip/p7zip_4.57_src_all.tar.bz2; + sha256 = "0lsvw1bh6dzpxn8kyl7s79w2drpfxaa1c79khqm56gfmdlw27s80"; }; preConfigure = " From f40744d8e2a8cb9cdd3df35fcf13a04606fc3e30 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:39:43 +0000 Subject: [PATCH 270/320] update to 0.11 svn path=/nixpkgs/branches/stdenv-updates/; revision=10593 --- pkgs/games/scummvm/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/games/scummvm/default.nix b/pkgs/games/scummvm/default.nix index 610556a26351..2f81aaa474dc 100644 --- a/pkgs/games/scummvm/default.nix +++ b/pkgs/games/scummvm/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl, SDL, zlib, mpeg2dec}: stdenv.mkDerivation { - name = "scummvm-0.10.0"; + name = "scummvm-0.11.0"; src = fetchurl { - url = mirror://sourceforge/scummvm/scummvm-0.10.0.tar.bz2; - sha256 = "09ii4vbs4nygc0x4n1l9dkfiywj5qwxv9j81pbrf9r6d6y4wdlf9"; + url = mirror://sourceforge/scummvm/scummvm-0.11.0.tar.bz2; + sha256 = "106vcknkr07m17rxypavlz3cjyd862bwq1qw1arakcvhhi90mbfl"; }; buildInputs = [SDL zlib mpeg2dec]; From 7d7f290d7063361adf457159b68d917978986456 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:39:52 +0000 Subject: [PATCH 271/320] Add `avahi' package. svn path=/nixpkgs/branches/stdenv-updates/; revision=10594 --- pkgs/development/libraries/avahi/default.nix | 12 ++++++------ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pkgs/development/libraries/avahi/default.nix b/pkgs/development/libraries/avahi/default.nix index 52051725e228..c8a94c0dbb15 100644 --- a/pkgs/development/libraries/avahi/default.nix +++ b/pkgs/development/libraries/avahi/default.nix @@ -1,14 +1,14 @@ -{stdenv, fetchurl, pkgconfig}: +{stdenv, fetchurl, pkgconfig, libdaemon, dbus}: stdenv.mkDerivation { - name = "avahi-0.6.11"; + name = "avahi-0.6.21"; src = fetchurl { - url = http://avahi.org/download/avahi-0.6.11.tar.gz; - md5 = "91fd8cc0c2bae638848faad36cf1c032"; + url = http://avahi.org/download/avahi-0.6.21.tar.gz; + sha256 = "d817c35f43011861476eab02eea14edd123b2bc58b4408d9d9b69b0c39252561"; }; #buildInputs = [pkgconfig glib gtk libpng libglade]; - buildInputs = [pkgconfig]; + buildInputs = [pkgconfig libdaemon dbus]; - configureFlags = "--disable-glib --disable-qt3 --disable-qt4 --disable-gtk --disable-dbus --disable-expat --disable-gdbm --disable-libdaemon --disable-python --disable-mono"; + configureFlags = "--disable-glib --disable-qt3 --disable-qt4 --disable-gtk --disable-expat --disable-gdbm --disable-python --disable-mono --with-distro=none CPPFLAGS=-Ddbus_watch_get_unix_fd=dbus_watch_get_fd"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3190d145a62d..88c50c180214 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -333,6 +333,10 @@ rec { inherit fetchurl stdenv zlib wxGTK; }; + avahi = import ../development/libraries/avahi { + inherit stdenv fetchurl pkgconfig libdaemon dbus; + }; + axel = import ../tools/networking/axel { inherit fetchurl stdenv; }; From 734a1b39e0b85e376cd2671bf4274f8de4cd6c18 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:00 +0000 Subject: [PATCH 272/320] added SDL_net, some minor modifications to SDL_image and SDL_mixer svn path=/nixpkgs/branches/stdenv-updates/; revision=10595 --- .../libraries/SDL_image/default.nix | 17 +++++++------ .../libraries/SDL_mixer/default.nix | 25 ++++++++++++++----- .../development/libraries/SDL_net/default.nix | 22 ++++++++++++++++ 3 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 pkgs/development/libraries/SDL_net/default.nix diff --git a/pkgs/development/libraries/SDL_image/default.nix b/pkgs/development/libraries/SDL_image/default.nix index 4dd7d3679b84..d26213ef7cd7 100644 --- a/pkgs/development/libraries/SDL_image/default.nix +++ b/pkgs/development/libraries/SDL_image/default.nix @@ -1,11 +1,14 @@ args: with args; -stdenv.mkDerivation { - name = "SDL_image-1.2.6"; +stdenv.mkDerivation (rec { + pname = "SDL_image"; + version = "1.2.6"; + + name = "${pname}-${version}"; src = fetchurl { - url = http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.6.tar.gz; - sha256 = "1i3f72dw3i3l6d77dk81gw57sp0629rng9k76qb37brlz7dv3z48"; - }; + url = "http://www.libsdl.org/projects/${pname}/release/${name}.tar.gz"; + sha256 = "1i3f72dw3i3l6d77dk81gw57sp0629rng9k76qb37brlz7dv3z48"; + }; buildInputs = [SDL libpng libjpeg libtiff libungif libXpm]; @@ -13,7 +16,7 @@ stdenv.mkDerivation { meta = { description = " - SDL image library. + SDL image library. "; }; -} +}) diff --git a/pkgs/development/libraries/SDL_mixer/default.nix b/pkgs/development/libraries/SDL_mixer/default.nix index 14b8359c70a4..024fd643be6f 100644 --- a/pkgs/development/libraries/SDL_mixer/default.nix +++ b/pkgs/development/libraries/SDL_mixer/default.nix @@ -1,11 +1,24 @@ -{stdenv, fetchurl, SDL, libogg, libvorbis}: +args: with args; +stdenv.mkDerivation (rec { + pname = "SDL_mixer"; + version = "1.2.8"; + + name = "${pname}-${version}"; -stdenv.mkDerivation { - name = "SDL_mixer-1.2.7"; src = fetchurl { - url = http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.7.tar.gz; - md5 = "7959b89c8f8f1564ca90968f6c88fa1e"; + url = "http://www.libsdl.org/projects/${pname}/release/${name}.tar.gz"; + sha256 = "a8222a274778ff16d0e3ee49a30db27a48a4d357169a915fc599a764e405e0b6"; }; + buildInputs = [SDL libogg libvorbis]; + configureFlags = "--disable-music-ogg-shared"; -} + + postInstall = "ln -s \${out}/include/SDL/SDL_mixer.h \${out}/include/"; + + meta = { + description = " + SDL multi-channel audio mixer library. +"; + }; +}) diff --git a/pkgs/development/libraries/SDL_net/default.nix b/pkgs/development/libraries/SDL_net/default.nix new file mode 100644 index 000000000000..7de557322f66 --- /dev/null +++ b/pkgs/development/libraries/SDL_net/default.nix @@ -0,0 +1,22 @@ +args: with args; +stdenv.mkDerivation (rec { + pname = "SDL_net"; + version = "1.2.7"; + + name = "${pname}-${version}"; + + src = fetchurl { + url = "http://www.libsdl.org/projects/SDL_net/release/${name}.tar.gz"; + sha256 = "2ce7c84e62ff8117b9f205758bcce68ea603e08bc9d6936ded343735b8b77c53"; + }; + + buildInputs = [SDL]; + + postInstall = "ln -s \${out}/include/SDL/SDL_net.h \${out}/include/"; + + meta = { + description = " + SDL networking library. +"; + }; +}) From 25b980dbe4b6b6c9d2213a5bb888c55f13413029 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:08 +0000 Subject: [PATCH 273/320] added Battle for Wesnoth, a free, turn-based strategy game svn path=/nixpkgs/branches/stdenv-updates/; revision=10596 --- pkgs/games/wesnoth/default.nix | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pkgs/games/wesnoth/default.nix diff --git a/pkgs/games/wesnoth/default.nix b/pkgs/games/wesnoth/default.nix new file mode 100644 index 000000000000..3e4cf07e5c53 --- /dev/null +++ b/pkgs/games/wesnoth/default.nix @@ -0,0 +1,22 @@ +args: with args; +stdenv.mkDerivation (rec { + pname = "wesnoth"; + version = "1.3.15"; + + name = "${pname}-${version}"; + + src = fetchurl { + url = "http://surfnet.dl.sourceforge.net/sourceforge/${pname}/${name}.tar.bz2"; + sha256 = "5c5c723bdef0b9872a20a4ee11365f050251baed375ee951db726bf82401766e"; + }; + + buildInputs = [SDL SDL_image SDL_mixer SDL_net gettext zlib boost freetype]; + + configureFlags = "--with-preferences-dir=.${name} --program-suffix=-${version} --with-datadir-name=${name} --with-boost=${boost}/include --disable-python"; + + meta = { + description = " + The Battle for Wesnoth is a free, turn-based strategy game with a fantasy theme. +"; + }; +}) From f99bae4c0ed6666956ee98320d39aa943ce7274d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:16 +0000 Subject: [PATCH 274/320] forgot to update all-packages.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=10597 --- pkgs/top-level/all-packages.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 88c50c180214..d52bb7eef77f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2613,6 +2613,10 @@ rec { inherit fetchurl stdenv SDL libogg libvorbis; }; + SDL_net = import ../development/libraries/SDL_net { + inherit fetchurl stdenv SDL; + }; + SDL_ttf = import ../development/libraries/SDL_ttf { inherit fetchurl stdenv SDL freetype; }; @@ -3758,6 +3762,10 @@ rec { stdenv = makeStaticBinaries stdenv; })); + wesnoth = import ../games/wesnoth { + inherit fetchurl stdenv SDL SDL_image SDL_mixer SDL_net gettext zlib boost freetype; + }; + wirelesstools = import ../os-specific/linux/wireless-tools { inherit fetchurl stdenv; }; From 82297a0c8368a615e10a9292c9f225b21743bae8 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:24 +0000 Subject: [PATCH 275/320] * KVM 57. (Newer versions don't compile against the current kernel headers.) svn path=/nixpkgs/branches/stdenv-updates/; revision=10598 --- pkgs/os-specific/linux/kvm/57.nix | 24 ++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 8 +++++++- 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 pkgs/os-specific/linux/kvm/57.nix diff --git a/pkgs/os-specific/linux/kvm/57.nix b/pkgs/os-specific/linux/kvm/57.nix new file mode 100644 index 000000000000..c7859eed178e --- /dev/null +++ b/pkgs/os-specific/linux/kvm/57.nix @@ -0,0 +1,24 @@ +{stdenv, fetchurl, kernelHeaders, zlib, e2fsprogs, SDL, alsaLib}: + +assert stdenv.isLinux; + +stdenv.mkDerivation { + name = "kvm-57"; + + src = fetchurl { + url = mirror://sourceforge/kvm/kvm-57.tar.gz; + sha256 = "016h5pf59fyz7skzsaprii2mdpxpb8hfnnr1w475qcfyy6ccr9r0"; + }; + + configureFlags = "--with-patched-kernel --kerneldir=${kernelHeaders}"; + + # e2fsprogs is needed for libuuid. + buildInputs = [zlib e2fsprogs SDL alsaLib]; + + preConfigure = "for i in configure user/configure; do substituteInPlace $i --replace /bin/bash $shell; done"; + + meta = { + homepage = http://kvm.qumranet.com/; + description = "A full virtualization solution for Linux on x86 hardware containing virtualization extensions"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d52bb7eef77f..ec71df793eab 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3522,7 +3522,7 @@ rec { inherit fetchurl stdenv perl bison mktemp kernel; }; - kvm = kvm49; + kvm = kvm57; kvm12 = import ../os-specific/linux/kvm/12.nix { inherit fetchurl zlib e2fsprogs SDL alsaLib; @@ -3542,6 +3542,12 @@ rec { kernelHeaders = kernelHeaders_2_6_23; }; + kvm57 = import ../os-specific/linux/kvm/57.nix { + inherit fetchurl zlib e2fsprogs SDL alsaLib; + stdenv = overrideGCC stdenv gcc34; + kernelHeaders = kernelHeaders_2_6_23; + }; + libcap = import ../os-specific/linux/libcap { inherit fetchurl stdenv; }; From 7830284677f80112f50e80122a0d96d12714e566 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:31 +0000 Subject: [PATCH 276/320] * Latest unstable version. svn path=/nixpkgs/branches/stdenv-updates/; revision=10599 --- pkgs/tools/package-management/nix/unstable.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/package-management/nix/unstable.nix b/pkgs/tools/package-management/nix/unstable.nix index a204b10f1f5c..1a507f20a043 100644 --- a/pkgs/tools/package-management/nix/unstable.nix +++ b/pkgs/tools/package-management/nix/unstable.nix @@ -3,14 +3,14 @@ , stateDir ? "/nix/var" }: -let version = "0.12pre10389"; in +let version = "0.12pre10505"; in stdenv.mkDerivation { name = "nix-${version}"; src = fetchurl { url = "http://nix.cs.uu.nl/dist/nix/nix-${version}/nix-${version}.tar.bz2"; - md5 = "5824debe60299ebc9c5aa6532e6a8b67"; + md5 = "44dd2927ce97f12b3f110a7ad991828e"; }; buildInputs = [perl curl openssl]; From 71dd78fe64eb011a217c6f45db53624999450a2c Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:39 +0000 Subject: [PATCH 277/320] * man-db 2.5.1. svn path=/nixpkgs/branches/stdenv-updates/; revision=10600 --- pkgs/tools/misc/man/default.nix | 25 +++++++-- pkgs/tools/misc/man/share.patch | 91 ++++++++++++++++----------------- 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/pkgs/tools/misc/man/default.nix b/pkgs/tools/misc/man/default.nix index deb0f83ad8ad..54367e671ea4 100644 --- a/pkgs/tools/misc/man/default.nix +++ b/pkgs/tools/misc/man/default.nix @@ -1,15 +1,32 @@ {stdenv, fetchurl, db4, groff}: stdenv.mkDerivation { - name = "man-2.4.3"; + name = "man-db-2.5.1"; + src = fetchurl { - url = http://savannah.nongnu.org/download/man-db/man-db-2.4.3.tar.gz; - md5 = "30814a47f209f43b152659ba51fc7937"; + url = http://download.savannah.nongnu.org/releases/man-db/man-db-2.5.1.tar.gz; + sha256 = "178w1fk23ffh8vabj29cn0yyg5ps7bwy1zrrrcsw8aypbh3sfjy3"; }; + buildInputs = [db4 groff]; - configureFlags = "--disable-setuid"; + + configureFlags = '' + --disable-setuid + --with-nroff=${groff}/bin/nroff + --with-tbl=${groff}/bin/tbl + --with-eqn=${groff}/bin/eqn + --with-neqn=${groff}/bin/neqn + ''; + + troff = "${groff}/bin/troff"; + patches = [ # Search in "share/man" relative to each path in $PATH (in addition to "man"). ./share.patch ]; + + meta = { + homepage = http://www.nongnu.org/man-db/; + description = "An implementation of the standard Unix documentation system accessed using the man command"; + }; } diff --git a/pkgs/tools/misc/man/share.patch b/pkgs/tools/misc/man/share.patch index 3367f4ceb61d..95582a50269d 100644 --- a/pkgs/tools/misc/man/share.patch +++ b/pkgs/tools/misc/man/share.patch @@ -1,79 +1,77 @@ -diff -rc man-db-2.4.3/src/manp.c man-db-2.4.3-new/src/manp.c -*** man-db-2.4.3/src/manp.c Mon Nov 8 10:06:03 2004 ---- man-db-2.4.3-new/src/manp.c Tue Jan 9 17:08:31 2007 +diff -rc man-db-2.5.1-orig/src/manp.c man-db-2.5.1/src/manp.c +*** man-db-2.5.1-orig/src/manp.c 2008-01-07 03:23:11.000000000 +0100 +--- man-db-2.5.1/src/manp.c 2008-02-07 14:20:20.000000000 +0100 *************** -*** 101,107 **** +*** 96,102 **** static void mkcatdirs (const char *mandir, const char *catdir); - static __inline__ char *get_manpath (char *path); -! static __inline__ char *has_mandir (const char *p); - static __inline__ char *fsstnd (const char *path); + static inline char *get_manpath_from_path (const char *path); +! static inline char *has_mandir (const char *p); + static inline char *fsstnd (const char *path); static char *def_path (int flag); static void add_dir_to_list (char **lp, const char *dir); ---- 101,107 ---- +--- 96,102 ---- static void mkcatdirs (const char *mandir, const char *catdir); - static __inline__ char *get_manpath (char *path); -! static __inline__ char *has_mandir (const char *p, const char *mandir); - static __inline__ char *fsstnd (const char *path); + static inline char *get_manpath_from_path (const char *path); +! static inline char *has_mandir (const char *p, const char *mandir); + static inline char *fsstnd (const char *path); static char *def_path (int flag); static void add_dir_to_list (char **lp, const char *dir); *************** -*** 885,891 **** - if (debug) - fputs ("is not in the config file\n", stderr); +*** 928,934 **** + } else { + debug ("is not in the config file\n"); ! t = has_mandir (p); if (t) { - if (debug) - fprintf (stderr, "but does have a ../man or man subdirectory\n"); ---- 885,891 ---- - if (debug) - fputs ("is not in the config file\n", stderr); + debug ("but does have a ../man or man " + "subdirectory\n"); +--- 928,934 ---- + } else { + debug ("is not in the config file\n"); ! t = has_mandir (p, "man"); if (t) { - if (debug) - fprintf (stderr, "but does have a ../man or man subdirectory\n"); + debug ("but does have a ../man or man " + "subdirectory\n"); *************** -*** 895,900 **** ---- 895,911 ---- +*** 938,943 **** +--- 938,952 ---- } else - if (debug) - fprintf (stderr, "and doesn't have ../man or man subdirectories\n"); -+ -+ t = has_mandir (p, "share/man"); -+ if (t) { -+ if (debug) -+ fprintf (stderr, "but does have a ../share/man or share/man subdirectory\n"); -+ -+ add_dir_to_list (tmplist, t); -+ free (t); -+ } -+ if (debug) -+ fprintf (stderr, "and doesn't have ../share/man or share/man subdirectories\n"); + debug ("and doesn't have ../man or man " + "subdirectories\n"); ++ ++ t = has_mandir (p, "share/man"); ++ if (t) { ++ debug ("but does have a ../share/man or share/man subdirectory\n"); ++ ++ add_dir_to_list (tmplist, t); ++ free (t); ++ } else ++ debug ("and doesn't have ../share/man or share/man subdirectories\n"); } } *************** -*** 973,979 **** +*** 1013,1019 **** /* path does not exist in config file: check to see if path/../man or path/man exist. If so return it, if not return NULL. */ -! static __inline__ char *has_mandir (const char *path) +! static inline char *has_mandir (const char *path) { char *newpath = NULL; ---- 984,990 ---- +--- 1022,1028 ---- /* path does not exist in config file: check to see if path/../man or path/man exist. If so return it, if not return NULL. */ -! static __inline__ char *has_mandir (const char *path, const char *mandir) +! static inline char *has_mandir (const char *path, const char *mandir) { char *newpath = NULL; *************** -*** 983,991 **** +*** 1023,1031 **** char *subdir = strrchr (path, '/'); if (subdir) { const int prefix_len = subdir + 1 - path; @@ -83,7 +81,7 @@ diff -rc man-db-2.4.3/src/manp.c man-db-2.4.3-new/src/manp.c if (is_directory (newpath) == 1) return newpath; ---- 994,1002 ---- +--- 1032,1040 ---- char *subdir = strrchr (path, '/'); if (subdir) { const int prefix_len = subdir + 1 - path; @@ -94,20 +92,19 @@ diff -rc man-db-2.4.3/src/manp.c man-db-2.4.3-new/src/manp.c if (is_directory (newpath) == 1) return newpath; *************** -*** 993,999 **** +*** 1033,1039 **** *newpath = '\0'; } -! newpath = strappend (newpath, path, "/man", NULL); +! newpath = appendstr (newpath, path, "/man", NULL); if (is_directory (newpath) == 1) return newpath; ---- 1004,1010 ---- +--- 1042,1048 ---- *newpath = '\0'; } -! newpath = strappend (newpath, path, "/", mandir, NULL); +! newpath = appendstr (newpath, path, "/", mandir, NULL); if (is_directory (newpath) == 1) return newpath; -Only in man-db-2.4.3-new/src: manp.c~ From 38fc3e625998e8eafc1133c0a8ff3a4f954bef68 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:46 +0000 Subject: [PATCH 278/320] * man -> man-db. svn path=/nixpkgs/branches/stdenv-updates/; revision=10601 --- pkgs/tools/misc/{man => man-db}/default.nix | 0 pkgs/tools/misc/{man => man-db}/share.patch | 0 pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename pkgs/tools/misc/{man => man-db}/default.nix (100%) rename pkgs/tools/misc/{man => man-db}/share.patch (100%) diff --git a/pkgs/tools/misc/man/default.nix b/pkgs/tools/misc/man-db/default.nix similarity index 100% rename from pkgs/tools/misc/man/default.nix rename to pkgs/tools/misc/man-db/default.nix diff --git a/pkgs/tools/misc/man/share.patch b/pkgs/tools/misc/man-db/share.patch similarity index 100% rename from pkgs/tools/misc/man/share.patch rename to pkgs/tools/misc/man-db/share.patch diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ec71df793eab..f759ce901e94 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -627,7 +627,7 @@ rec { inherit fetchurl stdenv; }; - man = import ../tools/misc/man { + man_db = import ../tools/misc/man-db { inherit fetchurl stdenv db4 groff; }; From eddff7a74a99da2a46f7f5d6210c2db6d3c3f9e2 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:40:54 +0000 Subject: [PATCH 279/320] * A more pure man implementation. svn path=/nixpkgs/branches/stdenv-updates/; revision=10602 --- pkgs/tools/misc/man/default.nix | 26 +++++++ pkgs/tools/misc/man/share.patch | 116 ++++++++++++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++ 3 files changed, 146 insertions(+) create mode 100644 pkgs/tools/misc/man/default.nix create mode 100644 pkgs/tools/misc/man/share.patch diff --git a/pkgs/tools/misc/man/default.nix b/pkgs/tools/misc/man/default.nix new file mode 100644 index 000000000000..490aa4606abb --- /dev/null +++ b/pkgs/tools/misc/man/default.nix @@ -0,0 +1,26 @@ +{stdenv, fetchurl, groff, less}: + +stdenv.mkDerivation { + name = "man-1.6f"; + + src = fetchurl { + url = http://primates.ximian.com/~flucifredi/man/man-1.6f.tar.gz; + sha256 = "0v2z6ywhy8kd2fa3ywkqayhjdivbaqn6qvhx93a1ldw135z8q84z"; + }; + + buildInputs = [groff less]; + + preBuild = '' + makeFlagsArray=(bindir=$out/bin sbindir=$out/sbin libdir=$out/lib mandir=$out/share/man) + ''; + + patches = [ + # Search in "share/man" relative to each path in $PATH (in addition to "man"). + ./share.patch + ]; + + meta = { + homepage = http://primates.ximian.com/~flucifredi/man/; + description = "Tool to read online Unix documentation"; + }; +} diff --git a/pkgs/tools/misc/man/share.patch b/pkgs/tools/misc/man/share.patch new file mode 100644 index 000000000000..837786e28eba --- /dev/null +++ b/pkgs/tools/misc/man/share.patch @@ -0,0 +1,116 @@ +diff -rc man-1.6f-orig/src/manpath.c man-1.6f/src/manpath.c +*** man-1.6f-orig/src/manpath.c 2006-08-03 23:18:33.000000000 +0200 +--- man-1.6f/src/manpath.c 2008-02-07 15:31:43.000000000 +0100 +*************** +*** 109,121 **** + * or ../man or ../man1 or ../man8 subdirectories. + */ + static char * +! find_man_subdir (char *p) { + int len; + char *t, *sp; + + len = strlen (p); + +! t = my_malloc ((unsigned) len + 20); + + memcpy (t, p, len); + strcpy (t + len, "/man"); +--- 109,121 ---- + * or ../man or ../man1 or ../man8 subdirectories. + */ + static char * +! find_man_subdir (char *p, char * maybe_share) { + int len; + char *t, *sp; + + len = strlen (p); + +! t = my_malloc ((unsigned) len + 30); + + memcpy (t, p, len); + strcpy (t + len, "/man"); +*************** +*** 139,159 **** + } + + /* look for the situation with packagedir/bin and packagedir/man */ +! strcpy (t + len, "/man"); + + if (is_directory (t) == 1) + return t; + + /* look for the situation with pkg/bin and pkg/man1 or pkg/man8 */ + /* (looking for all man[1-9] would probably be a waste of stats) */ +! strcpy (t + len, "/man1"); + + if (is_directory (t) == 1) { + t[len] = 0; + return t; + } + +! strcpy (t + len, "/man8"); + + if (is_directory (t) == 1) { + t[len] = 0; +--- 139,159 ---- + } + + /* look for the situation with packagedir/bin and packagedir/man */ +! sprintf (t + len, "%s/man", maybe_share); + + if (is_directory (t) == 1) + return t; + + /* look for the situation with pkg/bin and pkg/man1 or pkg/man8 */ + /* (looking for all man[1-9] would probably be a waste of stats) */ +! sprintf (t + len, "%s/man1", maybe_share); + + if (is_directory (t) == 1) { + t[len] = 0; + return t; + } + +! sprintf (t + len, "%s/man8", maybe_share); + + if (is_directory (t) == 1) { + t[len] = 0; +*************** +*** 341,347 **** + if (debug) + gripe (IS_NOT_IN_CONFIG); + +! t = find_man_subdir (dir); + if (t != NULL) { + if (debug) + gripe (MAN_NEARBY); +--- 341,347 ---- + if (debug) + gripe (IS_NOT_IN_CONFIG); + +! t = find_man_subdir (dir, ""); + if (t != NULL) { + if (debug) + gripe (MAN_NEARBY); +*************** +*** 352,357 **** +--- 352,370 ---- + if (debug) + gripe (NO_MAN_NEARBY); + } ++ ++ t = find_man_subdir (dir, "/share"); ++ if (t != NULL) { ++ if (debug) ++ gripe (MAN_NEARBY); ++ ++ add_to_mandirlist (t, perrs); ++ free (t); ++ } else { ++ if (debug) ++ gripe (NO_MAN_NEARBY); ++ } ++ + } + } + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f759ce901e94..2329c49b2387 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -627,6 +627,10 @@ rec { inherit fetchurl stdenv; }; + man = import ../tools/misc/man { + inherit fetchurl stdenv groff less; + }; + man_db = import ../tools/misc/man-db { inherit fetchurl stdenv db4 groff; }; From 07e6d98fd541d6af3e7a447d23c20ce31da9cad5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:04 +0000 Subject: [PATCH 280/320] Fixed selectVersion syntax (introduced by trunk merge) svn path=/nixpkgs/branches/stdenv-updates/; revision=10603 --- pkgs/top-level/all-packages.nix | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2329c49b2387..2f540339ffc9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -944,9 +944,8 @@ rec { inherit fetchurl stdenv ncurses; }; - zshFun = lib.sumArgs (selectVersion ../shells/zsh) { + zshFun = lib.sumArgs (selectVersion ../shells/zsh "4.3.5") { inherit fetchurl stdenv ncurses coreutils; - version = "4.3.5"; }; zsh = zshFun null; @@ -2665,9 +2664,8 @@ rec { qt = qt4; }; - tkFun = lib.sumArgs (selectVersion ../development/libraries/tk) { + tkFun = lib.sumArgs (selectVersion ../development/libraries/tk "8.4.16") { inherit fetchurl stdenv tcl x11; - version = "8.4.16"; }; tk = tkFun null; @@ -3868,10 +3866,9 @@ rec { inherit fetchurl stdenv cabextract; }; - xkeyboard_configFun = lib.sumArgs (selectVersion ../data/misc/xkeyboard-config ) { + xkeyboard_configFun = lib.sumArgs (selectVersion ../data/misc/xkeyboard-config "1.2") { inherit fetchurl stdenv perl perlXMLParser gettext; inherit (xlibs) xkbcomp; - version = "1.2"; }; xkeyboard_config = xkeyboard_configFun null; From 80d81c1a822c849a50ada4c48be135d8b9faf972 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:10 +0000 Subject: [PATCH 281/320] Ncurses: more compatibility .la's svn path=/nixpkgs/branches/stdenv-updates/; revision=10604 --- pkgs/development/libraries/ncurses/5.6.nix | 22 +++++++++++++++++++ .../development/libraries/ncurses/default.nix | 19 ---------------- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 23 insertions(+), 20 deletions(-) create mode 100644 pkgs/development/libraries/ncurses/5.6.nix delete mode 100644 pkgs/development/libraries/ncurses/default.nix diff --git a/pkgs/development/libraries/ncurses/5.6.nix b/pkgs/development/libraries/ncurses/5.6.nix new file mode 100644 index 000000000000..d7ad58066053 --- /dev/null +++ b/pkgs/development/libraries/ncurses/5.6.nix @@ -0,0 +1,22 @@ +args: with args; + +stdenv.mkDerivation { + name = "ncurses-5.6"; + src = fetchurl { + url = mirror://gnu/ncurses/ncurses-5.6.tar.gz; + sha256 = "1m94axgq3y9c4ld0sba63rls1611fncra49ppijpv8w32srw5jpr"; + }; + configureFlags = [ "--with-shared" "--without-normal" + "--includedir=\${out}/include" "--without-debug"] + ++ (if unicode then ["--enable-widec"] else []); + postInstall= if unicode then " + chmod -v 644 $out/lib/libncurses++w.a + for lib in curses ncurses form panel menu; do + echo \"INPUT(-l\${lib}w)\" > $out/lib/lib\${lib}.so + done + echo \"INPUT(-lncursesw)\" > $out/lib/libcursesw.so + " else " + chmod -v 644 $out/lib/libncurses++.a + echo \"INPUT(-lncurses)\" > $out/lib/libcurses.so + "; +} diff --git a/pkgs/development/libraries/ncurses/default.nix b/pkgs/development/libraries/ncurses/default.nix deleted file mode 100644 index 49045546975f..000000000000 --- a/pkgs/development/libraries/ncurses/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{stdenv, fetchurl, unicode ? true}: - -stdenv.mkDerivation { - name = "ncurses-5.6"; - src = fetchurl { - url = mirror://gnu/ncurses/ncurses-5.6.tar.gz; - md5 = "b6593abe1089d6aab1551c105c9300e3"; - }; - configureFlags="--with-shared --includedir=\${out}/include"+(if unicode then " --enable-widec " else " ") +" --without-debug"; - postInstall= if unicode then " - chmod -v 644 $out/lib/libncurses++w.a - for lib in curses ncurses form panel menu; do - rm -vf $out/lib/lib\${lib}.so - echo \"INPUT(-l\${lib}w)\" > $out/lib/lib\${lib}.so - ln -svf lib\${lib}w.a $out/lib/lib\${lib}.a - ln -svf lib\${lib}w.so.5 $out/lib/lib\${lib}.so.5 - done; - " else ""; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2f540339ffc9..ac727a2dfa26 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2465,7 +2465,7 @@ rec { inherit fetchurl stdenv mysql libtool zlib unixODBC; }; - ncurses = import ../development/libraries/ncurses { + ncurses = selectVersion ../development/libraries/ncurses "5.6" { inherit fetchurl stdenv; unicode = (system != "i686-cygwin"); }; From 5a69612d68c71860af19eb4ce936b9ec3faa88a7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:17 +0000 Subject: [PATCH 282/320] ntfs-3g: version updated svn path=/nixpkgs/branches/stdenv-updates/; revision=10605 --- pkgs/misc/ntfs-3g/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/misc/ntfs-3g/default.nix b/pkgs/misc/ntfs-3g/default.nix index 5f6a0bdbc5fe..1962f6764e82 100644 --- a/pkgs/misc/ntfs-3g/default.nix +++ b/pkgs/misc/ntfs-3g/default.nix @@ -1,9 +1,9 @@ args: with args; stdenv.mkDerivation rec { - name = "ntfs-3g-1.1104"; + name = "ntfs-3g-1.2129"; src = fetchurl { url = "${meta.homepage}/${name}.tgz"; - sha256 = "1m96c3vxm051lpy3kyik9s0m390rj6ngm11xmahfhw61794jzbyp"; + sha256 = "00fqg39m5myi46kgsssxmpya6g8y32z6ggqc2snjrv0znfg3009i"; }; buildInputs = [fuse pkgconfig]; preConfigure="sed -e 's:/sbin:@sbindir@:' -i src/Makefile.in"; From 2c0bf029fb05985cbf9e6a9a3fb41d50634eb45e Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:23 +0000 Subject: [PATCH 283/320] Postgresql: 8.3.0 added, using selectVersion svn path=/nixpkgs/branches/stdenv-updates/; revision=10606 --- pkgs/servers/sql/postgresql/8.2.6.nix | 14 ++++++++++++++ pkgs/servers/sql/postgresql/8.3.0.nix | 14 ++++++++++++++ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 pkgs/servers/sql/postgresql/8.2.6.nix create mode 100644 pkgs/servers/sql/postgresql/8.3.0.nix diff --git a/pkgs/servers/sql/postgresql/8.2.6.nix b/pkgs/servers/sql/postgresql/8.2.6.nix new file mode 100644 index 000000000000..f5ce8741f86e --- /dev/null +++ b/pkgs/servers/sql/postgresql/8.2.6.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "postgresql-" + version; + LC_ALL = "en_US"; + + src = fetchurl { + url = "ftp://ftp.de.postgresql.org/mirror/postgresql/source/v${version}/${name}.tar.bz2"; + sha256="056ixbsfmdwhniryc0mr1kl66jywkqqhqvjdi7i3v4qzh9z34hgf"; + }; + + passthru = { inherit readline; }; + buildInputs = [zlib ncurses readline]; +} diff --git a/pkgs/servers/sql/postgresql/8.3.0.nix b/pkgs/servers/sql/postgresql/8.3.0.nix new file mode 100644 index 000000000000..04244fff85bf --- /dev/null +++ b/pkgs/servers/sql/postgresql/8.3.0.nix @@ -0,0 +1,14 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "postgresql-" + version; + LC_ALL = "en_US"; + + src = fetchurl { + url = "ftp://ftp.de.postgresql.org/mirror/postgresql/source/v${version}/${name}.tar.bz2"; + sha256="19kf0q45d5zd1rxffin0iblizckk8cp6fpgb52sipqkpnmm6sdc5"; + }; + + passthru = { inherit readline; }; + buildInputs = [zlib ncurses readline]; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ac727a2dfa26..d571012f630b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3236,7 +3236,7 @@ rec { inherit fetchurl stdenv openssh; }; - postgresql = import ../servers/sql/postgresql { + postgresql = selectVersion ../servers/sql/postgresql "8.3.0" { inherit fetchurl stdenv readline ncurses zlib; }; From 0a270d49e751926118acf9477493d497a0dc50a7 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:29 +0000 Subject: [PATCH 284/320] libsigsegv: shared svn path=/nixpkgs/branches/stdenv-updates/; revision=10607 --- pkgs/development/libraries/libsigsegv/2.5.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/development/libraries/libsigsegv/2.5.nix b/pkgs/development/libraries/libsigsegv/2.5.nix index 11f69753dc80..a8711b3e3dad 100644 --- a/pkgs/development/libraries/libsigsegv/2.5.nix +++ b/pkgs/development/libraries/libsigsegv/2.5.nix @@ -7,6 +7,8 @@ stdenv.mkDerivation rec { sha256 = "0fvcsq9msi63vrbpvks6mqkrnls5cfy6bzww063sqhk2h49vsyyg"; }; + configureFlags = "--enable-shared --disable-static"; + meta = { homepage = http://libsigsegv.sf.net; description = "A library for handling page faults in user mode"; From cc0430ca4b93204a0f7f9b997bd6cd6b3904b5b3 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:35 +0000 Subject: [PATCH 285/320] gettext: shared svn path=/nixpkgs/branches/stdenv-updates/; revision=10608 --- pkgs/development/libraries/gettext/0.17.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/gettext/0.17.nix b/pkgs/development/libraries/gettext/0.17.nix index 6063f74612b5..5fc60d9b8a6f 100644 --- a/pkgs/development/libraries/gettext/0.17.nix +++ b/pkgs/development/libraries/gettext/0.17.nix @@ -5,5 +5,5 @@ stdenv.mkDerivation rec { url = "mirror://gnu/gettext/${name}.tar.gz"; sha256 = "1fipjpaxxwifdw6cbr7mkxp1yvy643i38nhlh7124bqnisxki5i0"; }; - configureFlags = "--disable-csharp"; + configureFlags = "--disable-csharp --enable-shared --disable-static"; } From 6e337bd44dea8ef8267b2787f932983de78e2820 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:40 +0000 Subject: [PATCH 286/320] libxslt: propagating libxml2 svn path=/nixpkgs/branches/stdenv-updates/; revision=10609 --- pkgs/development/libraries/libxslt/default.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/libxslt/default.nix b/pkgs/development/libraries/libxslt/default.nix index 896d0fc563bb..0d86ff615d4b 100644 --- a/pkgs/development/libraries/libxslt/default.nix +++ b/pkgs/development/libraries/libxslt/default.nix @@ -1,6 +1,4 @@ -{stdenv, fetchurl, libxml2}: - -assert libxml2 != null; +args: with args; stdenv.mkDerivation { name = "libxslt-1.1.22"; @@ -8,6 +6,6 @@ stdenv.mkDerivation { url = ftp://xmlsoft.org/libxml2/libxslt-1.1.22.tar.gz; sha256 = "1nj9pvn4ibhwxpl3ry9n6d7jahppcnqc7mi87nld4vsr2vp3j7sf"; }; - buildInputs = [libxml2]; - postInstall = "ensureDir $out/nix-support; ln -s ${libxml2}/nix-support/setup-hook $out/nix-support/"; + propagatedBuildInputs = [libxml2]; + configureFlags = "--enable-shared --disable-static"; } From b5b189bed8426ff6d1e3047c9cf5bfd57778a02d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:45 +0000 Subject: [PATCH 287/320] postgresql: forgotten to remove unused default.nix and builder.sh svn path=/nixpkgs/branches/stdenv-updates/; revision=10610 --- pkgs/servers/sql/postgresql/builder.sh | 10 ---------- pkgs/servers/sql/postgresql/default.nix | 18 ------------------ 2 files changed, 28 deletions(-) delete mode 100755 pkgs/servers/sql/postgresql/builder.sh delete mode 100644 pkgs/servers/sql/postgresql/default.nix diff --git a/pkgs/servers/sql/postgresql/builder.sh b/pkgs/servers/sql/postgresql/builder.sh deleted file mode 100755 index 20e50ec1ec6f..000000000000 --- a/pkgs/servers/sql/postgresql/builder.sh +++ /dev/null @@ -1,10 +0,0 @@ -source $stdenv/setup - -export LANG=en_US - -# configureFlags="" -# if test "$jdbcSupport"; then -# configureFlags="--with-java $configureFlags" -# fi - -genericBuild diff --git a/pkgs/servers/sql/postgresql/default.nix b/pkgs/servers/sql/postgresql/default.nix deleted file mode 100644 index a46f99e454b1..000000000000 --- a/pkgs/servers/sql/postgresql/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{stdenv, fetchurl, zlib, ncurses, readline}: - -assert zlib != null; -assert ncurses != null; -assert readline != null; - -stdenv.mkDerivation { - name = "postgresql-8.2.6"; - builder = ./builder.sh; - - src = fetchurl { - url = ftp://ftp.de.postgresql.org/mirror/postgresql/source/v8.2.6/postgresql-8.2.6.tar.bz2; - sha256="056ixbsfmdwhniryc0mr1kl66jywkqqhqvjdi7i3v4qzh9z34hgf"; - }; - - inherit readline; - buildInputs = [zlib ncurses readline]; -} From e2751942c733c1fe4974ea1108076bd3ad066a2a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:51 +0000 Subject: [PATCH 288/320] cmake: 2.4.8 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10611 --- .../tools/build-managers/cmake/2.4.7.nix | 3 +++ .../tools/build-managers/cmake/2.4.8.nix | 3 +++ .../tools/build-managers/cmake/common.nix | 19 ++++++++++++++++++ .../tools/build-managers/cmake/default.nix | 20 ------------------- pkgs/top-level/all-packages.nix | 2 +- 5 files changed, 26 insertions(+), 21 deletions(-) create mode 100644 pkgs/development/tools/build-managers/cmake/2.4.7.nix create mode 100644 pkgs/development/tools/build-managers/cmake/2.4.8.nix create mode 100644 pkgs/development/tools/build-managers/cmake/common.nix delete mode 100644 pkgs/development/tools/build-managers/cmake/default.nix diff --git a/pkgs/development/tools/build-managers/cmake/2.4.7.nix b/pkgs/development/tools/build-managers/cmake/2.4.7.nix new file mode 100644 index 000000000000..a731d0a4d7d5 --- /dev/null +++ b/pkgs/development/tools/build-managers/cmake/2.4.7.nix @@ -0,0 +1,3 @@ +args: (import ./common.nix) { + sha256 = "0mkx23s7zq48hzzzw3vbzsfzfz3rjsiwgf3i00xawcxrjjrgxm9g"; +} (args // { v = "2.4"; }) diff --git a/pkgs/development/tools/build-managers/cmake/2.4.8.nix b/pkgs/development/tools/build-managers/cmake/2.4.8.nix new file mode 100644 index 000000000000..27eb5ea396af --- /dev/null +++ b/pkgs/development/tools/build-managers/cmake/2.4.8.nix @@ -0,0 +1,3 @@ +args: (import ./common.nix) { + sha256 = "1w9i0qrbciym5ahag24xyp1x0qj6awq1cs07hdjflxikyga0f1pj"; +} (args // { v = "2.4"; }) diff --git a/pkgs/development/tools/build-managers/cmake/common.nix b/pkgs/development/tools/build-managers/cmake/common.nix new file mode 100644 index 000000000000..ab1f01bf2d71 --- /dev/null +++ b/pkgs/development/tools/build-managers/cmake/common.nix @@ -0,0 +1,19 @@ +hash: args: with args; +stdenv.mkDerivation rec { + name = "cmake-" + version; + setupHook = ./setup-hook.sh; + + src = fetchurl ({ + url = "http://www.cmake.org/files/v${v}/${name}.tar.gz"; + } // hash); + + propagatedBuildInputs = [replace]; + + postUnpack = "source ${setupHook}; fixCmakeFiles \${sourceRoot}"; + + postInstall="fixCmakeFiles \$out/share"; + + meta = { + description = "Cross-Platform Makefile Generator"; + }; +} diff --git a/pkgs/development/tools/build-managers/cmake/default.nix b/pkgs/development/tools/build-managers/cmake/default.nix deleted file mode 100644 index 45311ee0e3cc..000000000000 --- a/pkgs/development/tools/build-managers/cmake/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -args: with args; -stdenv.mkDerivation { - name = "cmake-2.4.7"; - setupHook = ./setup-hook.sh; - - src = fetchurl { - url = http://www.cmake.org/files/v2.4/cmake-2.4.7.tar.gz; - sha256 = "0mkx23s7zq48hzzzw3vbzsfzfz3rjsiwgf3i00xawcxrjjrgxm9g"; - }; - - propagatedBuildInputs = [replace]; - - postUnpack = "source \${setupHook}; fixCmakeFiles \${sourceRoot}"; - - postInstall="fixCmakeFiles \$out/share"; - - meta = { - description = "Cross-Platform Makefile Generator"; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d571012f630b..fbfaef10bc87 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1525,7 +1525,7 @@ rec { inherit fetchurl stdenv; }; - cmake = import ../development/tools/build-managers/cmake { + cmake = (selectVersion ../development/tools/build-managers/cmake "2.4.8") { inherit fetchurl stdenv replace; }; From c3193c538a6eb2221cae268a15d361b8197cbed5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:41:58 +0000 Subject: [PATCH 289/320] sqlite: 3.5.6 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10612 --- .../sqlite/{default.nix => 3.3.13.nix} | 0 pkgs/development/libraries/sqlite/3.5.6.nix | 18 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 4 ++-- 3 files changed, 20 insertions(+), 2 deletions(-) rename pkgs/development/libraries/sqlite/{default.nix => 3.3.13.nix} (100%) create mode 100644 pkgs/development/libraries/sqlite/3.5.6.nix diff --git a/pkgs/development/libraries/sqlite/default.nix b/pkgs/development/libraries/sqlite/3.3.13.nix similarity index 100% rename from pkgs/development/libraries/sqlite/default.nix rename to pkgs/development/libraries/sqlite/3.3.13.nix diff --git a/pkgs/development/libraries/sqlite/3.5.6.nix b/pkgs/development/libraries/sqlite/3.5.6.nix new file mode 100644 index 000000000000..702e5693ba0e --- /dev/null +++ b/pkgs/development/libraries/sqlite/3.5.6.nix @@ -0,0 +1,18 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "sqlite-" + version; + + src = fetchurl { + url = "${meta.homepage}/${name}.tar.gz"; + sha256 = "1fz82x3wp2h1g701w8qrsg58hc0jmrhw2593crx0c663iqhvjwqn"; + }; + + configureFlags = "--enable-shared --disable-static"; + + propagatedBuildInputs = [readline]; + + meta = { + homepage = http://www.sqlite.org; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fbfaef10bc87..3c1f7c8f7c12 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2632,8 +2632,8 @@ rec { inherit fetchurl stdenv libogg; }; - sqlite = import ../development/libraries/sqlite { - inherit fetchurl stdenv; + sqlite = selectVersion ../development/libraries/sqlite "3.5.6" { + inherit fetchurl stdenv readline; }; t1lib = import ../development/libraries/t1lib { From 1cf8a9d0ede42a95033822187d6210ab08b6311a Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:42:02 +0000 Subject: [PATCH 290/320] readline5: shared, using sha256 svn path=/nixpkgs/branches/stdenv-updates/; revision=10613 --- pkgs/development/libraries/readline/readline5.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/readline/readline5.nix b/pkgs/development/libraries/readline/readline5.nix index a0e7ffd72d25..96ec1ffea798 100644 --- a/pkgs/development/libraries/readline/readline5.nix +++ b/pkgs/development/libraries/readline/readline5.nix @@ -1,11 +1,12 @@ -{ stdenv, fetchurl, ncurses }: +args: with args; stdenv.mkDerivation { name = "readline-5.2"; src = fetchurl { url = mirror://gnu/readline/readline-5.2.tar.gz; - md5 = "e39331f32ad14009b9ff49cc10c5e751"; + sha256 = "0icz4hqqq8mlkwrpczyaha94kns0am9z0mh3a2913kg2msb8vs0j"; }; propagatedBuildInputs = [ncurses]; + configureFlags = "--enable-shared --disable-static"; patches = stdenv.lib.optional stdenv.isDarwin ./shobj-darwin.patch; } From 615ef1d16b3aac124e104be4858e41b6dc89a1de Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:42:06 +0000 Subject: [PATCH 291/320] gnupg: idea support is optional, defaults to false svn path=/nixpkgs/branches/stdenv-updates/; revision=10614 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3c1f7c8f7c12..efe3eae576aa 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -511,7 +511,7 @@ rec { gnupg = import ../tools/security/gnupg { inherit fetchurl stdenv readline; - ideaSupport = true; # enable for IDEA crypto support + ideaSupport = getConfig [ "gnupg" "idea" ] false; # enable for IDEA crypto support }; gnupg2 = import ../tools/security/gnupg2 { From 40e41fe36263215d0f1dab6721c389f819a18377 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:42:11 +0000 Subject: [PATCH 292/320] redland: more dependencies svn path=/nixpkgs/branches/stdenv-updates/; revision=10615 --- pkgs/development/libraries/redland/default.nix | 8 +++++--- pkgs/top-level/all-packages.nix | 5 +++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/redland/default.nix b/pkgs/development/libraries/redland/default.nix index 37d899feb70b..d344fbc0ac30 100644 --- a/pkgs/development/libraries/redland/default.nix +++ b/pkgs/development/libraries/redland/default.nix @@ -4,10 +4,12 @@ stdenv.mkDerivation rec { name = "redland-1.0.7"; src = fetchurl { - url = "sf://librdf/${name}.tar.gz"; + url = "mirror://sf/librdf/${name}.tar.gz"; sha256 = "1z160hhrnlyy5c8vh2hjza6kdfmzml8mg9dk8yffifkhnxjq5r2z"; }; - buildInputs = [ bdb openssl libxml2 pkgconfig perl]; - configureFlags="--without-static --with-threads --with-bdb=${bdb}"; + buildInputs = [pkgconfig]; + propagatedBuildInputs = [ bdb openssl libxslt perl mysql postgresql sqlite + curl pcre]; + configureFlags = "--disable-static --with-threads --with-bdb=${bdb}"; patchPhase="sed -e 1s@/usr@${perl}@ -i utils/touch-mtime.pl"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index efe3eae576aa..7f7127e791f3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2592,8 +2592,9 @@ rec { # Also known as librdf, includes raptor and rasqal redland = import ../development/libraries/redland { - inherit fetchurl stdenv openssl libxml2 pkgconfig perl; - bdb = db4; + inherit fetchurl stdenv openssl libxml2 pkgconfig perl postgresql sqlite + mysql libxslt curl pcre; + bdb = db4; }; rte = import ../development/libraries/rte { From e748c421154f09356a077b2803b2267f5136faf6 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:42:16 +0000 Subject: [PATCH 293/320] ImageMagick: version updated svn path=/nixpkgs/branches/stdenv-updates/; revision=10616 --- pkgs/applications/graphics/ImageMagick/6.3.8-5.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix b/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix index 87e40ae74a12..83c7075f8e5b 100644 --- a/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix +++ b/pkgs/applications/graphics/ImageMagick/6.3.8-5.nix @@ -1,9 +1,9 @@ args: with args; stdenv.mkDerivation (rec { - name = "ImageMagick-6.3.8-2"; + name = "ImageMagick-6.3.8-5"; src = fetchurl { - url = ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.3.8-5.tar.bz2; + url = "ftp://ftp.imagemagick.org/pub/ImageMagick/${name}.tar.bz2"; sha256 = "0lsvi2z5b5zam6yvjzsyjpa36rg1c0kczifz73k9b4v8zz9a9vfl"; }; From 270646012a2db97eaeafc67ab5ba449db8dfd8e4 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Sun, 10 Feb 2008 17:42:20 +0000 Subject: [PATCH 294/320] qt-4: sha256 update. May be, they export some external repo? svn path=/nixpkgs/branches/stdenv-updates/; revision=10617 --- pkgs/development/libraries/qt-4/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix index 9d7c1e336d6c..ebb10c1aa044 100644 --- a/pkgs/development/libraries/qt-4/default.nix +++ b/pkgs/development/libraries/qt-4/default.nix @@ -30,7 +30,7 @@ rec { src = fetchsvn { url = svn://anonsvn.kde.org/home/kde/trunk/qt-copy; rev = "772114"; - sha256 = "0nd437yikz5skyqfczk0376rbgdgmsfc9gpqw207gqv6x5hcp3rj"; + sha256 = "cf8b418af39663b37726adf456ac115be5d86bdca700d65954a52042e4992acd"; }; patchPhase = "mkdir .svn; bash apply_patches;" + common.patchPhase; }); From a25344377e358facb1be09c1395ccb7ac63edb33 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Tue, 12 Feb 2008 21:47:49 +0000 Subject: [PATCH 295/320] Ported ffmpeg_svn tarball link; fixes to iptables svn path=/nixpkgs/branches/stdenv-updates/; revision=10651 --- .../libraries/ffmpeg_svn_snapshot/default.nix | 7 ++--- pkgs/os-specific/linux/iptables/1.4.0.nix | 29 +++++++++++++++++++ pkgs/os-specific/linux/iptables/default.nix | 10 ------- pkgs/top-level/all-packages.nix | 6 ++-- 4 files changed, 36 insertions(+), 16 deletions(-) create mode 100644 pkgs/os-specific/linux/iptables/1.4.0.nix delete mode 100644 pkgs/os-specific/linux/iptables/default.nix diff --git a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix index 5cfb90e48584..1c7d07aedd8e 100644 --- a/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix +++ b/pkgs/development/libraries/ffmpeg_svn_snapshot/default.nix @@ -2,10 +2,9 @@ args: with args; stdenv.mkDerivation { name = "ffmpeg-svn-2007-12-04"; - src = fetchsvn { - url = svn://svn.mplayerhq.hu/ffmpeg/trunk ; - rev = "11164"; - sha256 = "80d3b3311abaf8343b73c711f02d269e8c87991f2c3d0f08e32309d39ad6aa3b"; + src = fetchurl { + url = http://nix.cs.uu.nl/dist/tarballs/ffmpeg-svn-r11901.tar.bz2; + sha256 = "0l5207gnfaz57pvlxpxyjphyz0mp9plnxzd0aghy0nz3hmqh4rs7"; }; propagatedBuildInputs = [ a52dec lame libtheora x11 zlib SDL]; diff --git a/pkgs/os-specific/linux/iptables/1.4.0.nix b/pkgs/os-specific/linux/iptables/1.4.0.nix new file mode 100644 index 000000000000..ba4fbd06db89 --- /dev/null +++ b/pkgs/os-specific/linux/iptables/1.4.0.nix @@ -0,0 +1,29 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs (rec { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.netfilter.org/projects/iptables/files/iptables-1.4.0.tar.bz2; + sha256 = "0ljxbvdlg5mfxk0y00dr0qvsri1d495ci1pr8hrzga766n09g6px"; + }; + + buildInputs = []; + configureFlags = []; + makeFlags = [ + " KERNEL_DIR=${kernelHeaders} " + ]; + preBuild = FullDepEntry ('' + sed -e 's@/usr/local@'$out'@' -i Makefile Rules.make + '') ["doUnpack" "minInit"]; + }) null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "iptables-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [preBuild doMakeInstall doForceShare doPropagate]); + meta = { + description = " + IPtables Linux firewall. +"; + }; +} diff --git a/pkgs/os-specific/linux/iptables/default.nix b/pkgs/os-specific/linux/iptables/default.nix deleted file mode 100644 index 606cf7796f90..000000000000 --- a/pkgs/os-specific/linux/iptables/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -{stdenv, fetchurl}: - -stdenv.mkDerivation { - name = "iptables-1.3.7"; - src = fetchurl { - url = http://www.netfilter.org/projects/iptables/files/iptables-1.3.7.tar.bz2; - sha256 = "00nffc03akgm5p0skz90nl29h5d8b9fjc0d9lhipkbwy0ahcw00f"; - }; - preBuild = "makeFlagsArray=(PREFIX=$out)"; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7f7127e791f3..4567484777ad 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3419,10 +3419,12 @@ rec { kernelHeaders = stdenv.gcc.libc.kernelHeaders; }; - iptables = import ../os-specific/linux/iptables { - inherit fetchurl stdenv; + iptablesFun = lib.sumArgs (selectVersion ../os-specific/linux/iptables "1.4.0") { + inherit builderDefs kernelHeaders; }; + iptables = iptablesFun null; + ipw2200fw = import ../os-specific/linux/firmware/ipw2200 { inherit fetchurl stdenv; }; From 3db3e079afaaae281124ee9ff1b34df3fa197824 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Tue, 12 Feb 2008 22:36:00 +0000 Subject: [PATCH 296/320] Ported ffmpeg_svn tarball link - correction to all-packages link svn path=/nixpkgs/branches/stdenv-updates/; revision=10652 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4567484777ad..82940ce79970 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1909,7 +1909,7 @@ rec { }; ffmpeg_svn = import ../development/libraries/ffmpeg_svn_snapshot { - inherit fetchsvn stdenv a52dec libtheora x11 lame zlib SDL; + inherit fetchurl stdenv a52dec libtheora x11 lame zlib SDL; }; fftw = import ../development/libraries/fftw { From 5f45fb3ae986119b4360613901a1c033a2ee327e Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 13 Feb 2008 14:23:09 +0000 Subject: [PATCH 297/320] * substitute() in stdenv: use the replace program instead of awful sed hackery. * Some indentation fixes in setup.sh. svn path=/nixpkgs/branches/stdenv-updates/; revision=10658 --- pkgs/build-support/gcc-wrapper/builder.sh | 19 +++-- .../libraries/glibc-2.7/builder.sh | 5 +- .../libraries/glibc-2.7/default.nix | 2 - .../glibc-2.7/glibc-getcwd-param-MAX.patch | 14 ---- .../libraries/glibc-2.7/glibc-pwd.patch | 74 ------------------- pkgs/stdenv/common-path.nix | 1 + pkgs/stdenv/cygwin/prehook.sh | 2 + pkgs/stdenv/generic/builder.sh | 25 ++++--- pkgs/stdenv/generic/setup.sh | 70 ++++++++---------- pkgs/tools/text/replace/default.nix | 11 +-- pkgs/top-level/all-packages.nix | 1 + 11 files changed, 66 insertions(+), 158 deletions(-) delete mode 100644 pkgs/development/libraries/glibc-2.7/glibc-getcwd-param-MAX.patch delete mode 100644 pkgs/development/libraries/glibc-2.7/glibc-pwd.patch diff --git a/pkgs/build-support/gcc-wrapper/builder.sh b/pkgs/build-support/gcc-wrapper/builder.sh index f9dbc0e784f6..c263b3f330ed 100644 --- a/pkgs/build-support/gcc-wrapper/builder.sh +++ b/pkgs/build-support/gcc-wrapper/builder.sh @@ -50,14 +50,17 @@ fi doSubstitute() { local src=$1 local dst=$2 - substitute "$src" "$dst" \ - --subst-var "out" \ - --subst-var "shell" \ - --subst-var "gcc" \ - --subst-var "gccProg" \ - --subst-var "binutils" \ - --subst-var "libc" \ - --subst-var-by "ld" "$ldPath/ld" + # Can't use substitute() here, because replace may not have been + # built yet (in the bootstrap). + sed \ + -e "s^@out@^$out^" \ + -e "s^@shell@^$shell^" \ + -e "s^@gcc@^$gcc^" \ + -e "s^@gccProg@^$gccProg^" \ + -e "s^@binutils@^$binutils^" \ + -e "s^@libc@^$libc^" \ + -e "s^@ld@^$ldPath/ld^" \ + < "$src" > "$dst" } diff --git a/pkgs/development/libraries/glibc-2.7/builder.sh b/pkgs/development/libraries/glibc-2.7/builder.sh index 3e874ed891c2..2418d0bf3657 100644 --- a/pkgs/development/libraries/glibc-2.7/builder.sh +++ b/pkgs/development/libraries/glibc-2.7/builder.sh @@ -12,8 +12,9 @@ preConfigure=preConfigure preConfigure() { for i in configure io/ftwtest-sh; do - substituteInPlace "$i" \ - --replace "@PWD@" "pwd" + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$(type -tP pwd)^" done # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older diff --git a/pkgs/development/libraries/glibc-2.7/default.nix b/pkgs/development/libraries/glibc-2.7/default.nix index 8a5a84bd2c67..f33f95fda9fe 100644 --- a/pkgs/development/libraries/glibc-2.7/default.nix +++ b/pkgs/development/libraries/glibc-2.7/default.nix @@ -12,8 +12,6 @@ stdenv.mkDerivation { sha256 = "06j5q20l11x8kcrl9bg15xgb1pw0w82pazikxf4zvq2fmhiaa922"; }; - patches = [ ./glibc-pwd.patch ./glibc-getcwd-param-MAX.patch ]; - inherit kernelHeaders installLocales; inherit (stdenv) is64bit; diff --git a/pkgs/development/libraries/glibc-2.7/glibc-getcwd-param-MAX.patch b/pkgs/development/libraries/glibc-2.7/glibc-getcwd-param-MAX.patch deleted file mode 100644 index 8543dbbf1d76..000000000000 --- a/pkgs/development/libraries/glibc-2.7/glibc-getcwd-param-MAX.patch +++ /dev/null @@ -1,14 +0,0 @@ -2006-06-18 Mike Frysinger - - * sysdeps/unix/sysv/linux/getcwd.c: Include sys/param.h. - ---- glibc-old/sysdeps/unix/sysv/linux/getcwd.c -+++ glibc-new/sysdeps/unix/sysv/linux/getcwd.c -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - - #include - #include diff --git a/pkgs/development/libraries/glibc-2.7/glibc-pwd.patch b/pkgs/development/libraries/glibc-2.7/glibc-pwd.patch deleted file mode 100644 index 07039718477f..000000000000 --- a/pkgs/development/libraries/glibc-2.7/glibc-pwd.patch +++ /dev/null @@ -1,74 +0,0 @@ -diff -ruN glibc-20050110/configure glibc-20050110.patched/configure ---- glibc-20050110/configure 2005-01-05 10:39:53.000000000 +0100 -+++ glibc-20050110.patched/configure 2005-01-18 13:33:01.000000000 +0100 -@@ -1393,7 +1393,7 @@ - ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. - - --if test "`cd $srcdir; /bin/pwd`" = "`/bin/pwd`"; then -+if test "`cd $srcdir; @PWD@`" = "`@PWD@`"; then - { { echo "$as_me:$LINENO: error: you must configure in a separate build directory" >&5 - echo "$as_me: error: you must configure in a separate build directory" >&2;} - { (exit 1); exit 1; }; } -diff -ruN glibc-20050110/io/ftwtest-sh glibc-20050110.patched/io/ftwtest-sh ---- glibc-20050110/io/ftwtest-sh 2004-02-09 21:12:23.000000000 +0100 -+++ glibc-20050110.patched/io/ftwtest-sh 2005-01-18 13:33:15.000000000 +0100 -@@ -120,7 +120,7 @@ - sort > $testout - - # perhaps $tmp involves some symlinks... --tmpreal=`cd $tmp; /bin/pwd 2>/dev/null || /usr/bin/pwd` -+tmpreal=`cd $tmp; @PWD@ 2>/dev/null || /usr/bin/pwd` - - cat </dev/null || /usr/bin/pwd` -+curwd=`@PWD@ 2>/dev/null || /usr/bin/pwd` - cd "$tmp" - LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d | - sort > $testout -@@ -160,7 +160,7 @@ - EOF - rm $testout - --curwd=`/bin/pwd 2>/dev/null || /usr/bin/pwd` -+curwd=`@PWD@ 2>/dev/null || /usr/bin/pwd` - cd "$tmp" - LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d/. | - sort > $testout -@@ -182,7 +182,7 @@ - EOF - rm $testout - --curwd=`/bin/pwd 2>/dev/null || /usr/bin/pwd` -+curwd=`@PWD@ 2>/dev/null || /usr/bin/pwd` - cd "$tmp" - LD_LIBRARY_PATH=$objpfx $ldso $testprogram --chdir ftwtest.d/foo/lvl1/link@1 | - sort > $testout -diff -ruN glibc-20050110/scripts/rellns-sh glibc-20050110.patched/scripts/rellns-sh ---- glibc-20050110/scripts/rellns-sh 1999-12-19 00:40:25.000000000 +0100 -+++ glibc-20050110.patched/scripts/rellns-sh 2005-01-18 13:35:53.245937423 +0100 -@@ -22,13 +22,13 @@ - exit 1 - fi - --if test -x /bin/pwd; then -- pwd=/bin/pwd --elif test -x /usr/bin/pwd; then -- pwd=/usr/bin/pwd --else -+#if test -x /bin/pwd; then -+# pwd=/bin/pwd -+#elif test -x /usr/bin/pwd; then -+# pwd=/usr/bin/pwd -+#else - pwd='pwd' --fi -+#fi - - # Make both paths absolute. - if test -d $1; then diff --git a/pkgs/stdenv/common-path.nix b/pkgs/stdenv/common-path.nix index 0ad0d83255be..3b267a543c66 100644 --- a/pkgs/stdenv/common-path.nix +++ b/pkgs/stdenv/common-path.nix @@ -11,4 +11,5 @@ pkgs.gnumake pkgs.bash pkgs.patch + pkgs.replace ] diff --git a/pkgs/stdenv/cygwin/prehook.sh b/pkgs/stdenv/cygwin/prehook.sh index 673640c0d4a2..b2ada869b290 100644 --- a/pkgs/stdenv/cygwin/prehook.sh +++ b/pkgs/stdenv/cygwin/prehook.sh @@ -3,3 +3,5 @@ export NIX_ENFORCE_PURITY= if test -z "$cygwinConfigureEnableShared"; then export configureFlags="$configureFlags --disable-shared" fi + +PATH_DELIMITER=';' diff --git a/pkgs/stdenv/generic/builder.sh b/pkgs/stdenv/generic/builder.sh index ee2dbb3d0f9e..2a74f038dca0 100644 --- a/pkgs/stdenv/generic/builder.sh +++ b/pkgs/stdenv/generic/builder.sh @@ -8,14 +8,17 @@ source $stdenv/setup mkdir $out -substitute "$setup" "$out/setup" \ - --subst-var preHook \ - --subst-var postHook \ - --subst-var initialPath \ - --subst-var gcc \ - --subst-var shell \ - --subst-var-by param1 "$p1" \ - --subst-var-by param2 "$p2" \ - --subst-var-by param3 "$p3" \ - --subst-var-by param4 "$p4" \ - --subst-var-by param5 "$p5" +# Can't use substitute() here, because replace may not have been +# built yet (in the bootstrap). +sed \ + -e "s^@preHook@^$preHook^" \ + -e "s^@postHook@^$postHook^" \ + -e "s^@initialPath@^$initialPath^" \ + -e "s^@gcc@^$gcc^" \ + -e "s^@shell@^$shell^" \ + -e "s^@param1@^$p1^" \ + -e "s^@param2@^$p2^" \ + -e "s^@param3@^$p3^" \ + -e "s^@param4@^$p4^" \ + -e "s^@param5@^$p5^" \ + < "$setup" > "$out/setup" diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index e91a9ce4dfd8..aa76a6eb3b10 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -2,11 +2,9 @@ set -e test -z $NIX_GCC && NIX_GCC=@gcc@ -if [ -z ${system##*cygwin*} ]; then - PATH_DELIMITER=';' -else - PATH_DELIMITER=':' -fi + +# Helper functions that might be useful in setup hooks. + addToSearchPathWithCustomDelimiter() { local delimiter=$1 @@ -28,6 +26,7 @@ addToSearchPath() addToSearchPathWithCustomDelimiter "${PATH_DELIMITER}" "$@" } + # Set up the initial path. PATH= for i in $NIX_GCC @initialPath@; do @@ -41,6 +40,7 @@ fi # Execute the pre-hook. export SHELL=@shell@ +PATH_DELIMITER=':' if test -z "$shell"; then export shell=@shell@ fi @@ -234,27 +234,17 @@ stripDirs() { fi } + ###################################################################### # Textual substitution functions. -# Some disgusting hackery to escape replacements in Sed substitutions. -# We should really have a tool that replaces literal values by other -# literal values, without any need for escaping. -escapeSed() { - local s="$1" - # The `tr' hack is to escape newlines. Sed handles newlines very - # badly, so we just replace newlines with the magic character 0xff - # (377 octal). So don't use that character in replacements :-P - echo -n "$1" | tr '\012' '\377' | sed -e 's^\\^\\\\^g' -e 's^\xff^\\n^g' -e 's/\^/\\^/g' -e 's/&/\\&/g' -} - - substitute() { local input="$1" local output="$2" local -a params=("$@") + local -a args=() local sedScript=$NIX_BUILD_TOP/.sedargs rm -f $sedScript @@ -284,12 +274,14 @@ substitute() { n=$((n + 2)) fi - replacement="$(escapeSed "$replacement")" - - echo "s^$pattern^$replacement^g" >> $sedScript + if test ${#args[@]} != 0; then + args[${#args[@]}]="-a" + fi + args[${#args[@]}]="$pattern" + args[${#args[@]}]="$replacement" done - sed -f $sedScript < "$input" > "$output".tmp + replace -e -s "${args[@]}" < "$input" > "$output".tmp if test -x "$output"; then chmod +x "$output".tmp fi @@ -537,7 +529,7 @@ unpackW() { unpackPhase() { - sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource does'nt set sourceRoot + sourceRoot=. # don't change to user dir homeless shelter if custom unpackSource doesn't set sourceRoot header "unpacking sources" startLog "unpack" unpackW @@ -751,28 +743,26 @@ fixupW() { eval "$preFixup" - forceShare=${forceShare:=man doc info} - if test -n "$forceShare"; then - for d in $forceShare; do - if test -d "$prefix/$d"; then - if test -d "$prefix/share/$d"; then - echo "Both $d/ and share/$d/ exists!" - else + # Put man/doc/info under $out/share. + forceShare=${forceShare:=man doc info} + if test -n "$forceShare"; then + for d in $forceShare; do + if test -d "$prefix/$d"; then + if test -d "$prefix/share/$d"; then + echo "Both $d/ and share/$d/ exists!" + else echo Fixing location of $d/ subdirectory - ensureDir $prefix/share + ensureDir $prefix/share if test -w $prefix/share; then - mv -v $prefix/$d $prefix/share - ln -sv share/$d $prefix + mv -v $prefix/$d $prefix/share + ln -sv share/$d $prefix fi - fi - else - echo "No $d/ subdirectory, skipping." - fi - done; - fi + fi + fi + done; + fi - -# TODO : strip _only_ ELF executables, and return || fail here... + # TODO: strip _only_ ELF executables, and return || fail here... if test -z "$dontStrip"; then echo "Stripping debuging symbols from files in" stripDirs "${stripDebugList:-lib}" -S diff --git a/pkgs/tools/text/replace/default.nix b/pkgs/tools/text/replace/default.nix index 3135204ef032..b9613ef20772 100644 --- a/pkgs/tools/text/replace/default.nix +++ b/pkgs/tools/text/replace/default.nix @@ -1,4 +1,5 @@ {stdenv, fetchurl}: + stdenv.mkDerivation { name = "replace-2.24"; @@ -7,14 +8,10 @@ stdenv.mkDerivation { sha256 = "1c2nkxx83vmlh1v3ib6r2xqh121gdb1rharwsimcb2h0xwc558dm"; }; - buildInputs = []; - makeFlags = " TREE=\$(out) "; - - postInstall = "mv \$out/bin/replace \$out/bin/replace-literal"; + makeFlags = "TREE=\$(out)"; meta = { - description = " - Replace verbatim strings. Sed is not fit to do it. Replace is. -"; + homepage = http://replace.richardlloyd.org.uk/; + description = "A tool to replace verbatim strings"; }; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 82940ce79970..7064d11a7254 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -321,6 +321,7 @@ rec { nukeReferences = import ../build-support/nuke-references/default.nix { inherit stdenv; }; + ### TOOLS From 908d8286ce779e829609c9e1075c81f2318f6ff4 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 13 Feb 2008 18:27:19 +0000 Subject: [PATCH 298/320] =?UTF-8?q?*=20Add=20--disable-dependency-tracking?= =?UTF-8?q?=20to=20the=20configure=20flags=20if=20=20=20possible.=20=20Thi?= =?UTF-8?q?s=20should=20speed=20up=20builds=20a=20bit.=20=20(Suggested=20b?= =?UTF-8?q?y=20Ludovic=20=20=20Court=C3=A8s.)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/nixpkgs/branches/stdenv-updates/; revision=10662 --- pkgs/stdenv/generic/setup.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index aa76a6eb3b10..34e4e0fd9022 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -609,6 +609,13 @@ configureW() { configureFlags="${prefixKey:---prefix=}$prefix $configureFlags" fi + # Add --disable-dependency-tracking to speed up some builds. + if test -z "$dontAddDisableDepTrack"; then + if grep -q dependency-tracking $configureScript; then + configureFlags="--disable-dependency-tracking ${prefixKey:---prefix=}$prefix $configureFlags" + fi + fi + echo "configure flags: $configureFlags ${configureFlagsArray[@]}" $configureScript $configureFlags"${configureFlagsArray[@]}" || fail From 89815eb9a00150c34edcc5872bbc93b9122decdc Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 13 Feb 2008 19:41:37 +0000 Subject: [PATCH 299/320] * gcc-wrapper: Propagate the wrapped gcc, binutils and glibc to the user environment. (NIXPKGS-63) svn path=/nixpkgs/branches/stdenv-updates/; revision=10664 --- pkgs/build-support/gcc-wrapper/builder.sh | 22 +++++++++++++------ .../libraries/glibc-2.7/builder.sh | 2 +- pkgs/stdenv/generic/builder.sh | 20 ++++++++--------- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/pkgs/build-support/gcc-wrapper/builder.sh b/pkgs/build-support/gcc-wrapper/builder.sh index c263b3f330ed..7a2f9c20f27f 100644 --- a/pkgs/build-support/gcc-wrapper/builder.sh +++ b/pkgs/build-support/gcc-wrapper/builder.sh @@ -53,13 +53,13 @@ doSubstitute() { # Can't use substitute() here, because replace may not have been # built yet (in the bootstrap). sed \ - -e "s^@out@^$out^" \ - -e "s^@shell@^$shell^" \ - -e "s^@gcc@^$gcc^" \ - -e "s^@gccProg@^$gccProg^" \ - -e "s^@binutils@^$binutils^" \ - -e "s^@libc@^$libc^" \ - -e "s^@ld@^$ldPath/ld^" \ + -e "s^@out@^$out^g" \ + -e "s^@shell@^$shell^g" \ + -e "s^@gcc@^$gcc^g" \ + -e "s^@gccProg@^$gccProg^g" \ + -e "s^@binutils@^$binutils^g" \ + -e "s^@libc@^$libc^g" \ + -e "s^@ld@^$ldPath/ld^g" \ < "$src" > "$dst" } @@ -111,3 +111,11 @@ doSubstitute "$addFlags" "$out/nix-support/add-flags.sh" doSubstitute "$setupHook" "$out/nix-support/setup-hook" cp -p $utils $out/nix-support/utils.sh + + +# Propagate the wrapped gcc so that if you install the wrapper, you get +# tools like gcov, the manpages, etc. as well (including for binutils +# and Glibc). +if test -z "$nativeTools"; then + echo $gcc $binutils $libc > $out/nix-support/propagated-user-env-packages +fi diff --git a/pkgs/development/libraries/glibc-2.7/builder.sh b/pkgs/development/libraries/glibc-2.7/builder.sh index 2418d0bf3657..f9b9c6b87aa1 100644 --- a/pkgs/development/libraries/glibc-2.7/builder.sh +++ b/pkgs/development/libraries/glibc-2.7/builder.sh @@ -14,7 +14,7 @@ preConfigure() { for i in configure io/ftwtest-sh; do # Can't use substituteInPlace here because replace hasn't been # built yet in the bootstrap. - sed -i "$i" -e "s^/bin/pwd^$(type -tP pwd)^" + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" done # In the glibc 2.6/2.7 tarballs C-translit.h is a little bit older diff --git a/pkgs/stdenv/generic/builder.sh b/pkgs/stdenv/generic/builder.sh index 2a74f038dca0..f772b1cc19b3 100644 --- a/pkgs/stdenv/generic/builder.sh +++ b/pkgs/stdenv/generic/builder.sh @@ -11,14 +11,14 @@ mkdir $out # Can't use substitute() here, because replace may not have been # built yet (in the bootstrap). sed \ - -e "s^@preHook@^$preHook^" \ - -e "s^@postHook@^$postHook^" \ - -e "s^@initialPath@^$initialPath^" \ - -e "s^@gcc@^$gcc^" \ - -e "s^@shell@^$shell^" \ - -e "s^@param1@^$p1^" \ - -e "s^@param2@^$p2^" \ - -e "s^@param3@^$p3^" \ - -e "s^@param4@^$p4^" \ - -e "s^@param5@^$p5^" \ + -e "s^@preHook@^$preHook^g" \ + -e "s^@postHook@^$postHook^g" \ + -e "s^@initialPath@^$initialPath^g" \ + -e "s^@gcc@^$gcc^g" \ + -e "s^@shell@^$shell^g" \ + -e "s^@param1@^$p1^g" \ + -e "s^@param2@^$p2^g" \ + -e "s^@param3@^$p3^g" \ + -e "s^@param4@^$p4^g" \ + -e "s^@param5@^$p5^g" \ < "$setup" > "$out/setup" From c00c50e10422f2b654d0641096403c0cad3080a5 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Wed, 13 Feb 2008 21:05:52 +0000 Subject: [PATCH 300/320] Added ncursesFun for overriding. svn path=/nixpkgs/branches/stdenv-updates/; revision=10667 --- pkgs/top-level/all-packages.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7064d11a7254..e2cf2f63b72e 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2466,7 +2466,7 @@ rec { inherit fetchurl stdenv mysql libtool zlib unixODBC; }; - ncurses = selectVersion ../development/libraries/ncurses "5.6" { + ncurses = lib.sumArgs (selectVersion ../development/libraries/ncurses "5.6") { inherit fetchurl stdenv; unicode = (system != "i686-cygwin"); }; From 80612bff712fb4e0ea866950990e4d61da0440b8 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Wed, 13 Feb 2008 21:19:04 +0000 Subject: [PATCH 301/320] Stupid mistake in all-packages.nix svn path=/nixpkgs/branches/stdenv-updates/; revision=10668 --- 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 e2cf2f63b72e..47a78aff2ccd 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2466,11 +2466,13 @@ rec { inherit fetchurl stdenv mysql libtool zlib unixODBC; }; - ncurses = lib.sumArgs (selectVersion ../development/libraries/ncurses "5.6") { + ncursesFun = lib.sumArgs (selectVersion ../development/libraries/ncurses "5.6") { inherit fetchurl stdenv; unicode = (system != "i686-cygwin"); }; + ncurses = ncursesFun null; + ncursesDiet = import ../development/libraries/ncurses-diet { inherit fetchurl; stdenv = useDietLibC stdenv; From d607e902afee834b9a68ca323f1ff11b5c4fd920 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Thu, 14 Feb 2008 20:18:07 +0000 Subject: [PATCH 302/320] Forward port: ccache, FF3b3 svn path=/nixpkgs/branches/stdenv-updates/; revision=10694 --- .../networking/browsers/firefox-3/binary.nix | 55 ++++++++++++++++ .../networking/browsers/firefox-3/builder.sh | 30 +++++++++ .../networking/browsers/firefox-3/default.nix | 64 +++++++++++++++++++ .../development/tools/misc/ccache/default.nix | 15 +++++ pkgs/top-level/all-packages.nix | 13 ++++ 5 files changed, 177 insertions(+) create mode 100644 pkgs/applications/networking/browsers/firefox-3/binary.nix create mode 100644 pkgs/applications/networking/browsers/firefox-3/builder.sh create mode 100644 pkgs/applications/networking/browsers/firefox-3/default.nix create mode 100644 pkgs/development/tools/misc/ccache/default.nix diff --git a/pkgs/applications/networking/browsers/firefox-3/binary.nix b/pkgs/applications/networking/browsers/firefox-3/binary.nix new file mode 100644 index 000000000000..73e002435b88 --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox-3/binary.nix @@ -0,0 +1,55 @@ +args: with args; + +assert stdenv.system == "i686-linux"; + +stdenv.mkDerivation { + name = "firefox-3b1"; + + src = + fetchurl { + url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b1/linux-i686/en-US/firefox-3.0b1.tar.bz2; + sha256 = "1cpcc5b07zdqyd5kiwhb4dqhy2mzbf97plsglcp6bc9054cmsylk"; + }; + buildInputs = [ + pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo + python curl coreutils atk pango glib libX11 libXrender + freetype fontconfig libXft libXt + ]; + + buildPhase = " + additionalRpath=''; + for i in \$buildInputs ${stdenv.glibc} ${stdenv.gcc.gcc}; do + additionalRpath=\$additionalRpath:\$i/lib; + done + for i in firefox-bin ; do + oldrpath=$(patchelf --print-rpath \$i) + patchelf --set-rpath \$oldrpath\$additionalRpath \$i + patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux.so.2 \$i + done + "; + + installPhase = " + export dontPatchELF=1; + mkdir -p \$out + cp -r . \$out/firefox + mkdir -p \$out/bin + ln -s \$out/firefox/firefox \$out/bin/firefox + + sed -e 's@moz_libdir=.*@moz_libdir='\$out'/firefox/@' -i \$out/bin/firefox + sed -e 's@moz_libdir=.*@&\\nexport PATH=\$PATH:${coreutils}/bin@' -i \$out/bin/firefox + sed -e 's@`/bin/pwd@`${coreutils}/bin/pwd@' -i \$out/bin/firefox + sed -e 's@`/bin/ls@`${coreutils}/bin/ls@' -i \$out/bin/firefox + + strip -S \$out/firefox/*.so || true + + echo \"running firefox -register...\" + \$out/firefox/firefox-bin -register || false + "; + + meta = { + description = "Mozilla Firefox - the browser, reloaded"; + }; + + passthru = {inherit gtk;}; +} + diff --git a/pkgs/applications/networking/browsers/firefox-3/builder.sh b/pkgs/applications/networking/browsers/firefox-3/builder.sh new file mode 100644 index 000000000000..66f1059d657f --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox-3/builder.sh @@ -0,0 +1,30 @@ +source $stdenv/setup + +postInstall=postInstall +postInstall() { + + # Strip some more stuff + strip -S $out/lib/*/* || true + + # This fixes starting Firefox when there already is a running + # instance. The `firefox' wrapper script actually expects to be + # in the same directory as `run-mozilla.sh', apparently. + libDir=$(cd $out/lib && ls -d firefox-*) + test -n "$libDir" + cd $out/bin + mv firefox ../lib/$libDir/ + ln -s ../lib/$libDir/firefox . + + # Register extensions etc. + echo "running firefox -register..." + (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false + + echo "running regxpcom..." + (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./regxpcom) || false + + # Put the Firefox icon in the right place. + ensureDir $out/lib/$libDir/chrome/icons/default + ln -s ../../../icons/default.xpm $out/lib/$libDir/chrome/icons/default/ +} + +genericBuild diff --git a/pkgs/applications/networking/browsers/firefox-3/default.nix b/pkgs/applications/networking/browsers/firefox-3/default.nix new file mode 100644 index 000000000000..88315aa0c31b --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox-3/default.nix @@ -0,0 +1,64 @@ +args: with args; + +stdenv.mkDerivation { + name = "firefox-3.0-beta-3"; + + src = fetchurl { + url = ftp://ftp.mozilla.org/pub/firefox/releases/3.0b3/source/firefox-3.0b3-source.tar.bz2; + sha1 = "142f28a41077e77d61423a5ca6585a45737ff999"; + }; + + buildInputs = [ + pkgconfig gtk perl zip libIDL libXi libjpeg libpng zlib cairo + python curl coreutils dbus dbus_glib pango freetype fontconfig + libX11 libXrender libXft libXt + ]; + + configureFlags = [ + "--enable-application=browser" + "--enable-optimize" + "--disable-debug" + "--enable-strip" + "--with-system-jpeg" + "--with-system-zlib" + #"--with-system-png" <-- "--with-system-png won't work because the system's libpng doesn't have APNG support" + #"--enable-system-cairo" <-- disabled for now because Firefox needs a alpha version of Cairo + ]; + + postInstall = '' + export dontPatchELF=1; + + # Strip some more stuff + strip -S $out/lib/*/* || true + + # Fix some references to /bin paths in the Firefox shell script. + substituteInPlace $out/bin/firefox \ + --replace /bin/pwd "$(type -tP pwd)" \ + --replace /bin/ls "$(type -tP ls)" + + # This fixes starting Firefox when there already is a running + # instance. The `firefox' wrapper script actually expects to be + # in the same directory as `run-mozilla.sh', apparently. + libDir=$(cd $out/lib && ls -d firefox-[0-9]*) + test -n "$libDir" + cd $out/bin + mv firefox ../lib/$libDir/ + ln -s ../lib/$libDir/firefox . + + # Register extensions etc. + echo "running firefox -register..." + (cd $out/lib/$libDir && LD_LIBRARY_PATH=. ./firefox-bin -register) || false + + # Put the Firefox icon in the right place. + ensureDir $out/lib/$libDir/chrome/icons/default + ln -s ../../../icons/default.xpm $out/lib/$libDir/chrome/icons/default/ + ''; # */ + + meta = { + description = "Mozilla Firefox - the browser, reloaded"; + homepage = http://www.mozilla.com/en-US/firefox/; + }; + + passthru = {inherit gtk;}; +} + diff --git a/pkgs/development/tools/misc/ccache/default.nix b/pkgs/development/tools/misc/ccache/default.nix new file mode 100644 index 000000000000..8342dfcc728d --- /dev/null +++ b/pkgs/development/tools/misc/ccache/default.nix @@ -0,0 +1,15 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "ccache-2.4"; + src = fetchurl { + url = http://samba.org/ftp/ccache/ccache-2.4.tar.gz; + sha256 = "435f862ca5168c346f5aa9e242174bbf19a5abcaeecfceeac2f194558827aaa0"; + }; + + meta = { + description = "ccache, a tool that caches compilation results."; + homepage = http://ccache.samba.org/; + license = "GPL"; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 47a78aff2ccd..b34b8f0bfe9d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1522,6 +1522,10 @@ rec { inherit fetchurl stdenv m4; }; + ccache = import ../development/tools/misc/ccache { + inherit fetchurl stdenv; + }; + ctags = import ../development/tools/misc/ctags { inherit fetchurl stdenv; }; @@ -4182,6 +4186,15 @@ rec { firefoxWrapper = wrapFirefox firefox ""; + firefox3 = lowPrio (import ../applications/networking/browsers/firefox-3 { + inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo + python curl coreutils dbus dbus_glib freetype fontconfig; + inherit (gtkLibs) gtk pango; + inherit (gnome) libIDL; + inherit (xlibs) libXi libX11 libXrender libXft libXt; + #enableOfficialBranding = true; + }); + firefox3b1 = lowPrio (import ../applications/networking/browsers/firefox3b1 { inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo python curl coreutils; From ca34aa0514bc98592f70b47ebd57ced608d57133 Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Fri, 15 Feb 2008 08:41:31 +0000 Subject: [PATCH 303/320] Forward port of lib svn path=/nixpkgs/branches/stdenv-updates/; revision=10700 --- pkgs/lib/default.nix | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/pkgs/lib/default.nix b/pkgs/lib/default.nix index 0d22070ee98d..4ffe50aa035d 100644 --- a/pkgs/lib/default.nix +++ b/pkgs/lib/default.nix @@ -55,6 +55,8 @@ rec { # Map and concatenate the result. concatMap = f: list: concatLists (map f list); + concatMapStrings = f: list: concatStrings (map f list); + # Place an element between each element of a list, e.g., # `intersperse "," ["a" "b" "c"]' returns ["a" "," "b" "," "c"]. @@ -91,6 +93,10 @@ rec { then getAttr (tail attrPath) default (builtins.getAttr attr e) else default; + # shortcut for getAttr ["name"] default attrs + maybeAttr = name: default: attrs: + if (__hasAttr name attrs) then (__getAttr name attrs) else default; + # Filter a list using a predicate; that is, return a list containing # every element from `list' for which `pred' returns true. @@ -153,15 +159,16 @@ rec { substring (sub lenFileName lenExt) lenFileName fileName == ext; hasSuffixHack = a: b: hasSuffix (a+(substring 0 0 b)) ((substring 0 0 a)+b); - + + # Bring in a path as a source, filtering out all Subversion and CVS # directories, as well as backup files (*~). cleanSource = let filter = name: type: let baseName = baseNameOf (toString name); in ! ( # Filter out Subversion and CVS directories. - (type == "directory" && (name == ".svn" || name == "CVS")) || + (type == "directory" && (baseName == ".svn" || baseName == "CVS")) || # Filter out backup files. - (hasSuffix "~" name) + (hasSuffix "~" baseName) ); in src: builtins.filterSource filter src; @@ -316,6 +323,18 @@ rec { debugVal = if builtins ? trace then x: (builtins.trace x x) else x: x; debugXMLVal = if builtins ? trace then x: (builtins.trace (builtins.toXML x) x) else x: x; + # this can help debug your code as well - designed to not produce thousands of lines + traceWhatis = x : __trace (whatis x) x; + whatis = x : + if (__isAttrs x) then + if (x ? outPath) then "x is a derivation with name ${x.name}" + else "x is an attr set with attributes ${builtins.toString (__attrNames x)}" + else if (__isFunction x) then "x is a function" + else if (__isList x) then "x is a list, first item is : ${whatis (__head x)}" + else if (x == true || x == false) then builtins.toString x + else "x is propably a string starting, starting characters: ${__substring 0 50 x}.."; + + innerClosePropagation = ready: list: if list == [] then ready else if (head list) ? propagatedBuildInputs then innerClosePropagation (ready ++ [(head list)]) @@ -324,6 +343,16 @@ rec { closePropagation = list: (uniqList {inputList = (innerClosePropagation [] list);}); + stringToCharacters = s : let l = __stringLength s; in + if (__lessThan l 1) then [""] else [(__substring 0 1 s)] ++ stringToCharacters (__substring 1 (__sub l 1) s); + + # should this be implemented as primop ? Yes it should.. + escapeShellArg = s : + let escapeChar = x : if ( x == "'" ) then "'\"'\"'" else x; + in "'" + concatStrings (map escapeChar (stringToCharacters s) ) +"'"; + + defineShList = name : list : "\n${name}=(${concatStringsSep " " (map escapeShellArg list)})\n"; + # calls a function (f attr value ) for each record item. returns a list mapRecordFlatten = f : r : map (attr: f attr (builtins.getAttr attr r) ) (attrNames r); @@ -357,6 +386,12 @@ rec { flattenAttrs = set : map ( attr : builtins.getAttr attr set) (attrNames set); mapIf = cond : f : fold ( x : l : if (cond x) then [(f x)] ++ l else l) []; + # pick attrs subset_attr_names and apply f + subsetmap = f : attrs : subset_attr_names : + listToAttrs (fold ( attr : r : if __hasAttr attr attrs + then r ++ [ ( nv attr ( f (__getAttr attr attrs) ) ) ] else r ) [] + subset_attr_names ); + # Marc 2nd proposal: (not everything has been tested in detail yet..) # usage / example From 2a087141cb93b9c90c885ee63010dfcd108be3bc Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Fri, 15 Feb 2008 11:14:40 +0000 Subject: [PATCH 304/320] Ported replace renaming to replace-literal to avoid conflict with MySQL package supplying own tool with name replace. svn path=/nixpkgs/branches/stdenv-updates/; revision=10704 --- pkgs/stdenv/generic/setup.sh | 2 +- pkgs/tools/system/cron/default.nix | 2 +- pkgs/tools/text/replace/default.nix | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/stdenv/generic/setup.sh b/pkgs/stdenv/generic/setup.sh index 34e4e0fd9022..4f40c3ee5624 100644 --- a/pkgs/stdenv/generic/setup.sh +++ b/pkgs/stdenv/generic/setup.sh @@ -281,7 +281,7 @@ substitute() { args[${#args[@]}]="$replacement" done - replace -e -s "${args[@]}" < "$input" > "$output".tmp + replace-literal -e -s "${args[@]}" < "$input" > "$output".tmp if test -x "$output"; then chmod +x "$output".tmp fi diff --git a/pkgs/tools/system/cron/default.nix b/pkgs/tools/system/cron/default.nix index 066f594ea84b..4d7dcb93db2b 100644 --- a/pkgs/tools/system/cron/default.nix +++ b/pkgs/tools/system/cron/default.nix @@ -10,7 +10,7 @@ stdenv.mkDerivation { unpackCmd = "(mkdir cron && cd cron && sh $src)"; preBuild = " - substituteInPlace Makefile --replace '-o root' '' --replace 111 755 + substituteInPlace Makefile --replace ' -o root' ' ' --replace 111 755 makeFlags=\"DESTROOT=$out\" "; diff --git a/pkgs/tools/text/replace/default.nix b/pkgs/tools/text/replace/default.nix index b9613ef20772..ca96309e40ed 100644 --- a/pkgs/tools/text/replace/default.nix +++ b/pkgs/tools/text/replace/default.nix @@ -10,6 +10,8 @@ stdenv.mkDerivation { makeFlags = "TREE=\$(out)"; + postInstall = "mv \$out/bin/replace \$out/bin/replace-literal"; + meta = { homepage = http://replace.richardlloyd.org.uk/; description = "A tool to replace verbatim strings"; From 96ddccf6b2eff303d36c72603557c0bbb3e0993d Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Mon, 18 Feb 2008 07:23:05 +0000 Subject: [PATCH 305/320] Some fixes to build elfutils and ltrace, added x11vnc, forward-ported kernel 2.6.23.16 as default. svn path=/nixpkgs/branches/stdenv-updates/; revision=10718 --- .../development/tools/misc/elfutils/0.127.nix | 1 + .../development/tools/misc/elfutils/0.131.nix | 2 + pkgs/os-specific/linux/kernel/2.6.23.16.nix | 39 +++++++++++++++++++ pkgs/os-specific/linux/kernel/default.nix | 3 +- pkgs/tools/X11/x11vnc/0.9.3.nix | 27 +++++++++++++ pkgs/top-level/all-packages.nix | 9 +++++ 6 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 pkgs/os-specific/linux/kernel/2.6.23.16.nix create mode 100644 pkgs/tools/X11/x11vnc/0.9.3.nix diff --git a/pkgs/development/tools/misc/elfutils/0.127.nix b/pkgs/development/tools/misc/elfutils/0.127.nix index efa91fa637c0..198242e27087 100644 --- a/pkgs/development/tools/misc/elfutils/0.127.nix +++ b/pkgs/development/tools/misc/elfutils/0.127.nix @@ -7,4 +7,5 @@ stdenv.mkDerivation { sha256 = "12n3h5r3c24a6l2wxz0w2dqq072bvgms0dzckivrwp5vdn22lpdv"; }; preBuild = "sed -e 's/-Werror//' -i */Makefile "; + dontAddDisableDepTrack = "true"; } diff --git a/pkgs/development/tools/misc/elfutils/0.131.nix b/pkgs/development/tools/misc/elfutils/0.131.nix index 5efe046493db..f2ba07ba0077 100644 --- a/pkgs/development/tools/misc/elfutils/0.131.nix +++ b/pkgs/development/tools/misc/elfutils/0.131.nix @@ -6,4 +6,6 @@ stdenv.mkDerivation { url = http://ftp.de.debian.org/debian/pool/main/e/elfutils/elfutils_0.131.orig.tar.gz; sha256 = "0vqfjpcv81m3q0gsk78qykakhz9rbfwd65i4zsi03xr2lrk9ayll"; }; + dontAddDisableDepTrack = "true"; + preBuild = "sed -e 's/-Werror//' -i */Makefile "; } diff --git a/pkgs/os-specific/linux/kernel/2.6.23.16.nix b/pkgs/os-specific/linux/kernel/2.6.23.16.nix new file mode 100644 index 000000000000..454ce9bf31ff --- /dev/null +++ b/pkgs/os-specific/linux/kernel/2.6.23.16.nix @@ -0,0 +1,39 @@ +args: +(import ./meta.nix) +( args // + { + version = "2.6.23.16"; + src_hash = { sha256 = "0drk3981rl5j16s6amb63lai9kpi0vf0kr6avhpd9nikj27bsa83"; }; + + systemPatches = [ + /*{ # resume with resume=swap:/dev/xx + name = "tux on ice"; # (swsusp2) + patch = args.fetchurl { + url = "http://www.tuxonice.net/downloads/all/tuxonice-3.0-rc3-for-2.6.23.9.patch.bz2"; + sha256 = "16f61cn0mdi7yklhdx4isi7c85843fzxq2cifd05cpsl6x6ilrfk"; + }; + extraConfig = " + CONFIG_SUSPEND2=y + CONFIG_SUSPEND2_FILE=y + CONFIG_SUSPEND2_SWAP=y + CONFIG_CRYPTO_LZF=y + "; + }*/ + { name = "fbsplash-0.9.2-r5-2.6.21"; + patch = args.fetchurl { + url = http://dev.gentoo.org/~dsd/genpatches/trunk/2.6.22/4200_fbsplash-0.9.2-r5.patch; + sha256 = "0822wwlf2dqsap5qslnnp0yl1nbvvvb76l73w2dd8zsyn0bqg3px"; + }; + extraConfig = "CONFIG_FB_SPLASH=y"; + } + ]; + + config = with args; + if config != null then config else + if userModeLinux then ./config-2.6.23-uml else + if stdenv.system == "i686-linux" then ./config-2.6.23-i686-smp else + if stdenv.system == "x86_64-linux" then ./config-2.6.23-x86_64-smp else + abort "No kernel configuration for your platform!"; + } +) + diff --git a/pkgs/os-specific/linux/kernel/default.nix b/pkgs/os-specific/linux/kernel/default.nix index c07bc4c81fb0..61e3c43aeaa9 100644 --- a/pkgs/os-specific/linux/kernel/default.nix +++ b/pkgs/os-specific/linux/kernel/default.nix @@ -27,5 +27,6 @@ args.stdenv.lib.listOfListsToAttrs [ [ "2.6.22-ck" (import ./2.6.22-ck.nix newArgs) ] [ "2.6.23" (import ./2.6.23.nix newArgs) ] [ "2.6.23.1" (import ./2.6.23.1.nix newArgs) ] - [ "default" (import ./2.6.23.1.nix newArgs) ] + [ "2.6.23.16" (import ./2.6.23.16.nix newArgs) ] + [ "default" (import ./2.6.23.16.nix newArgs) ] ] diff --git a/pkgs/tools/X11/x11vnc/0.9.3.nix b/pkgs/tools/X11/x11vnc/0.9.3.nix new file mode 100644 index 000000000000..6a58d5b55080 --- /dev/null +++ b/pkgs/tools/X11/x11vnc/0.9.3.nix @@ -0,0 +1,27 @@ +args : with args; with builderDefs {src="";} null; + let localDefs = builderDefs (rec { + src = /* put a fetchurl here */ + fetchurl { + url = mirror://sourceforge/libvncserver/x11vnc-0.9.3.tar.gz; + sha256 = "0sfzkbqd2d94w51czci9w5j5z67amcl1gphgg6x77dyr2h46kc0a"; + }; + + buildInputs = [libXfixes fixesproto openssl libXdamage damageproto + zlib libX11 xproto libjpeg libXtst libXinerama xineramaproto + libXrandr randrproto libXext xextproto inputproto recordproto]; + configureFlags = []; + }) null; /* null is a terminator for sumArgs */ + in with localDefs; +stdenv.mkDerivation rec { + name = "x11vnc-"+version; + builder = writeScript (name + "-builder") + (textClosure localDefs + [doConfigure doMakeInstall doForceShare doPropagate]); + meta = { + description = " + X11 VNC - VNC server connected to real X11 screen. +"; + homepage = "http://www.karlrunge.com/x11vnc/"; + }; +} + diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b34b8f0bfe9d..c30e97a4bece 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -4822,6 +4822,15 @@ rec { ++ lib.optional (supportsJDK && jrePlugin ? mozillaPlugin) jrePlugin; }; + x11vncFun = lib.sumArgs (selectVersion ../tools/X11/x11vnc "0.9.3") { + inherit builderDefs openssl zlib libjpeg ; + inherit (xlibs) libXfixes fixesproto libXdamage damageproto + libX11 xproto libXtst libXinerama xineramaproto libXrandr randrproto + libXext xextproto inputproto recordproto; + }; + + x11vnc = x11vncFun null; + xara = import ../applications/graphics/xara { inherit fetchurl stdenv autoconf automake libtool gettext cvs wxGTK pkgconfig libxml2 zip libpng libjpeg shebangfix perl freetype; From 66914f5438c4828f01065798828f954d52bf236d Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Mon, 18 Feb 2008 10:42:04 +0000 Subject: [PATCH 306/320] Added src overriding option for relfs svn path=/nixpkgs/branches/stdenv-updates/; revision=10721 --- pkgs/tools/misc/relfs/cvs.2007.12.01.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix index aa0ee2241690..aea97f72dfda 100644 --- a/pkgs/tools/misc/relfs/cvs.2007.12.01.nix +++ b/pkgs/tools/misc/relfs/cvs.2007.12.01.nix @@ -1,7 +1,7 @@ args : with args; let localDefs = builderDefs { src = /* put a fetchurl here */ - fetchcvs { + if args ? src then args.src else fetchcvs { url = ":pserver:anonymous@relfs.cvs.sourceforge.net:/cvsroot/relfs"; module = "relfs"; date = "2007-12-01"; From 88c725ad84924e4df2a8d57ceb52ed059c05879d Mon Sep 17 00:00:00 2001 From: Michael Raskin <7c6f434c@mail.ru> Date: Mon, 18 Feb 2008 20:07:32 +0000 Subject: [PATCH 307/320] Forward port of Apache changes. svn path=/nixpkgs/branches/stdenv-updates/; revision=10736 --- pkgs/servers/http/apache-httpd/builder.sh | 29 ----------------- pkgs/servers/http/apache-httpd/default.nix | 36 +++++++++++++++++----- 2 files changed, 29 insertions(+), 36 deletions(-) delete mode 100644 pkgs/servers/http/apache-httpd/builder.sh diff --git a/pkgs/servers/http/apache-httpd/builder.sh b/pkgs/servers/http/apache-httpd/builder.sh deleted file mode 100644 index 3a5ccd846eec..000000000000 --- a/pkgs/servers/http/apache-httpd/builder.sh +++ /dev/null @@ -1,29 +0,0 @@ -buildInputs="$openssl $db4 $expat $perl" -source $stdenv/setup - -configureFlags="\ - --with-expat=$expat \ - --with-z=$zlib \ - --enable-mods-shared=all \ - --enable-authn-alias \ - --without-gdbm \ - --enable-threads \ - --with-devrandom=/dev/urandom" - -if test $db4Support; then - configureFlags="--with-berkeley-db=$db4 $configureFlags" -fi - -if test $sslSupport; then - configureFlags="--enable-ssl --with-ssl=$openssl $configureFlags" -fi - - -postInstall() { - echo "removing manual" - rm -rf $out/manual -} -postInstall=postInstall - - -genericBuild diff --git a/pkgs/servers/http/apache-httpd/default.nix b/pkgs/servers/http/apache-httpd/default.nix index 76865cf3426e..4e2af7ff9000 100644 --- a/pkgs/servers/http/apache-httpd/default.nix +++ b/pkgs/servers/http/apache-httpd/default.nix @@ -1,5 +1,5 @@ { stdenv, fetchurl, openssl, db4, expat, perl, zlib -, sslSupport, db4Support +, sslSupport, db4Support, proxySupport ? true }: assert sslSupport -> openssl != null; @@ -7,19 +7,36 @@ assert db4Support -> db4 != null; assert expat != null && perl != null; stdenv.mkDerivation { - name = "apache-httpd-2.2.8"; + name = "apache-httpd-2.2.8x"; - builder = ./builder.sh; src = fetchurl { url = http://archive.apache.org/dist/httpd/httpd-2.2.8.tar.bz2; md5 = "76d2598a4797163d07cd50e5304aa7cd"; }; - inherit sslSupport db4Support; + #inherit sslSupport db4Support; - inherit perl expat zlib; - openssl = if sslSupport then openssl else null; - db4 = if db4Support then db4 else null; + buildInputs = [expat perl] ++ + stdenv.lib.optional sslSupport openssl ++ + stdenv.lib.optional db4Support db4; + + configureFlags = '' + --with-expat=${expat} + --with-z=${zlib} + --enable-mods-shared=all + --enable-authn-alias + ${if proxySupport then "--enable-proxy" else ""} + --without-gdbm + --enable-threads + --with-devrandom=/dev/urandom + ${if sslSupport then "--enable-ssl --with-ssl=${openssl}" else ""} + ${if db4Support then "--with-berkeley-db=${db4}" else ""} + ''; + + postInstall = '' + echo "removing manual" + rm -rf $out/manual + ''; # For now, disable detection of epoll to ensure that Apache still # runs on Linux 2.4 kernels. Once we've dropped support for 2.4 in @@ -27,8 +44,13 @@ stdenv.mkDerivation { # detects characteristics of the build system's kernel to decide # what to use at runtime, since it's impure. apr_cv_epoll = "no"; + + passthru = { + inherit expat sslSupport db4Support proxySupport; + }; meta = { description = "Apache HTTPD, the world's most popular web server"; + homepage = http://httpd.apache.org/; }; } From 81429b0ac2ca6614f48999410bc8e89a586d5655 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:48:36 +0000 Subject: [PATCH 308/320] avahi: glib and qt4 support, 0.6.22 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10737 --- pkgs/development/libraries/avahi/0.6.21.nix | 2 ++ pkgs/development/libraries/avahi/0.6.22.nix | 2 ++ pkgs/development/libraries/avahi/common.nix | 18 ++++++++++++++++++ pkgs/development/libraries/avahi/default.nix | 14 -------------- pkgs/top-level/all-packages.nix | 6 ++++-- 5 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 pkgs/development/libraries/avahi/0.6.21.nix create mode 100644 pkgs/development/libraries/avahi/0.6.22.nix create mode 100644 pkgs/development/libraries/avahi/common.nix delete mode 100644 pkgs/development/libraries/avahi/default.nix diff --git a/pkgs/development/libraries/avahi/0.6.21.nix b/pkgs/development/libraries/avahi/0.6.21.nix new file mode 100644 index 000000000000..26f03ca58bfe --- /dev/null +++ b/pkgs/development/libraries/avahi/0.6.21.nix @@ -0,0 +1,2 @@ +args: +import ./common.nix "0q954lwhr6xnv7chhi4bqlmkn4nx9shyw0mbdr3n26018dgw65yq" args diff --git a/pkgs/development/libraries/avahi/0.6.22.nix b/pkgs/development/libraries/avahi/0.6.22.nix new file mode 100644 index 000000000000..93b7184cdae2 --- /dev/null +++ b/pkgs/development/libraries/avahi/0.6.22.nix @@ -0,0 +1,2 @@ +args: +import ./common.nix "0lnxzsdhihb3kjwd3vcrl9pq6ykfbp0vy9ja0mch01ffnrqgiilx" args diff --git a/pkgs/development/libraries/avahi/common.nix b/pkgs/development/libraries/avahi/common.nix new file mode 100644 index 000000000000..1ebadc26e268 --- /dev/null +++ b/pkgs/development/libraries/avahi/common.nix @@ -0,0 +1,18 @@ +sha256: args: with args; + +stdenv.mkDerivation rec { + name = "avahi-" + version; + src = fetchurl { + url = "${meta.homepage}/download/${name}.tar.gz"; + inherit sha256; + }; + + buildInputs = [pkgconfig libdaemon dbus perl perlXMLParser glib qt4]; + + configureFlags = "--disable-qt3 --disable-gdbm --disable-gtk --disable-mono + --with-distro=none --enable-shared --disable-static --disable-python"; + + meta = { + homepage = http://avahi.org; + }; +} diff --git a/pkgs/development/libraries/avahi/default.nix b/pkgs/development/libraries/avahi/default.nix deleted file mode 100644 index c8a94c0dbb15..000000000000 --- a/pkgs/development/libraries/avahi/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{stdenv, fetchurl, pkgconfig, libdaemon, dbus}: - -stdenv.mkDerivation { - name = "avahi-0.6.21"; - src = fetchurl { - url = http://avahi.org/download/avahi-0.6.21.tar.gz; - sha256 = "d817c35f43011861476eab02eea14edd123b2bc58b4408d9d9b69b0c39252561"; - }; - - #buildInputs = [pkgconfig glib gtk libpng libglade]; - buildInputs = [pkgconfig libdaemon dbus]; - - configureFlags = "--disable-glib --disable-qt3 --disable-qt4 --disable-gtk --disable-expat --disable-gdbm --disable-python --disable-mono --with-distro=none CPPFLAGS=-Ddbus_watch_get_unix_fd=dbus_watch_get_fd"; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c30e97a4bece..3b76d1eabd58 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -334,8 +334,10 @@ rec { inherit fetchurl stdenv zlib wxGTK; }; - avahi = import ../development/libraries/avahi { - inherit stdenv fetchurl pkgconfig libdaemon dbus; + avahi = selectVersion ../development/libraries/avahi "0.6.22" { + inherit stdenv fetchurl pkgconfig libdaemon dbus perl perlXMLParser qt4 + python expat; + inherit (gtkLibs) glib gtk; }; axel = import ../tools/networking/axel { From bcb28f63a0597d4680da4c1f2b125c55dd88878e Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:50:49 +0000 Subject: [PATCH 309/320] shared-mime-info: 0.23 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10738 --- pkgs/data/misc/shared-mime-info/0.22.nix | 2 ++ pkgs/data/misc/shared-mime-info/0.23.nix | 2 ++ pkgs/data/misc/shared-mime-info/common.nix | 16 ++++++++++++++++ pkgs/data/misc/shared-mime-info/default.nix | 12 ------------ pkgs/top-level/all-packages.nix | 2 +- 5 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 pkgs/data/misc/shared-mime-info/0.22.nix create mode 100644 pkgs/data/misc/shared-mime-info/0.23.nix create mode 100644 pkgs/data/misc/shared-mime-info/common.nix delete mode 100644 pkgs/data/misc/shared-mime-info/default.nix diff --git a/pkgs/data/misc/shared-mime-info/0.22.nix b/pkgs/data/misc/shared-mime-info/0.22.nix new file mode 100644 index 000000000000..399b3296d382 --- /dev/null +++ b/pkgs/data/misc/shared-mime-info/0.22.nix @@ -0,0 +1,2 @@ +args: +import ./common.nix "1chz63v9jr009z9jhs07klybmhyf58i8vxipigf5gkdabjiclcyr" args diff --git a/pkgs/data/misc/shared-mime-info/0.23.nix b/pkgs/data/misc/shared-mime-info/0.23.nix new file mode 100644 index 000000000000..38617dfe8e3f --- /dev/null +++ b/pkgs/data/misc/shared-mime-info/0.23.nix @@ -0,0 +1,2 @@ +args: +import ./common.nix "080ny2vy00202hxcm7xm72j1zmyfs15dbsnqipwni6b2dg2am3q3" args diff --git a/pkgs/data/misc/shared-mime-info/common.nix b/pkgs/data/misc/shared-mime-info/common.nix new file mode 100644 index 000000000000..8c2ff363c6af --- /dev/null +++ b/pkgs/data/misc/shared-mime-info/common.nix @@ -0,0 +1,16 @@ +hash: args: with args; + +stdenv.mkDerivation rec { + name = "shared-mime-info-" + version; + + src = fetchurl { + url = "http://freedesktop.org/~hadess/${name}.tar.bz2"; + sha256 = hash; + }; + + buildInputs = [perl perlXMLParser pkgconfig gettext libxml2 glib]; + + meta = { + homepage = http://freedesktop.org/wiki/Software/shared-mime-info; + }; +} diff --git a/pkgs/data/misc/shared-mime-info/default.nix b/pkgs/data/misc/shared-mime-info/default.nix deleted file mode 100644 index 0b82782d31d9..000000000000 --- a/pkgs/data/misc/shared-mime-info/default.nix +++ /dev/null @@ -1,12 +0,0 @@ -{stdenv, fetchurl, perl, perlXMLParser, pkgconfig, gettext, libxml2, glib}: - -stdenv.mkDerivation { - name = "shared-mime-info-0.22"; - - src = fetchurl { - url = http://freedesktop.org/~hadess/shared-mime-info-0.22.tar.bz2; - sha256 = "1chz63v9jr009z9jhs07klybmhyf58i8vxipigf5gkdabjiclcyr"; - }; - - buildInputs = [perl perlXMLParser pkgconfig gettext libxml2 glib]; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3b76d1eabd58..dc39f053da10 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -3857,7 +3857,7 @@ rec { inherit fetchurl stdenv; }; - shared_mime_info = import ../data/misc/shared-mime-info { + shared_mime_info = selectVersion ../data/misc/shared-mime-info "0.23" { inherit fetchurl stdenv perl perlXMLParser pkgconfig gettext libxml2; inherit (gtkLibs) glib; }; From 461b3197b545d76abb88b5ae2d3979061b781480 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:51:07 +0000 Subject: [PATCH 310/320] enchant: using selectVersion svn path=/nixpkgs/branches/stdenv-updates/; revision=10739 --- pkgs/development/libraries/enchant/1.3.0.nix | 14 ++++++++++++++ pkgs/development/libraries/enchant/default.nix | 10 ---------- pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 pkgs/development/libraries/enchant/1.3.0.nix delete mode 100644 pkgs/development/libraries/enchant/default.nix diff --git a/pkgs/development/libraries/enchant/1.3.0.nix b/pkgs/development/libraries/enchant/1.3.0.nix new file mode 100644 index 000000000000..e503366087eb --- /dev/null +++ b/pkgs/development/libraries/enchant/1.3.0.nix @@ -0,0 +1,14 @@ +args: with args; +stdenv.mkDerivation rec { + name = "enchant-" + version; + src = fetchurl { + url = "http://www.abisource.com/downloads/enchant/${version}/${name}.tar.gz"; + sha256 = "1vwqwsadnp4rf8wj7d4rglvszjzlcli0jyxh06h8inka1sm1al76"; + }; + buildInputs = [aspell pkgconfig glib]; + configureFlags = "--enable-shared --disable-static"; + + meta = { + homepage = http://www.abisource.com/enchant; + }; +} diff --git a/pkgs/development/libraries/enchant/default.nix b/pkgs/development/libraries/enchant/default.nix deleted file mode 100644 index 74fe33cba8cc..000000000000 --- a/pkgs/development/libraries/enchant/default.nix +++ /dev/null @@ -1,10 +0,0 @@ -args: with args; -stdenv.mkDerivation { - name = "enchant-1.3.0"; - src = fetchurl { - url = http://FIXME/enchant-1.3.0.tar.gz; - sha256 = "1vwqwsadnp4rf8wj7d4rglvszjzlcli0jyxh06h8inka1sm1al76"; - }; - buildInputs = [aspell pkgconfig glib]; - configureFlags = "--enable-shared --disable-static"; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dc39f053da10..23752af9070c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1892,7 +1892,7 @@ rec { inherit fetchurl stdenv perl; }; - enchant = import ../development/libraries/enchant { + enchant = selectVersion ../development/libraries/enchant "1.3.0" { inherit fetchurl stdenv aspell pkgconfig; inherit (gnome) glib; }; From f19180e9c277828764106c908bbab6cf59517d05 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:51:25 +0000 Subject: [PATCH 311/320] ortp: 0.7.1 added (libjingle may need it) svn path=/nixpkgs/branches/stdenv-updates/; revision=10740 --- .../libraries/ortp/{default.nix => 0.13.1.nix} | 8 +++----- pkgs/development/libraries/ortp/0.7.1.nix | 16 ++++++++++++++++ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) rename pkgs/development/libraries/ortp/{default.nix => 0.13.1.nix} (60%) create mode 100644 pkgs/development/libraries/ortp/0.7.1.nix diff --git a/pkgs/development/libraries/ortp/default.nix b/pkgs/development/libraries/ortp/0.13.1.nix similarity index 60% rename from pkgs/development/libraries/ortp/default.nix rename to pkgs/development/libraries/ortp/0.13.1.nix index 4fc51a3ce85b..ea1cd64b3d27 100644 --- a/pkgs/development/libraries/ortp/default.nix +++ b/pkgs/development/libraries/ortp/0.13.1.nix @@ -1,11 +1,9 @@ - args: with args; stdenv.mkDerivation rec { - name = "ortp-0.13.1"; + name = "ortp-" + version; src = fetchurl { - url = - "http://download.savannah.nongnu.org/releases/linphone/ortp/sources/${name}.tar.gz"; + url = "mirror://savannah/linphone/ortp/sources/${name}.tar.gz"; sha256 = "0k2963v4b15xnf4cpkpgjhsb8ckxpf6vdr8dnw7z3mzilji7391b"; }; @@ -13,6 +11,6 @@ stdenv.mkDerivation rec { meta = { description = "a Real-Time Transport Protocol (RFC3550) stack under LGPL"; - homepage = http://www.linphone.org/index.php/eng/code_review/ortp; + homepage = http://www.linphone.org/index.php/eng/code_review/ortp; }; } diff --git a/pkgs/development/libraries/ortp/0.7.1.nix b/pkgs/development/libraries/ortp/0.7.1.nix new file mode 100644 index 000000000000..7bedf39f8be1 --- /dev/null +++ b/pkgs/development/libraries/ortp/0.7.1.nix @@ -0,0 +1,16 @@ +args: with args; +stdenv.mkDerivation rec { + name = "ortp-" + version; + + src = fetchurl { + url = "mirror://savannah/linphone/ortp/sources/${name}.tar.gz"; + sha256 = "0gyl0yzfg78sjhbwnwc2g8yn4riwd1wcv183qihgan6z2d5cfbrg"; + }; + + configureFlags = "--enable-shared --disable-static"; + + meta = { + description = "a Real-Time Transport Protocol (RFC3550) stack under LGPL"; + homepage = http://www.linphone.org/index.php/eng/code_review/ortp; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 23752af9070c..3277ef666980 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2533,7 +2533,7 @@ rec { inherit fetchurl stdenv perl; }; - ortp = import ../development/libraries/ortp { + ortp = selectVersion ../development/libraries/ortp "0.13.1" { inherit fetchurl stdenv; }; From fefdde62099ae94ebd6de86724259a86d689ed97 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:51:40 +0000 Subject: [PATCH 312/320] liboil: URL corrected svn path=/nixpkgs/branches/stdenv-updates/; revision=10741 --- pkgs/development/libraries/liboil/0.3.12.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/liboil/0.3.12.nix b/pkgs/development/libraries/liboil/0.3.12.nix index 3e6537530614..5a04892d5beb 100644 --- a/pkgs/development/libraries/liboil/0.3.12.nix +++ b/pkgs/development/libraries/liboil/0.3.12.nix @@ -4,7 +4,7 @@ stdenv.mkDerivation rec { name = "liboil-" + version; src = fetchurl { - url = "${meta.homepage}/liboil/${name}.tar.gz"; + url = "${meta.homepage}/download/${name}.tar.gz"; sha256 = "0gdmly9sli1918pnb4ds1g38ipxikn651hdss86mp4qlfb8wvqlv"; }; From 343d3f0e4c1279b0afd61bf70cf816af6231ab7d Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:51:56 +0000 Subject: [PATCH 313/320] log4cxx: +boost svn path=/nixpkgs/branches/stdenv-updates/; revision=10742 --- pkgs/development/libraries/log4cxx/default.nix | 2 +- pkgs/top-level/all-packages.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/log4cxx/default.nix b/pkgs/development/libraries/log4cxx/default.nix index 49544796612f..63f32c05bc77 100644 --- a/pkgs/development/libraries/log4cxx/default.nix +++ b/pkgs/development/libraries/log4cxx/default.nix @@ -6,6 +6,6 @@ stdenv.mkDerivation { url = http://archive.apache.org/dist/logging/log4cxx/log4cxx-0.9.7.tar.gz; sha256 = "1ikyxd8jgf7b2cqjk5lidl7cffs114iiblaczaqbv5bm4vyb4hav"; }; - buildInputs = [ autoconf automake libtool libxml2 cppunit ]; + buildInputs = [ autoconf automake libtool libxml2 cppunit boost ]; patchPhase = "sh autogen.sh; sed -e 's/DOMConfigurator::subst/subst/' -i include/log4cxx/xml/domconfigurator.h"; } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3277ef666980..0039120a0f6c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2425,7 +2425,7 @@ rec { }; log4cxx = import ../development/libraries/log4cxx { - inherit fetchurl stdenv automake autoconf libtool cppunit libxml2; + inherit fetchurl stdenv automake autoconf libtool cppunit libxml2 boost; }; loudmouth = import ../development/libraries/loudmouth { From cc27e523665df525ab0a0db425053ce3d1c7d363 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:52:10 +0000 Subject: [PATCH 314/320] Some spacing, jre in firefox wrapper made optional with true default svn path=/nixpkgs/branches/stdenv-updates/; revision=10743 --- pkgs/top-level/all-packages.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0039120a0f6c..7a990d5afd6a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -879,7 +879,7 @@ rec { wv = import ../tools/misc/wv { inherit fetchurl stdenv libpng zlib imagemagick - pkgconfig libgsf libxml2 bzip2; + pkgconfig libgsf libxml2 bzip2; inherit (gtkLibs) glib; }; @@ -4821,7 +4821,7 @@ rec { # RealPlayer is disabled by default for legal reasons. ++ lib.optional (system != "i686-linux" && getConfig ["firefox" "enableRealPlayer"] false) RealPlayer ++ lib.optional (getConfig ["firefox" "enableMPlayer"] true) MPlayerPlugin - ++ lib.optional (supportsJDK && jrePlugin ? mozillaPlugin) jrePlugin; + ++ lib.optional (supportsJDK && getConfig ["firefox" "jre"] true && jrePlugin ? mozillaPlugin) jrePlugin; }; x11vncFun = lib.sumArgs (selectVersion ../tools/X11/x11vnc "0.9.3") { From 8ea549b319c2d96ac26276bce2927400ee4e9fa0 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:52:25 +0000 Subject: [PATCH 315/320] sharutils added (4.6.3) svn path=/nixpkgs/branches/stdenv-updates/; revision=10744 --- pkgs/tools/archivers/sharutils/4.6.3.nix | 13 +++++++++++++ pkgs/top-level/all-packages.nix | 4 ++++ 2 files changed, 17 insertions(+) create mode 100644 pkgs/tools/archivers/sharutils/4.6.3.nix diff --git a/pkgs/tools/archivers/sharutils/4.6.3.nix b/pkgs/tools/archivers/sharutils/4.6.3.nix new file mode 100644 index 000000000000..830c2a072b6e --- /dev/null +++ b/pkgs/tools/archivers/sharutils/4.6.3.nix @@ -0,0 +1,13 @@ +args: with args; +stdenv.mkDerivation rec { + name = "sharutils-" + version; + + src = fetchurl { + url = "mirror://gnu/sharutils/REL-${version}/${name}.tar.bz2"; + sha256 = "1sirrzas8llcsd8gnh56pns39wa1f803vff1kmy5islfi1p9vqk8"; + }; + + meta = { + homepage = http://www.gnu.org/software/sharutils; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7a990d5afd6a..0942ae4c0bd6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -777,6 +777,10 @@ rec { inherit fetchurl stdenv ncurses; }; + sharutils = selectVersion ../tools/archivers/sharutils "4.6.3" { + inherit fetchurl stdenv; + }; + shebangfix = import ../tools/misc/shebangfix { inherit perl stdenv; }; From 0b2d4935215bae41df407516f5d48bfa448207a1 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:52:40 +0000 Subject: [PATCH 316/320] libarchive: 2.4.12 added svn path=/nixpkgs/branches/stdenv-updates/; revision=10745 --- .../libraries/libarchive/2.4.11.nix | 2 ++ .../libraries/libarchive/2.4.12.nix | 2 ++ .../libraries/libarchive/common.nix | 18 ++++++++++++++++++ .../libraries/libarchive/default.nix | 15 --------------- pkgs/top-level/all-packages.nix | 4 ++-- 5 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 pkgs/development/libraries/libarchive/2.4.11.nix create mode 100644 pkgs/development/libraries/libarchive/2.4.12.nix create mode 100644 pkgs/development/libraries/libarchive/common.nix delete mode 100644 pkgs/development/libraries/libarchive/default.nix diff --git a/pkgs/development/libraries/libarchive/2.4.11.nix b/pkgs/development/libraries/libarchive/2.4.11.nix new file mode 100644 index 000000000000..e75d59ec18af --- /dev/null +++ b/pkgs/development/libraries/libarchive/2.4.11.nix @@ -0,0 +1,2 @@ +args: +import ./common.nix "1iq5hs4hbqyl6sqiqlaj3j89vpfqx6zv974c965nxjvmwy816dbz" args diff --git a/pkgs/development/libraries/libarchive/2.4.12.nix b/pkgs/development/libraries/libarchive/2.4.12.nix new file mode 100644 index 000000000000..9765ec61cd76 --- /dev/null +++ b/pkgs/development/libraries/libarchive/2.4.12.nix @@ -0,0 +1,2 @@ +args: +import ./common.nix "133kxx1wfangrhy6rcpqlqib7i45qxj8pcp3i9n574cwfx41swy4" args diff --git a/pkgs/development/libraries/libarchive/common.nix b/pkgs/development/libraries/libarchive/common.nix new file mode 100644 index 000000000000..9f031e4f2c21 --- /dev/null +++ b/pkgs/development/libraries/libarchive/common.nix @@ -0,0 +1,18 @@ +sha256: args: with args; +stdenv.mkDerivation rec { + name = "libarchive-" + version; + + src = fetchurl { + url = "${meta.homepage}/src/${name}.tar.gz"; + inherit sha256; + }; + + propagatedBuildInputs = [zlib bzip2 e2fsprogs]; + buildInputs = [sharutils]; + configureFlags = "--enable-shared --disable-static"; + + meta = { + description = "A library for reading and writing streaming archives"; + homepage = http://people.freebsd.org/~kientzle/libarchive; + }; +} diff --git a/pkgs/development/libraries/libarchive/default.nix b/pkgs/development/libraries/libarchive/default.nix deleted file mode 100644 index c7dc2b39389e..000000000000 --- a/pkgs/development/libraries/libarchive/default.nix +++ /dev/null @@ -1,15 +0,0 @@ -args: with args; -stdenv.mkDerivation rec { - name = "libarchive-2.4.11"; - - src = fetchurl { - url = "http://FIXME_dont_remember/${name}.tar.gz"; - sha256 = "1iq5hs4hbqyl6sqiqlaj3j89vpfqx6zv974c965nxjvmwy816dbz"; - }; - - buildInputs = [zlib]; - - meta = { - description = "A library for reading and writing streaming archives"; - }; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0942ae4c0bd6..de8177740688 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2164,8 +2164,8 @@ rec { inherit fetchurl stdenv; }; - libarchive = import ../development/libraries/libarchive { - inherit fetchurl stdenv zlib; + libarchive = selectVersion ../development/libraries/libarchive "2.4.12" { + inherit fetchurl stdenv zlib bzip2 e2fsprogs sharutils; }; libassuan = import ../development/libraries/libassuan { From 0aa08473072c8a89e9173ea6e6a364ea0af83130 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:52:59 +0000 Subject: [PATCH 317/320] added gnupg-1.x compatibility symlinks to gnupg-2.x, removed gnupg2 attr svn path=/nixpkgs/branches/stdenv-updates/; revision=10746 --- pkgs/development/libraries/gpgme/default.nix | 2 +- .../security/gnupg/{default.nix => 1.4.8.nix} | 29 +++++++++---------- .../{gnupg2/default.nix => gnupg/2.0.8.nix} | 15 +++++++--- pkgs/tools/security/gnupg/builder.sh | 10 ------- pkgs/tools/security/gnupg/idea.patch | 25 ++++++++++++++++ pkgs/top-level/all-packages.nix | 13 ++++----- 6 files changed, 55 insertions(+), 39 deletions(-) rename pkgs/tools/security/gnupg/{default.nix => 1.4.8.nix} (51%) rename pkgs/tools/security/{gnupg2/default.nix => gnupg/2.0.8.nix} (57%) delete mode 100644 pkgs/tools/security/gnupg/builder.sh create mode 100644 pkgs/tools/security/gnupg/idea.patch diff --git a/pkgs/development/libraries/gpgme/default.nix b/pkgs/development/libraries/gpgme/default.nix index 64f1a746b03c..09ffde4512a3 100644 --- a/pkgs/development/libraries/gpgme/default.nix +++ b/pkgs/development/libraries/gpgme/default.nix @@ -6,5 +6,5 @@ stdenv.mkDerivation { url = ftp://ftp.gnupg.org/gcrypt/gpgme/gpgme-1.1.4.tar.bz2; sha256 = "0ncrv7p33rjq1avkxpp9x0gz6wna9y3b3dmw6nv366n5mgvxmpg8"; }; - buildInputs = [libgpgerror gnupg gnupg2 pkgconfig glib pth]; + buildInputs = [libgpgerror gnupg pkgconfig glib pth]; } diff --git a/pkgs/tools/security/gnupg/default.nix b/pkgs/tools/security/gnupg/1.4.8.nix similarity index 51% rename from pkgs/tools/security/gnupg/default.nix rename to pkgs/tools/security/gnupg/1.4.8.nix index 16c86fbe804f..d712f8da84aa 100644 --- a/pkgs/tools/security/gnupg/default.nix +++ b/pkgs/tools/security/gnupg/1.4.8.nix @@ -1,23 +1,20 @@ -{ - # Support for the IDEA cipher (used by the old PGP) should only be - # enabled if it is legal for you to do so. - ideaSupport ? false - -, stdenv, fetchurl, readline -}: +args: with args; -stdenv.mkDerivation { - name = "gnupg-1.4.8"; - builder = ./builder.sh; - src = fetchurl { - url = ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/gnupg-1.4.8.tar.bz2; - sha256 = "0v009vqpa4l9zwhcaaagz5sx65fjp8g0alsf8kac5s5gvrs2b78i"; - }; - buildInputs = [readline]; - idea = if ideaSupport then fetchurl { +let + idea = fetchurl { url = http://nix.cs.uu.nl/dist/tarballs/idea.c.gz; md5 = "9dc3bc086824a8c7a331f35e09a3e57f"; } else null; +in + +stdenv.mkDerivation rec { + name = "gnupg-" + version; + src = fetchurl { + url = "ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/${name}.tar.bz2"; + sha256 = "0v009vqpa4l9zwhcaaagz5sx65fjp8g0alsf8kac5s5gvrs2b78i"; + }; + buildInputs = [readline]; + preConfigure = if ideaSupport then "gunzip < ${idea} > ./cipher/idea.c" else ""; meta = { description = "A free implementation of the OpenPGP standard for encrypting and signing data"; diff --git a/pkgs/tools/security/gnupg2/default.nix b/pkgs/tools/security/gnupg/2.0.8.nix similarity index 57% rename from pkgs/tools/security/gnupg2/default.nix rename to pkgs/tools/security/gnupg/2.0.8.nix index f6e22bec51d4..05022e53c30f 100644 --- a/pkgs/tools/security/gnupg2/default.nix +++ b/pkgs/tools/security/gnupg/2.0.8.nix @@ -1,16 +1,23 @@ args: with args; -stdenv.mkDerivation { - name = "gnupg-2.0.8"; + +stdenv.mkDerivation rec { + name = "gnupg-" + version; + src = fetchurl { - url = ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/gnupg-2.0.8.tar.bz2; + url = "ftp://ftp.cert.dfn.de/pub/tools/crypt/gcrypt/gnupg/${name}.tar.bz2"; sha256 = "04v9s92xph1hrhac49yyrgzdwjqshs2zawvjbi3jc2klwjpi1wqn"; }; + buildInputs = [ readline openldap bzip2 zlib libgpgerror pth libgcrypt libassuan libksba libusb curl ]; + postInstall = "ln -s gpg2 $out/bin/gpg; ln -s gpgv2 $out/bin/gpgv"; + + patches = ./idea.patch; + meta = { description = "A free implementation of the OpenPGP standard for encrypting - and signing data, v2"; + and signing data, v2"; homepage = http://www.gnupg.org/; }; } diff --git a/pkgs/tools/security/gnupg/builder.sh b/pkgs/tools/security/gnupg/builder.sh deleted file mode 100644 index c5545c7456ca..000000000000 --- a/pkgs/tools/security/gnupg/builder.sh +++ /dev/null @@ -1,10 +0,0 @@ -source $stdenv/setup - -preConfigure=preConfigure -preConfigure() { - if test -n "$idea"; then - gunzip < $idea > ./cipher/idea.c - fi -} - -genericBuild diff --git a/pkgs/tools/security/gnupg/idea.patch b/pkgs/tools/security/gnupg/idea.patch new file mode 100644 index 000000000000..aa65cc9f7ac5 --- /dev/null +++ b/pkgs/tools/security/gnupg/idea.patch @@ -0,0 +1,25 @@ + +This is required in order to support IDEA encrypted keys +using gnupg-1.4.X. The raw key has two bytes which are part +of the checksum but not part of the key. + +This will not get into upstream as upstream does not wish to support +IDEA at all even for backward compatibility. + +Signed-off-by: Alon Bar-Lev + +diff -urNp gnupg-2.0.4.org/g10/seckey-cert.c gnupg-2.0.4/g10/seckey-cert.c +--- gnupg-2.0.4.org/g10/seckey-cert.c 2006-11-21 10:26:13.000000000 +0200 ++++ gnupg-2.0.4/g10/seckey-cert.c 2007-06-22 18:08:48.000000000 +0300 +@@ -211,6 +211,11 @@ do_check( PKT_secret_key *sk, const char + csum += checksum (buffer, ndata); + gcry_mpi_release (sk->skey[i]); + ++ if (sk->protect.algo==CIPHER_ALGO_IDEA) { ++ buffer[0] = 0; ++ buffer[1] = 0; ++ } ++ + err = gcry_mpi_scan( &sk->skey[i], GCRYMPI_FMT_USG, + buffer, ndata, &ndata ); + xfree (buffer); diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index de8177740688..3c75c5507431 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -512,14 +512,11 @@ rec { inherit fetchurl stdenv; }); - gnupg = import ../tools/security/gnupg { - inherit fetchurl stdenv readline; - ideaSupport = getConfig [ "gnupg" "idea" ] false; # enable for IDEA crypto support - }; - - gnupg2 = import ../tools/security/gnupg2 { + gnupg = selectVersion ../tools/security/gnupg "2.0.8" { inherit fetchurl stdenv readline openldap bzip2 zlib libgpgerror pth libgcrypt libassuan libksba libusb curl; + # enable for IDEA crypto support in gnupg 1.4.x + ideaSupport = getConfig [ "gnupg" "idea" ] false; }; gnuplot = import ../tools/graphics/gnuplot { @@ -2036,8 +2033,8 @@ rec { }; gpgme = import ../development/libraries/gpgme { - inherit fetchurl stdenv libgpgerror pkgconfig pth gnupg gnupg2; - inherit (gtkLibs) glib; + inherit fetchurl stdenv libgpgerror pkgconfig pth gnupg; + inherit (gtkLibs) glib; }; # gnu scientific library From fc33ef9f7bd121b52582cb4e1baed8885e156d98 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:53:11 +0000 Subject: [PATCH 318/320] libraw1394: URL corrected svn path=/nixpkgs/branches/stdenv-updates/; revision=10747 --- pkgs/development/libraries/libraw1394/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/libraries/libraw1394/default.nix b/pkgs/development/libraries/libraw1394/default.nix index af0553d49f78..2ca8c543fa95 100644 --- a/pkgs/development/libraries/libraw1394/default.nix +++ b/pkgs/development/libraries/libraw1394/default.nix @@ -9,7 +9,7 @@ stdenv.mkDerivation rec { meta = { description = "library providing direct access to the IEEE 1394 bus through the Linux 1394 subsystem's raw1394 user space interface"; - homepage = "http://wiki.linux1394.org"; + homepage = "http://www.linux1394.org"; license = ["GPL" "LGPL"]; }; } From f1459725b60331a90c40e1fec30adc3bfcb644eb Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:53:23 +0000 Subject: [PATCH 319/320] telepathy stuff svn path=/nixpkgs/branches/stdenv-updates/; revision=10748 --- pkgs/development/libraries/tapioca-qt/default.nix | 2 +- pkgs/development/libraries/telepathy-qt/default.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/tapioca-qt/default.nix b/pkgs/development/libraries/tapioca-qt/default.nix index 956d4c098735..962a82a8a1a8 100644 --- a/pkgs/development/libraries/tapioca-qt/default.nix +++ b/pkgs/development/libraries/tapioca-qt/default.nix @@ -1,5 +1,5 @@ args: with args; -let rev = "2031"; in +let rev = "2066"; in stdenv.mkDerivation { name = "tapioca-qt-r${rev}"; src = fetchsvn { diff --git a/pkgs/development/libraries/telepathy-qt/default.nix b/pkgs/development/libraries/telepathy-qt/default.nix index 9c0ea152f4ed..6e8e84399d1f 100644 --- a/pkgs/development/libraries/telepathy-qt/default.nix +++ b/pkgs/development/libraries/telepathy-qt/default.nix @@ -9,7 +9,7 @@ stdenv.mkDerivation { }; buildInputs = [cmake]; - propagatedBuildInputs = [qt]; + propagatedBuildInputs = [qt stdenv.gcc.libc]; meta = { description = "Qt bindings for telepathy"; }; From 805424e33f03fbe07db4b733fadaae802a41a5c5 Mon Sep 17 00:00:00 2001 From: "Yury G. Kudryashov" Date: Mon, 18 Feb 2008 20:53:36 +0000 Subject: [PATCH 320/320] libxklavier added svn path=/nixpkgs/branches/stdenv-updates/; revision=10749 --- .../development/libraries/libxklavier/3.4.nix | 21 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 6 ++++++ 2 files changed, 27 insertions(+) create mode 100644 pkgs/development/libraries/libxklavier/3.4.nix diff --git a/pkgs/development/libraries/libxklavier/3.4.nix b/pkgs/development/libraries/libxklavier/3.4.nix new file mode 100644 index 000000000000..38fa91cfeb08 --- /dev/null +++ b/pkgs/development/libraries/libxklavier/3.4.nix @@ -0,0 +1,21 @@ +args: with args; + +stdenv.mkDerivation rec { + name = "libxklavier-" + version; + + src = fetchurl { + url = "mirror://sf/gswitchit/${name}.tar.gz"; + sha256 = "07pq74ygmnr3vgfp86dbjnqsp3v67fww6d3a1vqbif9wzbk70195"; + }; + +# TODO: enable xmodmap support, needs xmodmap DB + propagatedBuildInputs = [libX11 xkeyboard_config libxml2 libICE glib libxkbfile]; + buildInputs = [pkgconfig]; + configureFlags = "--enable-shared --disable-static + --with-xkb-base=${xkeyboard_config}/etc/X11/xkb + --disable-xmodmap-support"; + + meta = { + homepage = http://freedesktop.org/wiki/Software/LibXklavier; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 3c75c5507431..acac3d508531 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2398,6 +2398,12 @@ rec { inherit fetchurl stdenv; }; + libxklavier = selectVersion ../development/libraries/libxklavier "3.4" { + inherit fetchurl stdenv xkeyboard_config pkgconfig libxml2; + inherit (xorg) libX11 libICE libxkbfile; + inherit (gtkLibs) glib; + }; + libxml2 = import ../development/libraries/libxml2 { inherit fetchurl stdenv zlib python; pythonSupport = false;