This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
U/perl/Extensions.U: remove references to unused vars
[metaconfig.git] / U / perl / Extensions.U
1 ?RCS: $Id: Extensions.U,v$
2 ?RCS:
3 ?RCS: Copyright (c) 1996-1998, Andy Dougherty
4 ?RCS:
5 ?RCS: You may distribute under the terms of either the GNU General Public
6 ?RCS: License or the Artistic License, as specified in the README file.
7 ?RCS:
8 ?RCS: $Log: Extensions.U,v $
9 ?RCS:
10 ?MAKE:known_extensions extensions dynamic_ext static_ext nonxs_ext \
11         useposix useopcode uselanginfo : \
12         Myread hint usedl d_sem d_socket i_db i_dbm i_rpcsvcdbm i_gdbm \
13         d_ndbm usethreads use5005threads package test cat rsrc \
14         d_msg d_shm osname use64bitint \
15         libs d_cplusplus sed ls rm contains trnl sort
16 ?MAKE:  -pick add $@ %<
17 ?Y:BOTTOM
18 ?S:known_extensions:
19 ?S:     This variable holds a list of all extensions (both XS and non-xs)
20 ?S:     included in the package source distribution.  This information is
21 ?S:     only really of use during the Perl build, as the list makes no
22 ?S:     distinction between extensions which were build and installed, and
23 ?S:     those which where not.  See "extensions" for the list of extensions
24 ?S:     actually built and available.
25 ?S:.
26 ?S:dynamic_ext:
27 ?S:     This variable holds a list of XS extension files we want to
28 ?S:     link dynamically into the package.  It is used by Makefile.
29 ?S:.
30 ?S:static_ext:
31 ?S:     This variable holds a list of XS extension files we want to
32 ?S:     link statically into the package.  It is used by Makefile.
33 ?S:.
34 ?S:nonxs_ext:
35 ?S:     This variable holds a list of all non-xs extensions built and
36 ?S:     installed by the package.  By default, all non-xs extensions
37 ?S:     distributed will be built, with the exception of platform-specific
38 ?S:     extensions (currently only one VMS specific extension).
39 ?S:.
40 ?S:extensions:
41 ?S:     This variable holds a list of all extension files (both XS and
42 ?S:     non-xs) installed with the package.  It is propagated to Config.pm
43 ?S:     and is typically used to test whether a particular extension
44 ?S:     is available.
45 ?S:.
46 ?S:useposix:
47 ?S:     This variable holds either 'true' or 'false' to indicate
48 ?S:     whether the POSIX extension should be used.  The sole
49 ?S:     use for this currently is to allow an easy mechanism
50 ?S:     for hints files to indicate that POSIX will not compile
51 ?S:     on a particular system.
52 ?S:.
53 ?S:useopcode:
54 ?S:     This variable holds either 'true' or 'false' to indicate
55 ?S:     whether the Opcode extension should be used.  The sole
56 ?S:     use for this currently is to allow an easy mechanism
57 ?S:     for users to skip the Opcode extension from the Configure
58 ?S:     command line.
59 ?S:.
60 ?S:uselanginfo:
61 ?S:     This variable holds either 'true' or 'false' to indicate
62 ?S:     whether the I18N::Langinfo extension should be used.  The sole
63 ?S:     use for this currently is to allow an easy mechanism for users to skip
64 ?S:     this extension from the Configure command line.
65 ?S:.
66 ?T:xxx avail_ext this_ext tdir xs_extensions nonxs_extensions find_extensions
67 ?INIT:: set useposix=false in your hint file to disable the POSIX extension.
68 ?INIT:useposix=true
69 ?INIT:: set useopcode=false in your hint file to disable the Opcode extension.
70 ?INIT:useopcode=true
71 ?INIT:: set uselanginfo=false in your hint file to disable the I18N::Langinfo extension.
72 ?INIT:uselanginfo=true
73 ?LINT:extern noextensions
74 ?LINT:extern onlyextensions
75 ?T:keepextensions i
76 : Check extensions
77 echo " "
78 echo "Looking for extensions..." >&4
79 : If we are using the old config.sh, nonxs_extensions and xs_extensions may
80 : contain old or inaccurate or duplicate values.
81 nonxs_extensions=''
82 xs_extensions=''
83 : We do not use find because it might not be available.
84 : We do not just use MANIFEST because the user may have dropped
85 : some additional extensions into the source tree and expect them
86 : to be built.
87
88 : Function to recursively find available extensions, ignoring DynaLoader
89 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
90 : In 5.10.1 and later, extensions are stored in directories
91 : like File-Glob instead of the older File/Glob/.
92 find_extensions='
93     for xxx in *; do
94         case "$xxx" in
95             DynaLoader|dynaload) ;;
96             *)
97             this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`;
98             case "$this_ext" in
99                 Scalar/List/Utils) this_ext="List/Util" ;;
100                 PathTools)         this_ext="Cwd"       ;;
101             esac;
102             echo " $xs_extensions $nonxs_extensions" > "$tdir/$$.tmp";
103             if $contains " $this_ext " "$tdir/$$.tmp"; then
104                 echo >&4;
105                 echo "Duplicate directories detected for extension $xxx" >&4;
106                 echo "Configure cannot correctly recover from this - shall I abort?" >&4;
107                 case "$knowitall" in
108                 "") dflt=y;;
109                 *) dflt=n;;
110                 esac;
111                 . ../UU/myread;
112                 case "$ans" in
113                 n*|N*) ;;
114                 *) echo >&4;
115                     echo "Ok.  Stopping Configure." >&4;
116                     echo "Please remove the duplicate directory (e.g. using git clean) and then re-run Configure" >&4;
117                     exit 1;;
118                 esac;
119                 echo "Ok.  You will need to correct config.sh before running make." >&4;
120             fi;
121             $ls -1 "$xxx" > "$tdir/$$.tmp";
122             if   $contains "\.xs$" "$tdir/$$.tmp" > /dev/null 2>&1; then
123                 xs_extensions="$xs_extensions $this_ext";
124             elif $contains "\.c$"  "$tdir/$$.tmp" > /dev/null 2>&1; then
125                 xs_extensions="$xs_extensions $this_ext";
126             elif $test -d "$xxx"; then
127                 nonxs_extensions="$nonxs_extensions $this_ext";
128             fi;
129             $rm -f "$tdir/$$.tmp";
130             ;;
131         esac;
132     done'
133 tdir=`pwd`
134 cd "$rsrc/cpan"
135 set X
136 shift
137 eval $find_extensions
138 cd "$rsrc/dist"
139 set X
140 shift
141 eval $find_extensions
142 cd "$rsrc/ext"
143 set X
144 shift
145 eval $find_extensions
146 set X $xs_extensions
147 shift
148 xs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '`
149 set X $nonxs_extensions
150 shift
151 nonxs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '`
152 cd "$tdir"
153 known_extensions=`echo $nonxs_extensions $xs_extensions  | tr ' ' $trnl | $sort | tr $trnl ' '`
154
155 : Now see which are supported on this system.
156 ?X: avail_ext lists available XS extensions.
157 avail_ext=''
158 for xxx in $xs_extensions ; do
159         case "$xxx" in
160 ?X: Handle possible DOS 8.3 filename and case alterations
161         Amiga*)
162                 case "$osname" in
163                 amigaos) avail_ext="$avail_ext $xxx" ;;
164                 esac
165                 ;;
166         DB_File|db_file)
167                 case "$i_db" in
168                 $define) avail_ext="$avail_ext $xxx" ;;
169                 esac
170                 ;;
171         GDBM_File|gdbm_fil)
172                 case "$i_gdbm" in
173                 $define) avail_ext="$avail_ext $xxx" ;;
174                 esac
175                 ;;
176         IPC/SysV|ipc/sysv)
177                 : XXX Do we need a useipcsysv variable here
178                 case "${d_msg}${d_sem}${d_shm}" in
179                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
180                 esac
181                 ;;
182         NDBM_File|ndbm_fil)
183                 case "$d_ndbm" in
184                 $define)
185                     case "$osname-$use64bitint" in
186                     hpux-define)
187                         case "$libs" in
188                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
189                         esac
190                         ;;
191                     *) avail_ext="$avail_ext $xxx" ;;
192                     esac
193                     ;;
194                 esac
195                 ;;
196         ODBM_File|odbm_fil)
197                 case "${i_dbm}${i_rpcsvcdbm}" in
198                 *"${define}"*)
199                     case "$d_cplusplus" in
200                     define) ;; # delete as a function name will not work
201                     *)  case "$osname-$use64bitint" in
202                         hpux-define)
203                             case "$libs" in
204                             *-ldbm*) avail_ext="$avail_ext $xxx" ;;
205                             esac
206                             ;;
207                         *) avail_ext="$avail_ext $xxx" ;;
208                         esac
209                         ;;
210                     esac
211                     ;;
212                 esac
213                 ;;
214         Opcode|opcode)
215                 case "$useopcode" in
216                 true|define|y) avail_ext="$avail_ext $xxx" ;;
217                 esac
218                 ;;
219         POSIX|posix)
220                 case "$useposix" in
221                 true|define|y) avail_ext="$avail_ext $xxx" ;;
222                 esac
223                 ;;
224         Socket|socket)
225                 case "$d_socket" in
226                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
227                 esac
228                 ;;
229         I18N/Langinfo|langinfo)
230                 case "$uselanginfo" in
231                 true|define|y) avail_ext="$avail_ext $xxx" ;;
232                 esac
233                 ;;
234         Sys/Syslog|sys/syslog)
235                 case $osname in
236                         amigaos) ;; # not really very useful on AmigaOS
237                         *)
238                         : XXX syslog requires socket
239                         case "$d_socket" in
240                         true|$define|y) avail_ext="$avail_ext $xxx" ;;
241                         esac
242                         ;;
243                 esac
244                 ;;
245         Thread|thread)
246                 case "$usethreads" in
247                 true|$define|y)
248                         case "$use5005threads" in
249                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
250                         esac
251                 esac
252                 ;;
253         threads|threads/shared)
254                 # threads and threads::shared are special cases.
255                 # To stop people from asking "Perl 5.8.0 was supposed
256                 # to have this new fancy threads implementation but my
257                 # perl doesn't have it" and from people trying to
258                 # (re)install the threads module using CPAN.pm and
259                 # CPAN.pm then offering to reinstall Perl 5.8.0,
260                 # the threads.pm and threads/shared.pm will always be
261                 # there, croaking informatively ("you need to rebuild
262                 # all of Perl with threads, sorry") when threads haven't
263                 # been compiled in.
264                 # --jhi
265                 avail_ext="$avail_ext $xxx"
266                 ;;
267         VMS*)
268                 ;;
269         Win32*)
270                 case "$osname" in
271                 cygwin) avail_ext="$avail_ext $xxx" ;;
272                 esac
273                 ;;
274         XS/APItest|xs/apitest)
275                 # This is just for testing.  Skip it unless we have dynamic loading.
276
277                 case "$usedl" in
278                 $define) avail_ext="$avail_ext $xxx" ;;
279                 esac
280                 ;;
281         XS/Typemap|xs/typemap)
282                 # This is just for testing.  Skip it unless we have dynamic loading.
283                 case "$usedl" in
284                 $define) avail_ext="$avail_ext $xxx" ;;
285                 esac
286                 ;;
287         *)      avail_ext="$avail_ext $xxx"
288                 ;;
289         esac
290 done
291
292 set X $avail_ext
293 shift
294 avail_ext="$*"
295
296 case "$onlyextensions" in
297 '') ;;
298 *)  keepextensions=''
299     echo "You have requested that only certain extensions be included..." >&4
300     for i in $onlyextensions; do
301         case " $avail_ext " in
302         *" $i "*)
303             echo "Keeping extension $i."
304             keepextensions="$keepextensions $i"
305             ;;
306         *) echo "Ignoring extension $i." ;;
307         esac
308     done
309     avail_ext="$keepextensions"
310     ;;
311 esac
312
313 case "$noextensions" in
314 '') ;;
315 *)  keepextensions=''
316     echo "You have requested that certain extensions be ignored..." >&4
317     for i in $avail_ext; do
318         case " $noextensions " in
319         *" $i "*) echo "Ignoring extension $i." ;;
320         *) echo "Keeping extension $i.";
321            keepextensions="$keepextensions $i"
322            ;;
323         esac
324     done
325     avail_ext="$keepextensions"
326     ;;
327 esac
328
329 : Now see which nonxs extensions are supported on this system.
330 : For now assume all are.
331 nonxs_ext=''
332 for xxx in $nonxs_extensions ; do
333         case "$xxx" in
334         VMS*)
335                 ;;
336         *)      nonxs_ext="$nonxs_ext $xxx"
337                 ;;
338         esac
339 done
340
341 set X $nonxs_ext
342 shift
343 nonxs_ext="$*"
344
345 case $usedl in
346 $define)
347         $cat <<EOM
348 A number of extensions are supplied with $package.  You may choose to
349 compile these extensions for dynamic loading (the default), compile
350 them into the $package executable (static loading), or not include
351 them at all.  Answer "none" to include no extensions.
352 Note that DynaLoader is always built and need not be mentioned here.
353
354 EOM
355         case "$dynamic_ext" in
356         '')
357                 : Exclude those listed in static_ext
358                 dflt=''
359                 for xxx in $avail_ext; do
360                         case " $static_ext " in
361                         *" $xxx "*) ;;
362                         *) dflt="$dflt $xxx" ;;
363                         esac
364                 done
365                 set X $dflt
366                 shift
367                 dflt="$*"
368                 ;;
369         *)      dflt="$dynamic_ext"
370                 # Perhaps we are reusing an old out-of-date config.sh.
371                 case "$hint" in
372                 previous)
373                         if test X"$dynamic_ext" != X"$avail_ext"; then
374                                 $cat <<EOM
375 NOTICE:  Your previous config.sh list may be incorrect.
376 The extensions now available to you are
377         ${avail_ext}
378 but the default list from your previous config.sh is
379         ${dynamic_ext}
380
381 EOM
382                         fi
383                         ;;
384                 esac
385                 ;;
386         esac
387         case "$dflt" in
388         '')     dflt=none;;
389         esac
390         rp="What extensions do you wish to load dynamically?"
391         . ./myread
392         case "$ans" in
393 ?X: Use ' ' so a subsequent Configure will preserve that value.
394         none) dynamic_ext=' ' ;;
395         *) dynamic_ext="$ans" ;;
396         esac
397
398         case "$static_ext" in
399         '')
400                 : Exclude those already listed in dynamic linking
401                 dflt=''
402                 for xxx in $avail_ext; do
403                         case " $dynamic_ext " in
404                         *" $xxx "*) ;;
405                         *) dflt="$dflt $xxx" ;;
406                         esac
407                 done
408                 set X $dflt
409                 shift
410                 dflt="$*"
411                 ;;
412         *)  dflt="$static_ext"
413                 ;;
414         esac
415
416         case "$dflt" in
417         '')     dflt=none;;
418         esac
419         rp="What extensions do you wish to load statically?"
420         . ./myread
421         case "$ans" in
422 ?X: Use ' ' so a subsequent Configure will preserve that value.
423         none) static_ext=' ' ;;
424         *) static_ext="$ans" ;;
425         esac
426         ;;
427 *)
428         $cat <<EOM
429 A number of extensions are supplied with $package.  Answer "none"
430 to include no extensions.
431 Note that DynaLoader is always built and need not be mentioned here.
432
433 EOM
434         case "$static_ext" in
435         '') dflt="$avail_ext" ;;
436         *)      dflt="$static_ext"
437                 # Perhaps we are reusing an old out-of-date config.sh.
438                 case "$hint" in
439                 previous)
440                         if test X"$static_ext" != X"$avail_ext"; then
441                                 $cat <<EOM
442 NOTICE:  Your previous config.sh list may be incorrect.
443 The extensions now available to you are
444         ${avail_ext}
445 but the default list from your previous config.sh is
446         ${static_ext}
447
448 EOM
449                         fi
450                         ;;
451                 esac
452                 ;;
453         esac
454         : Exclude those that are not xs extensions
455         case "$dflt" in
456         '')     dflt=none;;
457         esac
458         rp="What extensions do you wish to include?"
459         . ./myread
460         case "$ans" in
461 ?X: Use ' ' so a subsequent Configure will preserve that value.
462         none) static_ext=' ' ;;
463         *) static_ext="$ans" ;;
464         esac
465         ;;
466 esac
467 #
468 # Encode is a special case.  If we are building Encode as a static
469 # extension, we need to explicitly list its subextensions as well.
470 # For other nested extensions, this is handled automatically by
471 # the appropriate Makefile.PL.
472 case " $static_ext " in
473         *" Encode "*) # Add the subextensions of Encode
474         cd "$rsrc/cpan"
475         for xxx in `ls Encode/*/Makefile.PL|awk -F/ '{print $2}'`; do
476                 static_ext="$static_ext Encode/$xxx"
477                 known_extensions="$known_extensions Encode/$xxx"
478         done
479         cd "$tdir"
480         ;;
481 esac
482
483 set X $dynamic_ext $static_ext $nonxs_ext
484 shift
485 extensions="$*"
486
487 # Sanity check:  We require an extension suitable for use with
488 # AnyDBM_File, as well as Fcntl and IO.  (Failure to have these
489 # should show up as failures in the test suite, but it's helpful to
490 # catch them now.) The 'extensions' list is normally sorted
491 # alphabetically, so we need to accept either
492 #    DB_File ... Fcntl ... IO  ....
493 # or something like
494 #    Fcntl ... NDBM_File ... IO  ....
495 case " $extensions"  in
496 *"_File "*" Fcntl "*" IO "*) ;; # DB_File
497 *" Fcntl "*"_File "*" IO "*) ;; # GDBM_File
498 *" Fcntl "*" IO "*"_File "*) ;; # NDBM_File
499 *) echo "WARNING: Extensions DB_File or *DBM_File, Fcntl, and IO not configured." >&4
500    echo "WARNING: The Perl you are building will be quite crippled." >& 4
501    ;;
502 esac
503