From 2be1aeb461f905aaf66f5b2599a0dcb22554ad40 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 23 Dec 2022 22:11:01 +0000 Subject: [PATCH] cleanup pure Perl use This quiets down tests when the optional Inline::C is missing. We do not currently have a hard dependency on Inline::C; and we should not leave PERL_INLINE_DIRECTORY set in PublicInbox::Spawn if Inline fails to build. Leaving PERL_INLINE_DIRECTORY set by Spawn after it fails (due to missing Inline::C) would cause downstream failures in Gcf2 builds for the same reason. So we should bail out of the Gcf2 build early if Spawn already failed due to missing Inline::C. The only time we want to be noisy is if a user explicitly sets PERL_INLINE_DIRECTORY and Inline::C is missing. This reverts commit ad8acf7d6484d0a489499742cadadbd4f890ab53. ad8acf7d6484d0a4 (Gcf2: Create cache folder if missing, 2022-09-08) --- lib/PublicInbox/Gcf2.pm | 4 +--- lib/PublicInbox/Spawn.pm | 7 +++++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/lib/PublicInbox/Gcf2.pm b/lib/PublicInbox/Gcf2.pm index 54b3d6aa..d13e6b1a 100644 --- a/lib/PublicInbox/Gcf2.pm +++ b/lib/PublicInbox/Gcf2.pm @@ -10,16 +10,14 @@ use PublicInbox::Spawn qw(which popen_rd); # may set PERL_INLINE_DIRECTORY use Fcntl qw(LOCK_EX SEEK_SET); use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC); use IO::Handle; # autoflush -use File::Path qw(make_path); use PublicInbox::Git; BEGIN { my (%CFG, $c_src); # PublicInbox::Spawn will set PERL_INLINE_DIRECTORY - # to ~/.cache/public-inbox/inline-c if it exists + # to ~/.cache/public-inbox/inline-c if it exists and Inline::C works my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} // die 'PERL_INLINE_DIRECTORY not defined'; - make_path($inline_dir); my $f = "$inline_dir/.public-inbox.lock"; open my $fh, '+>', $f or die "open($f): $!"; diff --git a/lib/PublicInbox/Spawn.pm b/lib/PublicInbox/Spawn.pm index 3f69108a..7f61d8db 100644 --- a/lib/PublicInbox/Spawn.pm +++ b/lib/PublicInbox/Spawn.pm @@ -268,13 +268,14 @@ void recv_cmd4(PerlIO *s, SV *buf, STRLEN n) #endif /* defined(CMSG_SPACE) && defined(CMSG_LEN) */ ALL_LIBC - my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} //= ( + my $inline_dir = $ENV{PERL_INLINE_DIRECTORY} // ( $ENV{XDG_CACHE_HOME} // ( ($ENV{HOME} // '/nonexistent').'/.cache' ) ).'/public-inbox/inline-c'; warn "$inline_dir exists, not writable\n" if -e $inline_dir && !-w _; $all_libc = undef unless -d _ && -w _; if (defined $all_libc) { + local $ENV{PERL_INLINE_DIRECTORY} = $inline_dir; my $f = "$inline_dir/.public-inbox.lock"; open my $oldout, '>&', \*STDOUT or die "dup(1): $!"; open my $olderr, '>&', \*STDERR or die "dup(2): $!"; @@ -302,7 +303,9 @@ EOM $all_libc = undef; } } - unless ($all_libc) { + if (defined $all_libc) { # set for Gcf2 + $ENV{PERL_INLINE_DIRECTORY} = $inline_dir; + } else { require PublicInbox::SpawnPP; *pi_fork_exec = \&PublicInbox::SpawnPP::pi_fork_exec } -- 2.44.0