about summary refs log tree commit homepage
path: root/lib/PublicInbox/Gcf2.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-10-27 22:21:12 +0000
committerEric Wong <e@80x24.org>2023-10-28 09:08:17 +0000
commitef5bd67cbcdcd8cba2cb8b3718ea90afda6b7ebe (patch)
treea458df4b670baf4a5a0e8d782f1cc9f04ecfff2a /lib/PublicInbox/Gcf2.pm
parent9de1ad677fbb89bf1babd08e9df4969f0ad77983 (diff)
downloadpublic-inbox-ef5bd67cbcdcd8cba2cb8b3718ea90afda6b7ebe.tar.gz
We can use run_qx and try_cat to make the build setup simpler.
Diffstat (limited to 'lib/PublicInbox/Gcf2.pm')
-rw-r--r--lib/PublicInbox/Gcf2.pm27
1 files changed, 7 insertions, 20 deletions
diff --git a/lib/PublicInbox/Gcf2.pm b/lib/PublicInbox/Gcf2.pm
index 4f163cde..502bf33a 100644
--- a/lib/PublicInbox/Gcf2.pm
+++ b/lib/PublicInbox/Gcf2.pm
@@ -5,11 +5,11 @@
 # other libgit2 stuff may go here, too.
 package PublicInbox::Gcf2;
 use v5.12;
-use PublicInbox::Spawn qw(which popen_rd); # may set PERL_INLINE_DIRECTORY
+use PublicInbox::Spawn qw(which run_qx); # may set PERL_INLINE_DIRECTORY
 use Fcntl qw(SEEK_SET);
 use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
 use IO::Handle; # autoflush
-use PublicInbox::Git qw(read_all);
+use PublicInbox::Git;
 use PublicInbox::Lock;
 
 BEGIN {
@@ -27,29 +27,16 @@ BEGIN {
         my $pc = which($ENV{PKG_CONFIG} // 'pkg-config') //
                 die "pkg-config missing for libgit2";
         my ($dir) = (__FILE__ =~ m!\A(.+?)/[^/]+\z!);
-        open my $err, '+>', "$inline_dir/.public-inbox.pkg-config.err";
         my $vals = {};
-        my $rdr = { 2 => $err };
+        my $rdr = { 2 => \(my $err) };
         my @switches = qw(modversion cflags libs);
         for my $k (@switches) {
-                my $rd = popen_rd([$pc, "--$k", 'libgit2'], undef, $rdr);
-                chomp(my $val = do { local $/; <$rd> });
-                CORE::close($rd) or last; # checks for error and sets $?
+                chomp(my $val = run_qx([$pc, "--$k", 'libgit2'], undef, $rdr));
+                die "E: libgit2 not installed: $err\n" if $?;
                 $vals->{$k} = $val;
         }
-        if (!$?) {
-                # note: we name C source files .h to prevent
-                # ExtUtils::MakeMaker from automatically trying to
-                # build them.
-                my $f = "$dir/gcf2_libgit2.h";
-                open my $src, '<', $f;
-                $c_src = read_all($src);
-        }
-        unless ($c_src) {
-                seek($err, 0, SEEK_SET);
-                $err = read_all($err);
-                die "E: libgit2 not installed: $err\n";
-        }
+        my $f = "$dir/gcf2_libgit2.h";
+        $c_src = PublicInbox::Git::try_cat($f) or die "cat $f: $!";
         # append pkg-config results to the source to ensure Inline::C
         # can rebuild if there's changes (it doesn't seem to detect
         # $CFG{CCFLAGSEX} nor $CFG{CPPFLAGS} changes)