This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Metaconfig unit change for #12655.
[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 known_extensions="$known_extensions threads/shared"
102 set X $nonxs_extensions
103 shift
104 nonxs_extensions="$*"
105 set X $known_extensions
106 shift
107 known_extensions="$*"
108 cd $tdir
109
110 : Now see which are supported on this system.
111 ?X: avail_ext lists available XS extensions.
112 avail_ext=''
113 for xxx in $known_extensions ; do
114         case "$xxx" in
115 ?X: Handle possible DOS 8.3 filename and case alterations
116         DB_File|db_file)
117                 case "$i_db" in
118                 $define) avail_ext="$avail_ext $xxx" ;;
119                 esac
120                 ;;
121         GDBM_File|gdbm_fil)
122                 case "$i_gdbm" in 
123                 $define) avail_ext="$avail_ext $xxx" ;;
124                 esac
125                 ;;
126         I18N/Langinfo|i18n_lan)
127                 case "$i_langinfo$d_nl_langinfo" in 
128                 $define$define) avail_ext="$avail_ext $xxx" ;;
129                 esac
130                 ;;
131         NDBM_File|ndbm_fil)
132                 case "$i_ndbm" in
133                 $define)
134                     case "$osname-$use64bitint" in
135                     cygwin-*|hpux-define)
136                         case "$libs" in
137                         *-lndbm*) avail_ext="$avail_ext $xxx" ;;
138                         esac
139                         ;;
140                     *) avail_ext="$avail_ext $xxx" ;;
141                     esac
142                     ;;
143                 esac
144                 ;;
145         ODBM_File|odbm_fil) 
146                 case "${i_dbm}${i_rpcsvcdbm}" in
147                 *"${define}"*)
148                     case "$osname-$use64bitint" in
149                     cygwin-*|hpux-define)
150                         case "$libs" in
151                         *-ldbm*) avail_ext="$avail_ext $xxx" ;;
152                         esac
153                         ;;
154                     *) avail_ext="$avail_ext $xxx" ;;
155                     esac
156                     ;;
157                 esac
158                 ;;
159         POSIX|posix)
160                 case "$useposix" in
161                 true|define|y) avail_ext="$avail_ext $xxx" ;;
162                 esac
163                 ;;
164         Opcode|opcode)
165                 case "$useopcode" in
166                 true|define|y) avail_ext="$avail_ext $xxx" ;;
167                 esac
168                 ;;
169         Socket|socket)
170                 case "$d_socket" in 
171                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
172                 esac
173                 ;;
174         Sys/Syslog|sys/syslog)
175                 : XXX syslog requires socket
176                 case "$d_socket" in 
177                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
178                 esac
179                 ;;
180         Thread|thread)
181                 case "$usethreads" in
182                 true|$define|y)
183                         case "$useithreads" in
184                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
185                         esac
186                 esac
187                 ;;
188         threads|threads/shared)
189                 case "$usethreads" in
190                 true|$define|y)
191                         case "$useithreads" in
192                         $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;;
193                         esac
194                 esac
195                 ;;
196         IPC/SysV|ipc/sysv)
197                 : XXX Do we need a useipcsysv variable here
198                 case "${d_msg}${d_sem}${d_shm}" in 
199                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
200                 esac
201                 ;;
202         *)      avail_ext="$avail_ext $xxx"
203                 ;;
204         esac
205 done
206
207 set X $avail_ext
208 shift
209 avail_ext="$*"
210
211 : Now see which nonxs extensions are supported on this system.
212 : For now assume all are.
213 nonxs_ext=''
214 for xxx in $nonxs_extensions ; do
215         case "$xxx" in
216         *)      nonxs_ext="$nonxs_ext $xxx"
217                 ;;
218         esac
219 done
220
221 set X $nonxs_ext
222 shift
223 nonxs_ext="$*"
224
225 case $usedl in
226 $define)
227         $cat <<EOM
228 A number of extensions are supplied with $package.  You may choose to
229 compile these extensions for dynamic loading (the default), compile
230 them into the $package executable (static loading), or not include
231 them at all.  Answer "none" to include no extensions.
232 Note that DynaLoader is always built and need not be mentioned here.
233
234 EOM
235         case "$dynamic_ext" in
236         '') dflt="$avail_ext" ;;
237         *)      dflt="$dynamic_ext"
238                 # Perhaps we are reusing an old out-of-date config.sh.
239                 case "$hint" in
240                 previous)
241                         if test X"$dynamic_ext" != X"$avail_ext"; then
242                                 $cat <<EOM
243 NOTICE:  Your previous config.sh list may be incorrect. 
244 The extensions now available to you are 
245         ${avail_ext}
246 but the default list from your previous config.sh is
247         ${dynamic_ext} 
248
249 EOM
250                         fi
251                         ;;
252                 esac
253                 ;;
254         esac
255         case "$dflt" in
256         '')     dflt=none;;
257         esac
258         rp="What extensions do you wish to load dynamically?"
259         . ./myread
260         case "$ans" in
261 ?X: Use ' ' so a subsequent Configure will preserve that value.
262         none) dynamic_ext=' ' ;;
263         *) dynamic_ext="$ans" ;;
264         esac
265
266         case "$static_ext" in
267         '')
268                 : Exclude those already listed in dynamic linking
269                 dflt=''
270                 for xxx in $avail_ext; do
271                         case " $dynamic_ext " in
272                         *" $xxx "*) ;;
273                         *) dflt="$dflt $xxx" ;;
274                         esac
275                 done
276                 set X $dflt
277                 shift
278                 dflt="$*"
279                 ;;
280         *)  dflt="$static_ext" 
281                 ;;
282         esac
283
284         case "$dflt" in
285         '')     dflt=none;;
286         esac
287         rp="What extensions do you wish to load statically?"
288         . ./myread
289         case "$ans" in
290 ?X: Use ' ' so a subsequent Configure will preserve that value.
291         none) static_ext=' ' ;;
292         *) static_ext="$ans" ;;
293         esac
294         ;;
295 *)
296         $cat <<EOM
297 A number of extensions are supplied with $package.  Answer "none" 
298 to include no extensions. 
299 Note that DynaLoader is always built and need not be mentioned here.
300
301 EOM
302         case "$static_ext" in
303         '') dflt="$avail_ext" ;;
304         *)      dflt="$static_ext"
305                 # Perhaps we are reusing an old out-of-date config.sh.
306                 case "$hint" in
307                 previous)
308                         if test X"$static_ext" != X"$avail_ext"; then
309                                 $cat <<EOM
310 NOTICE:  Your previous config.sh list may be incorrect. 
311 The extensions now available to you are 
312         ${avail_ext}
313 but the default list from your previous config.sh is
314         ${static_ext} 
315
316 EOM
317                         fi
318                         ;;
319                 esac
320                 ;;
321         esac
322         : Exclude those that are not xs extensions
323         case "$dflt" in
324         '')     dflt=none;;
325         esac
326         rp="What extensions do you wish to include?"
327         . ./myread
328         case "$ans" in
329 ?X: Use ' ' so a subsequent Configure will preserve that value.
330         none) static_ext=' ' ;;
331         *) static_ext="$ans" ;;
332         esac
333         ;;
334 esac
335
336 set X $dynamic_ext $static_ext $nonxs_ext
337 shift
338 extensions="$*"
339