OSDN Git Service

PR bootstrap/39454
[pf3gnuchains/gcc-fork.git] / libjava / scripts / 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, 2000, 2002, 2005, 2006, 2007  Free Software
5 # Foundation
6 #
7 # This file is part of libgcj.
8 #
9 # This software is copyrighted work licensed under the terms of the
10 # Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
11 # details.
12
13 # Usage: cd <srcdir>/classpath/lib ; perl ../../scripts/classes.pl.
14
15 use DirHandle;
16
17 if (-d 'java')
18 {
19     # Ok here.
20 }
21 elsif (-d '../java')
22 {
23     chdir ('..');
24 }
25 else
26 {
27     die "couldn't find java directory\n";
28 }
29
30 &scan ('java', 2);
31
32 exit 0;
33
34 sub scan
35 {
36     local ($dir, $indent) = @_;
37     local (@subdirs) = ();
38     local (%classes) = ();
39
40     local ($d) = new DirHandle $dir;
41     local (*JFILE);
42     local ($name);
43     if (defined $d)
44     {
45         while (defined ($name = $d->read))
46         {
47             next if $name eq 'CVS';
48             next if $name eq '.svn';
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 =~ s/\.class$//;
66             $classes{$name} = 1;
67         }
68
69         undef $d;
70     }
71
72     local ($spaces) = ' ' x $indent;
73     local ($classname);
74     ($classname = $dir) =~ s/^.*\///;
75     print $spaces, "namespace ", $classname, "\n";
76     print $spaces, "{\n";
77
78     foreach (sort keys %classes)
79     {
80         print $spaces, "  class ", $_, ";\n";
81     }
82     print "\n" if scalar @classes > 0 && scalar @subdirs > 0;
83
84     local ($first) = 1;
85     foreach (sort @subdirs)
86     {
87         print "\n" unless $first;
88         $first = 0;
89         &scan ("$dir/$_", $indent + 2);
90     }
91
92     print $spaces, "}\n";
93 }