@@ -95,42 +95,63 @@ func (p *Package) writeDefs() {
95
95
fc .Close ()
96
96
}
97
97
98
- func dynimport (obj string ) (syms , imports []string ) {
99
- var f interface {
100
- ImportedLibraries () ([]string , os.Error )
101
- ImportedSymbols () ([]string , os.Error )
102
- }
103
- var isMacho bool
104
- var err1 , err2 , err3 os.Error
105
- if f , err1 = elf .Open (obj ); err1 != nil {
106
- if f , err2 = pe .Open (obj ); err2 != nil {
107
- if f , err3 = macho .Open (obj ); err3 != nil {
108
- fatalf ("cannot parse %s as ELF (%v) or PE (%v) or Mach-O (%v)" , obj , err1 , err2 , err3 )
98
+ func dynimport (obj string ) {
99
+ if f , err := elf .Open (obj ); err == nil {
100
+ sym , err := f .ImportedSymbols ()
101
+ if err != nil {
102
+ fatalf ("cannot load imported symbols from ELF file %s: %v" , obj , err )
103
+ }
104
+ for _ , s := range sym {
105
+ targ := s .Name
106
+ if s .Version != "" {
107
+ targ += "@" + s .Version
109
108
}
110
- isMacho = true
109
+ fmt .Printf ("#pragma dynimport %s %s %q\n " , s .Name , targ , s .Library )
110
+ }
111
+ lib , err := f .ImportedLibraries ()
112
+ if err != nil {
113
+ fatalf ("cannot load imported libraries from ELF file %s: %v" , obj , err )
114
+ }
115
+ for _ , l := range lib {
116
+ fmt .Printf ("#pragma dynimport _ _ %q\n " , l )
111
117
}
118
+ return
112
119
}
113
120
114
- var err os.Error
115
- syms , err = f .ImportedSymbols ()
116
- if err != nil {
117
- fatalf ("cannot load dynamic symbols: %v" , err )
118
- }
119
- if isMacho {
120
- // remove leading _ that OS X insists on
121
- for i , s := range syms {
122
- if len (s ) >= 2 && s [0 ] == '_' {
123
- syms [i ] = s [1 :]
121
+ if f , err := macho .Open (obj ); err == nil {
122
+ sym , err := f .ImportedSymbols ()
123
+ if err != nil {
124
+ fatalf ("cannot load imported symbols from Mach-O file %s: %v" , obj , err )
125
+ }
126
+ for _ , s := range sym {
127
+ if len (s ) > 0 && s [0 ] == '_' {
128
+ s = s [1 :]
124
129
}
130
+ fmt .Printf ("#pragma dynimport %s %s %q\n " , s , s , "" )
125
131
}
132
+ lib , err := f .ImportedLibraries ()
133
+ if err != nil {
134
+ fatalf ("cannot load imported libraries from Mach-O file %s: %v" , obj , err )
135
+ }
136
+ for _ , l := range lib {
137
+ fmt .Printf ("#pragma dynimport _ _ %q\n " , l )
138
+ }
139
+ return
126
140
}
127
141
128
- imports , err = f .ImportedLibraries ()
129
- if err != nil {
130
- fatalf ("cannot load dynamic imports: %v" , err )
142
+ if f , err := pe .Open (obj ); err == nil {
143
+ sym , err := f .ImportedSymbols ()
144
+ if err != nil {
145
+ fatalf ("cannot load imported symbols from PE file %s: v" , obj , err )
146
+ }
147
+ for _ , s := range sym {
148
+ ss := strings .Split (s , ":" , - 1 )
149
+ fmt .Printf ("#pragma dynimport %s %s %q\n " , ss [0 ], ss [0 ], strings .ToLower (ss [1 ]))
150
+ }
151
+ return
131
152
}
132
153
133
- return
154
+ fatalf ( "cannot parse %s as ELF, Mach-O or PE" , obj )
134
155
}
135
156
136
157
// Construct a gcc struct matching the 6c argument frame.
0 commit comments