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.PL92
1 files changed, 64 insertions, 28 deletions
diff --git a/Makefile.PL b/Makefile.PL
index 9233ac9d..27fe02ff 100644
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -34,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];
@@ -81,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"} = [
@@ -126,7 +139,7 @@ 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(
@@ -150,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
@@ -169,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,
@@ -194,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
@@ -207,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 :: %
@@ -225,19 +244,30 @@ 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-xh0 :
+        \$(MAKE) check-run TEST_DAEMON_XH='-X0'
+
+check-xh1 :
+        \$(MAKE) check-run TEST_DAEMON_XH='-X1'
+
+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
@@ -253,19 +283,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
 }