+
+if ($opt->{compact}) {
+ require PublicInbox::Xapcmd;
+ PublicInbox::Xapcmd::check_compact();
+ $compact_opt = { -coarse_lock => 1, compact => 1 };
+ if (defined(my $jobs = $opt->{jobs})) {
+ $compact_opt->{jobs} = $jobs;
+ }
+}
+
+my $cfg = PublicInbox::Config->new; # Config is loaded by Admin
+my @ibxs = PublicInbox::Admin::resolve_inboxes(\@ARGV, undef, $cfg);
+PublicInbox::Admin::require_or_die('-index');
+unless (@ibxs) { print STDERR "Usage: $usage\n"; exit 1 }
+
+my $max_size = $opt->{maxsize} // $cfg->{lc('publicInbox.indexMaxSize')};
+if (defined $max_size) {
+ PublicInbox::Admin::parse_unsigned(\$max_size) or
+ die "`publicInbox.indexMaxSize=$max_size' not parsed\n";
+}
+
+my $bs = $opt->{batchsize} // $cfg->{lc('publicInbox.indexBatchSize')};
+if (defined $bs) {
+ PublicInbox::Admin::parse_unsigned(\$bs) or
+ die "`publicInbox.indexBatchSize=$bs' not parsed\n";
+}
+no warnings 'once';
+local $PublicInbox::SearchIdx::BATCH_BYTES = $bs if defined($bs);
+use warnings 'once';
+
+# out-of-the-box builds of Xapian 1.4.x are still limited to 32-bit
+# https://getting-started-with-xapian.readthedocs.io/en/latest/concepts/indexing/limitations.html
+local $ENV{XAPIAN_FLUSH_THRESHOLD} ||= '4294967295' if defined($bs);
+
+my $s = $opt->{sequentialshard} //
+ $cfg->{lc('publicInbox.indexSequentialShard')};
+if (defined $s) {
+ my $v = $cfg->git_bool($s);
+ defined($v) or
+ die "`publicInbox.indexSequentialShard=$s' not boolean\n";
+ $opt->{sequentialshard} = $v;
+}
+