2019-06-24 21:04:52 -04:00
|
|
|
#[macro_export]
|
|
|
|
macro_rules! external_library
|
|
|
|
{
|
|
|
|
{
|
2019-06-24 22:09:36 -04:00
|
|
|
$name: ident : $link: expr =>
|
2019-06-24 21:04:52 -04:00
|
|
|
{
|
|
|
|
$(statics:
|
2019-06-24 22:29:48 -04:00
|
|
|
$($sname: ident: $stype: ty);+;
|
2019-06-24 21:04:52 -04:00
|
|
|
)|*
|
|
|
|
|
|
|
|
$(functions:
|
2019-06-24 22:29:48 -04:00
|
|
|
$($fname: ident($($farg: ident : $fargt: ty),*) -> $fret:ty);+;
|
2019-06-24 21:04:52 -04:00
|
|
|
)|*
|
|
|
|
|
|
|
|
$(varargs:
|
|
|
|
$($vname: ident($($vargs: ty),+) -> $vret: ty),+;
|
|
|
|
)|*
|
|
|
|
}
|
|
|
|
} =>
|
|
|
|
{
|
|
|
|
#[link(name=$link)]
|
|
|
|
extern "C"
|
|
|
|
{
|
|
|
|
$($(pub static $sname: $stype;)+)*
|
|
|
|
|
2019-06-24 22:23:59 -04:00
|
|
|
$($(pub fn $fname($($farg: $fargt),*) -> $fret;)+)*
|
2019-06-24 21:04:52 -04:00
|
|
|
|
|
|
|
$($(pub fn $vname($(_: $vargs),+ , ...) -> $vret;)+)*
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|