summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens-Uwe Mager <jum@helios.de>2001-02-21 22:32:04 +0100
committerJarkko Hietaniemi <jhi@iki.fi>2001-03-13 23:12:24 +0000
commit30def704cafa11862a4b1be8a6e882e725a22b02 (patch)
treea20731d02087d18ecebabac2ceced170a0ef77bf
parentac4d53d5579163b3f737e966d72cf1cc106c705d (diff)
downloadperl-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.xs25
-rw-r--r--hints/aix.sh35
-rw-r--r--makedef.pl10
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;