diff options
| -rw-r--r-- | src/mesa/main/dlopen.c | 99 | ||||
| -rw-r--r-- | src/mesa/main/dlopen.h | 42 | ||||
| -rw-r--r-- | src/mesa/main/sources | 2 | ||||
| -rw-r--r-- | src/mesa/main/texcompress_s3tc.c | 75 | ||||
| -rw-r--r-- | src/mesa/sources | 1 | 
5 files changed, 147 insertions, 72 deletions
| diff --git a/src/mesa/main/dlopen.c b/src/mesa/main/dlopen.c new file mode 100644 index 0000000000..becef8173e --- /dev/null +++ b/src/mesa/main/dlopen.c @@ -0,0 +1,99 @@ +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +/** + * Wrapper functions for dlopen(), dlsym(), dlclose(). + * Note that the #ifdef tests for various environments should be expanded. + */ + + +#include "glheader.h" +#include "imports.h" +#include "dlopen.h" + +#if defined(_GNU_SOURCE) && !defined(__MINGW32__) +#include <dlfcn.h> +#endif + + +/** + * Wrapper for dlopen(). + * Note that 'flags' isn't used at this time. + */ +void * +_mesa_dlopen(const char *libname, int flags) +{ +#if defined(_GNU_SOURCE) +   flags = RTLD_LAZY | RTLD_GLOBAL; /* Overriding flags at this time */ +   return dlopen(libname, flags); +#elif defined(__MINGW32__) +   return LoadLibrary(libname); +#else +   return NULL; +#endif +} + + +/** + * Wrapper for dlsym() that does a cast to a generic function type, + * rather than a void *.  This reduces the number of warnings that are + * generated. + */ +GenericFunc +_mesa_dlsym(void *handle, const char *fname) +{ +#if defined(__DJGPP__) +   /* need '_' prefix on symbol names */ +   char fname2[1000]; +   fname2[0] = '_'; +   _mesa_strncpy(fname2 + 1, fname, 998); +   fname2[999] = 0; +   return (GenericFunc) dlsym(handle, fname2); +#elif defined(_GNU_SOURCE) +   return (GenericFunc) dlsym(handle, fname); +#elif defined(__MINGW32__) +   return (GenericFunc) GetProcAddress(handle, fname); +#else +   return (GenericFunc) NULL; +#endif +} + + +/** + * Wrapper for dlclose(). + */ +void +_mesa_dlclose(void *handle) +{ +#if defined(_GNU_SOURCE) +   dlclose(handle); +#elif defined(__MINGW32__) +   FreeLibrary(handle); +#else +   (void) handle; +#endif +} + + + diff --git a/src/mesa/main/dlopen.h b/src/mesa/main/dlopen.h new file mode 100644 index 0000000000..9895a22549 --- /dev/null +++ b/src/mesa/main/dlopen.h @@ -0,0 +1,42 @@ +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2008  Brian Paul   All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef DLOPEN_H +#define DLOPEN_H + + +typedef void (*GenericFunc)(void); + + +extern void * +_mesa_dlopen(const char *libname, int flags); + +extern GenericFunc +_mesa_dlsym(void *handle, const char *fname); + +extern void +_mesa_dlclose(void *handle); + + +#endif diff --git a/src/mesa/main/sources b/src/mesa/main/sources index eb8cd900ee..1b43e7e00f 100644 --- a/src/mesa/main/sources +++ b/src/mesa/main/sources @@ -20,6 +20,7 @@ debug.c \  depth.c \  depthstencil.c \  dlist.c \ +dlopen.c \  drawpix.c \  enable.c \  enums.c \ @@ -101,6 +102,7 @@ debug.h \  depth.h \  depthstencil.h \  dlist.h \ +dlopen.h \  drawpix.h \  enable.h \  enums.h \ diff --git a/src/mesa/main/texcompress_s3tc.c b/src/mesa/main/texcompress_s3tc.c index 4f329cdf59..a19c161b2c 100644 --- a/src/mesa/main/texcompress_s3tc.c +++ b/src/mesa/main/texcompress_s3tc.c @@ -29,7 +29,7 @@   */  #ifndef USE_EXTERNAL_DXTN_LIB -#define USE_EXTERNAL_DXTN_LIB 0 +#define USE_EXTERNAL_DXTN_LIB 1  #endif  #include "glheader.h" @@ -37,15 +37,12 @@  #include "colormac.h"  #include "context.h"  #include "convolve.h" +#include "dlopen.h"  #include "image.h"  #include "texcompress.h"  #include "texformat.h"  #include "texstore.h" -#if USE_EXTERNAL_DXTN_LIB && !defined(__MINGW32__) -#include <dlfcn.h> -#endif -  #ifdef __MINGW32__  #define DXTN_LIBNAME "dxtn.dll"  #define RTLD_LAZY 0 @@ -74,72 +71,6 @@ static dxtCompressTexFuncExt ext_tx_compress_dxtn = NULL;  static void *dxtlibhandle = NULL; -typedef void (*GenericFunc)(void); - - -/** - * Wrapper for dlopen(). - * XXX Probably move this and the following wrappers into imports.h someday. - */ -static void * -_mesa_dlopen(const char *libname, int flags) -{ -#if USE_EXTERNAL_DXTN_LIB -#ifdef __MINGW32__ -   return LoadLibrary(libname); -#else -   return dlopen(libname, flags); -#endif -#else -   return NULL; -#endif /* USE_EXTERNAL_DXTN_LIB */ -} - - -/** - * Wrapper for dlsym() that does a cast to a generic function type, - * rather than a void *.  This reduces the number of warnings that are - * generated. - */ -static GenericFunc -_mesa_dlsym(void *handle, const char *fname) -{ -#if USE_EXTERNAL_DXTN_LIB -#ifdef __MINGW32__ -   return (GenericFunc) GetProcAddress(handle, fname); -#elif defined(__DJGPP__) -   /* need '_' prefix on symbol names */ -   char fname2[1000]; -   fname2[0] = '_'; -   _mesa_strncpy(fname2 + 1, fname, 998); -   fname2[999] = 0; -   return (GenericFunc) dlsym(handle, fname2); -#else -   return (GenericFunc) dlsym(handle, fname); -#endif -#else -   return (GenericFunc) NULL; -#endif /* USE_EXTERNAL_DXTN_LIB */ -} - - -/** - * Wrapper for dlclose(). - */ -static void -_mesa_dlclose(void *handle) -{ -#if USE_EXTERNAL_DXTN_LIB -#ifdef __MINGW32__ -   FreeLibrary(handle); -#else -   dlclose(handle); -#endif -#endif -} - - -  void  _mesa_init_texture_s3tc( GLcontext *ctx )  { @@ -147,7 +78,7 @@ _mesa_init_texture_s3tc( GLcontext *ctx )     ctx->Mesa_DXTn = GL_FALSE;  #if USE_EXTERNAL_DXTN_LIB     if (!dxtlibhandle) { -      dxtlibhandle = _mesa_dlopen(DXTN_LIBNAME, RTLD_LAZY | RTLD_GLOBAL); +      dxtlibhandle = _mesa_dlopen(DXTN_LIBNAME, 0);        if (!dxtlibhandle) {  	 _mesa_warning(ctx, "couldn't open " DXTN_LIBNAME ", software DXTn "  	    "compression/decompression unavailable"); diff --git a/src/mesa/sources b/src/mesa/sources index 9b9eb991fd..f45b375900 100644 --- a/src/mesa/sources +++ b/src/mesa/sources @@ -21,6 +21,7 @@ MAIN_SOURCES = \  	main/depth.c \  	main/depthstencil.c \  	main/dlist.c \ +	main/dlopen.c \  	main/drawpix.c \  	main/enable.c \  	main/enums.c \ | 
