equal
deleted
inserted
replaced
1 #!/usr/bin/perl |
1 #!/usr/bin/perl |
2 # Dockerfile.in -> Dockerfile |
2 # Dockerfile.in -> Dockerfile |
3 # currently just resolve .include_if_exists .. |
3 # currently just resolve .include_if_exists .. |
|
4 # .include |
|
5 # .platform |
|
6 # <platform> |
4 |
7 |
5 use strict; |
8 use strict; |
6 use warnings; |
9 use warnings; |
|
10 use 5.14.0; |
7 use Cwd qw(abs_path); |
11 use Cwd qw(abs_path); |
8 use File::Basename qw(dirname); |
12 use File::Basename qw(basename dirname); |
9 use Getopt::Long; |
13 use Getopt::Long; |
10 |
14 |
11 while (<>) { |
15 while (<>) { |
12 /^\.include_if_exists\s+(.+?)\s*$/ or next; |
16 state $platform; |
13 $_ = "# from $1 {{\n" . do { |
17 |
14 my $file = abs_path(dirname($ARGV) . "/$1"); |
18 if (/^.platform\s+(\S+)\s*/) { |
15 open(my $in, '<', $file) or die "Can't open $file: $!\n"; |
19 $platform = $1; |
16 local $/ = undef; |
20 $_ = "# platform is $1\n"; |
17 <$in>; |
21 next; |
18 } |
22 } |
19 . "# }}\n"; |
23 |
|
24 if (/^(?<cmd>.include(?<try>_if_exists)?)\s+(?<file>.+?)\s*$/) { |
|
25 $_ = "# $+{cmd} from $+{file} {{\n" . join('' => do { |
|
26 my @yield; |
|
27 my @files = glob abs_path(dirname($ARGV)) . "/$+{file}"; |
|
28 foreach my $file (@files) { |
|
29 push @yield, "# from $file\n"; |
|
30 if (open(my $in, '<', $file)) { |
|
31 local $/ = undef; |
|
32 push @yield, <$in>; |
|
33 } |
|
34 else { |
|
35 die "$file: $!\n" if not $+{try}; |
|
36 } |
|
37 } |
|
38 @yield; |
|
39 }) . "# }}\n"; |
|
40 } |
|
41 |
|
42 if (/<platform>/) { |
|
43 die "$0:$ARGV platform not known yet!\n" |
|
44 if not defined $platform; |
|
45 s/<platform>/$platform/g; |
|
46 } |
20 } |
47 } |
21 continue { |
48 continue { |
22 print if defined; |
49 print if defined; |
23 } |
50 } |