summary refs log tree commit diff
path: root/pkgs
diff options
context:
space:
mode:
authorPeter Simons <simons@cryp.to>2013-03-25 12:21:45 +0100
committerPeter Simons <simons@cryp.to>2013-03-25 12:47:39 +0100
commitab98d72fad2c657836d36fe0ac2f7dac54f1b778 (patch)
treea8955576a9271dc92b9b75b7ab0f9b969f942bae /pkgs
parent16863d8ffe24649fb6a7500f2b457dd2e559de47 (diff)
downloadnixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.tar
nixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.tar.gz
nixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.tar.bz2
nixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.tar.lz
nixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.tar.xz
nixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.tar.zst
nixpkgs-ab98d72fad2c657836d36fe0ac2f7dac54f1b778.zip
git: fix build on FreeBSD
Our hard-linking code depended on md5sum, which FreeBSD doesn't have in its
system environment. To avoid that impure dependency, the hard-linking is now
done with the 'hardlink' utility from Nixpkgs.
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/applications/version-management/git-and-tools/default.nix2
-rw-r--r--pkgs/applications/version-management/git-and-tools/git/default.nix40
2 files changed, 11 insertions, 31 deletions
diff --git a/pkgs/applications/version-management/git-and-tools/default.nix b/pkgs/applications/version-management/git-and-tools/default.nix
index b0d8cf7d9c5..fa2d2647049 100644
--- a/pkgs/applications/version-management/git-and-tools/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/default.nix
@@ -10,7 +10,7 @@ rec {
   git = lib.makeOverridable (import ./git) {
     inherit fetchurl stdenv curl openssl zlib expat perl python gettext gnugrep
       asciidoc texinfo xmlto docbook2x docbook_xsl docbook_xml_dtd_45 libxslt
-      cpio tcl tk makeWrapper subversionClient;
+      cpio tcl tk makeWrapper subversionClient hardlink;
     svnSupport = false;		# for git-svn support
     guiSupport = false;		# requires tcl/tk
     sendEmailSupport = false;	# requires plenty of perl libraries
diff --git a/pkgs/applications/version-management/git-and-tools/git/default.nix b/pkgs/applications/version-management/git-and-tools/git/default.nix
index 47f86bece82..b006354a014 100644
--- a/pkgs/applications/version-management/git-and-tools/git/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/git/default.nix
@@ -1,6 +1,6 @@
 { fetchurl, stdenv, curl, openssl, zlib, expat, perl, python, gettext, cpio, gnugrep
 , asciidoc, texinfo, xmlto, docbook2x, docbook_xsl, docbook_xml_dtd_45
-, libxslt, tcl, tk, makeWrapper
+, libxslt, tcl, tk, makeWrapper, hardlink
 , svnSupport, subversionClient, perlLibs, smtpPerlLibs
 , guiSupport
 , withManual ? true
@@ -111,46 +111,26 @@ stdenv.mkDerivation {
          notSupported "$out/$prog" \
                       "reinstall with config git = { guiSupport = true; } set"
        done
-     '')
-
-   # Don't know why hardlinks aren't created. git installs the same executable
-   # multiple times into $out so replace duplicates by symlinks because I
-   # haven't tested whether the nix distribution system can handle hardlinks.
-   # This reduces the size of $out from 115MB down to 13MB on x86_64-linux!
-   + ''
-      declare -A seen
-      shopt -s globstar
-      for f in "$out/"**; do
-        if [ -L "$f" ]; then continue; fi
-        test -f "$f" || continue
-        sum=$(md5sum "$f");
-        sum=''\${sum/ */}
-        if [ -z "''\${seen["$sum"]}" ]; then
-          seen["$sum"]="$f"
-        else
-          rm "$f"; ln -v -s "''\${seen["$sum"]}" "$f"
-        fi
-      done
-     '';
+     '');
+
+  # Git installs many copies of the same binary using hardlinks, but unfortunately
+  # our patchELF phase re-writes those files and destroys the hardlinks in the
+  # process. This utility re-generates them afterwards.
+  postFixup = "${hardlink}/bin/hardlink $out";
 
   enableParallelBuilding = true;
 
   meta = {
-    license = "GPLv2";
-    homepage = http://git-scm.com/;
+    homepage = "http://git-scm.com/";
     description = "Git, a popular distributed version control system";
+    license = stdenv.lib.licenses.gpl2Plus;
 
     longDescription = ''
       Git, a popular distributed version control system designed to
       handle very large projects with speed and efficiency.
     '';
 
-    maintainers =
-      [ # Add your name here!
-        stdenv.lib.maintainers.ludo
-        stdenv.lib.maintainers.simons
-      ];
-
     platforms = stdenv.lib.platforms.all;
+    maintainers = [ stdenv.lib.maintainers.ludo stdenv.lib.maintainers.simons ];
   };
 }