This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
metaconfig unit change for #14843.
[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 useithreads package test cat rsrc \
14         d_msg d_shm osname use64bitint i_langinfo d_nl_langinfo \
15         libs
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 echo " "
60 echo "Looking for extensions..." >&4
61 : If we are using the old config.sh, known_extensions may contain
62 : old or inaccurate or duplicate values.
63 known_extensions=''
64 nonxs_extensions=''
65 : We do not use find because it might not be available.
66 : We do not just use MANIFEST because the user may have dropped
67 : some additional extensions into the source tree and expect them
68 : to be built.
69
70 : Function to recursively find available extensions, ignoring DynaLoader
71 : NOTE: recursion limit of 10 to prevent runaway in case of symlink madness
72 find_extensions='
73     for xxx in *; do
74        case "$xxx" in
75            DynaLoader|dynaload) ;;
76            *)
77            if $test -f $xxx/$xxx.xs; then
78                known_extensions="$known_extensions $1$xxx";
79            elif $test -f $xxx/Makefile.PL; then
80                nonxs_extensions="$nonxs_extensions $1$xxx";
81            else
82                if $test -d $xxx -a $# -lt 10; then
83                    set $1$xxx/ $*;
84                    cd "$xxx";
85                    eval $find_extensions;
86                    cd ..;
87                    shift;
88                fi;
89            fi
90            ;;
91        esac;
92     done'
93 tdir=`pwd`
94 cd "$rsrc/ext"
95 set X
96 shift
97 eval $find_extensions
98 # Special case:  Add in threads/shared since it is not picked up by the
99 # recursive find above (and adding in general recursive finding breaks
100 # SDBM_File/sdbm).  A.D.  10/25/2001.
101 # Encode::JP needs an explicit mention for the same reason
102 # --jhi 2002-02-23
103 known_extensions="$known_extensions threads/shared Encode/JP"
104 set X $nonxs_extensions
105 shift
106 nonxs_extensions="$*"
107 set X $known_extensions
108 shift
109 known_extensions="$*"
110 cd "$tdir"
111
112 : Now see which are supported on this system.
113 ?X: avail_ext lists available XS extensions.
114 avail_ext=''
115 for xxx in $known_extensions ; do
116         case "$xxx" in
117 ?X: Handle possible DOS 8.3 filename and case alterations
118         DB_File|db_file)
119                 case "$i_db" in
120                 $define) avail_ext="$avail_ext $xxx" ;;
121                 esac
122                 ;;
123         GDBM_File|gdbm_fil)
124                 case "$i_gdbm" in 
125                 $define) avail_ext="$avail_ext $xxx" ;;
126                 esac
127                 ;;
128         I18N/Langinfo|i18n_lan)
129                 case "$i_langinfo$d_nl_langinfo" in 
130                 $define$define) avail_ext="$avail_ext $xxx" ;;
131                 esac
132                 ;;
133         NDBM_File|ndbm_fil)
134                 case "$i_ndbm" in
135                 $define)
136                     case "$osname-$use64bitint" in
137                     cygwin-*|hpux-define)
138                         case "$libs" in
139                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
140                         esac
141                         ;;
142                     *) avail_ext="$avail_ext $xxx" ;;
143                     esac
144                     ;;
145                 esac
146                 ;;
147         ODBM_File|odbm_fil) 
148                 case "${i_dbm}${i_rpcsvcdbm}" in
149                 *"${define}"*)
150                     case "$osname-$use64bitint" in
151                     cygwin-*|hpux-define)
152                         case "$libs" in
153                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
154                         esac
155                         ;;
156                     *) avail_ext="$avail_ext $xxx" ;;
157                     esac
158                     ;;
159                 esac
160                 ;;
161         POSIX|posix)
162                 case "$useposix" in
163                 true|define|y) avail_ext="$avail_ext $xxx" ;;
164                 esac
165                 ;;
166         Opcode|opcode)
167                 case "$useopcode" in
168                 true|define|y) avail_ext="$avail_ext $xxx" ;;
169                 esac
170                 ;;
171         Socket|socket)
172                 case "$d_socket" in 
173                 true|$define|y)
174                     case "$osname" in
175                     beos) ;; # not unless BONE
176                     *) avail_ext="$avail_ext $xxx" ;;
177                     esac
178                     ;;
179                 esac
180                 ;;
181         Sys/Syslog|sys/syslog)
182                 : XXX syslog requires socket
183                 case "$d_socket" in 
184                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
185                 esac
186                 ;;
187         Thread|thread)
188                 case "$usethreads" in
189                 true|$define|y)
190                         case "$useithreads" in
191                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
192                         esac
193                 esac
194                 ;;
195         threads|threads/shared)
196                 case "$usethreads" in
197                 true|$define|y)
198                         case "$useithreads" in
199                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
200                         esac
201                 esac
202                 ;;
203         IPC/SysV|ipc/sysv)
204                 : XXX Do we need a useipcsysv variable here
205                 case "${d_msg}${d_sem}${d_shm}" in 
206                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
207                 esac
208                 ;;
209         *)      avail_ext="$avail_ext $xxx"
210                 ;;
211         esac
212 done
213
214 set X $avail_ext
215 shift
216 avail_ext="$*"
217
218 : Now see which nonxs extensions are supported on this system.
219 : For now assume all are.
220 nonxs_ext=''
221 for xxx in $nonxs_extensions ; do
222         case "$xxx" in
223         *)      nonxs_ext="$nonxs_ext $xxx"
224                 ;;
225         esac
226 done
227
228 set X $nonxs_ext
229 shift
230 nonxs_ext="$*"
231
232 case $usedl in
233 $define)
234         $cat <<EOM
235 A number of extensions are supplied with $package.  You may choose to
236 compile these extensions for dynamic loading (the default), compile
237 them into the $package executable (static loading), or not include
238 them at all.  Answer "none" to include no extensions.
239 Note that DynaLoader is always built and need not be mentioned here.
240
241 EOM
242         case "$dynamic_ext" in
243         '') dflt="$avail_ext" ;;
244         *)      dflt="$dynamic_ext"
245                 # Perhaps we are reusing an old out-of-date config.sh.
246                 case "$hint" in
247                 previous)
248                         if test X"$dynamic_ext" != X"$avail_ext"; then
249                                 $cat <<EOM
250 NOTICE:  Your previous config.sh list may be incorrect. 
251 The extensions now available to you are 
252         ${avail_ext}
253 but the default list from your previous config.sh is
254         ${dynamic_ext} 
255
256 EOM
257                         fi
258                         ;;
259                 esac
260                 ;;
261         esac
262         case "$dflt" in
263         '')     dflt=none;;
264         esac
265         rp="What extensions do you wish to load dynamically?"
266         . ./myread
267         case "$ans" in
268 ?X: Use ' ' so a subsequent Configure will preserve that value.
269         none) dynamic_ext=' ' ;;
270         *) dynamic_ext="$ans" ;;
271         esac
272
273         case "$static_ext" in
274         '')
275                 : Exclude those already listed in dynamic linking
276                 dflt=''
277                 for xxx in $avail_ext; do
278                         case " $dynamic_ext " in
279                         *" $xxx "*) ;;
280                         *) dflt="$dflt $xxx" ;;
281                         esac
282                 done
283                 set X $dflt
284                 shift
285                 dflt="$*"
286                 ;;
287         *)  dflt="$static_ext" 
288                 ;;
289         esac
290
291         case "$dflt" in
292         '')     dflt=none;;
293         esac
294         rp="What extensions do you wish to load statically?"
295         . ./myread
296         case "$ans" in
297 ?X: Use ' ' so a subsequent Configure will preserve that value.
298         none) static_ext=' ' ;;
299         *) static_ext="$ans" ;;
300         esac
301         ;;
302 *)
303         $cat <<EOM
304 A number of extensions are supplied with $package.  Answer "none" 
305 to include no extensions. 
306 Note that DynaLoader is always built and need not be mentioned here.
307
308 EOM
309         case "$static_ext" in
310         '') dflt="$avail_ext" ;;
311         *)      dflt="$static_ext"
312                 # Perhaps we are reusing an old out-of-date config.sh.
313                 case "$hint" in
314                 previous)
315                         if test X"$static_ext" != X"$avail_ext"; then
316                                 $cat <<EOM
317 NOTICE:  Your previous config.sh list may be incorrect. 
318 The extensions now available to you are 
319         ${avail_ext}
320 but the default list from your previous config.sh is
321         ${static_ext} 
322
323 EOM
324                         fi
325                         ;;
326                 esac
327                 ;;
328         esac
329         : Exclude those that are not xs extensions
330         case "$dflt" in
331         '')     dflt=none;;
332         esac
333         rp="What extensions do you wish to include?"
334         . ./myread
335         case "$ans" in
336 ?X: Use ' ' so a subsequent Configure will preserve that value.
337         none) static_ext=' ' ;;
338         *) static_ext="$ans" ;;
339         esac
340         ;;
341 esac
342
343 set X $dynamic_ext $static_ext $nonxs_ext
344 shift
345 extensions="$*"
346