pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / servers / mail / public-inbox / default.nix
blob72caae6a5b05ebcda72ccf38384f8a7ead62841b
1 { stdenv, lib, fetchurl, makeWrapper, nixosTests
2 , buildPerlPackage
3 , coreutils
4 , curl
5 , git
6 , gnumake
7 , highlight
8 , libgit2
9 , libxcrypt
10 , man
11 , openssl
12 , pkg-config
13 , sqlite
14 , xapian
15 , AnyURIEscape
16 , DBDSQLite
17 , DBI
18 , EmailAddressXS
19 , EmailMIME
20 , IOSocketSSL
21 # FIXME: to be packaged
22 #, IOSocketSocks
23 , IPCRun
24 , Inline
25 , InlineC
26 , LinuxInotify2
27 , MailIMAPClient
28 # FIXME: to be packaged
29 #, NetNetrc
30 # FIXME: to be packaged
31 #, NetNNTP
32 , ParseRecDescent
33 , Plack
34 , PlackMiddlewareReverseProxy
35 , PlackTestExternalServer
36 , SearchXapian
37 , TestSimple13
38 , TimeDate
39 , URI
40 , XMLTreePP
43 let
45   skippedTests = [
46     # fatal: Could not make /tmp/pi-search-9188-DGZM/a.git/branches/ writable by group
47     "search"
48     # perl5.32.0-public-inbox> t/eml.t ...................... 1/? Cannot parse parameter '=?ISO-8859-1?Q?=20charset=3D=1BOF?=' at t/eml.t line 270.
49     # perl5.32.0-public-inbox> #   Failed test 'got wide character by assuming utf-8'
50     # perl5.32.0-public-inbox> #   at t/eml.t line 272.
51     # perl5.32.0-public-inbox> Wide character in print at /nix/store/38vxlxrvg3yji3jms44qn94lxdysbj5j-perl-5.32.0/lib/perl5/5.32.0/Test2/Formatter/TAP.pm line 125.
52     "eml"
53     # Failed test 'Makefile OK'
54     # at t/hl_mod.t line 19.
55     #        got: 'makefile'
56     #   expected: 'make'
57     "hl_mod"
58     # Hangs on "inbox unlocked on initial fetch, waiting for IDLE".
59     # Fixed in HEAD: 7234e671 ("t/imapd: workaround a Perl 5.36.0 readline regression")
60     "imapd"
61     # Failed test 'clone + index v1 synced ->created_at'
62     # at t/lei-mirror.t line 175.
63     #        got: '1638378723'
64     #   expected: undef
65     # Failed test 'clone + index v1 synced ->created_at'
66     # at t/lei-mirror.t line 178.
67     #        got: '1638378723'
68     #   expected: undef
69     # May be due to the use of $ENV{HOME}.
70     "lei-mirror"
71     # Failed test 'child error (pure-Perl)'
72     # at t/spawn.t line 33.
73     #        got: '0'
74     #   expected: anything else
75     # waiting for child to reap grandchild...
76     "spawn"
77     # Failed to connect to 127.0.0.1
78     "v2mirror"
79   ];
81   testConditions = lib.concatMapStringsSep " " (n: "! -name ${lib.escapeShellArg n}.t") skippedTests;
85 buildPerlPackage rec {
86   pname = "public-inbox";
87   version = "1.9.0";
89   src = fetchurl {
90     url = "https://public-inbox.org/public-inbox.git/snapshot/public-inbox-${version}.tar.gz";
91     sha256 = "sha256-ENnT2YK7rpODII9TqiEYSCp5mpWOnxskeSuAf8Ilqro=";
92   };
94   outputs = [ "out" "devdoc" "sa_config" ];
96   postConfigure = ''
97     substituteInPlace Makefile --replace 'TEST_FILES = t/*.t' \
98         'TEST_FILES = $(shell find t -name *.t ${testConditions})'
99     substituteInPlace lib/PublicInbox/TestCommon.pm \
100       --replace /bin/cp ${coreutils}/bin/cp
101   '';
103   nativeBuildInputs = [ makeWrapper ];
105   buildInputs = [
106     AnyURIEscape
107     DBDSQLite
108     DBI
109     EmailAddressXS
110     highlight
111     IOSocketSSL
112     #IOSocketSocks
113     IPCRun
114     Inline
115     InlineC
116     MailIMAPClient
117     #NetNetrc
118     #NetNNTP
119     ParseRecDescent
120     Plack
121     PlackMiddlewareReverseProxy
122     SearchXapian
123     TimeDate
124     URI
125     libgit2 # For Gcf2
126     man
127   ];
129   doCheck = !stdenv.hostPlatform.isDarwin;
130   nativeCheckInputs = [
131     curl
132     git
133     openssl
134     pkg-config
135     sqlite
136     xapian
137     EmailMIME
138     PlackTestExternalServer
139     TestSimple13
140     XMLTreePP
141   ] ++ lib.optionals stdenv.hostPlatform.isLinux [
142     LinuxInotify2
143   ];
144   preCheck = ''
145     perl certs/create-certs.perl
146     export TEST_LEI_ERR_LOUD=1
147     export HOME="$NIX_BUILD_TOP"/home
148     mkdir -p "$HOME"/.cache/public-inbox/inline-c
149   '';
151   installTargets = [ "install" ];
152   postInstall = ''
153     for prog in $out/bin/*; do
154         wrapProgram $prog \
155             --set NIX_CFLAGS_COMPILE_${stdenv.cc.suffixSalt} -I${lib.getDev libxcrypt}/include \
156             --prefix PATH : ${lib.makeBinPath [
157               git
158               xapian
159               /* for InlineC */
160               gnumake
161               stdenv.cc
162             ]}
163     done
165     mv sa_config $sa_config
166   '';
168   passthru.tests = {
169     nixos-public-inbox = nixosTests.public-inbox;
170   };
172   meta = with lib; {
173     homepage = "https://public-inbox.org/";
174     license = licenses.agpl3Plus;
175     maintainers = with maintainers; [ julm qyliss ];
176     platforms = platforms.all;
177   };