2018-04-24 23:53:33 +01:00
|
|
|
{ fetchurl, stdenv, buildPackages
|
|
|
|
, curl, openssl, zlib, expat, perl, python, gettext, cpio
|
2017-07-11 17:00:17 +01:00
|
|
|
, gnugrep, gnused, gawk, coreutils # needed at runtime by git-filter-branch etc
|
2018-04-17 18:06:44 +01:00
|
|
|
, openssh, pcre2
|
2009-11-03 15:57:31 +00:00
|
|
|
, asciidoc, texinfo, xmlto, docbook2x, docbook_xsl, docbook_xml_dtd_45
|
2015-02-18 03:30:59 +00:00
|
|
|
, libxslt, tcl, tk, makeWrapper, libiconv
|
2018-04-17 18:06:44 +01:00
|
|
|
, svnSupport, subversionClient, perlLibs, smtpPerlLibs
|
2018-04-22 18:58:30 +01:00
|
|
|
, perlSupport ? true
|
2008-06-11 13:31:44 +01:00
|
|
|
, guiSupport
|
2013-01-28 20:24:04 +00:00
|
|
|
, withManual ? true
|
2010-03-13 06:07:44 +00:00
|
|
|
, pythonSupport ? true
|
2017-08-05 15:39:33 +01:00
|
|
|
, withpcre2 ? true
|
2010-05-15 11:38:28 +01:00
|
|
|
, sendEmailSupport
|
2016-10-11 04:13:09 +01:00
|
|
|
, darwin
|
2008-06-11 13:31:44 +01:00
|
|
|
}:
|
2008-05-22 09:06:52 +01:00
|
|
|
|
2018-04-22 18:58:30 +01:00
|
|
|
assert sendEmailSupport -> perlSupport;
|
|
|
|
assert svnSupport -> perlSupport;
|
|
|
|
|
2010-04-02 08:17:11 +01:00
|
|
|
let
|
2018-06-22 15:12:06 +01:00
|
|
|
version = "2.18.0";
|
2018-04-22 18:58:30 +01:00
|
|
|
svn = subversionClient.override { perlBindings = perlSupport; };
|
2010-04-02 08:17:11 +01:00
|
|
|
in
|
2012-06-04 16:54:57 +01:00
|
|
|
|
2011-10-21 17:50:36 +01:00
|
|
|
stdenv.mkDerivation {
|
|
|
|
name = "git-${version}";
|
2007-04-26 17:14:01 +01:00
|
|
|
|
|
|
|
src = fetchurl {
|
2014-03-20 14:44:25 +00:00
|
|
|
url = "https://www.kernel.org/pub/software/scm/git/git-${version}.tar.xz";
|
2018-06-22 15:12:06 +01:00
|
|
|
sha256 = "14hfwfkrci829a9316hnvkglnqqw1p03cw9k56p4fcb078wbwh4b";
|
2007-04-26 17:14:01 +01:00
|
|
|
};
|
|
|
|
|
2018-04-22 18:58:30 +01:00
|
|
|
outputs = [ "out" ] ++ stdenv.lib.optional perlSupport "gitweb";
|
2018-04-17 18:06:44 +01:00
|
|
|
|
2016-02-26 17:38:15 +00:00
|
|
|
hardeningDisable = [ "format" ];
|
2015-12-23 01:59:47 +00:00
|
|
|
|
2018-04-13 22:55:26 +01:00
|
|
|
enableParallelBuilding = true;
|
|
|
|
|
|
|
|
## Patch
|
|
|
|
|
2014-11-25 22:49:11 +00:00
|
|
|
patches = [
|
|
|
|
./docbook2texi.patch
|
|
|
|
./symlinks-in-bin.patch
|
2016-02-20 14:07:27 +00:00
|
|
|
./git-sh-i18n.patch
|
2016-03-25 21:05:32 +00:00
|
|
|
./ssh-path.patch
|
2017-11-17 12:36:14 +00:00
|
|
|
./git-send-email-honor-PATH.patch
|
2018-04-13 22:55:26 +01:00
|
|
|
./installCheck-path.patch
|
2014-11-25 22:49:11 +00:00
|
|
|
];
|
2008-03-12 15:21:45 +00:00
|
|
|
|
2016-03-25 21:05:32 +00:00
|
|
|
postPatch = ''
|
|
|
|
for x in connect.c git-gui/lib/remote_add.tcl ; do
|
|
|
|
substituteInPlace "$x" \
|
|
|
|
--subst-var-by ssh "${openssh}/bin/ssh"
|
|
|
|
done
|
2018-04-13 22:55:26 +01:00
|
|
|
|
|
|
|
# Fix references to gettext introduced by ./git-sh-i18n.patch
|
|
|
|
substituteInPlace git-sh-i18n.sh \
|
|
|
|
--subst-var-by gettext ${gettext}
|
2016-03-25 21:05:32 +00:00
|
|
|
'';
|
|
|
|
|
2017-12-10 18:52:34 +00:00
|
|
|
nativeBuildInputs = [ gettext perl ]
|
2013-01-28 20:24:04 +00:00
|
|
|
++ stdenv.lib.optionals withManual [ asciidoc texinfo xmlto docbook2x
|
2017-12-10 18:52:34 +00:00
|
|
|
docbook_xsl docbook_xml_dtd_45 libxslt ];
|
|
|
|
buildInputs = [curl openssl zlib expat cpio makeWrapper libiconv]
|
|
|
|
++ stdenv.lib.optionals perlSupport [ perl ]
|
2016-10-11 04:13:09 +01:00
|
|
|
++ stdenv.lib.optionals guiSupport [tcl tk]
|
2017-08-05 15:39:33 +01:00
|
|
|
++ stdenv.lib.optionals withpcre2 [ pcre2 ]
|
2016-10-11 04:13:09 +01:00
|
|
|
++ stdenv.lib.optionals stdenv.isDarwin [ darwin.Security ];
|
|
|
|
|
2013-03-09 22:57:57 +00:00
|
|
|
# required to support pthread_cancel()
|
FreeBSD: apr-util, cyrus-sasl, berkeley db, glib, gnutls, kerberos, libelf-freebsd, openldap, serf, guile, tet, shishi, gawk, gnugrep
2015-11-28 00:46:00 +00:00
|
|
|
NIX_LDFLAGS = stdenv.lib.optionalString (!stdenv.cc.isClang) "-lgcc_s"
|
|
|
|
+ stdenv.lib.optionalString (stdenv.isFreeBSD) "-lthr";
|
2013-03-09 22:57:57 +00:00
|
|
|
|
2017-12-10 18:52:34 +00:00
|
|
|
configureFlags = stdenv.lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
|
|
|
|
"ac_cv_fread_reads_directories=yes"
|
|
|
|
"ac_cv_snprintf_returns_bogus=no"
|
|
|
|
];
|
|
|
|
|
2018-04-11 12:00:40 +01:00
|
|
|
preBuild = ''
|
|
|
|
makeFlagsArray+=( perllibdir=$out/$(perl -MConfig -wle 'print substr $Config{installsitelib}, 1 + length $Config{siteprefixexp}') )
|
|
|
|
'';
|
|
|
|
|
2018-04-22 20:22:34 +01:00
|
|
|
makeFlags = [
|
2018-04-11 12:00:40 +01:00
|
|
|
"prefix=\${out}"
|
|
|
|
"SHELL_PATH=${stdenv.shell}"
|
2018-04-22 20:22:34 +01:00
|
|
|
]
|
2018-04-22 18:58:30 +01:00
|
|
|
++ (if perlSupport then ["PERL_PATH=${perl}/bin/perl"] else ["NO_PERL=1"])
|
2018-04-22 20:22:34 +01:00
|
|
|
++ (if pythonSupport then ["PYTHON_PATH=${python}/bin/python"] else ["NO_PYTHON=1"])
|
|
|
|
++ stdenv.lib.optionals stdenv.isSunOS ["INSTALL=install" "NO_INET_NTOP=" "NO_INET_PTON="]
|
|
|
|
++ (if stdenv.isDarwin then ["NO_APPLE_COMMON_CRYPTO=1"] else ["sysconfdir=/etc/"])
|
2017-12-10 19:08:23 +00:00
|
|
|
++ stdenv.lib.optionals stdenv.hostPlatform.isMusl ["NO_SYS_POLL_H=1" "NO_GETTEXT=YesPlease"]
|
|
|
|
++ stdenv.lib.optional withpcre2 "USE_LIBPCRE2=1";
|
2014-04-14 20:53:15 +01:00
|
|
|
|
2016-10-11 04:13:09 +01:00
|
|
|
# build git-credential-osxkeychain if darwin
|
|
|
|
postBuild = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
|
|
pushd $PWD/contrib/credential/osxkeychain/
|
|
|
|
make
|
|
|
|
popd
|
|
|
|
'';
|
2007-11-14 21:41:01 +00:00
|
|
|
|
2018-04-13 22:55:26 +01:00
|
|
|
|
|
|
|
## Install
|
|
|
|
|
|
|
|
# WARNING: Do not `rm` or `mv` files from the source tree; use `cp` instead.
|
|
|
|
# We need many of these files during the installCheckPhase.
|
2008-08-22 22:35:25 +01:00
|
|
|
|
2017-12-10 19:08:23 +00:00
|
|
|
installFlags = "NO_INSTALL_HARDLINKS=1";
|
2013-04-22 14:55:01 +01:00
|
|
|
|
2016-10-11 04:13:09 +01:00
|
|
|
preInstall = stdenv.lib.optionalString stdenv.isDarwin ''
|
|
|
|
mkdir -p $out/bin
|
2018-04-13 22:55:26 +01:00
|
|
|
cp -a $PWD/contrib/credential/osxkeychain/git-credential-osxkeychain $out/bin
|
2018-06-22 00:45:43 +01:00
|
|
|
rm -f $PWD/contrib/credential/osxkeychain/git-credential-osxkeychain.o
|
2016-10-11 04:13:09 +01:00
|
|
|
'';
|
|
|
|
|
2008-02-22 16:51:51 +00:00
|
|
|
postInstall =
|
2008-06-11 13:31:44 +01:00
|
|
|
''
|
2012-06-21 20:23:40 +01:00
|
|
|
notSupported() {
|
2014-04-05 23:39:53 +01:00
|
|
|
unlink $1 || true
|
2008-07-03 13:51:23 +01:00
|
|
|
}
|
|
|
|
|
2013-08-01 15:36:54 +01:00
|
|
|
# Install git-subtree.
|
|
|
|
pushd contrib/subtree
|
|
|
|
make
|
2014-11-12 15:36:17 +00:00
|
|
|
make install ${stdenv.lib.optionalString withManual "install-doc"}
|
2013-08-01 15:36:54 +01:00
|
|
|
popd
|
|
|
|
rm -rf contrib/subtree
|
|
|
|
|
2011-07-08 00:48:38 +01:00
|
|
|
# Install contrib stuff.
|
2012-01-18 20:16:00 +00:00
|
|
|
mkdir -p $out/share/git
|
2018-04-13 22:55:26 +01:00
|
|
|
cp -a contrib $out/share/git/
|
2016-11-19 21:36:30 +00:00
|
|
|
ln -s "$out/share/git/contrib/credential/netrc/git-credential-netrc" $out/bin/
|
2012-01-18 20:16:00 +00:00
|
|
|
mkdir -p $out/share/emacs/site-lisp
|
2011-07-08 00:48:38 +01:00
|
|
|
ln -s "$out/share/git/contrib/emacs/"*.el $out/share/emacs/site-lisp/
|
2012-01-18 20:16:00 +00:00
|
|
|
mkdir -p $out/etc/bash_completion.d
|
2011-07-08 00:48:38 +01:00
|
|
|
ln -s $out/share/git/contrib/completion/git-completion.bash $out/etc/bash_completion.d/
|
2014-08-19 15:34:51 +01:00
|
|
|
ln -s $out/share/git/contrib/completion/git-prompt.sh $out/etc/bash_completion.d/
|
2010-09-18 13:45:04 +01:00
|
|
|
|
2014-02-15 11:04:10 +00:00
|
|
|
# grep is a runtime dependency, need to patch so that it's found
|
2010-09-18 13:45:04 +01:00
|
|
|
substituteInPlace $out/libexec/git-core/git-sh-setup \
|
|
|
|
--replace ' grep' ' ${gnugrep}/bin/grep' \
|
|
|
|
--replace ' egrep' ' ${gnugrep}/bin/egrep'
|
2011-07-20 23:56:31 +01:00
|
|
|
|
2017-07-11 17:00:17 +01:00
|
|
|
# Fix references to the perl, sed, awk and various coreutil binaries used by
|
|
|
|
# shell scripts that git calls (e.g. filter-branch)
|
|
|
|
SCRIPT="$(cat <<'EOS'
|
|
|
|
BEGIN{
|
|
|
|
@a=(
|
2018-04-22 18:58:30 +01:00
|
|
|
'${gnugrep}/bin/grep', '${gnused}/bin/sed', '${gawk}/bin/awk',
|
2017-07-11 17:00:17 +01:00
|
|
|
'${coreutils}/bin/cut', '${coreutils}/bin/basename', '${coreutils}/bin/dirname',
|
|
|
|
'${coreutils}/bin/wc', '${coreutils}/bin/tr'
|
2018-04-22 18:58:30 +01:00
|
|
|
${stdenv.lib.optionalString perlSupport ", '${perl}/bin/perl'"}
|
2017-07-11 17:00:17 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
foreach $c (@a) {
|
|
|
|
$n=(split("/", $c))[-1];
|
|
|
|
s|(?<=[^#][^/.-])\b''${n}(?=\s)|''${c}|g
|
|
|
|
}
|
|
|
|
EOS
|
|
|
|
)"
|
|
|
|
perl -0777 -i -pe "$SCRIPT" \
|
|
|
|
$out/libexec/git-core/git-{sh-setup,filter-branch,merge-octopus,mergetool,quiltimport,request-pull,stash,submodule,subtree,web--browse}
|
2013-04-19 21:29:30 +01:00
|
|
|
|
2016-02-16 21:01:21 +00:00
|
|
|
|
2015-07-09 07:32:45 +01:00
|
|
|
# Also put git-http-backend into $PATH, so that we can use smart
|
|
|
|
# HTTP(s) transports for pushing
|
|
|
|
ln -s $out/libexec/git-core/git-http-backend $out/bin/git-http-backend
|
2018-04-22 18:58:30 +01:00
|
|
|
'' + stdenv.lib.optionalString perlSupport ''
|
|
|
|
# put in separate package for simpler maintenance
|
|
|
|
mv $out/share/gitweb $gitweb/
|
2017-10-02 14:25:12 +01:00
|
|
|
|
|
|
|
# wrap perl commands
|
|
|
|
gitperllib=$out/lib/perl5/site_perl
|
|
|
|
for i in ${builtins.toString perlLibs}; do
|
|
|
|
gitperllib=$gitperllib:$i/lib/perl5/site_perl
|
|
|
|
done
|
|
|
|
wrapProgram $out/libexec/git-core/git-cvsimport \
|
|
|
|
--set GITPERLLIB "$gitperllib"
|
|
|
|
wrapProgram $out/libexec/git-core/git-add--interactive \
|
|
|
|
--set GITPERLLIB "$gitperllib"
|
|
|
|
wrapProgram $out/libexec/git-core/git-archimport \
|
|
|
|
--set GITPERLLIB "$gitperllib"
|
|
|
|
wrapProgram $out/libexec/git-core/git-instaweb \
|
|
|
|
--set GITPERLLIB "$gitperllib"
|
|
|
|
wrapProgram $out/libexec/git-core/git-cvsexportcommit \
|
|
|
|
--set GITPERLLIB "$gitperllib"
|
2011-07-08 00:48:38 +01:00
|
|
|
''
|
2008-06-28 16:22:31 +01:00
|
|
|
|
2008-05-19 19:29:07 +01:00
|
|
|
+ (if svnSupport then
|
|
|
|
|
|
|
|
''# wrap git-svn
|
2009-04-23 00:04:18 +01:00
|
|
|
gitperllib=$out/lib/perl5/site_perl
|
2016-04-30 17:19:14 +01:00
|
|
|
for i in ${builtins.toString perlLibs} ${svn.out}; do
|
2009-04-23 00:04:18 +01:00
|
|
|
gitperllib=$gitperllib:$i/lib/perl5/site_perl
|
2008-05-19 19:29:07 +01:00
|
|
|
done
|
2012-06-21 20:23:40 +01:00
|
|
|
wrapProgram $out/libexec/git-core/git-svn \
|
|
|
|
--set GITPERLLIB "$gitperllib" \
|
2016-04-30 17:19:14 +01:00
|
|
|
--prefix PATH : "${svn.out}/bin" ''
|
2008-07-03 13:51:23 +01:00
|
|
|
else '' # replace git-svn by notification script
|
2014-04-05 23:39:53 +01:00
|
|
|
notSupported $out/libexec/git-core/git-svn
|
2008-07-03 13:51:23 +01:00
|
|
|
'')
|
2008-05-22 09:06:52 +01:00
|
|
|
|
2010-05-15 11:38:28 +01:00
|
|
|
+ (if sendEmailSupport then
|
|
|
|
''# wrap git-send-email
|
|
|
|
gitperllib=$out/lib/perl5/site_perl
|
|
|
|
for i in ${builtins.toString smtpPerlLibs}; do
|
|
|
|
gitperllib=$gitperllib:$i/lib/perl5/site_perl
|
|
|
|
done
|
2012-06-21 20:23:40 +01:00
|
|
|
wrapProgram $out/libexec/git-core/git-send-email \
|
2010-05-15 11:38:28 +01:00
|
|
|
--set GITPERLLIB "$gitperllib" ''
|
|
|
|
else '' # replace git-send-email by notification script
|
2014-04-05 23:39:53 +01:00
|
|
|
notSupported $out/libexec/git-core/git-send-email
|
2010-05-15 11:38:28 +01:00
|
|
|
'')
|
|
|
|
|
2013-01-28 20:24:04 +00:00
|
|
|
+ stdenv.lib.optionalString withManual ''# Install man pages and Info manual
|
2018-04-24 23:53:33 +01:00
|
|
|
make -j $NIX_BUILD_CORES -l $NIX_BUILD_CORES PERL_PATH="${buildPackages.perl}/bin/perl" cmd-list.made install install-info \
|
2008-03-15 20:52:21 +00:00
|
|
|
-C Documentation ''
|
|
|
|
|
2008-06-11 13:31:44 +01:00
|
|
|
+ (if guiSupport then ''
|
|
|
|
# Wrap Tcl/Tk programs
|
2011-02-02 11:16:57 +00:00
|
|
|
for prog in bin/gitk libexec/git-core/{git-gui,git-citool,git-gui--askpass}; do
|
2011-01-07 11:03:42 +00:00
|
|
|
sed -i -e "s|exec 'wish'|exec '${tk}/bin/wish'|g" \
|
|
|
|
-e "s|exec wish|exec '${tk}/bin/wish'|g" \
|
2012-08-06 20:26:24 +01:00
|
|
|
"$out/$prog"
|
2011-01-07 11:03:42 +00:00
|
|
|
done
|
2008-07-03 13:51:23 +01:00
|
|
|
'' else ''
|
2011-01-07 11:04:09 +00:00
|
|
|
# Don't wrap Tcl/Tk, replace them by notification scripts
|
|
|
|
for prog in bin/gitk libexec/git-core/git-gui; do
|
2014-04-05 23:39:53 +01:00
|
|
|
notSupported "$out/$prog"
|
2008-07-03 13:51:23 +01:00
|
|
|
done
|
2016-10-11 04:13:09 +01:00
|
|
|
'')
|
|
|
|
+ stdenv.lib.optionalString stdenv.isDarwin ''
|
|
|
|
# enable git-credential-osxkeychain by default if darwin
|
|
|
|
cat > $out/etc/gitconfig << EOF
|
|
|
|
[credential]
|
|
|
|
helper = osxkeychain
|
|
|
|
EOF
|
|
|
|
'';
|
|
|
|
|
2013-03-25 11:21:45 +00:00
|
|
|
|
2018-04-13 22:55:26 +01:00
|
|
|
## InstallCheck
|
|
|
|
|
|
|
|
doInstallCheck = true;
|
|
|
|
|
|
|
|
installCheckTarget = "test";
|
|
|
|
|
|
|
|
# see also installCheckFlagsArray
|
|
|
|
installCheckFlags = "DEFAULT_TEST_TARGET=prove";
|
|
|
|
|
|
|
|
preInstallCheck = ''
|
|
|
|
installCheckFlagsArray+=(
|
|
|
|
GIT_PROVE_OPTS="--jobs $NIX_BUILD_CORES --failures --state=failed,save"
|
|
|
|
GIT_TEST_INSTALLED=$out/bin
|
|
|
|
${stdenv.lib.optionalString (!svnSupport) "NO_SVN_TESTS=y"}
|
|
|
|
)
|
|
|
|
|
|
|
|
function disable_test {
|
|
|
|
local test=$1 pattern=$2
|
|
|
|
if [ $# -eq 1 ]; then
|
|
|
|
mv t/{,skip-}$test.sh || true
|
|
|
|
else
|
|
|
|
sed -i t/$test.sh \
|
|
|
|
-e "/^ *test_expect_.*$pattern/,/^ *' *\$/{s/^/#/}"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Shared permissions are forbidden in sandbox builds.
|
|
|
|
disable_test t0001-init shared
|
|
|
|
disable_test t1301-shared-repo
|
|
|
|
|
|
|
|
# Our patched gettext never fallbacks
|
|
|
|
disable_test t0201-gettext-fallbacks
|
|
|
|
|
|
|
|
${stdenv.lib.optionalString (!sendEmailSupport) ''
|
|
|
|
# Disable sendmail tests
|
|
|
|
disable_test t9001-send-email
|
|
|
|
''}
|
|
|
|
|
|
|
|
# XXX: I failed to understand why this one fails.
|
|
|
|
# Could someone try to re-enable it on the next release ?
|
|
|
|
disable_test t1700-split-index "null sha1"
|
2018-05-03 21:14:24 +01:00
|
|
|
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
|
|
|
# Test fails (as of 2.17.0, musl 1.1.19)
|
|
|
|
disable_test t3900-i18n-commit
|
2018-04-13 22:55:26 +01:00
|
|
|
'';
|
|
|
|
|
Enable parallel building of gcc, glibc, gmp, mpfr, ncurses, coreutils, perl, python, git, and qt4.
If a build expressions has set "enableParallelBuilding = true", then the
generic builder may utilize more than one CPU core to build that particular
expression. This feature works out of the box for GNU Make. Expressions that
use other build drivers like Boost.Jam or SCons have to specify appropriate
flags such as "-j${NIX_BUILD_CORES}" themselves.
svn path=/nixpkgs/trunk/; revision=23042
2010-08-08 19:51:42 +01:00
|
|
|
|
2007-11-14 21:41:01 +00:00
|
|
|
meta = {
|
2017-08-02 22:50:51 +01:00
|
|
|
homepage = https://git-scm.com/;
|
2014-08-24 15:21:08 +01:00
|
|
|
description = "Distributed version control system";
|
2016-01-06 06:15:17 +00:00
|
|
|
license = stdenv.lib.licenses.gpl2;
|
2008-03-30 23:19:20 +01:00
|
|
|
|
|
|
|
longDescription = ''
|
|
|
|
Git, a popular distributed version control system designed to
|
|
|
|
handle very large projects with speed and efficiency.
|
|
|
|
'';
|
|
|
|
|
2010-05-18 15:41:18 +01:00
|
|
|
platforms = stdenv.lib.platforms.all;
|
2016-05-16 21:30:20 +01:00
|
|
|
maintainers = with stdenv.lib.maintainers; [ peti the-kenny wmertens ];
|
2007-11-14 21:41:01 +00:00
|
|
|
};
|
2007-04-26 17:14:01 +01:00
|
|
|
}
|