diff options
author | Jens-Uwe Mager <jum@helios.de> | 2001-02-21 22:32:04 +0100 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-03-13 23:12:24 +0000 |
commit | 30def704cafa11862a4b1be8a6e882e725a22b02 (patch) | |
tree | a20731d02087d18ecebabac2ceced170a0ef77bf | |
parent | ac4d53d5579163b3f737e966d72cf1cc106c705d (diff) | |
download | perl-30def704cafa11862a4b1be8a6e882e725a22b02.tar.gz |
(Retracted by #9155)
Subject: Re: [gsar@ActiveState.com: v5.6.1 trial2 is available]
Message-ID: <20010221213203.A18340@ans.helios.de>
p4raw-id: //depot/perl@9136
-rw-r--r-- | ext/DynaLoader/dl_aix.xs | 25 | ||||
-rw-r--r-- | hints/aix.sh | 35 | ||||
-rw-r--r-- | makedef.pl | 10 |
3 files changed, 54 insertions, 16 deletions
diff --git a/ext/DynaLoader/dl_aix.xs b/ext/DynaLoader/dl_aix.xs index b2c92d8070..95c8b1c838 100644 --- a/ext/DynaLoader/dl_aix.xs +++ b/ext/DynaLoader/dl_aix.xs @@ -14,6 +14,21 @@ #define PERLIO_NOT_STDIO 0 /* + * On AIX 4.3 and above the emulation layer is not needed any more, and + * indeed if perl uses its emulation and perl is linked into apache + * which is supposed to use the native dlopen conflicts arise. + * Jens-Uwe Mager jum@helios.de + */ +#ifdef USE_NATIVE_DLOPEN + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include <dlfcn.h> + +#else + +/* * @(#)dlfcn.c 1.5 revision of 93/02/14 20:14:17 * This is an unpublished work copyright (c) 1992 Helios Software GmbH * 3000 Hannover 1, Germany @@ -89,6 +104,13 @@ # define FREAD(p,s,n,ldptr) fread(p,s,n,IOPTR(ldptr)) #endif +#ifndef RTLD_LAZY +# define RTLD_LAZY 0 +#endif +#ifndef RTLD_GLOBAL +# define RTLD_GLOBAL 0 +#endif + /* * We simulate dlopen() et al. through a call to load. Because AIX has * no call to find an exported symbol we read the loader section of the @@ -627,6 +649,7 @@ static void * findMain(void) safefree(buf); return ret; } +#endif /* USE_NATIVE_DLOPEN */ /* dl_dlopen.xs * @@ -672,7 +695,7 @@ dl_load_file(filename, flags=0) DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_load_file(%s,%x):\n", filename,flags)); if (flags & 0x01) Perl_warn(aTHX_ "Can't make loaded symbols global on this platform while loading %s",filename); - RETVAL = dlopen(filename, 1) ; + RETVAL = dlopen(filename, RTLD_GLOBAL|RTLD_LAZY) ; DLDEBUG(2,PerlIO_printf(Perl_debug_log, " libref=%x\n", RETVAL)); ST(0) = sv_newmortal() ; if (RETVAL == NULL) diff --git a/hints/aix.sh b/hints/aix.sh index 31d189f5d9..406c44275d 100644 --- a/hints/aix.sh +++ b/hints/aix.sh @@ -55,9 +55,11 @@ esac case "$osvers" in 3.*|4.1.*|4.2.*) usenm='undef' + usenativedlopen='false' ;; *) usenm='true' + usenativedlopen='true' ;; esac @@ -429,20 +431,25 @@ $define|true|[yY]*) esac EOCBU -# If the C++ libraries, libC and libC_r, are available we will prefer them -# over the vanilla libc, because the libC contain loadAndInit() and -# terminateAndUnload() which work correctly with C++ statics while libc -# load() and unload() do not. See ext/DynaLoader/dl_aix.xs. -# The C-to-C_r switch is done by usethreads.cbu, if needed. -if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then - # Cify libswanted. - set `echo X "$libswanted "| sed -e 's/ c / C c /'` - shift - libswanted="$*" - # Cify lddlflags. - set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'` - shift - lddlflags="$*" +if test $usenativedlopen = 'true' +then + ccflags="$ccflags -DUSE_NATIVE_DLOPEN" +else + # If the C++ libraries, libC and libC_r, are available we will prefer them + # over the vanilla libc, because the libC contain loadAndInit() and + # terminateAndUnload() which work correctly with C++ statics while libc + # load() and unload() do not. See ext/DynaLoader/dl_aix.xs. + # The C-to-C_r switch is done by usethreads.cbu, if needed. + if test -f /lib/libC.a -a X"`$cc -v 2>&1 | grep gcc`" = X; then + # Cify libswanted. + set `echo X "$libswanted "| sed -e 's/ c / C c /'` + shift + libswanted="$*" + # Cify lddlflags. + set `echo X "$lddlflags "| sed -e 's/ -lc / -lC -lc /'` + shift + lddlflags="$*" + fi fi # EOF diff --git a/makedef.pl b/makedef.pl index f165a90b86..ed882aeaf0 100644 --- a/makedef.pl +++ b/makedef.pl @@ -161,7 +161,15 @@ EXPORTS ---EOP--- } elsif ($PLATFORM eq 'aix') { - print "#!\n"; + $OSVER = `uname -v`; + chop $OSVER; + $OSREL = `uname -r`; + chop $OSREL; + if ($OSVER > 4 || ($OSVER == 4 && $OSREL >= 3)) { + print "#! .\n"; + } else { + print "#!\n"; + } } my %skip; |