1 ?RCS: $Id: libperl.U,v $
3 ?RCS: Copyright (c) 1996-1998, Andy Dougherty
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.
8 ?MAKE:libperl useshrplib shrpenv ldlibpthname: \
9 Myread Oldconfig archlibexp awk cat libc \
10 _a osname osvers so patchlevel subversion usedl ld \
11 ccdlflags installarchlib userelocatableinc
12 ?MAKE: -pick wipe $@ %<
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
22 ?S: This variable is set to 'true' if the user wishes
23 ?S: to build a shared libperl, and 'false' otherwise.
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"
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
38 ?S: as -R $archlibexp/CORE (Solaris) or -Wl,-rpath
39 ?S: $archlibexp/CORE (Linux).
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'.
46 ?T:shrpdir majonly majmin also xxx tmp_shrpenv
47 ?X: metalint gets confused and thinks we're actually setting LDOPTS
51 ?LINT:extern LD_RUN_PATH
52 ?LINT:change LD_RUN_PATH
53 ?LINT:change ccdlflags
54 ?LINT:extern maintloc maintname
56 : Do we want a shared libperl?
60 # No dynamic loading being used, so don't bother even to prompt.
63 *) case "$useshrplib" in
65 svr4*|nonstopux|dgux|dynixptx|esix|powerux|beos|haiku|cygwin*)
67 also='Building a shared libperl is required for dynamic loading to work on your system.'
72 also='Building a shared libperl is needed for MAB support.'
90 The perl executable is normally obtained by linking perlmain.c with
91 libperl${_a}, any static extensions (usually just DynaLoader), and
92 any other libraries needed on this system (such as -lm, etc.). Since
93 your system supports dynamic loading, it is probably possible to build
94 a shared libperl.$so. If you will have more than one executable linked
95 to libperl.$so, this will significantly reduce the size of each
96 executable, but it may have a noticeable effect on performance. The
97 default is probably sensible for your system.
101 rp="Build a shared libperl.$so (y/n)"
106 *) useshrplib='false' ;;
111 case "$useshrplib" in
113 case "$userelocatableinc" in
115 echo "Cannot build with both -Duserelocatableinc and -Duseshrplib" >&4
116 echo "See INSTALL for an explanation why that won't work." >&4
122 # Figure out a good name for libperl.so. Since it gets stored in
123 # a version-specific architecture-dependent library, the version
124 # number isn't really that important, except for making cc/ld happy.
126 # A name such as libperl.so.10.1
127 majmin="libperl.$so.$patchlevel.$subversion"
128 # A name such as libperl.so.100
129 majonly=`echo $patchlevel $subversion |
130 $awk '{printf "%d%02d", $1, $2}'`
131 majonly=libperl.$so.$majonly
132 # I'd prefer to keep the os-specific stuff here to a minimum, and
133 # rely on figuring it out from the naming of libc.
134 case "${osname}${osvers}" in
137 # XXX How handle the --version stuff for MAB?
139 linux*|gnu*) # ld won't link with a bare -lperl otherwise.
142 cygwin*) # ld links now against the dll directly
143 majmin="cygperl5_${patchlevel}_${subversion}.${so}"
144 majonly=`echo $patchlevel $subversion |
145 $awk '{printf "%03d%03d", $1, $2}'`
146 majonly=cygperl5.$majonly.$so
149 *) # Try to guess based on whether libc has major.minor.
151 *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
152 *libc.$so.[0-9]*) dflt=$majonly ;;
153 *) dflt=libperl.$so ;;
163 I need to select a good name for the shared libperl. If your system uses
164 library names with major and minor numbers, then you might want something
165 like $majmin. Alternatively, if your system uses a single version
166 number for shared libraries, then you might want to use $majonly.
167 Or, your system might be quite happy with a simple libperl.$so.
169 Since the shared libperl will get installed into a version-specific
170 architecture-dependent directory, the version number of the shared perl
171 library probably isn't important, so the default should be o.k.
174 rp='What name do you want to give to the shared libperl?'
177 echo "Ok, I'll use $libperl"
180 libperl="libperl${_a}"
184 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
188 WARNING: Use of the shrpdir variable for the installation location of
189 the shared $libperl is not supported. It was never documented and
190 will not work in this version. Let me (<$maintloc>)
191 know of any problems this may cause.
197 But your current setting of $shrpdir is
198 the default anyway, so it's harmless.
203 Further, your current attempted setting of $shrpdir
204 conflicts with the value of $archlibexp/CORE
205 that installperl will use.
212 # How will the perl executable find the installed shared $libperl?
213 # Add $xxx to ccdlflags.
214 # If we can't figure out a command-line option, use $shrpenv to
215 # set env LD_RUN_PATH. The main perl makefile uses this.
216 shrpdir=$archlibexp/CORE
219 if "$useshrplib"; then
222 # We'll set it in Makefile.SH...
227 freebsd|netbsd|openbsd|interix|dragonfly)
230 bsdos|linux|irix*|dec_osf|gnu*)
231 xxx="-Wl,-rpath,$shrpdir"
234 # next doesn't like the default...
237 # beos doesn't like the default, either.
240 # Haiku doesn't like the default, either.
243 # hpux doesn't like the default, either.
244 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
247 # cygwin needs only ldlibpth
250 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
256 # Only add $xxx if it isn't already in ccdlflags.
257 case " $ccdlflags " in
259 *) ccdlflags="$ccdlflags $xxx"
262 Adding $xxx to the flags
263 passed to $ld so that the perl executable will find the
264 installed shared $libperl.
272 # Fix ccdlflags in AIX for building external extensions.
273 # (For building Perl itself bare -bE:perl.exp is needed,
274 # Makefile.SH takes care of this.)
276 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
278 # Respect a hint or command-line value.
280 '') shrpenv="$tmp_shrpenv" ;;
282 case "$ldlibpthname" in
283 '') ldlibpthname=LD_LIBRARY_PATH ;;
284 none) ldlibpthname='' ;;