mirror of
https://github.com/nginx/nginx.git
synced 2024-12-20 06:03:31 -06:00
Dynamic modules: dlopen() support.
This commit is contained in:
parent
0f67d6355c
commit
86cc342a26
@ -32,7 +32,6 @@ if [ $OPENSSL != NONE ]; then
|
|||||||
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
|
CORE_DEPS="$CORE_DEPS $OPENSSL/.openssl/include/openssl/ssl.h"
|
||||||
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
|
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libssl.a"
|
||||||
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
|
CORE_LIBS="$CORE_LIBS $OPENSSL/.openssl/lib/libcrypto.a"
|
||||||
CORE_LIBS="$CORE_LIBS $NGX_LIBDL"
|
|
||||||
|
|
||||||
if [ "$NGX_PLATFORM" = win32 ]; then
|
if [ "$NGX_PLATFORM" = win32 ]; then
|
||||||
CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32"
|
CORE_LIBS="$CORE_LIBS -lgdi32 -lcrypt32 -lws2_32"
|
||||||
@ -106,7 +105,7 @@ else
|
|||||||
if [ $ngx_found = yes ]; then
|
if [ $ngx_found = yes ]; then
|
||||||
have=NGX_SSL . auto/have
|
have=NGX_SSL . auto/have
|
||||||
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
||||||
CORE_LIBS="$CORE_LIBS $ngx_feature_libs $NGX_LIBDL"
|
CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
|
||||||
OPENSSL=YES
|
OPENSSL=YES
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -152,6 +152,7 @@ UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \
|
|||||||
src/os/unix/ngx_socket.h \
|
src/os/unix/ngx_socket.h \
|
||||||
src/os/unix/ngx_os.h \
|
src/os/unix/ngx_os.h \
|
||||||
src/os/unix/ngx_user.h \
|
src/os/unix/ngx_user.h \
|
||||||
|
src/os/unix/ngx_dlopen.h \
|
||||||
src/os/unix/ngx_process_cycle.h"
|
src/os/unix/ngx_process_cycle.h"
|
||||||
|
|
||||||
# add to UNIX_DEPS
|
# add to UNIX_DEPS
|
||||||
@ -183,6 +184,7 @@ UNIX_SRCS="$CORE_SRCS $EVENT_SRCS \
|
|||||||
src/os/unix/ngx_setproctitle.c \
|
src/os/unix/ngx_setproctitle.c \
|
||||||
src/os/unix/ngx_posix_init.c \
|
src/os/unix/ngx_posix_init.c \
|
||||||
src/os/unix/ngx_user.c \
|
src/os/unix/ngx_user.c \
|
||||||
|
src/os/unix/ngx_dlopen.c \
|
||||||
src/os/unix/ngx_process_cycle.c"
|
src/os/unix/ngx_process_cycle.c"
|
||||||
|
|
||||||
POSIX_DEPS=src/os/unix/ngx_posix_config.h
|
POSIX_DEPS=src/os/unix/ngx_posix_config.h
|
||||||
@ -228,6 +230,7 @@ WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \
|
|||||||
src/os/win32/ngx_socket.h \
|
src/os/win32/ngx_socket.h \
|
||||||
src/os/win32/ngx_os.h \
|
src/os/win32/ngx_os.h \
|
||||||
src/os/win32/ngx_user.h \
|
src/os/win32/ngx_user.h \
|
||||||
|
src/os/win32/ngx_dlopen.h \
|
||||||
src/os/win32/ngx_process_cycle.h"
|
src/os/win32/ngx_process_cycle.h"
|
||||||
|
|
||||||
WIN32_CONFIG=src/os/win32/ngx_win32_config.h
|
WIN32_CONFIG=src/os/win32/ngx_win32_config.h
|
||||||
@ -248,6 +251,7 @@ WIN32_SRCS="$CORE_SRCS $EVENT_SRCS \
|
|||||||
src/os/win32/ngx_wsasend_chain.c \
|
src/os/win32/ngx_wsasend_chain.c \
|
||||||
src/os/win32/ngx_win32_init.c \
|
src/os/win32/ngx_win32_init.c \
|
||||||
src/os/win32/ngx_user.c \
|
src/os/win32/ngx_user.c \
|
||||||
|
src/os/win32/ngx_dlopen.c \
|
||||||
src/os/win32/ngx_event_log.c \
|
src/os/win32/ngx_event_log.c \
|
||||||
src/os/win32/ngx_process_cycle.c \
|
src/os/win32/ngx_process_cycle.c \
|
||||||
src/event/ngx_event_acceptex.c"
|
src/event/ngx_event_acceptex.c"
|
||||||
|
@ -255,7 +255,7 @@ ngx_feature_test="struct statvfs fs;
|
|||||||
|
|
||||||
|
|
||||||
ngx_feature="dlopen()"
|
ngx_feature="dlopen()"
|
||||||
ngx_feature_name=
|
ngx_feature_name="NGX_HAVE_DLOPEN"
|
||||||
ngx_feature_run=no
|
ngx_feature_run=no
|
||||||
ngx_feature_incs="#include <dlfcn.h>"
|
ngx_feature_incs="#include <dlfcn.h>"
|
||||||
ngx_feature_path=
|
ngx_feature_path=
|
||||||
@ -271,7 +271,7 @@ if [ $ngx_found != yes ]; then
|
|||||||
. auto/feature
|
. auto/feature
|
||||||
|
|
||||||
if [ $ngx_found = yes ]; then
|
if [ $ngx_found = yes ]; then
|
||||||
NGX_LIBDL="-ldl"
|
CORE_LIBS="$CORE_LIBS -ldl"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ typedef void (*ngx_connection_handler_pt)(ngx_connection_t *c);
|
|||||||
#include <ngx_shmem.h>
|
#include <ngx_shmem.h>
|
||||||
#include <ngx_process.h>
|
#include <ngx_process.h>
|
||||||
#include <ngx_user.h>
|
#include <ngx_user.h>
|
||||||
|
#include <ngx_dlopen.h>
|
||||||
#include <ngx_parse.h>
|
#include <ngx_parse.h>
|
||||||
#include <ngx_parse_time.h>
|
#include <ngx_parse_time.h>
|
||||||
#include <ngx_log.h>
|
#include <ngx_log.h>
|
||||||
|
@ -48,6 +48,8 @@
|
|||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#include <xlocale.h>
|
#include <xlocale.h>
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
|
||||||
#ifndef IOV_MAX
|
#ifndef IOV_MAX
|
||||||
#define IOV_MAX 64
|
#define IOV_MAX 64
|
||||||
|
28
src/os/unix/ngx_dlopen.c
Normal file
28
src/os/unix/ngx_dlopen.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) Maxim Dounin
|
||||||
|
* Copyright (C) Nginx, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <ngx_config.h>
|
||||||
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if (NGX_HAVE_DLOPEN)
|
||||||
|
|
||||||
|
char *
|
||||||
|
ngx_dlerror(void)
|
||||||
|
{
|
||||||
|
char *err;
|
||||||
|
|
||||||
|
err = (char *) dlerror();
|
||||||
|
|
||||||
|
if (err == NULL) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
31
src/os/unix/ngx_dlopen.h
Normal file
31
src/os/unix/ngx_dlopen.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) Maxim Dounin
|
||||||
|
* Copyright (C) Nginx, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _NGX_DLOPEN_H_INCLUDED_
|
||||||
|
#define _NGX_DLOPEN_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
|
#include <ngx_config.h>
|
||||||
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define ngx_dlopen(path) dlopen((char *) path, RTLD_NOW | RTLD_GLOBAL)
|
||||||
|
#define ngx_dlopen_n "dlopen()"
|
||||||
|
|
||||||
|
#define ngx_dlsym(handle, symbol) dlsym(handle, symbol)
|
||||||
|
#define ngx_dlsym_n "dlsym()"
|
||||||
|
|
||||||
|
#define ngx_dlclose(handle) dlclose(handle)
|
||||||
|
#define ngx_dlclose_n "dlclose()"
|
||||||
|
|
||||||
|
|
||||||
|
#if (NGX_HAVE_DLOPEN)
|
||||||
|
char *ngx_dlerror(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _NGX_DLOPEN_H_INCLUDED_ */
|
@ -49,6 +49,8 @@
|
|||||||
#include <osreldate.h>
|
#include <osreldate.h>
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
|
||||||
#if __FreeBSD_version < 400017
|
#if __FreeBSD_version < 400017
|
||||||
|
|
||||||
|
@ -55,6 +55,8 @@
|
|||||||
#include <crypt.h>
|
#include <crypt.h>
|
||||||
#include <sys/utsname.h> /* uname() */
|
#include <sys/utsname.h> /* uname() */
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
|
||||||
#include <ngx_auto_config.h>
|
#include <ngx_auto_config.h>
|
||||||
|
|
||||||
|
@ -108,6 +108,11 @@
|
|||||||
#include <ngx_auto_config.h>
|
#include <ngx_auto_config.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if (NGX_HAVE_DLOPEN)
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if (NGX_HAVE_POSIX_SEM)
|
#if (NGX_HAVE_POSIX_SEM)
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -55,6 +55,8 @@
|
|||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
#include <crypt.h>
|
#include <crypt.h>
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
#define NGX_ALIGNMENT _MAX_ALIGNMENT
|
#define NGX_ALIGNMENT _MAX_ALIGNMENT
|
||||||
|
|
||||||
#include <ngx_auto_config.h>
|
#include <ngx_auto_config.h>
|
||||||
|
22
src/os/win32/ngx_dlopen.c
Normal file
22
src/os/win32/ngx_dlopen.c
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) Maxim Dounin
|
||||||
|
* Copyright (C) Nginx, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <ngx_config.h>
|
||||||
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
|
char *
|
||||||
|
ngx_dlerror(void)
|
||||||
|
{
|
||||||
|
u_char *p;
|
||||||
|
static u_char errstr[NGX_MAX_ERROR_STR];
|
||||||
|
|
||||||
|
p = ngx_strerror(ngx_errno, errstr, NGX_MAX_ERROR_STR);
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
return (char *) errstr;
|
||||||
|
}
|
32
src/os/win32/ngx_dlopen.h
Normal file
32
src/os/win32/ngx_dlopen.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (C) Maxim Dounin
|
||||||
|
* Copyright (C) Nginx, Inc.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _NGX_DLOPEN_H_INCLUDED_
|
||||||
|
#define _NGX_DLOPEN_H_INCLUDED_
|
||||||
|
|
||||||
|
|
||||||
|
#include <ngx_config.h>
|
||||||
|
#include <ngx_core.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define NGX_HAVE_DLOPEN 1
|
||||||
|
|
||||||
|
|
||||||
|
#define ngx_dlopen(path) LoadLibrary((char *) path)
|
||||||
|
#define ngx_dlopen_n "LoadLibrary()"
|
||||||
|
|
||||||
|
#define ngx_dlsym(handle, symbol) (void *) GetProcAddress(handle, symbol)
|
||||||
|
#define ngx_dlsym_n "GetProcAddress()"
|
||||||
|
|
||||||
|
#define ngx_dlclose(handle) (FreeLibrary(handle) ? 0 : -1)
|
||||||
|
#define ngx_dlclose_n "FreeLibrary()"
|
||||||
|
|
||||||
|
|
||||||
|
char *ngx_dlerror(void);
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _NGX_DLOPEN_H_INCLUDED_ */
|
Loading…
Reference in New Issue
Block a user