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