-
-
Save plicease/7d561de84800cd7fbac25319f3834cb9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package UV::FFI::Constants; | |
use strict; | |
use warnings; | |
use constant (); | |
use FFI::Build; | |
use FFI::Platypus; | |
use base qw( Exporter ); | |
our @EXPORT_OK; | |
{ | |
my $build = FFI::Build->new( | |
'uvconstant', | |
source => [ [ C => \ do { local $/; <DATA> } ] ], | |
#verbose => 2, | |
alien => ['Alien::libuv'], | |
); | |
my $ffi = FFI::Platypus->new; | |
$ffi->lib($build->build); | |
$ffi->type('(string,string)->void', 'set_str_t'); | |
$ffi->type('(string,sint64)->void', 'set_sint64_t'); | |
my $f = $ffi->closure(sub { | |
my($name, $value) = @_; | |
constant->import($name, $value); | |
push @EXPORT_OK, $name; | |
}); | |
$ffi->function('constant_export' => [ 'set_str_t', 'set_sint64_t' ] => 'void' )->call($f,$f); | |
} | |
1; | |
__DATA__ | |
#include <uv.h> | |
#include <stdint.h> | |
typedef void (*set_str_t)(const char *name, const char *value); | |
typedef void (*set_sint64_t)(const char *name, int64_t value); | |
#define set_str(c) set_str_cb(#c,c) | |
#define set_sint64(c) set_sint64_cb(#c,c) | |
void | |
constant_export(set_str_t set_str_cb, set_sint64_t set_sint64_cb) | |
{ | |
set_sint64(UV_VERSION_MAJOR); | |
set_sint64(UV_VERSION_MINOR); | |
set_sint64(UV_VERSION_PATCH); | |
set_sint64(UV_VERSION_IS_RELEASE); | |
set_sint64(UV_VERSION_HEX); | |
set_str(UV_VERSION_SUFFIX); | |
set_sint64(UV_E2BIG); | |
set_sint64(UV_EACCES); | |
set_sint64(UV_EADDRINUSE); | |
set_sint64(UV_EADDRNOTAVAIL); | |
set_sint64(UV_EAFNOSUPPORT); | |
set_sint64(UV_EAGAIN); | |
set_sint64(UV_EAI_ADDRFAMILY); | |
set_sint64(UV_EAI_AGAIN); | |
set_sint64(UV_EAI_BADFLAGS); | |
set_sint64(UV_EAI_BADHINTS); | |
set_sint64(UV_EAI_CANCELED); | |
set_sint64(UV_EAI_FAIL); | |
set_sint64(UV_EAI_FAMILY); | |
set_sint64(UV_EAI_MEMORY); | |
set_sint64(UV_EAI_NODATA); | |
set_sint64(UV_EAI_NONAME); | |
set_sint64(UV_EAI_OVERFLOW); | |
set_sint64(UV_EAI_PROTOCOL); | |
set_sint64(UV_EAI_SERVICE); | |
set_sint64(UV_EAI_SOCKTYPE); | |
set_sint64(UV_EALREADY); | |
set_sint64(UV_EBADF); | |
set_sint64(UV_EBUSY); | |
set_sint64(UV_ECANCELED); | |
set_sint64(UV_ECHARSET); | |
set_sint64(UV_ECONNABORTED); | |
set_sint64(UV_ECONNREFUSED); | |
set_sint64(UV_ECONNRESET); | |
set_sint64(UV_EDESTADDRREQ); | |
set_sint64(UV_EEXIST); | |
set_sint64(UV_EFAULT); | |
set_sint64(UV_EFBIG); | |
set_sint64(UV_EHOSTUNREACH); | |
set_sint64(UV_EINTR); | |
set_sint64(UV_EINVAL); | |
set_sint64(UV_EIO); | |
set_sint64(UV_EISCONN); | |
set_sint64(UV_EISDIR); | |
set_sint64(UV_ELOOP); | |
set_sint64(UV_EMFILE); | |
set_sint64(UV_EMSGSIZE); | |
set_sint64(UV_ENAMETOOLONG); | |
set_sint64(UV_ENETDOWN); | |
set_sint64(UV_ENETUNREACH); | |
set_sint64(UV_ENFILE); | |
set_sint64(UV_ENOBUFS); | |
set_sint64(UV_ENODEV); | |
set_sint64(UV_ENOENT); | |
set_sint64(UV_ENOMEM); | |
set_sint64(UV_ENONET); | |
set_sint64(UV_ENOPROTOOPT); | |
set_sint64(UV_ENOSPC); | |
set_sint64(UV_ENOSYS); | |
set_sint64(UV_ENOTCONN); | |
set_sint64(UV_ENOTDIR); | |
set_sint64(UV_ENOTEMPTY); | |
set_sint64(UV_ENOTSOCK); | |
set_sint64(UV_ENOTSUP); | |
set_sint64(UV_EPERM); | |
set_sint64(UV_EPIPE); | |
set_sint64(UV_EPROTO); | |
set_sint64(UV_EPROTONOSUPPORT); | |
set_sint64(UV_EPROTOTYPE); | |
set_sint64(UV_ERANGE); | |
set_sint64(UV_EROFS); | |
set_sint64(UV_ESHUTDOWN); | |
set_sint64(UV_ESPIPE); | |
set_sint64(UV_ESRCH); | |
set_sint64(UV_ETIMEDOUT); | |
set_sint64(UV_ETXTBSY); | |
set_sint64(UV_EXDEV); | |
set_sint64(UV_UNKNOWN); | |
set_sint64(UV_EOF); | |
set_sint64(UV_ENXIO); | |
set_sint64(UV_EMLINK); | |
set_sint64(UV_ASYNC); | |
set_sint64(UV_CHECK); | |
set_sint64(UV_FS_EVENT); | |
set_sint64(UV_FS_POLL); | |
set_sint64(UV_IDLE); | |
set_sint64(UV_NAMED_PIPE); | |
set_sint64(UV_POLL); | |
set_sint64(UV_PREPARE); | |
set_sint64(UV_PROCESS); | |
set_sint64(UV_STREAM); | |
set_sint64(UV_TCP); | |
set_sint64(UV_TIMER); | |
set_sint64(UV_TTY); | |
set_sint64(UV_UDP); | |
set_sint64(UV_SIGNAL); | |
set_sint64(UV_FILE); | |
/* Loop run constants */ | |
set_sint64(UV_RUN_DEFAULT); | |
set_sint64(UV_RUN_ONCE); | |
set_sint64(UV_RUN_NOWAIT); | |
/* expose the Loop configure constants */ | |
set_sint64(UV_LOOP_BLOCK_SIGNAL); | |
set_sint64(SIGPROF); | |
/* Poll Event Types */ | |
set_sint64(UV_READABLE); | |
set_sint64(UV_WRITABLE); | |
set_sint64(UV_DISCONNECT); | |
set_sint64(UV_PRIORITIZED); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment