X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=generate;h=9be1cfb8bf4b5d9f6ceabb91bd1174724cf8a69b;hb=66185b48ea73336d3eed4e013e553d07fb602743;hp=4a0450686c61e556227a1134bef5f3d114b7b277;hpb=ecbc3dad2da6cddc7562ce77807231d995f6353a;p=secnet.git diff --git a/generate b/generate index 4a04506..9be1cfb 100755 --- a/generate +++ b/generate @@ -7,7 +7,7 @@ # $(srcdir)/subdirmk/generate [--srcdir=SRCDIR] [--] SUBDIR... # # generates in each subdirectory -# Subdir.mk.tmp +# Dir.mk.tmp # Makefile # and in toplevel # main.mk.tmp @@ -176,6 +176,11 @@ sub err ($) { die "subdirmk: ${err_file}:$.: $m\n"; } +sub wrn ($) { + my ($m) = @_; + print STDERR "subdirmk: warning: ${err_file}:$.: $m\n"; +} + sub ddbl_only ($) { my ($e) = @_; return if $ddbl; @@ -216,6 +221,7 @@ sub process_input_mk ($$$$) { local $ddbl; my @nest = (['']); + my $evalcall_brackets; my $push_nest = sub { my ($nk, $nndbl, $what) = @_; @@ -255,12 +261,14 @@ sub process_input_mk ($$$$) { : s{^(.*?)($esc)}{}) { od $_; last; } od $1; if ($2 eq '{') { - $ddbl++; + od $2; + $evalcall_brackets++; next; } elsif ($2 eq '}') { - next if --$ddbl; + od $2; + next if --$evalcall_brackets; $pop_nest->('eval'); - od '}}'; + od '}'; next; } if (s{^\\$esc}{}) { od "$$esclitr" } @@ -282,6 +290,7 @@ sub process_input_mk ($$$$) { elsif (s{^\$\{}{}) { err 'macro invocation cannot be re-$-doubled' if $ddbl; od '${eval ${call '; + $evalcall_brackets = 1; $push_nest->('eval',1, '&${...}'); } elsif (s{^([~^]?)(?=[ \t])}{}) { my $prefix = $pfxmap{$1} // die "internal error ($1?)"; @@ -333,9 +342,9 @@ sub filter_subdir_mk ($) { my ($f, $enoentok) = @_; process_input_mk($targets, "${srcdir}/$f", \$esclit, $enoentok); }; - $pi->("Prefix.sd.mk", 1); - $pi->("${dir_prefix}Subdir.sd.mk", 0); - $pi->("Suffix.sd.mk", 1); + $pi->("Prefix.sd.mk", 1); + $pi->("${dir_prefix}Dir.sd.mk", 0); + $pi->("Suffix.sd.mk", 1); } sub process_subtree ($$); @@ -351,7 +360,7 @@ sub process_subtree ($$) { # ^ this is the only var which we need before we come back from # the recursion. - push @output_makefiles, "${dir_prefix}Subdir.mk"; + push @output_makefiles, "${dir_prefix}Dir.mk"; write_makefile($dir_prefix, scalar @$path); my %targets = (all => []); @@ -364,12 +373,12 @@ sub process_subtree ($$) { } set_dir_vars($path); - start_output_file("${dir_prefix}Subdir.mk.tmp"); + start_output_file("${dir_prefix}Dir.mk.tmp"); if ($node->[2]) { filter_subdir_mk(\%targets); } else { - my $sdmk = "${dir_prefix}Subdir.sd.mk"; + my $sdmk = "${dir_prefix}Dir.sd.mk"; if (stat $sdmk) { die "subdirmk: $sdmk unexpectedly exists (${dir_prefix} not mentioned on subdirmk/generate command line, maybe directory is missing from SUBDIRMK_SUBDIRS)"; @@ -384,16 +393,16 @@ sub process_subtree ($$) { my @targets = sort keys %targets; foreach my $target (@targets) { my $target_varname = target_varname($var_prefix, $target); - print O "${dir_prefix}${target}:: \$($target_varname)"; + oraw "${dir_prefix}${target}:: \$($target_varname)"; foreach my $child_subdir (@{ $targets{$target} }) { - print O " $child_subdir/$target"; + oraw " $child_subdir/$target"; } - print O "\n"; + oraw "\n"; } if (@targets) { - print O ".PHONY:"; - print O " ${dir_prefix}${_}" foreach @targets; - print O "\n"; + oraw ".PHONY:"; + oraw " ${dir_prefix}${_}" foreach @targets; + oraw "\n"; } return @targets;