#[macro_export]
macro_rules! external_library
{
   {
      $name: ident : $link: expr =>
      {
         $(statics:
            $($sname: ident: $stype: ty),+;
         )|*

         $(functions:
            $($fname: ident($($farg: ident : $fargt: ty),*) -> $fret:ty),+;
         )|*

         $(varargs:
            $($vname: ident($($vargs: ty),+) -> $vret: ty),+;
         )|*
      }
   } =>
   {
      #[link(name=$link)]
      extern "C"
      {
         $($(pub static $sname: $stype;)+)*

         $($(pub fn $fname($($farg: $fargt),*) -> $fret;)+)*

         $($(pub fn $vname($(_: $vargs),+ , ...) -> $vret;)+)*
      }
   }
}