chiark / gitweb /
toplevel-find: recurse on toplevels-from
[reprap-play.git] / toplevel-find
1 #!/usr/bin/perl -w
2 use strict;
3 use IO::File;
4
5 @ARGV==1 or die;
6 my $base = $ARGV[0];
7 $base =~ m/^\-/ and die;
8
9 sub read_file ($) {
10   my ($fn) = @_;
11   my $f = new IO::File "$fn", '<' or die "$fn $!";
12   while (<$f>) {
13     if (m#^//// toplevels-from:#) {
14       defined($_ = <$f>) or die $!;
15       m#^include\s+\<(\S+)>\s*$# or die;
16       read_file($1);
17       next;
18     }
19     next unless m#^\s*(?:////\s?)?module\s+(\w+)\b.*////toplevel\b#;
20     print "$base,$1\n" or die $!;
21   }
22   $f->error and die "$fn $!";
23 }
24
25 read_file("$base.scad");
26 close STDOUT or die $!;
27