X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=toplevel-find;h=c9174c9842530d48f4d1e73e409b9646eb1f0997;hb=ba7c5b240dcdab5fa3f4e3f7823bb828551471f0;hp=72a2de39c50e0c2c624b28d4ea957646b84d072a;hpb=fbcaf269697287b4a6d7ddb88bef050c93b06cc9;p=reprap-play.git diff --git a/toplevel-find b/toplevel-find index 72a2de3..c9174c9 100755 --- a/toplevel-find +++ b/toplevel-find @@ -1,12 +1,28 @@ #!/usr/bin/perl -w use strict; +use IO::File; + @ARGV==1 or die; my $base = $ARGV[0]; $base =~ m/^\-/ and die; -open F, "$base.scad" or die "$base.scad $!"; -while () { - next unless m#^\s*module\s+(\w+)\b.*////toplevel\b#; + +sub read_file ($); +sub read_file ($) { + my ($fn) = @_; + my $f = new IO::File "$fn", '<' or die "$fn $!"; + while (<$f>) { + if (m#^//// toplevels-from:#) { + defined($_ = <$f>) or die $!; + m#^include\s+\<(\S+)>\s*$# or die; + read_file($1); + next; + } + next unless m#^\s*(?:////\s?)?module\s+(\w+)\b.*////toplevel\b#; print "$base,$1\n" or die $!; + } + $f->error and die "$fn $!"; } -close F or die $!; + +read_file("$base.scad"); close STDOUT or die $!; +