diff options
Diffstat (limited to 'Makefile.PL')
-rw-r--r-- | Makefile.PL | 92 |
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 } |