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