SPVM
view release on metacpan or search on metacpan
lib/SPVM/Builder/Util.pm view on Meta::CPAN
return $need_generate;
}
sub slurp_binary {
my ($file) = @_;
open my $fh, '<', $file
or confess("Can't open file \"$file\":$!");
my $content = do { local $/; <$fh> };
return $content;
}
sub slurp_utf8 {
my ($file) = @_;
my $content = &slurp_binary($file);
$content = decode('UTF-8', $content);
return $content;
}
sub file_contains {
my ($file, $string) = @_;
my $content = &slurp_utf8($file);
my $contains;
if (index($content, $string) >= 0) {
$contains = 1;
}
return $contains;
}
sub spurt_binary {
my ($file, $content) = @_;
unless (defined $file) {
confess("A file must be defined.");
}
mkpath dirname $file;
open my $fh, '>:raw', $file
or confess("Can't open file \"$file\":$!");
print $fh $content;
}
sub unindent {
my $str = shift;
my $min = min map { m/^([ \t]*)/; length $1 || () } split "\n", $str;
$str =~ s/^[ \t]{0,$min}//gm if $min;
return $str;
}
sub extract_usage {
my $file = @_ ? "$_[0]" : (caller)[1];
open my $handle, '>', \my $output;
pod2usage -exitval => 'noexit', -input => $file, -output => $handle, -verbose => 99, -sections => "Usage";
$output =~ s/^.*\n|\n$//;
$output =~ s/\n$//;
return SPVM::Builder::Util::unindent($output);
}
sub getopt {
my ($array, $opts) = map { ref $_[0] eq 'ARRAY' ? shift : $_ } \@ARGV, [];
my $save = Getopt::Long::Configure(qw(default no_auto_abbrev no_ignore_case),
@$opts);
my $success = GetOptionsFromArray $array, @_;
Getopt::Long::Configure($save);
unless ($success) {
Carp::confess("Failed to parse command line options.");
}
}
sub convert_class_file_to_dynamic_lib_file {
my ($class_file, $category) = @_;
my $dlext = $Config{dlext};
$class_file =~ s/\.[^.]+$//;
my $dynamic_lib_category_file = $class_file;
$dynamic_lib_category_file .= $category eq 'native' ? ".$dlext" : ".$category.$dlext";
return $dynamic_lib_category_file;
}
sub convert_class_name_to_dynamic_lib_rel_file {
my ($class_name, $category) = @_;
my $dlext = $Config{dlext};
my $dynamic_lib_category_rel_file = &convert_class_name_to_rel_file($class_name);
$dynamic_lib_category_rel_file .= $category eq 'native' ? ".$dlext" : ".$category.$dlext";
return $dynamic_lib_category_rel_file;
}
sub convert_class_name_to_category_rel_file {
my ($class_name, $category, $ext) = @_;
my $rel_file_with_ext = "SPVM::$class_name";
$rel_file_with_ext =~ s/::/\//g;
$rel_file_with_ext .= $category eq 'native' ? "" : ".$category";
if (defined $ext) {
$rel_file_with_ext .= ".$ext";
}
return $rel_file_with_ext;
}
sub convert_class_name_to_rel_dir {
my ($class_name) = @_;
my $rel_dir;
( run in 0.527 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )