@@ -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)();
143153extern 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