Alien-BatToExeConverter

 view release on metacpan or  search on metacpan

lib/Alien/BatToExeConverter.pm  view on Meta::CPAN


=head1 DESCRIPTION

F<Bat_To_Exe_Converter.exe> is a nice little Windows Freeware program,
built from open source elements, that will take a batch script and
convert it into an executable (both as a command-line form, and as a
GUI form).

=head1 FUNCTIONS

=cut

use 5.008;
use strict;
use warnings;
use Carp           ();
use File::Which    ();
use File::ShareDir ();
use IPC::Run3      ();

our $VERSION = '0.01';

=pod

=head2 bat2exe_path

The C<bat2exe> function is used to locate the F<Bat_To_Exe_Converter.exe>
tool on the host. The Alien module will look in the local binary search
path, and then if a local version can't be found, it will instead return
the path to a bundled version.

=cut

sub bat2exe_path {
	# Check for the installed version
	my $installed = File::Which::which('Bat_To_Exe_Converter');
	return $installed if $installed;

	# Default to the bundled version
	File::ShareDir::dist_file(
		'Alien-BatToExeConverter',
		'Bat_To_Exe_Converter.exe',
	);
}

=pod

=head2 bat2exe

  # Convert a batch script to an executable that will have an icon,
  # won't show a DOS box, and will suppress to the command line.
  Alien::BatToExeConverter::bat2exe(
      bat => 'C:\strawberry\perl\bin\foo.bat',
      exe => 'C:\strawberry\perl\bin\foo.exe',
      ico => 'C:\strawberry\perl\bin\foo.ico',
      dos => 0,
  );

The C<bat2exe> function is used to execute F<Bat_To_Exe_Converter.exe> and
generate an executable from the batch script. It takes a series of named
params, returning true on success or throwing an exception on failure.
The default settings are intended to produce an .exe script for launching
a GUI application.

The compulsory C<bat> param should be the name of the source batch script.

The compulsory C<exe> param should be the path to white the executable to,
and must NOT already exist.

The optional C<ico> param will bind an icon to the executable.

The optional C<dos> param will indicate that the executable is intended
for the command line. If C<not> supplied, STDOUT and STDERR will be
supressed and a "DOS box" will not be shown on execution.

=cut

sub bat2exe {
	my %param = @_;

	# Required input batch script
	my $bat = $param{bat};
	unless ( $bat and $bat =~ /\.bat$/ and -f $bat ) {
		Carp::croak("Missing or invalid bat file");
	}

	# Required output executable application
	my $exe = $param{exe};
	unless ( $exe and $exe =~ /\.exe$/ ) {
		Carp::croak("Missing or invalid exe file");
	}
	if ( -f $exe ) {
		Carp::croak("The target exe '$exe' already exists");
	}

	# Optional icon file
	my $ico = $param{ico} || '';
	if ( $ico and not -f $ico ) {
		Carp::croak("Invalid ico file");
	}

	# DOS or GUI application?
	my $dos = !! $param{dos};

	# Hand off to the executable
	my $bat2exe = bat2exe_path();
	my $stdin   = '';
	my $stdout  = '';
	my $stderr  = '';
	my $rv      = IPC::Run3::run3( [
		$bat2exe, $bat, $exe, $ico, $dos,
	], \$stdin, \$stdout, \$stderr );

	

	1;
}

1;

=pod



( run in 1.810 second using v1.01-cache-2.11-cpan-119454b85a5 )