This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
e38ce234d375c20237aca957bec9374fbff92000
[metaconfig.git] / U / perl / libperl.U
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 \
11         ccdlflags installarchlib userelocatableinc
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:
22 ?S:     This variable is set to 'true' if the user wishes
23 ?S:     to build a shared libperl, and 'false' otherwise.
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
38 ?S:     as -R $archlibexp/CORE (Solaris) or -Wl,-rpath
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
56 : Do we want a shared libperl?
57 also=''
58 case "$usedl" in
59 $undef)
60         # No dynamic loading being used, so don't bother even to prompt.
61         useshrplib='false'
62         ;;
63 *)      case "$useshrplib" in
64         '')     case "$osname" in
65                 svr4*|nonstopux|dgux|dynixptx|esix|powerux|haiku|cygwin*)
66                         dflt=y
67                         also='Building a shared libperl is required for dynamic loading to work on your system.'
68                         ;;
69                 next*)
70                         case "$osvers" in
71                         4*)     dflt=y
72                                 also='Building a shared libperl is needed for MAB support.'
73                                 ;;
74                         *)      dflt=n
75                                 ;;
76                         esac
77                         ;;
78                 *)      dflt=n
79                         ;;
80                 esac
81                 ;;
82         $define|true|[Yy]*)
83                 dflt=y
84                 ;;
85         *)      dflt=n
86                 ;;
87         esac
88         $cat << EOM
89
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.
98 $also
99
100 EOM
101         rp="Build a shared libperl.$so (y/n)"
102         . ./myread
103         case "$ans" in
104         true|$define|[Yy]*)
105                 useshrplib='true'  ;;
106         *)      useshrplib='false' ;;
107         esac
108         ;;
109 esac
110
111 case "$useshrplib" in
112 true)
113         case "$userelocatableinc" in
114         true|define)
115                 echo "Cannot build with both -Duserelocatableinc and -Duseshrplib" >&4
116                 echo "See INSTALL for an explanation why that won't work." >&4
117                 exit 4
118                 ;;
119         esac
120         case "$libperl" in
121         '')
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.
125                 #
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
135                 next4*)
136                         dflt=libperl.5.$so
137                         # XXX How handle the --version stuff for MAB?
138                         ;;
139                 linux*|gnu*)  # ld won't link with a bare -lperl otherwise.
140                         dflt=libperl.$so
141                         ;;
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
147                         dflt=$majmin
148                         ;;
149                 *)      # Try to guess based on whether libc has major.minor.
150                         case "$libc" in
151                         *libc.$so.[0-9]*.[0-9]*) dflt=$majmin ;;
152                         *libc.$so.[0-9]*) dflt=$majonly ;;
153                         *)      dflt=libperl.$so ;;
154                         esac
155                         ;;
156                 esac
157                 ;;
158         *)      dflt=$libperl
159                 ;;
160         esac
161         cat << EOM
162
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.
168
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.
172
173 EOM
174         rp='What name do you want to give to the shared libperl?'
175         . ./myread
176         libperl=$ans
177         echo "Ok, I'll use $libperl"
178         ;;
179 *)
180         libperl="libperl${_a}"
181         ;;
182 esac
183
184 # Detect old use of shrpdir via undocumented Configure -Dshrpdir
185 case "$shrpdir" in
186 '') ;;
187 *)      $cat >&4 <<EOM
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.
192
193 EOM
194         case "$shrpdir" in
195         "$archlibexp/CORE")
196                 $cat >&4 <<EOM
197 But your current setting of $shrpdir is
198 the default anyway, so it's harmless.
199 EOM
200                 ;;
201         *)
202                 $cat >&4 <<EOM
203 Further, your current attempted setting of $shrpdir
204 conflicts with the value of $archlibexp/CORE
205 that installperl will use.
206 EOM
207                 ;;
208         esac
209         ;;
210 esac
211
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
217 xxx=''
218 tmp_shrpenv=''
219 if "$useshrplib"; then
220     case "$osname" in
221         aix)
222                 # We'll set it in Makefile.SH...
223                 ;;
224         solaris)
225                 xxx="-R $shrpdir"
226                 ;;
227         freebsd|mirbsd|netbsd|openbsd|interix|dragonfly)
228                 xxx="-Wl,-R$shrpdir"
229                 ;;
230         bsdos|linux|irix*|dec_osf|gnu*)
231                 xxx="-Wl,-rpath,$shrpdir"
232                 ;;
233         next)
234                 # next doesn't like the default...
235                 ;;
236         haiku)
237                 # Haiku doesn't like the default, either.
238                 ;;
239         hpux*)
240                 # hpux doesn't like the default, either.
241                 tmp_shrpenv="env LDOPTS=\"+s +b${shrpdir}\""
242                 ;;
243         cygwin)
244                 # cygwin needs only ldlibpth
245                 ;;
246         *)
247                 tmp_shrpenv="env LD_RUN_PATH=$shrpdir"
248                 ;;
249         esac
250         case "$xxx" in
251         '') ;;
252         *)
253                 # Only add $xxx if it isn't already in ccdlflags.
254                 case " $ccdlflags " in
255                 *" $xxx "*)     ;;
256                 *)      ccdlflags="$ccdlflags $xxx"
257                         cat <<EOM >&4
258
259 Adding $xxx to the flags
260 passed to $ld so that the perl executable will find the
261 installed shared $libperl.
262
263 EOM
264                         ;;
265                 esac
266                 ;;
267         esac
268 fi
269 # Fix ccdlflags in AIX for building external extensions.
270 # (For building Perl itself bare -bE:perl.exp is needed,
271 #  Makefile.SH takes care of this.)
272 case "$osname" in
273 aix) ccdlflags="$ccdlflags -bE:$installarchlib/CORE/perl.exp" ;;
274 esac
275 # Respect a hint or command-line value.
276 case "$shrpenv" in
277 '') shrpenv="$tmp_shrpenv" ;;
278 esac
279 case "$ldlibpthname" in
280 '')     ldlibpthname=LD_LIBRARY_PATH ;;
281 none)   ldlibpthname='' ;;
282 esac
283