-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathlive-compile.pl
More file actions
92 lines (85 loc) · 2.47 KB
/
Copy pathlive-compile.pl
File metadata and controls
92 lines (85 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/usr/bin/perl
use File::Spec;
use File::Basename;
use POSIX;
use Cwd 'abs_path';
use warnings;
use strict;
no warnings 'experimental::smartmatch';
die("No argument provided for file\n") unless($ARGV[0]);
die("No file at $ARGV[0]\n") unless(-e $ARGV[0]);
my $fifo_name = $ARGV[1];
$fifo_name = 'fifo.p8' unless($ARGV[1]);
sub parse {
my ($cart_file, $out, $required, $expected) = @_;
my $base_path = dirname($cart_file);
open(my $code, '<:encoding(Windows-1252)', $cart_file)
or warn "Could not open file '$cart_file' for reading. $!";
my $line = 0;
while(my $row = <$code>) {
$line++;
my @expect_copy = @$expected;
my $i = 0;
foreach my $arr (@expect_copy) {
# my @expect = @$arr;
if($row =~ /$$arr[1]/) {
# print "removing expected pattern $pattern\n";
splice @$expected, $i, 1;
$i--;
}
$i++;
}
if($row =~ /[A-Z]/) {
print "Uppercase character in $cart_file, $line\n";
}
if($row =~ /^\s*\-\- expect (.*?)$/) {
my $expect = $1;
my @expect = ($cart_file,$expect);
push(@$expected,\@expect);
# print "Adding expected pattern $expect\n";
} elsif($row =~ /^\s*\-\- require (.+?)$/) {
my $original = $1;
my $require = $original;
if($require !~ /\.\w+$/){ $require .= '.lua'; }
my $local = File::Spec->rel2abs($require, $base_path);
if(-e $local) { $require = $local }
else { $require = abs_path("lib/$require"); }
if(!-e $require) {
print "ERROR: $original doesn't exist!\a\n";
return
}
unless($require ~~ @$required) {
push(@$required,$require);
# print "Requiring $original from $cart_file\n";
open my ($output_row), '>', \$row;
parse($require, $output_row, $required, $expected);
close $output_row;
}
}
print $out $row;
}
close $code;
}
sub death {
unlink('fifo.p8');
die "\nCaught interrupt, killed fifo.";
}
mkfifo($fifo_name,0777);
foreach('ABRT','QUIT','KILL','INT','ABRT','HUP') { $SIG{$_} = \&death; }
while(1) {
open(my $fifo, '>:encoding(Windows-1252)', $fifo_name) or die $!;
print localtime." -- Compiling...\n";
my @required = ();
my @expected = ();
parse($ARGV[0],$fifo,\@required,\@expected);
close($fifo);
print localtime." -- Done!\n";
print "Remaining expected patterns ".@expected."\n";
if(@expected > 0) {
foreach my $expected (@expected) {
print((join ": ", @$expected)."\n");
}
}
print "\n";
sleep(1);
}