Sponsoring The Perl Toolchain Summit 2025: Help make this important event another success Learn more

#! /usr/bin/env perl
use strict;
use Config;
BEGIN {
unshift @INC, 't';
require TestBC;
}
# but works locally
plan skip_all => "mingw on appveyor"
if $^O eq 'MSWin32' and $Config{cc} eq 'gcc' and $ENV{APPVEYOR};
plan tests => 4;
my $runperl = $^X =~ m/\s/ ? qq{"$^X"} : $^X;
my $Mblib = Mblib();
my $perlcc = perlcc();
$perlcc .= " --Wc=-O1" if $ENV{PERL_CORE} and $Config{ccflags} =~ /-flto/;
my $exe = $^O eq 'MSWin32' ? 'ccode_argv.exe' : 'ccode_argv';
my $pl = $^O eq 'MSWin32' ? "t\\c_argv.pl" : "t/c_argv.pl";
my $plc = $pl . "c";
my $d = <DATA>;
open F, ">", $pl;
print F $d;
close F;
diag "$runperl $Mblib $perlcc -O3 -o $exe -r $pl ok 1" if $ENV{TEST_VERBOSE};
is(`$runperl $Mblib $perlcc -O3 -o $exe -r $pl ok 1`, "ok 1\n", #1
"perlcc -r file args");
unlink($exe);
open F, ">", $pl;
my $d2 = $d;
$d2 =~ s/ ok 1/ ok 2/;
print F $d2;
close F;
{
my $result = `$runperl $Mblib $perlcc -O -o $exe -r $pl ok 2`;
my $expected = "ok 2\n";
my $cmt = "perlcc -O -r file args";
if ($result eq $expected) {
is ($result, $expected, $cmt); #2
} else {
TODO: {
local $TODO = "unreliable CC testcase";
is($result, $expected, $cmt);
}
}
}
unlink($exe);
open F, ">", $pl;
my $d3 = $d;
$d3 =~ s/ ok 1/ ok 3/;
print F $d3;
close F;
if ($] < 5.022) {
is(`$runperl $Mblib $perlcc -B -r $pl ok 3`, "ok 3\n", #3
"perlcc -B -r file args");
} else {
ok(1, "SKIP BC 5.22");
}
# issue 30
$d = '
sub f1 {
my($self) = @_;
$self->f2;
}
sub f2 {}
sub new {}
print "@ARGV\n";';
open F, ">", $pl;
print F $d;
close F;
`$runperl $Mblib $perlcc -o $exe $pl`;
$exe = "./$exe" unless $^O eq 'MSWin32';
is (`$exe a b c`, "a b c\n",
"issue 30: perlcc -o $exe; $exe args"); #4
END {
unlink($exe, $pl, $plc);
}
__DATA__
print @ARGV?join(" ",@ARGV):"not ok 1 # empty \@ARGV","\n";