File: bind.c

package info (click to toggle)
xmorph 1%3A20050408b
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 5,712 kB
  • ctags: 2,109
  • sloc: ansic: 24,471; sh: 11,182; cpp: 1,546; makefile: 954; sed: 16
file content (64 lines) | stat: -rw-r--r-- 1,412 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif


#include <gmodule.h>

#include "libply.h"

#include "bind.h"

//int (*render_ply_)(GdkDrawable *window,GdkGC *gc);
int (*read_ply_)(char *filename, PlySurface *p);


GModule* libply_gmodule=NULL;

#define CRIT     libply_gmodule=g_module_open(l_p,0); if(! libply_gmodule  )    {g_warning("dynamic loading of %s failed:  %s", l_p,	g_module_error()); };

int bind_libply(char *argv[])
{

  if(!   g_module_supported())
    {
      g_critical("dynamic loading is not supported");
      return FALSE;
    };

  //first, try the command line version
#ifdef HAVE_CONFIG_H
#ifdef LIBPLY
 {  
   gchar*   l_p=   g_strdup_printf("%s/libply",LIBPLY);
   CRIT
   g_free(l_p);
 }
 if(!libply_gmodule) {  
   gchar*   l_p=   g_strdup_printf("%s/.libs/libply.so",LIBPLY);
   CRIT
   g_free(l_p);
 }
#endif
#endif
 // maybe in windows it was dropped right by the executable
 if(!libply_gmodule) {
  gchar*  insta_dir=    g_path_get_dirname (argv[0]);
  gchar*   l_p=   g_strdup_printf("%s/libply",insta_dir);
  CRIT 
  g_free(insta_dir);
  g_free(l_p);
 }

 if(! libply_gmodule  ) {
   gchar*   l_p="libply";
   CRIT
      }
 if(! libply_gmodule)
   return FALSE;
  if (!g_module_symbol(libply_gmodule,"read_ply",&read_ply_) 
      //!g_module_symbol(libply_gmodule,"render_ply",&render_ply_)
      )
    {g_critical("cannot bind to libply");return FALSE;};
  return TRUE;
}