2021-01-15 13:21:58 +00:00
{ fetchurl , lib , stdenv , buildPackages
2019-11-28 11:27:31 +00:00
, curl , openssl , zlib , expat , perlPackages , python3 , gettext , cpio
2017-07-11 16:00:17 +00:00
, gnugrep , gnused , gawk , coreutils # needed at runtime by git-filter-branch etc
2021-10-23 03:36:33 +00:00
, openssh , pcre2 , bash
2021-05-19 14:18:21 +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
2022-04-11 22:58:51 +00:00
, svnSupport ? false , subversionClient , perlLibs , smtpPerlLibs
2021-05-19 18:35:30 +00:00
, perlSupport ? stdenv . buildPlatform == stdenv . hostPlatform
2020-06-14 04:05:35 +00:00
, nlsSupport ? true
2021-02-13 13:02:17 +00:00
, osxkeychainSupport ? stdenv . isDarwin
2022-04-11 22:58:51 +00:00
, guiSupport ? false
2013-01-28 20:24:04 +00:00
, withManual ? true
2010-03-13 06:07:44 +00:00
, pythonSupport ? true
2017-08-05 14:39:33 +00:00
, withpcre2 ? true
2022-12-23 15:47:20 +00:00
, sendEmailSupport ? perlSupport
2022-04-25 17:07:21 +00:00
, Security , CoreServices
2021-04-03 22:29:55 +00:00
, nixosTests
2018-07-22 19:20:37 +00:00
, withLibsecret ? false
2021-01-19 06:50:56 +00:00
, pkg-config , glib , libsecret
2019-01-06 11:41:22 +00:00
, gzip # needed at runtime by gitweb.cgi
2022-03-29 23:14:27 +00:00
, withSsh ? false
2022-07-16 16:32:41 +00:00
, doInstallCheck ? ! stdenv . isDarwin # extremely slow on darwin
2022-08-04 19:26:32 +00:00
, tests
2008-06-11 12:31:44 +00:00
} :
2008-05-22 08:06:52 +00:00
2021-02-13 13:02:17 +00:00
assert osxkeychainSupport -> stdenv . isDarwin ;
2018-04-22 17:58:30 +00:00
assert sendEmailSupport -> perlSupport ;
assert svnSupport -> perlSupport ;
2010-04-02 07:17:11 +00:00
let
2023-02-14 20:24:56 +00:00
version = " 2 . 3 9 . 2 " ;
2018-04-22 17:58:30 +00:00
svn = subversionClient . override { perlBindings = perlSupport ; } ;
2019-01-06 11:41:22 +00:00
gitwebPerlLibs = with perlPackages ; [ CGI HTMLParser CGIFast FCGI FCGIProcManager HTMLTagCloud ] ;
2010-04-02 07:17:11 +00:00
in
2012-06-04 15:54:57 +00:00
2022-07-16 16:32:41 +00:00
stdenv . mkDerivation ( finalAttrs : {
2022-03-01 09:47:32 +00:00
pname = " g i t "
+ lib . optionalString svnSupport " - w i t h - s v n "
+ lib . optionalString ( ! svnSupport && ! guiSupport && ! sendEmailSupport && ! withManual && ! pythonSupport && ! withpcre2 ) " - m i n i m a l " ;
2019-08-13 21:52:01 +00:00
inherit version ;
2007-04-26 16:14:01 +00:00
src = fetchurl {
2014-03-20 14:44:25 +00:00
url = " h t t p s : / / w w w . k e r n e l . o r g / p u b / s o f t w a r e / s c m / g i t / g i t - ${ version } . t a r . x z " ;
2023-02-14 20:24:56 +00:00
sha256 = " R 1 9 1 8 T c 7 L N T k O H B h h R d Z Z t X B H 2 j E 2 x 5 I w m J X x D 3 c 8 t Y = " ;
2007-04-26 16:14:01 +00:00
} ;
2021-01-15 13:21:58 +00:00
outputs = [ " o u t " ] ++ lib . optional withManual " d o c " ;
2022-03-24 13:17:29 +00:00
separateDebugInfo = true ;
2018-04-17 17:06:44 +00:00
2016-02-26 17:38:15 +00:00
hardeningDisable = [ " f o r m a t " ] ;
2015-12-23 01:59:47 +00:00
2018-04-13 21:55:26 +00:00
enableParallelBuilding = true ;
2014-11-25 22:49:11 +00:00
patches = [
./docbook2texi.patch
2016-02-20 14:07:27 +00:00
./git-sh-i18n.patch
2017-11-17 12:36:14 +00:00
./git-send-email-honor-PATH.patch
2018-04-13 21:55:26 +00:00
./installCheck-path.patch
2022-03-29 23:14:27 +00:00
] ++ lib . optionals withSsh [
./ssh-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 = ''
2018-04-13 21:55:26 +00:00
# Fix references to gettext introduced by ./git-sh-i18n.patch
substituteInPlace git-sh-i18n . sh \
- - subst-var-by gettext $ { gettext }
2021-09-13 17:58:06 +00:00
# ensure we are using the correct shell when executing the test scripts
patchShebangs t /* . s h
2022-03-29 23:14:27 +00:00
'' + l i b . o p t i o n a l S t r i n g w i t h S s h ''
for x in connect . c git-gui/lib/remote_add.tcl ; do
substituteInPlace " $ x " \
- - subst-var-by ssh " ${ openssh } / b i n / s s h "
done
2016-03-25 21:05:32 +00:00
'' ;
2022-09-25 02:49:25 +00:00
nativeBuildInputs = [ gettext perlPackages . perl makeWrapper pkg-config ]
2021-05-19 14:18:21 +00:00
++ lib . optionals withManual [ asciidoc texinfo xmlto docbook2x
docbook_xsl docbook_xml_dtd_45 libxslt ] ;
2021-10-23 03:36:33 +00:00
buildInputs = [ curl openssl zlib expat cpio libiconv bash ]
2021-01-15 13:21:58 +00:00
++ lib . optionals perlSupport [ perlPackages . perl ]
++ lib . optionals guiSupport [ tcl tk ]
++ lib . optionals withpcre2 [ pcre2 ]
2022-04-25 17:07:21 +00:00
++ lib . optionals stdenv . isDarwin [ Security CoreServices ]
2022-09-25 02:49:25 +00:00
++ lib . optionals withLibsecret [ glib libsecret ] ;
2016-10-11 03:13:09 +00:00
2013-03-09 22:57:57 +00:00
# required to support pthread_cancel()
2021-06-03 10:04:26 +00:00
NIX_LDFLAGS = lib . optionalString ( stdenv . cc . isGNU && stdenv . hostPlatform . libc == " g l i b c " ) " - l g c c _ s "
2021-01-15 13:21:58 +00:00
+ lib . optionalString ( stdenv . isFreeBSD ) " - l t h r " ;
2013-03-09 22:57:57 +00:00
2021-10-23 03:36:33 +00:00
configureFlags = [
" a c _ c v _ p r o g _ C U R L _ C O N F I G = ${ lib . getDev curl } / b i n / c u r l - c o n f i g "
] ++ lib . optionals ( stdenv . buildPlatform != stdenv . hostPlatform ) [
2017-12-10 18:52:34 +00:00
" a c _ c v _ f r e a d _ r e a d s _ d i r e c t o r i e s = y e s "
" a c _ c v _ s n p r i n t f _ r e t u r n s _ b o g u s = n o "
2020-03-12 03:40:57 +00:00
" a c _ c v _ i c o n v _ o m i t s _ b o m = n o "
2017-12-10 18:52:34 +00:00
] ;
2018-04-11 11:00:40 +00:00
preBuild = ''
makeFlagsArray + = ( perllibdir = $ out / $ ( perl - MConfig - wle ' print substr $ Config { installsitelib } , 1 + length $ Config { siteprefixexp } ' ) )
'' ;
2018-04-22 19:22:34 +00:00
makeFlags = [
2018-04-11 11:00:40 +00:00
" p r e f i x = \$ { o u t } "
2018-04-22 19:22:34 +00:00
]
2021-10-17 09:06:26 +00:00
# Git does not allow setting a shell separately for building and run-time.
# Therefore lets leave it at the default /bin/sh when cross-compiling
++ lib . optional ( stdenv . buildPlatform == stdenv . hostPlatform ) " S H E L L _ P A T H = ${ stdenv . shell } "
2018-12-15 03:50:31 +00:00
++ ( if perlSupport then [ " P E R L _ P A T H = ${ perlPackages . perl } / b i n / p e r l " ] else [ " N O _ P E R L = 1 " ] )
2019-11-28 11:27:31 +00:00
++ ( if pythonSupport then [ " P Y T H O N _ P A T H = ${ python3 } / b i n / p y t h o n " ] else [ " N O _ P Y T H O N = 1 " ] )
2021-01-15 13:21:58 +00:00
++ lib . optionals stdenv . isSunOS [ " I N S T A L L = i n s t a l l " " N O _ I N E T _ N T O P = " " N O _ I N E T _ P T O N = " ]
2019-10-22 18:38:42 +00:00
++ ( if stdenv . isDarwin then [ " N O _ A P P L E _ C O M M O N _ C R Y P T O = 1 " ] else [ " s y s c o n f d i r = / e t c " ] )
2021-01-15 13:21:58 +00:00
++ lib . optionals stdenv . hostPlatform . isMusl [ " N O _ S Y S _ P O L L _ H = 1 " " N O _ G E T T E X T = Y e s P l e a s e " ]
++ lib . optional withpcre2 " U S E _ L I B P C R E 2 = 1 "
++ lib . optional ( ! nlsSupport ) " N O _ G E T T E X T = 1 "
2020-03-02 12:57:39 +00:00
# git-gui refuses to start with the version of tk distributed with
# macOS Catalina. We can prevent git from building the .app bundle
# by specifying an invalid tk framework. The postInstall step will
# then ensure that git-gui uses tcl/tk from nixpkgs, which is an
# acceptable version.
#
# See https://github.com/Homebrew/homebrew-core/commit/dfa3ccf1e7d3901e371b5140b935839ba9d8b706
2021-01-15 13:21:58 +00:00
++ lib . optional stdenv . isDarwin " T K F R A M E W O R K = / n o n e x i s t e n t " ;
2014-04-14 19:53:15 +00:00
2021-10-17 09:06:26 +00:00
disallowedReferences = lib . optionals ( stdenv . buildPlatform != stdenv . hostPlatform ) [
stdenv . shellPackage
] ;
2018-07-22 19:20:37 +00:00
postBuild = ''
make - C contrib/subtree
2021-01-15 13:21:58 +00:00
'' + ( l i b . o p t i o n a l S t r i n g p e r l S u p p o r t ''
2019-02-19 21:52:13 +00:00
make - C contrib/diff-highlight
2021-02-13 13:02:17 +00:00
'' ) + ( l i b . o p t i o n a l S t r i n g o s x k e y c h a i n S u p p o r t ''
2018-07-22 19:20:37 +00:00
make - C contrib/credential/osxkeychain
2021-01-15 13:21:58 +00:00
'' ) + ( l i b . o p t i o n a l S t r i n g w i t h L i b s e c r e t ''
2018-07-22 19:20:37 +00:00
make - C contrib/credential/libsecret
'' ) ;
2007-11-14 21:41:01 +00:00
2018-04-13 21:55:26 +00: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 21:35:25 +00:00
2019-11-05 01:10:31 +00:00
installFlags = [ " N O _ I N S T A L L _ H A R D L I N K S = 1 " ] ;
2013-04-22 13:55:01 +00:00
2021-02-13 13:02:17 +00:00
preInstall = ( lib . optionalString osxkeychainSupport ''
2016-10-11 03:13:09 +00:00
mkdir - p $ out/bin
2018-07-22 19:20:37 +00:00
ln - s $ out/share/git/contrib/credential/osxkeychain/git-credential-osxkeychain $ out/bin /
2018-06-21 23:45:43 +00:00
rm - f $ PWD/contrib/credential/osxkeychain/git-credential-osxkeychain.o
2021-01-15 13:21:58 +00:00
'' ) + ( l i b . o p t i o n a l S t r i n g w i t h L i b s e c r e t ''
2018-07-22 19:20:37 +00:00
mkdir - p $ out/bin
ln - s $ out/share/git/contrib/credential/libsecret/git-credential-libsecret $ out/bin /
rm - f $ PWD/contrib/credential/libsecret/git-credential-libsecret.o
'' ) ;
2016-10-11 03:13:09 +00:00
2008-02-22 16:51:51 +00:00
postInstall =
2008-06-11 12:31:44 +00:00
''
2012-06-21 19:23:40 +00:00
notSupported ( ) {
2014-04-05 22:39:53 +00:00
unlink $ 1 || true
2008-07-03 12:51:23 +00:00
}
2013-08-01 14:36:54 +00:00
# Install git-subtree.
2021-05-19 14:18:21 +00:00
make - C contrib/subtree install $ { lib . optionalString withManual " i n s t a l l - d o c " }
2013-08-01 14:36:54 +00:00
rm - rf contrib/subtree
2011-07-07 23:48:38 +00:00
# Install contrib stuff.
2012-01-18 20:16:00 +00:00
mkdir - p $ out/share/git
2018-04-13 21:55:26 +00:00
cp - a contrib $ out/share/git /
2019-09-09 17:15:59 +00:00
mkdir - p $ out/share/bash-completion/completions
ln - s $ out/share/git/contrib/completion/git-completion.bash $ out/share/bash-completion/completions/git
2020-11-12 21:22:18 +00:00
ln - s $ out/share/git/contrib/completion/git-prompt.sh $ out/share/bash-completion/completions /
2022-03-02 18:10:49 +00:00
# only readme, developed in another repo
rm - r contrib/hooks/multimail
mkdir - p $ out/share/git-core/contrib
cp - a contrib/hooks / $ out/share/git-core/contrib /
substituteInPlace $ out/share/git-core/contrib/hooks/pre-auto-gc-battery \
- - replace ' grep' ' $ { gnugrep } /bin/grep ' \
2010-09-18 12:45:04 +00: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 12:45:04 +00:00
substituteInPlace $ out/libexec/git-core/git-sh-setup \
- - replace ' grep' ' $ { gnugrep } /bin/grep ' \
- - replace ' egrep' ' $ { gnugrep } /bin/egrep '
2011-07-20 22:56:31 +00:00
2017-07-11 16:00:17 +00:00
# Fix references to the perl, sed, awk and various coreutil binaries used by
# shell scripts that git calls (e.g. filter-branch)
SCRIPT = " $ ( c a t < < ' E O S '
BEGIN {
@ a = (
2018-04-22 17:58:30 +00:00
' $ { gnugrep } /bin/grep ' , ' $ { gnused } /bin/sed ' , ' $ { gawk } /bin/awk ' ,
2017-07-11 16:00:17 +00:00
' $ { coreutils } /bin/cut ' , ' $ { coreutils } /bin/basename ' , ' $ { coreutils } /bin/dirname ' ,
' $ { coreutils } /bin/wc ' , ' $ { coreutils } /bin/tr '
2021-01-15 13:21:58 +00:00
$ { lib . optionalString perlSupport " , ' ${ perlPackages . perl } / b i n / p e r l ' " }
2017-07-11 16:00:17 +00:00
) ;
}
foreach $ c ( @ a ) {
$ n = ( split ( " / " , $ c ) ) [ -1 ] ;
s | ( ? <= [ ^ #][^/.-])\b''${n}(?=\s)|''${c}|g
}
EOS
) "
perl -0777 - i - pe " $ S C R I P T " \
2019-07-06 17:29:00 +00:00
$ out/libexec/git-core/git- { sh-setup , filter-branch , merge-octopus , mergetool , quiltimport , request-pull , submodule , subtree , web--browse }
2013-04-19 20:29:30 +00:00
2016-02-16 21:01:21 +00:00
2015-07-09 06:32:45 +00: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
2022-05-08 20:21:17 +00:00
ln - s $ out/share/git/contrib/git-jump/git-jump $ out/bin/git-jump
2021-01-15 13:21:58 +00:00
'' + l i b . o p t i o n a l S t r i n g p e r l S u p p o r t ''
2017-10-02 13:25:12 +00:00
# wrap perl commands
2020-04-15 04:09:12 +00:00
makeWrapper " $ o u t / s h a r e / g i t / c o n t r i b / c r e d e n t i a l / n e t r c / g i t - c r e d e n t i a l - n e t r c . p e r l " $ out/bin/git-credential-netrc \
2018-12-15 03:50:31 +00:00
- - set PERL5LIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath perlLibs } "
2017-10-02 13:25:12 +00:00
wrapProgram $ out/libexec/git-core/git-cvsimport \
2018-12-15 03:50:31 +00:00
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath perlLibs } "
2017-10-02 13:25:12 +00:00
wrapProgram $ out/libexec/git-core/git-add--interactive \
2018-12-15 03:50:31 +00:00
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath perlLibs } "
2017-10-02 13:25:12 +00:00
wrapProgram $ out/libexec/git-core/git-archimport \
2018-12-15 03:50:31 +00:00
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath perlLibs } "
2017-10-02 13:25:12 +00:00
wrapProgram $ out/libexec/git-core/git-instaweb \
2018-12-15 03:50:31 +00:00
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath perlLibs } "
2017-10-02 13:25:12 +00:00
wrapProgram $ out/libexec/git-core/git-cvsexportcommit \
2018-12-15 03:50:31 +00:00
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath perlLibs } "
2019-01-06 11:41:22 +00:00
# gzip (and optionally bzip2, xz, zip) are runtime dependencies for
# gitweb.cgi, need to patch so that it's found
sed - i - e " s | ' c o m p r e s s o r ' = > \[ ' g z i p ' | ' c o m p r e s s o r ' = > [ ' ${ gzip } / b i n / g z i p ' | " \
2019-01-06 13:09:20 +00:00
$ out/share/gitweb/gitweb.cgi
2019-01-06 11:41:22 +00:00
# Give access to CGI.pm and friends (was removed from perl core in 5.22)
2021-01-15 13:21:58 +00:00
for p in $ { lib . concatStringsSep " " gitwebPerlLibs } ; do
2019-01-06 11:41:22 +00:00
sed - i - e " / u s e C G I / i u s e l i b \" $ p / ${ perlPackages . perl . libPrefix } \" ; " \
2019-01-06 13:09:20 +00:00
" $ o u t / s h a r e / g i t w e b / g i t w e b . c g i "
2019-01-06 11:41:22 +00:00
done
2011-07-07 23:48:38 +00:00
''
2008-06-28 15:22:31 +00:00
2018-12-15 03:50:31 +00:00
+ ( if svnSupport then ''
# wrap git-svn
wrapProgram $ out/libexec/git-core/git-svn \
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath ( perlLibs ++ [ svn . out ] ) } " \
2016-04-30 16:19:14 +00:00
- - prefix PATH : " ${ svn . out } / b i n " ''
2008-07-03 12:51:23 +00:00
else '' # r e p l a c e g i t - s v n b y n o t i f i c a t i o n s c r i p t
2014-04-05 22:39:53 +00:00
notSupported $ out/libexec/git-core/git-svn
2018-12-15 03:50:31 +00:00
'' )
+ ( if sendEmailSupport then ''
# wrap git-send-email
2012-06-21 19:23:40 +00:00
wrapProgram $ out/libexec/git-core/git-send-email \
2018-12-15 03:50:31 +00:00
- - set GITPERLLIB " $ o u t / ${ perlPackages . perl . libPrefix } : ${ perlPackages . makePerlPath smtpPerlLibs } "
'' e l s e ''
# replace git-send-email by notification script
2014-04-05 22:39:53 +00:00
notSupported $ out/libexec/git-core/git-send-email
2018-12-15 03:50:31 +00:00
'' )
2010-05-15 10:38:28 +00:00
2021-01-15 13:21:58 +00:00
+ lib . optionalString withManual '' # I n s t a l l m a n p a g e s
treewide: drop -l$NIX_BUILD_CORES
Passing `-l$NIX_BUILD_CORES` improperly limits the overall system load.
For a build machine which is configured to run `$B` builds where each
build gets `total cores / B` cores (`$C`), passing `-l $C` to make will
improperly limit the load to `$C` instead of `$B * $C`.
This effect becomes quite pronounced on machines with 80 cores, with
40 simultaneous builds and a cores limit of 2. On a machine with this
configuration, Nix will run 40 builds and make will limit the overall
system load to approximately 2. A build machine with this many cores
can happily run with a load approaching 80.
A non-solution is to oversubscribe the machine, by picking a larger
`$C`. However, there is no way to divide the number of cores in a way
which fairly subdivides the available cores when `$B` is greater than
1.
There has been exploration of passing a jobserver in to the sandbox,
or sharing a jobserver between all the builds. This is one option, but
relatively complicated and only supports make. Lots of other software
uses its own implementation of `-j` and doesn't support either `-l` or
the Make jobserver.
For the case of an interactive user machine, the user should limit
overall system load using `$B`, `$C`, and optionally systemd's
cpu/network/io limiting features.
Making this change should significantly improve the utilization of our
build farm, and improve the throughput of Hydra.
2022-09-22 15:17:14 +00:00
make - j $ NIX_BUILD_CORES PERL_PATH = " ${ buildPackages . perl } / b i n / p e r l " cmd-list . made install install-html \
2008-03-15 20:52:21 +00:00
- C Documentation ''
2008-06-11 12:31:44 +00: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 | e x e c ' w i s h ' | e x e c ' ${ tk } / b i n / w i s h ' | g " \
- e " s | e x e c w i s h | e x e c ' ${ tk } / b i n / w i s h ' | g " \
2012-08-06 19:26:24 +00:00
" $ o u t / $ p r o g "
2011-01-07 11:03:42 +00:00
done
2019-12-09 22:05:13 +00:00
ln - s $ out/share/git/contrib/completion/git-completion.bash $ out/share/bash-completion/completions/gitk
2008-07-03 12:51:23 +00:00
'' e l s e ''
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 22:39:53 +00:00
notSupported " $ o u t / $ p r o g "
2008-07-03 12:51:23 +00:00
done
2016-10-11 03:13:09 +00:00
'' )
2021-02-13 13:02:17 +00:00
+ lib . optionalString osxkeychainSupport ''
# enable git-credential-osxkeychain on darwin if desired (default)
2020-11-14 17:32:52 +00:00
mkdir - p $ out/etc
2016-10-11 03:13:09 +00:00
cat > $ out/etc/gitconfig < < EOF
2018-12-15 03:50:31 +00:00
[ credential ]
helper = osxkeychain
EOF
2016-10-11 03:13:09 +00:00
'' ;
2013-03-25 11:21:45 +00:00
2018-04-13 21:55:26 +00:00
## InstallCheck
Merge staging-next into master (#44009)
* substitute(): --subst-var was silently coercing to "" if the variable does not exist.
* libffi: simplify using `checkInputs`
* pythonPackges.hypothesis, pythonPackages.pytest: simpify dependency cycle fix
* utillinux: 2.32 -> 2.32.1
https://lkml.org/lkml/2018/7/16/532
* busybox: 1.29.0 -> 1.29.1
* bind: 9.12.1-P2 -> 9.12.2
https://ftp.isc.org/isc/bind9/9.12.2/RELEASE-NOTES-bind-9.12.2.html
* curl: 7.60.0 -> 7.61.0
* gvfs: make tests run, but disable
* ilmbase: disable tests on i686. Spooky!
* mdds: fix tests
* git: disable checks as tests are run in installcheck
* ruby: disable tests
* libcommuni: disable checks as tests are run in installcheck
* librdf: make tests run, but disable
* neon, neon_0_29: make tests run, but disable
* pciutils: 3.6.0 -> 3.6.1
Semi-automatic update generated by https://github.com/ryantm/nixpkgs-update tools. This update was made based on information from https://repology.org/metapackage/pciutils/versions.
* mesa: more include fixes
mostly from void-linux (thanks!)
* npth: 1.5 -> 1.6
minor bump
* boost167: Add lockfree next_prior patch
* stdenv: cleanup darwin bootstrapping
Also gets rid of the full python and some of it's dependencies in the
stdenv build closure.
* Revert "pciutils: use standardized equivalent for canonicalize_file_name"
This reverts commit f8db20fb3ae382eba1ba2b160fe24739f43c0bd7.
Patching should no longer be needed with 3.6.1.
* binutils-wrapper: Try to avoid adding unnecessary -L flags
(cherry picked from commit f3758258b8895508475caf83e92bfb236a27ceb9)
Signed-off-by: Domen Kožar <domen@dev.si>
* libffi: don't check on darwin
libffi usages in stdenv broken darwin. We need to disable doCheck for that case.
* "rm $out/share/icons/hicolor/icon-theme.cache" -> hicolor-icon-theme setup-hook
* python.pkgs.pytest: setupHook to prevent creation of .pytest-cache folder, fixes #40273
When `py.test` was run with a folder as argument, it would not only
search for tests in that folder, but also create a .pytest-cache folder.
Not only is this state we don't want, but it was also causing
collisions.
* parity-ui: fix after merge
* python.pkgs.pytest-flake8: disable test, fix build
* Revert "meson: 0.46.1 -> 0.47.0"
With meson 0.47.0 (or 0.47.1, or git)
things are very wrong re:rpath handling
resulting in at best missing libs but
even corrupt binaries :(.
When we run patchelf it masks the problem
by removing obviously busted paths.
Which is probably why this wasn't noticed immediately.
Unfortunately the binary already
has a long series of paths scribbled
in a space intended for a much smaller string;
in my testing it was something like
lengths were 67 with 300+ written to it.
I think we've reported the relevant issues upstream,
but unfortunately it appears our patches
are what introduces the overwrite/corruption
(by no longer being correct in what they assume)
This doesn't look so bad to fix but it's
not something I can spend more time on
at the moment.
--
Interestingly the overwritten string data
(because it is scribbled past the bounds)
remains in the binary and is why we're suddenly
seeing unexpected references in various builds
-- notably this is is the reason we're
seeing the "extra-utils" breakage
that entirely crippled NixOS on master
(and probably on staging before?).
Fixes #43650.
This reverts commit 305ac4dade5758c58e8ab1666ad0197fd305828d.
(cherry picked from commit 273d68eff8f7b6cd4ebed3718e5078a0f43cb55d)
Signed-off-by: Domen Kožar <domen@dev.si>
2018-07-24 14:04:48 +00:00
doCheck = false ;
2022-07-16 16:32:41 +00:00
inherit doInstallCheck ;
2018-04-13 21:55:26 +00:00
installCheckTarget = " t e s t " ;
# see also installCheckFlagsArray
git: fix the "perlSupport = false" configuration
When perlSupport = false, we will set NO_PERL=1, and build Git without
Perl support. This is a build option that Git supports. However, Git's
test suite still requires a Perl to be available to run the tests, and
we did not provide one. The tests respect PERL_PATH, and if it is not
set, they default to /usr/bin/perl.
Before this commit, if we set "perlSupport = false", then no Perl would
be available to the package, and so the tests would default to
/usr/bin/perl. When building without a sandbox, that could still work,
even though there is no "perl" on the path, because the tests defaulted
to an absolute path.
You can reproduce this issue as follows:
nix-build -E 'let pkgs = (import ./default.nix) {}; in pkgs.git.override { perlSupport = false; }'
I just ran into this when trying to build pkgs.git from an old version
of Nixpkgs that I was able to build just fine in the past, and today it
would not build any more, complaining when running the tests:
make -C t/ all
make[1]: Entering directory '/build/git-2.18.0/t'
rm -f -r 'test-results'
/nix/store/czx8vkrb9jdgjyz8qfksh10vrnqa723l-bash-4.4-p23/bin/bash: /usr/bin/perl: No such file or directory
In the past the sandbox was not enabled by default, so then it worked
for me. But now that it is enabled, my host's (not NixOS) /usr/bin/perl
is no longer accessible, and the build fails.
The solution is to explicitly set PERL_PATH when running the tests. This
*almost* works, except that there appears to be a bug in the test for
"git request-pull". That command is a Bash script that calls Perl at
some point, so it requires Perl, and therefore it cannot be supported
when NO_PERL=1. But that particular test does not check whether Git was
compiled with Perl support (other tests do include that check), and that
makes the test fail:
t5150-request-pull.sh ..............................
not ok 4 - pull request after push
not ok 5 - request asks HEAD to be pulled
not ok 6 - pull request format
not ok 7 - request-pull ignores OPTIONS_KEEPDASHDASH poison
not ok 9 - pull request with mismatched object
not ok 10 - pull request with stale object
Dubious, test returned 1 (wstat 256, 0x100)
Failed 6/10 subtests
This output makes sense if you look at t5150-request-pull.sh. Test 1 and
2 are setup steps. Test 3 does call request-pull, but it expects the
command to fail, and it cannot distinguish between the command exiting
with a nonzero exit code, or failing to start it at all. So test 3
passes for the wrong reasons. Test 4 through 10 all call request-pull,
so they fail.
The quick workaround here is to disable the test. I will look into
upstreaming a patch that makes the test skip itself when Perl is
disabled.
2019-11-25 22:14:28 +00:00
installCheckFlags = [
" D E F A U L T _ T E S T _ T A R G E T = p r o v e "
" P E R L _ P A T H = ${ buildPackages . perl } / b i n / p e r l "
] ;
2018-04-13 21:55:26 +00:00
preInstallCheck = ''
installCheckFlagsArray + = (
GIT_PROVE_OPTS = " - - j o b s $ N I X _ B U I L D _ C O R E S - - f a i l u r e s - - s t a t e = f a i l e d , s a v e "
GIT_TEST_INSTALLED = $ out/bin
2021-01-15 13:21:58 +00:00
$ { lib . optionalString ( ! svnSupport ) " N O _ S V N _ T E S T S = y " }
2018-04-13 21:55:26 +00:00
)
function disable_test {
local test = $ 1 pattern = $ 2
if [ $ # -eq 1 ]; then
mv t / { , skip- } $ test . sh || true
else
sed - i t / $ test . sh \
2020-06-06 17:21:54 +00:00
- e " / ^ \s * t e s t _ e x p e c t _ . * $ p a t t e r n / , / ^ \s * ' * \$ / { s / ^ / : # / } "
2018-04-13 21:55:26 +00:00
fi
}
2021-06-08 16:38:11 +00:00
# Shared permissions are forbidden in sandbox builds:
substituteInPlace t/test-lib.sh \
- - replace " t e s t _ s e t _ p r e r e q P O S I X P E R M " " "
# TODO: Investigate while these still fail (without POSIXPERM):
disable_test t0001-init ' shared overrides system'
disable_test t0001-init ' init honors global core . sharedRepository'
2018-04-13 21:55:26 +00:00
disable_test t1301-shared-repo
2021-08-17 08:29:39 +00:00
# git-completion.bash: line 405: compgen: command not found:
disable_test t9902-completion ' option aliases are shown with GIT_COMPLETION_SHOW_ALL'
2018-04-13 21:55:26 +00:00
# Our patched gettext never fallbacks
disable_test t0201-gettext-fallbacks
2021-01-15 13:21:58 +00:00
$ { lib . optionalString ( ! sendEmailSupport ) ''
2018-04-13 21:55:26 +00:00
# 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 ?
2018-09-18 15:54:22 +00:00
# Tested to fail: 2.18.0 and 2.19.0
2018-04-13 21:55:26 +00:00
disable_test t1700-split-index " n u l l s h a 1 "
2018-06-25 16:05:08 +00:00
# Tested to fail: 2.18.0
disable_test t9902-completion " s o u r c i n g t h e c o m p l e t i o n s c r i p t c l e a r s c a c h e d - - o p t i o n s "
2018-09-18 15:54:22 +00:00
2021-03-11 09:22:05 +00:00
# Flaky tests:
disable_test t5319-multi-pack-index
2021-09-14 09:21:53 +00:00
disable_test t6421-merge-partial-clone
2021-03-11 09:22:05 +00:00
2022-09-16 01:29:18 +00:00
# Fails reproducibly on ZFS on Linux with formD normalization
disable_test t0021-conversion
disable_test t3910-mac-os-precompose
2021-01-15 13:21:58 +00:00
$ { lib . optionalString ( ! perlSupport ) ''
git: fix the "perlSupport = false" configuration
When perlSupport = false, we will set NO_PERL=1, and build Git without
Perl support. This is a build option that Git supports. However, Git's
test suite still requires a Perl to be available to run the tests, and
we did not provide one. The tests respect PERL_PATH, and if it is not
set, they default to /usr/bin/perl.
Before this commit, if we set "perlSupport = false", then no Perl would
be available to the package, and so the tests would default to
/usr/bin/perl. When building without a sandbox, that could still work,
even though there is no "perl" on the path, because the tests defaulted
to an absolute path.
You can reproduce this issue as follows:
nix-build -E 'let pkgs = (import ./default.nix) {}; in pkgs.git.override { perlSupport = false; }'
I just ran into this when trying to build pkgs.git from an old version
of Nixpkgs that I was able to build just fine in the past, and today it
would not build any more, complaining when running the tests:
make -C t/ all
make[1]: Entering directory '/build/git-2.18.0/t'
rm -f -r 'test-results'
/nix/store/czx8vkrb9jdgjyz8qfksh10vrnqa723l-bash-4.4-p23/bin/bash: /usr/bin/perl: No such file or directory
In the past the sandbox was not enabled by default, so then it worked
for me. But now that it is enabled, my host's (not NixOS) /usr/bin/perl
is no longer accessible, and the build fails.
The solution is to explicitly set PERL_PATH when running the tests. This
*almost* works, except that there appears to be a bug in the test for
"git request-pull". That command is a Bash script that calls Perl at
some point, so it requires Perl, and therefore it cannot be supported
when NO_PERL=1. But that particular test does not check whether Git was
compiled with Perl support (other tests do include that check), and that
makes the test fail:
t5150-request-pull.sh ..............................
not ok 4 - pull request after push
not ok 5 - request asks HEAD to be pulled
not ok 6 - pull request format
not ok 7 - request-pull ignores OPTIONS_KEEPDASHDASH poison
not ok 9 - pull request with mismatched object
not ok 10 - pull request with stale object
Dubious, test returned 1 (wstat 256, 0x100)
Failed 6/10 subtests
This output makes sense if you look at t5150-request-pull.sh. Test 1 and
2 are setup steps. Test 3 does call request-pull, but it expects the
command to fail, and it cannot distinguish between the command exiting
with a nonzero exit code, or failing to start it at all. So test 3
passes for the wrong reasons. Test 4 through 10 all call request-pull,
so they fail.
The quick workaround here is to disable the test. I will look into
upstreaming a patch that makes the test skip itself when Perl is
disabled.
2019-11-25 22:14:28 +00:00
# request-pull is a Bash script that invokes Perl, so it is not available
# when NO_PERL=1, and the test should be skipped, but the test suite does
# not check for the Perl prerequisite.
disable_test t5150-request-pull
'' }
2021-01-15 13:21:58 +00:00
'' + l i b . o p t i o n a l S t r i n g s t d e n v . i s D a r w i n ''
2019-11-20 17:41:33 +00:00
# XXX: Some tests added in 2.24.0 fail.
# Please try to re-enable on the next release.
disable_test t7816-grep-binary-pattern
2021-10-09 02:49:23 +00:00
# fail (as of 2.33.0)
#===( 18623;1208 8/? 224/? 2/? )= =fatal: Not a valid object name refs/tags/signed-empty
disable_test t6300-for-each-ref
#===( 22665;1651 9/? 1/? 0/? 0/? )= =/private/tmp/nix-build-git-2.33.0.drv-2/git-2.33.0/t/../contrib/completion/git-completion.bash: line 405: compgen: command not found
disable_test t9902-completion
2021-10-25 06:11:43 +00:00
# not ok 1 - populate workdir (with 2.33.1 on x86_64-darwin)
2021-10-24 23:48:23 +00:00
disable_test t5003-archive-zip
2022-04-27 20:47:23 +00:00
'' + l i b . o p t i o n a l S t r i n g ( s t d e n v . i s D a r w i n & & s t d e n v . i s A a r c h 6 4 ) ''
disable_test t7527-builtin-fsmonitor
2021-01-15 13:21:58 +00:00
'' + l i b . o p t i o n a l S t r i n g s t d e n v . h o s t P l a t f o r m . i s M u s l ''
2018-05-03 20:14:24 +00:00
# Test fails (as of 2.17.0, musl 1.1.19)
disable_test t3900-i18n-commit
2018-06-25 16:05:08 +00:00
# Fails largely due to assumptions about BOM
# Tested to fail: 2.18.0
disable_test t0028-working-tree-encoding
2018-04-13 21:55:26 +00:00
'' ;
2018-10-08 16:05:27 +00:00
stripDebugList = [ " l i b " " l i b e x e c " " b i n " " s h a r e / g i t / c o n t r i b / c r e d e n t i a l / l i b s e c r e t " ] ;
2021-06-25 00:49:13 +00:00
passthru = {
shellPath = " / b i n / g i t - s h e l l " ;
tests = {
2022-07-16 16:32:41 +00:00
withInstallCheck = finalAttrs . finalPackage . overrideAttrs ( _ : {
doInstallCheck = true ;
} ) ;
2021-06-25 00:49:13 +00:00
buildbot-integration = nixosTests . buildbot ;
2022-08-15 02:38:35 +00:00
} // tests . fetchgit ;
2021-04-03 22:29:55 +00: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 18:51:42 +00:00
2007-11-14 21:41:01 +00:00
meta = {
2020-04-01 01:11:51 +00:00
homepage = " h t t p s : / / g i t - s c m . c o m / " ;
2014-08-24 14:21:08 +00:00
description = " D i s t r i b u t e d v e r s i o n c o n t r o l s y s t e m " ;
2021-01-15 13:21:58 +00:00
license = lib . licenses . gpl2 ;
2021-03-09 19:04:30 +00:00
changelog = " h t t p s : / / g i t h u b . c o m / g i t / g i t / b l o b / v ${ version } / D o c u m e n t a t i o n / R e l N o t e s / ${ version } . t x t " ;
2008-03-30 22:19:20 +00:00
longDescription = ''
Git , a popular distributed version control system designed to
handle very large projects with speed and efficiency .
'' ;
2021-01-15 13:21:58 +00:00
platforms = lib . platforms . all ;
2021-10-14 08:59:33 +00:00
maintainers = with lib . maintainers ; [ primeos wmertens globin ] ;
2007-11-14 21:41:01 +00:00
} ;
2022-07-16 16:32:41 +00:00
} )