OSDN Git Service

* posix-threads.cc (_Jv_CondWait): pthread_ calls return error
[pf3gnuchains/gcc-fork.git] / libjava / classes.pl
1 # classes.pl - A perl program to generate most of the contents of
2 # javaprims.h automatically.
3
4 # Copyright (C) 1998, 1999  Cygnus Solutions
5 #
6 # This file is part of libjava.
7 #
8 # This software is copyrighted work licensed under the terms of the
9 # Libjava License.  Please consult the file "LIBJAVA_LICENSE" for
10 # details.
11
12 # Usage: cd <top-srcdir> ; perl classes.pl.
13 # Can also be run from the `include' directory; this lets us
14 # more easily insert the output into javaprims.h (which is where it goes).
15
16 use DirHandle;
17
18 if (-d 'java')
19 {
20     # Ok here.
21 }
22 elsif (-d '../java')
23 {
24     chdir ('..');
25 }
26 else
27 {
28     die "couldn't find java directory\n";
29 }
30
31 &scan ('java', 2);
32
33 exit 0;
34
35 sub scan
36 {
37     local ($dir, $indent) = @_;
38     local (@subdirs) = ();
39     local (%classes) = ();
40
41     local ($d) = new DirHandle $dir;
42     local (*JFILE);
43     local ($name);
44     if (defined $d)
45     {
46         while (defined ($name = $d->read))
47         {
48             next if $name eq 'CVS';
49             next if $name eq '.';
50             next if $name eq '..';
51             if ($dir eq 'java'
52                 && $name ne 'lang'
53                 && $name ne 'util'
54                 && $name ne 'io')
55             {
56                 # We only generate decls for java.lang, java.io, and
57                 # java.util.
58                 next;
59             }
60             if (-d ($dir . '/' . $name))
61             {
62                 push (@subdirs, $name);
63                 next;
64             }
65             next unless $name =~ /\.java$/;
66
67             open (FILE, "< $dir/$name");
68             while (<FILE>)
69             {
70                 # NOTE: we don't skip `/*' comments.
71                 s,//.*$,,;
72                 # For now assume that class names start with upper
73                 # case letter.
74                 next unless /(class|interface) ([A-Z][A-Za-z0-9]+)/;
75                 $classes{$2} = 1;
76             }
77             close (FILE);
78         }
79
80         undef $d;
81     }
82
83     local ($spaces) = ' ' x $indent;
84     local ($classname);
85     ($classname = $dir) =~ s/^.*\///;
86     print $spaces, "namespace ", $classname, "\n";
87     print $spaces, "{\n";
88
89     foreach (sort keys %classes)
90     {
91         print $spaces, "  class ", $_, ";\n";
92     }
93     print "\n" if scalar @classes > 0 && scalar @subdirs > 0;
94
95     local ($first) = 1;
96     foreach (sort @subdirs)
97     {
98         print "\n" unless $first;
99         $first = 0;
100         &scan ("$dir/$_", $indent + 2);
101     }
102
103     print $spaces, "};\n";
104 }