ports/141006: [patch] devel/ocaml-event: update to 0.6.0

soulcatcher soulcatcher13 at gmail.com
Sun Nov 29 21:10:01 UTC 2009


>Number:         141006
>Category:       ports
>Synopsis:       [patch] devel/ocaml-event: update to 0.6.0
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Sun Nov 29 21:10:01 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     soulcatcher
>Release:        7.2-STABLE
>Organization:
>Environment:
FreeBSD xxx.org 7.2-STABLE FreeBSD 7.2-STABLE #5: Sun Nov 22 21:02:42 MSK 2009     root at xxx.org:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
update devel/ocaml-event: 0.5.0_7 -> 0.6.0
>How-To-Repeat:

>Fix:


Patch attached with submission follows:

diff -ruN ocaml-event.bak/Makefile ocaml-event/Makefile
--- ocaml-event.bak/Makefile	2009-11-29 23:47:17.000000000 +0300
+++ ocaml-event/Makefile	2009-11-30 00:00:27.000000000 +0300
@@ -6,8 +6,7 @@
 #
 
 PORTNAME=	event
-PORTVERSION=	0.5.0
-PORTREVISION=	7
+PORTVERSION=	0.6.0
 CATEGORIES=	devel
 MASTER_SITES=	http://www.xs4all.nl/~mmzeeman/ocaml/
 PKGNAMEPREFIX=	ocaml-
@@ -31,16 +30,17 @@
 EXAMPLE_FILES=	\
 		Makefile \
 		fifo_example.ml \
+		http_server.ml \
 		signal_example.ml
 LIB_FILES=	\
-		libevent.a \
-		libevent.cmxa \
-		libmlevent.a \
-		libevent.cma \
-		libevent.mli \
-		libevent.cmi
+		liboevent.a \
+		liboevent.cmxa \
+		libmloevent.a \
+		liboevent.cma \
+		liboevent.mli \
+		liboevent.cmi
 LIB_STUB_FILES=	\
-		dllmlevent.so
+		dllmloevent.so
 
 # examples to install
 PLIST_DIRS+=	${EXAMPLESDIR:S,^${PREFIX}/,,}
@@ -65,7 +65,7 @@
 		${WRKSRC}/Makefile
 
 pre-build:
-.for file in libevent.cmi
+.for file in liboevent.cmi
 	@cd ${WRKSRC} && ${GMAKE} ${file}
 .endfor
 
diff -ruN ocaml-event.bak/distinfo ocaml-event/distinfo
--- ocaml-event.bak/distinfo	2009-11-29 23:47:17.000000000 +0300
+++ ocaml-event/distinfo	2009-11-29 23:51:05.000000000 +0300
@@ -1,3 +1,3 @@
-MD5 (ocaml-event-0.5.0.tar.gz) = 1c6478d39817a90faa59a353018b082d
-SHA256 (ocaml-event-0.5.0.tar.gz) = 0b199f5494ca7647ca70ed6b53da96a252c385b6ba3f1ff0c934e328b2e03065
-SIZE (ocaml-event-0.5.0.tar.gz) = 7040
+MD5 (ocaml-event-0.6.0.tar.gz) = ae06ace4a05b8f32203de4641bed7c99
+SHA256 (ocaml-event-0.6.0.tar.gz) = 06ffb1d8621530ef3dd2ed8aa931643783586cfc91433b69a7e338931385dc8e
+SIZE (ocaml-event-0.6.0.tar.gz) = 7664
diff -ruN ocaml-event.bak/work/.PLIST.flattened ocaml-event/work/.PLIST.flattened
--- ocaml-event.bak/work/.PLIST.flattened	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/.PLIST.flattened	2009-11-30 00:00:35.000000000 +0300
@@ -0,0 +1,25 @@
+/usr/local/share/examples/ocaml-event/Makefile
+/usr/local/share/examples/ocaml-event/fifo_example.ml
+/usr/local/share/examples/ocaml-event/http_server.ml
+/usr/local/share/examples/ocaml-event/signal_example.ml
+/usr/local/lib/ocaml/liboevent.a
+/usr/local/lib/ocaml/liboevent.cmxa
+/usr/local/lib/ocaml/libmloevent.a
+/usr/local/lib/ocaml/liboevent.cma
+/usr/local/lib/ocaml/liboevent.mli
+/usr/local/lib/ocaml/liboevent.cmi
+/usr/local/lib/ocaml/stublibs/dllmloevent.so
+/usr/local/share/doc/ocaml-event/Liboevent.html
+/usr/local/share/doc/ocaml-event/README
+/usr/local/share/doc/ocaml-event/index.html
+/usr/local/share/doc/ocaml-event/index_attributes.html
+/usr/local/share/doc/ocaml-event/index_class_types.html
+/usr/local/share/doc/ocaml-event/index_classes.html
+/usr/local/share/doc/ocaml-event/index_exceptions.html
+/usr/local/share/doc/ocaml-event/index_methods.html
+/usr/local/share/doc/ocaml-event/index_module_types.html
+/usr/local/share/doc/ocaml-event/index_modules.html
+/usr/local/share/doc/ocaml-event/index_types.html
+/usr/local/share/doc/ocaml-event/index_values.html
+/usr/local/share/doc/ocaml-event/style.css
+/usr/local/share/doc/ocaml-event/type_Liboevent.html
diff -ruN ocaml-event.bak/work/.PLIST.mktmp ocaml-event/work/.PLIST.mktmp
--- ocaml-event.bak/work/.PLIST.mktmp	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/.PLIST.mktmp	2009-11-30 00:00:33.000000000 +0300
@@ -0,0 +1,29 @@
+share/examples/ocaml-event/Makefile
+share/examples/ocaml-event/fifo_example.ml
+share/examples/ocaml-event/http_server.ml
+share/examples/ocaml-event/signal_example.ml
+lib/ocaml/liboevent.a
+lib/ocaml/liboevent.cmxa
+lib/ocaml/libmloevent.a
+lib/ocaml/liboevent.cma
+lib/ocaml/liboevent.mli
+lib/ocaml/liboevent.cmi
+lib/ocaml/stublibs/dllmloevent.so
+ at unexec rmdir %D/lib/ocaml/stublibs 2>/dev/null || true
+ at unexec rmdir %D/lib/ocaml 2>/dev/null || true
+ at dirrm share/examples/ocaml-event
+share/doc/ocaml-event/Liboevent.html
+share/doc/ocaml-event/README
+share/doc/ocaml-event/index.html
+share/doc/ocaml-event/index_attributes.html
+share/doc/ocaml-event/index_class_types.html
+share/doc/ocaml-event/index_classes.html
+share/doc/ocaml-event/index_exceptions.html
+share/doc/ocaml-event/index_methods.html
+share/doc/ocaml-event/index_module_types.html
+share/doc/ocaml-event/index_modules.html
+share/doc/ocaml-event/index_types.html
+share/doc/ocaml-event/index_values.html
+share/doc/ocaml-event/style.css
+share/doc/ocaml-event/type_Liboevent.html
+ at dirrm share/doc/ocaml-event
diff -ruN ocaml-event.bak/work/.PLIST.objdump ocaml-event/work/.PLIST.objdump
--- ocaml-event.bak/work/.PLIST.objdump	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/.PLIST.objdump	2009-11-30 00:00:35.000000000 +0300
@@ -0,0 +1,40 @@
+In archive /usr/local/lib/ocaml/liboevent.a:
+
+liboevent.o:     file format elf64-x86-64
+
+In archive /usr/local/lib/ocaml/libmloevent.a:
+
+event_stubs.o:     file format elf64-x86-64
+
+
+/usr/local/lib/ocaml/stublibs/dllmloevent.so:     file format elf64-x86-64
+
+DYNAMIC RELOCATION RECORDS
+OFFSET           TYPE              VALUE 
+0000000000101440 R_X86_64_RELATIVE  *ABS*+0x0000000000101440
+0000000000101448 R_X86_64_RELATIVE  *ABS*+0x0000000000101898
+0000000000101460 R_X86_64_RELATIVE  *ABS*+0x00000000000013a3
+0000000000101468 R_X86_64_RELATIVE  *ABS*+0x00000000000012e3
+0000000000101470 R_X86_64_RELATIVE  *ABS*+0x0000000000000e48
+0000000000101478 R_X86_64_RELATIVE  *ABS*+0x0000000000000e5b
+0000000000101940 R_X86_64_GLOB_DAT  caml_local_roots
+0000000000101948 R_X86_64_GLOB_DAT  __cxa_finalize
+0000000000101950 R_X86_64_GLOB_DAT  _Jv_RegisterClasses
+00000000001018c0 R_X86_64_JUMP_SLOT  event_loop
+00000000001018c8 R_X86_64_JUMP_SLOT  caml_callback3
+00000000001018d0 R_X86_64_JUMP_SLOT  caml_named_value
+00000000001018d8 R_X86_64_JUMP_SLOT  event_dispatch
+00000000001018e0 R_X86_64_JUMP_SLOT  __cxa_finalize
+00000000001018e8 R_X86_64_JUMP_SLOT  caml_stat_free
+00000000001018f0 R_X86_64_JUMP_SLOT  memset
+00000000001018f8 R_X86_64_JUMP_SLOT  caml_alloc_custom
+0000000000101900 R_X86_64_JUMP_SLOT  event_init
+0000000000101908 R_X86_64_JUMP_SLOT  event_add
+0000000000101910 R_X86_64_JUMP_SLOT  caml_stat_alloc
+0000000000101918 R_X86_64_JUMP_SLOT  event_del
+0000000000101920 R_X86_64_JUMP_SLOT  event_pending
+0000000000101928 R_X86_64_JUMP_SLOT  caml_invalid_argument
+0000000000101930 R_X86_64_JUMP_SLOT  event_set
+0000000000101938 R_X86_64_JUMP_SLOT  uerror
+
+
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/LICENCE ocaml-event/work/ocaml-event-0.6.0/LICENCE
--- ocaml-event.bak/work/ocaml-event-0.6.0/LICENCE	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/LICENCE	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,22 @@
+Copyright (c) 2002, 2003 by Maas-Maarten Zeeman
+
+The package ocaml-event is copyright by Maas-Maarten Zeeman.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this document and the ocaml-event software ("the Software"),
+to deal in the Software without restriction, including without
+limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+The Software is provided ``as is'', without warranty of any kind,
+express or implied, including but not limited to the warranties of
+merchantability, fitness for a particular purpose and noninfringement.
+In no event shall Maas-Maarten Zeeman be liable for any claim, damages
+or other liability, whether in an action of contract, tort or
+otherwise, arising from, out of or in connection with the Software or
+the use or other dealings in the software.
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/META ocaml-event/work/ocaml-event-0.6.0/META
--- ocaml-event.bak/work/ocaml-event-0.6.0/META	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/META	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,7 @@
+name = "event"
+version = "0.5.0"
+description = "OCaml wrapper for libevent"
+requires = "unix"
+archive(byte) = "libevent.cma"
+archive(native) = "libevent.cmxa"
+linkopts = ""
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/Makefile ocaml-event/work/ocaml-event-0.6.0/Makefile
--- ocaml-event.bak/work/ocaml-event-0.6.0/Makefile	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/Makefile	2009-11-29 23:55:29.000000000 +0300
@@ -0,0 +1,100 @@
+#
+# $Id: Makefile,v 1.2 2009-11-26 08:49:02 maas Exp $ 
+#
+
+# Change this to match your libevent installation.
+EVENT_LIB=-levent
+EVENT_LIBDIR=/usr/local/lib
+EVENT_INCDIR=/usr/local/include
+
+NAME=liboevent
+OBJECTS=liboevent.cmo
+XOBJECTS=$(OBJECTS:.cmo=.cmx)
+C_OBJECTS=event_stubs.o
+
+ARCHIVE=$(NAME).cma
+XARCHIVE=$(ARCHIVE:.cma=.cmxa)
+CARCHIVE_NAME=mloevent
+CARCHIVE=lib$(CARCHIVE_NAME).a
+
+# Flags for the C compiler.
+CFLAGS=-O2 -fno-strict-aliasing -pipe -march=nocona -I$(EVENT_INCDIR)
+
+OCAMLC=ocamlc
+OCAMLOPT=ocamlopt
+OCAMLDEP=ocamldep
+OCAMLMKLIB=ocamlmklib 
+OCAMLDOC=ocamldoc
+OCAMLFIND=ocamlfind
+
+.PHONY: all
+all: $(ARCHIVE)
+.PHONY: allopt
+allopt:  $(XARCHIVE)
+
+depend: *.c *.ml *.mli
+	gcc -MM *.c > depend	
+	$(OCAMLDEP) *.mli *.ml >> depend
+
+## Library creation
+$(CARCHIVE): $(C_OBJECTS)
+	$(OCAMLMKLIB) -oc $(CARCHIVE_NAME) $(C_OBJECTS) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+$(ARCHIVE): $(CARCHIVE) $(OBJECTS)
+	$(OCAMLMKLIB) -o $(NAME) $(OBJECTS) -oc $(CARCHIVE_NAME) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+$(XARCHIVE): $(CARCHIVE) $(XOBJECTS)
+	$(OCAMLMKLIB) -o $(NAME) $(XOBJECTS) -oc $(CARCHIVE_NAME) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+
+## Installation
+.PHONY: install
+install: all
+	{ test ! -f $(XARCHIVE) || extra="$(XARCHIVE) $(NAME).a"; }; \
+	$(OCAMLFIND) install $(NAME) META $(NAME).cmi $(NAME).mli $(ARCHIVE) \
+	dll$(CARCHIVE_NAME).so lib$(CARCHIVE_NAME).a $$extra
+
+.PHONY: uninstall
+uninstall:
+	$(OCAMLFIND) remove $(NAME)
+
+## Documentation
+.PHONY: doc
+doc: FORCE
+	cd doc; $(OCAMLDOC) -html -I .. ../$(NAME).mli
+
+## Testing
+.PHONY: testall
+testall: test testopt
+.PHONY: test
+test: unittest 	
+	./unittest
+.PHONY: testopt
+testopt: unittest.opt
+	./unittest.opt
+unittest: all unittest.ml
+	$(OCAMLFIND) ocamlc -o unittest -package oUnit -cclib -L. -linkpkg \
+	$(ARCHIVE) unittest.ml
+unittest.opt: allopt unittest.ml
+	$(OCAMLFIND) ocamlopt -o unittest.opt -package oUnit -cclib -L. -linkpkg \
+	$(XARCHIVE) unittest.ml
+
+## Cleaning up
+.PHONY: clean
+clean::
+	rm -f *~ *.cm* *.o *.a *.so doc/*.html doc/*.css depend \
+	unittest unittest.opt
+
+FORCE:
+
+.SUFFIXES: .ml .mli .cmo .cmi .cmx
+
+.mli.cmi:
+	$(OCAMLC) -c $(COMPFLAGS) $<
+.ml.cmo:
+	$(OCAMLC) -c $(COMPLAGS) -nolabels $<
+.ml.cmx:
+	$(OCAMLOPT) -c $(COMPFLAGS) -nolabels $<
+.c.o:
+	$(OCAMLC) -c -ccopt "$(CFLAGS)" $<
+
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/Makefile.bak ocaml-event/work/ocaml-event-0.6.0/Makefile.bak
--- ocaml-event.bak/work/ocaml-event-0.6.0/Makefile.bak	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/Makefile.bak	2009-11-29 23:55:29.000000000 +0300
@@ -0,0 +1,100 @@
+#
+# $Id: Makefile,v 1.2 2009-11-26 08:49:02 maas Exp $ 
+#
+
+# Change this to match your libevent installation.
+EVENT_LIB=-levent
+EVENT_LIBDIR=/usr/local/lib
+EVENT_INCDIR=/usr/local/include
+
+NAME=liboevent
+OBJECTS=liboevent.cmo
+XOBJECTS=$(OBJECTS:.cmo=.cmx)
+C_OBJECTS=event_stubs.o
+
+ARCHIVE=$(NAME).cma
+XARCHIVE=$(ARCHIVE:.cma=.cmxa)
+CARCHIVE_NAME=mloevent
+CARCHIVE=lib$(CARCHIVE_NAME).a
+
+# Flags for the C compiler.
+CFLAGS=-DFULL_UNROLL -O2 -I$(EVENT_INCDIR)
+
+OCAMLC=ocamlc
+OCAMLOPT=ocamlopt
+OCAMLDEP=ocamldep
+OCAMLMKLIB=ocamlmklib 
+OCAMLDOC=ocamldoc
+OCAMLFIND=ocamlfind
+
+.PHONY: all
+all: $(ARCHIVE)
+.PHONY: allopt
+allopt:  $(XARCHIVE)
+
+depend: *.c *.ml *.mli
+	gcc -MM *.c > depend	
+	$(OCAMLDEP) *.mli *.ml >> depend
+
+## Library creation
+$(CARCHIVE): $(C_OBJECTS)
+	$(OCAMLMKLIB) -oc $(CARCHIVE_NAME) $(C_OBJECTS) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+$(ARCHIVE): $(CARCHIVE) $(OBJECTS)
+	$(OCAMLMKLIB) -o $(NAME) $(OBJECTS) -oc $(CARCHIVE_NAME) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+$(XARCHIVE): $(CARCHIVE) $(XOBJECTS)
+	$(OCAMLMKLIB) -o $(NAME) $(XOBJECTS) -oc $(CARCHIVE_NAME) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+
+## Installation
+.PHONY: install
+install: all
+	{ test ! -f $(XARCHIVE) || extra="$(XARCHIVE) $(NAME).a"; }; \
+	$(OCAMLFIND) install $(NAME) META $(NAME).cmi $(NAME).mli $(ARCHIVE) \
+	dll$(CARCHIVE_NAME).so lib$(CARCHIVE_NAME).a $$extra
+
+.PHONY: uninstall
+uninstall:
+	$(OCAMLFIND) remove $(NAME)
+
+## Documentation
+.PHONY: doc
+doc: FORCE
+	cd doc; $(OCAMLDOC) -html -I .. ../$(NAME).mli
+
+## Testing
+.PHONY: testall
+testall: test testopt
+.PHONY: test
+test: unittest 	
+	./unittest
+.PHONY: testopt
+testopt: unittest.opt
+	./unittest.opt
+unittest: all unittest.ml
+	$(OCAMLFIND) ocamlc -o unittest -package oUnit -cclib -L. -linkpkg \
+	$(ARCHIVE) unittest.ml
+unittest.opt: allopt unittest.ml
+	$(OCAMLFIND) ocamlopt -o unittest.opt -package oUnit -cclib -L. -linkpkg \
+	$(XARCHIVE) unittest.ml
+
+## Cleaning up
+.PHONY: clean
+clean::
+	rm -f *~ *.cm* *.o *.a *.so doc/*.html doc/*.css depend \
+	unittest unittest.opt
+
+FORCE:
+
+.SUFFIXES: .ml .mli .cmo .cmi .cmx
+
+.mli.cmi:
+	$(OCAMLC) -c $(COMPFLAGS) $<
+.ml.cmo:
+	$(OCAMLC) -c $(COMPLAGS) -nolabels $<
+.ml.cmx:
+	$(OCAMLOPT) -c $(COMPFLAGS) -nolabels $<
+.c.o:
+	$(OCAMLC) -c -ccopt "$(CFLAGS)" $<
+
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/Makefile.orig ocaml-event/work/ocaml-event-0.6.0/Makefile.orig
--- ocaml-event.bak/work/ocaml-event-0.6.0/Makefile.orig	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/Makefile.orig	2009-11-26 11:49:02.000000000 +0300
@@ -0,0 +1,101 @@
+#
+# $Id: Makefile,v 1.2 2009-11-26 08:49:02 maas Exp $ 
+#
+
+# Change this to match your libevent installation.
+EVENT_LIB=-levent
+EVENT_LIBDIR=/usr/local/lib
+EVENT_INCDIR=/usr/local/include
+
+NAME=liboevent
+OBJECTS=liboevent.cmo
+XOBJECTS=$(OBJECTS:.cmo=.cmx)
+C_OBJECTS=event_stubs.o
+
+ARCHIVE=$(NAME).cma
+XARCHIVE=$(ARCHIVE:.cma=.cmxa)
+CARCHIVE_NAME=mloevent
+CARCHIVE=lib$(CARCHIVE_NAME).a
+
+# Flags for the C compiler.
+CFLAGS=-DFULL_UNROLL -O2 -I$(EVENT_INCDIR)
+
+OCAMLC=ocamlc
+OCAMLOPT=ocamlopt
+OCAMLDEP=ocamldep
+OCAMLMKLIB=ocamlmklib 
+OCAMLDOC=ocamldoc
+OCAMLFIND=ocamlfind
+
+.PHONY: all
+all: $(ARCHIVE)
+.PHONY: allopt
+allopt:  $(XARCHIVE)
+
+depend: *.c *.ml *.mli
+	gcc -MM *.c > depend	
+	$(OCAMLDEP) *.mli *.ml >> depend
+
+## Library creation
+$(CARCHIVE): $(C_OBJECTS)
+	$(OCAMLMKLIB) -oc $(CARCHIVE_NAME) $(C_OBJECTS) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+$(ARCHIVE): $(CARCHIVE) $(OBJECTS)
+	$(OCAMLMKLIB) -o $(NAME) $(OBJECTS) -oc $(CARCHIVE_NAME) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+$(XARCHIVE): $(CARCHIVE) $(XOBJECTS)
+	$(OCAMLMKLIB) -o $(NAME) $(XOBJECTS) -oc $(CARCHIVE_NAME) \
+	-L$(EVENT_LIBDIR) $(EVENT_LIB)
+
+## Installation
+.PHONY: install
+install: all
+	{ test ! -f $(XARCHIVE) || extra="$(XARCHIVE) $(NAME).a"; }; \
+	$(OCAMLFIND) install $(NAME) META $(NAME).cmi $(NAME).mli $(ARCHIVE) \
+	dll$(CARCHIVE_NAME).so lib$(CARCHIVE_NAME).a $$extra
+
+.PHONY: uninstall
+uninstall:
+	$(OCAMLFIND) remove $(NAME)
+
+## Documentation
+.PHONY: doc
+doc: FORCE
+	cd doc; $(OCAMLDOC) -html -I .. ../$(NAME).mli
+
+## Testing
+.PHONY: testall
+testall: test testopt
+.PHONY: test
+test: unittest 	
+	./unittest
+.PHONY: testopt
+testopt: unittest.opt
+	./unittest.opt
+unittest: all unittest.ml
+	$(OCAMLFIND) ocamlc -o unittest -package oUnit -cclib -L. -linkpkg \
+	$(ARCHIVE) unittest.ml
+unittest.opt: allopt unittest.ml
+	$(OCAMLFIND) ocamlopt -o unittest.opt -package oUnit -cclib -L. -linkpkg \
+	$(XARCHIVE) unittest.ml
+
+## Cleaning up
+.PHONY: clean
+clean::
+	rm -f *~ *.cm* *.o *.a *.so doc/*.html doc/*.css depend \
+	unittest unittest.opt
+
+FORCE:
+
+.SUFFIXES: .ml .mli .cmo .cmi .cmx
+
+.mli.cmi:
+	$(OCAMLC) -c $(COMPFLAGS) $<
+.ml.cmo:
+	$(OCAMLC) -c $(COMPLAGS) -nolabels $<
+.ml.cmx:
+	$(OCAMLOPT) -c $(COMPFLAGS) -nolabels $<
+.c.o:
+	$(OCAMLC) -c -ccopt "$(CFLAGS)" $<
+
+include depend
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/README ocaml-event/work/ocaml-event-0.6.0/README
--- ocaml-event.bak/work/ocaml-event-0.6.0/README	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/README	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,46 @@
+		       The ocaml-event library
+
+Overview
+
+  Ocaml-Expat is a wrapper for the libevent API. The libevent API
+  provides a mechanism to execute a callback function when a specific
+  event occurs on a file descriptor or after a timeout has been
+  reached. Furthermore, libevent also support callbacks due to signals
+  or regular timeouts. Libevent is meant to replace the event loop
+  found in event driven network servers. An application just needs to
+  call event_dispatch() and then adds or removes events dynamically
+  without having to change the event loop. This wrapper makes the
+  libevent library available for ocaml programmers.
+
+Installation
+
+  - Download, compile, and install libevent. 
+    See http://www.monkey.org/~provos/libevent/
+
+  - Edit the variables at the beginning of the Makefile to reflect the
+    location where libevent is installed on your system. 
+
+  - Do make depend; make all	
+
+  - If the Objective Caml native-code compiler is available on your
+    platform (look for the "ocamlopt" executable), do "make allopt".
+
+  - To generate the documentation, do "make doc"
+
+  - (Optional) To test the library, do "make test". This requires the
+    installation of OUnit.
+
+  - (Optional) To test the library compiled with ocamlopt and ocamlc,
+    do "make testall". This requires the installation of OUnit.
+
+  - Become super-user if necessary and do "make install".  This
+    installs the library in the standard Objective Caml library
+    directory.
+  
+Documentation
+
+  See the HTML documentation in doc/index.html
+
+References
+
+  libevent::<http://www.monkey.org/~provos/libevent>
Files ocaml-event.bak/work/ocaml-event-0.6.0/dllmloevent.so and ocaml-event/work/ocaml-event-0.6.0/dllmloevent.so differ
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/Liboevent.html ocaml-event/work/ocaml-event-0.6.0/doc/Liboevent.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/Liboevent.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/Liboevent.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,141 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link rel="Up" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><link title="Basic Libevent Operations" rel="Section" href="#5_BasicLibeventOperations">
+<link title="Process Events" rel="Section" href="#5_ProcessEvents">
+<title>Liboevent</title>
+</head>
+<body>
+<div class="navbar"> <a href="index.html">Up</a>
+ </div>
+<center><h1>Module <a href="type_Liboevent.html">Liboevent</a></h1></center>
+<br>
+<pre><span class="keyword">module</span> Liboevent: <code class="code">sig</code> <a href="Liboevent.html">..</a> <code class="code">end</code></pre>The Ocaml Event library provides an interface to the event API.
+<p>
+
+    The event API provides a mechanism to execute a function when a
+    specific event on a file descriptor occurs or after a given time
+    has passed.
+<p>
+
+    This library is a wrapper of the libevent API made by Nils
+    Provos. For more information about this library see:
+    http://www.monkey.org/~provos/libevent. 
+<p>
+
+    Currently, libevent supports kqueue(2), select(2), poll(2) and
+    epoll(4). Support for /dev/poll is planned.<br>
+<b>Author(s):</b> Maas-Maarten Zeeman<br>
+<hr width="100%">
+<pre><span class="keyword">type</span> <a name="TYPEevent"></a><code class="type"></code>event </pre>
+<div class="info">
+The type of events<br>
+</div>
+
+<br><code><span class="keyword">type</span> <a name="TYPEevent_flags"></a><code class="type"></code>event_flags = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">TIMEOUT</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >A timeout occurred.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">READ</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >A read is possible.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">WRITE</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >A write operation is possible.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">SIGNAL</span></code></td>
+<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" >A signal occurred.</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
+</tr></table>
+
+<div class="info">
+The possible event types<br>
+</div>
+
+<pre><span class="keyword">type</span> <a name="TYPEevent_callback"></a><code class="type"></code>event_callback = <code class="type">Unix.file_descr -> <a href="Liboevent.html#TYPEevent_flags">event_flags</a> -> unit</code> </pre>
+<div class="info">
+The type of event callbacks<br>
+</div>
+
+<br>
+<a name="5_BasicLibeventOperations"></a>
+<h5>Basic Libevent Operations</h5><br>
+<pre><span class="keyword">val</span> <a name="VALcreate"></a>create : <code class="type">unit -> <a href="Liboevent.html#TYPEevent">event</a></code></pre><div class="info">
+Create a new empty event<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALfd"></a>fd : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -> Unix.file_descr</code></pre><div class="info">
+<code class="code">fd event</code> returns the file descriptor associated with the event<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALsignal"></a>signal : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -> int</code></pre><div class="info">
+<code class="code">signal event</code> returns the signal associated with the event<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALset"></a>set : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -><br>       Unix.file_descr -><br>       <a href="Liboevent.html#TYPEevent_flags">event_flags</a> list -><br>       persist:bool -> <a href="Liboevent.html#TYPEevent_callback">event_callback</a> -> unit</code></pre><div class="info">
+<code class="code">set event fd type persist callback</code> initializes the event. The
+    flag <code class="code">persist</code> makes an event persitent until <code class="code">Libevent.del</code> is
+    called.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALset_signal"></a>set_signal : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -><br>       signal:int -> persist:bool -> <a href="Liboevent.html#TYPEevent_callback">event_callback</a> -> unit</code></pre><div class="info">
+<code class="code">set_signal event signal persist callback</code> initializes the event. The
+    flag <code class="code">persist</code> makes an event persistent unit <code class="code">Libevent.del</code> is
+    called.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALadd"></a>add : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -> float option -> unit</code></pre><div class="info">
+<code class="code">add event timeout</code> adds the <code class="code">event</code> and schedules the execution
+    of the function specified with <code class="code">Libevent.set</code>, or in at least the
+    time specified in the <code class="code">timeout</code>. If <code class="code">timeout</code> is <code class="code">None</code>, no
+    timeout occures, and the function will only be called if a
+    matching event occurs on the file descriptor.<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALdel"></a>del : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -> unit</code></pre><div class="info">
+Del the event<br>
+</div>
+<pre><span class="keyword">val</span> <a name="VALpending"></a>pending : <code class="type"><a href="Liboevent.html#TYPEevent">event</a> -> <a href="Liboevent.html#TYPEevent_flags">event_flags</a> list -> bool</code></pre><br>
+<a name="5_ProcessEvents"></a>
+<h5>Process Events</h5><br>
+<pre><span class="keyword">val</span> <a name="VALdispatch"></a>dispatch : <code class="type">unit -> unit</code></pre><div class="info">
+In order to process events, an application needs to call dispatch. This 
+ *  function only returns on error, and should replace the event core of the 
+ *  application<br>
+</div>
+<br><code><span class="keyword">type</span> <a name="TYPEloop_flags"></a><code class="type"></code>loop_flags = </code><table class="typetable">
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">ONCE</span></code></td>
+
+</tr>
+<tr>
+<td align="left" valign="top" >
+<code><span class="keyword">|</span></code></td>
+<td align="left" valign="top" >
+<code><span class="constructor">NONBLOCK</span></code></td>
+
+</tr></table>
+
+
+<pre><span class="keyword">val</span> <a name="VALloop"></a>loop : <code class="type"><a href="Liboevent.html#TYPEloop_flags">loop_flags</a> -> unit</code></pre><div class="info">
+Provides an interface for single pass execution of pending events<br>
+</div>
+</body></html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/README ocaml-event/work/ocaml-event-0.6.0/doc/README
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/README	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/README	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1 @@
+To create the documentation run 'make doc'
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index.html ocaml-event/work/ocaml-event-0.6.0/doc/index.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title></title>
+</head>
+<body>
+<center><h1></h1></center>
+<a href="index_types.html">Index of types</a><br>
+<a href="index_values.html">Index of values</a><br>
+<a href="index_modules.html">Index of modules</a><br>
+<br/><br>
+<table class="indextable">
+<tr><td><a href="Liboevent.html">Liboevent</a></td><td><div class="info">
+The Ocaml Event library provides an interface to the event API.
+</div>
+</td></tr>
+</table>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_attributes.html ocaml-event/work/ocaml-event-0.6.0/doc/index_attributes.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_attributes.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_attributes.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,16 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of class attributes</title>
+</head>
+<body>
+<center><h1>Index of class attributes</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_class_types.html ocaml-event/work/ocaml-event-0.6.0/doc/index_class_types.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_class_types.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_class_types.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,16 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of class types</title>
+</head>
+<body>
+<center><h1>Index of class types</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_classes.html ocaml-event/work/ocaml-event-0.6.0/doc/index_classes.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_classes.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_classes.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,16 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of classes</title>
+</head>
+<body>
+<center><h1>Index of classes</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_exceptions.html ocaml-event/work/ocaml-event-0.6.0/doc/index_exceptions.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_exceptions.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_exceptions.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,16 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of exceptions</title>
+</head>
+<body>
+<center><h1>Index of exceptions</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_methods.html ocaml-event/work/ocaml-event-0.6.0/doc/index_methods.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_methods.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_methods.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,16 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of class methods</title>
+</head>
+<body>
+<center><h1>Index of class methods</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_module_types.html ocaml-event/work/ocaml-event-0.6.0/doc/index_module_types.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_module_types.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_module_types.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,16 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of module types</title>
+</head>
+<body>
+<center><h1>Index of module types</h1></center>
+<table>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_modules.html ocaml-event/work/ocaml-event-0.6.0/doc/index_modules.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_modules.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_modules.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,22 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of modules</title>
+</head>
+<body>
+<center><h1>Index of modules</h1></center>
+<table>
+<tr><td align="left"><br>L</td></tr>
+<tr><td><a href="Liboevent.html">Liboevent</a> </td>
+<td><div class="info">
+The Ocaml Event library provides an interface to the event API.
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_types.html ocaml-event/work/ocaml-event-0.6.0/doc/index_types.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_types.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_types.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,35 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of types</title>
+</head>
+<body>
+<center><h1>Index of types</h1></center>
+<table>
+<tr><td align="left"><br>E</td></tr>
+<tr><td><a href="Liboevent.html#TYPEevent">event</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+The type of events
+</div>
+</td></tr>
+<tr><td><a href="Liboevent.html#TYPEevent_callback">event_callback</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+The type of event callbacks
+</div>
+</td></tr>
+<tr><td><a href="Liboevent.html#TYPEevent_flags">event_flags</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+The possible event types
+</div>
+</td></tr>
+<tr><td align="left"><br>L</td></tr>
+<tr><td><a href="Liboevent.html#TYPEloop_flags">loop_flags</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td></td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_values.html ocaml-event/work/ocaml-event-0.6.0/doc/index_values.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/index_values.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/index_values.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,72 @@
+<html>
+<head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Index of values</title>
+</head>
+<body>
+<center><h1>Index of values</h1></center>
+<table>
+<tr><td align="left"><br>A</td></tr>
+<tr><td><a href="Liboevent.html#VALadd">add</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+<code class="code">add event timeout</code> adds the <code class="code">event</code> and schedules the execution
+    of the function specified with <code class="code">Libevent.set</code>, or in at least the
+    time specified in the <code class="code">timeout</code>.
+</div>
+</td></tr>
+<tr><td align="left"><br>C</td></tr>
+<tr><td><a href="Liboevent.html#VALcreate">create</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+Create a new empty event
+</div>
+</td></tr>
+<tr><td align="left"><br>D</td></tr>
+<tr><td><a href="Liboevent.html#VALdel">del</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+Del the event
+</div>
+</td></tr>
+<tr><td><a href="Liboevent.html#VALdispatch">dispatch</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+In order to process events, an application needs to call dispatch.
+</div>
+</td></tr>
+<tr><td align="left"><br>F</td></tr>
+<tr><td><a href="Liboevent.html#VALfd">fd</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+<code class="code">fd event</code> returns the file descriptor associated with the event
+</div>
+</td></tr>
+<tr><td align="left"><br>L</td></tr>
+<tr><td><a href="Liboevent.html#VALloop">loop</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+Provides an interface for single pass execution of pending events
+</div>
+</td></tr>
+<tr><td align="left"><br>P</td></tr>
+<tr><td><a href="Liboevent.html#VALpending">pending</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td></td></tr>
+<tr><td align="left"><br>S</td></tr>
+<tr><td><a href="Liboevent.html#VALset">set</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+<code class="code">set event fd type persist callback</code> initializes the event.
+</div>
+</td></tr>
+<tr><td><a href="Liboevent.html#VALset_signal">set_signal</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+<code class="code">set_signal event signal persist callback</code> initializes the event.
+</div>
+</td></tr>
+<tr><td><a href="Liboevent.html#VALsignal">signal</a> [<a href="Liboevent.html">Liboevent</a>]</td>
+<td><div class="info">
+<code class="code">signal event</code> returns the signal associated with the event
+</div>
+</td></tr>
+</table><br>
+</body>
+</html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/style.css ocaml-event/work/ocaml-event-0.6.0/doc/style.css
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/style.css	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/style.css	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,33 @@
+a:visited {color : #416DFF; text-decoration : none; }
+a:link {color : #416DFF; text-decoration : none;}
+a:hover {color : Red; text-decoration : none; background-color: #5FFF88}
+a:active {color : Red; text-decoration : underline; }
+.keyword { font-weight : bold ; color : Red }
+.keywordsign { color : #C04600 }
+.superscript { font-size : 4 }
+.subscript { font-size : 4 }
+.comment { color : Green }
+.constructor { color : Blue }
+.type { color : #5C6585 }
+.string { color : Maroon }
+.warning { color : Red ; font-weight : bold }
+.info { margin-left : 3em; margin-right : 3em }
+.param_info { margin-top: 4px; margin-left : 3em; margin-right : 3em }
+.code { color : #465F91 ; }
+h1 { font-size : 20pt ; text-align: center; }
+h2 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90BDFF ;padding: 2px; }
+h3 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90DDFF ;padding: 2px; }
+h4 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90EDFF ;padding: 2px; }
+h5 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #90FDFF ;padding: 2px; }
+h6 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #C0FFFF ; padding: 2px; }
+div.h7 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #E0FFFF ; padding: 2px; }
+div.h8 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #F0FFFF ; padding: 2px; }
+div.h9 { font-size : 20pt ; border: 1px solid #000000; margin-top: 5px; margin-bottom: 2px;text-align: center; background-color: #FFFFFF ; padding: 2px; }
+.typetable { border-style : hidden }
+.indextable { border-style : hidden }
+.paramstable { border-style : hidden ; padding: 5pt 5pt}
+body { background-color : White }
+tr { background-color : White }
+td.typefieldcomment { background-color : #FFFFFF ; font-size: smaller ;}
+pre { margin-bottom: 4px }
+div.sig_block {margin-left: 2em}
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/doc/type_Liboevent.html ocaml-event/work/ocaml-event-0.6.0/doc/type_Liboevent.html
--- ocaml-event.bak/work/ocaml-event-0.6.0/doc/type_Liboevent.html	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/doc/type_Liboevent.html	2009-11-29 23:55:32.000000000 +0300
@@ -0,0 +1,32 @@
+<html><head>
+<link rel="stylesheet" href="style.css" type="text/css">
+<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
+<link rel="Start" href="index.html">
+<link title="Index of types" rel=Appendix href="index_types.html">
+<link title="Index of values" rel=Appendix href="index_values.html">
+<link title="Index of modules" rel=Appendix href="index_modules.html">
+<link title="Liboevent" rel="Chapter" href="Liboevent.html"><title>Liboevent</title>
+</head>
+<body>
+<code class="code"><span class="keyword">sig</span><br>
+  <span class="keyword">type</span> event<br>
+  <span class="keyword">type</span> event_flags = <span class="constructor">TIMEOUT</span> <span class="keywordsign">|</span> <span class="constructor">READ</span> <span class="keywordsign">|</span> <span class="constructor">WRITE</span> <span class="keywordsign">|</span> <span class="constructor">SIGNAL</span><br>
+  <span class="keyword">type</span> event_callback = <span class="constructor">Unix</span>.file_descr <span class="keywordsign">-></span> <span class="constructor">Liboevent</span>.event_flags <span class="keywordsign">-></span> unit<br>
+  <span class="keyword">val</span> create : unit <span class="keywordsign">-></span> <span class="constructor">Liboevent</span>.event<br>
+  <span class="keyword">val</span> fd : <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span> <span class="constructor">Unix</span>.file_descr<br>
+  <span class="keyword">val</span> signal : <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span> int<br>
+  <span class="keyword">val</span> set :<br>
+    <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span><br>
+    <span class="constructor">Unix</span>.file_descr <span class="keywordsign">-></span><br>
+    <span class="constructor">Liboevent</span>.event_flags list <span class="keywordsign">-></span><br>
+    persist:bool <span class="keywordsign">-></span> <span class="constructor">Liboevent</span>.event_callback <span class="keywordsign">-></span> unit<br>
+  <span class="keyword">val</span> set_signal :<br>
+    <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span><br>
+    signal:int <span class="keywordsign">-></span> persist:bool <span class="keywordsign">-></span> <span class="constructor">Liboevent</span>.event_callback <span class="keywordsign">-></span> unit<br>
+  <span class="keyword">val</span> add : <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span> float option <span class="keywordsign">-></span> unit<br>
+  <span class="keyword">val</span> del : <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span> unit<br>
+  <span class="keyword">val</span> pending : <span class="constructor">Liboevent</span>.event <span class="keywordsign">-></span> <span class="constructor">Liboevent</span>.event_flags list <span class="keywordsign">-></span> bool<br>
+  <span class="keyword">val</span> dispatch : unit <span class="keywordsign">-></span> unit<br>
+  <span class="keyword">type</span> loop_flags = <span class="constructor">ONCE</span> <span class="keywordsign">|</span> <span class="constructor">NONBLOCK</span><br>
+  <span class="keyword">val</span> loop : <span class="constructor">Liboevent</span>.loop_flags <span class="keywordsign">-></span> unit<br>
+<span class="keyword">end</span></code></body></html>
\ No newline at end of file
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/event_stubs.c ocaml-event/work/ocaml-event-0.6.0/event_stubs.c
--- ocaml-event.bak/work/ocaml-event-0.6.0/event_stubs.c	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/event_stubs.c	2009-11-26 11:41:10.000000000 +0300
@@ -0,0 +1,223 @@
+/************************************************************************/
+/* The OcamlEvent library                                               */
+/*                                                                      */
+/* Copyright 2002, 2003, 2004 Maas-Maarten Zeeman. All rights reserved. */
+/* See LICENCE for details.                                             */
+/************************************************************************/
+
+/* $Id: event_stubs.c,v 1.2 2009-11-26 08:41:10 maas Exp $ */
+
+/* Stub code to interface Ocaml with libevent */
+
+#include <sys/time.h>
+#include <stdlib.h>
+#include <event.h>
+#include <string.h>
+
+#include <caml/mlvalues.h>
+#include <caml/custom.h>
+#include <caml/alloc.h>
+#include <caml/memory.h>
+#include <caml/callback.h>
+#include <caml/fail.h>
+
+#define struct_event_val(v) (*(struct event**) Data_custom_val(v))
+#define Is_some(v) (Is_block(v))
+
+static value * event_cb_closure = NULL;
+
+/* use the error function from the Unix library */
+extern void uerror (char * cmdname, value arg) Noreturn;
+
+static void
+struct_event_finalize(value ve) 
+{
+  struct event *ev = struct_event_val(ve);
+  
+  if (event_initialized(ev)) {
+    event_del(ev);
+  }
+
+  stat_free(struct_event_val(ve));
+}
+
+static int 
+struct_event_compare(value v1, value v2) 
+{ 
+  struct event *p1 = struct_event_val(v1);
+  struct event *p2 = struct_event_val(v2);
+  if(p1 == p2) return 0;
+  if(p1 < p2) return -1; 
+  return 1;
+}
+
+static long
+struct_event_hash(value v)
+{
+  return (long) struct_event_val(v);
+}
+
+static struct custom_operations struct_event_ops = {
+  "struct event",
+  struct_event_finalize,
+  struct_event_compare,
+  struct_event_hash,
+  custom_serialize_default,
+  custom_deserialize_default
+};
+
+/* 
+ * This callback calls the ocaml event callback, which will in turn
+ * call the real ocaml callback.  
+ */
+static void
+event_cb(int fd, short type, void *arg) 
+{
+  callback3(*event_cb_closure, 
+	    Val_long((long) arg), Val_int(fd), Val_int(type));
+}
+
+static void
+set_struct_timeval(struct timeval *tv, value vfloat) 
+{
+  double timeout = Double_val(vfloat);
+  tv->tv_sec = (int) timeout;
+  tv->tv_usec = (int) (1e6 * (timeout - tv->tv_sec));
+}
+
+CAMLprim value
+oc_create_event(value unit) 
+{
+  CAMLparam0();
+  CAMLlocal1(ve);
+  struct event* ev = caml_stat_alloc(sizeof(struct event));
+  memset(ev, 0, sizeof(*ev));
+
+  ve = alloc_custom(&struct_event_ops, sizeof(struct event*), 0, 1);
+  *(struct event**) Data_custom_val(ve) = ev;
+
+  CAMLreturn(ve);
+}
+
+CAMLprim value
+oc_event_id(value vevent)
+{
+  CAMLparam0();
+  CAMLreturn(Val_long((long) struct_event_val(vevent)));
+}
+
+CAMLprim value
+oc_event_fd(value vevent)
+{
+  CAMLparam1(vevent);
+  CAMLreturn(Val_long(EVENT_FD(struct_event_val(vevent))));
+}
+
+CAMLprim value 
+oc_event_set(value vevent, value fd, value vevent_flag) 
+{ 
+  CAMLparam3(vevent, fd, vevent_flag); 
+
+  struct event *event = struct_event_val(vevent); 
+
+  event_set(event, Int_val(fd), Int_val(vevent_flag), 
+	    &event_cb, event); 
+
+  CAMLreturn(Val_unit); 
+} 
+
+CAMLprim value
+oc_event_add(value vevent, value vfloat_option) 
+{
+  CAMLparam2(vevent, vfloat_option);
+  struct event *event = struct_event_val(vevent); 
+  struct timeval timeval;
+  struct timeval *tv = NULL;
+
+  if Is_some(vfloat_option) {
+    set_struct_timeval(&timeval, Field(vfloat_option, 0));
+    tv = &timeval;
+  } 
+  
+  if((0 != event_add(event, tv))) {
+    uerror("event_add", vevent);
+  }
+
+  CAMLreturn(Val_unit);
+}
+
+CAMLprim value
+oc_event_del(value vevent) 
+{
+  CAMLparam0();
+  struct event *event = struct_event_val(vevent); 
+
+  event_del(event);
+
+  CAMLreturn(Val_unit);
+}
+
+CAMLprim value
+oc_event_pending(value vevent, value vtype, value vfloat_option) 
+{
+  CAMLparam3(vevent, vtype, vfloat_option);
+  struct event *event = struct_event_val(vevent); 
+  struct timeval timeval;
+  struct timeval *tv = NULL;
+  
+  if Is_some(vfloat_option) {
+    set_struct_timeval(&timeval, Field(vfloat_option, 0));
+    tv = &timeval;
+  } 
+
+  event_pending(event, Int_val(vtype), tv);
+
+  CAMLreturn(Val_unit);
+}
+
+CAMLprim value
+oc_event_loop(value vloop_flag)
+{
+  CAMLparam1(vloop_flag);
+
+  if((-1 == event_loop(Int_val(vloop_flag)))) {
+    uerror("event_dispatch", vloop_flag);
+  }
+  
+  CAMLreturn(Val_unit);
+}
+
+
+CAMLprim value
+oc_event_dispatch(value unit) 
+{
+  CAMLparam1(unit);
+
+  if((-1 == event_dispatch())) {
+    uerror("event_dispatch", unit);
+  }
+
+  CAMLreturn(Val_unit);
+}
+
+/*
+ * Initialize the event library
+ */
+CAMLprim value
+oc_event_init(value unit)
+{
+  CAMLparam1(unit);
+  
+  /* setup the event callback closure if needed */
+  if(event_cb_closure == NULL) {
+    event_cb_closure = caml_named_value("event_cb");
+    if(event_cb_closure == NULL) {
+      invalid_argument("Callback event_cv not initialized.");
+    }
+  }
+
+  /* and don't forget to initialize libevent */
+  event_init();
+
+  CAMLreturn(Val_unit);
+}
Files ocaml-event.bak/work/ocaml-event-0.6.0/event_stubs.o and ocaml-event/work/ocaml-event-0.6.0/event_stubs.o differ
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/examples/Makefile ocaml-event/work/ocaml-event-0.6.0/examples/Makefile
--- ocaml-event.bak/work/ocaml-event-0.6.0/examples/Makefile	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/examples/Makefile	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,23 @@
+#
+# Simple makefile to build the example programs. The event library
+# must be installed first.
+#
+
+all: fifo_example signal_example http_server
+
+fifo_example: fifo_example.ml
+	ocamlfind ocamlc -o fifo_example -package libevent -linkpkg \
+	fifo_example.ml
+
+signal_example: signal_example.ml
+	ocamlfind ocamlc -o signal_example -package libevent -linkpkg \
+	signal_example.ml
+
+http_server: http_server.ml
+	ocamlfind ocamlc -o http_server -package libevent -linkpkg \
+	http_server.ml
+
+.PHONY: clean
+clean::
+	rm -f *~ *.cm* *.o fifo_example signal_example http_server
+
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/examples/fifo_example.ml ocaml-event/work/ocaml-event-0.6.0/examples/fifo_example.ml
--- ocaml-event.bak/work/ocaml-event-0.6.0/examples/fifo_example.ml	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/examples/fifo_example.ml	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,38 @@
+(*
+ * Small example program
+ *)
+
+open Libevent
+
+let fifo_read event fd event_type =
+  let buflen = 255 in
+  let buf = String.create buflen in 
+  match Unix.read fd buf 0 buflen with
+    0 -> 
+      Printf.printf "Connection closed\n";
+      flush stdout
+  | n -> 
+      Printf.printf "Read: %s\n" (String.sub buf 0 n);
+      flush stdout;
+
+      (* Reschedule this event *)
+      add event None
+
+let _ =
+  let fifo = "event.fifo" in
+
+  Unix.unlink fifo; 
+  Unix.mkfifo fifo 0o600;
+
+  let fifo_fd = Unix.openfile fifo [ Unix.O_RDWR; Unix.O_NONBLOCK ] 0 in
+  let evfifo = create () in
+
+  Printf.printf "Write date to: %s\n" fifo;
+  flush stdout;
+  
+  set evfifo fifo_fd [READ] false (fifo_read evfifo);
+  add evfifo None;
+
+  dispatch ()
+    
+
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/examples/http_server.ml ocaml-event/work/ocaml-event-0.6.0/examples/http_server.ml
--- ocaml-event.bak/work/ocaml-event-0.6.0/examples/http_server.ml	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/examples/http_server.ml	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,64 @@
+(* 
+ * Simple but fast HTTP Server 
+ *)
+
+let accept fd = 
+  let client_fd, client_addr = Unix.accept fd in  
+    Unix.set_nonblock client_fd;
+    client_fd, client_addr
+
+let http_server_cb buffer buflen fd event_type =
+  let client_fd, client_addr = accept fd in
+
+  let read_event = Libevent.create () in
+  let write_event = Libevent.create () in
+      
+  (* The http connection callback *)
+  let http_read_cb fd event_type =
+    let len = Unix.read fd buffer 0 buflen in
+
+    (* HTTP Request not parsed, does not even have to be complete yet.*)
+    let http_write_cb fd event_type = 
+      let response = "HTTP/1.0 200 OK\n\r" ^
+	"Server: Caml 1.0\r\n" ^
+	"\r\n" ^
+	"<html><h1>Hi There</h1>" ^
+	"<pre>" ^ (String.sub buffer 0 len) ^ "</pre>" ^ 
+        "</html"
+      in
+      let l = Unix.write fd response 0 (String.length response) in
+	Unix.close fd
+    in
+      Libevent.set write_event fd [Libevent.WRITE] false http_write_cb;
+      Libevent.add write_event None
+
+  in
+    Libevent.set read_event client_fd [Libevent.READ] false http_read_cb;
+    Libevent.add read_event None
+  
+let bind_server port = 
+  let fd = Unix.socket Unix.PF_INET Unix.SOCK_STREAM 0 in
+    Unix.set_nonblock fd; 
+    Unix.setsockopt fd Unix.SO_REUSEADDR true;
+    Unix.bind fd (Unix.ADDR_INET (Unix.inet_addr_any, port));
+    Unix.listen fd 5;
+    fd
+
+let _ =
+  Unix.set_nonblock Unix.stdout;
+  Unix.set_nonblock Unix.stderr;
+
+  let server_event = Libevent.create () in
+  let stdout_event = Libevent.create () in
+  let stderr_event = Libevent.create () in
+
+  let server_fd = bind_server 8080 in
+    
+  let buflen = 10240 in
+  let buffer = String.create buflen in 
+
+    Libevent.set server_event server_fd [Libevent.READ] true 
+      (http_server_cb buffer buflen);
+    Libevent.add server_event None;
+
+    Libevent.dispatch ();
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/examples/signal_example.ml ocaml-event/work/ocaml-event-0.6.0/examples/signal_example.ml
--- ocaml-event.bak/work/ocaml-event-0.6.0/examples/signal_example.ml	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/examples/signal_example.ml	2007-04-20 00:42:39.000000000 +0400
@@ -0,0 +1,32 @@
+(*
+ * Small example program
+ *)
+
+let signal_callback event called fd event_type =
+  (* Print information on the signal we received *)
+  Printf.printf "Got signal: %d\n" (Libevent.signal event);
+  flush stdout;
+ 
+  called := !called - 1;
+
+  if !called <= 0 then
+    Libevent.del event
+
+let _ =
+  let sigint = 2 in  
+
+  (* Create an event *)
+  let signal_event = Libevent.create () in
+
+  (* Set the sigint signal *)
+  Libevent.set_signal signal_event sigint true
+    (signal_callback signal_event (ref 2));
+
+  (* Add the signal to the event library *)
+  Libevent.add signal_event None;
+
+  Printf.printf "SIGINT me please!\n";
+  flush stdout;
+
+  (* Start the event dispatching mainloop *)
+  Libevent.dispatch ()
Files ocaml-event.bak/work/ocaml-event-0.6.0/libmloevent.a and ocaml-event/work/ocaml-event-0.6.0/libmloevent.a differ
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.a and ocaml-event/work/ocaml-event-0.6.0/liboevent.a differ
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.cma and ocaml-event/work/ocaml-event-0.6.0/liboevent.cma differ
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.cmi and ocaml-event/work/ocaml-event-0.6.0/liboevent.cmi differ
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.cmo and ocaml-event/work/ocaml-event-0.6.0/liboevent.cmo differ
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.cmx and ocaml-event/work/ocaml-event-0.6.0/liboevent.cmx differ
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.cmxa and ocaml-event/work/ocaml-event-0.6.0/liboevent.cmxa differ
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.ml ocaml-event/work/ocaml-event-0.6.0/liboevent.ml
--- ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.ml	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/liboevent.ml	2009-11-26 11:49:02.000000000 +0300
@@ -0,0 +1,108 @@
+(***********************************************************************)
+(* The OcamlEvent library                                              *)
+(*                                                                     *)
+(* Copyright 2002, 2003 Maas-Maarten Zeeman. All rights reserved. See  *) 
+(* LICENCE for details.                                                *)
+(***********************************************************************)
+
+(* $Id: liboevent.ml,v 1.1 2009-11-26 08:49:02 maas Exp $ *)
+type event
+
+type event_flags =
+    TIMEOUT 
+  | READ 
+  | WRITE
+  | SIGNAL 
+
+let int_of_event_type = function
+    TIMEOUT -> 0x01
+  | READ -> 0x02
+  | WRITE -> 0x04
+  | SIGNAL -> 0x08
+
+let event_type_of_int = function
+  | 1 -> TIMEOUT
+  | 2 -> READ
+  | 4 -> WRITE
+  | 8 -> SIGNAL
+  | _ -> raise (Invalid_argument "event_type")
+
+type event_callback = Unix.file_descr -> event_flags -> unit
+
+(* Use an internal hashtable to store the ocaml callbacks with the
+   event *)
+let table = Hashtbl.create 0
+
+(* Called by the c-stub, locate, and call the ocaml callback *)
+let event_cb event_id fd etype =
+  (Hashtbl.find table event_id) fd (event_type_of_int etype)
+  
+(* Create an event *)
+external create : unit -> event = "oc_create_event"
+
+(* Return the id of an event *)
+external event_id : event -> int = "oc_event_id"
+
+(* Return the signal associated with the event *)
+external signal : event -> int = "oc_event_fd"
+
+(* Return the fd associated with the event *)
+external fd : event -> Unix.file_descr = "oc_event_fd"
+
+(* Set an event (not exported) *)
+external cset_fd : event -> Unix.file_descr -> int -> unit = "oc_event_set"
+external cset_int : event -> int -> int -> unit = "oc_event_set"
+
+(* Event set *)
+let set event fd etype persist (cb : event_callback) =
+  let rec int_of_event_type_list flag = function
+      h::t -> int_of_event_type_list (flag lor (int_of_event_type h)) t
+    | [] -> flag
+  in
+  let flag = 
+    let f = int_of_event_type_list 0 etype in
+    if persist then
+      f lor 0x10
+    else
+      f
+  in
+  Hashtbl.add table (event_id event) cb;
+  cset_fd event fd flag
+
+let set_signal event signal persist (cb : event_callback) =
+  let signal_flag = (int_of_event_type SIGNAL) in
+  let flag = if persist then
+    signal_flag lor 0x10
+  else
+    signal_flag
+  in
+  Hashtbl.add table (event_id event) cb;
+  cset_int event signal flag
+
+(* Add an event *)
+external add : event -> float option -> unit = "oc_event_add"
+
+(* Del an event  *)
+external cdel : event -> unit = "oc_event_del"
+let del event =
+  Hashtbl.remove table (event_id event);
+  cdel event
+
+(* *)
+(* Not fully implemented yet *)
+external pending : event -> event_flags list -> bool = "oc_event_pending"
+
+(* Process events *)
+external dispatch : unit -> unit = "oc_event_dispatch"
+
+type loop_flags = ONCE | NONBLOCK
+external loop : loop_flags -> unit = "oc_event_loop"
+
+(* Initialize the event library *)
+external init : unit -> unit = "oc_event_init"
+let _ = 
+  Callback.register "event_cb" event_cb;
+  init ()
+
+
+
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.mli ocaml-event/work/ocaml-event-0.6.0/liboevent.mli
--- ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.mli	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/liboevent.mli	2009-11-26 11:59:15.000000000 +0300
@@ -0,0 +1,88 @@
+(***********************************************************************)
+(* The Ocaml Libevent library                                          *)
+(*                                                                     *)
+(* Copyright 2002, 2003, 2004 Maas-Maarten Zeeman. All rights          *) 
+(* reserved. See LICENCE for details.                                  *)       
+(***********************************************************************)
+
+
+(** The Ocaml Event library provides an interface to the event API.
+
+    The event API provides a mechanism to execute a function when a
+    specific event on a file descriptor occurs or after a given time
+    has passed.
+
+    This library is a wrapper of the libevent API made by Nils
+    Provos. For more information about this library see:
+    http://www.monkey.org/~provos/libevent. 
+
+    Currently, libevent supports kqueue(2), select(2), poll(2) and
+    epoll(4). Support for /dev/poll is planned.
+
+    @author Maas-Maarten Zeeman 
+*)
+
+(** The type of events *)
+type event
+
+(** The possible event types *)
+type event_flags = 
+    TIMEOUT (** A timeout occurred. *)
+  | READ    (** A read is possible. *)
+  | WRITE   (** A write operation is possible. *)
+  | SIGNAL  (** A signal occurred. *)
+
+type event_callback = Unix.file_descr -> event_flags -> unit
+(** The type of event callbacks *)
+
+(** {5 Basic Libevent Operations} *)
+
+val create : unit -> event
+(** Create a new empty event *)
+
+val fd : event -> Unix.file_descr
+(** [fd event] returns the file descriptor associated with the event *)
+
+val signal : event -> int
+(** [signal event] returns the signal associated with the event *)
+
+val set : event -> 
+  Unix.file_descr -> event_flags list -> persist:bool -> event_callback -> unit
+(** [set event fd type persist callback] initializes the event. The
+    flag [persist] makes an event persitent until {!Libevent.del} is
+    called. *)
+
+val set_signal : event ->
+  signal:int -> persist:bool -> event_callback -> unit
+(** [set_signal event signal persist callback] initializes the event. The
+    flag [persist] makes an event persistent unit {!Libevent.del} is
+    called. *)
+
+val add : event -> float option -> unit
+(** [add event timeout] adds the [event] and schedules the execution
+    of the function specified with {!Libevent.set}, or in at least the
+    time specified in the [timeout]. If [timeout] is [None], no
+    timeout occures, and the function will only be called if a
+    matching event occurs on the file descriptor. *)
+
+val del : event -> unit
+(** Del the event *)
+
+val pending : event -> event_flags list -> bool 
+
+(** {5 Process Events} *)
+
+val dispatch : unit -> unit
+(** In order to process events, an application needs to call dispatch. This 
+ *  function only returns on error, and should replace the event core of the 
+ *  application
+ *)
+
+type loop_flags =
+    ONCE            
+  | NONBLOCK        
+val loop : loop_flags -> unit
+(** Provides an interface for single pass execution of pending events *)
+
+
+
Files ocaml-event.bak/work/ocaml-event-0.6.0/liboevent.o and ocaml-event/work/ocaml-event-0.6.0/liboevent.o differ
diff -ruN ocaml-event.bak/work/ocaml-event-0.6.0/unittest.ml ocaml-event/work/ocaml-event-0.6.0/unittest.ml
--- ocaml-event.bak/work/ocaml-event-0.6.0/unittest.ml	1970-01-01 03:00:00.000000000 +0300
+++ ocaml-event/work/ocaml-event-0.6.0/unittest.ml	2009-11-26 12:10:37.000000000 +0300
@@ -0,0 +1,80 @@
+(***********************************************************************)
+(* The OcamlEvent library                                              *)
+(*                                                                     *)
+(* Copyright 2002, 2003 Maas-Maarten Zeeman. All rights reserved. See  *) 
+(* LICENCE for details.                                                *)
+(***********************************************************************)
+
+(* $Id: unittest.ml,v 1.3 2009-11-26 09:10:37 maas Exp $ *)
+
+open OUnit
+
+let create_event = Liboevent.create 
+
+(* Tests the creation of new events *)
+let test_create_event _ =
+  let e1 = create_event () in
+  let e2 = create_event () in 
+  "Events should be different" @? (e1 <> e2)
+
+(* Tests if pending can be called with and without the optional float *)
+let test_pending _ =
+  let e = create_event () in
+  ignore(Liboevent.pending e [])
+
+(* Test eof on a read callback *)
+let test_read_eof _ =
+  let test_string = "This is a test string\n\n\n" in
+  let buflen = 512 in
+  let buf = String.create buflen in
+  let read_count = ref 0 in 
+  let evt = create_event () in
+  let read_cb fd event_type = 
+    (* read data from the fd *)
+    let len = Unix.read fd buf 0 buflen in
+    (* when 0 bytes are read this is the EOF, and we are done. *)
+    if len <> 0 then
+      begin
+	read_count := !read_count + len;
+	Liboevent.add evt None
+      end
+  in
+
+  (* Create a socket pair for testing *)
+  let s1, s2 = Unix.socketpair Unix.PF_UNIX Unix.SOCK_STREAM 0 in
+  let _ = Unix.write s1 test_string 0 (String.length test_string) in
+
+  (* A shutdown_send will cause an EOF on the reading end *)
+  Unix.shutdown s1 Unix.SHUTDOWN_SEND;
+
+  (* Setup the event *)
+  Liboevent.set evt s2 [Liboevent.READ] false read_cb;
+  Liboevent.add evt None;
+  Liboevent.dispatch ();
+
+  (* Now its time to check some things *)
+  assert_equal (String.length test_string) ! read_count
+
+(* This is not really a test (yet) *)
+let call_set _ =
+  let do_nothing _ _ =
+    ()
+  in  
+  let e1 = Liboevent.create () in
+  Liboevent.set e1 Unix.stderr [Liboevent.WRITE] false do_nothing;
+  Liboevent.set e1 Unix.stdout [Liboevent.WRITE] false do_nothing;
+  Liboevent.set e1 Unix.stdin [Liboevent.READ] false do_nothing;
+  Liboevent.add e1 (Some 0.1);
+  Liboevent.loop(Liboevent.ONCE)
+ 
+(* Construct the test suite *)
+let suite = "event" >::: 
+  ["create_event" >:: test_create_event;
+   "test_pending" >:: test_pending;
+   "test_read_eof" >:: test_read_eof;
+   "call_set" >:: call_set;
+ ] 
+
+(* Run the tests in the test suite *)
+let _ = 
+  run_test_tt_main suite


>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the freebsd-ports-bugs mailing list