use warnings;
  use PostgresNode;
  use TestLib;
 +
 +use File::Basename;
  use FindBin;
  use Test::More tests => 1;
  
   # get there.
  $node_primary->init(allows_streaming => 1, has_archiving => 1);
  my $perlbin = $^X;
 -$perlbin =~ s{\\}{\\\\}g if ($TestLib::windows_os);
 +if ($^O eq 'msys')
 +{
 +   $perlbin = TestLib::perl2host(dirname($^X)) . '\\' . basename($^X);
 +}
 +$perlbin =~ s!\\!/!g if $TestLib::windows_os;
  my $archivedir_primary = $node_primary->archive_dir;
  $node_primary->append_conf('postgresql.conf', qq(
 -archive_command = '$perlbin "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"'
 +archive_command = '"$perlbin" "$FindBin::RealBin/cp_history_files" "%p" "$archivedir_primary/%f"'
  wal_keep_size=128MB
  ));
 +local $ENV{PERL_BADLANG}=0;
  $node_primary->start;
  
  # Take backup from primary
   # WAL segment, this is enough to guarantee that the history file was
  # archived.
  my $archive_wait_query =
 -  "SELECT '$walfile_to_be_archived' <= last_archived_wal FROM pg_stat_archiver;";
 +  "SELECT coalesce('$walfile_to_be_archived' <= last_archived_wal, false) " .
 +  "FROM pg_stat_archiver";
  $node_standby->poll_query_until('postgres', $archive_wait_query)
    or die "Timed out while waiting for WAL segment to be archived";
  my $last_archived_wal_file = $walfile_to_be_archived;
          die "wrong number of arguments" if @ARGV != 2;
  my ($source, $target) = @ARGV;
  exit if $source !~ /history/;
 +if ($^O eq 'msys')
 +{
 +    # make a windows path look like an msys path if necessary
 +    $source =~ s!^([A-Za-z]):!'/' . lc($1)!e;
 +    $source =~ s!\\!/!g;
 +}
 +
  copy($source, $target) or die "couldn't copy $source to $target: $!";