| 191 | | |
| | 191 | } |
| | 192 | |
| | 193 | sub make_par |
| | 194 | { |
| | 195 | my (%args) = @_; |
| | 196 | |
| | 197 | my $find_cmd = sub { |
| | 198 | my ($name, $default) = @_; |
| | 199 | |
| | 200 | my $cmd = $default; |
| | 201 | if (! $cmd) { |
| | 202 | foreach my $path (split(/:/, $ENV{PATH})) { |
| | 203 | my $fqpath = File::Spec->catfile($path, $name); |
| | 204 | if (-x $fqpath) { |
| | 205 | $cmd = $fqpath; |
| | 206 | last; |
| | 207 | } |
| | 208 | } |
| | 209 | } |
| | 210 | |
| | 211 | if (! $cmd || ! -x $cmd) { |
| | 212 | die "Could not find a suitable '$name' executable"; |
| | 213 | } |
| | 214 | return $cmd; |
| | 215 | }; |
| | 216 | |
| | 217 | my $pp = $find_cmd->('pp', $ENV{PAR_PACKER}); |
| | 218 | my $xmpp_bomber = $find_cmd->('xmpp-bomber', $ENV{XMPP_BOMBER}); |
| | 219 | |
| | 220 | # Now pack all this stuff |
| | 221 | my @modules = ( |
| | 222 | 'DateTime::Locale::en', # need to add this manually |
| | 223 | 'XMPP::Bomber', |
| | 224 | 'XMPP::Bomber::Sender', |
| | 225 | 'XMPP::Bomber::Receiver', |
| | 226 | 'XMPP::Bomber::Account', |
| | 227 | 'XMPP::Bomber::Role::ContentProvider', |
| | 228 | 'XMPP::Bomber::Role::UserProvider', |
| | 229 | 'XMPP::Bomber::UserProvider::Static', |
| | 230 | 'XMPP::Bomber::UserProvider::OpenFire::Random', |
| | 231 | 'XMPP::Bomber::ContentProvider::Gibberish', |
| | 232 | @{ $args{extra_modules} || [] } |
| | 233 | ); |
| | 234 | |
| | 235 | my $outfile = $args{outfile} || 'xmpp-bomber.par'; |
| | 236 | my @cmd = ( |
| | 237 | $pp, |
| | 238 | '-I' => 'lib', |
| | 239 | "-o" => $outfile, |
| | 240 | (map { ("-M" => $_) } @modules ), |
| | 241 | $xmpp_bomber |
| | 242 | ); |
| | 243 | system(@cmd); |
| | 244 | if ($? != 0 || ! -e $outfile) { |
| | 245 | die "Failed to execute @cmd"; |
| | 246 | } |