|
|
| |
$RCSID = '$Id: c2ph,v 1.7 95/10/28 10:41:47 tchrist Exp Locker: tchrist $'; | $RCSID = '$Id: c2ph,v 1.7 95/10/28 10:41:47 tchrist Exp Locker: tchrist $'; |
| |
|
use File::Temp; |
| |
###################################################################### | ###################################################################### |
| |
|
|
printf "%-16s%-15s %s\n", $var, eval "\$$var", $msg; | printf "%-16s%-15s %s\n", $var, eval "\$$var", $msg; |
} | } |
| |
|
sub safedir { |
|
$SAFEDIR = File::Temp::tempdir("c2ph.XXXXXX", TMPDIR => 1, CLEANUP => 1) |
|
unless (defined($SAFEDIR)); |
|
} |
|
|
|
undef $SAFEDIR; |
|
|
$recurse = 1; | $recurse = 1; |
| |
if (@ARGV) { | if (@ARGV) { |
|
|
} | } |
elsif (@ARGV == 1 && $ARGV[0] =~ /\.c$/) { | elsif (@ARGV == 1 && $ARGV[0] =~ /\.c$/) { |
local($dir, $file) = $ARGV[0] =~ m#(.*/)?(.*)$#; | local($dir, $file) = $ARGV[0] =~ m#(.*/)?(.*)$#; |
$chdir = "cd $dir; " if $dir; |
$chdir = "cd $dir && " if $dir; |
&system("$chdir$CC $CFLAGS $DEFINES $file") && exit 1; | &system("$chdir$CC $CFLAGS $DEFINES $file") && exit 1; |
$ARGV[0] =~ s/\.c$/.s/; | $ARGV[0] =~ s/\.c$/.s/; |
} | } |
else { | else { |
$TMPDIR = tempdir(CLEANUP => 1); |
&safedir; |
$TMP = "$TMPDIR/c2ph.$$.c"; |
$TMP = "$SAFEDIR/c2ph.$$.c"; |
&system("cat @ARGV > $TMP") && exit 1; | &system("cat @ARGV > $TMP") && exit 1; |
&system("cd $TMPDIR; $CC $CFLAGS $DEFINES $TMP") && exit 1; |
&system("cd $SAFEDIR && $CC $CFLAGS $DEFINES $TMP") && exit 1; |
unlink $TMP; | unlink $TMP; |
$TMP =~ s/\.c$/.s/; | $TMP =~ s/\.c$/.s/; |
@ARGV = ($TMP); | @ARGV = ($TMP); |
|
|
} | } |
| |
sub compute_intrinsics { | sub compute_intrinsics { |
$TMPDIR ||= tempdir(CLEANUP => 1); |
&safedir; |
local($TMP) = "$TMPDIR/c2ph-i.$$.c"; |
local($TMP) = "$SAFEDIR/c2ph-i.$$.c"; |
open (TMP, ">$TMP") || die "can't open $TMP: $!"; | open (TMP, ">$TMP") || die "can't open $TMP: $!"; |
select(TMP); | select(TMP); |
| |
|
|
close TMP; | close TMP; |
| |
select(STDOUT); | select(STDOUT); |
open(PIPE, "cd $TMPDIR && $CC $TMP && $TMPDIR/a.out|"); |
open(PIPE, "cd $SAFEDIR && $CC $TMP && $SAFEDIR/a.out|"); |
while (<PIPE>) { | while (<PIPE>) { |
chop; | chop; |
split(' ',$_,2);; | split(' ',$_,2);; |
|
|
$intrinsics{$_[1]} = $template{$_[0]}; | $intrinsics{$_[1]} = $template{$_[0]}; |
} | } |
close(PIPE) || die "couldn't read intrinsics!"; | close(PIPE) || die "couldn't read intrinsics!"; |
unlink($TMP, '$TMPDIR/a.out'); |
unlink($TMP, '$SAFEDIR/a.out'); |
print STDERR "done\n" if $trace; | print STDERR "done\n" if $trace; |
} | } |
| |