import Options import sys def set_options(opt): pass #opt.tool_options('compiler_cc') def configure(conf): print "--- libeio ---" #conf.check_tool('compiler_cc') conf.check(lib='pthread', uselib_store='PTHREAD') conf.check_cc(lib="pthread", header_name="pthread.h", function_name="pthread_create", mandatory=True) if not sys.platform.startswith("cygwin"): conf.check_cc(lib="pthread", header_name="pthread.h", function_name="pthread_atfork", mandatory=True) else: conf.check_cc(lib="pthread", header_name="unistd.h", function_name="pthread_atfork", mandatory=True) conf.check_cc(msg="Checking for futimes(2)", define_name="HAVE_FUTIMES", fragment=""" #include #include #include struct timeval tv[2]; int res; int fd; int main(void) { res = futimes (fd, tv); return 0; } """) conf.check_cc(msg="Checking for readahead(2)", define_name="HAVE_READAHEAD", fragment=""" #include int main(void) { int fd = 0; size_t count = 2; ssize_t res; res = readahead (fd, 0, count); return 0; } """) conf.check_cc(msg="Checking for fdatasync(2)", define_name="HAVE_FDATASYNC", fragment=""" #include int main(void) { int fd = 0; fdatasync (fd); return 0; } """) conf.check_cc(msg="Checking for pread(2) and pwrite(2)", define_name="HAVE_PREADWRITE", fragment=""" #include int main(void) { int fd = 0; size_t count = 1; char buf; off_t offset = 1; ssize_t res; res = pread (fd, &buf, count, offset); res = pwrite (fd, &buf, count, offset); return 0; } """) conf.check_cc(msg="Checking for sendfile(2)" , define_name="HAVE_SENDFILE" , fragment=""" # include #if __linux # include #elif __FreeBSD__ || defined(__APPLE__) # include # include #elif __hpux # include #else # error unsupported architecture #endif int main(void) { int fd = 0; off_t offset = 1; size_t count = 2; ssize_t res; #if __linux res = sendfile (fd, fd, offset, count); #elif __FreeBSD__ res = sendfile (fd, fd, offset, count, 0, &offset, 0); #elif __APPLE__ res = sendfile (fd, fd, offset, &offset, 0, 0); #elif __hpux res = sendfile (fd, fd, offset, count, 0, 0); #endif return 0; } """) conf.env.append_value("CCFLAGS", "-D_GNU_SOURCE") conf.check_cc(msg="Checking for sync_file_range(2) ", fragment=""" #include int main(void) { int fd = 0; off64_t offset = 1; off64_t nbytes = 1; unsigned int flags = SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE|SYNC_FILE_RANGE_WAIT_AFTER; ssize_t res; res = sync_file_range (fd, offset, nbytes, flags); return 0; } """, define_name="HAVE_SYNC_FILE_RANGE") def build(bld): libeio = bld.new_task_gen("cc") libeio.source = "eio.c" libeio.target = 'eio' libeio.name = 'eio' libeio.includes = '. ../..' libeio.uselib = "PTHREAD" libeio.install_path = None if bld.env["USE_DEBUG"]: libeio.clone("debug"); bld.install_files('${PREFIX}/include/node/', 'eio.h');