Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ae311bd

Browse files
committed
Mods for HP-UX dynamic loading.
1 parent 73b20df commit ae311bd

1 file changed

Lines changed: 42 additions & 1 deletion

File tree

Python/import.c

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,23 @@ extern long getmtime(); /* In getmtime.c */
6262
WITH_MAC_DL -- Mac dynamic linking (highly experimental)
6363
SHORT_EXT -- short extension for dynamic module, e.g. ".so"
6464
LONG_EXT -- long extension, e.g. "module.so"
65+
hpux -- HP-UX Dynamic Linking - defined by the compiler
6566
6667
(The other WITH_* symbols are used only once, to set the
6768
appropriate symbols.)
6869
*/
6970

7071
/* Configure dynamic linking */
7172

73+
#ifdef hpux
74+
#define DYNAMIC_LINK
75+
#include <errno.h>
76+
typedef void (*dl_funcptr)();
77+
#define _DL_FUNCPTR_DEFINED 1
78+
#define SHORT_EXT ".sl"
79+
#define LONG_EXT "module.sl"
80+
#endif
81+
7282
#ifdef NT
7383
#define DYNAMIC_LINK
7484
#include <windows.h>
@@ -124,7 +134,7 @@ typedef void (*dl_funcptr)();
124134
#define LONG_EXT "module.so"
125135
#endif /* USE_SHLIB */
126136

127-
#ifdef USE_DL
137+
#if defined(USE_DL) || defined(hpux)
128138
#include "dl.h"
129139
#endif
130140

@@ -143,8 +153,12 @@ typedef void (*dl_funcptr)();
143153
extern char *getprogramname();
144154

145155
#ifndef FUNCNAME_PATTERN
156+
#if defined(__hp9000s300)
157+
#define FUNCNAME_PATTERN "_init%s"
158+
#else
146159
#define FUNCNAME_PATTERN "init%s"
147160
#endif
161+
#endif
148162

149163
#if !defined(SHORT_EXT) && !defined(LONG_EXT)
150164
#define SHORT_EXT ".o"
@@ -316,7 +330,34 @@ load_dynamic_module(name, namebuf, m, m_ret)
316330
return NULL;
317331
}
318332
#endif /* USE_RLD */
333+
#ifdef hpux
334+
{
335+
shl_t lib;
336+
int flags;
319337

338+
flags = BIND_DEFERRED;
339+
if (verbose)
340+
{
341+
flags = BIND_IMMEDIATE | BIND_NONFATAL | BIND_VERBOSE;
342+
printf("shl_load %s\n",namebuf);
343+
}
344+
lib = shl_load(namebuf, flags, 0);
345+
if (lib == NULL)
346+
{
347+
char buf[256];
348+
if (verbose)
349+
perror(namebuf);
350+
sprintf(buf,"Failed to load %s", namebuf);
351+
err_setstr(ImportError, buf);
352+
return NULL;
353+
}
354+
if (verbose)
355+
printf("shl_findsym %s\n", funcname);
356+
shl_findsym(&lib, funcname, TYPE_UNDEFINED, (void *) &p);
357+
if (p == NULL && verbose)
358+
perror(funcname);
359+
}
360+
#endif hpux
320361
if (p == NULL) {
321362
err_setstr(ImportError,
322363
"dynamic module does not define init function");

0 commit comments

Comments
 (0)