Mercurial > projects > dwt2
annotate base/src/java/nonstandard/SharedLib.d @ 47:65761bc28ab2
swt linux again compilable for d1.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Fri, 27 Mar 2009 11:43:53 +0100 |
parents | 17310ba3c1bc |
children | 8a5386b204bb |
rev | line source |
---|---|
46
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 module java.nonstandard.SharedLib; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
2 |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 import java.lang.all; |
47
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
4 version(Tango){ |
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
5 static import tango.sys.SharedLib; |
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
6 static import tango.stdc.stringz; |
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
7 } |
46
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 struct Symbol { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 String name; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 void** symbol; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 struct SymbolVersioned2 { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 String name; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 void** symbol; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 int major; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 int minor; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
21 struct SharedLib { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 static void loadLibSymbols( SymbolVersioned2[] symbols, String libname, int major, int minor ){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 version(Tango){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 foreach( inout s; symbols ){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 if( s.major < major ) continue; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 if( s.major == major && s.minor > minor ) continue; |
47
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
28 *s.symbol = lib.getSymbol( tango.stdc.stringz.toStringz(s.name ) ); |
46
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 if( s.symbol is null ){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 } else { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 getDwtLogger.error( __FILE__, __LINE__, "Could not load the library {}", libname ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 } else { // Phobos |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 implMissing( __FILE__, __LINE__ ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 static void loadLibSymbols( Symbol[] symbols, String libname ){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
41 version(Tango){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 if (auto lib = tango.sys.SharedLib.SharedLib.load(libname)) { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
43 foreach( inout s; symbols ){ |
47
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
44 *s.symbol = lib.getSymbol( tango.stdc.stringz.toStringz(s.name ) ); |
46
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 if( s.symbol is null ){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 getDwtLogger.error( __FILE__, __LINE__, "{}: Symbol '{}' not found", libname, s.name ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 } else { |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 getDwtLogger.error( __FILE__, __LINE__, "Could not load the library {}", libname ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 } else { // Phobos |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 implMissing( __FILE__, __LINE__ ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 static bool tryUseSymbol( String symbolname, String libname, void delegate( void*) dg ){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 bool result = false; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 version(Tango){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 if (auto lib = tango.sys.SharedLib.SharedLib.load( libname ) ) { |
47
65761bc28ab2
swt linux again compilable for d1.
Frank Benoit <benoit@tionex.de>
parents:
46
diff
changeset
|
60 void* ptr = lib.getSymbol( tango.stdc.stringz.toStringz(symbolname)); |
46
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 if (ptr !is null){ |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 dg(ptr); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 result = true; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 lib.unload(); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 } else { // Phobos |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
68 implMissing( __FILE__, __LINE__ ); |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 return result; |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 } |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 |
17310ba3c1bc
Moved all load lib functionality into own module
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 |