{stdenv, fetchurl}:

stdenv.mkDerivation {
  name = "udev-125";

  src = fetchurl {
    url = mirror://kernel/linux/utils/kernel/hotplug/udev-125.tar.bz2;
    sha256 = "1w75c6vaqw8587djd8g380h1jrbj7fx9441bvvy4gj9jz21r00ks";
  };

  # "DESTDIR=/" is a hack to prevent "make install" from trying to
  # mess with /dev.
  preBuild =
    ''
      makeFlagsArray=(prefix=$out usrbindir=$out/bin usrsbindir=$out/sbin usrlibdir=$out/lib \
        mandir=$out/share/man includedir=$out/include \
        EXTRAS="extras/volume_id extras/ata_id extras/edd_id extras/floppy extras/path_id ${if stdenv ? isKlibc then "" else "extras/scsi_id"} extras/usb_id ${if stdenv ? isKlibc then "" else "extras/cdrom_id"}"
        INSTALL='install -c' DESTDIR=/ \
        ${if stdenv ? isStatic then "USE_STATIC=true SHLIB= VOLUME_ID_STATIC=true" else ""})
      
      substituteInPlace udev_rules.c --replace /lib/udev $out/lib/udev
  ''

  + (if stdenv ? isStatic then
    ''
      # `make install' would cause the shared library to be installed, which we don't build.
      substituteInPlace extras/volume_id/lib/Makefile  --replace 'install:' 'disabled:'
    '' else "");

  preInstall = ''
    installFlagsArray=(udevdir=$TMPDIR/dummy)
  '';

  meta = {
    homepage = http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html;
    description = "Udev manages the /dev filesystem";
  };
}