git, gitweb: Fix git-instaweb

* Make the build system embed the correct path to gitweb into git-instaweb
* Move gitweb fixups to the git expression, to make sure that gitweb
used by git-instaweb is functional
* This will increase the closure size of git, but only with perlSupport
This commit is contained in:
Kirill Elagin 2019-01-06 14:41:22 +03:00
parent be1c03ddaf
commit 813c6d4664
No known key found for this signature in database
GPG Key ID: 914505DF3B3B7B76
2 changed files with 15 additions and 15 deletions

View File

@ -14,6 +14,7 @@
, darwin , darwin
, withLibsecret ? false , withLibsecret ? false
, pkgconfig, glib, libsecret , pkgconfig, glib, libsecret
, gzip # needed at runtime by gitweb.cgi
}: }:
assert sendEmailSupport -> perlSupport; assert sendEmailSupport -> perlSupport;
@ -22,6 +23,8 @@ assert svnSupport -> perlSupport;
let let
version = "2.19.2"; version = "2.19.2";
svn = subversionClient.override { perlBindings = perlSupport; }; svn = subversionClient.override { perlBindings = perlSupport; };
gitwebPerlLibs = with perlPackages; [ CGI HTMLParser CGIFast FCGI FCGIProcManager HTMLTagCloud ];
in in
stdenv.mkDerivation { stdenv.mkDerivation {
@ -84,6 +87,7 @@ stdenv.mkDerivation {
makeFlags = [ makeFlags = [
"prefix=\${out}" "prefix=\${out}"
"gitwebdir=\${gitweb}" # put in separate package for simpler maintenance
"SHELL_PATH=${stdenv.shell}" "SHELL_PATH=${stdenv.shell}"
] ]
++ (if perlSupport then ["PERL_PATH=${perlPackages.perl}/bin/perl"] else ["NO_PERL=1"]) ++ (if perlSupport then ["PERL_PATH=${perlPackages.perl}/bin/perl"] else ["NO_PERL=1"])
@ -169,9 +173,6 @@ stdenv.mkDerivation {
# HTTP(s) transports for pushing # HTTP(s) transports for pushing
ln -s $out/libexec/git-core/git-http-backend $out/bin/git-http-backend ln -s $out/libexec/git-core/git-http-backend $out/bin/git-http-backend
'' + stdenv.lib.optionalString perlSupport '' '' + stdenv.lib.optionalString perlSupport ''
# put in separate package for simpler maintenance
mv $out/share/gitweb $gitweb/
# wrap perl commands # wrap perl commands
makeWrapper "$out/share/git/contrib/credential/netrc/git-credential-netrc" $out/bin/git-credential-netrc \ makeWrapper "$out/share/git/contrib/credential/netrc/git-credential-netrc" $out/bin/git-credential-netrc \
--set PERL5LIB "$out/${perlPackages.perl.libPrefix}:${perlPackages.makePerlPath perlLibs}" --set PERL5LIB "$out/${perlPackages.perl.libPrefix}:${perlPackages.makePerlPath perlLibs}"
@ -185,6 +186,16 @@ stdenv.mkDerivation {
--set GITPERLLIB "$out/${perlPackages.perl.libPrefix}:${perlPackages.makePerlPath perlLibs}" --set GITPERLLIB "$out/${perlPackages.perl.libPrefix}:${perlPackages.makePerlPath perlLibs}"
wrapProgram $out/libexec/git-core/git-cvsexportcommit \ wrapProgram $out/libexec/git-core/git-cvsexportcommit \
--set GITPERLLIB "$out/${perlPackages.perl.libPrefix}:${perlPackages.makePerlPath perlLibs}" --set GITPERLLIB "$out/${perlPackages.perl.libPrefix}:${perlPackages.makePerlPath perlLibs}"
# gzip (and optionally bzip2, xz, zip) are runtime dependencies for
# gitweb.cgi, need to patch so that it's found
sed -i -e "s|'compressor' => \['gzip'|'compressor' => ['${gzip}/bin/gzip'|" \
$gitweb/gitweb.cgi
# Give access to CGI.pm and friends (was removed from perl core in 5.22)
for p in ${stdenv.lib.concatStringsSep " " gitwebPerlLibs}; do
sed -i -e "/use CGI /i use lib \"$p/${perlPackages.perl.libPrefix}\";" \
"$gitweb/gitweb.cgi"
done
'' ''
+ (if svnSupport then '' + (if svnSupport then ''

View File

@ -1,8 +1,7 @@
{ stdenv, git, gzip, perlPackages, fetchFromGitHub { stdenv, git, fetchFromGitHub
, gitwebTheme ? false }: , gitwebTheme ? false }:
let let
gitwebPerlLibs = with perlPackages; [ CGI HTMLParser CGIFast FCGI FCGIProcManager HTMLTagCloud ];
gitwebThemeSrc = fetchFromGitHub { gitwebThemeSrc = fetchFromGitHub {
owner = "kogakure"; owner = "kogakure";
repo = "gitweb-theme"; repo = "gitweb-theme";
@ -18,16 +17,6 @@ in stdenv.mkDerivation {
mkdir $out mkdir $out
mv * $out mv * $out
# gzip (and optionally bzip2, xz, zip) are runtime dependencies for
# gitweb.cgi, need to patch so that it's found
sed -i -e "s|'compressor' => \['gzip'|'compressor' => ['${gzip}/bin/gzip'|" \
$out/gitweb.cgi
# Give access to CGI.pm and friends (was removed from perl core in 5.22)
for p in ${stdenv.lib.concatStringsSep " " gitwebPerlLibs}; do
sed -i -e "/use CGI /i use lib \"$p/${perlPackages.perl.libPrefix}\";" \
"$out/gitweb.cgi"
done
${stdenv.lib.optionalString gitwebTheme "cp ${gitwebThemeSrc}/* $out/static"} ${stdenv.lib.optionalString gitwebTheme "cp ${gitwebThemeSrc}/* $out/static"}
''; '';