This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Backport all Configure patches 17671 .. 17881
[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                     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                     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)
172                     case "$osname" in
173                     beos) ;; # not unless BONE
174                     *) avail_ext="$avail_ext $xxx" ;;
175                     esac
176                     ;;
177                 esac
178                 ;;
179         Sys/Syslog|sys/syslog)
180                 : XXX syslog requires socket
181                 case "$d_socket" in 
182                 true|$define|y) avail_ext="$avail_ext $xxx" ;;
183                 esac
184                 ;;
185         Thread|thread)
186                 case "$usethreads" in
187                 true|$define|y)
188                         case "$useithreads" in
189                         $undef|false|[nN]*) avail_ext="$avail_ext $xxx" ;;
190                         esac
191                 esac
192                 ;;
193         XS/APItest|xs/apitest)
194                 # This is just for testing.  Skip it unless we have dynamic loading.
195
196                 case "$usedl" in
197                 $define) avail_ext="$avail_ext $xxx" ;;
198                 esac
199                 ;;
200         XS/Typemap|xs/typemap)
201                 # This is just for testing.  Skip it unless we have dynamic loading.
202                 case "$usedl" in
203                 $define) avail_ext="$avail_ext $xxx" ;;
204                 esac
205                 ;;
206         threads|threads/shared)
207                 # threads and threads::shared are special cases.
208                 # To stop people from asking "Perl 5.8.0 was supposed
209                 # to have this new fancy threads implementation but my
210                 # perl doesn't have it" and from people trying to
211                 # (re)install the threads module using CPAN.pm and
212                 # CPAN.pm then offering to reinstall Perl 5.8.0,
213                 # the threads.pm and threads/shared.pm will always be
214                 # there, croaking informatively ("you need to rebuild
215                 # all of Perl with threads, sorry") when threads haven't
216                 # been compiled in.
217                 # --jhi
218                 avail_ext="$avail_ext $xxx"
219                 ;;
220         IPC/SysV|ipc/sysv)
221                 : XXX Do we need a useipcsysv variable here
222                 case "${d_msg}${d_sem}${d_shm}" in 
223                 *"${define}"*) avail_ext="$avail_ext $xxx" ;;
224                 esac
225                 ;;
226         *)      avail_ext="$avail_ext $xxx"
227                 ;;
228         esac
229 done
230
231 set X $avail_ext
232 shift
233 avail_ext="$*"
234
235 : Now see which nonxs extensions are supported on this system.
236 : For now assume all are.
237 nonxs_ext=''
238 for xxx in $nonxs_extensions ; do
239         case "$xxx" in
240         *)      nonxs_ext="$nonxs_ext $xxx"
241                 ;;
242         esac
243 done
244
245 set X $nonxs_ext
246 shift
247 nonxs_ext="$*"
248
249 case $usedl in
250 $define)
251         $cat <<EOM
252 A number of extensions are supplied with $package.  You may choose to
253 compile these extensions for dynamic loading (the default), compile
254 them into the $package executable (static loading), or not include
255 them at all.  Answer "none" to include no extensions.
256 Note that DynaLoader is always built and need not be mentioned here.
257
258 EOM
259         case "$dynamic_ext" in
260         '')
261                 : Exclude those listed in static_ext
262                 dflt=''
263                 for xxx in $avail_ext; do
264                         case " $static_ext " in
265                         *" $xxx "*) ;;
266                         *) dflt="$dflt $xxx" ;;
267                         esac
268                 done
269                 set X $dflt
270                 shift
271                 dflt="$*"
272                 ;;
273         *)      dflt="$dynamic_ext"
274                 # Perhaps we are reusing an old out-of-date config.sh.
275                 case "$hint" in
276                 previous)
277                         if test X"$dynamic_ext" != X"$avail_ext"; then
278                                 $cat <<EOM
279 NOTICE:  Your previous config.sh list may be incorrect. 
280 The extensions now available to you are 
281         ${avail_ext}
282 but the default list from your previous config.sh is
283         ${dynamic_ext} 
284
285 EOM
286                         fi
287                         ;;
288                 esac
289                 ;;
290         esac
291         case "$dflt" in
292         '')     dflt=none;;
293         esac
294         rp="What extensions do you wish to load dynamically?"
295         . ./myread
296         case "$ans" in
297 ?X: Use ' ' so a subsequent Configure will preserve that value.
298         none) dynamic_ext=' ' ;;
299         *) dynamic_ext="$ans" ;;
300         esac
301
302         case "$static_ext" in
303         '')
304                 : Exclude those already listed in dynamic linking
305                 dflt=''
306                 for xxx in $avail_ext; do
307                         case " $dynamic_ext " in
308                         *" $xxx "*) ;;
309                         *) dflt="$dflt $xxx" ;;
310                         esac
311                 done
312                 set X $dflt
313                 shift
314                 dflt="$*"
315                 ;;
316         *)  dflt="$static_ext" 
317                 ;;
318         esac
319
320         case "$dflt" in
321         '')     dflt=none;;
322         esac
323         rp="What extensions do you wish to load statically?"
324         . ./myread
325         case "$ans" in
326 ?X: Use ' ' so a subsequent Configure will preserve that value.
327         none) static_ext=' ' ;;
328         *) static_ext="$ans" ;;
329         esac
330         ;;
331 *)
332         $cat <<EOM
333 A number of extensions are supplied with $package.  Answer "none" 
334 to include no extensions. 
335 Note that DynaLoader is always built and need not be mentioned here.
336
337 EOM
338         case "$static_ext" in
339         '') dflt="$avail_ext" ;;
340         *)      dflt="$static_ext"
341                 # Perhaps we are reusing an old out-of-date config.sh.
342                 case "$hint" in
343                 previous)
344                         if test X"$static_ext" != X"$avail_ext"; then
345                                 $cat <<EOM
346 NOTICE:  Your previous config.sh list may be incorrect. 
347 The extensions now available to you are 
348         ${avail_ext}
349 but the default list from your previous config.sh is
350         ${static_ext} 
351
352 EOM
353                         fi
354                         ;;
355                 esac
356                 ;;
357         esac
358         : Exclude those that are not xs extensions
359         case "$dflt" in
360         '')     dflt=none;;
361         esac
362         rp="What extensions do you wish to include?"
363         . ./myread
364         case "$ans" in
365 ?X: Use ' ' so a subsequent Configure will preserve that value.
366         none) static_ext=' ' ;;
367         *) static_ext="$ans" ;;
368         esac
369         ;;
370 esac
371 #        
372 # Encode is a special case.  If we are building Encode as a static
373 # extension, we need to explicitly list its subextensions as well.
374 # For other nested extensions, this is handled automatically by
375 # the appropriate Makefile.PL.
376 case " $static_ext " in
377         *" Encode "*) # Add the subextensions of Encode
378         cd "$rsrc/ext"
379         for xxx in `ls Encode/*/Makefile.PL|awk -F/ '{print $2}'`; do
380                 static_ext="$static_ext Encode/$xxx"
381         done
382         cd "$tdir"
383         ;;
384 esac
385
386 set X $dynamic_ext $static_ext $nonxs_ext
387 shift
388 extensions="$*"
389