This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
1ee760e143d931e7b5380c4563a4a52f1087bc87
[metaconfig.git] / U / mkglossary
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use File::Basename;
7
8 # WARNING:  This is site-specific.  Change to the location
9 # where you have installed dist-3.0PL70.
10 my @std_units = glob ("/pro/3gl/CPAN/lib/dist/U/*.U");
11 my $PWD       =       "/pro/3gl/CPAN/perl";
12
13 -d "U" and chdir "U";
14 my @perl_units = glob ("$PWD/U/*/*.U");
15 push (@perl_units, @std_units);
16
17 # Get the list of config.sh symbols.  Be sure this is up to date!
18 # (I run the U/mksample script first to be sure.)
19 open my $wanted, "< $PWD/Porting/config.sh" or die "$0: open $PWD/Wanted: $!\n";
20 my @WANTED = map  { $_->[0] }
21              sort { $a->[1] cmp $b->[1] }
22              map  { [ $_, lc $_ ] } <$wanted>;
23 close $wanted;
24 print <<'EOM';
25
26 !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
27 This file is built by metaconfig.
28
29 This file contains a description of all the shell variables whose value is
30 determined by the Configure script.  Variables intended for use in C
31 programs (e.g. I_UNISTD) are already described in config_h.SH.  [`configpm'
32 generates pod documentation for Config.pm from this file--please try to keep
33 the formatting regular.]
34
35 EOM
36
37 my ($Loc, %expl, %file, %predef);
38 foreach my $file (@perl_units) {
39     open my $fh, "< $file" or die "$0: open $file: $!";
40     my $base = basename ($file);
41     $Loc = $file, next if $base eq "Loc.U" and not defined $Loc;
42     my @var;
43     while (<$fh>) {
44         if (m/^\?S:\w+[ \t:]/ .. m/^\?S:.$/) {
45             s/[ \t]+$//;
46             if (m/^\?S:.$/) {
47                 my ($var) = ((shift @var) =~ /^(\w+)/);
48                 unless (exists $expl{$var}) {
49                     $expl{$var} = [ @var, "\n" ];
50                     $file{$var} = $base;
51                     }
52                 @var = ();
53                 }
54             else {
55                 s/^\?S://;              # Remove leading ?S: markers.
56                 s/^\s+(?=.)/\t/;        # Ensure all lines begin with tabs.
57                 push @var, $_;
58                 }
59             }
60         }
61     close $fh or die "$0: close $file: $!";
62     }
63
64 defined $Loc or die "$0: Couldn't locate Loc.U: $!";
65
66 open my $fh, "< $Loc" or die "$0: open $Loc: $!";
67 while (<$fh>) {
68     m/^\?(\w+):\1$/ and ($expl{$1}, $file{$1}) = (1, "Loc.U");
69     }
70 close $fh or die "$0: close $Loc: $!";
71
72 {   local $/ = "\n\n";
73     for (<DATA>) {
74         m/^(\w+)/;
75         $predef{$1} = $_;
76         }
77     }
78
79 for (@WANTED) {
80     chomp;
81     m/^#/ and next;     # Skip comments
82     m/^$/ and next;     # Skip empty sections
83     my ($var, $val) = split /=/, $_, 2;
84
85     if (exists $expl{$var}) {
86         if ($file{$var} eq "Loc.U") {
87             print "$var (Loc.U):\n";
88             if ($val eq "''") {
89                 # If we didn't have d_portable, this info might be
90                 # useful, but it still won't help with non-standard
91                 # stuff if perl is built on one system but installed
92                 # on others (this is common with Linux distributions,
93                 # for example).
94                 print <<EOE;
95         This variable is defined but not used by Configure.
96         The value is a plain '' and is not useful.
97
98 EOE
99                 }
100             else {
101                 print <<EOE;
102         This variable is used internally by Configure to determine the
103         full pathname (if any) of the $var program.  After Configure runs,
104         the value is reset to a plain "$var" and is not useful.
105
106 EOE
107                 }
108             }
109         else {
110             print "$var ($file{$var}):\n";
111             print @{$expl{$var}};
112             }
113         next;
114         }
115
116     # Handle special variables from Oldsyms.U.  Since these start
117     # with capital letters, metalint considers them to be "special
118     # unit" symbols.  It's easier to define them here than to try
119     # to fool metalint any further.   --AD  22 Oct 1999
120     if (exists $predef{$var}) {
121         print  $predef{$var};
122         next;
123         }
124
125     $var =~ /^(Author|Date|Header|Id|Locker|Log|Mcc|RCSfile|Revision|Source|State)$|_cflags$|^config_arg/
126         or warn "$0: couldn't find $var\n"
127     }
128 __END__
129 PERL_REVISION (Oldsyms.U):
130         In a Perl version number such as 5.6.2, this is the 5.
131         This value is manually set in patchlevel.h
132
133 PERL_VERSION (Oldsyms.U):
134         In a Perl version number such as 5.6.2, this is the 6.
135         This value is manually set in patchlevel.h
136
137 PERL_SUBVERSION (Oldsyms.U):
138         In a Perl version number such as 5.6.2, this is the 2.
139         Values greater than 50 represent potentially unstable
140         development subversions.
141         This value is manually set in patchlevel.h
142
143 PERL_APIVERSION (Oldsyms.U):
144         This value is manually set in patchlevel.h and is used
145         to set the Configure apiversion variable.
146
147 CONFIGDOTSH (Oldsyms.U):
148         This is set to 'true' in config.sh so that a shell script
149         sourcing config.sh can tell if it has been sourced already.
150
151 PERL_CONFIG_SH (Oldsyms.U):
152         This is set to 'true' in config.sh so that a shell script
153         sourcing config.sh can tell if it has been sourced already.
154
155 PERL_API_REVISION (patchlevel.h):
156         This number describes the earliest compatible PERL_REVISION of
157         Perl ("compatibility" here being defined as sufficient binary/API
158         compatibility to run XS code built with the older version).
159         Normally this does not change across maintenance releases.
160         Please read the comment in patchlevel.h.
161
162 PERL_API_VERSION (patchlevel.h):
163         This number describes the earliest compatible PERL_VERSION of
164         Perl ("compatibility" here being defined as sufficient binary/API
165         compatibility to run XS code built with the older version).
166         Normally this does not change across maintenance releases.
167         Please read the comment in patchlevel.h.
168
169 PERL_API_SUBVERSION (patchlevel.h):
170         This number describes the earliest compatible PERL_SUBVERSION of
171         Perl ("compatibility" here being defined as sufficient binary/API
172         compatibility to run XS code built with the older version).
173         Normally this does not change across maintenance releases.
174         Please read the comment in patchlevel.h.
175
176 PERL_PATCHLEVEL (Oldsyms.U):
177         This symbol reflects the patchlevel, if available. Will usually
178         come from the .patch file, which is available when the perl
179         source tree was fetched with rsync.
180