@@ -209,19 +209,22 @@ macro_rules! ffi_dispatch_static(
209209#[ macro_export]
210210macro_rules! link_external_library(
211211 ( $link: expr,
212- $( statics: $( $sname: ident: $stype: ty) ,+, ) |*
213- $( functions: $( fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
214- $( varargs: $( fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
212+ $( statics: $( $( # [ $sattr : meta ] ) * $ sname: ident: $stype: ty) ,+, ) |*
213+ $( functions: $( $ ( # [ $fattr : meta ] ) * fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
214+ $( varargs: $( $ ( # [ $vattr : meta ] ) * fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
215215 ) => (
216216 #[ link( name = $link) ]
217217 extern "C" {
218218 $( $(
219+ $( #[ $sattr] ) *
219220 pub static $sname: $stype;
220221 ) +) *
221222 $( $(
223+ $( #[ $fattr] ) *
222224 pub fn $fname( $( _: $farg) ,* ) -> $fret;
223225 ) +) *
224226 $( $(
227+ $( #[ $vattr] ) *
225228 pub fn $vname( $( _: $vargs) ,+ , ...) -> $vret;
226229 ) +) *
227230 }
@@ -262,51 +265,54 @@ impl std::fmt::Display for DlError {
262265#[ macro_export]
263266macro_rules! dlopen_external_library(
264267 ( __struct, $structname: ident,
265- $( statics: $( $sname: ident: $stype: ty) ,+, ) |*
266- $( functions: $( fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
267- $( varargs: $( fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
268+ $( statics: $( $( # [ $sattr : meta ] ) * $ sname: ident: $stype: ty) ,+, ) |*
269+ $( functions: $( $ ( # [ $fattr : meta ] ) * fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
270+ $( varargs: $( $ ( # [ $vattr : meta ] ) * fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
268271 ) => (
269272 pub struct $structname {
270273 __lib: $crate:: Library ,
271274 $( $(
275+ $( #[ $sattr] ) *
272276 pub $sname: $crate:: Symbol <' static , & ' static $stype>,
273277 ) +) *
274278 $( $(
279+ $( #[ $fattr] ) *
275280 pub $fname: $crate:: Symbol <' static , unsafe extern "C" fn ( $( $farg) ,* ) -> $fret>,
276281 ) +) *
277282 $( $(
283+ $( #[ $vattr] ) *
278284 pub $vname: $crate:: Symbol <' static , unsafe extern "C" fn ( $( $vargs) ,+ , ...) -> $vret>,
279285 ) +) *
280286 }
281287 ) ;
282288 ( __impl, $structname: ident,
283- $( statics: $( $sname: ident: $stype: ty) ,+, ) |*
284- $( functions: $( fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
285- $( varargs: $( fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
289+ $( statics: $( $( # [ $sattr : meta ] ) * $ sname: ident: $stype: ty) ,+, ) |*
290+ $( functions: $( $ ( # [ $fattr : meta ] ) * fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
291+ $( varargs: $( $ ( # [ $vattr : meta ] ) * fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
286292 ) => (
287293 impl $structname {
288294 pub unsafe fn open( name: & str ) -> Result <$structname, $crate:: DlError > {
289295 // we use it to ensure the 'static lifetime
290296 use std:: mem:: transmute;
291297 let lib = $crate:: Library :: new( name) . map_err( $crate:: DlError :: CantOpen ) ?;
292298 let s = $structname {
293- $( $( $sname: {
299+ $( $( $( # [ $sattr ] ) * $ sname: {
294300 let s_name = concat!( stringify!( $sname) , "\0 " ) ;
295301 transmute( match lib. get:: <& ' static $stype>( s_name. as_bytes( ) ) {
296302 Ok ( s) => s,
297303 Err ( _) => return Err ( $crate:: DlError :: MissingSymbol ( s_name) )
298304 } )
299305 } ,
300306 ) +) *
301- $( $( $fname: {
307+ $( $( $( # [ $fattr ] ) * $ fname: {
302308 let s_name = concat!( stringify!( $fname) , "\0 " ) ;
303309 transmute( match lib. get:: <unsafe extern "C" fn ( $( $farg) ,* ) -> $fret>( s_name. as_bytes( ) ) {
304310 Ok ( s) => s,
305311 Err ( _) => return Err ( $crate:: DlError :: MissingSymbol ( s_name) )
306312 } )
307313 } ,
308314 ) +) *
309- $( $( $vname: {
315+ $( $( $( # [ $fattr ] ) * $ vname: {
310316 let s_name = concat!( stringify!( $vname) , "\0 " ) ;
311317 transmute( match lib. get:: <unsafe extern "C" fn ( $( $vargs) ,+ , ...) -> $vret>( s_name. as_bytes( ) ) {
312318 Ok ( s) => s,
@@ -321,19 +327,19 @@ macro_rules! dlopen_external_library(
321327 }
322328 ) ;
323329 ( $structname: ident,
324- $( statics: $( $sname: ident: $stype: ty) ,+, ) |*
325- $( functions: $( fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
326- $( varargs: $( fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
330+ $( statics: $( $( # [ $sattr : meta ] ) * $ sname: ident: $stype: ty) ,+, ) |*
331+ $( functions: $( $ ( # [ $fattr : meta ] ) * fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
332+ $( varargs: $( $ ( # [ $vattr : meta ] ) * fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
327333 ) => (
328334 $crate:: dlopen_external_library!( __struct,
329- $structname, $( statics: $( $sname: $stype) ,+, ) |*
330- $( functions: $( fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
331- $( varargs: $( fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
335+ $structname, $( statics: $( $( # [ $sattr ] ) * $ sname: $stype) ,+, ) |*
336+ $( functions: $( $ ( # [ $fattr ] ) * fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
337+ $( varargs: $( $ ( # [ $vattr ] ) * fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
332338 ) ;
333339 $crate:: dlopen_external_library!( __impl,
334- $structname, $( statics: $( $sname: $stype) ,+, ) |*
335- $( functions: $( fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
336- $( varargs: $( fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
340+ $structname, $( statics: $( $( # [ $sattr ] ) * $ sname: $stype) ,+, ) |*
341+ $( functions: $( $ ( # [ $attr ] ) * fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
342+ $( varargs: $( $ ( # [ $vattr ] ) * fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
337343 ) ;
338344 unsafe impl Sync for $structname { }
339345 ) ;
@@ -353,34 +359,34 @@ macro_rules! dlopen_external_library(
353359#[ macro_export]
354360macro_rules! external_library(
355361 ( feature=$feature: expr, $structname: ident, $link: expr,
356- $( statics: $( $sname: ident: $stype: ty) ,+, ) |*
357- $( functions: $( fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
358- $( varargs: $( fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
362+ $( statics: $( $( # [ $sattr : meta ] ) * $ sname: ident: $stype: ty) ,+, ) |*
363+ $( functions: $( $ ( # [ $fattr : meta ] ) * fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
364+ $( varargs: $( $ ( # [ $vattr : meta ] ) * fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
359365 ) => (
360366 #[ cfg( feature = $feature) ]
361367 $crate:: dlopen_external_library!(
362- $structname, $( statics: $( $sname: $stype) ,+, ) |*
363- $( functions: $( fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
364- $( varargs: $( fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
368+ $structname, $( statics: $( $( # [ $sattr ] ) * $ sname: $stype) ,+, ) |*
369+ $( functions: $( $ ( # [ $fattr ] ) * fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
370+ $( varargs: $( $ ( # [ $vattr ] ) * fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
365371 ) ;
366372
367373 #[ cfg( not( feature = $feature) ) ]
368374 $crate:: link_external_library!(
369- $link, $( statics: $( $sname: $stype) ,+, ) |*
370- $( functions: $( fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
371- $( varargs: $( fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
375+ $link, $( statics: $( $( # [ $sattr ] ) * $ sname: $stype) ,+, ) |*
376+ $( functions: $( $ ( # [ $fattr ] ) * fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
377+ $( varargs: $( $ ( # [ $vattr ] ) * fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
372378 ) ;
373379 ) ;
374380 ( $structname: ident, $link: expr,
375- $( statics: $( $sname: ident: $stype: ty) ,+, ) |*
376- $( functions: $( fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
377- $( varargs: $( fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
381+ $( statics: $( $( # [ $sattr : meta ] ) * $ sname: ident: $stype: ty) ,+, ) |*
382+ $( functions: $( $ ( # [ $fattr : meta ] ) * fn $fname: ident( $( $farg: ty) ,* ) -> $fret: ty) ,+, ) |*
383+ $( varargs: $( $ ( # [ $vattr : meta ] ) * fn $vname: ident( $( $vargs: ty) ,+) -> $vret: ty) ,+, ) |*
378384 ) => (
379385 $crate:: external_library!(
380386 feature="dlopen" , $structname, $link,
381- $( statics: $( $sname: $stype) ,+, ) |*
382- $( functions: $( fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
383- $( varargs: $( fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
387+ $( statics: $( $( # [ $sattr ] ) * $ sname: $stype) ,+, ) |*
388+ $( functions: $( $ ( # [ $fattr ] ) * fn $fname( $( $farg) ,* ) -> $fret) ,+, ) |*
389+ $( varargs: $( $ ( # [ $vattr ] ) * fn $vname( $( $vargs) ,+) -> $vret) ,+, ) |*
384390 ) ;
385391 ) ;
386392) ;
0 commit comments