From d97069da1a884600688ceee314c8f9d876744a52 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 17 Jun 2008 14:19:59 +0000 Subject: [PATCH] * Quick start section. * Updated some packages that are referenced in that section. svn path=/nixpkgs/trunk/; revision=12139 --- VERSION | 2 +- doc/introduction.xml | 16 +- doc/manual.xml | 2 + doc/outline.txt | 4 + doc/quick-start.xml | 240 ++++++++++++++++++ doc/stdenv.xml | 10 + pkgs/applications/misc/hello/ex-2/default.nix | 20 +- .../networking/newsreaders/pan/default.nix | 12 +- pkgs/tools/misc/jdiskreport/default.nix | 10 +- .../networking/p2p/bittorrent/builder.sh | 5 +- .../networking/p2p/bittorrent/default.nix | 1 + pkgs/top-level/all-packages.nix | 4 +- 12 files changed, 303 insertions(+), 23 deletions(-) create mode 100644 doc/quick-start.xml create mode 100644 doc/stdenv.xml diff --git a/VERSION b/VERSION index c43e1055fd3f..f2bb2d0a27c0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.12 +0.12 \ No newline at end of file diff --git a/doc/introduction.xml b/doc/introduction.xml index f1f15995909d..bdc035bbaf75 100644 --- a/doc/introduction.xml +++ b/doc/introduction.xml @@ -4,6 +4,18 @@ Introduction -Bla +This manual tells you how to write packages for the Nix Packages +collection (Nixpkgs). Thus it’s for packagers and developers who want +to add packages to Nixpkgs. End users are kindly referred to the +Nix +manual. - \ No newline at end of file +This manual does not describe the syntax and semantics of the +Nix expression language, which are given in the Nix manual in the +chapter +on writing Nix expressions. It only describes the facilities +provided by Nixpkgs to make writing packages easier, such as the +standard build environment (stdenv). + + diff --git a/doc/manual.xml b/doc/manual.xml index c38e0835e5f6..2ef9516afc12 100644 --- a/doc/manual.xml +++ b/doc/manual.xml @@ -29,5 +29,7 @@ + + \ No newline at end of file diff --git a/doc/outline.txt b/doc/outline.txt index 060592a99aba..78ba0411501b 100644 --- a/doc/outline.txt +++ b/doc/outline.txt @@ -170,3 +170,7 @@ - fetchcvs - fetchdarcs + + +- Appendix: Nixpkgs config options + diff --git a/doc/quick-start.xml b/doc/quick-start.xml new file mode 100644 index 000000000000..dac34b7cee3d --- /dev/null +++ b/doc/quick-start.xml @@ -0,0 +1,240 @@ + + +Quick Start to Adding a Package + +To add a package to Nixpkgs: + + + + + Checkout the Nixpkgs source tree: + + +$ svn checkout https://svn.nixos.org/repos/nix/nixpkgs/trunk nixpkgs +$ cd nixpkgs + + + + + + Find a good place in the Nixpkgs tree to add the Nix + expression for your package. For instance, a library package + typically goes into + pkgs/development/libraries/pkgname, + while a web browser goes into + pkgs/applications/networking/browsers/pkgname. + See Section XXX for some hints on the tree organisation. Create a + directory for your package, e.g. + + +$ svn mkdir pkgs/development/libraries/libfoo + + + + + + In the package directory, create a Nix expression — a piece + of code that describes how to build the package. In this case, it + should be a function that is called with the + package dependencies as arguments, and returns a build of the + package in the Nix store. The expression should usually be called + default.nix. + + +$ emacs pkgs/development/libraries/libfoo/default.nix +$ svn add pkgs/development/libraries/libfoo/default.nix + + + + You can have a look at the existing Nix expressions under + pkgs/ to see how it’s done. Here are some + good ones: + + + + + GNU cpio: pkgs/tools/archivers/cpio/default.nix. + The simplest possible package. The generic builder in + stdenv does everything for you. It has + no dependencies beyond stdenv. + + + + GNU Hello: pkgs/applications/misc/hello/ex-2/default.nix. + Also trivial, but it specifies some meta + attributes which is good practice. + + + + GNU Multiple Precision arithmetic library (GMP): pkgs/development/libraries/gmp/default.nix. + Also done by the generic builder, but has a dependency on + m4. + + + + Pan, a GTK-based newsreader: pkgs/applications/networking/newsreaders/pan/default.nix. + Has an optional dependency on gtkspell, + which is only built if spellCheck is + true. + + + + Apache HTTPD: pkgs/servers/http/apache-httpd/default.nix. + A bunch of optional features, variable substitutions in the + configure flags, a post-install hook, and miscellaneous + hackery. + + + + BitTorrent (wxPython-based): pkgs/tools/networking/p2p/bittorrent/default.nix. + Uses an external build + script, which can be useful if you have lots of code + that you don’t want cluttering up the Nix expression. But + external builders are mostly obsolete. + + + + + Firefox: pkgs/applications/networking/browsers/firefox-3/default.nix. + Lots of dependencies. + + + + JDiskReport, a Java utility: pkgs/tools/misc/jdiskreport/default.nix + (and the builder). + Nixpkgs doesn’t have a decent stdenv for + Java yet so this is pretty ad-hoc. + + + + XML::Simple, a Perl module: pkgs/top-level/all-packages.nix + (search for the perlXMLSimple + attribute). Most Perl modules are so simple to build that + they are defined directly in + all-packages.nix, no need to make a + separate file for them. + + + + Adobe Reader: pkgs/applications/misc/acrobat-reader/default.nix. + Shows how binary-only packages can be supported. In + particular the builder + uses patchelf to set the RUNPATH and ELF + interpreter of the executables so that the right libraries + are found at runtime. + + + + + + + Some notes: + + + + + All meta attributes are optional, + but it’s still a good idea to provide at least the + description and + homepage. + + + + You can use nix-prefetch-url + url to get the SHA-256 hash of + source distributions. + + + + A list of schemes for mirror:// + URLs can be found in pkgs/build-support/fetchurl/mirrors.nix. + + + + + + + The exact syntax and semantics of the Nix expression + language, including the built-in function, are described in the + Nix manual in the chapter + on writing Nix expressions. + + + + + Add a call to the function defined in the previous step to + pkgs/top-level/all-packages.nix + with some descriptive name for the variable, + e.g. libfoo. + + +$ emacs pkgs/top-level/all-packages.nix + + + + The attributes in that file are sorted by category (like + “Development / Libraries”) that more-or-less correspond to the + directory structure of Nixpkgs, and then by attribute name. + + + + Test whether the package builds: + + +$ nix-build -A libfoo + + where libfoo should be the variable name + defined in the previous step. You may want to add the flag + to keep the temporary build directory in case + something fails. If the build succeeds, a symlink + ./result to the package in the Nix store is + created. + + + + If you want to install the package into your profile + (optional), do + + +$ nix-env -f . -iA libfoo + + + + + + Optionally commit the new package (svn + ci) or send a patch to + nix-dev@cs.uu.nl. + + + + If you want the TU Delft build farm to build binaries of the + package and make them available in the nixpkgs + channel, add it to pkgs/top-level/build-for-release.nix. + + + + + + + \ No newline at end of file diff --git a/doc/stdenv.xml b/doc/stdenv.xml new file mode 100644 index 000000000000..d99cdb4dd699 --- /dev/null +++ b/doc/stdenv.xml @@ -0,0 +1,10 @@ + + +The Standard Environment + + + + + diff --git a/pkgs/applications/misc/hello/ex-2/default.nix b/pkgs/applications/misc/hello/ex-2/default.nix index b70103ceef5c..876e0dfb7c50 100644 --- a/pkgs/applications/misc/hello/ex-2/default.nix +++ b/pkgs/applications/misc/hello/ex-2/default.nix @@ -1,10 +1,20 @@ -{stdenv, fetchurl, perl}: +{stdenv, fetchurl}: stdenv.mkDerivation { - name = "hello-2.1.1"; + name = "hello-2.3"; + src = fetchurl { - url = mirror://gnu/hello/hello-2.1.1.tar.gz; - md5 = "70c9ccf9fac07f762c24f2df2290784d"; + url = mirror://gnu/hello/hello-2.3.tar.bz2; + sha256 = "0c7vijq8y68bpr7g6dh1gny0bff8qq81vnp4ch8pjzvg56wb3js1"; + }; + + 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+"; }; - buildInputs = [perl]; } diff --git a/pkgs/applications/networking/newsreaders/pan/default.nix b/pkgs/applications/networking/newsreaders/pan/default.nix index a427e3550f8b..c91d64a2f4fe 100644 --- a/pkgs/applications/networking/newsreaders/pan/default.nix +++ b/pkgs/applications/networking/newsreaders/pan/default.nix @@ -3,8 +3,7 @@ , perl, pcre, gmime, gettext }: -assert spellChecking -> gtkspell != null /* !!! && gtk == gtkspell.gtk */; -# !!! assert gtk.glib == gnet.glib; +assert spellChecking -> gtkspell != null; stdenv.mkDerivation { name = "pan-0.132"; @@ -22,14 +21,11 @@ stdenv.mkDerivation { }) ]; - buildInputs = [ - pkgconfig gtk perl pcre gmime gettext - (if spellChecking then gtkspell else null) - ]; - - inherit spellChecking stdenv; + buildInputs = [pkgconfig gtk perl pcre gmime gettext] + ++ stdenv.lib.optional spellChecking gtkspell; meta = { description = "A GTK+-based Usenet newsreader good at both text and binaries"; + homepage = http://pan.rebelbase.com/; }; } diff --git a/pkgs/tools/misc/jdiskreport/default.nix b/pkgs/tools/misc/jdiskreport/default.nix index 6229ca60d4c1..da0bbf0fb877 100644 --- a/pkgs/tools/misc/jdiskreport/default.nix +++ b/pkgs/tools/misc/jdiskreport/default.nix @@ -3,12 +3,16 @@ #assert jdk.swingSupport; stdenv.mkDerivation { - name = "jdiskreport-1.2.3"; + name = "jdiskreport-1.3.0"; + builder = ./builder.sh; + src = fetchurl { - url = http://www.jgoodies.com/download/jdiskreport/jdiskreport-1_2_3.zip; - md5 = "4a33c5c1344ed9e0fa531e2cb1875cb8"; + url = http://www.jgoodies.com/download/jdiskreport/jdiskreport-1_3_0.zip; + sha256 = "1vgiq797gqc6i89w4kscg57snn74wi8x566bhi9xn8r0fbphihxb"; }; + buildInputs = [unzip]; + inherit jdk; } diff --git a/pkgs/tools/networking/p2p/bittorrent/builder.sh b/pkgs/tools/networking/p2p/bittorrent/builder.sh index 8097995dfbda..c074c1919ac5 100644 --- a/pkgs/tools/networking/p2p/bittorrent/builder.sh +++ b/pkgs/tools/networking/p2p/bittorrent/builder.sh @@ -1,19 +1,19 @@ source $stdenv/setup + # Workaround for: # File "...-python-2.4.4/lib/python2.4/posixpath.py", line 62, in join # elif path == '' or path.endswith('/'): # AttributeError: 'NoneType' object has no attribute 'endswith' export HOME=$TMP -buildPhase=buildPhase + buildPhase() { #substituteInPlace BitTorrent/GUI_wx/__init__.py --replace "'2.6'" "'2.8'" python setup.py build } -installPhase=installPhase installPhase() { python setup.py install --prefix=$out @@ -24,4 +24,5 @@ installPhase() { done } + genericBuild diff --git a/pkgs/tools/networking/p2p/bittorrent/default.nix b/pkgs/tools/networking/p2p/bittorrent/default.nix index cfddd48a342e..980f51d37467 100644 --- a/pkgs/tools/networking/p2p/bittorrent/default.nix +++ b/pkgs/tools/networking/p2p/bittorrent/default.nix @@ -7,6 +7,7 @@ assert gui -> wxPython != null; stdenv.mkDerivation { name = "bittorrent-5.2.0"; + builder = ./builder.sh; src = fetchurl { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 26e941468035..cdf2fa1c3836 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5862,8 +5862,8 @@ let pkgs = rec { inherit fetchurl stdenv; }; - hello = import ../applications/misc/hello/ex-1 { - inherit fetchurl stdenv perl; + hello = import ../applications/misc/hello/ex-2 { + inherit fetchurl stdenv; }; i810switch = import ../applications/misc/i810 {