chiark / gitweb /
toplevel-find: recurse on toplevels-from
[reprap-play.git] / toplevel-find
index 3e3c28b90cb1f6cf8ad97fa0a88d9cff9aa29973..35f73e6b9d7f060b118e89757946e0030b1e5f2b 100755 (executable)
@@ -1,18 +1,27 @@
 #!/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 (<F>) {
+
+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;
-       open F, "$1" or die "$1 $!";
-       next;
+      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 $!;
+