Type => Socket::SOCK_STREAM(),
Listen => 1024,
Blocking => 0,
- )
+ ) or Test::More::BAIL_OUT("failed to create TCP server: $!");
}
sub tcp_connect {
my ($dest, %opt) = @_;
+ my $addr = $dest->sockhost . ':' . $dest->sockport;
my $s = IO::Socket::INET->new(
Proto => 'tcp',
Type => Socket::SOCK_STREAM(),
- PeerAddr => $dest->sockhost . ':' . $dest->sockport,
+ PeerAddr => $addr,
%opt,
- );
+ ) or Test::More::BAIL_OUT("failed to connect to $addr: $!");
$s->autoflush(1);
$s;
}
my @mods = @_;
my $maybe = pop @mods if $mods[-1] =~ /\A[0-9]+\z/;
my @need;
- for my $mod (@mods) {
+ while (my $mod = shift(@mods)) {
if ($mod eq 'Search::Xapian') {
if (eval { require PublicInbox::Search } &&
PublicInbox::Search::load_xapian()) {
PublicInbox::SearchIdx::load_xapian_writable()){
next;
}
+ } elsif (index($mod, '||') >= 0) { # "Foo||Bar"
+ my $ok;
+ for my $m (split(/\Q||\E/, $mod)) {
+ eval "require $m";
+ next if $@;
+ $ok = $m;
+ last;
+ }
+ next if $ok;
} else {
eval "require $mod";
}