about summary refs log tree commit homepage
path: root/Makefile.PL
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.PL')
-rw-r--r--Makefile.PL94
1 files changed, 63 insertions, 31 deletions
diff --git a/Makefile.PL b/Makefile.PL
index 848eb702..2b2e6b18 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -11,7 +11,8 @@ my $v = {};
 my $t = {};
 
 # do not sort
-my @RELEASES = qw(v1.8.0 v1.7.0 v1.6.1 v1.6.0 v1.5.0 v1.4.0 v1.3.0 v1.2.0
+my @RELEASES = qw(v1.9.0
+        v1.8.0 v1.7.0 v1.6.1 v1.6.0 v1.5.0 v1.4.0 v1.3.0 v1.2.0
         v1.1.0-pre1 v1.0.0);
 
 $v->{news_deps} = [ map { "Documentation/RelNotes/$_.eml" } @RELEASES ];
@@ -33,6 +34,19 @@ my @syn = (@EXE_FILES, grep(m!^lib/.*\.pm$!, @manifest), @scripts);
 @syn = grep(!/SaPlugin/, @syn) if !eval { require Mail::SpamAssasin };
 $v->{syn_files} = \@syn;
 $v->{my_syntax} = [map { "$_.syntax" } @syn];
+my %native = (
+        XapHelperCxx => [ qw(xh_cidx.h xh_mset.h xap_helper.h) ],
+);
+my @ck_build;
+for my $m (sort keys %native) {
+        my $hdr = $native{$m};
+        my @dep = map { "lib/PublicInbox/$_" } ("$m.pm", @$hdr);
+        $t->{"$m.check_build: @dep"} = [ "\$(PERL) -w -I lib ".
+                "-MPublicInbox::$m -e PublicInbox::${m}::check_build" ];
+        push @ck_build, "$m.check_build";
+}
+$t->{"check-build: @ck_build"} = [];
+
 my @no_pod;
 $v->{-m1} = [ map {
                 my $x = (split('/'))[-1];
@@ -52,7 +66,8 @@ $v->{-m1} = [ map {
         lei-import lei-index lei-init lei-inspect lei-lcat
         lei-ls-external lei-ls-label lei-ls-mail-source lei-ls-mail-sync
         lei-ls-search lei-ls-watch lei-mail-diff lei-p2q lei-q
-        lei-rediff lei-refresh-mail-sync lei-rm lei-rm-watch lei-tag
+        lei-rediff lei-refresh-mail-sync lei-reindex
+        lei-rm lei-rm-watch lei-tag
         lei-up)];
 $v->{-m5} = [ qw(public-inbox-config public-inbox-v1-format
                 public-inbox-v2-format public-inbox-extindex-format
@@ -79,7 +94,7 @@ for my $i (@sections) {
                 $t->{"Documentation/$m.html : $txt"} = [ "\$(txt2pre) <$txt",
                                                         "touch -r $txt \$@" ];
                 $t->{".$m.cols : $m.$i"} = [
-                        "\@echo CHECK80 $m.$i;".
+                        "\@echo CHECK80 $m.$i; LC_ALL=C LANG=C ".
                         "COLUMNS=80 \$(MAN) ./$m.$i | \$(check_man)",
                         '>$@' ];
                 $t->{".$m.lexgrog: $m.$i"} = [
@@ -124,14 +139,14 @@ my %man3 = map {; # semi-colon tells Perl this is a BLOCK (and not EXPR)
         "lib/PublicInbox/$_" => "blib/man3/PublicInbox::$mod.\$(MAN3EXT)"
 } qw(Git.pm Import.pm WWW.pod SaPlugin/ListMirror.pod);
 my $warn_no_pod = @no_pod ? "\n\t\@echo W: missing .pod: @no_pod\n" : '';
-chomp(my $lexgrog = `which lexgrog 2>/dev/null`);
+chomp(my $lexgrog = `command -v lexgrog 2>/dev/null`);
 my $check_lexgrog = $lexgrog ? 'check-lexgrog' : '';
 
 WriteMakefile(
         NAME => 'PublicInbox', # n.b. camel-case is not our choice
 
         # XXX drop "PENDING" in .pod before updating this!
-        VERSION => '1.9.0.PENDING',
+        VERSION => '2.0.0.PENDING',
 
         AUTHOR => 'public-inbox hackers <meta@public-inbox.org>',
         ABSTRACT => 'an "archives first" approach to mailing lists',
@@ -148,14 +163,14 @@ WriteMakefile(
 
                 # perl-modules-5.xx or libperl5.xx in Debian-based
                 # part of "perl5" on FreeBSD
-                'Compress::Raw::Zlib' => 0,
-                'Compress::Zlib' => 0,
-                'Data::Dumper' => 0,
+                'autodie' => 0, # rpm: perl-autodie
+                'Compress::Raw::Zlib' => 0, # rpm: perl-Compress-Raw-Zlib
+                'Compress::Zlib' => 0, # rpm: perl-IO-Compress
+                'Data::Dumper' => 0, # rpm: perl-Data-Dumper
                 'Digest::SHA' => 0, # rpm: perl-Digest-SHA
-                'Encode' => 2.35, # 2.35 shipped with 5.10.1
-                'IO::Compress::Gzip' => 0,
-                'IO::Uncompress::Gunzip' => 0,
-                'Storable' => 0, # rpm: perl-Storable
+                'IO::Compress::Gzip' => 0, # rpm: perl-IO-Compress
+                'IO::Uncompress::Gunzip' => 0, # rpm: perl-IO-Compress
+                'Sys::Syslog' => 0, # rpm: perl-Sys-Syslog
                 'Text::ParseWords' => 0, # rpm: perl-Text-ParseWords
 
                 # Plack is needed for public-inbox-httpd and PublicInbox::WWW
@@ -167,11 +182,16 @@ WriteMakefile(
                 # users to install them.  See INSTALL
 
                 # All Perl installs I know about have these, but RH-based
-                # distros make them separate even though 'perl' pulls them in
+                # distros can separate these even if `perl' depends on them:
+                'constant' => 0, # rpm: perl-constant
+                'Encode' => 2.35, # rpm: perl-Encode # 2.35 shipped with 5.10.1
                 'File::Path' => 0,
                 'File::Temp' => '0.19', # for ->tmpdir support
-                'Getopt::Long' => 0,
-                'Exporter' => 0,
+                'Getopt::Long' => 0, # rpm: perl-Getopt-Long
+                'Exporter' => 0, # rpm: perl-Exporter
+                'IO::Poll' => 0,
+                'Storable' => 0, # rpm: perl-Storable
+                'Time::HiRes' => 0, # rpm: perl-Time-HiRes
                 # ExtUtils::MakeMaker # this file won't run w/o it...
         },
         MAN3PODS => \%man3,
@@ -192,7 +212,8 @@ WriteMakefile(
 );
 
 sub MY::postamble {
-        my $N = (`{ getconf _NPROCESSORS_ONLN || nproc; } 2>/dev/null` || 1);
+        my $N = (`{ getconf _NPROCESSORS_ONLN ||
+                getconf NPROCESSORS_ONLN; } 2>/dev/null` || 1);
         $N += 1; # account for sleeps in some tests (and makes an IV)
         <<EOF;
 PROVE = prove
@@ -205,7 +226,7 @@ $VARS
 -include Documentation/include.mk
 $TGTS
 
-check-man :: $check_lexgrog$warn_no_pod
+check-man : $check_lexgrog$warn_no_pod
 
 # syntax checks are currently GNU make only:
 %.syntax :: %
@@ -223,19 +244,24 @@ check-manifest : MANIFEST
         \$(check_manifest)
 
 # the traditional way running per-*.t processes:
-check-each :: pure_all
+check-each : pure_all
         \$(EATMYDATA) \$(PROVE) --state=save -bvw -j\$(N)
         -@\$(check_manifest)
 
-# lightly-tested way to run tests, relies "--state=save" in check-each
-# for best performance
-check-run :: pure_all check-man
-        \$(EATMYDATA) \$(PROVE) -bvw t/run.perl :: -j\$(N)
+# check-run relies "--state=save" in check-each for best performance
+check-run : check-man
+
+# n.b. while `-' isn't specified as an allowed make(1posix) macro name,
+# GNU and *BSD both allow it.
+check-run_T_ARGS = -j\$(N)
+
+check-debris check-run : pure_all
+        \$(EATMYDATA) \$(PROVE) -bvw xt/\$@.t :: \$(\$\@_T_ARGS)
         -@\$(check_manifest)
 
-check :: check-each
+check : check-each
 
-lib/PublicInbox/UserContent.pm :: contrib/css/216dark.css
+lib/PublicInbox/UserContent.pm : contrib/css/216dark.css
         \$(PERL) -I lib \$@ \$?
 
 # Ensure new .pm files will always be installed by updating
@@ -251,19 +277,25 @@ prefix = \$(HOME)
 bindir = \$(prefix)/bin
 symlink-install : lib/PublicInbox.pm
         mkdir -p \$(bindir)
-        lei=\$\$(realpath lei.sh) && cd \$(bindir) && \\
+        lei="\$(PWD)/lei.sh" && cd \$(bindir) && \\
         for x in \$(EXE_FILES); do \\
                 ln -sf "\$\$lei" \$\$(basename "\$\$x"); \\
         done
 
-pure_all :: lib/PublicInbox.pm
+pm_to_blib : lib/PublicInbox.pm
 lib/PublicInbox.pm : FORCE
         VERSION=\$(VERSION) \$(PERL) -w ./version-gen.perl
 
-update-copyrights :
-        \@case '\$(GNULIB_PATH)' in '') echo >&2 GNULIB_PATH unset; false;; esac
-        git ls-files | UPDATE_COPYRIGHT_HOLDER='all contributors' \\
-                UPDATE_COPYRIGHT_USE_INTERVALS=2 \\
-                xargs \$(GNULIB_PATH)/build-aux/update-copyright
+XH_TESTS = t/xap_helper.t t/cindex.t
+
+test-asan : pure_all
+        TEST_XH_CXX_ONLY=1 CXXFLAGS='-Wall -ggdb3 -fsanitize=address' \\
+                prove -bvw \$(XH_TESTS)
+
+VG_OPT = -v --trace-children=yes --track-fds=yes
+VG_OPT += --leak-check=yes --track-origins=yes
+test-valgrind : pure_all
+        TEST_XH_CXX_ONLY=1 VALGRIND="valgrind \$(VG_OPT)" \\
+                prove -bvw \$(XH_TESTS)
 EOF
 }