--- cvsroot/EV/Makefile.PL 2007/11/01 06:48:49 1.10 +++ cvsroot/EV/Makefile.PL 2010/11/22 06:28:26 1.47 @@ -1,9 +1,9 @@ -use 5.006; +use 5.008002; +use strict qw(vars subs); use Config; use ExtUtils::MakeMaker; - unless (-e "libev/ev_epoll.c") { print <; +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** + + +Similarly to the epoll backend above, EV can take advantage of kqueue on +many BSD systems. Support for kqueue will be detected at runtime, with a +safe fallback to other methods when it cannot be used. + +Note that kqueue is broken on most operating systems, so by default it +won't be used on many platforms, but you can still create your own event +loop with kqueue backend if you ask specifically for it. + +Here is what we know: + +NetBSD: partially working in at least 3.1 and later. Yeah! :) +FreeBSD: broken on at least 6.2-STABLE, spotty in later versions, + sockets *likely* work, ptys definitely don't. +OpenBSD: reports indicate that it likely doesn't work + (similar problems as on FreeBSD). +OS X: completely, utterly broken on at least <= 10.6. + +EOF + +my $can_kqueue = -e "/usr/include/sys/event.h"; +$can_kqueue = $ENV{EV_KQUEUE} if exists $ENV{EV_KQUEUE}; +$DEFINE .= " -DEV_USE_KQUEUE=" . (0 + (prompt ("Enable kqueue backend (y/n)?", $can_kqueue ? "y" : "n") =~ /[yY]/)); + +print < 5.29) : (); WriteMakefile( dist => { @@ -31,20 +256,31 @@ SUFFIX => '.gz', }, depend => { - "EV.c" => "EV/EVAPI.h libev/ev.c libev/ev.h libev/ev_epoll.c libev/ev_select.c", + "EV.c" => "EV/EVAPI.h " + . "libev/ev.c libev/ev.h libev/ev_epoll.c libev/ev_select.c libev/ev_kqueue.c libev/ev_poll.c " + . "libev/ev_vars.h libev/ev_wrap.h", }, INC => "-Ilibev", + DEFINE => "$DEFINE", NAME => "EV", - LIBS => ["-lrt -lpthread"], + LIBS => [$LIBS], + PREREQ_PM => { + @anyevent, + "common::sense" => 0, + }, VERSION_FROM => "EV.pm", PM => { 'EV.pm' => '$(INST_LIBDIR)/EV.pm', - 'EV/AnyEvent.pm' => '$(INST_LIBDIR)/EV/AnyEvent.pm', - #'EV/DNS.pm' => '$(INST_LIBDIR)/EV/DNS.pm', 'EV/EVAPI.h' => '$(INST_LIBDIR)/EV/EVAPI.h', 'EV/MakeMaker.pm' => '$(INST_LIBDIR)/EV/MakeMaker.pm', 'libev/ev.h' => '$(INST_LIBDIR)/EV/ev.h', + 'libev/ev.pod' => '$(INST_LIBDIR)/EV/libev.pod', }, + MAN3PODS => { + 'EV.pm' => '$(INST_MAN3DIR)/EV.$(MAN3EXT)', + 'EV/MakeMaker.pm' => '$(INST_MAN3DIR)/EV::MakeMaker.$(MAN3EXT)', + 'libev/ev.pod' => '$(INST_MAN3DIR)/EV::libev.$(MAN3EXT)', + }, );