]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/blobdiff - t/lib/Test/Valgrind/FakeValgrind.pm
Improve detection of executables
[perl/modules/Test-Valgrind.git] / t / lib / Test / Valgrind / FakeValgrind.pm
index 067309b6a5cd708f0b04a8fc064673ffbe49740b..0d13a0d50fdf226fdd30410dbafc9c7861767956 100644 (file)
@@ -45,28 +45,39 @@ BEGIN {
 sub new {
  my ($class, %args) = @_;
 
+ return 'Temporary executables do not work on Windows' if $^O eq 'MSWin32';
+
  my $exe_name = $args{exe_name};
  my $version  = $args{version} || '3.1.0';
  my $body     = $args{body};
 
  my $self = { };
 
+ my $exe_ext = $Config::Config{exe_ext};
+ $exe_ext    = '' unless defined $exe_ext;
  if (defined $exe_name) {
   return 'File::Temp 0.19 is required to make a proper temporary directory'
          unless $good_enough_file_temp;
+  if (length $exe_ext and $exe_name !~ /\Q$exe_ext\E$/) {
+   $exe_name .= $exe_ext;
+  }
   $self->{tmp_dir_obj}  = File::Temp->newdir(CLEANUP => 1);
   $self->{tmp_dir}      = $self->{tmp_dir_obj}->dirname;
   $self->{tmp_file}     = File::Spec->catfile($self->{tmp_dir}, $exe_name);
  } else {
   # Can't use the OO interface if we don't wan't the file to be opened by
   # default, but then we have to deal with cleanup ourselves.
-  local $^W = 0;
-  (undef, my $tmp_file) = File::Temp::tempfile(
+  my %args = (
    TEMPLATE => 'fakevgXXXX',
    TMPDIR   => 1,
    CLEANUP  => 0,
    OPEN     => 0,
   );
+  $args{SUFFIX} = $exe_ext if length $exe_ext;
+  my $tmp_file = do {
+   local $^W = 0;
+   (File::Temp::tempfile(%args))[1]
+  };
   $self->{tmp_file}     = $tmp_file;
   my ($vol, $dir)       = File::Spec->splitpath($self->{tmp_file});
   $self->{tmp_dir}      = File::Spec->catpath($vol, $dir, '');