anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / applications / misc / ikiwiki / default.nix
blob49798c843231c5ed1fa7ace49b52e75d6e61abb6
1 { lib, stdenv, fetchurl, fetchpatch, perlPackages, gettext, makeWrapper, ImageMagick, which, highlight
2 , gitSupport ? false, git
3 , docutilsSupport ? false, python, docutils
4 , monotoneSupport ? false, monotone
5 , bazaarSupport ? false, breezy
6 , cvsSupport ? false, cvs, cvsps
7 , subversionSupport ? false, subversion
8 , mercurialSupport ? false, mercurial
9 , extraUtils ? []
12 stdenv.mkDerivation rec {
13   pname = "ikiwiki";
14   version = "3.20200202.3";
16   src = fetchurl {
17     url = "mirror://debian/pool/main/i/ikiwiki/ikiwiki_${version}.orig.tar.xz";
18     sha256 = "0skrc8r4wh4mjfgw1c94awr5sacfb9nfsbm4frikanc9xsy16ksr";
19   };
21   nativeBuildInputs = [ makeWrapper ];
22   buildInputs = [ which highlight ]
23     ++ (with perlPackages; [ perl TextMarkdown URI HTMLParser HTMLScrubber HTMLTemplate
24       TimeDate gettext DBFile CGISession CGIFormBuilder LocaleGettext
25       RpcXML XMLSimple ImageMagick YAML YAMLLibYAML HTMLTree AuthenPassphrase
26       NetOpenIDConsumer LWPxParanoidAgent CryptSSLeay ])
27     ++ lib.optionals docutilsSupport [
28          (python.withPackages (pp: with pp; [ pygments ]))
29          docutils
30        ]
31     ++ lib.optionals gitSupport [git]
32     ++ lib.optionals monotoneSupport [monotone]
33     ++ lib.optionals bazaarSupport [breezy]
34     ++ lib.optionals cvsSupport [cvs cvsps perlPackages.Filechdir]
35     ++ lib.optionals subversionSupport [subversion]
36     ++ lib.optionals mercurialSupport [mercurial];
38   patches = [
39     # A few markdown tests fail, but this is expected when using Text::Markdown
40     # instead of Text::Markdown::Discount.
41     ./remove-markdown-tests.patch
43     (fetchpatch {
44       name = "Catch-up-to-highlight-4.0-API-change";
45       url = "http://source.ikiwiki.branchable.com/?p=source.git;a=patch;h=9ea3f9dfe7c0341f4e002b48728b8139293e19d0";
46       sha256 = "16s4wvsfclx0a5cm2awr69dvw2vsi8lpm0d7kyl5w0kjlmzfc7h9";
47     })
48   ];
50   postPatch = ''
51     sed -i s@/usr/bin/perl@${perlPackages.perl}/bin/perl@ pm_filter mdwn2man
52     sed -i s@/etc/ikiwiki@$out/etc@ Makefile.PL
53     sed -i /ENV{PATH}/d ikiwiki.in
54     # State the gcc dependency, and make the cgi use our wrapper
55     sed -i -e 's@$0@"'$out/bin/ikiwiki'"@' \
56         -e "s@'cc'@'${stdenv.cc}/bin/gcc'@" IkiWiki/Wrapper.pm
57     # Without patched plugin shebangs, some tests like t/rst.t fail
58     # (with docutilsSupport enabled)
59     patchShebangs plugins/*
61     # Creating shared git repo fails when running tests in Nix sandbox.
62     # The error is: "fatal: Could not make /tmp/ikiwiki-test-git.2043/repo/branches/ writable by group".
63     # Hopefully, not many people use `ikiwiki-makerepo` to create locally shared repositories these days.
64     substituteInPlace ikiwiki-makerepo --replace "git --bare init --shared" "git --bare init"
65   '';
67   configurePhase = "perl Makefile.PL PREFIX=$out";
69   postInstall = ''
70     for a in "$out/bin/"*; do
71       wrapProgram $a --suffix PERL5LIB : $PERL5LIB --prefix PATH : ${perlPackages.perl}/bin:$out/bin \
72       ${lib.optionalString gitSupport "--prefix PATH : ${git}/bin "} \
73       ${lib.optionalString monotoneSupport "--prefix PATH : ${monotone}/bin "} \
74       ${lib.optionalString bazaarSupport "--prefix PATH : ${breezy}/bin "} \
75       ${lib.optionalString cvsSupport "--prefix PATH : ${cvs}/bin "} \
76       ${lib.optionalString cvsSupport "--prefix PATH : ${cvsps}/bin "} \
77       ${lib.optionalString subversionSupport "--prefix PATH : ${subversion.out}/bin "} \
78       ${lib.optionalString mercurialSupport "--prefix PATH : ${mercurial}/bin "} \
79       ${lib.optionalString docutilsSupport ''--prefix PYTHONPATH : "$(toPythonPath ${docutils})" ''} \
80       ${lib.concatMapStrings (x: "--prefix PATH : ${x}/bin ") extraUtils}
81     done
82   '';
84   preCheck = ''
85     # Git needs some help figuring this out during test suite run.
86     export EMAIL="nobody@example.org"
87   '';
89   checkTarget = "test";
90   doCheck = true;
92   meta = with lib; {
93     description = "Wiki compiler, storing pages and history in a RCS";
94     homepage = "http://ikiwiki.info/";
95     license = licenses.gpl2Plus;
96     platforms = platforms.linux;
97     maintainers = [ maintainers.wentasah ];
98   };