This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #33892] Add Interix support
[metaconfig.git] / U / perl / libperl.U
CommitLineData
959f3c4c
JH
1?RCS: $Id: libperl.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?MAKE:libperl useshrplib shrpenv ldlibpthname: \
9 Myread Oldconfig archlibexp awk cat libc \
10 _a osname osvers so patchlevel subversion usedl ld \
962b21ca 11 lib_ext ccdlflags installarchlib
959f3c4c
JH
12?MAKE: -pick wipe $@ %<
13?S:libperl:
14?S: The perl executable is obtained by linking perlmain.c with
15?S: libperl, any static extensions (usually just DynaLoader),
16?S: and any other libraries needed on this system. libperl
17?S: is usually libperl.a, but can also be libperl.so.xxx if
18?S: the user wishes to build a perl executable with a shared
19?S: library.
20?S:.
21?S:useshrplib:
472f992b
MB
22?S: This variable is set to 'true' if the user wishes
23?S: to build a shared libperl, and 'false' otherwise.
959f3c4c
JH
24?S:.
25?S:shrpenv:
26?S: If the user builds a shared libperl.so, then we need to tell the
27?S: 'perl' executable where it will be able to find the installed libperl.so.
28?S: One way to do this on some systems is to set the environment variable
29?S: LD_RUN_PATH to the directory that will be the final location of the
30?S: shared libperl.so. The makefile can use this with something like
31?S: $shrpenv $(CC) -o perl perlmain.o $libperl $libs
32?S: Typical values are
33?S: shrpenv="env LD_RUN_PATH=$archlibexp/CORE"
34?S: or
35?S: shrpenv=''
36?S: See the main perl Makefile.SH for actual working usage.
37?S: Alternatively, we might be able to use a command line option such
4d5de5cd 38?S: as -R $archlibexp/CORE (Solaris) or -Wl,-rpath
959f3c4c
JH
39?S: $archlibexp/CORE (Linux).
40?S:.
41?S:ldlibpthname:
42?S: This variable holds the name of the shared library
43?S: search path, often LD_LIBRARY_PATH. To get an empty
44?S: string, the hints file must set this to 'none'.
45?S:.
46?T:shrpdir majonly majmin also xxx tmp_shrpenv
47?X: metalint gets confused and thinks we're actually setting LDOPTS
48?X: and LD_RUN_PATH.
49?LINT:extern LDOPTS
50?LINT:change LDOPTS
51?LINT:extern LD_RUN_PATH
52?LINT:change LD_RUN_PATH
53?LINT:change ccdlflags
54?LINT:extern maintloc maintname
55?Y:top
56also=''
57case "$usedl" in
58$undef)
59 # No dynamic loading being used, so don't bother even to prompt.
60 useshrplib='false'
61 ;;
62*) case "$useshrplib" in
63 '') case "$osname" in
5bcf820f 64 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|cygwin*)
959f3c4c
JH
65 dflt=y
66 also='Building a shared libperl is required for dynamic loading to work on your system.'
67 ;;
68 next*)
69 case "$osvers" in
70 4*) dflt=y
71 also='Building a shared libperl is needed for MAB support.'
72 ;;
73 *) dflt=n
74 ;;
75 esac
76 ;;
77 *) dflt=n
78 ;;
79 esac
80 ;;
81 $define|true|[Yy]*)
82 dflt=y
83 ;;
84 *) dflt=n
85 ;;
86 esac
87 $cat << EOM
88
89The perl executable is normally obtained by linking perlmain.c with
90libperl${_a}, any static extensions (usually just DynaLoader), and
91any other libraries needed on this system (such as -lm, etc.). Since
92your system supports dynamic loading, it is probably possible to build
93a shared libperl.$so. If you will have more than one executable linked
94to libperl.$so, this will significantly reduce the size of each
95executable, but it may have a noticeable affect on performance. The
96default is probably sensible for your system.
97$also
98
99EOM
100 rp="Build a shared libperl.$so (y/n)"
101 . ./myread
102 case "$ans" in
103 true|$define|[Yy]*)
104 useshrplib='true' ;;
105 *) useshrplib='false' ;;
106 esac
107 ;;
108esac
109
110case "$useshrplib" in
111true)
112 case "$libperl" in
113 '')
114 # Figure out a good name for libperl.so. Since it gets stored in
115 # a version-specific architecture-dependent library, the version
116 # number isn't really that important, except for making cc/ld happy.
117 #
118 # A name such as libperl.so.3.1
119 majmin="libperl.$so.$patchlevel.$subversion"
120 # A name such as libperl.so.301
121 majonly=`echo $patchlevel $subversion |
122 $awk '{printf "%d%02d", $1, $2}'`
123 majonly=libperl.$so.$majonly
124 # I'd prefer to keep the os-specific stuff here to a minimum, and
125 # rely on figuring it out from the naming of libc.
126 case "${osname}${osvers}" in
127 next4*)
128 dflt=libperl.5.$so
129 # XXX How handle the --version stuff for MAB?
130 ;;
131 linux*) # ld won't link with a bare -lperl otherwise.
132 dflt=libperl.$so
133 ;;
0ff30f53
JH
134 cygwin*) # ld links against an importlib
135 dflt=libperl$lib_ext
edd6115f 136 ;;
959f3c4c
JH
137 *) # Try to guess based on whether libc has major.minor.
138 case "$libc" in
139 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
140 *libc.$so.[0-9]*) dflt=$majonly ;;
141 *) dflt=libperl.$so ;;
142 esac
143 ;;
144 esac
145 ;;
146 *) dflt=$libperl
147 ;;
148 esac
149 cat << EOM
150
151I need to select a good name for the shared libperl. If your system uses
152library names with major and minor numbers, then you might want something
153like $majmin. Alternatively, if your system uses a single version
154number for shared libraries, then you might want to use $majonly.
155Or, your system might be quite happy with a simple libperl.$so.
156
157Since the shared libperl will get installed into a version-specific
158architecture-dependent directory, the version number of the shared perl
159library probably isn't important, so the default should be o.k.
160
161EOM
162 rp='What name do you want to give to the shared libperl?'
163 . ./myread
164 libperl=$ans
165 echo "Ok, I'll use $libperl"
166 ;;
167*)
168 libperl="libperl${_a}"
169 ;;
170esac
171
172# Detect old use of shrpdir via undocumented Configure -Dshrpdir
173case "$shrpdir" in
174'') ;;
175*) $cat >&4 <<EOM
176WARNING: Use of the shrpdir variable for the installation location of
177the shared $libperl is not supported. It was never documented and
178will not work in this version. Let me (<$maintloc>)
179know of any problems this may cause.
180
181EOM
182 case "$shrpdir" in
183 "$archlibexp/CORE")
184 $cat >&4 <<EOM
185But your current setting of $shrpdir is
186the default anyway, so it's harmless.
187EOM
188 ;;
189 *)
190 $cat >&4 <<EOM
191Further, your current attempted setting of $shrpdir
192conflicts with the value of $archlibexp/CORE
193that installperl will use.
194EOM
195 ;;
196 esac
197 ;;
198esac
199
200# How will the perl executable find the installed shared $libperl?
201# Add $xxx to ccdlflags.
202# If we can't figure out a command-line option, use $shrpenv to
203# set env LD_RUN_PATH. The main perl makefile uses this.
204shrpdir=$archlibexp/CORE
205xxx=''
206tmp_shrpenv=''
207if "$useshrplib"; then
208 case "$osname" in
209 aix)
210 # We'll set it in Makefile.SH...
211 ;;
4d5de5cd 212 solaris)
959f3c4c
JH
213 xxx="-R $shrpdir"
214 ;;
c31e1100 215 freebsd|netbsd|openbsd|interix)
959f3c4c
JH
216 xxx="-Wl,-R$shrpdir"
217 ;;
a118a67a 218 bsdos|linux|irix*|dec_osf)
959f3c4c
JH
219 xxx="-Wl,-rpath,$shrpdir"
220 ;;
221 next)
222 # next doesn't like the default...
223 ;;
224 beos)
225 # beos doesn't like the default, either.
226 ;;
227 hpux*)
228 # hpux doesn't like the default, either.
229 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
230 ;;
231 *)
232 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
233 ;;
234 esac
235 case "$xxx" in
236 '') ;;
237 *)
238 # Only add $xxx if it isn't already in ccdlflags.
239 case " $ccdlflags " in
240 *" $xxx "*) ;;
241 *) ccdlflags="$ccdlflags $xxx"
242 cat <<EOM >&4
243
244Adding $xxx to the flags
245passed to $ld so that the perl executable will find the
246installed shared $libperl.
247
248EOM
249 ;;
250 esac
251 ;;
252 esac
253fi
254# Fix ccdlflags in AIX for building external extensions.
255# (For building Perl itself bare -bE:perl.exp is needed,
256# Makefile.SH takes care of this.)
257case "$osname" in
258aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
259esac
260# Respect a hint or command-line value.
261case "$shrpenv" in
262'') shrpenv="$tmp_shrpenv" ;;
263esac
264case "$ldlibpthname" in
265'') ldlibpthname=LD_LIBRARY_PATH ;;
266none) ldlibpthname='' ;;
267esac
268