about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2023-12-08 03:54:35 +0000
committerEric Wong <e@80x24.org>2023-12-09 02:03:49 +0000
commit7cfe355704b4ef90858aff4544e43917053581c7 (patch)
treedd86fbca1e9136837abad363b5f789462feb8bf4 /lib
parent866dc178546a5b11610cbcfcdf2b87b03020a205 (diff)
downloadpublic-inbox-7cfe355704b4ef90858aff4544e43917053581c7.tar.gz
While chdir simplifies path manipulation on our end, its use
falls over when PERL5LIB/@INC contains relative paths which need
to be made absolute.  It's fewer lines of code to get eliminate
chdir usage than it is to keep using relative paths in most
places.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/XapHelperCxx.pm19
1 files changed, 7 insertions, 12 deletions
diff --git a/lib/PublicInbox/XapHelperCxx.pm b/lib/PublicInbox/XapHelperCxx.pm
index 1aa75f2a..17f988ee 100644
--- a/lib/PublicInbox/XapHelperCxx.pm
+++ b/lib/PublicInbox/XapHelperCxx.pm
@@ -60,17 +60,12 @@ sub build () {
         }
         require PublicInbox::CodeSearch;
         require PublicInbox::Lock;
-        require PublicInbox::OnDestroy;
         my ($prog) = ($bin =~ m!/([^/]+)\z!);
         my $lk = PublicInbox::Lock->new("$dir/$prog.lock")->lock_for_scope;
         write_file '>', "$dir/$prog.cpp", qq{#include "xap_helper.h"\n},
                         PublicInbox::Search::generate_cxx(),
                         PublicInbox::CodeSearch::generate_cxx();
 
-        opendir my $dh, '.';
-        my $restore = PublicInbox::OnDestroy->new(\&chdir, $dh);
-        chdir $dir;
-
         # xap_modversion may be set by needs_rebuild
         $xap_modversion //= xap_cfg('--modversion');
         my $fl = xap_cfg(qw(--libs --cflags));
@@ -83,15 +78,15 @@ sub build () {
         $^O eq 'netbsd' and $fl =~ s/(\A|[ \t])\-L([^ \t]+)([ \t]|\z)/
                                 "$1-L$2 -Wl,-rpath=$2$3"/egsx;
         my @xflags = split(' ', "$fl $xflags"); # ' ' awk-mode eats leading WS
-        my @cflags = grep(!/\A-(?:Wl|l|L)/, @xflags);
-        run_die([$cxx, '-c', "$prog.cpp", '-I', $srcpfx, @cflags]);
-        run_die([$cxx, '-o', "$prog.tmp", "$prog.o", @xflags]);
-        unlink "$prog.cpp", "$prog.o";
-        write_file '>', 'XFLAGS.tmp', $xflags, "\n";
-        write_file '>', 'xap_modversion.tmp', $xap_modversion, "\n";
+        my @cflags = ('-I', $srcpfx, grep(!/\A-(?:Wl|l|L)/, @xflags));
+        run_die([$cxx, '-o', "$dir/$prog.o", '-c', "$dir/$prog.cpp", @cflags]);
+        run_die([$cxx, '-o', "$dir/$prog.tmp", "$dir/$prog.o", @xflags]);
+        unlink "$dir/$prog.cpp", "$dir/$prog.o";
+        write_file '>', "$dir/XFLAGS.tmp", $xflags, "\n";
+        write_file '>', "$dir/xap_modversion.tmp", $xap_modversion, "\n";
         undef $xap_modversion; # do we ever build() twice?
         # not quite atomic, but close enough :P
-        rename("$_.tmp", $_) for ($prog, qw(XFLAGS xap_modversion));
+        rename("$dir/$_.tmp", "$dir/$_") for ($prog, qw(XFLAGS xap_modversion));
 }
 
 sub check_build () {