evas: just disable Evas_GL support in software engine when we don't have dlopen.
authorcedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 5 Jan 2012 12:59:08 +0000 (12:59 +0000)
committercedric <cedric@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 5 Jan 2012 12:59:08 +0000 (12:59 +0000)
NOTE: there is many system without dlopen and we do support them. Please keep it
this way in the future.

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@66901 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/modules/engines/software_generic/evas_engine.c

index cd3fb33..831a507 100644 (file)
@@ -1,18 +1,20 @@
 #include "evas_common.h" /* Also includes international specific stuff */
 #include "evas_private.h"
 
-
-#define EVAS_GL_NO_GL_H_CHECK 1
-#include "Evas_GL.h"
-
 #ifdef HAVE_DLSYM
 # include <dlfcn.h>      /* dlopen,dlclose,etc */
+
+# define EVAS_GL 1
+# define EVAS_GL_NO_GL_H_CHECK 1
+# include "Evas_GL.h"
+
 #else
-# error software_generic should not get compiled if dlsym is not found on the system!
+# warning software_generic will not be able to have Evas_GL API.
 #endif
 
+#ifdef EVAS_GL
 //----------------------------------//
-// OSMesa... 
+// OSMesa...
 
 #define OSMESA_MAJOR_VERSION 6
 #define OSMESA_MINOR_VERSION 5
@@ -52,6 +54,7 @@
 
 typedef void (*OSMESAproc)();
 typedef struct osmesa_context *OSMesaContext;
+#endif
 
 typedef struct _Render_Engine_GL_Surface    Render_Engine_GL_Surface;
 typedef struct _Render_Engine_GL_Context    Render_Engine_GL_Context;
@@ -61,7 +64,9 @@ struct _Render_Engine_GL_Surface
    int     initialized;
    int     w, h;
 
+#ifdef EVAS_GL
    GLenum  internal_fmt;
+#endif
    int     internal_cpp;   // Component per pixel.  ie. RGB = 3
 
    int     depth_bits;
@@ -73,6 +78,7 @@ struct _Render_Engine_GL_Surface
    Render_Engine_GL_Context   *current_ctx;
 };
 
+#ifdef EVAS_GL
 struct _Render_Engine_GL_Context
 {
    int            initialized;
@@ -84,9 +90,8 @@ struct _Render_Engine_GL_Context
    Render_Engine_GL_Surface   *current_sfc;
 };
 
-
 //------------------------------------------------------//
-typedef void                   (*_eng_fn) (void );       
+typedef void                   (*_eng_fn) (void );
 typedef _eng_fn                (*glsym_func_eng_fn) ();
 typedef void                   (*glsym_func_void) ();
 typedef unsigned int           (*glsym_func_uint) ();
@@ -263,6 +268,7 @@ static void       (*_sym_glViewport)                            (GLint x, GLint
 static void       (*_sym_glGetProgramBinary)                    (GLuint a, GLsizei b, GLsizei* c, GLenum* d, void* e) = NULL;
 static void       (*_sym_glProgramBinary)                       (GLuint a, GLenum b, const void* c, GLint d) = NULL;
 static void       (*_sym_glProgramParameteri)                   (GLuint a, GLuint b, GLint d) = NULL;
+#endif
 
 /*
  *****
@@ -1341,6 +1347,7 @@ eng_image_load_error_get(void *data __UNUSED__, void *image)
 static void *
 eng_gl_surface_create(void *data __UNUSED__, void *config, int w, int h)
 {
+#ifdef EVAS_GL
    Render_Engine_GL_Surface *sfc;
    Evas_GL_Config *cfg;
 
@@ -1425,11 +1432,18 @@ eng_gl_surface_create(void *data __UNUSED__, void *config, int w, int h)
      }
 
    return sfc;
+#else
+   (void) config;
+   (void) w;
+   (void) h;
+   return NULL;
+#endif
 }
 
 static int
 eng_gl_surface_destroy(void *data __UNUSED__, void *surface)
 {
+#ifdef EVAS_GL
    Render_Engine_GL_Surface *sfc;
 
    sfc = (Render_Engine_GL_Surface*)surface;
@@ -1443,11 +1457,16 @@ eng_gl_surface_destroy(void *data __UNUSED__, void *surface)
    surface = NULL;
 
    return 1;
+#else
+   (void) surface;
+   return 1;
+#endif
 }
 
 static void *
 eng_gl_context_create(void *data __UNUSED__, void *share_context)
 {
+#ifdef EVAS_GL
    Render_Engine_GL_Context *ctx;
    Render_Engine_GL_Context *share_ctx;
 
@@ -1477,11 +1496,16 @@ eng_gl_context_create(void *data __UNUSED__, void *share_context)
    ctx->initialized = 0;
 
    return ctx;
+#else
+   (void) share_context;
+   return NULL;
+#endif
 }
 
 static int
 eng_gl_context_destroy(void *data __UNUSED__, void *context)
 {
+#ifdef EVAS_GL
    Render_Engine_GL_Context *ctx;
 
    ctx = (Render_Engine_GL_Context*)context;
@@ -1494,11 +1518,16 @@ eng_gl_context_destroy(void *data __UNUSED__, void *context)
    context = NULL;
 
    return 1;
+#else
+   (void) context;
+   return 0;
+#endif
 }
 
 static int
 eng_gl_make_current(void *data __UNUSED__, void *surface, void *context)
 {
+#ifdef EVAS_GL
    Render_Engine_GL_Surface *sfc;
    Render_Engine_GL_Context *ctx;
    OSMesaContext share_ctx;
@@ -1555,6 +1584,11 @@ eng_gl_make_current(void *data __UNUSED__, void *surface, void *context)
    sfc->current_ctx = ctx;
 
    return 1;
+#else
+   (void) surface;
+   (void) context;
+   return 1;
+#endif
 }
 
 // FIXME!!! Implement later
@@ -1567,13 +1601,19 @@ eng_gl_string_query(void *data, int name)
 static void *
 eng_gl_proc_address_get(void *data __UNUSED__, const char *name)
 {
+#ifdef EVAS_GL
    if (_sym_OSMesaGetProcAddress) return _sym_OSMesaGetProcAddress(name);
    return dlsym(RTLD_DEFAULT, name);
+#else
+   (void) name;
+   return NULL;
+#endif
 }
 
 static int
 eng_gl_native_surface_get(void *data __UNUSED__, void *surface, void *native_surface)
 {
+#ifdef EVAS_GL
    Render_Engine_GL_Surface *sfc;
    Evas_Native_Surface *ns;
 
@@ -1587,13 +1627,22 @@ eng_gl_native_surface_get(void *data __UNUSED__, void *surface, void *native_sur
    ns->data.x11.visual = sfc->buffer;
 
    return 1;
+#else
+   (void) surface;
+   (void) native_surface;
+   return 1;
+#endif
 }
 
 
 static void *
 eng_gl_api_get(void *data __UNUSED__)
 {
+#ifdef EVAS_GL
    return &gl_funcs;
+#else
+   return NULL;
+#endif
 }
 
 //------------------------------------------------//
@@ -1753,14 +1802,14 @@ static Evas_Func func =
 //                      Load Symbols                              //
 //                                                                //
 //----------------------------------------------------------------//
+#ifdef EVAS_GL
 static void
 sym_missing(void)
 {
    ERR("GL symbols missing!\n");
 }
 
-
-static int 
+static int
 glue_sym_init(void)
 {
    //------------------------------------------------//
@@ -1797,7 +1846,7 @@ glue_sym_init(void)
    return 1;
 }
 
-static int 
+static int
 gl_sym_init(void)
 {
    //------------------------------------------------//
@@ -2247,7 +2296,7 @@ gl_sym_init(void)
         DBG("GL Library is GLES.");
         gl_lib_is_gles = 1;
      }
-   
+
    return 1;
 }
 
@@ -2507,9 +2556,11 @@ evgl_glShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const
    //n = binaryformat = length = 0;
    //shaders = binary = 0;
 }
+#endif
 //--------------------------------------------------------------//
 
 
+#ifdef EVAS_GL
 static void
 override_gl_apis(Evas_GL_API *api)
 {
@@ -2673,11 +2724,13 @@ override_gl_apis(Evas_GL_API *api)
    ORD(glShaderSource);    // Do precision stripping in both cases
 #undef ORD
 }
+#endif
 
 //-------------------------------------------//
 static int
 gl_lib_init(void)
 {
+#ifdef EVAS_GL
    // dlopen OSMesa 
    gl_lib_handle = dlopen("libOSMesa.so.1", RTLD_NOW);
    if (!gl_lib_handle) gl_lib_handle = dlopen("libOSMesa.so", RTLD_NOW);
@@ -2692,13 +2745,16 @@ gl_lib_init(void)
    if (!gl_sym_init()) return 0;
 
    override_gl_apis(&gl_funcs);
-  
+
    return 1;
+#else
+   return 0;
+#endif
 }
 
 
-static void 
-init_gl()
+static void
+init_gl(void)
 {
    DBG("Initializing Software OpenGL APIs...\n");