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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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