Browse Source

switch to jbuilder

Aaron Dufour 5 years ago
parent
commit
863f913c1a

+ 2 - 2
.gitignore

@@ -2,8 +2,8 @@
 _build/
 _tests/
 lib_test/tests_
-setup.log
-setup.data
 *.native
 *.byte
 *.docdir
+.merlin
+*.install

+ 0 - 8
.merlin

@@ -1,8 +0,0 @@
-S lib/**
-S lwt/**
-S async/**
-B _build/**
-
-PKG cstruct result
-PKG alcotest
-PKG lwt async core

+ 21 - 6
.travis.yml

@@ -1,9 +1,24 @@
 language: c
 sudo: required
-install: wget https://raw.githubusercontent.com/ocaml/ocaml-ci-scripts/master/.travis-opam.sh
-script: bash -ex .travis-opam.sh
+language: c
+sudo: false
+services:
+  - docker
+install: wget https://raw.githubusercontent.com/ocaml/ocaml-travisci-skeleton/master/.travis-docker.sh
+script: bash -ex ./.travis-docker.sh
 env:
-  - OCAML_VERSION=4.02
-  - OCAML_VERSION=4.03
-os:
-  - linux
+  global:
+  - PINS="faraday-async:. faraday:. faraday-lwt:. faraday-lwt-unix:."
+  matrix:
+  - PACKAGE="faraday" DISTRO="ubuntu-16.04" OCAML_VERSION="4.04.2"
+  - PACKAGE="faraday-async" DISTRO="ubuntu-16.04" OCAML_VERSION="4.04.2"
+  - PACKAGE="faraday-lwt" DISTRO="ubuntu-16.04" OCAML_VERSION="4.04.2"
+  - PACKAGE="faraday-lwt-unix" DISTRO="ubuntu-16.04" OCAML_VERSION="4.04.2"
+  - PACKAGE="faraday" DISTRO="alpine-3.5" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday-async" DISTRO="alpine-3.5" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday-lwt" DISTRO="alpine-3.5" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday-lwt-unix" DISTRO="alpine-3.5" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday" DISTRO="debian-unstable" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday-async" DISTRO="debian-unstable" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday-lwt" DISTRO="debian-unstable" OCAML_VERSION="4.03.0"
+  - PACKAGE="faraday-lwt-unix" DISTRO="debian-unstable" OCAML_VERSION="4.03.0"

+ 0 - 0
LICENSE → LICENSE.md


+ 16 - 0
META.faraday.template

@@ -0,0 +1,16 @@
+# JBUILDER_GEN
+
+package "lwt" (
+  description = "Deprecated. Use faraday-lwt directly"
+  requires = "faraday-lwt"
+)
+
+package "lwt-unix" (
+  description = "Deprecated. Use faraday-lwt-unix directly"
+  requires = "faraday-lwt-unix"
+)
+
+package "async" (
+  description = "Deprecated. Use faraday-async directly"
+  requires = "faraday-async"
+)

+ 0 - 41
Makefile

@@ -1,41 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: a3c674b4239234cbbe53afe090018954)
-
-SETUP = ocaml setup.ml
-
-build: setup.data
-	$(SETUP) -build $(BUILDFLAGS)
-
-doc: setup.data build
-	$(SETUP) -doc $(DOCFLAGS)
-
-test: setup.data build
-	$(SETUP) -test $(TESTFLAGS)
-
-all:
-	$(SETUP) -all $(ALLFLAGS)
-
-install: setup.data
-	$(SETUP) -install $(INSTALLFLAGS)
-
-uninstall: setup.data
-	$(SETUP) -uninstall $(UNINSTALLFLAGS)
-
-reinstall: setup.data
-	$(SETUP) -reinstall $(REINSTALLFLAGS)
-
-clean:
-	$(SETUP) -clean $(CLEANFLAGS)
-
-distclean:
-	$(SETUP) -distclean $(DISTCLEANFLAGS)
-
-setup.data:
-	$(SETUP) -configure $(CONFIGUREFLAGS)
-
-configure:
-	$(SETUP) -configure $(CONFIGUREFLAGS)
-
-.PHONY: build doc test all install uninstall reinstall clean distclean configure
-
-# OASIS_STOP

+ 0 - 53
_tags

@@ -1,53 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 748014f74f0af5f4d5a62d0fa2de8418)
-# Ignore VCS directories, you can use the same kind of rule outside
-# OASIS_START/STOP if you want to exclude directories that contains
-# useless stuff for the build process
-true: annot, bin_annot
-<**/.svn>: -traverse
-<**/.svn>: not_hygienic
-".bzr": -traverse
-".bzr": not_hygienic
-".hg": -traverse
-".hg": not_hygienic
-".git": -traverse
-".git": not_hygienic
-"_darcs": -traverse
-"_darcs": not_hygienic
-# Library faraday
-"lib/faraday.cmxs": use_faraday
-<lib/*.ml{,i,y}>: package(bigarray)
-<lib/*.ml{,i,y}>: package(ocplib-endian)
-<lib/*.ml{,i,y}>: package(ocplib-endian.bigstring)
-# Library faraday_async
-"async/faraday_async.cmxs": use_faraday_async
-<async/*.ml{,i,y}>: package(async)
-<async/*.ml{,i,y}>: package(bigarray)
-<async/*.ml{,i,y}>: package(core)
-<async/*.ml{,i,y}>: package(ocplib-endian)
-<async/*.ml{,i,y}>: package(ocplib-endian.bigstring)
-<async/*.ml{,i,y}>: package(threads)
-<async/*.ml{,i,y}>: use_faraday
-# Library faraday_lwt
-"lwt/faraday_lwt.cmxs": use_faraday_lwt
-# Library faraday_lwt_unix
-"lwt/faraday_lwt_unix.cmxs": use_faraday_lwt_unix
-<lwt/*.ml{,i,y}>: package(bigarray)
-<lwt/*.ml{,i,y}>: package(lwt)
-<lwt/*.ml{,i,y}>: package(lwt.unix)
-<lwt/*.ml{,i,y}>: package(ocplib-endian)
-<lwt/*.ml{,i,y}>: package(ocplib-endian.bigstring)
-<lwt/*.ml{,i,y}>: use_faraday
-<lwt/*.ml{,i,y}>: use_faraday_lwt
-# Executable test_faraday
-<lib_test/test_faraday.{native,byte}>: package(alcotest)
-<lib_test/test_faraday.{native,byte}>: package(bigarray)
-<lib_test/test_faraday.{native,byte}>: package(ocplib-endian)
-<lib_test/test_faraday.{native,byte}>: package(ocplib-endian.bigstring)
-<lib_test/test_faraday.{native,byte}>: use_faraday
-<lib_test/*.ml{,i,y}>: package(alcotest)
-<lib_test/*.ml{,i,y}>: package(bigarray)
-<lib_test/*.ml{,i,y}>: package(ocplib-endian)
-<lib_test/*.ml{,i,y}>: package(ocplib-endian.bigstring)
-<lib_test/*.ml{,i,y}>: use_faraday
-# OASIS_STOP

+ 3 - 3
async/faraday_async.ml

@@ -1,10 +1,10 @@
 type file_descr = Unix.file_descr
 let bytes_unsafe_to_string = Bytes.unsafe_to_string
 
-open Core.Std
-open Async.Std
+open Core
+open Async
 
-module Unix = Core.Std.Unix
+module Unix = Core.Unix
 
 
 let serialize t ~yield ~writev =

+ 0 - 4
async/faraday_async.mldylib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: dfb774e65dee1828531557fb0c6f62ab)
-Faraday_async
-# OASIS_STOP

+ 2 - 2
async/faraday_async.mli

@@ -1,5 +1,5 @@
-open Core.Std
-open Async.Std
+open Core
+open Async
 
 open Faraday
 

+ 0 - 4
async/faraday_async.mllib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: dfb774e65dee1828531557fb0c6f62ab)
-Faraday_async
-# OASIS_STOP

+ 7 - 0
async/jbuild

@@ -0,0 +1,7 @@
+(jbuild_version 1)
+
+(library
+ ((name faraday_async)
+  (public_name faraday-async)
+  (wrapped false)
+  (libraries (faraday async))))

+ 0 - 27
configure

@@ -1,27 +0,0 @@
-#!/bin/sh
-
-# OASIS_START
-# DO NOT EDIT (digest: dc86c2ad450f91ca10c931b6045d0499)
-set -e
-
-FST=true
-for i in "$@"; do
-  if $FST; then
-    set --
-    FST=false
-  fi
-
-  case $i in
-    --*=*)
-      ARG=${i%%=*}
-      VAL=${i##*=}
-      set -- "$@" "$ARG" "$VAL"
-      ;;
-    *)
-      set -- "$@" "$i"
-      ;;
-  esac
-done
-
-ocaml setup.ml -configure "$@"
-# OASIS_STOP

+ 1 - 0
faraday-async.descr

@@ -0,0 +1 @@
+Faraday - Async specific support

+ 20 - 0
faraday-async.opam

@@ -0,0 +1,20 @@
+opam-version: "1.2"
+maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"
+authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]
+license: "BSD-3-clause"
+homepage: "https://github.com/inhabitedtype/faraday"
+bug-reports: "https://github.com/inhabitedtype/faraday/issues"
+dev-repo: "https://github.com/inhabitedtype/faraday.git"
+build: [
+  ["jbuilder" "subst"] {pinned}
+  ["jbuilder" "build" "-p" name "-j" jobs]
+]
+build-test: [
+  ["jbuilder" "runtest" "-p" name]
+]
+depends: [
+  "jbuilder" {build & >= "1.0+beta10"}
+  "faraday"
+  "async"
+]
+available: [ ocaml-version >= "4.02.0" ]

+ 1 - 0
faraday-lwt-unix.descr

@@ -0,0 +1 @@
+Faraday - Lwt & Unix specific support

+ 22 - 0
faraday-lwt-unix.opam

@@ -0,0 +1,22 @@
+opam-version: "1.2"
+maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"
+authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]
+license: "BSD-3-clause"
+homepage: "https://github.com/inhabitedtype/faraday"
+bug-reports: "https://github.com/inhabitedtype/faraday/issues"
+dev-repo: "https://github.com/inhabitedtype/faraday.git"
+build: [
+  ["jbuilder" "subst"] {pinned}
+  ["jbuilder" "build" "-p" name "-j" jobs]
+]
+build-test: [
+  ["jbuilder" "runtest" "-p" name]
+]
+depends: [
+  "jbuilder" {build & >= "1.0+beta10"}
+  "faraday"
+  "faraday-lwt"
+  "lwt"
+  "base-unix"
+]
+available: [ ocaml-version >= "4.02.0" ]

+ 1 - 0
faraday-lwt.descr

@@ -0,0 +1 @@
+Faraday - Lwt specific support

+ 20 - 0
faraday-lwt.opam

@@ -0,0 +1,20 @@
+opam-version: "1.2"
+maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"
+authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]
+license: "BSD-3-clause"
+homepage: "https://github.com/inhabitedtype/faraday"
+bug-reports: "https://github.com/inhabitedtype/faraday/issues"
+dev-repo: "https://github.com/inhabitedtype/faraday.git"
+build: [
+  ["jbuilder" "subst"] {pinned}
+  ["jbuilder" "build" "-p" name "-j" jobs]
+]
+build-test: [
+  ["jbuilder" "runtest" "-p" name]
+]
+depends: [
+  "jbuilder" {build & >= "1.0+beta10"}
+  "faraday"
+  "lwt"
+]
+available: [ ocaml-version >= "4.02.0" ]

+ 0 - 0
opam/descr → faraday.descr


+ 4 - 19
opam/opam → faraday.opam

@@ -1,5 +1,4 @@
 opam-version: "1.2"
-name: "faraday"
 maintainer: "Spiros Eliopoulos <spiros@inhabitedtype.com>"
 authors: [ "Spiros Eliopoulos <spiros@inhabitedtype.com>" ]
 license: "BSD-3-clause"
@@ -7,29 +6,15 @@ homepage: "https://github.com/inhabitedtype/faraday"
 bug-reports: "https://github.com/inhabitedtype/faraday/issues"
 dev-repo: "https://github.com/inhabitedtype/faraday.git"
 build: [
-  ["ocaml" "setup.ml" "-configure" "--prefix" prefix
-    "--%{base-unix:enable}%-unix"
-    "--%{lwt:enable}%-lwt"
-    "--%{async:enable}%-async"]
-  ["ocaml" "setup.ml" "-build"]
-]
-install: ["ocaml" "setup.ml" "-install"]
-remove: [
-  ["ocamlfind" "remove" "faraday"]
+  ["jbuilder" "subst"] {pinned}
+  ["jbuilder" "build" "-p" name "-j" jobs]
 ]
 build-test: [
-  ["ocaml" "setup.ml" "-configure" "--enable-tests"]
-  ["ocaml" "setup.ml" "-build"]
-  ["ocaml" "setup.ml" "-test"]
+  ["jbuilder" "runtest" "-p" name]
 ]
 depends: [
+  "jbuilder" {build & >= "1.0+beta10"}
   "alcotest" {test & >= "0.4.1"}
-  "ocamlfind" {build}
   "ocplib-endian" {>= "0.8"}
 ]
-depopts: [
-  "async"
-  "base-unix"
-  "lwt"
-]
 available: [ ocaml-version >= "4.02.0" ]

+ 0 - 44
lib/META

@@ -1,44 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 9e3bce218cef899cb8c71404bb9e4802)
-version = "dev"
-description = "A library for writing fast and memory-efficient serializers."
-requires = "bigarray ocplib-endian ocplib-endian.bigstring"
-archive(byte) = "faraday.cma"
-archive(byte, plugin) = "faraday.cma"
-archive(native) = "faraday.cmxa"
-archive(native, plugin) = "faraday.cmxs"
-exists_if = "faraday.cma"
-package "lwt-unix" (
- version = "dev"
- description = "A library for writing fast and memory-efficient serializers."
- requires = "faraday.lwt lwt.unix"
- archive(byte) = "faraday_lwt_unix.cma"
- archive(byte, plugin) = "faraday_lwt_unix.cma"
- archive(native) = "faraday_lwt_unix.cmxa"
- archive(native, plugin) = "faraday_lwt_unix.cmxs"
- exists_if = "faraday_lwt_unix.cma"
-)
-
-package "lwt" (
- version = "dev"
- description = "A library for writing fast and memory-efficient serializers."
- requires = "faraday lwt"
- archive(byte) = "faraday_lwt.cma"
- archive(byte, plugin) = "faraday_lwt.cma"
- archive(native) = "faraday_lwt.cmxa"
- archive(native, plugin) = "faraday_lwt.cmxs"
- exists_if = "faraday_lwt.cma"
-)
-
-package "async" (
- version = "dev"
- description = "A library for writing fast and memory-efficient serializers."
- requires = "async core faraday threads"
- archive(byte) = "faraday_async.cma"
- archive(byte, plugin) = "faraday_async.cma"
- archive(native) = "faraday_async.cmxa"
- archive(native, plugin) = "faraday_async.cmxs"
- exists_if = "faraday_async.cma"
-)
-# OASIS_STOP
-

+ 0 - 4
lib/faraday.mldylib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 8a2616385414d08a46c455359bf20f8e)
-Faraday
-# OASIS_STOP

+ 0 - 4
lib/faraday.mllib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 8a2616385414d08a46c455359bf20f8e)
-Faraday
-# OASIS_STOP

+ 7 - 0
lib/jbuild

@@ -0,0 +1,7 @@
+(jbuild_version 1)
+
+(library
+ ((name faraday)
+  (public_name faraday)
+  (wrapped false)
+  (libraries (ocplib-endian ocplib-endian.bigstring))))

+ 12 - 0
lib_test/jbuild

@@ -0,0 +1,12 @@
+(jbuild_version 1)
+
+(executables
+ ((libraries (alcotest faraday))
+  (modules (test_faraday))
+  (names (test_faraday))))
+
+(alias
+ ((name    runtest)
+  (package faraday)
+  (deps    (test_faraday.exe))
+  (action  (run ${<}))))

+ 0 - 4
lwt/faraday_lwt.mldylib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 8a61ac89df1c6cabea9f0fecd9e596fd)
-Faraday_lwt
-# OASIS_STOP

+ 0 - 4
lwt/faraday_lwt.mllib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 8a61ac89df1c6cabea9f0fecd9e596fd)
-Faraday_lwt
-# OASIS_STOP

+ 0 - 4
lwt/faraday_lwt_unix.mldylib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 1dd81fcbca473f3ea69de6eaafd75e32)
-Faraday_lwt_unix
-# OASIS_STOP

+ 0 - 4
lwt/faraday_lwt_unix.mllib

@@ -1,4 +0,0 @@
-# OASIS_START
-# DO NOT EDIT (digest: 1dd81fcbca473f3ea69de6eaafd75e32)
-Faraday_lwt_unix
-# OASIS_STOP

+ 7 - 0
lwt/jbuild

@@ -0,0 +1,7 @@
+(jbuild_version 1)
+
+(library
+ ((name faraday_lwt)
+  (public_name faraday-lwt)
+  (wrapped false)
+  (libraries (faraday lwt))))

+ 0 - 0
lwt/faraday_lwt_unix.ml → lwt_unix/faraday_lwt_unix.ml


+ 0 - 0
lwt/faraday_lwt_unix.mli → lwt_unix/faraday_lwt_unix.mli


+ 7 - 0
lwt_unix/jbuild

@@ -0,0 +1,7 @@
+(jbuild_version 1)
+
+(library
+ ((name faraday_lwt_unix)
+  (public_name faraday-lwt-unix)
+  (wrapped false)
+  (libraries (faraday lwt faraday-lwt))))

+ 0 - 907
myocamlbuild.ml

@@ -1,907 +0,0 @@
-(* OASIS_START *)
-(* DO NOT EDIT (digest: cd66fbd8d1cd57e2c39588c46965b24a) *)
-module OASISGettext = struct
-(* # 22 "src/oasis/OASISGettext.ml" *)
-
-
-  let ns_ str = str
-  let s_ str = str
-  let f_ (str: ('a, 'b, 'c, 'd) format4) = str
-
-
-  let fn_ fmt1 fmt2 n =
-    if n = 1 then
-      fmt1^^""
-    else
-      fmt2^^""
-
-
-  let init = []
-end
-
-module OASISString = struct
-(* # 22 "src/oasis/OASISString.ml" *)
-
-
-  (** Various string utilities.
-
-      Mostly inspired by extlib and batteries ExtString and BatString libraries.
-
-      @author Sylvain Le Gall
-  *)
-
-
-  let nsplitf str f =
-    if str = "" then
-      []
-    else
-      let buf = Buffer.create 13 in
-      let lst = ref [] in
-      let push () =
-        lst := Buffer.contents buf :: !lst;
-        Buffer.clear buf
-      in
-      let str_len = String.length str in
-      for i = 0 to str_len - 1 do
-        if f str.[i] then
-          push ()
-        else
-          Buffer.add_char buf str.[i]
-      done;
-      push ();
-      List.rev !lst
-
-
-  (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the
-      separator.
-  *)
-  let nsplit str c =
-    nsplitf str ((=) c)
-
-
-  let find ~what ?(offset=0) str =
-    let what_idx = ref 0 in
-    let str_idx = ref offset in
-    while !str_idx < String.length str &&
-          !what_idx < String.length what do
-      if str.[!str_idx] = what.[!what_idx] then
-        incr what_idx
-      else
-        what_idx := 0;
-      incr str_idx
-    done;
-    if !what_idx <> String.length what then
-      raise Not_found
-    else
-      !str_idx - !what_idx
-
-
-  let sub_start str len =
-    let str_len = String.length str in
-    if len >= str_len then
-      ""
-    else
-      String.sub str len (str_len - len)
-
-
-  let sub_end ?(offset=0) str len =
-    let str_len = String.length str in
-    if len >= str_len then
-      ""
-    else
-      String.sub str 0 (str_len - len)
-
-
-  let starts_with ~what ?(offset=0) str =
-    let what_idx = ref 0 in
-    let str_idx = ref offset in
-    let ok = ref true in
-    while !ok &&
-          !str_idx < String.length str &&
-          !what_idx < String.length what do
-      if str.[!str_idx] = what.[!what_idx] then
-        incr what_idx
-      else
-        ok := false;
-      incr str_idx
-    done;
-    if !what_idx = String.length what then
-      true
-    else
-      false
-
-
-  let strip_starts_with ~what str =
-    if starts_with ~what str then
-      sub_start str (String.length what)
-    else
-      raise Not_found
-
-
-  let ends_with ~what ?(offset=0) str =
-    let what_idx = ref ((String.length what) - 1) in
-    let str_idx = ref ((String.length str) - 1) in
-    let ok = ref true in
-    while !ok &&
-          offset <= !str_idx &&
-          0 <= !what_idx do
-      if str.[!str_idx] = what.[!what_idx] then
-        decr what_idx
-      else
-        ok := false;
-      decr str_idx
-    done;
-    if !what_idx = -1 then
-      true
-    else
-      false
-
-
-  let strip_ends_with ~what str =
-    if ends_with ~what str then
-      sub_end str (String.length what)
-    else
-      raise Not_found
-
-
-  let replace_chars f s =
-    let buf = Buffer.create (String.length s) in
-    String.iter (fun c -> Buffer.add_char buf (f c)) s;
-    Buffer.contents buf
-
-  let lowercase_ascii =
-    replace_chars
-      (fun c ->
-         if (c >= 'A' && c <= 'Z') then
-           Char.chr (Char.code c + 32)
-         else
-           c)
-
-  let uncapitalize_ascii s =
-    if s <> "" then
-      (lowercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1))
-    else
-      s
-
-  let uppercase_ascii =
-    replace_chars
-      (fun c ->
-         if (c >= 'a' && c <= 'z') then
-           Char.chr (Char.code c - 32)
-         else
-           c)
-
-  let capitalize_ascii s =
-    if s <> "" then
-      (uppercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1))
-    else
-      s
-
-end
-
-module OASISUtils = struct
-(* # 22 "src/oasis/OASISUtils.ml" *)
-
-
-  open OASISGettext
-
-
-  module MapExt =
-  struct
-    module type S =
-    sig
-      include Map.S
-      val add_list: 'a t -> (key * 'a) list -> 'a t
-      val of_list: (key * 'a) list -> 'a t
-      val to_list: 'a t -> (key * 'a) list
-    end
-
-    module Make (Ord: Map.OrderedType) =
-    struct
-      include Map.Make(Ord)
-
-      let rec add_list t =
-        function
-          | (k, v) :: tl -> add_list (add k v t) tl
-          | [] -> t
-
-      let of_list lst = add_list empty lst
-
-      let to_list t = fold (fun k v acc -> (k, v) :: acc) t []
-    end
-  end
-
-
-  module MapString = MapExt.Make(String)
-
-
-  module SetExt  =
-  struct
-    module type S =
-    sig
-      include Set.S
-      val add_list: t -> elt list -> t
-      val of_list: elt list -> t
-      val to_list: t -> elt list
-    end
-
-    module Make (Ord: Set.OrderedType) =
-    struct
-      include Set.Make(Ord)
-
-      let rec add_list t =
-        function
-          | e :: tl -> add_list (add e t) tl
-          | [] -> t
-
-      let of_list lst = add_list empty lst
-
-      let to_list = elements
-    end
-  end
-
-
-  module SetString = SetExt.Make(String)
-
-
-  let compare_csl s1 s2 =
-    String.compare (OASISString.lowercase_ascii s1) (OASISString.lowercase_ascii s2)
-
-
-  module HashStringCsl =
-    Hashtbl.Make
-      (struct
-         type t = string
-         let equal s1 s2 = (compare_csl s1 s2) = 0
-         let hash s = Hashtbl.hash (OASISString.lowercase_ascii s)
-       end)
-
-  module SetStringCsl =
-    SetExt.Make
-      (struct
-         type t = string
-         let compare = compare_csl
-       end)
-
-
-  let varname_of_string ?(hyphen='_') s =
-    if String.length s = 0 then
-      begin
-        invalid_arg "varname_of_string"
-      end
-    else
-      begin
-        let buf =
-          OASISString.replace_chars
-            (fun c ->
-               if ('a' <= c && c <= 'z')
-                 ||
-                  ('A' <= c && c <= 'Z')
-                 ||
-                  ('0' <= c && c <= '9') then
-                 c
-               else
-                 hyphen)
-            s;
-        in
-        let buf =
-          (* Start with a _ if digit *)
-          if '0' <= s.[0] && s.[0] <= '9' then
-            "_"^buf
-          else
-            buf
-        in
-          OASISString.lowercase_ascii buf
-      end
-
-
-  let varname_concat ?(hyphen='_') p s =
-    let what = String.make 1 hyphen in
-    let p =
-      try
-        OASISString.strip_ends_with ~what p
-      with Not_found ->
-        p
-    in
-    let s =
-      try
-        OASISString.strip_starts_with ~what s
-      with Not_found ->
-        s
-    in
-      p^what^s
-
-
-  let is_varname str =
-    str = varname_of_string str
-
-
-  let failwithf fmt = Printf.ksprintf failwith fmt
-
-
-  let rec file_location ?pos1 ?pos2 ?lexbuf () =
-      match pos1, pos2, lexbuf with
-      | Some p, None, _ | None, Some p, _ ->
-        file_location ~pos1:p ~pos2:p ?lexbuf ()
-      | Some p1, Some p2, _ ->
-        let open Lexing in
-        let fn, lineno = p1.pos_fname, p1.pos_lnum in
-        let c1 = p1.pos_cnum - p1.pos_bol in
-        let c2 = c1 + (p2.pos_cnum - p1.pos_cnum) in
-        Printf.sprintf (f_ "file %S, line %d, characters %d-%d")  fn lineno c1 c2
-      | _, _, Some lexbuf ->
-        file_location
-          ~pos1:(Lexing.lexeme_start_p lexbuf)
-          ~pos2:(Lexing.lexeme_end_p lexbuf)
-          ()
-      | None, None, None ->
-        s_ "<position undefined>"
-
-
-  let failwithpf ?pos1 ?pos2 ?lexbuf fmt =
-    let loc = file_location ?pos1 ?pos2 ?lexbuf () in
-    Printf.ksprintf (fun s -> failwith (Printf.sprintf "%s: %s" loc s)) fmt
-
-
-end
-
-module OASISExpr = struct
-(* # 22 "src/oasis/OASISExpr.ml" *)
-
-
-  open OASISGettext
-  open OASISUtils
-
-
-  type test = string
-  type flag = string
-
-
-  type t =
-    | EBool of bool
-    | ENot of t
-    | EAnd of t * t
-    | EOr of t * t
-    | EFlag of flag
-    | ETest of test * string
-
-
-  type 'a choices = (t * 'a) list
-
-
-  let eval var_get t =
-    let rec eval' =
-      function
-        | EBool b ->
-            b
-
-        | ENot e ->
-            not (eval' e)
-
-        | EAnd (e1, e2) ->
-            (eval' e1) && (eval' e2)
-
-        | EOr (e1, e2) ->
-            (eval' e1) || (eval' e2)
-
-        | EFlag nm ->
-            let v =
-              var_get nm
-            in
-              assert(v = "true" || v = "false");
-              (v = "true")
-
-        | ETest (nm, vl) ->
-            let v =
-              var_get nm
-            in
-              (v = vl)
-    in
-      eval' t
-
-
-  let choose ?printer ?name var_get lst =
-    let rec choose_aux =
-      function
-        | (cond, vl) :: tl ->
-            if eval var_get cond then
-              vl
-            else
-              choose_aux tl
-        | [] ->
-            let str_lst =
-              if lst = [] then
-                s_ "<empty>"
-              else
-                String.concat
-                  (s_ ", ")
-                  (List.map
-                     (fun (cond, vl) ->
-                        match printer with
-                          | Some p -> p vl
-                          | None -> s_ "<no printer>")
-                     lst)
-            in
-              match name with
-                | Some nm ->
-                    failwith
-                      (Printf.sprintf
-                         (f_ "No result for the choice list '%s': %s")
-                         nm str_lst)
-                | None ->
-                    failwith
-                      (Printf.sprintf
-                         (f_ "No result for a choice list: %s")
-                         str_lst)
-    in
-      choose_aux (List.rev lst)
-
-
-end
-
-
-# 443 "myocamlbuild.ml"
-module BaseEnvLight = struct
-(* # 22 "src/base/BaseEnvLight.ml" *)
-
-
-  module MapString = Map.Make(String)
-
-
-  type t = string MapString.t
-
-
-  let default_filename = Filename.concat (Sys.getcwd ()) "setup.data"
-
-
-  let load ?(allow_empty=false) ?(filename=default_filename) ?stream () =
-    let line = ref 1 in
-    let lexer st =
-      let st_line =
-        Stream.from
-          (fun _ ->
-             try
-               match Stream.next st with
-               | '\n' -> incr line; Some '\n'
-               | c -> Some c
-             with Stream.Failure -> None)
-      in
-      Genlex.make_lexer ["="] st_line
-    in
-    let rec read_file lxr mp =
-      match Stream.npeek 3 lxr with
-      | [Genlex.Ident nm; Genlex.Kwd "="; Genlex.String value] ->
-        Stream.junk lxr; Stream.junk lxr; Stream.junk lxr;
-        read_file lxr (MapString.add nm value mp)
-      | [] -> mp
-      | _ ->
-        failwith
-          (Printf.sprintf "Malformed data file '%s' line %d" filename !line)
-    in
-    match stream with
-    | Some st -> read_file (lexer st) MapString.empty
-    | None ->
-      if Sys.file_exists filename then begin
-        let chn = open_in_bin filename in
-        let st = Stream.of_channel chn in
-        try
-          let mp = read_file (lexer st) MapString.empty in
-          close_in chn; mp
-        with e ->
-          close_in chn; raise e
-      end else if allow_empty then begin
-        MapString.empty
-      end else begin
-        failwith
-          (Printf.sprintf
-             "Unable to load environment, the file '%s' doesn't exist."
-             filename)
-      end
-
-  let rec var_expand str env =
-    let buff = Buffer.create ((String.length str) * 2) in
-    Buffer.add_substitute
-      buff
-      (fun var ->
-         try
-           var_expand (MapString.find var env) env
-         with Not_found ->
-           failwith
-             (Printf.sprintf
-                "No variable %s defined when trying to expand %S."
-                var
-                str))
-      str;
-    Buffer.contents buff
-
-
-  let var_get name env = var_expand (MapString.find name env) env
-  let var_choose lst env = OASISExpr.choose (fun nm -> var_get nm env) lst
-end
-
-
-# 523 "myocamlbuild.ml"
-module MyOCamlbuildFindlib = struct
-(* # 22 "src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml" *)
-
-
-  (** OCamlbuild extension, copied from
-    * https://ocaml.org/learn/tutorials/ocamlbuild/Using_ocamlfind_with_ocamlbuild.html
-    * by N. Pouillard and others
-    *
-    * Updated on 2016-06-02
-    *
-    * Modified by Sylvain Le Gall
-  *)
-  open Ocamlbuild_plugin
-
-
-  type conf = {no_automatic_syntax: bool}
-
-
-  let run_and_read = Ocamlbuild_pack.My_unix.run_and_read
-
-
-  let blank_sep_strings = Ocamlbuild_pack.Lexers.blank_sep_strings
-
-
-  let exec_from_conf exec =
-    let exec =
-      let env = BaseEnvLight.load ~allow_empty:true () in
-      try
-        BaseEnvLight.var_get exec env
-      with Not_found ->
-        Printf.eprintf "W: Cannot get variable %s\n" exec;
-        exec
-    in
-    let fix_win32 str =
-      if Sys.os_type = "Win32" then begin
-        let buff = Buffer.create (String.length str) in
-        (* Adapt for windowsi, ocamlbuild + win32 has a hard time to handle '\\'.
-        *)
-        String.iter
-          (fun c -> Buffer.add_char buff (if c = '\\' then '/' else c))
-          str;
-        Buffer.contents buff
-      end else begin
-        str
-      end
-    in
-    fix_win32 exec
-
-
-  let split s ch =
-    let buf = Buffer.create 13 in
-    let x = ref [] in
-    let flush () =
-      x := (Buffer.contents buf) :: !x;
-      Buffer.clear buf
-    in
-    String.iter
-      (fun c ->
-         if c = ch then
-           flush ()
-         else
-           Buffer.add_char buf c)
-      s;
-    flush ();
-    List.rev !x
-
-
-  let split_nl s = split s '\n'
-
-
-  let before_space s =
-    try
-      String.before s (String.index s ' ')
-    with Not_found -> s
-
-  (* ocamlfind command *)
-  let ocamlfind x = S[Sh (exec_from_conf "ocamlfind"); x]
-
-  (* This lists all supported packages. *)
-  let find_packages () =
-    List.map before_space (split_nl & run_and_read (exec_from_conf "ocamlfind" ^ " list"))
-
-
-  (* Mock to list available syntaxes. *)
-  let find_syntaxes () = ["camlp4o"; "camlp4r"]
-
-
-  let well_known_syntax = [
-    "camlp4.quotations.o";
-    "camlp4.quotations.r";
-    "camlp4.exceptiontracer";
-    "camlp4.extend";
-    "camlp4.foldgenerator";
-    "camlp4.listcomprehension";
-    "camlp4.locationstripper";
-    "camlp4.macro";
-    "camlp4.mapgenerator";
-    "camlp4.metagenerator";
-    "camlp4.profiler";
-    "camlp4.tracer"
-  ]
-
-
-  let dispatch conf =
-    function
-      | After_options ->
-        (* By using Before_options one let command line options have an higher
-         * priority on the contrary using After_options will guarantee to have
-         * the higher priority override default commands by ocamlfind ones *)
-        Options.ocamlc     := ocamlfind & A"ocamlc";
-        Options.ocamlopt   := ocamlfind & A"ocamlopt";
-        Options.ocamldep   := ocamlfind & A"ocamldep";
-        Options.ocamldoc   := ocamlfind & A"ocamldoc";
-        Options.ocamlmktop := ocamlfind & A"ocamlmktop";
-        Options.ocamlmklib := ocamlfind & A"ocamlmklib"
-
-      | After_rules ->
-
-        (* Avoid warnings for unused tag *)
-        flag ["tests"] N;
-
-        (* When one link an OCaml library/binary/package, one should use
-         * -linkpkg *)
-        flag ["ocaml"; "link"; "program"] & A"-linkpkg";
-
-        (* For each ocamlfind package one inject the -package option when
-         * compiling, computing dependencies, generating documentation and
-         * linking. *)
-        List.iter
-          begin fun pkg ->
-            let base_args = [A"-package"; A pkg] in
-            (* TODO: consider how to really choose camlp4o or camlp4r. *)
-            let syn_args = [A"-syntax"; A "camlp4o"] in
-            let (args, pargs) =
-              (* Heuristic to identify syntax extensions: whether they end in
-                 ".syntax"; some might not.
-              *)
-              if not (conf.no_automatic_syntax) &&
-                 (Filename.check_suffix pkg "syntax" ||
-                  List.mem pkg well_known_syntax) then
-                (syn_args @ base_args, syn_args)
-              else
-                (base_args, [])
-            in
-            flag ["ocaml"; "compile";  "pkg_"^pkg] & S args;
-            flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S args;
-            flag ["ocaml"; "doc";      "pkg_"^pkg] & S args;
-            flag ["ocaml"; "link";     "pkg_"^pkg] & S base_args;
-            flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S args;
-
-            (* TODO: Check if this is allowed for OCaml < 3.12.1 *)
-            flag ["ocaml"; "compile";  "package("^pkg^")"] & S pargs;
-            flag ["ocaml"; "ocamldep"; "package("^pkg^")"] & S pargs;
-            flag ["ocaml"; "doc";      "package("^pkg^")"] & S pargs;
-            flag ["ocaml"; "infer_interface"; "package("^pkg^")"] & S pargs;
-          end
-          (find_packages ());
-
-        (* Like -package but for extensions syntax. Morover -syntax is useless
-         * when linking. *)
-        List.iter begin fun syntax ->
-          flag ["ocaml"; "compile";  "syntax_"^syntax] & S[A"-syntax"; A syntax];
-          flag ["ocaml"; "ocamldep"; "syntax_"^syntax] & S[A"-syntax"; A syntax];
-          flag ["ocaml"; "doc";      "syntax_"^syntax] & S[A"-syntax"; A syntax];
-          flag ["ocaml"; "infer_interface"; "syntax_"^syntax] &
-          S[A"-syntax"; A syntax];
-        end (find_syntaxes ());
-
-        (* The default "thread" tag is not compatible with ocamlfind.
-         * Indeed, the default rules add the "threads.cma" or "threads.cmxa"
-         * options when using this tag. When using the "-linkpkg" option with
-         * ocamlfind, this module will then be added twice on the command line.
-         *
-         * To solve this, one approach is to add the "-thread" option when using
-         * the "threads" package using the previous plugin.
-        *)
-        flag ["ocaml"; "pkg_threads"; "compile"] (S[A "-thread"]);
-        flag ["ocaml"; "pkg_threads"; "doc"] (S[A "-I"; A "+threads"]);
-        flag ["ocaml"; "pkg_threads"; "link"] (S[A "-thread"]);
-        flag ["ocaml"; "pkg_threads"; "infer_interface"] (S[A "-thread"]);
-        flag ["c"; "pkg_threads"; "compile"] (S[A "-thread"]);
-        flag ["ocaml"; "package(threads)"; "compile"] (S[A "-thread"]);
-        flag ["ocaml"; "package(threads)"; "doc"] (S[A "-I"; A "+threads"]);
-        flag ["ocaml"; "package(threads)"; "link"] (S[A "-thread"]);
-        flag ["ocaml"; "package(threads)"; "infer_interface"] (S[A "-thread"]);
-        flag ["c"; "package(threads)"; "compile"] (S[A "-thread"]);
-
-      | _ ->
-        ()
-end
-
-module MyOCamlbuildBase = struct
-(* # 22 "src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
-
-
-  (** Base functions for writing myocamlbuild.ml
-      @author Sylvain Le Gall
-    *)
-
-
-  open Ocamlbuild_plugin
-  module OC = Ocamlbuild_pack.Ocaml_compiler
-
-
-  type dir = string
-  type file = string
-  type name = string
-  type tag = string
-
-
-  type t =
-      {
-        lib_ocaml: (name * dir list * string list) list;
-        lib_c:     (name * dir * file list) list;
-        flags:     (tag list * (spec OASISExpr.choices)) list;
-        (* Replace the 'dir: include' from _tags by a precise interdepends in
-         * directory.
-         *)
-        includes:  (dir * dir list) list;
-      }
-
-
-(* # 110 "src/plugins/ocamlbuild/MyOCamlbuildBase.ml" *)
-
-
-  let env_filename = Pathname.basename BaseEnvLight.default_filename
-
-
-  let dispatch_combine lst =
-    fun e ->
-      List.iter
-        (fun dispatch -> dispatch e)
-        lst
-
-
-  let tag_libstubs nm =
-    "use_lib"^nm^"_stubs"
-
-
-  let nm_libstubs nm =
-    nm^"_stubs"
-
-
-  let dispatch t e =
-    let env = BaseEnvLight.load ~allow_empty:true () in
-      match e with
-        | Before_options ->
-            let no_trailing_dot s =
-              if String.length s >= 1 && s.[0] = '.' then
-                String.sub s 1 ((String.length s) - 1)
-              else
-                s
-            in
-              List.iter
-                (fun (opt, var) ->
-                   try
-                     opt := no_trailing_dot (BaseEnvLight.var_get var env)
-                   with Not_found ->
-                     Printf.eprintf "W: Cannot get variable %s\n" var)
-                [
-                  Options.ext_obj, "ext_obj";
-                  Options.ext_lib, "ext_lib";
-                  Options.ext_dll, "ext_dll";
-                ]
-
-        | After_rules ->
-            (* Declare OCaml libraries *)
-            List.iter
-              (function
-                 | nm, [], intf_modules ->
-                     ocaml_lib nm;
-                     let cmis =
-                       List.map (fun m -> (OASISString.uncapitalize_ascii m) ^ ".cmi")
-                                intf_modules in
-                     dep ["ocaml"; "link"; "library"; "file:"^nm^".cma"] cmis
-                 | nm, dir :: tl, intf_modules ->
-                     ocaml_lib ~dir:dir (dir^"/"^nm);
-                     List.iter
-                       (fun dir ->
-                          List.iter
-                            (fun str ->
-                               flag ["ocaml"; "use_"^nm; str] (S[A"-I"; P dir]))
-                            ["compile"; "infer_interface"; "doc"])
-                       tl;
-                     let cmis =
-                       List.map (fun m -> dir^"/"^(OASISString.uncapitalize_ascii m)^".cmi")
-                                intf_modules in
-                     dep ["ocaml"; "link"; "library"; "file:"^dir^"/"^nm^".cma"]
-                         cmis)
-              t.lib_ocaml;
-
-            (* Declare directories dependencies, replace "include" in _tags. *)
-            List.iter
-              (fun (dir, include_dirs) ->
-                 Pathname.define_context dir include_dirs)
-              t.includes;
-
-            (* Declare C libraries *)
-            List.iter
-              (fun (lib, dir, headers) ->
-                   (* Handle C part of library *)
-                   flag ["link"; "library"; "ocaml"; "byte"; tag_libstubs lib]
-                     (S[A"-dllib"; A("-l"^(nm_libstubs lib)); A"-cclib";
-                        A("-l"^(nm_libstubs lib))]);
-
-                   flag ["link"; "library"; "ocaml"; "native"; tag_libstubs lib]
-                     (S[A"-cclib"; A("-l"^(nm_libstubs lib))]);
-
-                   if bool_of_string (BaseEnvLight.var_get "native_dynlink" env) then
-                     flag ["link"; "program"; "ocaml"; "byte"; tag_libstubs lib]
-                         (S[A"-dllib"; A("dll"^(nm_libstubs lib))]);
-
-                   (* When ocaml link something that use the C library, then one
-                      need that file to be up to date.
-                      This holds both for programs and for libraries.
-                    *)
-                   dep ["link"; "ocaml"; tag_libstubs lib]
-                     [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)];
-
-                   dep  ["compile"; "ocaml"; tag_libstubs lib]
-                     [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)];
-
-                   (* TODO: be more specific about what depends on headers *)
-                   (* Depends on .h files *)
-                   dep ["compile"; "c"]
-                     headers;
-
-                   (* Setup search path for lib *)
-                   flag ["link"; "ocaml"; "use_"^lib]
-                     (S[A"-I"; P(dir)]);
-              )
-              t.lib_c;
-
-              (* Add flags *)
-              List.iter
-              (fun (tags, cond_specs) ->
-                 let spec = BaseEnvLight.var_choose cond_specs env in
-                 let rec eval_specs =
-                   function
-                     | S lst -> S (List.map eval_specs lst)
-                     | A str -> A (BaseEnvLight.var_expand str env)
-                     | spec -> spec
-                 in
-                   flag tags & (eval_specs spec))
-              t.flags
-        | _ ->
-            ()
-
-
-  let dispatch_default conf t =
-    dispatch_combine
-      [
-        dispatch t;
-        MyOCamlbuildFindlib.dispatch conf;
-      ]
-
-
-end
-
-
-# 884 "myocamlbuild.ml"
-open Ocamlbuild_plugin;;
-let package_default =
-  {
-     MyOCamlbuildBase.lib_ocaml =
-       [
-          ("faraday", ["lib"], []);
-          ("faraday_async", ["async"], []);
-          ("faraday_lwt", ["lwt"], []);
-          ("faraday_lwt_unix", ["lwt"], [])
-       ];
-     lib_c = [];
-     flags = [];
-     includes = [("lwt", ["lib"]); ("lib_test", ["lib"]); ("async", ["lib"])]
-  }
-  ;;
-
-let conf = {MyOCamlbuildFindlib.no_automatic_syntax = false}
-
-let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;;
-
-# 906 "myocamlbuild.ml"
-(* OASIS_STOP *)
-Ocamlbuild_plugin.dispatch dispatch_default;;

+ 0 - 1
opam/findlib

@@ -1 +0,0 @@
-faraday

+ 2 - 0
pkg/pkg.ml

@@ -0,0 +1,2 @@
+#user "topfind"
+#require "topkg-jbuilder.auto"

+ 0 - 7976
setup.ml

@@ -1,7976 +0,0 @@
-(* setup.ml generated for the first time by OASIS v0.4.6 *)
-
-(* OASIS_START *)
-(* DO NOT EDIT (digest: 68879f85a75fd3d411f0ced162a213b7) *)
-(*
-   Regenerated by OASIS v0.4.8
-   Visit http://oasis.forge.ocamlcore.org for more information and
-   documentation about functions used in this file.
-*)
-module OASISGettext = struct
-(* # 22 "src/oasis/OASISGettext.ml" *)
-
-
-  let ns_ str = str
-  let s_ str = str
-  let f_ (str: ('a, 'b, 'c, 'd) format4) = str
-
-
-  let fn_ fmt1 fmt2 n =
-    if n = 1 then
-      fmt1^^""
-    else
-      fmt2^^""
-
-
-  let init = []
-end
-
-module OASISString = struct
-(* # 22 "src/oasis/OASISString.ml" *)
-
-
-  (** Various string utilities.
-
-      Mostly inspired by extlib and batteries ExtString and BatString libraries.
-
-      @author Sylvain Le Gall
-  *)
-
-
-  let nsplitf str f =
-    if str = "" then
-      []
-    else
-      let buf = Buffer.create 13 in
-      let lst = ref [] in
-      let push () =
-        lst := Buffer.contents buf :: !lst;
-        Buffer.clear buf
-      in
-      let str_len = String.length str in
-      for i = 0 to str_len - 1 do
-        if f str.[i] then
-          push ()
-        else
-          Buffer.add_char buf str.[i]
-      done;
-      push ();
-      List.rev !lst
-
-
-  (** [nsplit c s] Split the string [s] at char [c]. It doesn't include the
-      separator.
-  *)
-  let nsplit str c =
-    nsplitf str ((=) c)
-
-
-  let find ~what ?(offset=0) str =
-    let what_idx = ref 0 in
-    let str_idx = ref offset in
-    while !str_idx < String.length str &&
-          !what_idx < String.length what do
-      if str.[!str_idx] = what.[!what_idx] then
-        incr what_idx
-      else
-        what_idx := 0;
-      incr str_idx
-    done;
-    if !what_idx <> String.length what then
-      raise Not_found
-    else
-      !str_idx - !what_idx
-
-
-  let sub_start str len =
-    let str_len = String.length str in
-    if len >= str_len then
-      ""
-    else
-      String.sub str len (str_len - len)
-
-
-  let sub_end ?(offset=0) str len =
-    let str_len = String.length str in
-    if len >= str_len then
-      ""
-    else
-      String.sub str 0 (str_len - len)
-
-
-  let starts_with ~what ?(offset=0) str =
-    let what_idx = ref 0 in
-    let str_idx = ref offset in
-    let ok = ref true in
-    while !ok &&
-          !str_idx < String.length str &&
-          !what_idx < String.length what do
-      if str.[!str_idx] = what.[!what_idx] then
-        incr what_idx
-      else
-        ok := false;
-      incr str_idx
-    done;
-    if !what_idx = String.length what then
-      true
-    else
-      false
-
-
-  let strip_starts_with ~what str =
-    if starts_with ~what str then
-      sub_start str (String.length what)
-    else
-      raise Not_found
-
-
-  let ends_with ~what ?(offset=0) str =
-    let what_idx = ref ((String.length what) - 1) in
-    let str_idx = ref ((String.length str) - 1) in
-    let ok = ref true in
-    while !ok &&
-          offset <= !str_idx &&
-          0 <= !what_idx do
-      if str.[!str_idx] = what.[!what_idx] then
-        decr what_idx
-      else
-        ok := false;
-      decr str_idx
-    done;
-    if !what_idx = -1 then
-      true
-    else
-      false
-
-
-  let strip_ends_with ~what str =
-    if ends_with ~what str then
-      sub_end str (String.length what)
-    else
-      raise Not_found
-
-
-  let replace_chars f s =
-    let buf = Buffer.create (String.length s) in
-    String.iter (fun c -> Buffer.add_char buf (f c)) s;
-    Buffer.contents buf
-
-  let lowercase_ascii =
-    replace_chars
-      (fun c ->
-         if (c >= 'A' && c <= 'Z') then
-           Char.chr (Char.code c + 32)
-         else
-           c)
-
-  let uncapitalize_ascii s =
-    if s <> "" then
-      (lowercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1))
-    else
-      s
-
-  let uppercase_ascii =
-    replace_chars
-      (fun c ->
-         if (c >= 'a' && c <= 'z') then
-           Char.chr (Char.code c - 32)
-         else
-           c)
-
-  let capitalize_ascii s =
-    if s <> "" then
-      (uppercase_ascii (String.sub s 0 1)) ^ (String.sub s 1 ((String.length s) - 1))
-    else
-      s
-
-end
-
-module OASISUtils = struct
-(* # 22 "src/oasis/OASISUtils.ml" *)
-
-
-  open OASISGettext
-
-
-  module MapExt =
-  struct
-    module type S =
-    sig
-      include Map.S
-      val add_list: 'a t -> (key * 'a) list -> 'a t
-      val of_list: (key * 'a) list -> 'a t
-      val to_list: 'a t -> (key * 'a) list
-    end
-
-    module Make (Ord: Map.OrderedType) =
-    struct
-      include Map.Make(Ord)
-
-      let rec add_list t =
-        function
-          | (k, v) :: tl -> add_list (add k v t) tl
-          | [] -> t
-
-      let of_list lst = add_list empty lst
-
-      let to_list t = fold (fun k v acc -> (k, v) :: acc) t []
-    end
-  end
-
-
-  module MapString = MapExt.Make(String)
-
-
-  module SetExt  =
-  struct
-    module type S =
-    sig
-      include Set.S
-      val add_list: t -> elt list -> t
-      val of_list: elt list -> t
-      val to_list: t -> elt list
-    end
-
-    module Make (Ord: Set.OrderedType) =
-    struct
-      include Set.Make(Ord)
-
-      let rec add_list t =
-        function
-          | e :: tl -> add_list (add e t) tl
-          | [] -> t
-
-      let of_list lst = add_list empty lst
-
-      let to_list = elements
-    end
-  end
-
-
-  module SetString = SetExt.Make(String)
-
-
-  let compare_csl s1 s2 =
-    String.compare (OASISString.lowercase_ascii s1) (OASISString.lowercase_ascii s2)
-
-
-  module HashStringCsl =
-    Hashtbl.Make
-      (struct
-         type t = string
-         let equal s1 s2 = (compare_csl s1 s2) = 0
-         let hash s = Hashtbl.hash (OASISString.lowercase_ascii s)
-       end)
-
-  module SetStringCsl =
-    SetExt.Make
-      (struct
-         type t = string
-         let compare = compare_csl
-       end)
-
-
-  let varname_of_string ?(hyphen='_') s =
-    if String.length s = 0 then
-      begin
-        invalid_arg "varname_of_string"
-      end
-    else
-      begin
-        let buf =
-          OASISString.replace_chars
-            (fun c ->
-               if ('a' <= c && c <= 'z')
-                 ||
-                  ('A' <= c && c <= 'Z')
-                 ||
-                  ('0' <= c && c <= '9') then
-                 c
-               else
-                 hyphen)
-            s;
-        in
-        let buf =
-          (* Start with a _ if digit *)
-          if '0' <= s.[0] && s.[0] <= '9' then
-            "_"^buf
-          else
-            buf
-        in
-          OASISString.lowercase_ascii buf
-      end
-
-
-  let varname_concat ?(hyphen='_') p s =
-    let what = String.make 1 hyphen in
-    let p =
-      try
-        OASISString.strip_ends_with ~what p
-      with Not_found ->
-        p
-    in
-    let s =
-      try
-        OASISString.strip_starts_with ~what s
-      with Not_found ->
-        s
-    in
-      p^what^s
-
-
-  let is_varname str =
-    str = varname_of_string str
-
-
-  let failwithf fmt = Printf.ksprintf failwith fmt
-
-
-  let rec file_location ?pos1 ?pos2 ?lexbuf () =
-      match pos1, pos2, lexbuf with
-      | Some p, None, _ | None, Some p, _ ->
-        file_location ~pos1:p ~pos2:p ?lexbuf ()
-      | Some p1, Some p2, _ ->
-        let open Lexing in
-        let fn, lineno = p1.pos_fname, p1.pos_lnum in
-        let c1 = p1.pos_cnum - p1.pos_bol in
-        let c2 = c1 + (p2.pos_cnum - p1.pos_cnum) in
-        Printf.sprintf (f_ "file %S, line %d, characters %d-%d")  fn lineno c1 c2
-      | _, _, Some lexbuf ->
-        file_location
-          ~pos1:(Lexing.lexeme_start_p lexbuf)
-          ~pos2:(Lexing.lexeme_end_p lexbuf)
-          ()
-      | None, None, None ->
-        s_ "<position undefined>"
-
-
-  let failwithpf ?pos1 ?pos2 ?lexbuf fmt =
-    let loc = file_location ?pos1 ?pos2 ?lexbuf () in
-    Printf.ksprintf (fun s -> failwith (Printf.sprintf "%s: %s" loc s)) fmt
-
-
-end
-
-module OASISUnixPath = struct
-(* # 22 "src/oasis/OASISUnixPath.ml" *)
-
-
-  type unix_filename = string
-  type unix_dirname = string
-
-
-  type host_filename = string
-  type host_dirname = string
-
-
-  let current_dir_name = "."
-
-
-  let parent_dir_name = ".."
-
-
-  let is_current_dir fn =
-    fn = current_dir_name || fn = ""
-
-
-  let concat f1 f2 =
-    if is_current_dir f1 then
-      f2
-    else
-      let f1' =
-        try OASISString.strip_ends_with ~what:"/" f1 with Not_found -> f1
-      in
-      f1'^"/"^f2
-
-
-  let make =
-    function
-      | hd :: tl ->
-        List.fold_left
-          (fun f p -> concat f p)
-          hd
-          tl
-      | [] ->
-        invalid_arg "OASISUnixPath.make"
-
-
-  let dirname f =
-    try
-      String.sub f 0 (String.rindex f '/')
-    with Not_found ->
-      current_dir_name
-
-
-  let basename f =
-    try
-      let pos_start =
-        (String.rindex f '/') + 1
-      in
-      String.sub f pos_start ((String.length f) - pos_start)
-    with Not_found ->
-      f
-
-
-  let chop_extension f =
-    try
-      let last_dot =
-        String.rindex f '.'
-      in
-      let sub =
-        String.sub f 0 last_dot
-      in
-      try
-        let last_slash =
-          String.rindex f '/'
-        in
-        if last_slash < last_dot then
-          sub
-        else
-          f
-      with Not_found ->
-        sub
-
-    with Not_found ->
-      f
-
-
-  let capitalize_file f =
-    let dir = dirname f in
-    let base = basename f in
-    concat dir (OASISString.capitalize_ascii base)
-
-
-  let uncapitalize_file f =
-    let dir = dirname f in
-    let base = basename f in
-    concat dir (OASISString.uncapitalize_ascii base)
-
-
-end
-
-module OASISHostPath = struct
-(* # 22 "src/oasis/OASISHostPath.ml" *)
-
-
-  open Filename
-  open OASISGettext
-
-
-  module Unix = OASISUnixPath
-
-
-  let make =
-    function
-      | [] ->
-        invalid_arg "OASISHostPath.make"
-      | hd :: tl ->
-        List.fold_left Filename.concat hd tl
-
-
-  let of_unix ufn =
-    match Sys.os_type with
-    | "Unix" | "Cygwin" -> ufn
-    | "Win32" ->
-      make
-        (List.map
-           (fun p ->
-              if p = Unix.current_dir_name then
-                current_dir_name
-              else if p = Unix.parent_dir_name then
-                parent_dir_name
-              else
-                p)
-           (OASISString.nsplit ufn '/'))
-    | os_type ->
-      OASISUtils.failwithf
-        (f_ "Don't know the path format of os_type %S when translating unix \
-             filename. %S")
-        os_type ufn
-
-
-end
-
-module OASISFileSystem = struct
-(* # 22 "src/oasis/OASISFileSystem.ml" *)
-
-  (** File System functions
-
-      @author Sylvain Le Gall
-  *)
-
-  type 'a filename = string
-
-  class type closer =
-    object
-      method close: unit
-    end
-
-  class type reader =
-    object
-      inherit closer
-      method input: Buffer.t -> int -> unit
-    end
-
-  class type writer =
-    object
-      inherit closer
-      method output: Buffer.t -> unit
-    end
-
-  class type ['a] fs =
-    object
-      method string_of_filename: 'a filename -> string
-      method open_out: ?mode:(open_flag list) -> ?perm:int -> 'a filename -> writer
-      method open_in: ?mode:(open_flag list) -> ?perm:int -> 'a filename -> reader
-      method file_exists: 'a filename -> bool
-      method remove: 'a filename -> unit
-    end
-
-
-  module Mode =
-  struct
-    let default_in = [Open_rdonly]
-    let default_out = [Open_wronly; Open_creat; Open_trunc]
-
-    let text_in = Open_text :: default_in
-    let text_out = Open_text :: default_out
-
-    let binary_in = Open_binary :: default_in
-    let binary_out = Open_binary :: default_out
-  end
-
-  let std_length = 4096 (* Standard buffer/read length. *)
-  let binary_out = Mode.binary_out
-  let binary_in = Mode.binary_in
-
-  let of_unix_filename ufn = (ufn: 'a filename)
-  let to_unix_filename fn = (fn: string)
-
-
-  let defer_close o f =
-    try
-      let r = f o in o#close; r
-    with e ->
-      o#close; raise e
-
-
-  let stream_of_reader rdr =
-    let buf = Buffer.create std_length in
-    let pos = ref 0 in
-    let eof = ref false in
-    let rec next idx =
-      let bpos = idx - !pos in
-      if !eof then begin
-        None
-      end else if bpos < Buffer.length buf then begin
-        Some (Buffer.nth buf bpos)
-      end else begin
-        pos := !pos + Buffer.length buf;
-        Buffer.clear buf;
-        begin
-          try
-            rdr#input buf std_length;
-          with End_of_file ->
-            if Buffer.length buf = 0 then
-              eof := true
-        end;
-        next idx
-      end
-    in
-    Stream.from next
-
-
-  let read_all buf rdr =
-    try
-      while true do
-        rdr#input buf std_length
-      done
-    with End_of_file ->
-      ()
-
-  class ['a] host_fs rootdir : ['a] fs =
-    object (self)
-      method private host_filename fn = Filename.concat rootdir fn
-      method string_of_filename = self#host_filename
-
-      method open_out ?(mode=Mode.text_out)  ?(perm=0o666) fn =
-        let chn = open_out_gen mode perm (self#host_filename fn) in
-        object
-          method close = close_out chn
-          method output buf = Buffer.output_buffer chn buf
-        end
-
-      method open_in ?(mode=Mode.text_in) ?(perm=0o666) fn =
-        (* TODO: use Buffer.add_channel when minimal version of OCaml will
-         * be >= 4.03.0 (previous version was discarding last chars).
-         *)
-        let chn = open_in_gen mode perm (self#host_filename fn) in
-        let strm = Stream.of_channel chn in
-        object
-          method close = close_in chn
-          method input buf len =
-            let read = ref 0 in
-            try
-              for _i = 0 to len do
-                Buffer.add_char buf (Stream.next strm);
-                incr read
-              done
-            with Stream.Failure ->
-              if !read = 0 then
-                raise End_of_file
-        end
-
-      method file_exists fn = Sys.file_exists (self#host_filename fn)
-      method remove fn = Sys.remove (self#host_filename fn)
-    end
-
-end
-
-module OASISContext = struct
-(* # 22 "src/oasis/OASISContext.ml" *)
-
-
-  open OASISGettext
-
-
-  type level =
-    [ `Debug
-    | `Info
-    | `Warning
-    | `Error]
-
-
-  type source
-  type source_filename = source OASISFileSystem.filename
-
-
-  let in_srcdir ufn = OASISFileSystem.of_unix_filename ufn
-
-
-  type t =
-    {
-      (* TODO: replace this by a proplist. *)
-      quiet:                 bool;
-      info:                  bool;
-      debug:                 bool;
-      ignore_plugins:        bool;
-      ignore_unknown_fields: bool;
-      printf:                level -> string -> unit;
-      srcfs:                 source OASISFileSystem.fs;
-      load_oasis_plugin:     string -> bool;
-    }
-
-
-  let printf lvl str =
-    let beg =
-      match lvl with
-        | `Error -> s_ "E: "
-        | `Warning -> s_ "W: "
-        | `Info  -> s_ "I: "
-        | `Debug -> s_ "D: "
-    in
-    prerr_endline (beg^str)
-
-
-  let default =
-    ref
-      {
-        quiet                 = false;
-        info                  = false;
-        debug                 = false;
-        ignore_plugins        = false;
-        ignore_unknown_fields = false;
-        printf                = printf;
-        srcfs                 = new OASISFileSystem.host_fs(Sys.getcwd ());
-        load_oasis_plugin     = (fun _ -> false);
-      }
-
-
-  let quiet =
-    {!default with quiet = true}
-
-
-  let fspecs () =
-    (* TODO: don't act on default. *)
-    let ignore_plugins = ref false in
-    ["-quiet",
-     Arg.Unit (fun () -> default := {!default with quiet = true}),
-     s_ " Run quietly";
-
-     "-info",
-     Arg.Unit (fun () -> default := {!default with info = true}),
-     s_ " Display information message";
-
-
-     "-debug",
-     Arg.Unit (fun () -> default := {!default with debug = true}),
-     s_ " Output debug message";
-
-     "-ignore-plugins",
-     Arg.Set ignore_plugins,
-     s_ " Ignore plugin's field.";
-
-     "-C",
-     Arg.String
-       (fun str ->
-          Sys.chdir str;
-          default := {!default with srcfs = new OASISFileSystem.host_fs str}),
-     s_ "dir Change directory before running (affects setup.{data,log})."],
-    fun () -> {!default with ignore_plugins = !ignore_plugins}
-end
-
-module PropList = struct
-(* # 22 "src/oasis/PropList.ml" *)
-
-
-  open OASISGettext
-
-
-  type name = string
-
-
-  exception Not_set of name * string option
-  exception No_printer of name
-  exception Unknown_field of name * name
-
-
-  let () =
-    Printexc.register_printer
-      (function
-        | Not_set (nm, Some rsn) ->
-          Some
-            (Printf.sprintf (f_ "Field '%s' is not set: %s") nm rsn)
-        | Not_set (nm, None) ->
-          Some
-            (Printf.sprintf (f_ "Field '%s' is not set") nm)
-        | No_printer nm ->
-          Some
-            (Printf.sprintf (f_ "No default printer for value %s") nm)
-        | Unknown_field (nm, schm) ->
-          Some
-            (Printf.sprintf
-               (f_ "Field %s is not defined in schema %s") nm schm)
-        | _ ->
-          None)
-
-
-  module Data =
-  struct
-    type t =
-      (name, unit -> unit) Hashtbl.t
-
-    let create () =
-      Hashtbl.create 13
-
-    let clear t =
-      Hashtbl.clear t
-
-
-(* # 77 "src/oasis/PropList.ml" *)
-  end
-
-
-  module Schema =
-  struct
-    type ('ctxt, 'extra) value =
-      {
-        get:   Data.t -> string;
-        set:   Data.t -> ?context:'ctxt -> string -> unit;
-        help:  (unit -> string) option;
-        extra: 'extra;
-      }
-
-    type ('ctxt, 'extra) t =
-      {
-        name:      name;
-        fields:    (name, ('ctxt, 'extra) value) Hashtbl.t;
-        order:     name Queue.t;
-        name_norm: string -> string;
-      }
-
-    let create ?(case_insensitive=false) nm =
-      {
-        name      = nm;
-        fields    = Hashtbl.create 13;
-        order     = Queue.create ();
-        name_norm =
-          (if case_insensitive then
-             OASISString.lowercase_ascii
-           else
-             fun s -> s);
-      }
-
-    let add t nm set get extra help =
-      let key =
-        t.name_norm nm
-      in
-
-      if Hashtbl.mem t.fields key then
-        failwith
-          (Printf.sprintf
-             (f_ "Field '%s' is already defined in schema '%s'")
-             nm t.name);
-      Hashtbl.add
-        t.fields
-        key
-        {
-          set   = set;
-          get   = get;
-          help  = help;
-          extra = extra;
-        };
-      Queue.add nm t.order
-
-    let mem t nm =
-      Hashtbl.mem t.fields nm
-
-    let find t nm =
-      try
-        Hashtbl.find t.fields (t.name_norm nm)
-      with Not_found ->
-        raise (Unknown_field (nm, t.name))
-
-    let get t data nm =
-      (find t nm).get data
-
-    let set t data nm ?context x =
-      (find t nm).set
-        data
-        ?context
-        x
-
-    let fold f acc t =
-      Queue.fold
-        (fun acc k ->
-           let v =
-             find t k
-           in
-           f acc k v.extra v.help)
-        acc
-        t.order
-
-    let iter f t =
-      fold
-        (fun () -> f)
-        ()
-        t
-
-    let name t =
-      t.name
-  end
-
-
-  module Field =
-  struct
-    type ('ctxt, 'value, 'extra) t =
-      {
-        set:    Data.t -> ?context:'ctxt -> 'value -> unit;
-        get:    Data.t -> 'value;
-        sets:   Data.t -> ?context:'ctxt -> string -> unit;
-        gets:   Data.t -> string;
-        help:   (unit -> string) option;
-        extra:  'extra;
-      }
-
-    let new_id =
-      let last_id =
-        ref 0
-      in
-      fun () -> incr last_id; !last_id
-
-    let create ?schema ?name ?parse ?print ?default ?update ?help extra =
-      (* Default value container *)
-      let v =
-        ref None
-      in
-
-      (* If name is not given, create unique one *)
-      let nm =
-        match name with
-          | Some s -> s
-          | None -> Printf.sprintf "_anon_%d" (new_id ())
-      in
-
-      (* Last chance to get a value: the default *)
-      let default () =
-        match default with
-          | Some d -> d
-          | None -> raise (Not_set (nm, Some (s_ "no default value")))
-      in
-
-      (* Get data *)
-      let get data =
-        (* Get value *)
-        try
-          (Hashtbl.find data nm) ();
-          match !v with
-            | Some x -> x
-            | None -> default ()
-        with Not_found ->
-          default ()
-      in
-
-      (* Set data *)
-      let set data ?context x =
-        let x =
-          match update with
-            | Some f ->
-              begin
-                try
-                  f ?context (get data) x
-                with Not_set _ ->
-                  x
-              end
-            | None ->
-              x
-        in
-        Hashtbl.replace
-          data
-          nm
-          (fun () -> v := Some x)
-      in
-
-      (* Parse string value, if possible *)
-      let parse =
-        match parse with
-          | Some f ->
-            f
-          | None ->
-            fun ?context s ->
-              failwith
-                (Printf.sprintf
-                   (f_ "Cannot parse field '%s' when setting value %S")
-                   nm
-                   s)
-      in
-
-      (* Set data, from string *)
-      let sets data ?context s =
-        set ?context data (parse ?context s)
-      in
-
-      (* Output value as string, if possible *)
-      let print =
-        match print with
-          | Some f ->
-            f
-          | None ->
-            fun _ -> raise (No_printer nm)
-      in
-
-      (* Get data, as a string *)
-      let gets data =
-        print (get data)
-      in
-
-      begin
-        match schema with
-          | Some t ->
-            Schema.add t nm sets gets extra help
-          | None ->
-            ()
-      end;
-
-      {
-        set   = set;
-        get   = get;
-        sets  = sets;
-        gets  = gets;
-        help  = help;
-        extra = extra;
-      }
-
-    let fset data t ?context x =
-      t.set data ?context x
-
-    let fget data t =
-      t.get data
-
-    let fsets data t ?context s =
-      t.sets data ?context s
-
-    let fgets data t =
-      t.gets data
-  end
-
-
-  module FieldRO =
-  struct
-    let create ?schema ?name ?parse ?print ?default ?update ?help extra =
-      let fld =
-        Field.create ?schema ?name ?parse ?print ?default ?update ?help extra
-      in
-      fun data -> Field.fget data fld
-  end
-end
-
-module OASISMessage = struct
-(* # 22 "src/oasis/OASISMessage.ml" *)
-
-
-  open OASISGettext
-  open OASISContext
-
-
-  let generic_message ~ctxt lvl fmt =
-    let cond =
-      if ctxt.quiet then
-        false
-      else
-        match lvl with
-          | `Debug -> ctxt.debug
-          | `Info  -> ctxt.info
-          | _ -> true
-    in
-    Printf.ksprintf
-      (fun str ->
-         if cond then
-           begin
-             ctxt.printf lvl str
-           end)
-      fmt
-
-
-  let debug ~ctxt fmt =
-    generic_message ~ctxt `Debug fmt
-
-
-  let info ~ctxt fmt =
-    generic_message ~ctxt `Info fmt
-
-
-  let warning ~ctxt fmt =
-    generic_message ~ctxt `Warning fmt
-
-
-  let error ~ctxt fmt =
-    generic_message ~ctxt `Error fmt
-
-end
-
-module OASISVersion = struct
-(* # 22 "src/oasis/OASISVersion.ml" *)
-
-
-  open OASISGettext
-
-
-  type t = string
-
-
-  type comparator =
-    | VGreater of t
-    | VGreaterEqual of t
-    | VEqual of t
-    | VLesser of t
-    | VLesserEqual of t
-    | VOr of  comparator * comparator
-    | VAnd of comparator * comparator
-
-
-  (* Range of allowed characters *)
-  let is_digit c = '0' <= c && c <= '9'
-  let is_alpha c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')
-  let is_special = function | '.' | '+' | '-' | '~' -> true | _ -> false
-
-
-  let rec version_compare v1 v2 =
-    if v1 <> "" || v2 <> "" then
-      begin
-        (* Compare ascii string, using special meaning for version
-         * related char
-        *)
-        let val_ascii c =
-          if c = '~' then -1
-          else if is_digit c then 0
-          else if c = '\000' then 0
-          else if is_alpha c then Char.code c
-          else (Char.code c) + 256
-        in
-
-        let len1 = String.length v1 in
-        let len2 = String.length v2 in
-
-        let p = ref 0 in
-
-        (** Compare ascii part *)
-        let compare_vascii () =
-          let cmp = ref 0 in
-          while !cmp = 0 &&
-                !p < len1 && !p < len2 &&
-                not (is_digit v1.[!p] && is_digit v2.[!p]) do
-            cmp := (val_ascii v1.[!p]) - (val_ascii v2.[!p]);
-            incr p
-          done;
-          if !cmp = 0 && !p < len1 && !p = len2 then
-            val_ascii v1.[!p]
-          else if !cmp = 0 && !p = len1 && !p < len2 then
-            - (val_ascii v2.[!p])
-          else
-            !cmp
-        in
-
-        (** Compare digit part *)
-        let compare_digit () =
-          let extract_int v p =
-            let start_p = !p in
-            while !p < String.length v && is_digit v.[!p] do
-              incr p
-            done;
-            let substr =
-              String.sub v !p ((String.length v) - !p)
-            in
-            let res =
-              match String.sub v start_p (!p - start_p) with
-                | "" -> 0
-                | s -> int_of_string s
-            in
-            res, substr
-          in
-          let i1, tl1 = extract_int v1 (ref !p) in
-          let i2, tl2 = extract_int v2 (ref !p) in
-          i1 - i2, tl1, tl2
-        in
-
-        match compare_vascii () with
-          | 0 ->
-            begin
-              match compare_digit () with
-                | 0, tl1, tl2 ->
-                  if tl1 <> "" && is_digit tl1.[0] then
-                    1
-                  else if tl2 <> "" && is_digit tl2.[0] then
-                    -1
-                  else
-                    version_compare tl1 tl2
-                | n, _, _ ->
-                  n
-            end
-          | n ->
-            n
-      end
-    else begin
-      0
-    end
-
-
-  let version_of_string str = str
-
-
-  let string_of_version t = t
-
-
-  let chop t =
-    try
-      let pos =
-        String.rindex t '.'
-      in
-      String.sub t 0 pos
-    with Not_found ->
-      t
-
-
-  let rec comparator_apply v op =
-    match op with
-      | VGreater cv ->
-        (version_compare v cv) > 0
-      | VGreaterEqual cv ->
-        (version_compare v cv) >= 0
-      | VLesser cv ->
-        (version_compare v cv) < 0
-      | VLesserEqual cv ->
-        (version_compare v cv) <= 0
-      | VEqual cv ->
-        (version_compare v cv) = 0
-      | VOr (op1, op2) ->
-        (comparator_apply v op1) || (comparator_apply v op2)
-      | VAnd (op1, op2) ->
-        (comparator_apply v op1) && (comparator_apply v op2)
-
-
-  let rec string_of_comparator =
-    function
-      | VGreater v  -> "> "^(string_of_version v)
-      | VEqual v    -> "= "^(string_of_version v)
-      | VLesser v   -> "< "^(string_of_version v)
-      | VGreaterEqual v -> ">= "^(string_of_version v)
-      | VLesserEqual v  -> "<= "^(string_of_version v)
-      | VOr (c1, c2)  ->
-        (string_of_comparator c1)^" || "^(string_of_comparator c2)
-      | VAnd (c1, c2) ->
-        (string_of_comparator c1)^" && "^(string_of_comparator c2)
-
-
-  let rec varname_of_comparator =
-    let concat p v =
-      OASISUtils.varname_concat
-        p
-        (OASISUtils.varname_of_string
-           (string_of_version v))
-    in
-    function
-      | VGreater v -> concat "gt" v
-      | VLesser v  -> concat "lt" v
-      | VEqual v   -> concat "eq" v
-      | VGreaterEqual v -> concat "ge" v
-      | VLesserEqual v  -> concat "le" v
-      | VOr (c1, c2) ->
-        (varname_of_comparator c1)^"_or_"^(varname_of_comparator c2)
-      | VAnd (c1, c2) ->
-        (varname_of_comparator c1)^"_and_"^(varname_of_comparator c2)
-
-
-end
-
-module OASISLicense = struct
-(* # 22 "src/oasis/OASISLicense.ml" *)
-
-
-  (** License for _oasis fields
-      @author Sylvain Le Gall
-  *)
-
-
-  type license = string
-  type license_exception = string
-
-
-  type license_version =
-    | Version of OASISVersion.t
-    | VersionOrLater of OASISVersion.t
-    | NoVersion
-
-
-  type license_dep_5_unit =
-    {
-      license:   license;
-      excption:  license_exception option;
-      version:   license_version;
-    }
-
-
-  type license_dep_5 =
-    | DEP5Unit of license_dep_5_unit
-    | DEP5Or of license_dep_5 list
-    | DEP5And of license_dep_5 list
-
-
-  type t =
-    | DEP5License of license_dep_5
-    | OtherLicense of string (* URL *)
-
-
-end
-
-module OASISExpr = struct
-(* # 22 "src/oasis/OASISExpr.ml" *)
-
-
-  open OASISGettext
-  open OASISUtils
-
-
-  type test = string
-  type flag = string
-
-
-  type t =
-    | EBool of bool
-    | ENot of t
-    | EAnd of t * t
-    | EOr of t * t
-    | EFlag of flag
-    | ETest of test * string
-
-
-  type 'a choices = (t * 'a) list
-
-
-  let eval var_get t =
-    let rec eval' =
-      function
-        | EBool b ->
-            b
-
-        | ENot e ->
-            not (eval' e)
-
-        | EAnd (e1, e2) ->
-            (eval' e1) && (eval' e2)
-
-        | EOr (e1, e2) ->
-            (eval' e1) || (eval' e2)
-
-        | EFlag nm ->
-            let v =
-              var_get nm
-            in
-              assert(v = "true" || v = "false");
-              (v = "true")
-
-        | ETest (nm, vl) ->
-            let v =
-              var_get nm
-            in
-              (v = vl)
-    in
-      eval' t
-
-
-  let choose ?printer ?name var_get lst =
-    let rec choose_aux =
-      function
-        | (cond, vl) :: tl ->
-            if eval var_get cond then
-              vl
-            else
-              choose_aux tl
-        | [] ->
-            let str_lst =
-              if lst = [] then
-                s_ "<empty>"
-              else
-                String.concat
-                  (s_ ", ")
-                  (List.map
-                     (fun (cond, vl) ->
-                        match printer with
-                          | Some p -> p vl
-                          | None -> s_ "<no printer>")
-                     lst)
-            in
-              match name with
-                | Some nm ->
-                    failwith
-                      (Printf.sprintf
-                         (f_ "No result for the choice list '%s': %s")
-                         nm str_lst)
-                | None ->
-                    failwith
-                      (Printf.sprintf
-                         (f_ "No result for a choice list: %s")
-                         str_lst)
-    in
-      choose_aux (List.rev lst)
-
-
-end
-
-module OASISText = struct
-(* # 22 "src/oasis/OASISText.ml" *)
-
-  type elt =
-    | Para of string
-    | Verbatim of string
-    | BlankLine
-
-  type t = elt list
-
-end
-
-module OASISSourcePatterns = struct
-(* # 22 "src/oasis/OASISSourcePatterns.ml" *)
-
-  open OASISUtils
-  open OASISGettext
-
-  module Templater =
-  struct
-    (* TODO: use this module in BaseEnv.var_expand and BaseFileAB, at least. *)
-    type t =
-      {
-        atoms: atom list;
-        origin: string
-      }
-    and atom =
-      | Text of string
-      | Expr of expr
-    and expr =
-      | Ident of string
-      | String of string
-      | Call of string * expr
-
-
-    type env =
-      {
-        variables: string MapString.t;
-        functions: (string -> string) MapString.t;
-      }
-
-
-    let eval env t =
-      let rec eval_expr env =
-        function
-        | String str -> str
-        | Ident nm ->
-          begin
-            try
-              MapString.find nm env.variables
-            with Not_found ->
-              (* TODO: add error location within the string. *)
-              failwithf
-                (f_ "Unable to find variable %S in source pattern %S")
-                nm t.origin
-          end
-
-        | Call (fn, expr) ->
-          begin
-            try
-              (MapString.find fn env.functions) (eval_expr env expr)
-            with Not_found ->
-              (* TODO: add error location within the string. *)
-              failwithf
-                (f_ "Unable to find function %S in source pattern %S")
-                fn t.origin
-          end
-      in
-      String.concat ""
-        (List.map
-           (function
-             | Text str -> str
-             | Expr expr -> eval_expr env expr)
-           t.atoms)
-
-
-    let parse env s =
-      let lxr = Genlex.make_lexer [] in
-      let parse_expr s =
-        let st = lxr (Stream.of_string s) in
-        match Stream.npeek 3 st with
-        | [Genlex.Ident fn; Genlex.Ident nm] -> Call(fn, Ident nm)
-        | [Genlex.Ident fn; Genlex.String str] -> Call(fn, String str)
-        | [Genlex.String str] -> String str
-        | [Genlex.Ident nm] -> Ident nm
-        (* TODO: add error location within the string. *)
-        | _ -> failwithf (f_ "Unable to parse expression %S") s
-      in
-      let parse s =
-        let lst_exprs = ref [] in
-        let ss =
-          let buff = Buffer.create (String.length s) in
-          Buffer.add_substitute
-            buff
-            (fun s -> lst_exprs := (parse_expr s) :: !lst_exprs; "\000")
-            s;
-          Buffer.contents buff
-        in
-        let rec join =
-          function
-          | hd1 :: tl1, hd2 :: tl2 -> Text hd1 :: Expr hd2 :: join (tl1, tl2)
-          | [], tl -> List.map (fun e -> Expr e) tl
-          | tl, [] -> List.map (fun e -> Text e) tl
-        in
-        join (OASISString.nsplit ss '\000', List.rev (!lst_exprs))
-      in
-      let t = {atoms = parse s; origin = s} in
-      (* We rely on a simple evaluation for checking variables/functions.
-         It works because there is no if/loop statement.
-      *)
-      let _s : string = eval env t in
-      t
-
-(* # 144 "src/oasis/OASISSourcePatterns.ml" *)
-  end
-
-
-  type t = Templater.t
-
-
-  let env ~modul () =
-    {
-      Templater.
-      variables = MapString.of_list ["module", modul];
-      functions = MapString.of_list
-          [
-            "capitalize_file", OASISUnixPath.capitalize_file;
-            "uncapitalize_file", OASISUnixPath.uncapitalize_file;
-          ];
-    }
-
-  let all_possible_files lst ~path ~modul =
-    let eval = Templater.eval (env ~modul ()) in
-    List.fold_left
-      (fun acc pat -> OASISUnixPath.concat path (eval pat) :: acc)
-      [] lst
-
-
-  let to_string t = t.Templater.origin
-
-
-end
-
-module OASISTypes = struct
-(* # 22 "src/oasis/OASISTypes.ml" *)
-
-
-  type name          = string
-  type package_name  = string
-  type url           = string
-  type unix_dirname  = string
-  type unix_filename = string (* TODO: replace everywhere. *)
-  type host_dirname  = string (* TODO: replace everywhere. *)
-  type host_filename = string (* TODO: replace everywhere. *)
-  type prog          = string
-  type arg           = string
-  type args          = string list
-  type command_line  = (prog * arg list)
-
-
-  type findlib_name = string
-  type findlib_full = string