diff --git a/doc/manual.xml b/doc/manual.xml index b067549e8fdf..a16b783af310 100644 --- a/doc/manual.xml +++ b/doc/manual.xml @@ -31,6 +31,7 @@ + diff --git a/doc/meta.xml b/doc/meta.xml new file mode 100644 index 000000000000..5e53609a2368 --- /dev/null +++ b/doc/meta.xml @@ -0,0 +1,200 @@ + + +Meta-attributes + +Nix packages can declare meta-attributes +that contain information about a package such as a description, its +homepage, its license, and so on. For instance, the GNU Hello package +has a meta declaration like this: + + +meta = { + description = "A program that produces a familiar, friendly greeting"; + longDescription = '' + GNU Hello is a program that prints "Hello, world!" when you run it. + It is fully customizable. + ''; + homepage = http://www.gnu.org/software/hello/manual/; + license = "GPLv3+"; +}; + + + + +Meta-attributes are not passed to the builder of the package. +Thus, a change to a meta-attribute doesn’t trigger a recompilation of +the package. The value of a meta-attribute must a string. + +The meta-attributes of a package can be queried from the +command-line using nix-env: + + +$ nix-env -qa hello --meta --xml +<?xml version='1.0' encoding='utf-8'?> +<items> + <item attrPath="hello" name="hello-2.3" system="i686-linux"> + <meta name="description" value="A program that produces a familiar, friendly greeting" /> + <meta name="homepage" value="http://www.gnu.org/software/hello/manual/" /> + <meta name="license" value="GPLv3+" /> + <meta name="longDescription" value="GNU Hello is a program that prints &quot;Hello, world!&quot; when you run it.&#xA;It is fully customizable.&#xA;" /> + </item> +</items> + + +nix-env knows about the +description field specifically: + + +$ nix-env -qa hello --description +hello-2.3 A program that produces a familiar, friendly greeting + + + + + +
Standard meta-attributes + +The following meta-attributes have a standard +interpretation: + + + + + description + A short (one-line) description of the package. + Don’t include a period at the end. This is shown by + nix-env -q --description and also on the + Nixpkgs release pages. Example: "A program that produces + a familiar, friendly greeting" + + + + longDescription + An arbitrarily long description of the + package. + + + + homepage + The package’s homepage. Example: + http://www.gnu.org/software/hello/manual/ + + + + license + The license for the package. See below for the + allowed values. + + + + priority + The priority of the package, + used by nix-env to resolve file name conflicts + between packages. See the Nix manual page for + nix-env for details. Example: + "10" (a low-priority + package). + + + + + +
+ + +
Licenses + +This is just a first attempt at standardising the license +attribute. + +The meta.license attribute must be one of the +following: + + + + + GPL + GNU General Public License; version not + specified. + + + + GPLv2 + GNU General Public License, version + 2. + + + + GPLv2+ + GNU General Public License, version + 2 or higher. + + + + GPLv3 + GNU General Public License, version + 3. + + + + GPLv3+ + GNU General Public License, version + 3 or higher. + + + + free + Catch-all for free software licenses not listed + above. + + + + free-copyleft + Catch-all for free, copyleft software licenses not + listed above. + + + + unfree-redistributable + Unfree package that can be redistributed in binary + form. That is, it’s legal to redistribute the + output of the derivation. This means that + the package can be included in the Nixpkgs + channel. + + Sometimes proprietary software can only be redistributed + unmodified. Make sure the builder doesn’t actually modify the + original binaries; otherwise we’re breaking the license. For + instance, the NVIDIA X11 drivers can be redistributed unmodified, + but our builder applies patchelf to make them + work. Thus, its license is unfree and it + cannot be included in the Nixpkgs channel. + + + + unfree + Unfree package that cannot be redistributed. You + can build it yourself, but you cannot redistribute the output of + the derivation. Thus it cannot be included in the Nixpkgs + channel. + + + + unfree-redistributable-firmware + This package supplies unfree, redistributable + firmware. This is a separate value from + unfree-redistributable because not everybody + cares whether firmware is free. + + + + + + + +
+ + +
diff --git a/pkgs/applications/audio/flac/default.nix b/pkgs/applications/audio/flac/default.nix index 6095e59fa07a..ad9d3356cdaf 100644 --- a/pkgs/applications/audio/flac/default.nix +++ b/pkgs/applications/audio/flac/default.nix @@ -1,19 +1,16 @@ -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]; - meta = { - homepage = http://flac.sourceforge.net; - }; - }; -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"; }) ] -] +{stdenv, fetchurl, libogg}: + +stdenv.mkDerivation rec { + name = "flac-1.2.1"; + + src = fetchurl { + url = mirror://sourceforge/flac/flac-1.2.1.tar.gz; + sha256 = "1pry5lgzfg57pga1zbazzdd55fkgk3v5qy4axvrbny5lrr5s8dcn"; + }; + + buildInputs = [libogg]; + + meta = { + homepage = http://flac.sourceforge.net; + }; +} diff --git a/pkgs/applications/editors/emacs-modes/eieio/default.nix b/pkgs/applications/editors/emacs-modes/eieio/default.nix new file mode 100644 index 000000000000..bbe4c6085acb --- /dev/null +++ b/pkgs/applications/editors/emacs-modes/eieio/default.nix @@ -0,0 +1,38 @@ +{ fetchurl, stdenv, emacs }: + +stdenv.mkDerivation rec { + name = "eieio-0.17"; + + src = fetchurl { + url = "mirror://sourceforge/cedet/${name}.tar.gz"; + sha256 = "0n31z9d47ar10g9xrnzz3nl4pmixw1nkk0kpxaillls7xvjd1zy2"; + }; + + buildInputs = [ emacs ]; + + doCheck = false; + checkPhase = "make test"; + + installPhase = '' + ensureDir "$out/share/emacs/site-lisp" + cp -v *.el *.elc "$out/share/emacs/site-lisp" + chmod a-x "$out/share/emacs/site-lisp/"* + + ensureDir "$out/share/info" + cp -v *.info* "$out/share/info" + ''; + + meta = { + description = "EIEIO: Enhanced Implementation of Emacs Interpreted Objects"; + + longDescription = '' + EIEIO is a package which implements a CLOS subset for Emacs. It + includes examples which can draw simple tree graphs, and bar + charts. + ''; + + license = "GPLv2+"; + + homepage = http://cedet.sourceforge.net/; + }; +} diff --git a/pkgs/applications/editors/emacs-modes/semantic/default.nix b/pkgs/applications/editors/emacs-modes/semantic/default.nix new file mode 100644 index 000000000000..dfb1902c1c24 --- /dev/null +++ b/pkgs/applications/editors/emacs-modes/semantic/default.nix @@ -0,0 +1,50 @@ +{ fetchurl, stdenv, emacs, eieio }: + +stdenv.mkDerivation rec { + name = "semantic-1.4.4"; + + src = fetchurl { + url = "mirror://sourceforge/cedet/${name}.tar.gz"; + sha256 = "0j50dqdy5bl35vqfbgxp93grs11llg9i4398044br73lvvif9n5f"; + }; + + buildInputs = [ emacs eieio ]; + + doCheck = true; + checkPhase = "make Tests"; + + preConfigure = '' + sed -i "Makefile" -es'|^LOADPATH[[:blank:]]*=.*$|LOADPATH = ${eieio}/share/emacs/site-lisp|g' + ''; + + installPhase = '' + ensureDir "$out/share/emacs/site-lisp" + cp -v *.el *.elc "$out/share/emacs/site-lisp" + chmod a-x "$out/share/emacs/site-lisp/"* + + ensureDir "$out/share/info" + cp -v *.info* "$out/share/info" + ''; + + meta = { + description = "Semantic, infrastructure for parser based text analysis in Emacs"; + + longDescription = '' + Semantic is an infrastructure for parser based text analysis in + Emacs. It is a lexer, parser-generator, and parser. It is + written in Emacs Lisp and is customized to the way Emacs thinks + about language files, and is optimized to use Emacs' parsing + capabilities. + + Semantic's goal is to provide an intermediate API for authors of + language agnostic tools who want to deal with languages in a + generic way. It also provides a simple way for Mode Authors who + are experts in their language, to provide a parser for those + tool authors, without knowing anything about those tools. + ''; + + license = "GPLv2+"; + + homepage = http://cedet.sourceforge.net/; + }; +} diff --git a/pkgs/applications/editors/emacs-unicode/builder.sh b/pkgs/applications/editors/emacs-unicode/builder.sh index 03dc2ac70beb..953965716b70 100644 --- a/pkgs/applications/editors/emacs-unicode/builder.sh +++ b/pkgs/applications/editors/emacs-unicode/builder.sh @@ -12,7 +12,7 @@ preConfigure() { --replace /usr/lib/crtn.o $libc/lib/crtn.o done - for i in Makefile.in ./src/Makefile.in ./lib-src/Makefile.in ./leim/Makefile.in ./admin/unidata/Makefile; do + for i in Makefile.in ./src/Makefile.in ./lib-src/Makefile.in ./leim/Makefile.in; do substituteInPlace $i --replace /bin/pwd pwd done } diff --git a/pkgs/applications/editors/emacs-unicode/default.nix b/pkgs/applications/editors/emacs-unicode/default.nix index 7a0895b10318..169fe6e0b304 100644 --- a/pkgs/applications/editors/emacs-unicode/default.nix +++ b/pkgs/applications/editors/emacs-unicode/default.nix @@ -5,7 +5,7 @@ , xftSupport ? false , stdenv, fetchurl, ncurses, x11, libXaw ? null, libXpm ? null, Xaw3d ? null , pkgconfig ? null, gtk ? null, libXft ? null -, libpng, libjpeg, libungif, libtiff +, libpng, libjpeg, libungif, libtiff, texinfo }: assert xawSupport -> libXaw != null; @@ -14,14 +14,15 @@ assert xaw3dSupport -> Xaw3d != null; assert gtkGUI -> pkgconfig != null && gtk != null; assert xftSupport -> libXft != null && libpng != null; # libpng = probably a bug +let date = "20080228"; in stdenv.mkDerivation { - name = "emacs-snapshot-23.0.0.1-pre20070705"; + name = "emacs-snapshot-23-${date}"; builder = ./builder.sh; src = fetchurl { - url = http://debs.peadrop.com/pool/edgy/backports/emacs-snapshot_20070705.orig.tar.gz; - sha256 = "1blybacpsxha2v24kj482wl3g1z93rwddfc8rsqsk6dr6f5kdj5q"; + url = "http://ppa.launchpad.net/avassalotti/ubuntu/pool/main/e/emacs-snapshot/emacs-snapshot_${date}.orig.tar.gz"; + sha256 = "1cix1qjrynidvdyww3g8fm1wyggc82qjxbfbv3rx630szm1v6bm7"; }; # patches = [ @@ -29,7 +30,7 @@ stdenv.mkDerivation { # ]; buildInputs = [ - ncurses x11 + ncurses x11 texinfo (if xawSupport then libXaw else null) (if xpmSupport then libXpm else null) (if xaw3dSupport then Xaw3d else null) @@ -39,12 +40,12 @@ stdenv.mkDerivation { ++ (if xftSupport then [libXft] else []); configureFlags = " - ${if gtkGUI then "--with-gtk --enable-font-backend --with-xft" else ""} + ${if gtkGUI then "--with-x-toolkit=gtk --enable-font-backend --with-xft" else ""} "; meta = { description = "Emacs with Unicode, GTK and Xft support (23.x alpha)"; homepage = http://www.emacswiki.org/cgi-bin/wiki/XftGnuEmacs; - license = "GPL"; + license = "GPLv3+"; }; } diff --git a/pkgs/applications/editors/vim/configurable.nix b/pkgs/applications/editors/vim/configurable.nix index 0eac7ea5979f..b958eb6b8129 100644 --- a/pkgs/applications/editors/vim/configurable.nix +++ b/pkgs/applications/editors/vim/configurable.nix @@ -12,10 +12,10 @@ composableDerivation { sha256 = "11hxkb6r2550c4n13nwr0d8afvh30qjyr5c2hw16zgay43rb0kci"; }; - cfgOption = "--enable-gui=auto --with-features=${args.features}"; + configureFlags = ["--enable-gui=auto" "--with-features=${args.features}"]; buildInputs = [ncurses pkgconfig] - ++ [ libX11 libXext libSM libXpm libXt libXaw libXau libXmu ]; + ++ [ gtk libX11 libXext libSM libXpm libXt libXaw libXau libXmu ]; # most interpreters aren't tested yet.. (see python for example how to do it) flags = {} @@ -23,10 +23,10 @@ composableDerivation { // edf { name = "xsmp"; } #Disable XSMP session management // edf { name = "xsmp_interact"; } #Disable XSMP interaction // edf { name = "mzscheme"; } #Include MzScheme interpreter. - // edf { name = "perl"; } #Include Perl interpreter. + // edf { name = "perl"; feat = "perlinterp"; enable = { buildInputs = [perl]; };} #Include Perl interpreter. // edf { name = "python"; feat = "pythoninterp"; enable = { buildInputs = [python]; }; } #Include Python interpreter. - // edf { name = "tcl"; } #Include Tcl interpreter. - // edf { name = "ruby"; } #Include Ruby interpreter. + // edf { name = "tcl"; enable = { buildInputs = [tcl]; }; } #Include Tcl interpreter. + // edf { name = "ruby"; feat = "rubyinterp"; enable = { buildInputs = [ruby]; };} #Include Ruby interpreter. // edf { name = "cscope"; } #Include cscope interface. // edf { name = "workshop"; } #Include Sun Visual Workshop support. // edf { name = "netbeans"; } #Disable NetBeans integration support. diff --git a/pkgs/applications/graphics/comical/default.nix b/pkgs/applications/graphics/comical/default.nix new file mode 100644 index 000000000000..db6f57468256 --- /dev/null +++ b/pkgs/applications/graphics/comical/default.nix @@ -0,0 +1,23 @@ +{stdenv, fetchurl, wxGTK, utillinux, zlib }: + +stdenv.mkDerivation { + name = "comical-0.8"; + src = fetchurl { + url = mirror://sourceforge/comical/comical-0.8.tar.gz; + sha256 = "0b6527cc06b25a937041f1eb248d0fd881cf055362097036b939817f785ab85e"; + }; + buildInputs = [ wxGTK utillinux zlib ]; + patchPhase = '' + sed -i -e 's@"zlib\\.h"@@' unzip/unzip.h + sed -i -e 's@/usr/local@'$out@ \ + -e 's@-lminiunzip@-lminiunzip -lz@' Makefile + ''; + + installPhase = "mkdir -p $out/bin ; make install"; + + meta = { + description = "Viewer of CBR and CBZ files, often used to store scanned comics"; + homepage = http://comical.sourceforge.net/; + license = "GPLv2+"; + }; +} diff --git a/pkgs/applications/graphics/gimp/default.nix b/pkgs/applications/graphics/gimp/default.nix index 2c0e909caeab..985701967b0e 100644 --- a/pkgs/applications/graphics/gimp/default.nix +++ b/pkgs/applications/graphics/gimp/default.nix @@ -4,11 +4,11 @@ }: stdenv.mkDerivation { - name = "gimp-2.6.3"; + name = "gimp-2.6.4"; src = fetchurl { - url = ftp://ftp.gtk.org/pub/gimp/v2.6/gimp-2.6.3.tar.bz2; - sha256 = "1vvixi4336pjwjfx1p803jb3c12lk84adinaqvbpqdqx8xrd5r08"; + url = ftp://ftp.gtk.org/pub/gimp/v2.6/gimp-2.6.4.tar.bz2; + sha256 = "1qlpszdaskh575xjibkxvvqxmgp8j7v1i1z2dnzz6gazni2pmll6"; }; buildInputs = [ diff --git a/pkgs/applications/graphics/xaos/default.nix b/pkgs/applications/graphics/xaos/default.nix new file mode 100644 index 000000000000..3ee0ba8db069 --- /dev/null +++ b/pkgs/applications/graphics/xaos/default.nix @@ -0,0 +1,32 @@ +a : +let + fetchurl = a.fetchurl; + + version = a.lib.getAttr ["version"] "3.4" a; + buildInputs = with a; [ + aalib gsl libpng libX11 xproto libXext xextproto + libXt zlib gettext intltool perl + ]; +in +rec { + src = fetchurl { + url = "http://prdownloads.sourceforge.net/xaos/XaoS-${version}.tar.gz"; + sha256 = "004cdb0xv14shyixs79bf95s52s7aidr5bqfn9wb49gpasrsknrc"; + }; + + inherit buildInputs; + configureFlags = []; + + /* doConfigure should be removed if not needed */ + phaseNames = ["preConfigure" "doConfigure" "doMakeInstall"]; + + preConfigure = a.FullDepEntry ('' + sed -e s@/usr/@"$out/"@g -i configure $(find . -name 'Makefile*') + ensureDir $out/share/locale + '') ["doUnpack" "minInit" "defEnsureDir"]; + + name = "xaos-" + version; + meta = { + description = "XaoS - fractal viewer"; + }; +} diff --git a/pkgs/applications/misc/thinking-rock/default.nix b/pkgs/applications/misc/thinking-rock/default.nix new file mode 100644 index 000000000000..721f3f4e74fc --- /dev/null +++ b/pkgs/applications/misc/thinking-rock/default.nix @@ -0,0 +1,38 @@ +args: +args.stdenv.mkDerivation { + name = "thinkingrock-2.0.1-binary"; + + src = args.fetchurl { + url = mirror://sourceforge.net/thinkingrock/tr-2.0.1.tar.gz; + sha256 = "1fsanxh0li8yqsspagx1w1ykmvfnm6h44i6gd02v05abx8q25jk1"; + }; + + /* it would be a really bad idea to put thinkingrock tr executable in PATH! + the tr.sh script does use the coreutils tr itself + That's why I've renamed the wrapper and called it thinkingrock + However you may not rename the bin/tr script cause it will notice and throw an + "java.lang.IllegalArgumentException: Malformed branding token: thinkingrock" + exception. I hope that's fine + */ + + buildPhase = '' + # only keep /bin/tr + ls -1 bin/* | grep -ve 'bin/tr''$' | xargs rm + # don't keep the other .exe file either + find . -iname "*.exe" | xargs -n1 rm + ensureDir $out/{nix-support/tr-files,bin} + cp -r . $out/nix-support/tr-files + cat >> $out/bin/thinkingrock << EOF + #!/bin/sh + exec $out/nix-support/tr-files/bin/tr "$@" + EOF + chmod +x $out/bin/thinkingrock + ''; + installPhase = ":"; + + meta = { + description = "task managing system"; + homepage = http://www.thinkingrock.com.au/; + license = "CDDL"; # Common Development and Distribution License + }; +} diff --git a/pkgs/applications/networking/browsers/firefox-3/default.nix b/pkgs/applications/networking/browsers/firefox-3/default.nix index 4c89505bb94d..104e0000811d 100644 --- a/pkgs/applications/networking/browsers/firefox-3/default.nix +++ b/pkgs/applications/networking/browsers/firefox-3/default.nix @@ -11,12 +11,12 @@ }: stdenv.mkDerivation { - name = "firefox-3.0.5"; + name = "firefox-3.0.6"; src = fetchurl { # Don't forget to update xulrunner.nix as well! - url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.5/source/firefox-3.0.5-source.tar.bz2; - sha1 = "f934e073efaad3d4dde847c8491fa9529564d5d2"; + url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.6/source/firefox-3.0.6-source.tar.bz2; + sha1 = "e2845c07b507308664f6f39086a050b2773382fb"; }; buildInputs = [ diff --git a/pkgs/applications/networking/browsers/firefox-3/xulrunner.nix b/pkgs/applications/networking/browsers/firefox-3/xulrunner.nix index 5dede1b723f8..8deb54829e10 100644 --- a/pkgs/applications/networking/browsers/firefox-3/xulrunner.nix +++ b/pkgs/applications/networking/browsers/firefox-3/xulrunner.nix @@ -11,7 +11,7 @@ let - version = "1.9.0.5"; # this attribute is used by other packages + version = "1.9.0.6"; # this attribute is used by other packages in @@ -19,8 +19,8 @@ stdenv.mkDerivation { name = "xulrunner-${version}"; src = fetchurl { - url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.5/source/firefox-3.0.5-source.tar.bz2; - sha1 = "f934e073efaad3d4dde847c8491fa9529564d5d2"; + url = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.6/source/firefox-3.0.6-source.tar.bz2; + sha1 = "e2845c07b507308664f6f39086a050b2773382fb"; }; buildInputs = [ diff --git a/pkgs/applications/networking/browsers/icecat-3/default.nix b/pkgs/applications/networking/browsers/icecat-3/default.nix index cd786c2b014c..39ce47ef0660 100644 --- a/pkgs/applications/networking/browsers/icecat-3/default.nix +++ b/pkgs/applications/networking/browsers/icecat-3/default.nix @@ -1,28 +1,25 @@ -{ stdenv, fetchurl, lzma, pkgconfig, gtk, pango, perl, python, zip, libIDL +{ stdenv, fetchurl, pkgconfig, gtk, pango, perl, python, zip, libIDL , libjpeg, libpng, zlib, cairo, dbus, dbus_glib, bzip2, xlibs , gnomevfs, libgnomeui , freetype, fontconfig , application ? "browser" }: -let version = "3.0.5-g1"; in +let version = "3.0.6-g1"; in stdenv.mkDerivation { name = "icecat-${version}"; src = fetchurl { - url = "mirror://gnu/gnuzilla/${version}/icecat-${version}.tar.lzma"; - sha256 = "15s71zjwiqpaqsmjzk5kxwamxzkb3p7172dbazqyxmgvca9yw8bs"; + url = "mirror://gnu/gnuzilla/${version}/icecat-${version}.tar.bz2"; + sha256 = "0lcxvlviwgaj9w6ywn0656a2y3qdxdlw0mf5f9ljdd9jpw4fxjih"; }; buildInputs = [ - lzma libgnomeui gnomevfs pkgconfig gtk perl zip libIDL libjpeg libpng zlib cairo bzip2 python dbus dbus_glib pango freetype fontconfig xlibs.libXi xlibs.libX11 xlibs.libXrender xlibs.libXft xlibs.libXt ]; - unpackCmd = "lzma -d < $src | tar xv"; - patches = [ ./skip-gre-registration.patch ]; configureFlags = [ diff --git a/pkgs/applications/networking/browsers/mozilla-plugins/mozplugger/default.nix b/pkgs/applications/networking/browsers/mozilla-plugins/mozplugger/default.nix new file mode 100644 index 000000000000..80a95e075357 --- /dev/null +++ b/pkgs/applications/networking/browsers/mozilla-plugins/mozplugger/default.nix @@ -0,0 +1,36 @@ +a : +let + fetchurl = a.fetchurl; + + version = a.lib.getAttr ["version"] "1.12.0" a; + buildInputs = with a; [ + firefox libX11 xproto + ]; +in +rec { + src = fetchurl { + url = "http://mozplugger.mozdev.org/files/mozplugger-${version}.tar.gz"; + sha256 = "1vpggfmbv4h3srk80rgidd020i03hrkpb7cfxkwagkcd0zcal4hk"; + }; + + inherit buildInputs; + configureFlags = []; + makeFlags = ["linux" "prefix=" "root=$out"]; + + preBuild = a.FullDepEntry('' + sed -e s@/usr/@"$out/"@g -i mozplugger.c + '') ["doUnpack" "minInit"]; + + postInstall = a.FullDepEntry('' + ensureDir $out/share/${name}/plugin + ln -s $out/lib/mozilla/plugins/mozplugger.so $out/share/${name}/plugin + '') ["doMakeInstall" "minInit" "defEnsureDir"]; + + /* doConfigure should be removed if not needed */ + phaseNames = ["preBuild" "doMakeInstall" "postInstall"]; + + name = "mozplugger-" + version; + meta = { + description = "Mozilla plugin for launching external program for handling in-page objects"; + }; +} diff --git a/pkgs/applications/networking/instant-messengers/bitlbee/default.nix b/pkgs/applications/networking/instant-messengers/bitlbee/default.nix index 2dfce27d313c..23ae06841381 100644 --- a/pkgs/applications/networking/instant-messengers/bitlbee/default.nix +++ b/pkgs/applications/networking/instant-messengers/bitlbee/default.nix @@ -1,17 +1,30 @@ -args: with args; +{ fetchurl, stdenv, gnutls, glib, pkgconfig }: stdenv.mkDerivation rec { - name = "bitlbee-1.2.1"; + name = "bitlbee-1.2.3"; + src = fetchurl { url = "mirror://bitlbee/src/" + name + ".tar.gz"; - sha256 = "01ld349f5k89lk6j7xn4sdbbf1577kp845vmnj3sfaza9s1fhm26"; + sha256 = "1qj5cx0lqhg6dy2gdjb05ap963r84rv1b96iz23c97c2ihc31fqc"; }; buildInputs = [ gnutls glib pkgconfig ]; meta = { - description = ''BitlBee, an IRC to other chat networks gateway.''; + description = "BitlBee, an IRC to other chat networks gateway"; + + longDescription = '' + BitlBee brings IM (instant messaging) to IRC clients. It's a + great solution for people who have an IRC client running all the + time and don't want to run an additional MSN/AIM/whatever + client. + + BitlBee currently supports the following IM networks/protocols: + XMPP/Jabber (including Google Talk), MSN Messenger, Yahoo! + Messenger, AIM and ICQ. + ''; + homepage = http://www.bitlbee.org/; - license = "GPL"; + license = "GPLv2+"; }; } diff --git a/pkgs/applications/networking/instant-messengers/carrier/2.5.0.nix b/pkgs/applications/networking/instant-messengers/carrier/2.5.0.nix new file mode 100644 index 000000000000..db120924a9cb --- /dev/null +++ b/pkgs/applications/networking/instant-messengers/carrier/2.5.0.nix @@ -0,0 +1,54 @@ +args : with args; +/* + arguments: all buildInputs + optional: purple2Source: purple-2 source - place to copy libpurple from + (to use a fresher pidgin build) +*/ +let + externalPurple2 = (lib.getAttr ["purple2Source"] null args) != null; +in +rec { + src = fetchurl { + url = http://downloads.sourceforge.net/funpidgin/carrier-2.5.0.tar.bz2; + sha256 = "0m80s7hnvz5vc2dy3xiy1zfb6incmb7p28zahzxdif2vz44riz28"; + }; + + buildInputs = [gtkspell aspell + GStreamer startupnotification + libxml2 openssl nss + libXScrnSaver ncurses scrnsaverproto + libX11 xproto kbproto GConf avahi + dbus dbus_glib glib python + autoconf libtool automake]; + + propagatedBuildInputs = [ + pkgconfig gtk perl perlXMLParser gettext + ]; + + 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" + + " --enable-screensaver --disable-meanwhile --disable-nm --disable-tcl"; + + preBuild = FullDepEntry ('' + export echo=echo + '') []; + + /* doConfigure should be specified separately */ + phaseNames = ["doConfigure" "preBuild" "doMakeInstall"] + ++ (lib.optional externalPurple2 "postInstall") + ; + + name = "carrier-" + version; + meta = { + description = "Carrier - PidginIM GUI fork with user-friendly development model"; + homepage = http://funpidgin.sf.net; + }; +} // (if externalPurple2 then { + postInstall = FullDepEntry ('' + ensureDir $out/lib/purple-2 + cp ${args.purple2Source}/lib/purple-2/* $out/lib/purple-2/ + '') ["minInit" "defEnsureDir"]; } + else {}) + + diff --git a/pkgs/applications/networking/sniffers/wireshark/default.nix b/pkgs/applications/networking/sniffers/wireshark/default.nix index 1dbb21bb8fce..25762db43ca4 100644 --- a/pkgs/applications/networking/sniffers/wireshark/default.nix +++ b/pkgs/applications/networking/sniffers/wireshark/default.nix @@ -1,10 +1,11 @@ {stdenv, fetchurl, perl, pkgconfig, gtk, libpcap, flex, bison}: stdenv.mkDerivation { - name = "wireshark-1.0.3"; + name = "wireshark-1.1.2"; src = fetchurl { - url = http://www.wireshark.org/download/src/wireshark-1.0.3.tar.bz2; - sha256 = "1wmkbq0rgy7rz8mqggyay98z4qd3s9bnv5lmvx1r55sndcq6z2bp"; + url = http://www.wireshark.org/download/src/wireshark-1.1.2.tar.gz; + sha256 = "0fsf84czzxg0gpyf525lx2c9i8la26fkhqv4visz5bz2r0911yd4"; }; + configureFlags = "--with-pcap=${libpcap}"; buildInputs = [perl pkgconfig gtk libpcap flex bison]; } diff --git a/pkgs/applications/networking/sync/rsync/default.nix b/pkgs/applications/networking/sync/rsync/default.nix index cba78189789f..cf82b517f7e4 100644 --- a/pkgs/applications/networking/sync/rsync/default.nix +++ b/pkgs/applications/networking/sync/rsync/default.nix @@ -1,9 +1,21 @@ -{stdenv, fetchurl}: +{ stdenv, fetchurl +, enableACLs ? true, acl ? null +}: + +assert enableACLs -> acl != null; stdenv.mkDerivation { name = "rsync-3.0.5"; + src = fetchurl { url = http://rsync.samba.org/ftp/rsync/src/rsync-3.0.5.tar.gz; sha256 = "1js36yv5s9dic524s7jczqk5myzp67bp24rqhbnikg6lh6pj1b20"; }; + + buildInputs = stdenv.lib.optional enableACLs acl; + + meta = { + homepage = http://samba.anu.edu.au/rsync/; + description = "A fast incremental file transfer utility"; + }; } diff --git a/pkgs/applications/science/electronics/alliance/default.nix b/pkgs/applications/science/electronics/alliance/default.nix new file mode 100644 index 000000000000..90fd5901cac7 --- /dev/null +++ b/pkgs/applications/science/electronics/alliance/default.nix @@ -0,0 +1,23 @@ +{stdenv, fetchurl, xproto, motif, libX11, libXt, libXpm, bison, flex}: + +stdenv.mkDerivation { + name = "alliance-5.0-20070718"; + + src = fetchurl { + url = http://www-asim.lip6.fr/pub/alliance/distribution/5.0/alliance-5.0-20070718.tar.gz; + sha256 = "4e17c8f9f4d344061166856d47e58527c6ae870fda0c73b5ba0200967d23af9f"; + }; + + buildInputs = [ xproto motif xproto libX11 libXt libXpm bison flex]; + + patchPhase = '' + sed -i -e \ + "s/private: static void operator delete/public: static void operator delete/" \ + nero/src/ADefs.h + ''; + + meta = { + description = "Complete set of free CAD tools and portable libraries for VLSI design."; + homepage = http://www-asim.lip6.fr/recherche/alliance/; + }; +} diff --git a/pkgs/desktops/kde-4.2/default.nix b/pkgs/desktops/kde-4.2/default.nix new file mode 100644 index 000000000000..b90e51635596 --- /dev/null +++ b/pkgs/desktops/kde-4.2/default.nix @@ -0,0 +1,36 @@ +{stdenv, fetchurl, cmake, qt4, xlibs, bzip2, libxml2, libxslt, perl, exiv2, aspell, +pthread_stubs, gst_all, xineLib, fam, log4cxx, cluceneCore, redland, avahi, jdk, +pcre, jasper, openexr, shared_mime_info, giflib}: + +rec { +### SUPPORT + automoc4 = import ./support/automoc4 { + inherit stdenv fetchurl cmake; + inherit qt4; + }; + + phonon = import ./support/phonon { + inherit stdenv fetchurl cmake; + inherit qt4 pthread_stubs gst_all xineLib; + inherit (xlibs) libXau libXdmcp; + inherit automoc4; + }; + + strigi = import ./support/strigi { + inherit stdenv fetchurl cmake perl; + inherit bzip2 qt4 libxml2 exiv2 fam log4cxx cluceneCore; + }; + + soprano = import ./support/soprano { + inherit stdenv fetchurl cmake; + inherit qt4 jdk cluceneCore redland; + }; + +### LIBS + kdelibs = import ./libs { + inherit stdenv fetchurl cmake perl; + inherit qt4 bzip2 pcre fam libxml2 libxslt shared_mime_info giflib jasper; + inherit openexr aspell avahi; + inherit automoc4 phonon strigi soprano; + }; +} diff --git a/pkgs/desktops/kde-4.2/libs/default.nix b/pkgs/desktops/kde-4.2/libs/default.nix new file mode 100644 index 000000000000..66248f78d99f --- /dev/null +++ b/pkgs/desktops/kde-4.2/libs/default.nix @@ -0,0 +1,15 @@ +{stdenv, fetchurl, cmake, perl, + qt4, bzip2, pcre, fam, libxml2, libxslt, shared_mime_info, giflib, jasper, + openexr, aspell, avahi, + automoc4, phonon, strigi, soprano}: + +stdenv.mkDerivation { + name = "kdelibs-4.2.0"; + src = fetchurl { + url = mirror://kde/stable/4.2.0/src/kdelibs-4.2.0.tar.bz2; + md5 = "2d830a922195fefe6e073111850247ac"; + }; + buildInputs = [ cmake perl qt4 stdenv.gcc.libc bzip2 pcre fam libxml2 libxslt + shared_mime_info giflib jasper openexr aspell avahi + automoc4 phonon strigi soprano ]; +} diff --git a/pkgs/desktops/kde-4.2/support/automoc4/default.nix b/pkgs/desktops/kde-4.2/support/automoc4/default.nix new file mode 100644 index 000000000000..8826396b1856 --- /dev/null +++ b/pkgs/desktops/kde-4.2/support/automoc4/default.nix @@ -0,0 +1,11 @@ +{stdenv, fetchurl, cmake, +qt4}: + +stdenv.mkDerivation { + name = "automoc4-0.9.88"; + src = fetchurl { + url = mirror://kde/stable/automoc4/0.9.88/automoc4-0.9.88.tar.bz2; + md5 = "91bf517cb940109180ecd07bc90c69ec"; + }; + buildInputs = [ cmake qt4 ]; +} diff --git a/pkgs/desktops/kde-4.2/support/phonon/default.nix b/pkgs/desktops/kde-4.2/support/phonon/default.nix new file mode 100644 index 000000000000..99b3403f992e --- /dev/null +++ b/pkgs/desktops/kde-4.2/support/phonon/default.nix @@ -0,0 +1,17 @@ +{stdenv, fetchurl, cmake, +libXau, libXdmcp, +qt4, pthread_stubs, +gst_all, xineLib, +automoc4}: + +stdenv.mkDerivation { + name = "phonon-4.3.0"; + src = fetchurl { + url = mirror://kde/stable/phonon/4.3.0/phonon-4.3.0.tar.bz2; + md5 = "f851219ec1fb4eadc7904f053b6b498d"; + }; + buildInputs = [ cmake + libXau libXdmcp + qt4 pthread_stubs gst_all.gstreamer gst_all.gstPluginsBase xineLib + automoc4 ]; +} diff --git a/pkgs/desktops/kde-4.2/support/soprano/default.nix b/pkgs/desktops/kde-4.2/support/soprano/default.nix new file mode 100644 index 000000000000..558c4fd66fb6 --- /dev/null +++ b/pkgs/desktops/kde-4.2/support/soprano/default.nix @@ -0,0 +1,11 @@ +{stdenv, fetchurl, cmake, qt4, jdk, cluceneCore, redland}: + +stdenv.mkDerivation { + name = "soprano-2.2.1"; + src = fetchurl { + url = mirror://sourceforge/soprano/soprano-2.2.1.tar.bz2; + md5 = "69688a71273e1e9389fc60e3085c695f"; + }; + JAVA_HOME=jdk; + buildInputs = [ cmake qt4 jdk cluceneCore redland ]; +} diff --git a/pkgs/desktops/kde-4.2/support/strigi/default.nix b/pkgs/desktops/kde-4.2/support/strigi/default.nix new file mode 100644 index 000000000000..85d7099d8a44 --- /dev/null +++ b/pkgs/desktops/kde-4.2/support/strigi/default.nix @@ -0,0 +1,13 @@ +{stdenv, fetchurl, cmake, perl, +bzip2, qt4, libxml2, exiv2, fam, log4cxx, cluceneCore}: + +stdenv.mkDerivation { + name = "strigi-0.6.4"; + src = fetchurl { + url = mirror://sourceforge/strigi/strigi-0.6.4.tar.bz2; + md5 = "324fd9606ac77765501717ff92c04f9a"; + }; + CLUCENE_HOME=cluceneCore; + buildInputs = [ cmake perl + bzip2 stdenv.gcc.libc qt4 libxml2 exiv2 fam log4cxx cluceneCore ]; +} diff --git a/pkgs/development/compilers/ocaml/default.nix b/pkgs/development/compilers/ocaml/default.nix index 837a685198bd..f3ef70b2a558 100644 --- a/pkgs/development/compilers/ocaml/default.nix +++ b/pkgs/development/compilers/ocaml/default.nix @@ -1,7 +1,8 @@ args: -args.stdenv.lib.listOfListsToAttrs [ - [ "3.08.0" (import ./3.08.0.nix args) ] - [ "3.09.1" (import ./3.09.1.nix args) ] - [ "3.10.0" (import ./3.10.0.nix args) ] - [ "default" (import ./3.09.1.nix args) ] + +builtins.listToAttrs [ + { name = "3.08.0"; value = import ./3.08.0.nix args; } + { name = "3.09.1"; value = import ./3.09.1.nix args; } + { name = "3.10.0"; value = import ./3.10.0.nix args; } + { name = "default"; value = import ./3.09.1.nix args; } ] diff --git a/pkgs/development/interpreters/python-new/2.5/default.nix b/pkgs/development/interpreters/python-new/2.5/default.nix index dfe86683b506..1c2f22f66bbc 100644 --- a/pkgs/development/interpreters/python-new/2.5/default.nix +++ b/pkgs/development/interpreters/python-new/2.5/default.nix @@ -124,7 +124,7 @@ in buildPhase = ''python setup.py $setupFlags build''; installPhase = ''python setup.py $setupFlags install --prefix=$out''; mergeAttrBy = { - setupFlags = lib.concatList; + setupFlags = lib.concat; }; }; @@ -219,8 +219,8 @@ in done ''; mergeAttrBy = { - phases = lib.concatList; - pySrcs = lib.concatList; + phases = lib.concat; + pySrcs = lib.concat; pyCheck = x : y : "${x}\n${y}"; }; } diff --git a/pkgs/development/libraries/acl/default.nix b/pkgs/development/libraries/acl/default.nix index bbba61c1de6e..342c07a1b3e6 100644 --- a/pkgs/development/libraries/acl/default.nix +++ b/pkgs/development/libraries/acl/default.nix @@ -4,10 +4,12 @@ stdenv.mkDerivation { name = "acl-2.2.47"; src = fetchurl { - url = ftp://oss.sgi.com/projects/xfs/cmd_tars/acl_2.2.47-1.tar.gz; + # The file cannot be downloaded from sgi.com. + #url = ftp://oss.sgi.com/projects/xfs/cmd_tars/acl_2.2.47-1.tar.gz; + url = "http://gentoo.chem.wisc.edu/gentoo/distfiles/acl_2.2.47-1.tar.gz"; sha256 = "1j39g62fki0iyji9s62slgwdfskpkqy7rmjlqcnmsvsnxbxhc294"; }; - + buildInputs = [gettext attr libtool]; configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ZIP=gzip ECHO=echo SED=sed AWK=gawk"; diff --git a/pkgs/development/libraries/attr/default.nix b/pkgs/development/libraries/attr/default.nix index af30d08d7d7e..5b8aa839cf87 100644 --- a/pkgs/development/libraries/attr/default.nix +++ b/pkgs/development/libraries/attr/default.nix @@ -4,13 +4,15 @@ stdenv.mkDerivation { name = "attr-2.4.41"; src = fetchurl { - url = ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_2.4.41-1.tar.gz; + # The file cannot be downloaded from sgi.com. + #url = ftp://oss.sgi.com/projects/xfs/cmd_tars/attr_2.4.41-1.tar.gz; + url = "http://gentoo.chem.wisc.edu/gentoo/distfiles/attr_2.4.41-1.tar.gz"; sha256 = "0dc286g8vr402aca6wg945sdm92bys8a142vrkwx6bkjz4bwz6gp"; }; buildInputs = [libtool gettext]; - + configureFlags = "MAKE=make LIBTOOL=libtool MSGFMT=msgfmt MSGMERGE=msgmerge XGETTEXT=xgettext ECHO=echo SED=sed AWK=gawk"; - + installTargets = "install install-lib install-dev"; } diff --git a/pkgs/development/libraries/boost/1.38.0.nix b/pkgs/development/libraries/boost/1.38.0.nix new file mode 100644 index 000000000000..1416e124471a --- /dev/null +++ b/pkgs/development/libraries/boost/1.38.0.nix @@ -0,0 +1,20 @@ +{ stdenv, fetchurl, icu, expat, zlib, bzip2, python, version }: + +assert version == "1.38.0"; + +stdenv.mkDerivation { + name = "boost-1.38.0"; + meta = { + homepage = "http://boost.org/"; + description = "Boost C++ Library Collection"; + license = "boost-license"; + }; + src = fetchurl { + url = "mirror://sourceforge/boost/boost_1_38_0.tar.bz2"; + sha256 = "0rk044s4m7l4sma6anml34vxcd9w0fzcy1cy7csbzynjyida9qry"; + }; + buildInputs = [icu expat zlib bzip2 python]; + preConfigure = + "sed -e 's@^BJAM_CONFIG=\"\"@BJAM_CONFIG=\"-sEXPAT_INCLUDE=${expat}/include -sEXPAT_LIBPATH=${expat}/lib --layout=system variant=debug,release threading=single,multi link=shared,static\"@g' -i configure"; + configureFlags = "--with-icu=${icu} --with-python=${python}"; +} diff --git a/pkgs/development/libraries/eventlog/default.nix b/pkgs/development/libraries/eventlog/default.nix new file mode 100644 index 000000000000..bed565a04379 --- /dev/null +++ b/pkgs/development/libraries/eventlog/default.nix @@ -0,0 +1,15 @@ +{ stdenv, fetchurl }: + +stdenv.mkDerivation { + name = "eventlog-0.2.9"; + src = fetchurl { + url = "http://www.balabit.com/downloads/files/eventlog/0.2/eventlog_0.2.9.tar.gz"; + sha256 = "1cairmv47b66blrxwrgf4qwabfflak9b1dwkiyxnc9rj5svnq50m"; + }; + + meta = { + description = "A new API to format and send structured log messages."; + homepage = "http://www.balabit.com/support/community/products/"; + license = "BSD"; + }; +} diff --git a/pkgs/development/libraries/libpcap/default.nix b/pkgs/development/libraries/libpcap/default.nix index 324615500fee..5dbbf010be84 100644 --- a/pkgs/development/libraries/libpcap/default.nix +++ b/pkgs/development/libraries/libpcap/default.nix @@ -1,16 +1,23 @@ {stdenv, fetchurl, flex, bison}: stdenv.mkDerivation rec { - name = "libpcap-0.9.4"; + name = "libpcap-1.0.0"; src = fetchurl { url = [ "mirror://tcpdump/release/${name}.tar.gz" "http://www.sfr-fresh.com/unix/misc/${name}.tar.gz" ]; - sha256 = "0q0cnn607kfa4y4rbz3glg5lfr8r08s8l08w8fwrr3d6njjzd71p"; + sha256 = "1h3kmj485qz1i08xs4sc3a0bmhs1rvq0h7gycs7paap2szhw8552"; }; buildInputs = [flex bison]; - configureFlags = " - ${if stdenv.system == "i686-linux" then "--with-pcap=linux" else ""} - "; + configureFlags = [ + "${if stdenv.system == "i686-linux" then "--with-pcap=linux" else ""}" + "--with-pcap=linux" + ]; + + preInstall = ''ensureDir $out/bin''; + patches = if stdenv.system == "i686-linux" + then [] + else [ ./libpcap_amd64.patch ]; + } diff --git a/pkgs/development/libraries/log4cxx/default.nix b/pkgs/development/libraries/log4cxx/default.nix index 63f32c05bc77..c7a66b22c51e 100644 --- a/pkgs/development/libraries/log4cxx/default.nix +++ b/pkgs/development/libraries/log4cxx/default.nix @@ -1,11 +1,11 @@ -args: with args; +{stdenv, fetchurl, autoconf, automake, libtool, libxml2, cppunit, boost, + apr, aprutil, db45, expat}: stdenv.mkDerivation { - name = "log4cxx-0.9.7"; - src = fetchurl { - url = http://archive.apache.org/dist/logging/log4cxx/log4cxx-0.9.7.tar.gz; - sha256 = "1ikyxd8jgf7b2cqjk5lidl7cffs114iiblaczaqbv5bm4vyb4hav"; - }; - buildInputs = [ autoconf automake libtool libxml2 cppunit boost ]; - patchPhase = "sh autogen.sh; sed -e 's/DOMConfigurator::subst/subst/' -i include/log4cxx/xml/domconfigurator.h"; + name = "log4cxx-0.10.0"; + src = fetchurl { + url = http://apache.mirrors.hoobly.com/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.tar.gz; + sha256 = "130cjafck1jlqv92mxbn47yhxd2ccwwnprk605c6lmm941i3kq0d"; + }; + buildInputs = [ autoconf automake libtool libxml2 cppunit boost apr aprutil db45 expat]; } diff --git a/pkgs/development/libraries/qt-4/default.nix b/pkgs/development/libraries/qt-4/default.nix index 09427e2f63b3..d8f8fec2bb51 100644 --- a/pkgs/development/libraries/qt-4/default.nix +++ b/pkgs/development/libraries/qt-4/default.nix @@ -1,13 +1,15 @@ args: with args; + stdenv.mkDerivation { - name = "qt-4.4.0"; + name = "qt-4.4.3"; src = fetchurl { - url = ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-4.4.0.tar.bz2; - sha256 = "871dc71c6c905212f2fea7e6598362114a3b6097c220b0b251f8d159ee7d706e"; + url = ftp://ftp.trolltech.com/qt/source/qt-x11-opensource-src-4.4.3.tar.bz2; + sha256 = "1nfdf1aj6vb7qyacsnjyjxrnaf44hz7vzykf6zra2znd87pglz51"; }; - setupHook = ./setup-hook.sh; + setupHook = ./setup-hook.sh; + propagatedBuildInputs = [ libXft libXrender @@ -37,14 +39,32 @@ stdenv.mkDerivation { glib libtiff ]; + prefixKey = "-prefix "; - configureFlags = " + + configureFlags = '' -v -no-separate-debug-info -release -system-zlib -system-libpng -system-libjpeg -fast -qt-gif -confirm-license -opengl -xrender -xrandr -xinerama -xcursor -qt-sql-mysql -qdbus -cups -glib -xfixes - -fontconfig -I${freetype}/include/freetype2"; + -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 = '' + substituteInPlace configure --replace /bin/pwd pwd + sed -e 's@/usr@/FOO@' -i config.tests/*/*.test -i mkspecs/*/*.conf + ''; + + # Remove the documentation: it takes up >= 130 MB, which is more + # than half of the installed size. Ideally we should put this in a + # separate package (as well as the Qt Designer). + postInstall = '' + rm -rf $out/share/doc + ''; + + meta = { + homepage = http://www.qtsoftware.com/downloads/opensource/appdev/linux-x11-cpp; + description = "A cross-platform application framework for C++"; + }; } diff --git a/pkgs/development/libraries/qt-4/setup-hook.sh b/pkgs/development/libraries/qt-4/setup-hook.sh index c999124b8efa..36dfabb942c7 100644 --- a/pkgs/development/libraries/qt-4/setup-hook.sh +++ b/pkgs/development/libraries/qt-4/setup-hook.sh @@ -1,6 +1,7 @@ export QTDIR=@out@ + if [ -n $qt4BadIncludes ]; then - for d in @out@/include/*; do - export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$d"; - done; + for d in @out@/include/*; do + export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I$d"; + done; fi diff --git a/pkgs/development/libraries/vtk/default.nix b/pkgs/development/libraries/vtk/default.nix new file mode 100644 index 000000000000..cb9853ebbbc6 --- /dev/null +++ b/pkgs/development/libraries/vtk/default.nix @@ -0,0 +1,16 @@ +{stdenv, fetchurl, cmake, mesa, libX11, xproto, libXt }: + +stdenv.mkDerivation { + name = "vtk-5.2.1"; + src = fetchurl { + url = http://www.vtk.org/files/release/5.2/vtk-5.2.1.tar.gz; + sha256 = "c81521b3767a044745336212cbde500d6e97a1f8ba647bc590857e36f57003bb"; + }; + buildInputs = [ cmake mesa libX11 xproto libXt ]; + + meta = { + description = "Open source libraries for 3D computer graphics, image processing and visualization"; + homepage = http://www.vtk.org/; + license = "BSD"; + }; +} diff --git a/pkgs/development/perl-modules/Compress-Raw-Zlib/default.nix b/pkgs/development/perl-modules/Compress-Raw-Zlib/default.nix new file mode 100644 index 000000000000..e83ae68b9544 --- /dev/null +++ b/pkgs/development/perl-modules/Compress-Raw-Zlib/default.nix @@ -0,0 +1,20 @@ +{fetchurl, buildPerlPackage, zlib}: + +buildPerlPackage rec { + name = "Compress-Raw-Zlib-2.015"; + + src = fetchurl { + url = "mirror://cpan/authors/id/P/PM/PMQS/${name}.tar.gz"; + sha256 = "0g6kz73jxqjfln2pi500y7rr96mhad16hrp5wy6542fapamv4xcd"; + }; + + preConfigure = '' + cat > config.in <; } - applyAndFun = f : merge : x : assert (__isAttrs x || __isFunction x); - let takeFix = if (__isFunction x) then x else (attr: merge attr x); in - setAttrMerge "passthru" {} (fix (fixed : f (takeFix {inherit fixed;}))) - ( y : y // - { - fun = z : applyAndFun f merge (fixed: merge (takeFix fixed) z); - funMerge = z : applyAndFun f merge (fixed: let e = takeFix fixed; in merge e (merge e z)); - } ); - mergeOrApply = merge : x : y : if (__isFunction y) then y x else merge x y; - - # rec { # an example of how composedArgsAndFun can be used - # a = composedArgsAndFun (x : x) { a = ["2"]; meta = { d = "bar";}; }; - # # meta.d will be lost ! It's your task to preserve it (eg using a merge function) - # b = a.passthru.function { a = [ "3" ]; meta = { d2 = "bar2";}; }; - # # instead of passing/ overriding values you can use a merge function: - # c = b.passthru.function ( x: { a = x.a ++ ["4"]; }); # consider using (maybeAttr "a" [] x) - # } - # result: - # { - # a = { a = ["2"]; meta = { d = "bar"; }; passthru = { function = .. }; }; - # b = { a = ["3"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; }; - # c = { a = ["3" "4"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; }; - # # c2 is equal to c - # } - composedArgsAndFun = f: foldArgs defaultMerge f {}; - - # example a = pairMap (x : y : x + y) ["a" "b" "c" "d"]; - # result: ["ab" "cd"] - innerPairMap = acc: f: l: - if l == [] then acc else - innerPairMap (acc ++ [(f (head l)(head (tail l)))]) - 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 - # Haskell's foldr). - fold = op: nul: list: - if list == [] - then nul - else op (head list) (fold op nul (tail list)); - - # Haskell's fold - foldl = op: nul: list: - if list == [] - then nul - else fold op (op nul (head list)) (tail list); - - - # Concatenate a list of lists. - concatList = x : y : x ++ y; - concatLists = fold concatList []; - - - # Concatenate a list of strings. - concatStrings = - fold (x: y: x + y) ""; - - - # 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"]. - intersperse = separator: list: - if list == [] || tail list == [] - then list - else [(head list) separator] - ++ (intersperse separator (tail list)); - - toList = x : if (__isList x) then x else [x]; - - concatStringsSep = separator: list: - concatStrings (intersperse separator list); - - makeLibraryPath = paths: concatStringsSep ":" (map (path: path + "/lib") paths); - - - # Flatten the argument into a single list; that is, nested lists are - # spliced into the top-level lists. E.g., `flatten [1 [2 [3] 4] 5] - # == [1 2 3 4 5]' and `flatten 1 == [1]'. - flatten = x: - if isList x - then fold (x: y: (flatten x) ++ y) [] x - else [x]; - - - # Return an attribute from nested attribute sets. For instance ["x" - # "y"] applied to some set e returns e.x.y, if it exists. The - # default value is returned otherwise. - # comment: there is also builtins.getAttr ? (is there a better name for this function?) - getAttr = attrPath: default: e: - 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; - - # 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. - filter = pred: list: - fold (x: y: if pred x then [x] ++ y else y) [] list; - - - # Return true if `list' has an element `x': - elem = x: list: fold (a: bs: x == a || bs) false list; - - - # Find the sole element in the list matching the specified - # predicate, returns `default' if no such element exists, or - # `multiple' if there are multiple matching elements. - findSingle = pred: default: multiple: list: - let found = filter pred list; - in if found == [] then default - else if tail found != [] then multiple - 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; - - # much shorter implementations using map and fold (are lazy as well) - # which ones are better? - # true if all/ at least one element(s) satisfy f - # all = f : l : fold logicalAND true (map f l); - # any = f : l : fold logicalOR false (map f l); - - - # 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; - lenExt = stringLength ext; - in !(lessThan lenFileName lenExt) && - 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" && (baseName == ".svn" || baseName == "CVS")) || - # Filter out backup files. - (hasSuffix "~" baseName) - ); - 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'). - 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 []; - - optionalString = cond: string: if cond then string else ""; - - # Return the second argument if the first one is true or the empty version - # of the second argument. - ifEnable = cond: val: - if cond then val - else if builtins.isList val then [] - else if builtins.isAttrs val then {} - # else if builtins.isString val then "" - else if (val == true || val == false) then false - else null; - - # Return a list of integers from `first' up to and including `last'. - range = first: last: - if builtins.lessThan last first - then [] - else [first] ++ range (builtins.add first 1) last; - - - # Return true only if there is an attribute and it is true. - checkFlag = attrSet: name: - if (name == "true") then true else - if (name == "false") then false else - if (isInList (getAttr ["flags"] [] attrSet) name) then true else - getAttr [name] false attrSet ; - - - logicalOR = x: y: x || y; - logicalAND = x: y: x && y; - - - # Input : attrSet, [ [name default] ... ], name - # Output : its value or default. - getValue = attrSet: argList: name: - ( getAttr [name] (if checkFlag attrSet name then true else - if argList == [] then null else - let x = builtins.head argList; in - if (head x) == name then - (head (tail x)) - else (getValue attrSet - (tail argList) name)) attrSet ); - - - # Input : attrSet, [[name default] ...], [ [flagname reqs..] ... ] - # Output : are reqs satisfied? It's asserted. - checkReqs = attrSet : argList : condList : - ( - fold logicalAND true - (map (x: let name = (head x) ; in - - ((checkFlag attrSet name) -> - (fold logicalAND true - (map (y: let val=(getValue attrSet argList y); in - (val!=null) && (val!=false)) - (tail x))))) condList)) ; - - - isInList = list: x: - if (list == []) then false else - if (x == (head list)) then true else - isInList (tail list) x; - - - uniqList = {inputList, outputList ? []}: - if (inputList == []) then outputList else - let x=head inputList; - newOutputList = outputList ++ - (if (isInList outputList x) then [] else [x]); - 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 - if checker (head list) then - condConcat - (name + (head (tail list))) - (tail (tail list)) - checker - else condConcat - name (tail (tail list)) checker; - - # Merge sets of attributes and use the function f to merge - # attributes values. - zip = f: sets: - builtins.listToAttrs (map (name: { - inherit name; - value = - f name - (map (__getAttr name) - (filter (__hasAttr name) sets)); - }) (concatMap builtins.attrNames sets)); - - # divide a list in two depending on the evaluation of a predicate. - partition = pred: - fold (h: t: - if pred h - then { right = [h] ++ t.right; wrong = t.wrong; } - else { right = t.right; wrong = [h] ++ t.wrong; } - ) { right = []; wrong = []; }; - - # Take a function and evaluate it with its own returned value. - fix = f: - (rec { result = f result; }).result; - - # flatten a list of elements by following the properties of the elements. - # next : return the list of following elements. - # seen : lists of elements already visited. - # default: result if 'x' is empty. - # x : list of values that have to be processed. - uniqFlatten = next: seen: default: x: - if x == [] - then default - else - let h = head x; t = tail x; n = next h; in - if elem h seen - then uniqFlatten next seen default t - else uniqFlatten next (seen ++ [h]) (default ++ [h]) (n ++ t) - ; - - /* If. ThenElse. Always. */ - - # create "if" statement that can be dealyed on sets until a "then-else" or - # "always" set is reached. When an always set is reached the condition - # is ignore. - - isIf = attrs: (typeOf attrs) == "if"; - mkIf = condition: thenelse: - if isIf thenelse then - mkIf (condition && thenelse.condition) thenelse.thenelse - else { - _type = "if"; - inherit condition thenelse; - }; - - - isNotdef = attrs: (typeOf attrs) == "notdef"; - mkNotdef = {_type = "notdef";}; - - - isThenElse = attrs: (typeOf attrs) == "then-else"; - mkThenElse = attrs: - assert attrs ? thenPart && attrs ? elsePart; - attrs // { _type = "then-else"; }; - - - isAlways = attrs: (typeOf attrs) == "always"; - mkAlways = value: { inherit value; _type = "always"; }; - - pushIf = f: attrs: - if isIf attrs then pushIf f ( - let val = attrs.thenelse; in - # evaluate the condition. - if isThenElse val then - if attrs.condition then - val.thenPart - else - val.elsePart - # ignore the condition. - else if isAlways val then - val.value - # otherwise - else - f attrs.condition val) - else - attrs; - - # take care otherwise you will have to handle this by hand. - rmIf = pushIf (condition: val: val); - - evalIf = pushIf (condition: val: - if condition then val else mkNotdef - ); - - delayIf = pushIf (condition: val: - # rewrite the condition on sub-attributes. - mapAttrs (name: mkIf condition) val - ); - - /* Options. */ - - mkOption = attrs: attrs // {_type = "option";}; - - typeOf = x: if (__isAttrs x && x ? _type) then x._type else ""; - - isOption = attrs: (typeOf attrs) == "option"; - - addDefaultOptionValues = defs: opts: opts // - builtins.listToAttrs (map (defName: - { name = defName; - value = - let - defValue = builtins.getAttr defName defs; - optValue = builtins.getAttr defName opts; - in - if typeOf defValue == "option" - then - # `defValue' is an option. - if builtins.hasAttr defName opts - then builtins.getAttr defName opts - else defValue.default - else - # `defValue' is an attribute set containing options. - # So recurse. - if builtins.hasAttr defName opts && builtins.isAttrs optValue - then addDefaultOptionValues defValue optValue - else addDefaultOptionValues defValue {}; - } - ) (builtins.attrNames defs)); - - mergeDefaultOption = list: - if list != [] && tail list == [] then head list - else if all __isFunction list then x: mergeDefaultOption (map (f: f x) list) - else if all __isList list then concatLists list - else if all __isAttrs list then mergeAttrs list - else if all (x: true == x || false == x) list then fold logicalOR false list - else if all (x: x == toString x) list then concatStrings list - else throw "Cannot merge values."; - - mergeTypedOption = typeName: predicate: merge: list: - if all predicate list then merge list - else throw "Expect a ${typeName}."; - - mergeEnableOption = mergeTypedOption "boolean" - (x: true == x || false == x) (fold logicalOR false); - - mergeListOption = mergeTypedOption "list" - __isList concatLists; - - mergeStringOption = mergeTypedOption "string" - (x: if builtins ? isString then builtins.isString x else x + "") - concatStrings; - - mergeOneOption = list: - if list == [] then abort "This case should never happens." - else if tail list != [] then throw "Multiple definitions. Only one is allowed for this option." - else head list; - - - # Handle the traversal of option sets. All sets inside 'opts' are zipped - # and options declaration and definition are separated. If no option are - # declared at a specific depth, then the function recurse into the values. - # Other cases are handled by the optionHandler which contains two - # functions that are used to defined your goal. - # - export is a function which takes two arguments which are the option - # and the list of values. - # - notHandle is a function which takes the list of values are not handle - # by this function. - handleOptionSets = optionHandler@{export, notHandle, ...}: path: opts: - if all __isAttrs opts then - zip (attr: opts: - let - # Compute the path to reach the attribute. - name = if path == "" then attr else path + "." + attr; - - # Divide the definitions of the attribute "attr" between - # declaration (isOption) and definitions (!isOption). - test = partition isOption opts; - decls = test.right; defs = test.wrong; - - # Return the option declaration and add missing default - # attributes. - opt = { - inherit name; - merge = mergeDefaultOption; - apply = id; - } // (head decls); - - # Return the list of option sets. - optAttrs = map delayIf defs; - - # return the list of option values. - # Remove undefined values that are coming from evalIf. - optValues = filter (x: !isNotdef x) (map evalIf defs); - in - if decls == [] then handleOptionSets optionHandler name optAttrs - else addErrorContext "while evaluating the option ${name}:" ( - if tail decls != [] then throw "Multiple options." - else export opt optValues - ) - ) opts - else addErrorContext "while evaluating ${path}:" (notHandle opts); - - # Merge option sets and produce a set of values which is the merging of - # all options declare and defined. If no values are defined for an - # option, then the default value is used otherwise it use the merge - # function of each option to get the result. - mergeOptionSets = noOption: newMergeOptionSets; # ignore argument - newMergeOptionSets = - handleOptionSets { - export = opt: values: - opt.apply ( - if values == [] then - if opt ? default then opt.default - else throw "Not defined." - else opt.merge values - ); - notHandle = opts: throw "Used without option declaration."; - }; - - # Keep all option declarations. - filterOptionSets = - handleOptionSets { - export = opt: values: opt; - notHandle = opts: {}; - }; - - # Evaluate a list of option sets that would be merged with the - # function "merge" which expects two arguments. The attribute named - # "require" is used to imports option declarations and bindings. - # - # * cfg[0-9]: configuration - # * cfgSet[0-9]: configuration set - # - # merge: the function used to merge options sets. - # pkgs: is the set of packages available. (nixpkgs) - # opts: list of option sets or option set functions. - # config: result of this evaluation. - fixOptionSetsFun = merge: pkgs: opts: config: - let - # remove possible mkIf to access the require attribute. - noImportConditions = cfgSet0: - let cfgSet1 = delayIf cfgSet0; in - if cfgSet1 ? require then - cfgSet1 // { require = rmIf cfgSet1.require; } - else - cfgSet1; - - # call configuration "files" with one of the existing convention. - argumentHandler = cfg: - let - # {..} - cfg0 = cfg; - # {pkgs, config, ...}: {..} - cfg1 = cfg { inherit pkgs config merge; }; - # pkgs: config: {..} - cfg2 = cfg {} {}; - in - if __isFunction cfg0 then - if builtins.isAttrs cfg1 then cfg1 - else builtins.trace "Use '{pkgs, config, ...}:'." cfg2 - else cfg0; - - preprocess = cfg0: - let cfg1 = argumentHandler cfg0; - cfg2 = noImportConditions cfg1; - in cfg2; - - getRequire = x: toList (getAttr ["require"] [] (preprocess x)); - rmRequire = x: removeAttrs (preprocess x) ["require"]; - in - merge "" ( - map rmRequire ( - uniqFlatten getRequire [] [] (toList opts) - ) - ); - - fixOptionSets = merge: pkgs: opts: - fix (fixOptionSetsFun merge pkgs opts); - - optionAttrSetToDocList = (l: attrs: - (if (getAttr ["_type"] "" attrs) == "option" then - [({ - #inherit (attrs) description; - description = if attrs ? description then attrs.description else - throw ("No description ${toString l} : ${whatis attrs}"); - } - //(if attrs ? example then {inherit(attrs) example;} else {} ) - //(if attrs ? default then {inherit(attrs) default;} else {} ) - //{name = l;} - )] - else (concatLists (map (s: (optionAttrSetToDocList - (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 {}; - - # Wrapper aroung addErrorContext. The builtin should not be used - # directly. - addErrorContext = - if builtins ? addErrorContext - then builtins.addErrorContext - else msg: val: val; - - 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; - traceMarked = str: x: __trace (str + (whatis x)) x; - attrNamesToStr = a : concatStringsSep "; " (map (x : "${x}=") (__attrNames a)); - whatis = x : - if (__isAttrs x) then - if (x ? outPath) then "x is a derivation, name ${if x ? name then x.name else ""}, { ${attrNamesToStr x} }" - else "x is attr set { ${attrNamesToStr x} }" - else if (__isFunction x) then "x is a function" - else if (x == []) then "x is an empty list" - else if (__isList x) then "x is a list, first item is : ${whatis (__head x)}" - else if (x == true) then "x is boolean true" - else if (x == false) then "x is boolean false" - else if (x == null) then "x is null" - else "x is probably a string starting, starting characters: ${__substring 0 50 x}.."; - # trace the arguments passed to function and its result - traceCall = n : f : a : let t = n2 : x : traceMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a)); - traceCall2 = n : f : a : b : let t = n2 : x : traceMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b)); - traceCall3 = n : f : a : b : c : let t = n2 : x : traceMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b) (t "arg 3" c)); - - - - 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);}); - - 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"; - - # this as well :-) arg: http://foo/bar/bz.ext returns bz.ext - dropPath = s : - if s == "" then "" else - let takeTillSlash = left : c : s : - if left == 0 then s - else if (__substring left 1 s == "/") then - (__substring (__add left 1) (__sub c 1) s) - else takeTillSlash (__sub left 1) (__add c 1) s; in - takeTillSlash (__sub (__stringLength s) 1) 1 s; - - # calls a function (f attr value ) for each record item. returns a list - # should be renamed to mapAttrsFlatten - mapRecordFlatten = f : r : map (attr: f attr (builtins.getAttr attr r) ) (attrNames r); - - # maps a function on each attr value - # f = attr : value : .. - mapAttrs = f : r : listToAttrs ( mapRecordFlatten (a : v : nv a ( f a v ) ) r); - - # to be used with listToAttrs (_a_ttribute _v_alue) - nv = name : value : { inherit name value; }; - # attribute set containing one attribute - nvs = name : value : listToAttrs [ (nv name value) ]; - # adds / replaces an attribute of an attribute set - setAttr = set : name : v : set // (nvs name v); - - # setAttrMerge (similar to mergeAttrsWithFunc but only merges the values of a particular name) - # setAttrMerge "a" [] { a = [2];} (x : x ++ [3]) -> { a = [2 3]; } - # setAttrMerge "a" [] { } (x : x ++ [3]) -> { a = [ 3]; } - setAttrMerge = name : default : attrs : f : - setAttr attrs name (f (maybeAttr name default attrs)); - - # iterates over a list of attributes collecting the attribute attr if it exists - catAttrs = attr : l : fold ( s : l : if (hasAttr attr s) then [(builtins.getAttr attr s)] ++ l else l) [] l; - - mergeAttr = x : y : x // y; - mergeAttrs = fold mergeAttr {}; - - attrVals = nameList : attrSet : - map (x: builtins.getAttr x attrSet) nameList; - - # 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) ); - - # merges attributes using //, if a name exisits in both attributes - # an error will be triggered unless its listed in mergeLists - # so you can mergeAttrsNoOverride { buildInputs = [a]; } { buildInputs = [a]; } {} to get - # { buildInputs = [a b]; } - # merging buildPhase does'nt really make sense. The cases will be rare where appending /prefixing will fit your needs? - # in these cases the first buildPhase will override the second one - # ! depreceated, use mergeAttrByFunc instead - mergeAttrsNoOverride = { mergeLists ? ["buildInputs" "propagatedBuildInputs"], - overrideSnd ? [ "buildPhase" ] - } : attrs1 : attrs2 : - fold (n: set : - setAttr set n ( if (__hasAttr n set) - then # merge - if elem n mergeLists # attribute contains list, merge them by concatenating - then (__getAttr n attrs2) ++ (__getAttr n attrs1) - else if elem n overrideSnd - then __getAttr n attrs1 - else throw "error mergeAttrsNoOverride, attribute ${n} given in both attributes - no merge func defined" - else __getAttr n attrs2 # add attribute not existing in attr1 - )) attrs1 (__attrNames attrs2); - - - # example usage: - # mergeAttrByFunc { - # inherit mergeAttrBy; # defined below - # buildInputs = [ a b ]; - # } { - # buildInputs = [ c d ]; - # }; - # will result in - # { mergeAttrsBy = [...]; buildInputs = [ a b c d ]; } - # is used by prepareDerivationArgs and can be used when composing using - # foldArgs, composedArgsAndFun or applyAndFun. Example: composableDerivation in all-packages.nix - mergeAttrByFunc = x : y : - let - mergeAttrBy2 = { mergeAttrBy=mergeAttr; } - // (maybeAttr "mergeAttrBy" {} x) - // (maybeAttr "mergeAttrBy" {} y); in - mergeAttrs [ - x y - (mapAttrs ( a : v : # merge special names using given functions - if (__hasAttr a x) - then if (__hasAttr a y) - then v (__getAttr a x) (__getAttr a y) # both have attr, use merge func - else (__getAttr a x) # only x has attr - else (__getAttr a y) # only y has attr) - ) (removeAttrs mergeAttrBy2 - # don't merge attrs which are neither in x nor y - (filter (a : (! __hasAttr a x) && (! __hasAttr a y) ) - (__attrNames mergeAttrBy2)) - ) - ) - ]; - mergeAttrsByFuncDefaults = foldl mergeAttrByFunc { inherit mergeAttrBy; }; - # sane defaults (same name as attr name so that inherit can be used) - mergeAttrBy = # { buildInputs = concatList; [...]; passthru = mergeAttr; [..]; } - listToAttrs (map (n : nv n concatList) [ "buildInputs" "propagatedBuildInputs" "configureFlags" "prePhases" "postAll" ]) - // listToAttrs (map (n : nv n mergeAttr) [ "passthru" "meta" "cfg" "flags" ]); - - # 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) []; - - # 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 ); - - # prepareDerivationArgs tries to make writing configurable derivations easier - # example: - # prepareDerivationArgs { - # mergeAttrBy = { - # myScript = x : y : x ++ "\n" ++ y; - # }; - # cfg = { - # readlineSupport = true; - # }; - # flags = { - # readline = { - # set = { - # configureFlags = [ "--with-compiler=${compiler}" ]; - # buildInputs = [ compiler ]; - # pass = { inherit compiler; READLINE=1; }; - # assertion = compiler.dllSupport; - # myScript = "foo"; - # }; - # unset = { configureFlags = ["--without-compiler"]; }; - # }; - # }; - # src = ... - # buildPhase = '' ... ''; - # name = ... - # myScript = "bar"; - # }; - # if you don't have need for unset you can omit the surrounding set = { .. } attr - # all attrs except flags cfg and mergeAttrBy will be merged with the - # additional data from flags depending on config settings - # It's used in composableDerivation in all-packages.nix. It's also used - # heavily in the new python and libs implementation - # - # should we check for misspelled cfg options? - prepareDerivationArgs = args: - let args2 = { cfg = {}; flags = {}; } // args; - flagName = name : "${name}Support"; - cfgWithDefaults = (listToAttrs (map (n : nv (flagName n) false) (attrNames args2.flags))) - // args2.cfg; - opts = flattenAttrs (mapAttrs (a : v : - let v2 = if (v ? set || v ? unset) then v else { set = v; }; - n = if (__getAttr (flagName a) cfgWithDefaults) then "set" else "unset"; - attr = maybeAttr n {} v2; in - if (maybeAttr "assertion" true attr) - then attr - else throw "assertion of flag ${a} of derivation ${args.name} failed" - ) args2.flags ); - in removeAttrs - (mergeAttrsByFuncDefaults ([args] ++ opts ++ [{ passthru = cfgWithDefaults; }])) - ["flags" "cfg" "mergeAttrBy" "fixed" ]; # fixed may be passed as fix argument or such - -} + { inherit trivial lists strings attrsets sources options debug; } + # !!! don't include everything at top-level; perhaps only the most + # commonly used functions. + // trivial // lists // strings // attrsets // sources // options + // debug // misc diff --git a/pkgs/lib/lists.nix b/pkgs/lib/lists.nix new file mode 100644 index 000000000000..b186e97a55b3 --- /dev/null +++ b/pkgs/lib/lists.nix @@ -0,0 +1,118 @@ +# General list operations. + +rec { + inherit (builtins) head tail isList; + + + # "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 + # Haskell's foldr). + fold = op: nul: list: + if list == [] + then nul + else op (head list) (fold op nul (tail list)); + + + # Left fold: `fold op nul [x_1 x_2 ... x_n] == op (... (op (op nul + # x_1) x_2) ... x_n)'. + foldl = op: nul: list: + if list == [] + then nul + else foldl op (op nul (head list)) (tail list); + + + # Concatenate a list of lists. + concatLists = fold (x: y: x ++ y) []; + + + # Map and concatenate the result. + concatMap = f: list: concatLists (map f list); + + + # Flatten the argument into a single list; that is, nested lists are + # spliced into the top-level lists. E.g., `flatten [1 [2 [3] 4] 5] + # == [1 2 3 4 5]' and `flatten 1 == [1]'. + flatten = x: + if isList x + then fold (x: y: (flatten x) ++ y) [] x + else [x]; + + + # Filter a list using a predicate; that is, return a list containing + # every element from `list' for which `pred' returns true. + filter = pred: list: + fold (x: y: if pred x then [x] ++ y else y) [] list; + + + # Return true if `list' has an element `x': + elem = x: list: fold (a: bs: x == a || bs) false list; + + + # Find the sole element in the list matching the specified + # predicate, returns `default' if no such element exists, or + # `multiple' if there are multiple matching elements. + findSingle = pred: default: multiple: list: + let found = filter pred list; + in if found == [] then default + else if tail found != [] then multiple + 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); + + + # 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 []; + + + # Return a list or an empty list, dependening on a boolean value. + optionals = cond: elems: if cond then elems else []; + + + # If argument is a list, return it; else, wrap it in a singleton + # list. If you're using this, you should almost certainly + # reconsider if there isn't a more "well-typed" approach. + toList = x: if builtins.isList x then x else [x]; + + + # Return a list of integers from `first' up to and including `last'. + range = first: last: + if builtins.lessThan last first + then [] + else [first] ++ range (builtins.add first 1) last; + + + # Partition the elements of a list in two lists, `right' and + # `wrong', depending on the evaluation of a predicate. + partition = pred: + fold (h: t: + if pred h + then { right = [h] ++ t.right; wrong = t.wrong; } + else { right = t.right; wrong = [h] ++ t.wrong; } + ) { right = []; wrong = []; }; + + +} diff --git a/pkgs/lib/misc.nix b/pkgs/lib/misc.nix new file mode 100644 index 000000000000..548b8d22edf1 --- /dev/null +++ b/pkgs/lib/misc.nix @@ -0,0 +1,385 @@ +let lib = import ./default.nix; in + +with import ./lists.nix; +with import ./attrsets.nix; +with import ./strings.nix; + +rec { + + + # accumulates / merges all attr sets until null is fed. + # example: sumArgs id { a = 'a'; x = 'x'; } { y = 'y'; x = 'X'; } null + # result : { a = 'a'; x = 'X'; y = 'Y'; } + innerSumArgs = f : x : y : (if y == null then (f x) + else (innerSumArgs f (x // y))); + sumArgs = f : innerSumArgs f {}; + + # Advanced sumArgs version. Hm, twice as slow, I'm afraid. + # composedArgs id (x:x//{a="b";}) (x:x//{b=x.a + "c";}) null; + # {a="b" ; b="bc";}; + innerComposedArgs = f : x : y : (if y==null then (f x) + else (if (builtins.isAttrs y) then + (innerComposedArgs f (x//y)) + else (innerComposedArgs f (y x)))); + composedArgs = f: innerComposedArgs f {}; + + defaultMergeArg = x : y: if builtins.isAttrs y then + y + else + (y x); + defaultMerge = x: y: x // (defaultMergeArg x y); + sumTwoArgs = f: x: y: + f (defaultMerge x y); + foldArgs = merger: f: init: x: + let arg=(merger init (defaultMergeArg init x)); in + # now add the function with composed args already applied to the final attrs + setAttrMerge "passthru" {} (f arg) ( x : x // { function = foldArgs merger f arg; } ); + + # returns f x // { passthru.fun = y : f (merge x y); } while preserving other passthru names. + # example: let ex = applyAndFun (x : removeAttrs x ["fixed"]) (mergeOrApply mergeAttr) {name = 6;}; + # usage1 = ex.passthru.fun { name = 7; }; # result: { name = 7;} + # usage2 = ex.passthru.fun (a: a // {name = __add a.name 1; }); # result: { a = 7; } + # fix usage: + # usage3a = ex.passthru.fun (a: a // {name2 = a.fixed.toBePassed; }); # usage3a will fail because toBePassed is not yet given + # usage3b usage3a.passthru.fun { toBePassed = "foo";}; # result { name = 7; name2 = "foo"; toBePassed = "foo"; fixed = ; } + applyAndFun = f : merge : x : assert (__isAttrs x || __isFunction x); + let takeFix = if (__isFunction x) then x else (attr: merge attr x); in + setAttrMerge "passthru" {} (lib.fix (fixed : f (takeFix {inherit fixed;}))) + ( y : y // + { + fun = z : applyAndFun f merge (fixed: merge (takeFix fixed) z); + funMerge = z : applyAndFun f merge (fixed: let e = takeFix fixed; in merge e (merge e z)); + } ); + mergeOrApply = merge : x : y : if (__isFunction y) then y x else merge x y; + + # rec { # an example of how composedArgsAndFun can be used + # a = composedArgsAndFun (x : x) { a = ["2"]; meta = { d = "bar";}; }; + # # meta.d will be lost ! It's your task to preserve it (eg using a merge function) + # b = a.passthru.function { a = [ "3" ]; meta = { d2 = "bar2";}; }; + # # instead of passing/ overriding values you can use a merge function: + # c = b.passthru.function ( x: { a = x.a ++ ["4"]; }); # consider using (maybeAttr "a" [] x) + # } + # result: + # { + # a = { a = ["2"]; meta = { d = "bar"; }; passthru = { function = .. }; }; + # b = { a = ["3"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; }; + # c = { a = ["3" "4"]; meta = { d2 = "bar2"; }; passthru = { function = .. }; }; + # # c2 is equal to c + # } + composedArgsAndFun = f: foldArgs defaultMerge f {}; + + # example a = pairMap (x : y : x + y) ["a" "b" "c" "d"]; + # result: ["ab" "cd"] + innerPairMap = acc: f: l: + if l == [] then acc else + innerPairMap (acc ++ [(f (head l)(head (tail l)))]) + f (tail (tail l)); + pairMap = innerPairMap []; + + + # shortcut for getAttr ["name"] default attrs + maybeAttr = name: default: attrs: + if (__hasAttr name attrs) then (__getAttr name attrs) else default; + + + # Return the second argument if the first one is true or the empty version + # of the second argument. + ifEnable = cond: val: + if cond then val + else if builtins.isList val then [] + else if builtins.isAttrs val then {} + # else if builtins.isString val then "" + else if (val == true || val == false) then false + else null; + + + # Return true only if there is an attribute and it is true. + checkFlag = attrSet: name: + if (name == "true") then true else + if (name == "false") then false else + if (elem name (getAttr ["flags"] [] attrSet)) then true else + getAttr [name] false attrSet ; + + + # Input : attrSet, [ [name default] ... ], name + # Output : its value or default. + getValue = attrSet: argList: name: + ( getAttr [name] (if checkFlag attrSet name then true else + if argList == [] then null else + let x = builtins.head argList; in + if (head x) == name then + (head (tail x)) + else (getValue attrSet + (tail argList) name)) attrSet ); + + + # Input : attrSet, [[name default] ...], [ [flagname reqs..] ... ] + # Output : are reqs satisfied? It's asserted. + checkReqs = attrSet : argList : condList : + ( + fold lib.and true + (map (x: let name = (head x) ; in + + ((checkFlag attrSet name) -> + (fold lib.and true + (map (y: let val=(getValue attrSet argList y); in + (val!=null) && (val!=false)) + (tail x))))) condList)) ; + + + uniqList = {inputList, outputList ? []}: + if (inputList == []) then outputList else + let x=head inputList; + newOutputList = outputList ++ + (if elem x outputList then [] else [x]); + 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 + if checker (head list) then + condConcat + (name + (head (tail list))) + (tail (tail list)) + checker + else condConcat + name (tail (tail list)) checker; + + # Merge sets of attributes and use the function f to merge + # attributes values. + zip = f: sets: + builtins.listToAttrs (map (name: { + inherit name; + value = + f name + (map (__getAttr name) + (filter (__hasAttr name) sets)); + }) (concatMap builtins.attrNames sets)); + + # flatten a list of elements by following the properties of the elements. + # next : return the list of following elements. + # seen : lists of elements already visited. + # default: result if 'x' is empty. + # x : list of values that have to be processed. + uniqFlatten = next: seen: default: x: + if x == [] + then default + else + let h = head x; t = tail x; n = next h; in + if elem h seen + then uniqFlatten next seen default t + else uniqFlatten next (seen ++ [h]) (default ++ [h]) (n ++ t) + ; + + 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 {}; + + 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; + traceMarked = str: x: __trace (str + (whatis x)) x; + attrNamesToStr = a : concatStringsSep "; " (map (x : "${x}=") (__attrNames a)); + whatis = x : + if (__isAttrs x) then + if (x ? outPath) then "x is a derivation, name ${if x ? name then x.name else ""}, { ${attrNamesToStr x} }" + else "x is attr set { ${attrNamesToStr x} }" + else if (__isFunction x) then "x is a function" + else if (x == []) then "x is an empty list" + else if (__isList x) then "x is a list, first item is : ${whatis (__head x)}" + else if (x == true) then "x is boolean true" + else if (x == false) then "x is boolean false" + else if (x == null) then "x is null" + else "x is probably a string starting, starting characters: ${__substring 0 50 x}.."; + # trace the arguments passed to function and its result + traceCall = n : f : a : let t = n2 : x : traceMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a)); + traceCall2 = n : f : a : b : let t = n2 : x : traceMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b)); + traceCall3 = n : f : a : b : c : let t = n2 : x : traceMarked "${n} ${n2}:" x; in t "result" (f (t "arg 1" a) (t "arg 2" b) (t "arg 3" c)); + + + + 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);}); + + # calls a function (f attr value ) for each record item. returns a list + # should be renamed to mapAttrsFlatten + mapRecordFlatten = f : r : map (attr: f attr (builtins.getAttr attr r) ) (attrNames r); + + # maps a function on each attr value + # f = attr : value : .. + mapAttrs = f : r : listToAttrs ( mapRecordFlatten (a : v : nv a ( f a v ) ) r); + + # to be used with listToAttrs (_a_ttribute _v_alue) + nv = name : value : { inherit name value; }; + # attribute set containing one attribute + nvs = name : value : listToAttrs [ (nv name value) ]; + # adds / replaces an attribute of an attribute set + setAttr = set : name : v : set // (nvs name v); + + # setAttrMerge (similar to mergeAttrsWithFunc but only merges the values of a particular name) + # setAttrMerge "a" [] { a = [2];} (x : x ++ [3]) -> { a = [2 3]; } + # setAttrMerge "a" [] { } (x : x ++ [3]) -> { a = [ 3]; } + setAttrMerge = name : default : attrs : f : + setAttr attrs name (f (maybeAttr name default attrs)); + + # iterates over a list of attributes collecting the attribute attr if it exists + catAttrs = attr : l : fold ( s : l : if (hasAttr attr s) then [(builtins.getAttr attr s)] ++ l else l) [] l; + + attrVals = nameList : attrSet : + map (x: builtins.getAttr x attrSet) nameList; + + # 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) ); + + # merges attributes using //, if a name exisits in both attributes + # an error will be triggered unless its listed in mergeLists + # so you can mergeAttrsNoOverride { buildInputs = [a]; } { buildInputs = [a]; } {} to get + # { buildInputs = [a b]; } + # merging buildPhase does'nt really make sense. The cases will be rare where appending /prefixing will fit your needs? + # in these cases the first buildPhase will override the second one + # ! depreceated, use mergeAttrByFunc instead + mergeAttrsNoOverride = { mergeLists ? ["buildInputs" "propagatedBuildInputs"], + overrideSnd ? [ "buildPhase" ] + } : attrs1 : attrs2 : + fold (n: set : + setAttr set n ( if (__hasAttr n set) + then # merge + if elem n mergeLists # attribute contains list, merge them by concatenating + then (__getAttr n attrs2) ++ (__getAttr n attrs1) + else if elem n overrideSnd + then __getAttr n attrs1 + else throw "error mergeAttrsNoOverride, attribute ${n} given in both attributes - no merge func defined" + else __getAttr n attrs2 # add attribute not existing in attr1 + )) attrs1 (__attrNames attrs2); + + + # example usage: + # mergeAttrByFunc { + # inherit mergeAttrBy; # defined below + # buildInputs = [ a b ]; + # } { + # buildInputs = [ c d ]; + # }; + # will result in + # { mergeAttrsBy = [...]; buildInputs = [ a b c d ]; } + # is used by prepareDerivationArgs and can be used when composing using + # foldArgs, composedArgsAndFun or applyAndFun. Example: composableDerivation in all-packages.nix + mergeAttrByFunc = x : y : + let + mergeAttrBy2 = { mergeAttrBy=lib.mergeAttrs; } + // (maybeAttr "mergeAttrBy" {} x) + // (maybeAttr "mergeAttrBy" {} y); in + fold lib.mergeAttrs {} [ + x y + (mapAttrs ( a : v : # merge special names using given functions + if (__hasAttr a x) + then if (__hasAttr a y) + then v (__getAttr a x) (__getAttr a y) # both have attr, use merge func + else (__getAttr a x) # only x has attr + else (__getAttr a y) # only y has attr) + ) (removeAttrs mergeAttrBy2 + # don't merge attrs which are neither in x nor y + (filter (a : (! __hasAttr a x) && (! __hasAttr a y) ) + (__attrNames mergeAttrBy2)) + ) + ) + ]; + mergeAttrsByFuncDefaults = foldl mergeAttrByFunc { inherit mergeAttrBy; }; + # sane defaults (same name as attr name so that inherit can be used) + mergeAttrBy = # { buildInputs = concatList; [...]; passthru = mergeAttr; [..]; } + listToAttrs (map (n : nv n lib.concat) [ "buildInputs" "propagatedBuildInputs" "configureFlags" "prePhases" "postAll" ]) + // listToAttrs (map (n : nv n lib.mergeAttrs) [ "passthru" "meta" "cfg" "flags" ]); + + # 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) []; + + # 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 ); + + # prepareDerivationArgs tries to make writing configurable derivations easier + # example: + # prepareDerivationArgs { + # mergeAttrBy = { + # myScript = x : y : x ++ "\n" ++ y; + # }; + # cfg = { + # readlineSupport = true; + # }; + # flags = { + # readline = { + # set = { + # configureFlags = [ "--with-compiler=${compiler}" ]; + # buildInputs = [ compiler ]; + # pass = { inherit compiler; READLINE=1; }; + # assertion = compiler.dllSupport; + # myScript = "foo"; + # }; + # unset = { configureFlags = ["--without-compiler"]; }; + # }; + # }; + # src = ... + # buildPhase = '' ... ''; + # name = ... + # myScript = "bar"; + # }; + # if you don't have need for unset you can omit the surrounding set = { .. } attr + # all attrs except flags cfg and mergeAttrBy will be merged with the + # additional data from flags depending on config settings + # It's used in composableDerivation in all-packages.nix. It's also used + # heavily in the new python and libs implementation + # + # should we check for misspelled cfg options? + prepareDerivationArgs = args: + let args2 = { cfg = {}; flags = {}; } // args; + flagName = name : "${name}Support"; + cfgWithDefaults = (listToAttrs (map (n : nv (flagName n) false) (attrNames args2.flags))) + // args2.cfg; + opts = flattenAttrs (mapAttrs (a : v : + let v2 = if (v ? set || v ? unset) then v else { set = v; }; + n = if (__getAttr (flagName a) cfgWithDefaults) then "set" else "unset"; + attr = maybeAttr n {} v2; in + if (maybeAttr "assertion" true attr) + then attr + else throw "assertion of flag ${a} of derivation ${args.name} failed" + ) args2.flags ); + in removeAttrs + (mergeAttrsByFuncDefaults ([args] ++ opts ++ [{ passthru = cfgWithDefaults; }])) + ["flags" "cfg" "mergeAttrBy" "fixed" ]; # fixed may be passed as fix argument or such + + +} \ No newline at end of file diff --git a/pkgs/lib/options.nix b/pkgs/lib/options.nix new file mode 100644 index 000000000000..6d8bf4633de4 --- /dev/null +++ b/pkgs/lib/options.nix @@ -0,0 +1,267 @@ +# Nixpkgs/NixOS option handling. + +let lib = import ./default.nix; in + +with { inherit (builtins) head tail; }; +with import ./lists.nix; +with import ./attrsets.nix; + +rec { + + + mkOption = attrs: attrs // {_type = "option";}; + + typeOf = x: if (__isAttrs x && x ? _type) then x._type else ""; + + isOption = attrs: (typeOf attrs) == "option"; + + addDefaultOptionValues = defs: opts: opts // + builtins.listToAttrs (map (defName: + { name = defName; + value = + let + defValue = builtins.getAttr defName defs; + optValue = builtins.getAttr defName opts; + in + if typeOf defValue == "option" + then + # `defValue' is an option. + if builtins.hasAttr defName opts + then builtins.getAttr defName opts + else defValue.default + else + # `defValue' is an attribute set containing options. + # So recurse. + if builtins.hasAttr defName opts && builtins.isAttrs optValue + then addDefaultOptionValues defValue optValue + else addDefaultOptionValues defValue {}; + } + ) (builtins.attrNames defs)); + + mergeDefaultOption = list: + if list != [] && tail list == [] then head list + else if all __isFunction list then x: mergeDefaultOption (map (f: f x) list) + else if all __isList list then concatLists list + else if all __isAttrs list then fold lib.mergeAttrs {} list + else if all (x: true == x || false == x) list then fold lib.or false list + else if all (x: x == toString x) list then lib.concatStrings list + else throw "Cannot merge values."; + + mergeTypedOption = typeName: predicate: merge: list: + if all predicate list then merge list + else throw "Expect a ${typeName}."; + + mergeEnableOption = mergeTypedOption "boolean" + (x: true == x || false == x) (fold lib.or false); + + mergeListOption = mergeTypedOption "list" + __isList concatLists; + + mergeStringOption = mergeTypedOption "string" + (x: if builtins ? isString then builtins.isString x else x + "") + lib.concatStrings; + + mergeOneOption = list: + if list == [] then abort "This case should never happens." + else if tail list != [] then throw "Multiple definitions. Only one is allowed for this option." + else head list; + + + # Handle the traversal of option sets. All sets inside 'opts' are zipped + # and options declaration and definition are separated. If no option are + # declared at a specific depth, then the function recurse into the values. + # Other cases are handled by the optionHandler which contains two + # functions that are used to defined your goal. + # - export is a function which takes two arguments which are the option + # and the list of values. + # - notHandle is a function which takes the list of values are not handle + # by this function. + handleOptionSets = optionHandler@{export, notHandle, ...}: path: opts: + if all __isAttrs opts then + lib.zip (attr: opts: + let + # Compute the path to reach the attribute. + name = if path == "" then attr else path + "." + attr; + + # Divide the definitions of the attribute "attr" between + # declaration (isOption) and definitions (!isOption). + test = partition isOption opts; + decls = test.right; defs = test.wrong; + + # Return the option declaration and add missing default + # attributes. + opt = { + inherit name; + merge = mergeDefaultOption; + apply = lib.id; + } // (head decls); + + # Return the list of option sets. + optAttrs = map delayIf defs; + + # return the list of option values. + # Remove undefined values that are coming from evalIf. + optValues = filter (x: !isNotdef x) (map evalIf defs); + in + if decls == [] then handleOptionSets optionHandler name optAttrs + else lib.addErrorContext "while evaluating the option ${name}:" ( + if tail decls != [] then throw "Multiple options." + else export opt optValues + ) + ) opts + else lib.addErrorContext "while evaluating ${path}:" (notHandle opts); + + # Merge option sets and produce a set of values which is the merging of + # all options declare and defined. If no values are defined for an + # option, then the default value is used otherwise it use the merge + # function of each option to get the result. + mergeOptionSets = noOption: newMergeOptionSets; # ignore argument + newMergeOptionSets = + handleOptionSets { + export = opt: values: + opt.apply ( + if values == [] then + if opt ? default then opt.default + else throw "Not defined." + else opt.merge values + ); + notHandle = opts: throw "Used without option declaration."; + }; + + # Keep all option declarations. + filterOptionSets = + handleOptionSets { + export = opt: values: opt; + notHandle = opts: {}; + }; + + # Evaluate a list of option sets that would be merged with the + # function "merge" which expects two arguments. The attribute named + # "require" is used to imports option declarations and bindings. + # + # * cfg[0-9]: configuration + # * cfgSet[0-9]: configuration set + # + # merge: the function used to merge options sets. + # pkgs: is the set of packages available. (nixpkgs) + # opts: list of option sets or option set functions. + # config: result of this evaluation. + fixOptionSetsFun = merge: pkgs: opts: config: + let + # remove possible mkIf to access the require attribute. + noImportConditions = cfgSet0: + let cfgSet1 = delayIf cfgSet0; in + if cfgSet1 ? require then + cfgSet1 // { require = rmIf cfgSet1.require; } + else + cfgSet1; + + # call configuration "files" with one of the existing convention. + argumentHandler = cfg: + let + # {..} + cfg0 = cfg; + # {pkgs, config, ...}: {..} + cfg1 = cfg { inherit pkgs config merge; }; + # pkgs: config: {..} + cfg2 = cfg {} {}; + in + if __isFunction cfg0 then + if builtins.isAttrs cfg1 then cfg1 + else builtins.trace "Use '{pkgs, config, ...}:'." cfg2 + else cfg0; + + preprocess = cfg0: + let cfg1 = argumentHandler cfg0; + cfg2 = noImportConditions cfg1; + in cfg2; + + getRequire = x: toList (getAttr ["require"] [] (preprocess x)); + rmRequire = x: removeAttrs (preprocess x) ["require"]; + in + merge "" ( + map rmRequire ( + lib.uniqFlatten getRequire [] [] (toList opts) + ) + ); + + fixOptionSets = merge: pkgs: opts: + lib.fix (fixOptionSetsFun merge pkgs opts); + + optionAttrSetToDocList = l: attrs: + if (getAttr ["_type"] "" attrs) == "option" then + [({ + #inherit (attrs) description; + description = if attrs ? description then attrs.description else + throw ("No description ${toString l} : ${lib.whatis attrs}"); + } + // (if attrs ? example then {inherit(attrs) example;} else {} ) + // (if attrs ? default then {inherit(attrs) default;} else {} ) + // {name = l;} + )] + else (concatLists (map (s: (optionAttrSetToDocList + (l + (if l=="" then "" else ".") + s) (builtins.getAttr s attrs))) + (builtins.attrNames attrs))); + + + /* If. ThenElse. Always. */ + # !!! cleanup needed + + # create "if" statement that can be dealyed on sets until a "then-else" or + # "always" set is reached. When an always set is reached the condition + # is ignore. + + isIf = attrs: (typeOf attrs) == "if"; + mkIf = condition: thenelse: + if isIf thenelse then + mkIf (condition && thenelse.condition) thenelse.thenelse + else { + _type = "if"; + inherit condition thenelse; + }; + + + isNotdef = attrs: (typeOf attrs) == "notdef"; + mkNotdef = {_type = "notdef";}; + + + isThenElse = attrs: (typeOf attrs) == "then-else"; + mkThenElse = attrs: + assert attrs ? thenPart && attrs ? elsePart; + attrs // { _type = "then-else"; }; + + + isAlways = attrs: (typeOf attrs) == "always"; + mkAlways = value: { inherit value; _type = "always"; }; + + pushIf = f: attrs: + if isIf attrs then pushIf f ( + let val = attrs.thenelse; in + # evaluate the condition. + if isThenElse val then + if attrs.condition then + val.thenPart + else + val.elsePart + # ignore the condition. + else if isAlways val then + val.value + # otherwise + else + f attrs.condition val) + else + attrs; + + # take care otherwise you will have to handle this by hand. + rmIf = pushIf (condition: val: val); + + evalIf = pushIf (condition: val: + if condition then val else mkNotdef + ); + + delayIf = pushIf (condition: val: + # rewrite the condition on sub-attributes. + lib.mapAttrs (name: mkIf condition) val + ); + +} \ No newline at end of file diff --git a/pkgs/lib/sources.nix b/pkgs/lib/sources.nix new file mode 100644 index 000000000000..5a321bce7085 --- /dev/null +++ b/pkgs/lib/sources.nix @@ -0,0 +1,29 @@ +# Functions for copying sources to the Nix store. + +let lib = import ./default.nix; in + +rec { + + + # 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" && (baseName == ".svn" || baseName == "CVS")) || + # Filter out backup files. + (lib.hasSuffix "~" baseName) + ); + 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" && lib.any (ext: lib.hasSuffix ext base) exts; + in builtins.filterSource filter path; + + +} diff --git a/pkgs/lib/strings.nix b/pkgs/lib/strings.nix new file mode 100644 index 000000000000..8986d9c42d98 --- /dev/null +++ b/pkgs/lib/strings.nix @@ -0,0 +1,85 @@ +/* String manipulation functions. */ + +let lib = import ./default.nix; in + +rec { + inherit (builtins) stringLength substring head tail lessThan sub; + + + # Concatenate a list of strings. + concatStrings = lib.fold (x: y: x + y) ""; + + + # Map a function over a list and concatenate the resulting strings. + 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"]. + intersperse = separator: list: + if list == [] || tail list == [] + then list + else [(head list) separator] + ++ (intersperse separator (tail list)); + + + # Concatenate a list of strings with a separator between each element, e.g. + # concatStringsSep " " ["foo" "bar" "xyzzy"] == "foo bar xyzzy" + concatStringsSep = separator: list: + concatStrings (intersperse separator list); + + + # Construct an RPATH containing the libraries for a set of packages, + # e.g. "${pkg1}/lib:${pkg2}/lib:...". + makeLibraryPath = paths: concatStringsSep ":" (map (path: path + "/lib") paths); + + + # Dependening on the boolean `cond', return either the given string + # or the empty string. + optionalString = cond: string: if cond then string else ""; + + + # Determine whether a filename ends in the given suffix. + hasSuffix = ext: fileName: + let lenFileName = stringLength fileName; + lenExt = stringLength ext; + in !(lessThan lenFileName lenExt) && + substring (sub lenFileName lenExt) lenFileName fileName == ext; + + + # Convert a string to a list of characters (i.e. singleton strings). + # For instance, "abc" becomes ["a" "b" "c"]. This allows you to, + # e.g., map a function over each character. However, note that this + # will likely be horribly inefficient; Nix is not a general purpose + # programming language. Complex string manipulations should, if + # appropriate, be done in a derivation. + stringToCharacters = s: let l = stringLength s; in + if l == 0 + then [] + else [(substring 0 1 s)] ++ stringToCharacters (substring 1 (builtins.sub l 1) s); + + + # !!! this function seems broken - it doesn't escape all special + # characters, and in any case this should be done in a builder. + escapeShellArg = s: + let escapeChar = x: if x == "'" then "'\"'\"'" else x; + in "'" + concatStrings (map escapeChar (stringToCharacters s)) + "'"; + + + # !!! what is this for? + defineShList = name: list: "\n${name}=(${concatStringsSep " " (map escapeShellArg list)})\n"; + + + # arg: http://foo/bar/bz.ext returns bz.ext + # !!! isn't this what the `baseNameOf' primop does? + dropPath = s : + if s == "" then "" else + let takeTillSlash = left : c : s : + if left == 0 then s + else if (__substring left 1 s == "/") then + (__substring (__add left 1) (__sub c 1) s) + else takeTillSlash (__sub left 1) (__add c 1) s; in + takeTillSlash (__sub (__stringLength s) 1) 1 s; + + +} \ No newline at end of file diff --git a/pkgs/lib/trivial.nix b/pkgs/lib/trivial.nix new file mode 100644 index 000000000000..a4fbd164fe57 --- /dev/null +++ b/pkgs/lib/trivial.nix @@ -0,0 +1,18 @@ +rec { + + # Identity function. + id = x: x; + + # Constant function. + const = x: y: x; + + # Named versions corresponding to some builtin operators. + concat = x: y: x ++ y; + or = x: y: x || y; + and = x: y: x && y; + mergeAttrs = x : y : x // y; + + # Take a function and evaluate it with its own returned value. + fix = f: let result = f result; in result; + +} diff --git a/pkgs/misc/cups/default.nix b/pkgs/misc/cups/default.nix index de56e336289e..2b1ff2221600 100644 --- a/pkgs/misc/cups/default.nix +++ b/pkgs/misc/cups/default.nix @@ -24,9 +24,6 @@ stdenv.mkDerivation { installFlagsArray=(BUILDROOT=$out/destdir) ''; - # !!! Ideally, we wouldn't have Samba as a dependency of CUPS. - # Rather, the backend directory should be treated as configuration - # data generated in some other Nix expression in NixOS. postInstall = '' mv $out/destdir/$out/* $out rm -rf $out/destdir diff --git a/pkgs/misc/my-env/default.nix b/pkgs/misc/my-env/default.nix index 2bf2d86c2c81..d876991ce6ac 100644 --- a/pkgs/misc/my-env/default.nix +++ b/pkgs/misc/my-env/default.nix @@ -69,7 +69,40 @@ mkDerivation { phases= # only do all the setup stuff in nix-support/* set +e - source "$s" + if [[ -z "\$ZSH_VERSION" ]]; then + source "$s" + else + setopt interactivecomments + # fix bash indirection + # let's hope the bash arrays aren't used + # substitute is using bash array, so skip it + echo ' + setopt NO_BAD_PATTERN + setopt NO_BANG_HIST + setopt NO_BG_NICE + setopt NO_EQUALS + setopt NO_FUNCTION_ARGZERO + setopt GLOB_SUBST + setopt NO_HUP + setopt INTERACTIVE_COMMENTS + setopt KSH_ARRAYS + setopt NO_MULTIOS + setopt NO_NOMATCH + setopt RM_STAR_SILENT + setopt POSIX_BUILTINS + setopt SH_FILE_EXPANSION + setopt SH_GLOB + setopt SH_OPTION_LETTERS + setopt SH_WORD_SPLIT + ' >> "\$tmp/script" + sed -e 's/\''${!\([^}]*\)}/\''${(P)\1}/g' \ + -e 's/[[]\*\]//' \ + -e 's/substitute() {/ substitute() { return; /' \ + -e 's@PATH=\$@PATH=${pkgs.coreutils}/bin@' \ + "$s" >> "\$tmp/script" + echo "\$tmp/script"; + source "\$tmp/script"; + fi rm -fr "\$tmp" ${extraCmds} export PATH diff --git a/pkgs/misc/ntfs-3g/default.nix b/pkgs/misc/ntfs-3g/default.nix index 6edaf02084e5..ea2b60a613d7 100644 --- a/pkgs/misc/ntfs-3g/default.nix +++ b/pkgs/misc/ntfs-3g/default.nix @@ -2,12 +2,12 @@ stdenv.mkDerivation rec { pname = "ntfs-3g"; - version = "1.5012"; + version = "2009.1.1"; name = "${pname}-${version}"; src = fetchurl { url = "${meta.homepage}/${name}.tgz"; - sha256 = "e79102fdb5948f209d25432f8f5127965877fe47bed68b9270b23fc1d187735a"; + sha256 = "0e02ff891645658c1801ba7d665c0ff3a4231e5570b974a803ffc2974ef68e45"; }; preConfigure = '' diff --git a/pkgs/misc/tex/nix/find-includes.pl b/pkgs/misc/tex/nix/find-includes.pl index 9e5fd112bac9..eb36cefc7de6 100644 --- a/pkgs/misc/tex/nix/find-includes.pl +++ b/pkgs/misc/tex/nix/find-includes.pl @@ -82,7 +82,7 @@ while (scalar @workset > 0) { } elsif (/\\includegraphics(\[.*\])?\{(.*)\}/) { my $fn2 = $2; die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/"; - addToWorkSetExts("$path/$fn2", ".pdf", ".png", ".ps"); + addToWorkSetExts("$path/$fn2", ".pdf", ".png", ".ps", ".jpg"); } elsif (/\\pgfdeclareimage(\[.*\])?\{.*\}\{(.*)\}/) { my $fn2 = $2; die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/"; diff --git a/pkgs/os-specific/linux/acpid/default.nix b/pkgs/os-specific/linux/acpid/default.nix new file mode 100644 index 000000000000..876152472639 --- /dev/null +++ b/pkgs/os-specific/linux/acpid/default.nix @@ -0,0 +1,20 @@ +{stdenv, fetchurl}: + +stdenv.mkDerivation { + name = "acpid-1.0.8"; + + src = fetchurl { + url = mirror://sourceforge/acpid/acpid-1.0.8.tar.gz; + sha256 = "1cdp4vql8ya073b42mjpzpzzn1py00baazq91837vhrq5hqfaynm"; + }; + + preBuild = '' + makeFlagsArray=(BINDIR=$out/bin SBINDIR=$out/sbin MAN8DIR=$out/share/man/man8) + ''; + + meta = { + homepage = http://acpid.sourceforge.net/; + description = "A daemon for delivering ACPI events to userspace programs"; + license = "GPLv2+"; + }; +} diff --git a/pkgs/os-specific/linux/e2fsprogs/default.nix b/pkgs/os-specific/linux/e2fsprogs/default.nix index c116b74a8103..c4c0b15818f7 100644 --- a/pkgs/os-specific/linux/e2fsprogs/default.nix +++ b/pkgs/os-specific/linux/e2fsprogs/default.nix @@ -1,11 +1,11 @@ {stdenv, fetchurl}: stdenv.mkDerivation { - name = "e2fsprogs-1.41.3"; + name = "e2fsprogs-1.41.4"; src = fetchurl { - url = mirror://sourceforge/e2fsprogs/e2fsprogs-1.41.3.tar.gz; - sha256 = "0yldax5z1d1gfxpvzmr8y2z5zg5xhbi9pjjy4yw0q28dd2pfsxyf"; + url = mirror://sourceforge/e2fsprogs/e2fsprogs-1.41.4.tar.gz; + sha256 = "1p10j04gwr286qc2pjpp72k38nqk2d2n7sslwhvxgb995gp0zh9c"; }; configureFlags = diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.27.nix b/pkgs/os-specific/linux/kernel/linux-2.6.27.nix index e0f8e953c101..f6632d95ace6 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.27.nix +++ b/pkgs/os-specific/linux/kernel/linux-2.6.27.nix @@ -5,11 +5,11 @@ assert !userModeLinux; import ./generic.nix ( rec { - version = "2.6.27.13"; + version = "2.6.27.15"; src = fetchurl { url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "1zxyid70nlzxmx08mrg6a2vafqvs6q1szlcix417d1qq52c88l9i"; + sha256 = "17n8q425q5xix2fd1ig5gbpfjhy18wggd27pyaxi7vvxa9ihm969"; }; features = { diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.28.nix b/pkgs/os-specific/linux/kernel/linux-2.6.28.nix index 4c5e0467c7ff..628df9391a81 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.28.nix +++ b/pkgs/os-specific/linux/kernel/linux-2.6.28.nix @@ -5,11 +5,11 @@ assert !userModeLinux; import ./generic.nix ( rec { - version = "2.6.28.2"; + version = "2.6.28.4"; src = fetchurl { url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "0fw4wv9xnajsw3prp2p79470wsflpnigflyyg21s2lfy0xn66ay8"; + sha256 = "1k45azdjv4i9hh76nbi442vsfpwz31736aq3la2pn5avmkwiz2mm"; }; features = { diff --git a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix index 9e56e96f2970..54f197f3b5a2 100644 --- a/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix +++ b/pkgs/os-specific/linux/kqemu/1.3.0pre11.nix @@ -16,6 +16,7 @@ rec { sed -e '/kernel_path=/akernel_path=$out$kernel_path' -i install.sh sed -e '/depmod/d' -i install.sh cat install.sh + sed -e '/linux\/ioctl.h/a#include ' -i kqemu-linux.c '') ["minInit" "doUnpack"]; phaseNames = ["preConfigure" "doConfigure" "debugStep" "doMakeInstall"]; diff --git a/pkgs/os-specific/linux/nvidia/default.nix b/pkgs/os-specific/linux/nvidia/default.nix index abb7eef04438..4fe6529583ae 100644 --- a/pkgs/os-specific/linux/nvidia/default.nix +++ b/pkgs/os-specific/linux/nvidia/default.nix @@ -2,7 +2,7 @@ let - versionNumber = "180.22"; + versionNumber = "180.29"; in @@ -14,13 +14,13 @@ stdenv.mkDerivation { src = if stdenv.system == "i686-linux" then fetchurl { - url = "http://us.download.nvidia.com/XFree86/Linux-x86/${versionNumber}/NVIDIA-Linux-x86-${versionNumber}-pkg1.run"; - sha256 = "0cp6ii14pm8kzy1fy1qx2id2fp0lmb02akddid8wwdca7xpczqg7"; + url = "ftp://download.nvidia.com/XFree86/Linux-x86/${versionNumber}/NVIDIA-Linux-x86-${versionNumber}-pkg0.run"; + sha256 = "17wgg5rf5384bxng9ygwarf4imvvg069zihfvvvmahg1b0fsipvq"; } else if stdenv.system == "x86_64-linux" then fetchurl { - url = "http://us.download.nvidia.com/XFree86/Linux-x86_64/${versionNumber}/NVIDIA-Linux-x86_64-${versionNumber}-pkg2.run"; - sha256 = "0yycsr8i5cc8bnqwvfrk0v9d7gxxv42zqdpz9ki8vxil7lvjfdxv"; + url = "ftp://download.nvidia.com/XFree86/Linux-x86_64/${versionNumber}/NVIDIA-Linux-x86_64-${versionNumber}-pkg0.run"; + sha256 = "1w7a67s5df8i5lbr2r980l674wvrqzzys1zdwcla267zy109rp5d"; } else throw "nvidia-x11 does not support platform ${stdenv.system}"; diff --git a/pkgs/stdenv/adapters.nix b/pkgs/stdenv/adapters.nix new file mode 100644 index 000000000000..ff4de11bc8b7 --- /dev/null +++ b/pkgs/stdenv/adapters.nix @@ -0,0 +1,111 @@ +/* This file contains various functions that take a stdenv and return + a new stdenv with different behaviour, e.g. using a different C + compiler. */ + +{dietlibc, fetchurl, runCommand}: + + +rec { + + + # Override the compiler in stdenv for specific packages. + overrideGCC = stdenv: gcc: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; }); + }; + + + # Add some arbitrary packages to buildInputs for specific packages. + # Used to override packages in stenv like Make. Should not be used + # for other dependencies. + overrideInStdenv = stdenv: pkgs: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // + { buildInputs = (if args ? buildInputs then args.buildInputs else []) ++ pkgs; } + ); + }; + + + # Override the setup script of stdenv. Useful for testing new + # versions of the setup script without causing a rebuild of + # everything. + # + # Example: + # randomPkg = import ../bla { ... + # stdenv = overrideSetup stdenv ../stdenv/generic/setup-latest.sh; + # }; + overrideSetup = stdenv: setup: stdenv.regenerate setup; + + + # Return a modified stdenv that uses dietlibc to create small + # statically linked binaries. + useDietLibC = stdenv: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { + NIX_CFLAGS_LINK = "-static"; + + # libcompat.a contains some commonly used functions. + NIX_LDFLAGS = "-lcompat"; + + # These are added *after* the command-line flags, so we'll + # always optimise for size. + NIX_CFLAGS_COMPILE = + (if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "") + + " -Os -s -D_BSD_SOURCE=1"; + + configureFlags = + (if args ? configureFlags then args.configureFlags else "") + + " --disable-shared"; # brrr... + + NIX_GCC = import ../build-support/gcc-wrapper { + inherit stdenv; + libc = dietlibc; + inherit (stdenv.gcc) gcc binutils name nativeTools nativePrefix; + nativeLibc = false; + }; + }); + isDietLibC = true; + } // {inherit fetchurl;}; + + + # Return a modified stdenv that uses klibc to create small + # statically linked binaries. + useKlibc = stdenv: klibc: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { + NIX_CFLAGS_LINK = "-static"; + + # These are added *after* the command-line flags, so we'll + # always optimise for size. + NIX_CFLAGS_COMPILE = + (if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "") + + " -Os -s"; + + configureFlags = + (if args ? configureFlags then args.configureFlags else "") + + " --disable-shared"; # brrr... + + NIX_GCC = runCommand "klibc-wrapper" {} '' + ensureDir $out/bin + ln -s ${klibc}/bin/klcc $out/bin/gcc + ln -s ${klibc}/bin/klcc $out/bin/cc + ensureDir $out/nix-support + echo 'PATH=$PATH:${stdenv.gcc.binutils}/bin' > $out/nix-support/setup-hook + ''; + }); + isKlibc = true; + isStatic = true; + } // {inherit fetchurl;}; + + + # Return a modified stdenv that tries to build statically linked + # binaries. + makeStaticBinaries = stdenv: stdenv // + { mkDerivation = args: stdenv.mkDerivation (args // { + NIX_CFLAGS_LINK = "-static"; + + configureFlags = + (if args ? configureFlags then args.configureFlags else "") + + " --disable-shared"; # brrr... + }); + isStatic = true; + } // {inherit fetchurl;}; + + +} \ No newline at end of file diff --git a/pkgs/tools/archivers/cromfs/default.nix b/pkgs/tools/archivers/cromfs/default.nix index 97293176c6ba..f243bd89d7c0 100644 --- a/pkgs/tools/archivers/cromfs/default.nix +++ b/pkgs/tools/archivers/cromfs/default.nix @@ -1,10 +1,10 @@ {stdenv, fetchurl, pkgconfig, fuse, perl}: stdenv.mkDerivation { - name = "cromfs-1.5.6.2"; + name = "cromfs-1.5.7"; src = fetchurl { - url = http://bisqwit.iki.fi/src/arch/cromfs-1.5.6.2.tar.bz2; - sha256 = "bbe5db623d3c0d2b92fe877d8c8e22a8f8d84210739313bf691d42c05406464d"; + url = http://bisqwit.iki.fi/src/arch/cromfs-1.5.7.tar.bz2; + sha256 = "7df900cd5d2656e0d2a9cdfb6da7dd194eef2e2a34537f7f69a56dc08a0c0deb"; }; patchPhase = ''sed -i 's@/bin/bash@/bin/sh@g' configure; set -x''; diff --git a/pkgs/tools/graphics/cuneiform/default.nix b/pkgs/tools/graphics/cuneiform/default.nix new file mode 100644 index 000000000000..103178fbb396 --- /dev/null +++ b/pkgs/tools/graphics/cuneiform/default.nix @@ -0,0 +1,39 @@ +a : +let + fetchurl = a.fetchurl; + + version = a.lib.getAttr ["version"] "0.6" a; + buildInputs = with a; [ + cmake imagemagick patchelf + ]; +in +rec { + src = fetchurl { + url = "http://launchpad.net/cuneiform-linux/${version}/${version}/+download/cuneiform-${version}.tar.bz2"; + sha256 = "0jgiccimwv1aqp9gzl9937gdlh9zl5qpaygf0n1xcbfd5aqz14ig"; + }; + + inherit buildInputs; + configureFlags = []; + + /* doConfigure should be removed if not needed */ + phaseNames = ["doCmake" "doMakeInstall" "postInstall"]; + + libc = if a.stdenv ? glibc then a.stdenv.glibc else ""; + + doCmake = a.FullDepEntry('' + ensureDir $PWD/builddir + cd builddir + export NIX_LDFLAGS="$NIX_LDFLAGS -ldl -L$out/lib" + cmake .. -DCMAKE_BUILD_TYPE=debug -DCMAKE_INSTALL_PREFIX=$out -DDL_LIB=${libc}/lib + '') ["minInit" "addInputs" "doUnpack" "defEnsureDir"]; + + postInstall = a.FullDepEntry('' + patchelf --set-rpath $out/lib${if a.stdenv.gcc.gcc != null then ":${a.stdenv.gcc.gcc}/lib" else ""} $out/bin/cuneiform + '') ["minInit" "addInputs" "doMakeInstall"]; + + name = "cuneiform-" + version; + meta = { + description = "Cuneiform OCR"; + }; +} diff --git a/pkgs/tools/misc/cgdb/default.nix b/pkgs/tools/misc/cgdb/default.nix new file mode 100644 index 000000000000..71dba9a712f7 --- /dev/null +++ b/pkgs/tools/misc/cgdb/default.nix @@ -0,0 +1,17 @@ +args: +args.stdenv.mkDerivation { + name = "cgdb-0.6.4"; + + src = args.fetchurl { + url = http://prdownloads.sourceforge.net/cgdb/cgdb-0.6.4.tar.gz; + sha256 = "10c03p3bbr1glyw7j2i2sv97riiksw972pdamcqdqrzzfdcly54w"; + }; + + buildInputs =(with args; [readline ncurses]); + + meta = { + description = "curses interface to gdb"; + homepage = http://cgdb.sourceforge.net/; + license ="GPLv2"; + }; +} diff --git a/pkgs/tools/misc/dosfstools/3.00deb.nix b/pkgs/tools/misc/dosfstools/3.00deb.nix deleted file mode 100644 index 59c386da2b2c..000000000000 --- a/pkgs/tools/misc/dosfstools/3.00deb.nix +++ /dev/null @@ -1,34 +0,0 @@ -args : with args; with builderDefs; - let patch = - fetchurl { - url = http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_3.0.0-1.diff.gz; - sha256 = "5ecab7e9cf213b0cc7406649ca59edb9ec6daad2fa454bce423ccb1744fc1336"; - }; - localDefs = builderDefs.passthru.function (rec { - src = /* put a fetchurl here */ - fetchurl { - url = http://ftp.de.debian.org/debian/pool/main/d/dosfstools/dosfstools_3.0.0.orig.tar.gz; - sha256 = "46125aafff40e8215e6aa30087c6c72a82654c8f5fca4878adc1fa26342eab58"; - }; - preBuild = FullDepEntry ('' - gunzip < ${patch} | patch -Np1 - '')["minInit" "doUnpack"]; - - buildInputs = []; - configureFlags = []; - makeFlags = " PREFIX=$out "; - }); - 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"; - inherit src; - }; -} diff --git a/pkgs/tools/misc/dosfstools/default.nix b/pkgs/tools/misc/dosfstools/default.nix new file mode 100644 index 000000000000..43691c227143 --- /dev/null +++ b/pkgs/tools/misc/dosfstools/default.nix @@ -0,0 +1,24 @@ +args : with args; with builderDefs; + let localDefs = builderDefs.passthru.function (rec { + src = /* put a fetchurl here */ + fetchurl { + url = http://www.daniel-baumann.ch/software/dosfstools/dosfstools-3.0.1.tar.bz2; + sha256 = "7fab0de42391277028071d01ff4da83ff9a399408ccf29958cdee62ffe746d45"; + }; + + buildInputs = []; + configureFlags = []; + makeFlags = " PREFIX=$out "; + }); + in with localDefs; +stdenv.mkDerivation rec { + name = "dosfstools-3.01"; + builder = writeScript (name + "-builder") + (textClosure localDefs + ["doMakeInstall" doForceShare doPropagate]); + meta = { + description = "Dosfstools - utilities for vfat file system."; + homepage = "http://www.daniel-baumann.ch/software/dosfstools/"; + inherit src; + }; +} diff --git a/pkgs/tools/misc/syslog-ng/default.nix b/pkgs/tools/misc/syslog-ng/default.nix new file mode 100644 index 000000000000..fa920120bd3b --- /dev/null +++ b/pkgs/tools/misc/syslog-ng/default.nix @@ -0,0 +1,16 @@ +{stdenv, fetchurl, eventlog, pkgconfig, glib}: + +stdenv.mkDerivation rec { + name = "syslog-ng-2.1.3"; + meta = { + homepage = "http://www.balabit.com/network-security/syslog-ng/"; + description = "Next-generation syslogd with advanced networking and filtering capabilities."; + license = "GPLv2"; + }; + src = fetchurl { + url = "http://www.balabit.com/downloads/files/syslog-ng/sources/2.1/src/${name}.tar.gz"; + sha256 = "1m6djxhmihmg09a90gg6mp1ghgk2zm8rcp04shh458433rbzfjb0"; + }; + buildInputs = [eventlog pkgconfig glib]; + configureFlags = "--enable-dynamic-linking"; +} diff --git a/pkgs/tools/networking/aircrack-ng/add-paths.patch b/pkgs/tools/networking/aircrack-ng/add-paths.patch deleted file mode 100644 index 6a79484e92ce..000000000000 --- a/pkgs/tools/networking/aircrack-ng/add-paths.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/src/osdep/linux.c b/src/osdep/linux.c -index 9f3b1ef..ba7e584 100644 ---- a/src/osdep/linux.c -+++ b/src/osdep/linux.c -@@ -235,7 +235,11 @@ static char * wiToolsPath(const char * tool) - "/bin", - "/usr/bin", - "/usr/local/bin", -- "/tmp" -+ "/tmp", -+ "/var/run/current-system/sw/bin", -+ "/var/run/current-system/sw/sbin", -+ "/root/.nix-profile/bin", -+ "/root/.nix-profile/sbin" - }; - - nbelems = sizeof(paths) / sizeof(char *); diff --git a/pkgs/tools/networking/aircrack-ng/default.nix b/pkgs/tools/networking/aircrack-ng/default.nix index 6bedb6bc75b9..a83506efa1c1 100644 --- a/pkgs/tools/networking/aircrack-ng/default.nix +++ b/pkgs/tools/networking/aircrack-ng/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, libpcap, openssl, zlib}: +{stdenv, fetchurl, libpcap, openssl, zlib, wirelesstools}: stdenv.mkDerivation { name = "aircrack-ng-1.0-rc2"; @@ -10,9 +10,10 @@ stdenv.mkDerivation { buildInputs = [libpcap openssl zlib]; - patches = [ ./add-paths.patch ]; - - postPatch = "sed -e 's@^prefix.*@prefix = '$out@ -i common.mak"; + patchPhase = '' + sed -e 's@^prefix.*@prefix = '$out@ -i common.mak + sed -e 's@/usr/local/bin@'${wirelesstools}@ -i src/osdep/linux.c + ''; meta = { description = "Wireless encryption crackign tools"; diff --git a/pkgs/tools/system/which/default.nix b/pkgs/tools/system/which/default.nix index 7420cce0e543..3721c0f0be1a 100644 --- a/pkgs/tools/system/which/default.nix +++ b/pkgs/tools/system/which/default.nix @@ -1,12 +1,16 @@ -{stdenv, fetchurl, readline}: stdenv.mkDerivation { +{stdenv, fetchurl, readline}: + +stdenv.mkDerivation { name = "which-2.20"; + src = fetchurl { url = mirror://gnu/which/which-2.20.tar.gz; sha256 = "1y2p50zadb36izzh2zw4dm5hvdiydqf3qa88l8kav20dcmfbc5yl"; }; buildInputs = [readline]; + + meta = { + homepage = http://ftp.gnu.org/gnu/which/; + }; } - - - diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index d68f51033175..77192bda782c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2,7 +2,10 @@ imports the functions that build the various packages, and calls them with appropriate arguments. The result is a set of all the packages in the Nix Packages collection for some particular - platform. */ + platform. + + You want to get to know where to add a new package ? + Have a look at nixpkgs/maintainers/docs/classification.txt */ { # The system (e.g., `i686-linux') for which to build the packages. @@ -103,103 +106,9 @@ let inherit lib config getConfig; - # Override the compiler in stdenv for specific packages. - overrideGCC = stdenv: gcc: stdenv // - { mkDerivation = args: stdenv.mkDerivation (args // { NIX_GCC = gcc; }); - }; - - # Add some arbitrary packages to buildInputs for specific packages. - # Used to override packages in stenv like Make. Should not be used - # for other dependencies. - overrideInStdenv = stdenv: pkgs: stdenv // - { mkDerivation = args: stdenv.mkDerivation (args // - { buildInputs = (if args ? buildInputs then args.buildInputs else []) ++ pkgs; } - ); - }; - addAttrsToDerivation = extraAttrs: stdenv: stdenv // { mkDerivation = args: stdenv.mkDerivation (args // extraAttrs); }; - # Override the setup script of stdenv. Useful for testing new - # versions of the setup script without causing a rebuild of - # everything. - # - # Example: - # randomPkg = import ../bla { ... - # stdenv = overrideSetup stdenv ../stdenv/generic/setup-latest.sh; - # }; - overrideSetup = stdenv: setup: stdenv.regenerate setup; - - # Return a modified stdenv that uses dietlibc to create small - # statically linked binaries. - useDietLibC = stdenv: stdenv // - { mkDerivation = args: stdenv.mkDerivation (args // { - NIX_CFLAGS_LINK = "-static"; - - # libcompat.a contains some commonly used functions. - NIX_LDFLAGS = "-lcompat"; - - # These are added *after* the command-line flags, so we'll - # always optimise for size. - NIX_CFLAGS_COMPILE = - (if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "") - + " -Os -s -D_BSD_SOURCE=1"; - - configureFlags = - (if args ? configureFlags then args.configureFlags else "") - + " --disable-shared"; # brrr... - - NIX_GCC = import ../build-support/gcc-wrapper { - inherit stdenv; - libc = dietlibc; - inherit (gcc) gcc binutils name nativeTools nativePrefix; - nativeLibc = false; - }; - }); - isDietLibC = true; - } // {inherit fetchurl;}; - - # Return a modified stdenv that uses klibc to create small - # statically linked binaries. - useKlibc = stdenv: klibc: stdenv // - { mkDerivation = args: stdenv.mkDerivation (args // { - NIX_CFLAGS_LINK = "-static"; - - # These are added *after* the command-line flags, so we'll - # always optimise for size. - NIX_CFLAGS_COMPILE = - (if args ? NIX_CFLAGS_COMPILE then args.NIX_CFLAGS_COMPILE else "") - + " -Os -s"; - - configureFlags = - (if args ? configureFlags then args.configureFlags else "") - + " --disable-shared"; # brrr... - - NIX_GCC = runCommand "klibc-wrapper" {} '' - ensureDir $out/bin - ln -s ${klibc}/bin/klcc $out/bin/gcc - ln -s ${klibc}/bin/klcc $out/bin/cc - ensureDir $out/nix-support - echo 'PATH=$PATH:${stdenv.gcc.binutils}/bin' > $out/nix-support/setup-hook - ''; - }); - isKlibc = true; - isStatic = true; - } // {inherit fetchurl;}; - - # Return a modified stdenv that tries to build statically linked - # binaries. - makeStaticBinaries = stdenv: stdenv // - { mkDerivation = args: stdenv.mkDerivation (args // { - NIX_CFLAGS_LINK = "-static"; - - configureFlags = - (if args ? configureFlags then args.configureFlags else "") - + " --disable-shared"; # brrr... - }); - isStatic = true; - } // {inherit fetchurl;}; - # Applying this to an attribute set will cause nix-env to look # inside the set for derivations. recurseIntoAttrs = attrs: attrs // {recurseForDerivations = true;}; @@ -317,6 +226,10 @@ let else stdenv; + inherit (import ../stdenv/adapters.nix {inherit (pkgs) dietlibc fetchurl runCommand;}) + overrideGCC overrideInStdenv overrideSetup + useDietLibC useKlibc makeStaticBinaries; + ### BUILD SUPPORT @@ -472,7 +385,7 @@ let done < graph ''; - + ### TOOLS @@ -480,13 +393,9 @@ let inherit fetchurl stdenv fuse; }; - # It builds, but it has paths pointing to the default profile, - # hardcoded to /nix/var/nix/profiles/default/bin. We need to - # know its dependencies for the executable paths and stop - # using the profiles, pointing directly to the store paths needed. - #aircrackng = import ../tools/networking/aircrack-ng { - # inherit fetchurl stdenv libpcap openssl zlib; - #}; + aircrackng = import ../tools/networking/aircrack-ng { + inherit fetchurl stdenv libpcap openssl zlib wirelesstools; + }; amule = import ../tools/networking/p2p/amule { inherit fetchurl stdenv zlib perl cryptopp gettext libupnp makeWrapper; @@ -527,6 +436,11 @@ let inherit fetchurl stdenv perl; }; + syslogng = import ../tools/misc/syslog-ng { + inherit fetchurl stdenv eventlog pkgconfig; + inherit (gtkLibs) glib; + }; + asciidoc = import ../tools/typesetting/asciidoc { inherit fetchurl stdenv bash python; }; @@ -567,6 +481,10 @@ let inherit fetchurl stdenv; }; + cgdb = import ../tools/misc/cgdb { + inherit fetchurl stdenv ncurses readline; + }; + ccrypt = import ../tools/security/ccrypt { inherit fetchurl stdenv; }; @@ -675,7 +593,7 @@ let gnused groff libxml2 libxslt makeWrapper; }; - dosfstools = composedArgsAndFun (selectVersion ../tools/misc/dosfstools "3.00deb") { + dosfstools = composedArgsAndFun (import ../tools/misc/dosfstools) { inherit builderDefs; }; @@ -683,6 +601,10 @@ let inherit fetchurl stdenv cdrkit m4; }; + eieio = import ../applications/editors/emacs-modes/eieio { + inherit fetchurl stdenv emacs; + }; + enscript = import ../tools/text/enscript { inherit fetchurl stdenv; }; @@ -1206,6 +1128,10 @@ let makeFlags = [" CFLAGS+=-DNOMEMLOCK "]; }); + semantic = import ../applications/editors/emacs-modes/semantic { + inherit fetchurl stdenv emacs eieio; + }; + sharutils = selectVersion ../tools/archivers/sharutils "4.6.3" { inherit fetchurl stdenv; }; @@ -2132,8 +2058,8 @@ let }; # new python and lib proposal - # - adding a python lib to buildinputs should be enough - # (handles .pth files by patching site.py + # - adding a python lib to buildinputs should be enough + # (handles .pth files by patching site.py # while introducing NIX_PYTHON_SITES describing list of modules) # - adding pyCheck = "import foo" test scripts to ensure libraries can be imported # - providing pythonWrapper so that you can run python and import the selected libraries @@ -2722,7 +2648,7 @@ let boostVersionChoice = version: selectVersion ../development/libraries/boost version { inherit fetchurl stdenv icu expat zlib bzip2 python; }; - boost = boostVersionChoice "1.37.0"; + boost = boostVersionChoice "1.38.0"; buddy = import ../development/libraries/buddy { inherit fetchurl stdenv; @@ -2841,6 +2767,10 @@ let inherit fetchurl stdenv; }; + eventlog = import ../development/libraries/eventlog { + inherit fetchurl stdenv; + }; + facile = import ../development/libraries/facile { inherit fetchurl stdenv; # Actually, we don't need this version but we need native-code compilation @@ -2923,6 +2853,10 @@ let inherit (gtkLibs) glib; }; + gav = import ../games/gav { + inherit fetchurl stdenv SDL SDL_image SDL_mixer SDL_net; + }; + gdbm = import ../development/libraries/gdbm { inherit fetchurl stdenv; }; @@ -3527,6 +3461,7 @@ let log4cxx = import ../development/libraries/log4cxx { inherit fetchurl stdenv automake autoconf libtool cppunit libxml2 boost; + inherit apr aprutil db45 expat; }; loudmouth = import ../development/libraries/loudmouth { @@ -3844,6 +3779,11 @@ let inherit postgresql mysql sqlite; }); + vtk = import ../development/libraries/vtk { + inherit stdenv fetchurl cmake mesa; + inherit (xlibs) libX11 xproto libXt; + }; + vxl = import ../development/libraries/vxl { inherit fetchurl stdenv cmake unzip libtiff expat zlib libpng libjpeg; }; @@ -4200,6 +4140,14 @@ let propagatedBuildInputs = [perlCarpClan]; }; + perlBoolean = buildPerlPackage rec { + name = "boolean-0.20"; + src = fetchurl { + url = "mirror://cpan/authors/id/I/IN/INGY/${name}.tar.gz"; + sha256 = "1xqhzy3m2r08my13alff9bzl8b6xgd68312834x0hf33yir3l1yn"; + }; + }; + perlCacheFastMmap = buildPerlPackage { name = "Cache-FastMmap-1.28"; src = fetchurl { @@ -4208,6 +4156,33 @@ let }; }; + perlCaptchaReCAPTCHA = buildPerlPackage rec { + name = "Captcha-reCAPTCHA-0.92"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AN/ANDYA/${name}.tar.gz"; + sha256 = "1fm0fvdy9b7z8k1cyah2qbj0gqlv01chxmqmashwj16198yr7vrc"; + }; + propagatedBuildInputs = [perlHTMLTiny perlLWP]; + buildInputs = [perlTestPod]; + }; + + perlCarpAssert = buildPerlPackage rec { + name = "Carp-Assert-0.20"; + src = fetchurl { + url = "mirror://cpan/authors/id/M/MS/MSCHWERN/${name}.tar.gz"; + sha256 = "1wzy4lswvwi45ybsm65zlq17rrqx84lsd7rajvd0jvd5af5lmlqd"; + }; + }; + + perlCarpAssertMore = buildPerlPackage rec { + name = "Carp-Assert-More-1.12"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PE/PETDANCE/${name}.tar.gz"; + sha256 = "1m9k6z0m10s03x2hnc9mh5d4r8lnczm9bqd54jmnw0wzm4m33lyr"; + }; + propagatedBuildInputs = [perlTestException perlCarpAssert]; + }; + perlCarpClan = buildPerlPackage { name = "Carp-Clan-6.00"; src = fetchurl { @@ -4226,11 +4201,35 @@ let propagatedBuildInputs = [perlCatalystRuntime perlHTTPRequestAsCGI perlDataVisitor]; }; - perlCatalystDevel = buildPerlPackage { - name = "Catalyst-Devel-1.08"; + perlCatalystComponentInstancePerContext = buildPerlPackage rec { + name = "Catalyst-Component-InstancePerContext-0.001001"; src = fetchurl { - url = mirror://cpan/authors/id/M/MR/MRAMBERG/Catalyst-Devel-1.08.tar.gz; - sha256 = "1wc2ysmldxd5bczfy6ijd8pbaq18g3snrg0cjc8k48941k8dcqpc"; + url = "mirror://cpan/authors/id/G/GR/GRODITI/${name}.tar.gz"; + sha256 = "0wfj4vnn2cvk6jh62amwlg050p37fcwdgrn9amcz24z6w4qgjqvz"; + }; + propagatedBuildInputs = [perlCatalystRuntime perlMoose]; + }; + + perlCatalystControllerHTMLFormFu = buildPerlPackage rec { + name = "Catalyst-Controller-HTML-FormFu-0.03007"; + src = fetchurl { + url = "mirror://cpan/authors/id/C/CF/CFRANKS/${name}.tar.gz"; + sha256 = "1vrd79d0nbqkana5q483fgsr41idlfgjhf7fpd3hc056z5nq8iyn"; + }; + propagatedBuildInputs = [ + perlCatalystRuntime perlCatalystActionRenderView perlCatalystViewTT + perlCatalystPluginConfigLoader perlConfigGeneral + perlCatalystComponentInstancePerContext perlMoose + perlRegexpAssemble perlTestWWWMechanize + perlTestWWWMechanizeCatalyst perlHTMLFormFu + ]; + }; + + perlCatalystDevel = buildPerlPackage rec { + name = "Catalyst-Devel-1.10"; + src = fetchurl { + url = "mirror://cpan/authors/id/M/MR/MRAMBERG/${name}.tar.gz"; + sha256 = "19ylkx55gaq9xxxcl4a55284in7hdrr2sb6lqz64daq3xp29n73h"; }; propagatedBuildInputs = [ perlCatalystRuntime perlCatalystActionRenderView @@ -4240,12 +4239,13 @@ let ]; }; - perlCatalystManual = buildPerlPackage { - name = "Catalyst-Manual-5.7013"; + perlCatalystManual = buildPerlPackage rec { + name = "Catalyst-Manual-5.7016"; src = fetchurl { - url = mirror://cpan/authors/id/Z/ZA/ZARQUON/Catalyst-Manual-5.7013.tar.gz; - sha256 = "17n9w7gd2mj8mkw8zv9as0ba3qzwn07js7xgd46avxpcscl2fpqx"; + url = "mirror://cpan/authors/id/H/HK/HKCLARK/${name}.tar.gz"; + sha256 = "0axin80dca3xb0n7frn9w8lj43l7dykpwrf7jj44n1v1kyzw813f"; }; + buildInputs = [perlTestPod perlTestPodCoverage]; }; perlCatalystModelDBICSchema = buildPerlPackage { @@ -4261,11 +4261,11 @@ let ]; }; - perlCatalystRuntime = buildPerlPackage { - name = "Catalyst-Runtime-5.7015"; + perlCatalystRuntime = buildPerlPackage rec{ + name = "Catalyst-Runtime-5.71000"; src = fetchurl { - url = mirror://cpan/authors/id/M/MR/MRAMBERG/Catalyst-Runtime-5.7015.tar.gz; - sha256 = "039c6ipn87lf23y7r7zg0bnga31nqzklrf28p6nd0xkhs1wihfbg"; + url = "mirror://cpan/authors/id/M/MR/MRAMBERG/${name}.tar.gz"; + sha256 = "0j9kwp2ylah0qsvgv08lnv49dlykx94bivwngw3zwn3g9qfbq26c"; }; propagatedBuildInputs = [ perlLWP perlClassAccessor perlClassDataInheritable perlClassInspector @@ -4274,11 +4274,11 @@ let ]; }; - perlCatalystPluginAuthentication = buildPerlPackage { - name = "Catalyst-Plugin-Authentication-0.10006"; + perlCatalystPluginAuthentication = buildPerlPackage rec { + name = "Catalyst-Plugin-Authentication-0.10010"; src = fetchurl { - url = mirror://cpan/authors/id/J/JA/JAYK/Catalyst-Plugin-Authentication-0.10006.tar.gz; - sha256 = "11x5d1l7p8z7q20fj79nlhwbmsab21m56rj5x20jkqfl91jx1l2s"; + url = "mirror://cpan/authors/id/B/BO/BOBTFISH/${name}.tar.gz"; + sha256 = "1jjdmyccsq0k8ysl9ppm7rddf6w4l2yhwjr60c0x4lp5iafzmf4z"; }; propagatedBuildInputs = [perlCatalystRuntime perlCatalystPluginSession]; }; @@ -4328,13 +4328,13 @@ let ]; }; - perlCatalystPluginConfigLoader = buildPerlPackage { - name = "Catalyst-Plugin-ConfigLoader-0.21"; + perlCatalystPluginConfigLoader = buildPerlPackage rec { + name = "Catalyst-Plugin-ConfigLoader-0.22"; src = fetchurl { - url = mirror://cpan/authors/id/B/BR/BRICAS/Catalyst-Plugin-ConfigLoader-0.21.tar.gz; - sha256 = "1wv7j69ddwr8vrc6v4ipymdnv8mr9ak5jwiq0fia85bx9cv9f77j"; + url = "mirror://cpan/authors/id/B/BR/BRICAS/${name}.tar.gz"; + sha256 = "13ir2l0pvjn4myp7wfh2bxcdd4hp0b3ln28mz1kvlshhxl032lqn"; }; - propagatedBuildInputs = [perlCatalystRuntime perlDataVisitor perlConfigAny]; + propagatedBuildInputs = [perlCatalystRuntime perlDataVisitor perlConfigAny perlMROCompat]; }; perlCatalystPluginHTMLWidget = buildPerlPackage { @@ -4346,31 +4346,34 @@ let propagatedBuildInputs = [perlCatalystRuntime perlHTMLWidget]; }; - perlCatalystPluginSession = buildPerlPackage { - name = "Catalyst-Plugin-Session-0.19"; + perlCatalystPluginSession = buildPerlPackage rec{ + name = "Catalyst-Plugin-Session-0.20"; src = fetchurl { - url = mirror://cpan/authors/id/N/NU/NUFFIN/Catalyst-Plugin-Session-0.19.tar.gz; - sha256 = "1gdirzm0fd167cm7ilqjhsw3g8ipfcklkrb0sj1grp9szhs5nlsd"; + url = "mirror://cpan/authors/id/B/BO/BOBTFISH/${name}.tar.gz"; + sha256 = "1p72hf68qi038gayhsxbbx3l3hg7b1njjii510alxqyw3a10y9sj"; }; - propagatedBuildInputs = [perlCatalystRuntime perlTestMockObject perlObjectSignature perlTestDeep]; + propagatedBuildInputs = [ + perlCatalystRuntime perlTestMockObject perlObjectSignature + perlTestDeep perlMROCompat + ]; }; - perlCatalystPluginSessionStateCookie = buildPerlPackage { - name = "Catalyst-Plugin-Session-State-Cookie-0.09"; + perlCatalystPluginSessionStateCookie = buildPerlPackage rec { + name = "Catalyst-Plugin-Session-State-Cookie-0.10"; src = fetchurl { - url = mirror://cpan/authors/id/N/NU/NUFFIN/Catalyst-Plugin-Session-State-Cookie-0.09.tar.gz; - sha256 = "03j2x66vq1ns4m5xlpwxmpnwhwqmg27m9qxm0kqg1a4v12ky9669"; + url = "mirror://cpan/authors/id/B/BO/BOBTFISH/${name}.tar.gz"; + sha256 = "1630shg23cpk6v26fwf7xr53ml1s6l2mgirxw524nmciliczgldj"; }; propagatedBuildInputs = [ perlCatalystRuntime perlCatalystPluginSession perlTestMockObject ]; }; - perlCatalystPluginSessionStoreFastMmap = buildPerlPackage { - name = "Catalyst-Plugin-Session-State-Cookie-0.09"; + perlCatalystPluginSessionStoreFastMmap = buildPerlPackage rec { + name = "Catalyst-Plugin-Session-Store-FastMmap-0.06"; src = fetchurl { - url = mirror://cpan/authors/id/K/KA/KARMAN/Catalyst-Plugin-Session-Store-FastMmap-0.05.tar.gz; - sha256 = "0k1x9fbixlb20bw5rym27ariss6rwbp06rd4znr979l7r571fy3p"; + url = "mirror://cpan/authors/id/K/KA/KARMAN/${name}.tar.gz"; + sha256 = "0by8w1zbp2802f9n3sqp0cmm2q0pwnycf0jgzvvv75riicq1m9pn"; }; propagatedBuildInputs = [ perlPathClass perlCatalystPluginSession perlCacheFastMmap @@ -4440,11 +4443,11 @@ let propagatedBuildInputs = [perlClassAccessor]; }; - perlClassAccessorGrouped = buildPerlPackage { - name = "Class-Accessor-Grouped-0.08001"; + perlClassAccessorGrouped = buildPerlPackage rec { + name = "Class-Accessor-Grouped-0.08002"; src = fetchurl { - url = mirror://cpan/authors/id/C/CL/CLACO/Class-Accessor-Grouped-0.08001.tar.gz; - sha256 = "15hwk5w4xxw5zr3yzp8ib93mja6xwsknasfb1jsa6a4k0r7xmq3f"; + url = "mirror://cpan/authors/id/C/CL/CLACO/${name}.tar.gz"; + sha256 = "0y7dqf0k5zh8azkb181k1zbbcy14rhfd55yddhccbfp6v44yl7yr"; }; propagatedBuildInputs = [perlClassInspector perlMROCompat]; }; @@ -4457,11 +4460,11 @@ let }; }; - perlClassC3 = buildPerlPackage { - name = "Class-C3-0.19"; + perlClassC3 = buildPerlPackage rec { + name = "Class-C3-0.20"; src = fetchurl { - url = mirror://cpan/authors/id/B/BL/BLBLACK/Class-C3-0.19.tar.gz; - sha256 = "1sn3s2ibdgwzirn3vl0s458qqncg76fxpqzcmyjmxy1kbdmjy01s"; + url = "mirror://cpan/authors/id/F/FL/FLORA/${name}.tar.gz"; + sha256 = "1xmd77ghxgn4yjd25z25df0isaz3k3b685q151x0f3537kl8cln3"; }; }; @@ -4490,6 +4493,14 @@ let }; }; + perlClassFactoryUtil = buildPerlPackage rec { + name = "Class-Factory-Util-1.7"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "09ifd6v0c94vr20n9yr1dxgcp7hyscqq851szdip7y24bd26nlbc"; + }; + }; + perlClassInspector = buildPerlPackage { name = "Class-Inspector-1.23"; src = fetchurl { @@ -4498,6 +4509,26 @@ let }; }; + perlClassMOP = buildPerlPackage rec { + name = "Class-MOP-0.76"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "0hya7hyz80d65vf1llanasg0gszgjyc52842xxzgqhy4vvnwviyy"; + }; + propagatedBuildInputs = [ + perlMROCompat perlTaskWeaken perlTestException perlSubName perlSubIdentify + perlDevelGlobalDestruction + ]; + }; + + perlClassSingleton = buildPerlPackage rec { + name = "Class-Singleton-1.4"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AB/ABW/${name}.tar.gz"; + sha256 = "0l4iwwk91wm2mrrh4irrn6ham9k12iah1ry33k0lzq22r3kwdbyg"; + }; + }; + perlClassThrowable = buildPerlPackage { name = "Class-Throwable-0.10"; src = fetchurl { @@ -4515,12 +4546,19 @@ let propagatedBuildInputs = [perlClassInspector]; }; - perlCompressZlib = buildPerlPackage { - name = "Compress-Zlib-1.41"; + perlCompressRawZlib = import ../development/perl-modules/Compress-Raw-Zlib { + inherit fetchurl buildPerlPackage zlib; + }; + + perlCompressZlib = buildPerlPackage rec { + name = "Compress-Zlib-2.015"; src = fetchurl { - url = http://nixos.org/tarballs/Compress-Zlib-1.41.tar.gz; - md5 = "ac135b84a03e814734496777cf5e5722"; + url = "mirror://cpan/authors/id/P/PM/PMQS/${name}.tar.gz"; + sha256 = "1k1i539fszhxay8yllh687sw06i68g8ikw51pvy1c84p3kg6yk4v"; }; + propagatedBuildInputs = [ + perlCompressRawZlib perlIOCompressBase perlIOCompressGzip + ]; }; perlConfigAny = buildPerlPackage { @@ -4547,6 +4585,23 @@ let }; }; + perlCryptCBC = buildPerlPackage rec { + name = "Crypt-CBC-2.30"; + src = fetchurl { + url = "mirror://cpan/authors/id/L/LD/LDS/${name}.tar.gz"; + sha256 = "0cvigpxvwn18kb5i40jlp5fgijbhncvlh23xdgs1cnhxa17yrgwx"; + }; + }; + + perlCryptDES = buildPerlPackage rec { + name = "Crypt-DES-2.05"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DP/DPARIS/${name}.tar.gz"; + sha256 = "1w12k1b7868v3ql0yprswlz2qri6ja576k9wlda7b8zf2d0rxgmp"; + }; + buildInputs = [perlCryptCBC]; + }; + perlCryptPasswordMD5 = buildPerlPackage { name = "Crypt-PasswdMD5-1.3"; src = fetchurl { @@ -4572,6 +4627,15 @@ let propagatedBuildInputs = [perlTestException]; }; + perlDataOptList = buildPerlPackage rec { + name = "Data-OptList-0.104"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RJ/RJBS/${name}.tar.gz"; + sha256 = "1k1qvf3ik2rn9mg65ginv3lyy6dlg1z08yddcnzbnizs8vbqqaxd"; + }; + propagatedBuildInputs = [perlSubInstall perlParamsUtil]; + }; + perlDataPage = buildPerlPackage { name = "Data-Page-2.01"; src = fetchurl { @@ -4610,6 +4674,69 @@ let }; }; + perlDateTime = buildPerlPackage rec { + name = "DateTime-0.4501"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "1hqhc4xfjgcc1r488gjbi498ws3pxiayabl46607lq02qddcv57s"; + }; + propagatedBuildInputs = [perlDateTimeLocale perlDateTimeTimeZone]; + }; + + perlDateTimeFormatBuilder = buildPerlPackage rec { + name = "DateTime-Format-Builder-0.7901"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "08zl89gh5lkff8736fkdnrf6dgppsjbmymnysbc06s7igd4ig8zf"; + }; + propagatedBuildInputs = [ + perlDateTime perlParamsValidate perlTaskWeaken perlDateTimeFormatStrptime + perlClassFactoryUtil + ]; + buildInputs = [perlTestPod]; + }; + + perlDateTimeFormatNatural = buildPerlPackage rec { + name = "DateTime-Format-Natural-0.74"; + src = fetchurl { + url = "mirror://cpan/authors/id/S/SC/SCHUBIGER/${name}.tar.gz"; + sha256 = "0hq33s5frfa8cpj2al7qi0sbmimm5sdlxf0h3b57fjm9x5arlkcn"; + }; + propagatedBuildInputs = [ + perlDateTime perlListMoreUtils perlParamsValidate perlDateCalc + perlTestMockTime perlBoolean + ]; + }; + + perlDateTimeFormatStrptime = buildPerlPackage rec { + name = "DateTime-Format-Strptime-1.0800"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RI/RICKM/${name}.tgz"; + sha256 = "10vsmwlhnc62krsh5fm2i0ya7bgjgjsm6nmj56f0bfifjh57ya1j"; + }; + propagatedBuildInputs = [ + perlDateTime perlDateTimeLocale perlDateTimeTimeZone perlParamsValidate + ]; + }; + + perlDateTimeLocale = buildPerlPackage rec { + name = "DateTime-Locale-0.42"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "1cvp9a4j6vy3xpbv6ipzcz1paw7gzal7lkrbm5ipiilji47d5gaw"; + }; + propagatedBuildInputs = [perlListMoreUtils perlParamsValidate]; + }; + + perlDateTimeTimeZone = buildPerlPackage rec { + name = "DateTime-TimeZone-0.84"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "0jwbldr3x1cl2ibd9dcshdmpg6s5ddc4qiaxcxyqc82cq09ah2vs"; + }; + propagatedBuildInputs = [perlClassSingleton perlParamsValidate]; + }; + perlDBDSQLite = import ../development/perl-modules/DBD-SQLite { inherit fetchurl buildPerlPackage perlDBI sqlite; }; @@ -4626,11 +4753,11 @@ let }; }; - perlDBIxClass = buildPerlPackage { - name = "DBIx-Class-0.08099_05"; + perlDBIxClass = buildPerlPackage rec { + name = "DBIx-Class-0.08011"; src = fetchurl { - url = mirror://cpan/authors/id/R/RI/RIBASUSHI/DBIx-Class-0.08099_05.tar.gz; - sha256 = "143sp6walr9gmnk0caxidhnzciixawihkiwm7vf9clbdhhrn39zj"; + url = "mirror://cpan/authors/id/R/RI/RIBASUSHI/${name}.tar.gz"; + sha256 = "0bdp2hqbxdn0xzjja0wcynwvq36z2vwz7yx5w34s82g59pmf5dbx"; }; propagatedBuildInputs = [ perlTestNoWarnings perlTestException perlDBI perlScopeGuard @@ -4639,22 +4766,24 @@ let perlSQLAbstractLimit perlClassC3 perlClassC3Componentised perlModuleFind perlDBDSQLite perlJSONAny perlSubName ]; + buildInputs = [perlTestPod perlTestPodCoverage]; + doCheck = false; /* it says "8 subtests UNEXPECTEDLY SUCCEEDED" */ }; - perlDBIxClassHTMLWidget = buildPerlPackage { - name = "DBIx-Class-HTMLWidget"; + perlDBIxClassHTMLWidget = buildPerlPackage rec { + name = "DBIx-Class-HTMLWidget-0.16"; src = fetchurl { - url = http://search.cpan.org/CPAN/authors/id/A/AN/ANDREMAR/DBIx-Class-HTMLWidget-0.16.tar.gz; + url = "mirror://cpan/authors/id/A/AN/ANDREMAR/${name}.tar.gz"; sha256 = "05zhniyzl31nq410ywhxm0vmvac53h7ax42hjs9mmpvf45ipahj1"; }; propagatedBuildInputs = [perlDBIxClass perlHTMLWidget]; }; - perlDBIxClassSchemaLoader = buildPerlPackage { + perlDBIxClassSchemaLoader = buildPerlPackage rec { name = "DBIx-Class-Schema-Loader-0.04005"; src = fetchurl { - url = mirror://cpan/authors/id/I/IL/ILMARI/DBIx-Class-Schema-Loader-0.04999_06.tar.gz; - sha256 = "169ydwjarq6qk48jdxcn5ks8rx9aksk9fnx07gl5mz7banw5cs6y"; + url = "mirror://cpan/authors/id/I/IL/ILMARI/${name}.tar.gz"; + sha256 = "1adymxsh1q7y1d3x25mar1rz6nshag16h6bfzhwy0w50qd2vvx9l"; }; propagatedBuildInputs = [ perlDBI perlDBDSQLite perlDataDump perlUNIVERSALrequire @@ -4664,12 +4793,32 @@ let ]; }; - perlDevelStackTrace = buildPerlPackage { - name = "Devel-StackTrace-1.1902"; + perlDevelGlobalDestruction = buildPerlPackage rec { + name = "Devel-GlobalDestruction-0.02"; src = fetchurl { - url = mirror://cpan/authors/id/D/DR/DROLSKY/Devel-StackTrace-1.1902.tar.gz; - sha256 = "0llkvmpdcbqhw28ck0gzw4jlc2zbz7sx3dqscysdc05nk2fd3iax"; + url = "mirror://cpan/authors/id/N/NU/NUFFIN/${name}.tar.gz"; + sha256 = "174m5dx2z89h4308gx6s6vmg93qzaq0bh9m91hp2vqbyialnarhw"; }; + propagatedBuildInputs = [perlSubExporter perlScopeGuard]; + }; + + perlDevelStackTrace = buildPerlPackage rec { + name = "Devel-StackTrace-1.20"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "15zh9gzhw6gv7l6sklp02pfmiiv8kwmmjsyvirppsca6aagy4603"; + }; + }; + + perlDevelSymdump = buildPerlPackage rec { + name = "Devel-Symdump-2.08"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AN/ANDK/${name}.tar.gz"; + sha256 = "0qzj68zw1yypk8jw77h0w5sdpdcrp4xcmgfghcfyddjr2aim60x5"; + }; + propagatedBuildInputs = [ + perlTestPod /* cyclic dependency: perlTestPodCoverage */ + ]; }; perlDigestHMAC = buildPerlPackage { @@ -4721,6 +4870,7 @@ let sha256 = "13yfjll63cp1y4xqzdcr1mjhfncn48v6hckk5mvwi47w3ccj934a"; }; propagatedBuildInputs = [perlMailTools perlNetDNS]; + doCheck = false; }; perlEncode = buildPerlPackage { @@ -4729,7 +4879,6 @@ let url = mirror://cpan/authors/id/D/DA/DANKOGAI/Encode-2.25.tar.gz; sha256 = "0prwmbg3xh1lqskianwrfrgasdfmz4kjm3qpdm27ay110jkk25ak"; }; - propagatedBuildInputs = []; }; perlExtUtilsInstall = buildPerlPackage { @@ -4747,7 +4896,6 @@ let url = mirror://cpan/authors/id/M/MS/MSCHWERN/ExtUtils-MakeMaker-6.44.tar.gz; sha256 = "0zyypnlmmyp06qbfdpc14rp5rj63066mjammn6rlcqz2iil9mpcj"; }; - propagatedBuildInputs = []; }; perlExtUtilsManifest = buildPerlPackage { @@ -4756,7 +4904,6 @@ let url = mirror://cpan/authors/id/R/RK/RKOBES/ExtUtils-Manifest-1.53.tar.gz; sha256 = "0xgfzivw0dfy29ydfjkg0c9mvlhjvlhc54s0yvbb4sxb2mdvrfkp"; }; - propagatedBuildInputs = []; }; perlFilechdir = buildPerlPackage { @@ -4765,7 +4912,6 @@ let url = mirror://cpan/authors/id/D/DA/DAGOLDEN/File-chdir-0.1002.tar.gz; sha256 = "1fc2l754bxsizli3injm4wqf8dn03iq16rmfn62l99nxpibl5k6p"; }; - propagatedBuildInputs = []; }; perlFileCopyRecursive = buildPerlPackage { @@ -4784,13 +4930,21 @@ let }; }; + perlFileShareDir = buildPerlPackage rec { + name = "File-ShareDir-1.00"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AD/ADAMK/${name}.tar.gz"; + sha256 = "1afr1r1ys2ij8i4r0i85hfrgrbvcha8c7cgkhcrdya1f0lnpw59z"; + }; + propagatedBuildInputs = [perlClassInspector perlParamsUtil]; + }; + perlFileTemp = buildPerlPackage { name = "File-Temp-0.20"; src = fetchurl { url = mirror://cpan/authors/id/T/TJ/TJENNESS/File-Temp-0.20.tar.gz; sha256 = "0n7lr7mpdvwgznw469qdpdmac627a26wp615dkpzanc452skad4v"; }; - propagatedBuildInputs = []; }; perlFreezeThaw = buildPerlPackage { @@ -4799,7 +4953,24 @@ let url = mirror://cpan/authors/id/I/IL/ILYAZ/modules/FreezeThaw-0.43.tar.gz; sha256 = "1qamc5aggp35xk590a4hy660f2rhc2l7j65hbyxdya9yvg7z437l"; }; - propagatedBuildInputs = []; + }; + + perlHTMLFormFu = buildPerlPackage rec { + name = "HTML-FormFu-0.03007"; + src = fetchurl { + url = "mirror://cpan/authors/id/C/CF/CFRANKS/${name}.tar.gz"; + sha256 = "03lc4pvygp4wn9rsgdkbwk8zkh8x2z5vp8613c6q74imwrfmmfqy"; + }; + propagatedBuildInputs = [ + perlClassAccessorChained perlClassC3 perlConfigAny + perlDateCalc perlListMoreUtils perlLWP perlEmailValid + perlDataVisitor perlDateTime perlDateTimeFormatBuilder + perlDateTimeFormatStrptime perlDateTimeFormatNatural + perlReadonly perlYAMLSyck perlRegexpCopy + perlHTMLTokeParserSimple perlTestNoWarnings perlRegexpCommon + perlCaptchaReCAPTCHA perlHTMLScrubber perlFileShareDir + perlTemplateToolkit perlCryptCBC perlCryptDES + ]; }; perlHTMLParser = buildPerlPackage { @@ -4828,6 +4999,24 @@ let }; }; + perlHTMLTiny = buildPerlPackage rec { + name = "HTML-Tiny-1.03"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AN/ANDYA/${name}.tar.gz"; + sha256 = "1nc9vr0z699jwv8jaxxpkfhspiv7glhdp500hqyzdm2jxfw8azrg"; + }; + }; + + perlHTMLTokeParserSimple = buildPerlPackage rec { + name = "HTML-TokeParser-Simple-3.15"; + src = fetchurl { + url = "mirror://cpan/authors/id/O/OV/OVID/${name}.tar.gz"; + sha256 = "0ii1ww17h7wps1lcj7bxrjbisa37f6cvlm0xxpgfq1s6iy06q05b"; + }; + propagatedBuildInputs = [perlHTMLParser perlSubOverride]; + buildInputs = [perlTestPod]; + }; + perlHTMLTree = buildPerlPackage { name = "HTML-Tree-3.23"; src = fetchurl { @@ -4850,12 +5039,13 @@ let ]; }; - perlHTTPBody = buildPerlPackage { - name = "HTTP-Body-1.04"; + perlHTTPBody = buildPerlPackage rec { + name = "HTTP-Body-1.05"; src = fetchurl { - url = mirror://cpan/authors/id/A/AG/AGRUNDMA/HTTP-Body-1.04.tar.gz; - sha256 = "11qxfv2p2bzd5xnl0ypy8l3frssszwrxafipm1fm36sxay2v71js"; + url = "mirror://cpan/authors/id/A/AG/AGRUNDMA/${name}.tar.gz"; + sha256 = "0s0496sb9l8jfkdx86vahwgdaaxrqb0j6acyww6nk0ajh82qrzfv"; }; + propagatedBuildInputs = [perlLWP perlYAML]; }; perlHTTPRequestAsCGI = buildPerlPackage { @@ -4867,13 +5057,48 @@ let propagatedBuildInputs = [perlClassAccessor perlLWP]; }; + perlHTTPResponseEncoding = buildPerlPackage rec { + name = "HTTP-Response-Encoding-0.05"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DA/DANKOGAI/${name}.tar.gz"; + sha256 = "04gdl633g0s2ckn7zixcma2krbpfcd46jngg155qpdx5sdwfkm16"; + }; + propagatedBuildInputs = [perlLWP]; + }; + + perlHTTPServerSimple = buildPerlPackage rec { + name = "HTTP-Server-Simple-0.38"; + src = fetchurl { + url = "mirror://cpan/authors/id/J/JE/JESSE/${name}.tar.gz"; + sha256 = "1m1lmpbg0zhiv2vyc3fyyqfsv3jhhb2mbdl5624fqb0va2pnla6n"; + }; + propagatedBuildInputs = [perlURI]; + doCheck = false; + }; + perlI18NLangTags = buildPerlPackage { name = "I18N-LangTags-0.35"; src = fetchurl { url = mirror://cpan/authors/id/S/SB/SBURKE/I18N-LangTags-0.35.tar.gz; sha256 = "0idwfi7k8l44d9akpdj6ygdz3q8zxr690m18s7w23ms9d55bh3jy"; }; - propagatedBuildInputs = []; + }; + + perlIOCompressBase = buildPerlPackage rec { + name = "IO-Compress-Base-2.015"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PM/PMQS/${name}.tar.gz"; + sha256 = "10njlwa50mhs5nqws5yidfmmb7hwmwc6x06gk2vnpyn82g3szgqd"; + }; + }; + + perlIOCompressGzip = buildPerlPackage rec { + name = "IO-Compress-Zlib-2.015"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PM/PMQS/${name}.tar.gz"; + sha256 = "0sbnx6xdryaajwpssrfgm5b2zasa4ri8pihqwsx3rm5kmkgzy9cx"; + }; + propagatedBuildInputs = [perlIOCompressBase perlCompressRawZlib]; }; perlIODigest = buildPerlPackage { @@ -4893,12 +5118,13 @@ let }; }; - perlIPCRun = buildPerlPackage { - name = "IPC-Run-0.80"; + perlIPCRun = buildPerlPackage rec { + name = "IPC-Run-0.82"; src = fetchurl { - url = mirror://cpan/authors/id/R/RS/RSOD/IPC-Run-0.80.tar.gz; - sha256 = "1lb0skp093ikkjg125l2f8lw7jzawmy4x7h1azgcs0d5miy8apj4"; + url = "mirror://cpan/authors/id/A/AD/ADAMK/${name}.tar.gz"; + sha256 = "1v5yfavvhxscqkdl68xs7i7vcp9drl3y1iawppzwqcl1fprd58ip"; }; + doCheck = false; /* attempts a network connection to localhost */ }; perlJSON = buildPerlPackage { @@ -4984,14 +5210,13 @@ let url = mirror://cpan/authors/id/A/AU/AUDREYT/Locale-Maketext-Simple-0.18.tar.gz; sha256 = "14kx7vkxyfqndy90rzavrjp2346aidyc7x5dzzdj293qf8s4q6ig"; }; - propagatedBuildInputs = []; }; - perlLWP = buildPerlPackage { - name = "libwww-perl-5.819"; + perlLWP = buildPerlPackage rec { + name = "libwww-perl-5.823"; src = fetchurl { - url = mirror://cpan/authors/id/G/GA/GAAS/libwww-perl-5.819.tar.gz; - sha256 = "6bc03e9e88213add8436fed020509a7126c6b79c330c3c115cb696fa3b5373ae"; + url = "mirror://cpan/authors/id/G/GA/GAAS/${name}.tar.gz"; + sha256 = "1pz65p02dcy1yf4l1zhhwjmnh6fvf8q71nsmhjpc5lydsf35h1ql"; }; propagatedBuildInputs = [perlURI perlHTMLParser perlHTMLTagset]; }; @@ -5031,6 +5256,18 @@ let }; }; + perlMoose = buildPerlPackage rec { + name = "Moose-0.68"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "0ncpa8v0yv7lkn108943sjll3gps5nkzn6a51ngvqq1rnsd34ar1"; + }; + propagatedBuildInputs = [ + perlTestMore perlTestException perlTaskWeaken perlListMoreUtils + perlClassMOP perlSubExporter + ]; + }; + perlMouse = buildPerlPackage { name = "Mouse-0.09"; src = fetchurl { @@ -5063,6 +5300,7 @@ let sha256 = "1pswrwhkav051xahm3k4cbyhi8kqpfmaz85lw44kwi2wc7mz4prk"; }; propagatedBuildInputs = [perlNetIP perlDigestHMAC]; + doCheck = false; }; perlNetIP = buildPerlPackage { @@ -5081,6 +5319,22 @@ let }; }; + perlParamsUtil = buildPerlPackage rec { + name = "Params-Util-0.37"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AD/ADAMK/${name}.tar.gz"; + sha256 = "1n36vhahbs2mfck5x6g8ab9280zji9zwc5092jiq78s791227cb6"; + }; + }; + + perlParamsValidate = buildPerlPackage rec { + name = "Params-Validate-0.91"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DR/DROLSKY/${name}.tar.gz"; + sha256 = "1j0hx3pbfdyggbhrawa9k0wdm6lln3zdkrhjrdg1hzzf6csrlc1v"; + }; + }; + perlParent = buildPerlPackage { name = "parent-0.221"; src = fetchurl { @@ -5103,7 +5357,6 @@ let url = mirror://cpan/authors/id/A/AU/AUDREYT/PerlIO-eol-0.14.tar.gz; sha256 = "1rwj0r075jfvvd0fnzgdqldc7qdb94wwsi21rs2l6yhcv0380fs2"; }; - propagatedBuildInputs = []; }; perlPerlIOviadynamic = buildPerlPackage { @@ -5112,7 +5365,6 @@ let url = mirror://cpan/authors/id/C/CL/CLKAO/PerlIO-via-dynamic-0.12.tar.gz; sha256 = "140hay9q8q9sz1fa2s57ijp5l2448fkcg7indgn6k4vc7yshmqz2"; }; - propagatedBuildInputs = []; }; perlPerlIOviasymlink = buildPerlPackage { @@ -5121,7 +5373,6 @@ let url = mirror://cpan/authors/id/C/CL/CLKAO/PerlIO-via-symlink-0.05.tar.gz; sha256 = "0lidddcaz9anddqrpqk4zwm550igv6amdhj86i2jjdka9b1x81s1"; }; - propagatedBuildInputs = []; }; perlModulePluggable = buildPerlPackage { @@ -5145,6 +5396,15 @@ let propagatedBuildInputs = [perlUNIVERSALrequire]; }; + perlPodCoverage = buildPerlPackage rec { + name = "Pod-Coverage-0.19"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RC/RCLAMP/${name}.tar.gz"; + sha256 = "1krsz4zwmnmq3z29p5vmyr5fdzrn8v0sg6rf3qxk7xpxw4z5np84"; + }; + propagatedBuildInputs = [perlDevelSymdump]; + }; + perlPodEscapes = buildPerlPackage { name = "Pod-Escapes-1.04"; src = fetchurl { @@ -5162,6 +5422,38 @@ let propagatedBuildInputs = [perlconstant perlPodEscapes]; }; + perlReadonly = buildPerlPackage rec { + name = "Readonly-1.03"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RO/ROODE/${name}.tar.gz"; + sha256 = "1shkyxajh6l87nif47ygnfxjwvqf3d3kjpdvxaff4957vqanii2k"; + }; + }; + + perlRegexpAssemble = buildPerlPackage rec { + name = "Regexp-Assemble-0.34"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DL/DLAND/${name}.tar.gz"; + sha256 = "173dnzi3dag88afr4xf5v0hki15cfaffyjimjfmvzv6gbx6fp96f"; + }; + }; + + perlRegexpCommon = buildPerlPackage rec { + name = "Regexp-Common-2.122"; + src = fetchurl { + url = "mirror://cpan/authors/id/A/AB/ABIGAIL/${name}.tar.gz"; + sha256 = "1mi411nfsx58nfsgjsbyck50x9d0yfvwqpw63iavajlpx1z38n8r"; + }; + }; + + perlRegexpCopy = buildPerlPackage rec { + name = "Regexp-Copy-0.06"; + src = fetchurl { + url = "mirror://cpan/authors/id/J/JD/JDUNCAN/${name}.tar.gz"; + sha256 = "09c8xb43p1s6ala6g4274az51mf33phyjkp66dpvgkgbi1xfnawp"; + }; + }; + perlReturnValue = buildPerlPackage { name = "Return-Value-1.302"; src = fetchurl { @@ -5194,13 +5486,16 @@ let }; }; - perlSQLAbstractLimit = buildPerlPackage { - name = "SQL-Abstract-Limit-0.12"; + perlSQLAbstractLimit = buildPerlPackage rec { + name = "SQL-Abstract-Limit-0.141"; src = fetchurl { - url = mirror://cpan/authors/id/D/DA/DAVEBAIRD/SQL-Abstract-Limit-0.12.tar.gz; - sha256 = "1b8663l7myc54k40xmyq003v6xs1y6bhdm1jpahrv44wzcl60n7z"; + url = "mirror://cpan/authors/id/D/DA/DAVEBAIRD/${name}.tar.gz"; + sha256 = "1qqh89kz065mkgyg5pjcgbf8qcpzfk8vf1lgkbwynknadmv87zqg"; }; - propagatedBuildInputs = [perlSQLAbstract perlTestException perlDBI]; + propagatedBuildInputs = [ + perlSQLAbstract perlTestException perlDBI perlTestDeep + ]; + buildInputs = [perlTestPod perlTestPodCoverage]; }; perlStringMkPasswd = buildPerlPackage { @@ -5211,6 +5506,31 @@ let }; }; + perlSubExporter = buildPerlPackage rec { + name = "Sub-Exporter-0.982"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RJ/RJBS/${name}.tar.gz"; + sha256 = "0xf8q05k5xs3bw6qy3pnnl5d670njxsxbw2dprl7n50hf488cbvj"; + }; + propagatedBuildInputs = [perlSubInstall perlDataOptList perlParamsUtil]; + }; + + perlSubIdentify = buildPerlPackage rec { + name = "Sub-Identify-0.04"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RG/RGARCIA/${name}.tar.gz"; + sha256 = "16g4dkmb4h5hh15jsq0kvsf3irrlrlqdv7qk6605wh5gjjwbcjxy"; + }; + }; + + perlSubInstall = buildPerlPackage rec { + name = "Sub-Install-0.925"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RJ/RJBS/${name}.tar.gz"; + sha256 = "1sccc4nwp9y24zkr42ww2gwg6zwax4madi9spsdym1pqna3nwnm6"; + }; + }; + perlSubName = buildPerlPackage { name = "Sub-Name-0.04"; src = fetchurl { @@ -5219,6 +5539,15 @@ let }; }; + perlSubOverride = buildPerlPackage rec { + name = "Sub-Override-0.08"; + src = fetchurl { + url = "mirror://cpan/authors/id/O/OV/OVID/${name}.tar.gz"; + sha256 = "13s5zi6qz02q50vv4bmwdmhn9gvg0988fydjlrrv500g6hnyzlkj"; + }; + propagatedBuildInputs = [perlSubUplevel perlTestException]; + }; + perlSubUplevel = buildPerlPackage { name = "Sub-Uplevel-0.2002"; src = fetchurl { @@ -5254,16 +5583,17 @@ let propagatedBuildInputs = [subversion]; }; - perlTaskCatalystTutorial = buildPerlPackage { - name = "Task-Catalyst-Tutorial"; + perlTaskCatalystTutorial = buildPerlPackage rec { + name = "Task-Catalyst-Tutorial-0.05"; src = fetchurl { - url = mirror://cpan/authors/id/J/JR/JROCKWAY/Task-Catalyst-Tutorial-0.03.tar.gz; - sha256 = "1f9nqg8h455s8dah482hf78i3h2bilji26i5m3lzr2cxws98lsak"; + url = "mirror://cpan/authors/id/M/MS/MSTROUT/${name}.tar.gz"; + sha256 = "0mqn64bspz1rq6m62yvy1gvmm0swz8xfhh8rg2p024v7g2qcyiy8"; }; propagatedBuildInputs = [ - perlCatalystRuntime perlCatalystManual perlCatalystDevel + perlCatalystManual perlCatalystRuntime perlCatalystDevel perlCatalystPluginSession perlCatalystPluginAuthentication perlCatalystPluginAuthenticationStoreDBIC + perlCatalystPluginAuthenticationStoreDBIxClass perlCatalystPluginAuthorizationRoles perlCatalystPluginAuthorizationACL perlCatalystPluginHTMLWidget @@ -5271,10 +5601,9 @@ let perlCatalystPluginStackTrace perlCatalystViewTT perlDBIxClass perlDBIxClassHTMLWidget + perlCatalystControllerHTMLFormFu ]; - preConfigure = '' - substituteInPlace Makefile.PL --replace "'Catalyst::Manual' => 0," "" - ''; + buildInputs = [perlTestPodCoverage]; }; perlTaskWeaken = buildPerlPackage { @@ -5322,7 +5651,6 @@ let sha256 = "0cdl08k5v0wc9w20va5qw98ynlbs9ifwndgsix8qhi7h15sj8a5j"; }; propagatedBuildInputs = [perlTestTester perlTestNoWarnings]; - postInstall = "ensureDir $out/lib/site_perl; mv $out/lib/5.* $out/lib/site_perl"; }; perlTestException = buildPerlPackage { @@ -5342,6 +5670,14 @@ let }; }; + perlTestLongString = buildPerlPackage rec { + name = "Test-LongString-0.11"; + src = fetchurl { + url = "mirror://cpan/authors/id/R/RG/RGARCIA/${name}.tar.gz"; + sha256 = "0ln3117nfxzq7yxmfk77nnr7116inbjq4bf5v2p0hqlj4damx03d"; + }; + }; + perlTestMockObject = buildPerlPackage { name = "Test-MockObject-1.09"; src = fetchurl { @@ -5351,6 +5687,16 @@ let propagatedBuildInputs = [perlTestException perlUNIVERSALisa perlUNIVERSALcan]; }; + perlTestMockTime = buildPerlPackage rec { + name = "Test-MockTime-0.09"; + src = fetchurl { + url = "mirror://cpan/authors/id/D/DD/DDICK/${name}.tar.gz"; + sha256 = "1j2riyikzyfkxsgkfdqirs7xa8q5d06b9klpk7l9sgydwqdvxdv3"; + }; + }; + + perlTestMore = perlTestSimple; + perlTestNoWarnings = buildPerlPackage { name = "Test-NoWarnings-0.084"; src = fetchurl { @@ -5368,6 +5714,15 @@ let }; }; + perlTestPodCoverage = buildPerlPackage rec { + name = "Test-Pod-Coverage-1.08"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PE/PETDANCE/${name}.tar.gz"; + sha256 = "0y2md932zhbxdjwzskx0vmw2qy7jxkn87f9lb5h3f3vxxg1kcqz0"; + }; + propagatedBuildInputs = [perlPodCoverage]; + }; + perlTestSimple = buildPerlPackage { name = "Test-Simple-0.84"; src = fetchurl { @@ -5375,7 +5730,6 @@ let sha256 = "030j47q3p46jfk60dsh2d5m7ip4nqz0fl4inqr8hx8b8q0f00r4l"; }; propagatedBuildInputs = [perlTestHarness]; - postInstall = "ensureDir $out/lib/site_perl; mv $out/lib/5.* $out/lib/site_perl"; }; perlTestTester = buildPerlPackage { @@ -5384,7 +5738,6 @@ let url = mirror://cpan/authors/id/F/FD/FDALY/Test-Tester-0.107.tar.gz; sha256 = "0qgmsl6s6xm39211lywyzwrlz0gcmax7fb8zipybs9yxfmwcvyx2"; }; - postInstall = "ensureDir $out/lib/site_perl; mv $out/lib/5.* $out/lib/site_perl"; }; perlTestWarn = buildPerlPackage { @@ -5394,6 +5747,33 @@ let sha256 = "1y9g13bzvjsmg5v555zrl7w085jq40a47hfs4gc3k78s0bkwxbyi"; }; propagatedBuildInputs = [perlTestSimple perlTestException perlArrayCompare perlTreeDAGNode]; + buildInputs = [perlTestPod]; + }; + + perlTestWWWMechanize = buildPerlPackage rec { + name = "Test-WWW-Mechanize-1.24"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PE/PETDANCE/${name}.tar.gz"; + sha256 = "11knym5ppish78rk8r1hymvq1py43h7z8d6nk8p4ig3p246xx5qa"; + }; + propagatedBuildInputs = [ + perlCarpAssertMore perlURI perlTestLongString perlWWWMechanize + ]; + doCheck = false; + }; + + perlTestWWWMechanizeCatalyst = buildPerlPackage rec { + name = "Test-WWW-Mechanize-Catalyst-0.45"; + src = fetchurl { + url = "mirror://cpan/authors/id/L/LB/LBROCARD/${name}.tar.gz"; + sha256 = "0hixz0hibv2z87kdqvrphzgww0xibgg56w7bh299dgw2739hy4yf"; + }; + propagatedBuildInputs = [ + perlCatalystRuntime perlTestWWWMechanize perlWWWMechanize + perlCatalystPluginSessionStateCookie + ]; + buildInputs = [perlTestPod]; + doCheck = false; }; perlTextSimpleTable = buildPerlPackage { @@ -5427,7 +5807,6 @@ let url = mirror://cpan/authors/id/G/GB/GBARR/TimeDate-1.16.tar.gz; sha256 = "1cvcpaghn7dc14m9871sfw103g3m3a00m2mrl5iqb0mmh40yyhkr"; }; - propagatedBuildInputs = []; }; perlTimeHiRes = buildPerlPackage { @@ -5436,7 +5815,6 @@ let url = mirror://cpan/authors/id/J/JH/JHI/Time-HiRes-1.9715.tar.gz; sha256 = "0pgqrfkysy3mdcx5nd0x8c80lgqb7rkb3nrkii3vc576dcbpvw0i"; }; - propagatedBuildInputs = []; }; perlTreeDAGNode = buildPerlPackage { @@ -5498,14 +5876,24 @@ let }; }; - perlURI = buildPerlPackage { - name = "URI-1.35"; + perlURI = buildPerlPackage rec { + name = "URI-1.37"; src = fetchurl { - url = mirror://cpan/authors/id/G/GA/GAAS/URI-1.35.tar.gz; - md5 = "1a933b1114c41a25587ee59ba8376f7c"; + url = "mirror://cpan/authors/id/G/GA/GAAS/${name}.tar.gz"; + sha256 = "0amwbss2gz00fkdfnfixf1afmqal1246xhmj27g5c0ny7ahcid0j"; }; }; + perlWWWMechanize = buildPerlPackage rec { + name = "WWW-Mechanize-1.54"; + src = fetchurl { + url = "mirror://cpan/authors/id/P/PE/PETDANCE/${name}.tar.gz"; + sha256 = "1yxvw5xfng5fj4422869p5dwvmrkmqph9gdm2nl12wngydk93lnh"; + }; + propagatedBuildInputs = [perlLWP perlHTTPResponseEncoding perlHTTPServerSimple]; + doCheck = false; + }; + perlXMLDOM = buildPerlPackage { name = "XML-DOM-1.44"; src = fetchurl { @@ -5550,7 +5938,7 @@ let url = mirror://cpan/authors/id/M/MS/MSERGEANT/XML-Parser-2.36.tar.gz; sha256 = "0gyp5qfbflhkin1zv8l6wlkjwfjvsf45a3py4vc6ni82fj32kmcz"; }; - makeMakerFlags = "EXPATLIBPATH=${expat}/lib EXPATINCPATH=${expat}/include"; + makeMakerFlags = "EXPATLIBPATH=${expat}/lib EXPATINCPATH=${expat}/include"; }; perlXMLRegExp = buildPerlPackage { @@ -5602,25 +5990,22 @@ let url = mirror://cpan/authors/id/S/SA/SAPER/XSLoader-0.08.tar.gz; sha256 = "0mr4l3givrpyvz1kg0kap2ds8g0rza2cim9kbnjy8hi64igkixi5"; }; - propagatedBuildInputs = []; }; - perlYAML = buildPerlPackage { - name = "YAML-0.66"; + perlYAML = buildPerlPackage rec { + name = "YAML-0.68"; src = fetchurl { - url = mirror://cpan/authors/id/I/IN/INGY/YAML-0.66.tar.gz; - sha256 = "1pcjf6y3l88ypa52mkk349jglabm53mhxda4p5awc1jl67lx3ngw"; + url = "mirror://cpan/authors/id/I/IN/INGY/${name}.tar.gz"; + sha256 = "0yg0pgsjkfczsblx03rxlw4ib92k0gwdyb1a258xb9wdg0w61h34"; }; - propagatedBuildInputs = []; }; - perlYAMLSyck = buildPerlPackage { - name = "YAML-Syck-1.04"; + perlYAMLSyck = buildPerlPackage rec { + name = "YAML-Syck-1.05"; src = fetchurl { - url = mirror://cpan/authors/id/A/AU/AUDREYT/YAML-Syck-1.04.tar.gz; - sha256 = "180w77rxqwrfmd2jjmrd407bf8vnpry73941g5n61ippzic5x1v3"; + url = "mirror://cpan/authors/id/A/AU/AUDREYT/${name}.tar.gz"; + sha256 = "15acwp2qdxfmhfqj4c1s57xyy48hcfc87lblww3lbvihqbysyzss"; }; - propagatedBuildInputs = []; }; @@ -5942,6 +6327,10 @@ let inherit fetchurl stdenv; }; + acpid = import ../os-specific/linux/acpid { + inherit fetchurl stdenv; + }; + acpitool = import ../os-specific/linux/acpitool { inherit fetchurl stdenv; }; @@ -7059,7 +7448,7 @@ let inherit fetchurl stdenv ncurses; }; - carrier = builderDefsPackage (selectVersion ../applications/networking/instant-messengers/carrier "2.4.2") { + carrier = builderDefsPackage (selectVersion ../applications/networking/instant-messengers/carrier "2.5.0") { inherit fetchurl stdenv pkgconfig perl perlXMLParser libxml2 openssl nss gtkspell aspell gettext ncurses avahi dbus dbus_glib python libtool automake autoconf; @@ -7180,10 +7569,20 @@ let python = pythonFull; }; + comical = import ../applications/graphics/comical { + inherit stdenv fetchurl utillinux zlib; + inherit wxGTK; + }; + cua = import ../applications/editors/emacs-modes/cua { inherit fetchurl stdenv; }; + cuneiform = builderDefsPackage (import ../tools/graphics/cuneiform) { + inherit cmake patchelf; + imagemagick=imagemagick; + }; + cvs = import ../applications/version-management/cvs { inherit fetchurl stdenv nano; }; @@ -7302,7 +7701,7 @@ let emacsUnicode = lowPrio (import ../applications/editors/emacs-unicode { inherit fetchurl stdenv ncurses pkgconfig x11 Xaw3d - libpng libjpeg libungif libtiff; + libpng libjpeg libungif libtiff texinfo; inherit (xlibs) libXaw libXpm libXft; inherit (gtkLibs) gtk; xawSupport = getPkgConfig "emacs" "xawSupport" false; @@ -7420,12 +7819,10 @@ let firefox3Wrapper = wrapFirefox firefox3 "firefox" ""; firefox3b1BinWrapper = lowPrio (wrapFirefox firefox3b1Bin "firefox" ""); - flacAlts = import ../applications/audio/flac { + flac = import ../applications/audio/flac { inherit fetchurl stdenv libogg; }; - flac = getVersion "flac" flacAlts; - flashplayer = flashplayer10; flashplayer9 = import ../applications/networking/browsers/mozilla-plugins/flashplayer-9 { @@ -7531,14 +7928,14 @@ let }; icecat3 = lowPrio (import ../applications/networking/browsers/icecat-3 { - inherit fetchurl stdenv lzma pkgconfig perl zip libjpeg libpng zlib cairo + inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo python dbus dbus_glib freetype fontconfig bzip2 xlibs; inherit (gnome) libIDL libgnomeui gnomevfs gtk pango; }); icecatXulrunner3 = lowPrio (import ../applications/networking/browsers/icecat-3 { application = "xulrunner"; - inherit fetchurl stdenv lzma pkgconfig perl zip libjpeg libpng zlib cairo + inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo python dbus dbus_glib freetype fontconfig bzip2 xlibs; inherit (gnome) libIDL libgnomeui gnomevfs gtk pango; }); @@ -7718,6 +8115,11 @@ let inherit (xlibs) libXi; }; + mozplugger = builderDefsPackage (import ../applications/networking/browsers/mozilla-plugins/mozplugger) { + inherit firefox; + inherit (xlibs) libX11 xproto; + }; + mpg321 = import ../applications/audio/mpg321 { inherit stdenv fetchurl libao libmad libid3tag zlib; }; @@ -7904,7 +8306,7 @@ let }; rsync = import ../applications/networking/sync/rsync { - inherit fetchurl stdenv; + inherit fetchurl stdenv acl; }; rxvt = import ../applications/misc/rxvt { @@ -8058,6 +8460,10 @@ let withKde = pkgs.getConfig ["taskJuggler" "kde"] false; }; + thinkingRock = import ../applications/misc/thinking-rock { + inherit fetchurl stdenv; + }; + thunderbird = import ../applications/networking/mailreaders/thunderbird-2.x { inherit fetchurl stdenv pkgconfig perl zip libjpeg libpng zlib cairo; inherit (gtkLibs) gtk; @@ -8118,7 +8524,7 @@ let # optional features by passing # python # TODO mzschemeinterp perlinterp - inherit python /*x11*/; + inherit python perl tcl ruby /*x11*/; # optional features by flags flags = [ "X11" ]; # only flag "X11" by now @@ -8199,6 +8605,11 @@ let inherit (xlibs) libX11 xproto xextproto libXext libXrandr randrproto; }; + xaos = builderDefsPackage (import ../applications/graphics/xaos) { + inherit (xlibs) libXt libX11 libXext xextproto xproto; + inherit gsl aalib zlib libpng intltool gettext perl; + }; + xara = import ../applications/graphics/xara { inherit fetchurl stdenv autoconf automake libtool gettext cvs wxGTK pkgconfig libxml2 zip libpng libjpeg shebangfix perl freetype; @@ -8489,7 +8900,7 @@ let }; xboard = builderDefsPackage (import ../games/xboard) { - inherit (xlibs) libX11 xproto libXt libXaw libSM + inherit (xlibs) libX11 xproto libXt libXaw libSM libICE libXmu libXext; inherit gnuchess; }; @@ -8544,7 +8955,6 @@ let saneBackends chmlib python libzip gmp sqlite libidn runCommand lib openbabel ocaml facile stdenv jasper fam indilib libnova libarchive dbus bison; - #flac = builtins.getAttr "1.1.2" flacAlts; cdparanoia = cdparanoiaIII; inherit (xlibs) inputproto kbproto scrnsaverproto xextproto xf86miscproto @@ -8557,6 +8967,14 @@ let openexr = openexr_1_6_1 ; }); + kde42 = import ../desktops/kde-4.2 { + inherit stdenv fetchurl cmake jdk; + inherit xlibs qt4 bzip2 libxml2 libxslt perl pcre exiv2 aspell; + inherit pthread_stubs gst_all xineLib fam log4cxx cluceneCore; + inherit redland avahi jasper shared_mime_info giflib; + openexr = openexr_1_6_1; + }; + kdebase = import ../desktops/kde/kdebase { inherit fetchurl stdenv pkgconfig x11 xlibs zlib libpng libjpeg perl @@ -8574,6 +8992,12 @@ let ### SCIENCE/BIOLOGY + alliance = import ../applications/science/electronics/alliance { + inherit fetchurl stdenv bison flex; + inherit (xlibs) xproto libX11 libXt libXpm; + motif = lesstif; + }; + arb = import ../applications/science/biology/arb { inherit fetchurl stdenv readline libpng zlib x11 lesstif93 freeglut perl; inherit (xlibs) libXpm libXaw libX11 libXext libXt; diff --git a/pkgs/top-level/builder-defs.nix b/pkgs/top-level/builder-defs.nix index 4efed47f6d0b..2012278ffd7b 100644 --- a/pkgs/top-level/builder-defs.nix +++ b/pkgs/top-level/builder-defs.nix @@ -12,6 +12,8 @@ args: with args; with stringsWithDeps; with lib; "README" "AUTHORS" "ChangeLog" "CHANGES" "LICENCE" "COPYRIGHT"] ++ (optional (getAttr ["forceCopyDoc"] true args) "doc"); + hasSuffixHack = a: b: hasSuffix (a+(substring 0 0 b)) ((substring 0 0 a)+b); + archiveType = s: (if hasSuffixHack ".tar" s then "tar" else if (hasSuffixHack ".tar.gz" s) || (hasSuffixHack ".tgz" s) then "tgz"