|
|
|
import Options
|
|
|
|
import platform
|
|
|
|
|
|
|
|
PLATFORM_IS_DARWIN = platform.platform().find('Darwin') == 0
|
|
|
|
|
|
|
|
def set_options(opt):
|
|
|
|
pass
|
|
|
|
#opt.tool_options('compiler_cc')
|
|
|
|
|
|
|
|
def configure(conf):
|
|
|
|
print "--- libev ---"
|
|
|
|
#conf.check_tool('compiler_cc')
|
|
|
|
|
|
|
|
# Why to the two checks? One is to define HAVE_SYS_EPOLL_H
|
|
|
|
# the other is to define HAVE_EPOLL_CTL
|
|
|
|
# Yes, WAF is a piece of shit.
|
|
|
|
|
|
|
|
if conf.check_cc(header_name="sys/inotify.h"):
|
|
|
|
conf.check_cc(header_name="sys/inotify.h", function_name="inotify_init")
|
|
|
|
|
|
|
|
if conf.check_cc(header_name="sys/epoll.h"):
|
|
|
|
conf.check_cc(header_name="sys/epoll.h", function_name="epoll_ctl")
|
|
|
|
|
|
|
|
if conf.check_cc(header_name="port.h"):
|
|
|
|
conf.check_cc(header_name="port.h", function_name="port_create")
|
|
|
|
|
|
|
|
if conf.check_cc(header_name="poll.h"):
|
|
|
|
conf.check_cc(header_name="poll.h", function_name="poll")
|
|
|
|
|
|
|
|
conf.check_cc(header_name="sys/event.h")
|
|
|
|
conf.check_cc(header_name="sys/queue.h")
|
|
|
|
if PLATFORM_IS_DARWIN:
|
|
|
|
conf.check_cc(header_name="sys/event.h", function_name="kqueue")
|
|
|
|
else:
|
|
|
|
conf.check_cc(header_name="sys/queue.h", function_name="kqueue")
|
|
|
|
|
|
|
|
if conf.check_cc(header_name="sys/select.h"):
|
|
|
|
conf.check_cc(header_name="sys/select.h", function_name="select")
|
|
|
|
|
|
|
|
if conf.check_cc(header_name="sys/eventfd.h"):
|
|
|
|
conf.check_cc(header_name="sys/eventfd.h", function_name="eventfd")
|
|
|
|
|
|
|
|
|
|
|
|
code = """
|
|
|
|
#include <syscall.h>
|
|
|
|
#include <time.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
struct timespec ts;
|
|
|
|
int status = syscall(SYS_clock_gettime, CLOCK_REALTIME, &ts);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
"""
|
|
|
|
conf.check_cc(fragment=code, define_name="HAVE_CLOCK_SYSCALL", execute=True,
|
|
|
|
msg="Checking for SYS_clock_gettime")
|
|
|
|
|
|
|
|
have_librt = conf.check(lib='rt', uselib_store='RT')
|
|
|
|
if have_librt:
|
|
|
|
conf.check_cc(lib="rt", header_name="time.h", function_name="clock_gettime")
|
|
|
|
if PLATFORM_IS_DARWIN:
|
|
|
|
conf.check_cc(header_name="time.h", function_name="nanosleep")
|
|
|
|
elif have_librt:
|
|
|
|
conf.check_cc(lib="rt", header_name="time.h", function_name="nanosleep")
|
|
|
|
|
|
|
|
conf.check_cc(lib="m", header_name="math.h", function_name="ceil")
|
|
|
|
|
|
|
|
conf.define("HAVE_CONFIG_H", 1)
|
|
|
|
|
|
|
|
conf.env.append_value('CCFLAGS', ['-DEV_MULTIPLICITY=0'])
|
|
|
|
conf.env.append_value('CXXFLAGS', ['-DEV_MULTIPLICITY=0'])
|
|
|
|
|
|
|
|
def build(bld):
|
|
|
|
libev = bld.new_task_gen("cc")
|
|
|
|
libev.source = 'ev.c'
|
|
|
|
libev.target = 'ev'
|
|
|
|
libev.name = 'ev'
|
|
|
|
libev.includes = '. ../..'
|
|
|
|
libev.uselib = "RT"
|
|
|
|
libev.install_path = None
|
|
|
|
if bld.env["USE_DEBUG"]:
|
|
|
|
libev.clone("debug");
|
|
|
|
bld.install_files('${PREFIX}/include/node/', 'ev.h');
|
|
|
|
|