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 ?RCS: $Log: dlsrc.U,v $
10 ?X: hpux support thanks to Jeff Okamoto <okamoto@hpcc101.corp.hp.com>
12 ?X: To create a shared library, you must compile ALL source files in the
13 ?X: library with +z (or possibly +Z if the library is whopping huge),
14 ?X: then link the library with -b. Example:
15 ?X: cc -c +z module_a.c
16 ?X: cc -c +z module_b.c
17 ?X: ld -b module_a.o module_b.o -o module.sl
19 ?MAKE:usedl ld dlsrc cccdlflags lddlflags ccdlflags bin_ELF ld_can_script: \
20 rm_try Getfile Myread test osname sed d_dlopen Findhdr Setvar \
21 src run cc ccflags ldflags optimize ls gccversion cat rsrc i_stdlib \
22 i_unistd osvers sysroot
23 ?MAKE: -pick add $@ %<
26 ?S: This variable indicates if the system supports dynamic
27 ?S: loading of some sort. See also dlsrc and dlobj.
30 ?S: This variable indicates the program to be used to link
31 ?S: libraries for dynamic loading. On some systems, it is 'ld'.
32 ?S: On ELF systems, it should be $cc. Mostly, we'll try to respect
33 ?S: the hint file setting.
36 ?S: This variable contains the name of the dynamic loading file that
37 ?S: will be used with the package.
40 ?S: This variable contains any special flags that might need to be
41 ?S: passed with 'cc -c' to compile modules to be used to create a shared
42 ?S: library that will be used for dynamic loading. For hpux, this
43 ?S: should be +z. It is up to the makefile to use it.
46 ?S: This variable contains any special flags that might need to be
47 ?S: passed to $ld to create a shared library suitable for dynamic
48 ?S: loading. It is up to the makefile to use it. For hpux, it
49 ?S: should be '-b'. For sunos 4.1, it is empty.
52 ?S: This variable contains any special flags that might need to be
53 ?S: passed to cc to link with a shared library for dynamic loading.
54 ?S: It is up to the makefile to use it. For sunos 4.1, it should
58 ?S: This variable saves the result from configure if generated binaries
59 ?S: are in ELF format. Only set to defined when the test has actually
60 ?S: been performed, and the result was positive.
63 ?S: This variable shows if the loader accepts scripts in the form of
64 ?S: -Wl,--version-script=ld.script. This is currently only supported
65 ?S: for GNU ld on ELF in dynamic loading builds.
67 ?C:USE_DYNAMIC_LOADING ~ %<:
68 ?C: This symbol, if defined, indicates that dynamic loading of
69 ?C: some sort is available.
71 ?H:?%<:#$usedl USE_DYNAMIC_LOADING /**/
74 ?T:dldir thisflag tdir
76 : determine which dynamic loading, if any, to compile in
78 dldir="ext/DynaLoader"
93 : Does a dl_xxx.xs file exist for this operating system
94 $test -f $rsrc/$dldir/dl_${osname}.xs && dflt='y'
97 rp="Do you wish to use dynamic loading?"
104 '') if $test -f $rsrc/$dldir/dl_${osname}.xs ; then
105 dflt="$dldir/dl_${osname}.xs"
106 elif $test "$d_dlopen" = "$define" ; then
107 dflt="$dldir/dl_dlopen.xs"
112 *) dflt="$dldir/$dlsrc"
115 echo "The following dynamic loading files are available:"
116 : Can not go over to $dldir because getfile has path hard-coded in.
117 tdir=`pwd`; cd "$rsrc"; $ls -C $dldir/dl*.xs; cd "$tdir"
118 rp="Source file to use for dynamic loading"
124 dlsrc=`echo $ans | $sed -e 's%.*/\([^/]*\)$%\1%'`
128 Some systems may require passing special flags to $cc -c to
129 compile modules that will be used to create a shared library.
130 To use no flags, say "none".
133 case "$cccdlflags" in
134 '') case "$gccversion" in
135 '') case "$osname" in
137 irix*) dflt='-KPIC' ;;
138 svr4*|esix*|solaris|nonstopux) dflt='-KPIC' ;;
139 sunos) dflt='-pic' ;;
144 darwin) dflt='none' ;;
145 *linux*|svr4*|esix*|solaris|nonstopux) dflt='-fPIC' ;;
150 *) dflt="$cccdlflags" ;;
157 # If -Dsysroot was specified, now's the time to add it
159 if test "X$sysroot" != X; then
160 case "$gccversion" in
165 dflt="$dflt --sysroot=$sysroot" ;;
175 rp="Any special flags to pass to $cc -c to compile shared library modules?"
178 ?X: Use ' ' so that a subsequent Configure run preserves the old state.
179 none) cccdlflags=' ' ;;
180 *) cccdlflags="$ans" ;;
185 Some systems use ld to create libraries that can be dynamically loaded,
186 while other systems (such as those using ELF) use $cc.
190 : Determine if this is ELF
192 /* Test for whether ELF binaries are produced */
204 int i = open("a.out",O_RDONLY);
207 if(read(i,b,4)==4 && b[0]==127 && b[1]=='E' && b[2]=='L' && b[3]=='F')
208 exit(0); /* succeed (yes, it is ELF) */
212 if $cc $ccflags $ldflags -o a.out try.c >/dev/null 2>&1 && $run ./a.out; then
218 '') if $test $bin_ELF = "$define"; then
220 You appear to have ELF support. I'll use $cc to build dynamic libraries.
224 echo "I'll use ld to build dynamic libraries."
232 rp="What command should be used to create dynamic libraries?"
238 Some systems may require passing special flags to $ld to create a
239 library that can be dynamically loaded. If your ld flags include
240 -L/other/path options to locate libraries outside your loader's normal
241 search path, you may need to specify those -L options here as well. To
242 use no flags, say "none".
246 '') case "$osname" in
247 haiku) dflt='-shared' ;;
249 case "$gccversion" in
250 '') dflt="$dflt +vnocompatwarnings" ;;
253 *linux*|irix*|gnu*) dflt="-shared $optimize" ;;
254 solaris) # See [perl #66604].
255 # On Solaris 11, gcc -m64 on amd64
256 # appears not to understand -G. gcc versions at
257 # least as old as 3.4.3 support -shared, so just
258 # use that with Solaris 11 and later, but keep
259 # the old behavior for older Solaris versions.
260 case "$gccversion" in
263 2.?|2.10) dflt='-G' ;;
269 sunos) dflt='-assert nodefinitions' ;;
270 svr4*|esix*|nonstopux) dflt="-G $ldflags" ;;
274 *) dflt="$lddlflags" ;;
277 : Only do this for gcc, since, for example, qcc has no concept
279 if $test "X$sysroot" != X; then
280 case "$gccversion" in
282 *) dflt="$dflt --sysroot $sysroot" ;;
286 : Try to guess additional flags to pick up local libraries.
287 : Be careful not to append to a plain 'none'
291 for thisflag in $ldflags; do
296 *) dflt="$dflt $thisflag" ;;
303 ''|' ') dflt='none' ;;
307 *-fstack-protector-strong*)
309 *-fstack-protector-strong*) ;; # Don't add it again
310 *) dflt="$dflt -fstack-protector-strong" ;;
315 *-fstack-protector*) ;; # Don't add it again
316 *) dflt="$dflt -fstack-protector" ;;
321 rp="Any special flags to pass to $ld to create a dynamically loaded library?"
324 ?X: Use ' ' so that a subsequent Configure run preserves the old state.
325 none) lddlflags=' ' ;;
326 *) lddlflags="$ans" ;;
331 Some systems may require passing special flags to $cc to indicate that
332 the resulting executable will use dynamic linking. To use no flags,
337 '') case "$osname" in
338 *linux*|hpux|gnu*) dflt='-Wl,-E' ;;
339 sunos) dflt='none' ;;
343 *) dflt="$ccdlflags" ;;
345 rp="Any special flags to pass to $cc to use dynamic linking?"
348 ?X: Use ' ' so that a subsequent Configure run preserves the old state.
349 none) ccdlflags=' ' ;;
350 *) ccdlflags="$ans" ;;
353 ?X: End of usedl=y section
363 ld_can_script="$undef"
364 case "$bin_ELF$usedl" in
366 # Abuse try.h and a.out names for neat cleanup
378 if $cc $cccdlflags $ccdlflags $ccflags \
379 $ldflags $lddlflags -o a.out try.c \
380 -Wl,--version-script=try.h >/dev/null 2>&1 \
381 && $test -s a.out ; then
382 echo "ld supports scripting" >&4
383 ld_can_script="$define"
385 echo "ld does not support scripting" >&4