Commit | Line | Data |
---|---|---|
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 \ | |
c425c0a5 | 11 | useposix useopcode uselanginfo : \ |
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 \ |
7a1a8ff8 | 14 | d_msg d_shm osname use64bitint \ |
aa1bc9e8 | 15 | libs d_cplusplus sed ls rm contains trnl sort |
959f3c4c JH |
16 | ?MAKE: -pick add $@ %< |
17 | ?Y:BOTTOM | |
18 | ?S:known_extensions: | |
75b514d0 MBT |
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. | |
959f3c4c JH |
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: | |
75b514d0 MBT |
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). | |
959f3c4c JH |
39 | ?S:. |
40 | ?S:extensions: | |
41 | ?S: This variable holds a list of all extension files (both XS and | |
75b514d0 | 42 | ?S: non-xs) installed with the package. It is propagated to Config.pm |
4dd7201d | 43 | ?S: and is typically used to test whether a particular extension |
959f3c4c JH |
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:. | |
c425c0a5 KW |
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:. | |
75b514d0 | 66 | ?T:xxx avail_ext this_ext tdir xs_extensions nonxs_extensions find_extensions |
959f3c4c JH |
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 | |
c425c0a5 KW |
71 | ?INIT:: set uselanginfo=false in your hint file to disable the I18N::Langinfo extension. |
72 | ?INIT:uselanginfo=true | |
3ae30915 JH |
73 | ?LINT:extern noextensions |
74 | ?LINT:extern onlyextensions | |
946dea48 | 75 | ?T:keepextensions i |
d7a2632b | 76 | : Check extensions |
959f3c4c JH |
77 | echo " " |
78 | echo "Looking for extensions..." >&4 | |
75b514d0 MBT |
79 | : If we are using the old config.sh, nonxs_extensions and xs_extensions may |
80 | : contain old or inaccurate or duplicate values. | |
959f3c4c | 81 | nonxs_extensions='' |
75b514d0 | 82 | xs_extensions='' |
959f3c4c JH |
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 | |
8747f5ce | 90 | : In 5.10.1 and later, extensions are stored in directories |
407204de | 91 | : like File-Glob instead of the older File/Glob/. |
959f3c4c JH |
92 | find_extensions=' |
93 | for xxx in *; do | |
ba5f32a3 MB |
94 | case "$xxx" in |
95 | DynaLoader|dynaload) ;; | |
96 | *) | |
1c013c8e | 97 | this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`; |
386366d3 MBT |
98 | case "$this_ext" in |
99 | Scalar/List/Utils) this_ext="List/Util" ;; | |
100 | PathTools) this_ext="Cwd" ;; | |
101 | esac; | |
1c013c8e MBT |
102 | echo " $xs_extensions $nonxs_extensions" > "$tdir/$$.tmp"; |
103 | if $contains " $this_ext " "$tdir/$$.tmp"; then | |
75b514d0 MBT |
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; | |
1c013c8e MBT |
121 | $ls -1 "$xxx" > "$tdir/$$.tmp"; |
122 | if $contains "\.xs$" "$tdir/$$.tmp" > /dev/null 2>&1; then | |
75b514d0 | 123 | xs_extensions="$xs_extensions $this_ext"; |
1c013c8e | 124 | elif $contains "\.c$" "$tdir/$$.tmp" > /dev/null 2>&1; then |
75b514d0 | 125 | xs_extensions="$xs_extensions $this_ext"; |
1c013c8e | 126 | elif $test -d "$xxx"; then |
75b514d0 MBT |
127 | nonxs_extensions="$nonxs_extensions $this_ext"; |
128 | fi; | |
1c013c8e | 129 | $rm -f "$tdir/$$.tmp"; |
ba5f32a3 MB |
130 | ;; |
131 | esac; | |
959f3c4c JH |
132 | done' |
133 | tdir=`pwd` | |
473e3a1b MB |
134 | cd "$rsrc/cpan" |
135 | set X | |
136 | shift | |
137 | eval $find_extensions | |
2e336f39 MB |
138 | cd "$rsrc/dist" |
139 | set X | |
140 | shift | |
141 | eval $find_extensions | |
3720fc47 | 142 | cd "$rsrc/ext" |
86a2f2c4 | 143 | set X |
959f3c4c JH |
144 | shift |
145 | eval $find_extensions | |
75b514d0 | 146 | set X $xs_extensions |
959f3c4c | 147 | shift |
75b514d0 | 148 | xs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '` |
4823dbc4 MB |
149 | set X $nonxs_extensions |
150 | shift | |
aa1bc9e8 | 151 | nonxs_extensions=`echo "$*" | tr ' ' $trnl | $sort | tr $trnl ' '` |
3720fc47 | 152 | cd "$tdir" |
75b514d0 | 153 | known_extensions=`echo $nonxs_extensions $xs_extensions | tr ' ' $trnl | $sort | tr $trnl ' '` |
959f3c4c JH |
154 | |
155 | : Now see which are supported on this system. | |
156 | ?X: avail_ext lists available XS extensions. | |
157 | avail_ext='' | |
75b514d0 | 158 | for xxx in $xs_extensions ; do |
959f3c4c JH |
159 | case "$xxx" in |
160 | ?X: Handle possible DOS 8.3 filename and case alterations | |
1c013c8e MBT |
161 | Amiga*) |
162 | case "$osname" in | |
163 | amigaos) avail_ext="$avail_ext $xxx" ;; | |
164 | esac | |
165 | ;; | |
959f3c4c JH |
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) | |
3c64a580 | 172 | case "$i_gdbm" in |
959f3c4c JH |
173 | $define) avail_ext="$avail_ext $xxx" ;; |
174 | esac | |
175 | ;; | |
a0e4e5e9 JH |
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 | ;; | |
959f3c4c | 182 | NDBM_File|ndbm_fil) |
4b46a0b2 | 183 | case "$d_ndbm" in |
4ee071c7 | 184 | $define) |
33b2427b | 185 | case "$osname-$use64bitint" in |
2862815c | 186 | hpux-define) |
4ee071c7 JH |
187 | case "$libs" in |
188 | *-lndbm*) avail_ext="$avail_ext $xxx" ;; | |
189 | esac | |
190 | ;; | |
191 | *) avail_ext="$avail_ext $xxx" ;; | |
192 | esac | |
193 | ;; | |
959f3c4c JH |
194 | esac |
195 | ;; | |
3c64a580 | 196 | ODBM_File|odbm_fil) |
959f3c4c | 197 | case "${i_dbm}${i_rpcsvcdbm}" in |
4ee071c7 | 198 | *"${define}"*) |
a0e4e5e9 JH |
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" ;; | |
4ee071c7 JH |
208 | esac |
209 | ;; | |
4ee071c7 JH |
210 | esac |
211 | ;; | |
959f3c4c JH |
212 | esac |
213 | ;; | |
a0e4e5e9 JH |
214 | Opcode|opcode) |
215 | case "$useopcode" in | |
959f3c4c JH |
216 | true|define|y) avail_ext="$avail_ext $xxx" ;; |
217 | esac | |
218 | ;; | |
a0e4e5e9 JH |
219 | POSIX|posix) |
220 | case "$useposix" in | |
959f3c4c JH |
221 | true|define|y) avail_ext="$avail_ext $xxx" ;; |
222 | esac | |
223 | ;; | |
224 | Socket|socket) | |
3c64a580 | 225 | case "$d_socket" in |
a3c22f16 | 226 | true|$define|y) avail_ext="$avail_ext $xxx" ;; |
959f3c4c JH |
227 | esac |
228 | ;; | |
c425c0a5 KW |
229 | I18N/Langinfo|langinfo) |
230 | case "$uselanginfo" in | |
231 | true|define|y) avail_ext="$avail_ext $xxx" ;; | |
232 | esac | |
233 | ;; | |
fa92de3e | 234 | Sys/Syslog|sys/syslog) |
bbc26fc3 MBT |
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 | ;; | |
fa92de3e YST |
243 | esac |
244 | ;; | |
959f3c4c | 245 | Thread|thread) |
4a2f2b60 JH |
246 | case "$usethreads" in |
247 | true|$define|y) | |
50dd2a3c MB |
248 | case "$use5005threads" in |
249 | $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;; | |
4a2f2b60 | 250 | esac |
80f8756f JH |
251 | esac |
252 | ;; | |
a0e4e5e9 JH |
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 | ;; | |
cac33f20 MB |
267 | VMS*) |
268 | ;; | |
1d5a8f63 | 269 | Win32*) |
2ed3374f JD |
270 | case "$osname" in |
271 | cygwin) avail_ext="$avail_ext $xxx" ;; | |
272 | esac | |
273 | ;; | |
6e939e10 AD |
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 | ;; | |
959f3c4c JH |
287 | *) avail_ext="$avail_ext $xxx" |
288 | ;; | |
289 | esac | |
290 | done | |
291 | ||
292 | set X $avail_ext | |
293 | shift | |
294 | avail_ext="$*" | |
295 | ||
3eb2ab03 JH |
296 | case "$onlyextensions" in |
297 | '') ;; | |
298 | *) keepextensions='' | |
04c34a22 | 299 | echo "You have requested that only certain extensions be included..." >&4 |
3eb2ab03 JH |
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 | |
0ec877d1 JH |
318 | case " $noextensions " in |
319 | *" $i "*) echo "Ignoring extension $i." ;; | |
3eb2ab03 JH |
320 | *) echo "Keeping extension $i."; |
321 | keepextensions="$keepextensions $i" | |
322 | ;; | |
323 | esac | |
324 | done | |
325 | avail_ext="$keepextensions" | |
326 | ;; | |
327 | esac | |
328 | ||
959f3c4c JH |
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 | |
75b514d0 MBT |
334 | VMS*) |
335 | ;; | |
959f3c4c JH |
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 | |
a7eb1db8 MB |
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 | ;; | |
959f3c4c JH |
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 | |
3c64a580 RGS |
375 | NOTICE: Your previous config.sh list may be incorrect. |
376 | The extensions now available to you are | |
959f3c4c JH |
377 | ${avail_ext} |
378 | but the default list from your previous config.sh is | |
3c64a580 | 379 | ${dynamic_ext} |
959f3c4c JH |
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 | ;; | |
3c64a580 | 412 | *) dflt="$static_ext" |
959f3c4c JH |
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 | |
3c64a580 RGS |
429 | A number of extensions are supplied with $package. Answer "none" |
430 | to include no extensions. | |
959f3c4c JH |
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 | |
3c64a580 RGS |
442 | NOTICE: Your previous config.sh list may be incorrect. |
443 | The extensions now available to you are | |
959f3c4c JH |
444 | ${avail_ext} |
445 | but the default list from your previous config.sh is | |
3c64a580 | 446 | ${static_ext} |
959f3c4c JH |
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 | |
3c64a580 | 467 | # |
75423307 JH |
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 | |
d23c2a3f | 474 | cd "$rsrc/cpan" |
75423307 JH |
475 | for xxx in `ls Encode/*/Makefile.PL|awk -F/ '{print $2}'`; do |
476 | static_ext="$static_ext Encode/$xxx" | |
75b514d0 | 477 | known_extensions="$known_extensions Encode/$xxx" |
75423307 JH |
478 | done |
479 | cd "$tdir" | |
480 | ;; | |
481 | esac | |
959f3c4c JH |
482 | |
483 | set X $dynamic_ext $static_ext $nonxs_ext | |
484 | shift | |
485 | extensions="$*" | |
486 | ||
9d9aa0de JH |
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 .... | |
1af58dcc JH |
495 | case " $extensions" in |
496 | *"_File "*" Fcntl "*" IO "*) ;; # DB_File | |
497 | *" Fcntl "*"_File "*" IO "*) ;; # GDBM_File | |
498 | *" Fcntl "*" IO "*"_File "*) ;; # NDBM_File | |
3ae30915 JH |
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 |