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