[packages/ocaml-gapi-ocaml] - up to 0.4.1

baggins baggins at pld-linux.org
Thu Mar 25 00:06:54 CET 2021


commit 5b797f51820fd0d719aae9d71863685d436e5ce9
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Thu Mar 25 00:06:44 2021 +0100

    - up to 0.4.1

 jbuilder.patch        | 10154 ------------------------------------------------
 ocaml-gapi-ocaml.spec |    36 +-
 2 files changed, 14 insertions(+), 10176 deletions(-)
---
diff --git a/ocaml-gapi-ocaml.spec b/ocaml-gapi-ocaml.spec
index 0a8f824..b0066fb 100644
--- a/ocaml-gapi-ocaml.spec
+++ b/ocaml-gapi-ocaml.spec
@@ -11,13 +11,12 @@
 %define		debug_package	%{nil}
 Summary:	Google Data Protocol (GData) client library
 Name:		ocaml-%{pkgname}
-Version:	0.3.6
+Version:	0.4.1
 Release:	1
 License:	MIT
 Group:		Libraries
 Source0:	https://github.com/astrada/gapi-ocaml/archive/v%{version}/%{name}-%{version}.tar.gz
-# Source0-md5:	b8759b3a9010769db86786141ed374dd
-Patch0:		jbuilder.patch
+# Source0-md5:	aeecae11fddf4511cea908808c73366a
 URL:		http://gapi-ocaml.forge.ocamlcore.org/
 BuildRequires:	cppo >= 0.9.3
 BuildRequires:	ocaml >= 4.02.3
@@ -25,10 +24,8 @@ BuildRequires:	ocaml-biniou-devel >= 1.0.6
 BuildRequires:	ocaml-cryptokit-devel >= 1.9
 BuildRequires:	ocaml-curl-devel >= 0.6.0
 BuildRequires:	ocaml-easy-format-devel >= 1.0.1
-BuildRequires:	ocaml-extlib-devel >= 1.5.4
 BuildRequires:	ocaml-findlib >= 1.4
 BuildRequires:	ocaml-net-netstring-devel >= 4.1.4
-BuildRequires:	ocaml-xmlm-devel >= 1.1.1
 BuildRequires:	ocaml-yojson-devel >= 1.1.6
 %requires_eq	ocaml-runtime
 BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
@@ -47,15 +44,12 @@ używających tej biblioteki.
 Summary:	Google Data Protocol (GData) client library - development part
 Summary(pl.UTF-8):	Wiązania gapi dla OCamla - cześć programistyczna
 Group:		Development/Libraries
-%requires_eq	ocaml
+%requires_eq ocaml
 Requires:	ocaml-biniou-devel >= 1.0.6
 Requires:	ocaml-cryptokit-devel >= 1.9
 Requires:	ocaml-curl-devel >= 0.6.0
 Requires:	ocaml-easy-format-devel >= 1.0.1
-Requires:	ocaml-extlib-devel >= 1.5.4
-Requires:	ocaml-net-netstring-devel >= 3.6
-#Requires:	ocaml-net-netstring-devel >= 3.7.3
-Requires:	ocaml-xmlm-devel >= 1.1.1
+Requires:	ocaml-net-netstring-devel >= 3.7.3
 Requires:	ocaml-yojson-devel >= 1.1.6
 
 %description devel
@@ -68,26 +62,22 @@ tej biblioteki.
 
 %prep
 %setup -q -n %{pkgname}-%{version}
-%patch0 -p1 -R
 
 %build
-ocaml setup.ml -configure \
-	--destdir $RPM_BUILD_ROOT
-ocaml setup.ml -build
+dune build
 
 %install
 rm -rf $RPM_BUILD_ROOT
-export OCAMLFIND_DESTDIR=$RPM_BUILD_ROOT%{_libdir}/ocaml
-install -d $OCAMLFIND_DESTDIR
-ocaml setup.ml -install
+
+dune install --destdir=$RPM_BUILD_ROOT
 
 # move to dir pld ocamlfind looks
-install -d $RPM_BUILD_ROOT%{_libdir}/ocaml/site-lib/%{pkgname}
-mv $OCAMLFIND_DESTDIR/%{pkgname}/META \
-	$RPM_BUILD_ROOT%{_libdir}/ocaml/site-lib/%{pkgname}
-cat <<EOF >> $RPM_BUILD_ROOT%{_libdir}/ocaml/site-lib/%{pkgname}/META
+cat <<EOF >> $RPM_BUILD_ROOT%{_libdir}/ocaml/%{pkgname}/META
 directory="+%{pkgname}"
 EOF
+install -d $RPM_BUILD_ROOT%{_libdir}/ocaml/site-lib/%{pkgname}
+ln -sr $RPM_BUILD_ROOT%{_libdir}/ocaml/%{pkgname}/META \
+	$RPM_BUILD_ROOT%{_libdir}/ocaml/site-lib/%{pkgname}
 
 # no standard way of packaging .mli docs in pld. just drop
 %{__rm} $RPM_BUILD_ROOT%{_libdir}/ocaml/%{pkgname}/*.mli
@@ -99,7 +89,9 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(644,root,root,755)
 %doc LICENSE
 %dir %{_libdir}/ocaml/%{pkgname}
-%{_libdir}/ocaml/%{pkgname}/*.annot
+%{_libdir}/ocaml/gapi-ocaml/META
+%{_libdir}/ocaml/gapi-ocaml/dune-package
+%{_libdir}/ocaml/gapi-ocaml/opam
 %{_libdir}/ocaml/%{pkgname}/*.cma
 %{_libdir}/ocaml/%{pkgname}/*.cmt*
 %{_libdir}/ocaml/%{pkgname}/*.cm[ix]
diff --git a/jbuilder.patch b/jbuilder.patch
deleted file mode 100644
index e77f441..0000000
--- a/jbuilder.patch
+++ /dev/null
@@ -1,10154 +0,0 @@
-From 3eca798f99a6babfb457c532a1803f3b491e779d Mon Sep 17 00:00:00 2001
-From: Rudi Grinberg <rudi.grinberg at gmail.com>
-Date: Sat, 18 Nov 2017 17:00:26 +0800
-Subject: [PATCH] Port to jbuilder
-
-This PR switch the build system from oasis to jbuilder. The advantages include:
-
-* Much faster builds
-* No need to check in generated code
-* Support for building documentation using odoc. ($ jbuilder build @doc)
-* Ability to easily vendor gapi in other application.
----
- .gitignore                                         |    9 +-
- _oasis                                             |  187 -
- _tags                                              |  136 -
- examples/auth/jbuild                               |    9 +
- gapi-ocaml.descr                                   |   10 +
- gapi-ocaml.opam                                    |   22 +
- myocamlbuild.ml                                    |  902 ---
- opam/descr                                         |   11 -
- opam/findlib                                       |    1 -
- opam/opam                                          |   36 -
- setup.ml                                           | 8484 --------------------
- src/gapi-ocaml.odocl                               |   67 -
- src/gapi/jbuild                                    |    8 +
- src/gdata/jbuild                                   |    8 +
- src/test/jbuild                                    |   10 +
- src/test/testMonadic.ml                            |    7 +-
- {test_data => src/test/test_data}/.gitignore       |    0
- {test_data => src/test/test_data}/acl_feed.xml     |    0
- .../test/test_data}/all_calendars.xml              |    0
- .../test/test_data}/calendar_entry.xml             |    0
- .../test_data}/calendar_entry_with_extensions.xml  |    0
- .../test/test_data}/event_batch_request.xml        |    0
- {test_data => src/test/test_data}/event_entry.xml  |    0
- {test_data => src/test/test_data}/event_feed.xml   |    0
- .../test/test_data}/new_event_entry.xml            |    0
- {test_data => src/test/test_data}/recurrence.xml   |    0
- {test_data => src/test/test_data}/settings.xml     |    0
- {test_data => src/test/test_data}/test.pdf         |  Bin
- .../test_data}/test_acl_entry_to_data_model.xml    |    0
- .../test/test_data}/test_adsense_accounts.json     |    0
- .../test/test_data}/test_adsense_adclients.json    |    0
- .../test/test_data}/test_adsense_adunits.json      |    0
- .../test_data}/test_adsense_customchannels.json    |    0
- .../test/test_data}/test_adsense_report.json       |    0
- .../test/test_data}/test_adsense_urlchannels.json  |    0
- .../test/test_data}/test_analytics_data.json       |    0
- .../test/test_data}/test_bigquery_dataset.json     |    0
- .../test_data}/test_bigquery_dataset_list.json     |    0
- .../test_data}/test_bigquery_getqueryresults.json  |    0
- .../test/test_data}/test_bigquery_job.json         |    0
- .../test/test_data}/test_bigquery_job_list.json    |    0
- .../test_data}/test_bigquery_project_list.json     |    0
- .../test_data}/test_bigquery_queryrequest.json     |    0
- .../test/test_data}/test_bigquery_queryresult.json |    0
- .../test/test_data}/test_bigquery_table.json       |    0
- .../test/test_data}/test_bigquery_table_list.json  |    0
- .../test_data}/test_bigquery_tabledata_list.json   |    0
- .../test/test_data}/test_blogger_blog.json         |    0
- .../test/test_data}/test_blogger_blog_list.json    |    0
- .../test/test_data}/test_blogger_comment.json      |    0
- .../test/test_data}/test_blogger_comment_list.json |    0
- .../test/test_data}/test_blogger_page.json         |    0
- .../test/test_data}/test_blogger_page_list.json    |    0
- .../test/test_data}/test_blogger_post.json         |    0
- .../test/test_data}/test_blogger_post_list.json    |    0
- .../test/test_data}/test_blogger_user.json         |    0
- .../test/test_data}/test_calendar_acl.json         |    0
- .../test/test_data}/test_calendar_colors.json      |    0
- .../test_calendar_entry_to_data_model.xml          |    0
- .../test/test_data}/test_calendar_event_list.json  |    0
- .../test_data}/test_calendar_event_resource.json   |    0
- .../test/test_data}/test_calendar_list.json        |    0
- .../test_data}/test_calendar_rest_service.json     |    0
- .../test/test_data}/test_calendar_settings.json    |    0
- .../test/test_data}/test_calendars.json            |    0
- .../test/test_data}/test_directory_list.json       |    0
- .../test_data}/test_discovery_rest_service.json    |    0
- .../test/test_data}/test_documents_acl_feed.xml    |    0
- .../test_data}/test_documents_archive_entry.xml    |    0
- .../test_data}/test_documents_changes_feed.xml     |    0
- .../test/test_data}/test_documents_entry.xml       |    0
- .../test/test_data}/test_documents_feed.xml        |    0
- .../test_data}/test_documents_revisions_feed.xml   |    0
- .../test_data}/test_documents_user_metadata.xml    |    0
- .../test/test_data}/test_drive_about.json          |    0
- .../test/test_data}/test_drive_app_list.json       |    0
- .../test/test_data}/test_drive_change.json         |    0
- .../test/test_data}/test_drive_change_list.json    |    0
- .../test/test_data}/test_drive_child_list.json     |    0
- .../test_data}/test_drive_child_reference.json     |    0
- .../test/test_data}/test_drive_file.json           |    0
- .../test/test_data}/test_drive_file_list.json      |    0
- .../test/test_data}/test_drive_parent_list.json    |    0
- .../test_data}/test_drive_parent_reference.json    |    0
- .../test/test_data}/test_drive_permission.json     |    0
- .../test_data}/test_drive_permission_list.json     |    0
- .../test/test_data}/test_drive_revision.json       |    0
- .../test/test_data}/test_drive_revision_list.json  |    0
- .../test/test_data}/test_freebusy.json             |    0
- .../test/test_data}/test_freebusy_parameters.json  |    0
- .../test/test_data}/test_management_accounts.json  |    0
- .../test/test_data}/test_management_goals.json     |    0
- .../test/test_data}/test_management_profiles.json  |    0
- .../test/test_data}/test_management_segments.json  |    0
- .../test_data}/test_management_webproperties.json  |    0
- .../test_data}/test_pagespeedonline_result.json    |    0
- .../test/test_data}/test_parse_acl_feed.xml        |    0
- .../test/test_data}/test_parse_archive_entry.xml   |    0
- .../test_data}/test_parse_calendar_event_entry.xml |    0
- .../test/test_data}/test_parse_changes_feed.xml    |    0
- .../test/test_data}/test_parse_documents_entry.xml |    0
- .../test/test_data}/test_parse_documents_feed.xml  |    0
- .../test/test_data}/test_parse_revisions_feed.xml  |    0
- .../test_data}/test_parse_user_metadata_entry.xml  |    0
- .../test/test_data}/test_plus_activity.json        |    0
- .../test/test_data}/test_plus_activity_feed.json   |    0
- .../test/test_data}/test_plus_comment.json         |    0
- .../test/test_data}/test_plus_comment_feed.json    |    0
- .../test/test_data}/test_plus_people_feed.json     |    0
- .../test/test_data}/test_plus_person.json          |    0
- .../test/test_data}/test_plus_rest_service.json    |    0
- .../test/test_data}/test_request_error.json        |    0
- .../test/test_data}/test_search_results.json       |    0
- .../test_data}/test_siteVerification_token.json    |    0
- .../test_siteVerification_webresource.json         |    0
- .../test_siteVerification_webresource_list.json    |    0
- {test_data => src/test/test_data}/test_task.json   |    0
- .../test/test_data}/test_task_list.json            |    0
- .../test/test_data}/test_task_lists.json           |    0
- {test_data => src/test/test_data}/test_tasks.json  |    0
- .../test/test_data}/test_tasks_rest_service.json   |    0
- .../test/test_data}/test_tokeninfo.json            |    0
- .../test/test_data}/test_urlshortener_url.json     |    0
- .../test_data}/test_urlshortener_url_history.json  |    0
- .../test/test_data}/test_userinfo.json             |    0
- tools/jbuild                                       |    9 +
- 126 files changed, 81 insertions(+), 9835 deletions(-)
- delete mode 100644 _oasis
- delete mode 100644 _tags
- create mode 100644 examples/auth/jbuild
- create mode 100644 gapi-ocaml.descr
- create mode 100644 gapi-ocaml.opam
- delete mode 100644 myocamlbuild.ml
- delete mode 100644 opam/descr
- delete mode 100644 opam/findlib
- delete mode 100644 opam/opam
- delete mode 100644 setup.ml
- delete mode 100644 src/gapi-ocaml.odocl
- create mode 100644 src/gapi/jbuild
- create mode 100644 src/gdata/jbuild
- create mode 100644 src/test/jbuild
- rename {test_data => src/test/test_data}/.gitignore (100%)
- rename {test_data => src/test/test_data}/acl_feed.xml (100%)
- rename {test_data => src/test/test_data}/all_calendars.xml (100%)
- rename {test_data => src/test/test_data}/calendar_entry.xml (100%)
- rename {test_data => src/test/test_data}/calendar_entry_with_extensions.xml (100%)
- rename {test_data => src/test/test_data}/event_batch_request.xml (100%)
- rename {test_data => src/test/test_data}/event_entry.xml (100%)
- rename {test_data => src/test/test_data}/event_feed.xml (100%)
- rename {test_data => src/test/test_data}/new_event_entry.xml (100%)
- rename {test_data => src/test/test_data}/recurrence.xml (100%)
- rename {test_data => src/test/test_data}/settings.xml (100%)
- rename {test_data => src/test/test_data}/test.pdf (100%)
- rename {test_data => src/test/test_data}/test_acl_entry_to_data_model.xml (100%)
- rename {test_data => src/test/test_data}/test_adsense_accounts.json (100%)
- rename {test_data => src/test/test_data}/test_adsense_adclients.json (100%)
- rename {test_data => src/test/test_data}/test_adsense_adunits.json (100%)
- rename {test_data => src/test/test_data}/test_adsense_customchannels.json (100%)
- rename {test_data => src/test/test_data}/test_adsense_report.json (100%)
- rename {test_data => src/test/test_data}/test_adsense_urlchannels.json (100%)
- rename {test_data => src/test/test_data}/test_analytics_data.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_dataset.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_dataset_list.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_getqueryresults.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_job.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_job_list.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_project_list.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_queryrequest.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_queryresult.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_table.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_table_list.json (100%)
- rename {test_data => src/test/test_data}/test_bigquery_tabledata_list.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_blog.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_blog_list.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_comment.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_comment_list.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_page.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_page_list.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_post.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_post_list.json (100%)
- rename {test_data => src/test/test_data}/test_blogger_user.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_acl.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_colors.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_entry_to_data_model.xml (100%)
- rename {test_data => src/test/test_data}/test_calendar_event_list.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_event_resource.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_list.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_rest_service.json (100%)
- rename {test_data => src/test/test_data}/test_calendar_settings.json (100%)
- rename {test_data => src/test/test_data}/test_calendars.json (100%)
- rename {test_data => src/test/test_data}/test_directory_list.json (100%)
- rename {test_data => src/test/test_data}/test_discovery_rest_service.json (100%)
- rename {test_data => src/test/test_data}/test_documents_acl_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_documents_archive_entry.xml (100%)
- rename {test_data => src/test/test_data}/test_documents_changes_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_documents_entry.xml (100%)
- rename {test_data => src/test/test_data}/test_documents_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_documents_revisions_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_documents_user_metadata.xml (100%)
- rename {test_data => src/test/test_data}/test_drive_about.json (100%)
- rename {test_data => src/test/test_data}/test_drive_app_list.json (100%)
- rename {test_data => src/test/test_data}/test_drive_change.json (100%)
- rename {test_data => src/test/test_data}/test_drive_change_list.json (100%)
- rename {test_data => src/test/test_data}/test_drive_child_list.json (100%)
- rename {test_data => src/test/test_data}/test_drive_child_reference.json (100%)
- rename {test_data => src/test/test_data}/test_drive_file.json (100%)
- rename {test_data => src/test/test_data}/test_drive_file_list.json (100%)
- rename {test_data => src/test/test_data}/test_drive_parent_list.json (100%)
- rename {test_data => src/test/test_data}/test_drive_parent_reference.json (100%)
- rename {test_data => src/test/test_data}/test_drive_permission.json (100%)
- rename {test_data => src/test/test_data}/test_drive_permission_list.json (100%)
- rename {test_data => src/test/test_data}/test_drive_revision.json (100%)
- rename {test_data => src/test/test_data}/test_drive_revision_list.json (100%)
- rename {test_data => src/test/test_data}/test_freebusy.json (100%)
- rename {test_data => src/test/test_data}/test_freebusy_parameters.json (100%)
- rename {test_data => src/test/test_data}/test_management_accounts.json (100%)
- rename {test_data => src/test/test_data}/test_management_goals.json (100%)
- rename {test_data => src/test/test_data}/test_management_profiles.json (100%)
- rename {test_data => src/test/test_data}/test_management_segments.json (100%)
- rename {test_data => src/test/test_data}/test_management_webproperties.json (100%)
- rename {test_data => src/test/test_data}/test_pagespeedonline_result.json (100%)
- rename {test_data => src/test/test_data}/test_parse_acl_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_archive_entry.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_calendar_event_entry.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_changes_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_documents_entry.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_documents_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_revisions_feed.xml (100%)
- rename {test_data => src/test/test_data}/test_parse_user_metadata_entry.xml (100%)
- rename {test_data => src/test/test_data}/test_plus_activity.json (100%)
- rename {test_data => src/test/test_data}/test_plus_activity_feed.json (100%)
- rename {test_data => src/test/test_data}/test_plus_comment.json (100%)
- rename {test_data => src/test/test_data}/test_plus_comment_feed.json (100%)
- rename {test_data => src/test/test_data}/test_plus_people_feed.json (100%)
- rename {test_data => src/test/test_data}/test_plus_person.json (100%)
- rename {test_data => src/test/test_data}/test_plus_rest_service.json (100%)
- rename {test_data => src/test/test_data}/test_request_error.json (100%)
- rename {test_data => src/test/test_data}/test_search_results.json (100%)
- rename {test_data => src/test/test_data}/test_siteVerification_token.json (100%)
- rename {test_data => src/test/test_data}/test_siteVerification_webresource.json (100%)
- rename {test_data => src/test/test_data}/test_siteVerification_webresource_list.json (100%)
- rename {test_data => src/test/test_data}/test_task.json (100%)
- rename {test_data => src/test/test_data}/test_task_list.json (100%)
- rename {test_data => src/test/test_data}/test_task_lists.json (100%)
- rename {test_data => src/test/test_data}/test_tasks.json (100%)
- rename {test_data => src/test/test_data}/test_tasks_rest_service.json (100%)
- rename {test_data => src/test/test_data}/test_tokeninfo.json (100%)
- rename {test_data => src/test/test_data}/test_urlshortener_url.json (100%)
- rename {test_data => src/test/test_data}/test_urlshortener_url_history.json (100%)
- rename {test_data => src/test/test_data}/test_userinfo.json (100%)
- create mode 100644 tools/jbuild
-
-diff --git a/.gitignore b/.gitignore
-index 2b0014b4..3edf6fe7 100644
---- a/.gitignore
-+++ b/.gitignore
-@@ -2,10 +2,5 @@
- *.bak
- 
- _build
--*.byte
--*.native
--
--*.docdir
--setup.data
--setup.log
--
-+*.install
-+.merlin
-\ No newline at end of file
-diff --git a/_oasis b/_oasis
-deleted file mode 100644
-index efd9190f..00000000
---- a/_oasis
-+++ /dev/null
-@@ -1,187 +0,0 @@
--OASISFormat: 0.4
--OCamlVersion: >= 4.02.3
--Name: gapi-ocaml
--Version: 0.3.5
--LicenseFile: LICENSE
--License: MIT
--BuildType: ocamlbuild (0.4)
--Authors: Alessandro Strada
--Maintainers: Alessandro Strada <alessandro.strada at gmail.com>
--Copyrights: (C) 2011-2016 Alessandro Strada
--Homepage: https://github.com/astrada/gapi-ocaml
--Plugins: META (0.4)
--BuildTools: ocamlbuild
--
--Synopsis: A simple OCaml client for Google Services.
--
--Description: gapi-ocaml is a simple, unofficial, OCaml client for
--  Google Services. The library supports ClientLogin, OAuth 1.0a, and
--  OAuth 2.0 authentication.  Supported RESTful APIs: Calendar APIs v3,
--  Google+ API v1, Tasks API v1, APIs Discovery Service v1, URL Shortener
--  API v1, OAuth2 API v2, Custom Search API v1, Google Analytics API v3,
--  Page Speed Online API v1, Blogger API v2, Site Verification API v1,
--  AdSense Management API v1.4, BigQuery API v2, Drive API v2, Drive API v3,
--  Gmail API v1. Google Data Protocol APIs (GData): Google Documents List API
--  v3.
--
--# Flags
--Flag all
--  Description: Build all
--  Default: false
--
--# Flags
--Flag generator
--  Description: Build service generator
--  Default$: flag(all)
--
--# Flags
--Flag examples
--  Description: Build examples
--  Default$: flag(all)
--
--# Libraries
--Library "gapi-ocaml"
--  Path: src/gapi
--  Modules:
--    GapiUtils,
--    GapiCore,
--    GapiCurl,
--    GapiPipe,
--    GapiConfig,
--    GapiConversation,
--    GapiAuthResponse,
--    GapiClientLogin,
--    GapiOAuth1,
--    GapiOAuth2,
--    GapiAuth,
--    GapiRequest,
--    GapiMonad,
--    GapiError,
--    GapiService,
--    GapiDate,
--    GapiJson,
--    GapiLens,
--    GapiMediaResource,
--    GapiCalendarV3Model,
--    GapiCalendarV3Service,
--    GapiPlusV1Model,
--    GapiPlusV1Service,
--    GapiTasksV1Model,
--    GapiTasksV1Service,
--    GapiDiscoveryV1Model,
--    GapiDiscoveryV1Service,
--    GapiUrlshortenerV1Model,
--    GapiUrlshortenerV1Service,
--    GapiOauth2V2Model,
--    GapiOauth2V2Service,
--    GapiCustomsearchV1Model,
--    GapiCustomsearchV1Service,
--    GapiAnalyticsV3Model,
--    GapiAnalyticsV3Service,
--    GapiPagespeedonlineV1Model,
--    GapiPagespeedonlineV1Service,
--    GapiBloggerV2Model,
--    GapiBloggerV2Service,
--    GapiSiteVerificationV1Model,
--    GapiSiteVerificationV1Service,
--    GapiAdsenseV1_1Model,
--    GapiAdsenseV1_1Service,
--    GapiAdsenseV1_4Model,
--    GapiAdsenseV1_4Service,
--    GapiBigqueryV2Model,
--    GapiBigqueryV2Service,
--    GapiDriveV2Model,
--    GapiDriveV2Service,
--    GapiDriveV3Model,
--    GapiDriveV3Service,
--    GapiGmailV1Model,
--    GapiGmailV1Service
--  BuildDepends: extlib, netstring (>= 4.1.4), curl, str, cryptokit, yojson
--  XMETADescription: Google APIs client library
--
--Library gdata
--  Path: src/gdata
--  Modules:
--    GdataUtils,
--    GdataCore,
--    GdataBatch,
--    GdataAtom,
--    GdataExtensions,
--    GdataComments,
--    GdataService,
--    GdataACL,
--    GdataACLService,
--    GdataDocumentsV3Model,
--    GdataDocumentsV3Service
--  BuildDepends: gapi-ocaml, xmlm
--  FindlibParent: gapi-ocaml
--  XMETADescription: Google Data Protocol (GData) client library
--
--# Documentation
--Document "gapi-ocaml"
--  Title: API reference for Google APIs client library
--  Type: ocamlbuild (0.3)
--  InstallDir: $htmldir/html
--  Install: false
--  DataFiles: doc/style.css
--  BuildTools+: ocamldoc
--  XOCamlbuildPath: src/
--  XOCamlbuildLibraries: gapi-ocaml, gapi-ocaml.gdata
--
--# Executables
--Executable "serviceGenerator"
--  Build$: flag(generator) || flag(all)
--  Path: tools
--  Install: false
--  MainIs: serviceGenerator.ml
--  BuildDepends: gapi-ocaml, monad-custom
--
--# Examples
--Executable "oauth2Flow"
--  Build$: flag(examples) || flag(all)
--  Path: examples/auth
--  Install: false
--  MainIs: oauth2Flow.ml
--  BuildDepends: gapi-ocaml.gdata, nethttpd (>= 3.5.1)
--
--Executable "oauth1Flow"
--  Build$: flag(examples) || flag(all)
--  Path: examples/auth
--  Install: false
--  MainIs: oauth1Flow.ml
--  BuildDepends: gapi-ocaml, nethttpd (>= 3.5.1)
--
--Executable "clientLoginFlow"
--  Build$: flag(examples) || flag(all)
--  Path: examples/auth
--  Install: false
--  MainIs: clientLoginFlow.ml
--  BuildDepends: gapi-ocaml, nethttpd (>= 3.5.1)
--
--# Tests
--Executable "refreshOAuth2Token"
--  Build$: flag(tests) || flag(all)
--  Path: src/test
--  Install: false
--  MainIs: refreshOAuth2Token.ml
--  BuildDepends: gapi-ocaml, oUnit
--
--Executable "test_suite"
--  Build$: flag(tests) || flag(all)
--  Path: src/test
--  Install: false
--  MainIs: testSuite.ml
--  BuildDepends: oUnit, gapi-ocaml.gdata, monad-custom
--
--Test core
--  Run$: flag(tests) || flag(all)
--  Command: $test_suite
--  TestTools: test_suite
--
--# VCS
--SourceRepository head
--  Type: git
--  Location: https://github.com/astrada/gapi-ocaml.git
--  Browser: https://github.com/astrada/gapi-ocaml
--  Branch: master
--
-diff --git a/_tags b/_tags
-deleted file mode 100644
-index 00d4b16d..00000000
---- a/_tags
-+++ /dev/null
-@@ -1,136 +0,0 @@
--<tools/*.ml>: syntax_camlp4o
--"src/test/testMonadic.ml": syntax_camlp4o
--"tools/serviceGenerator.byte": debug
--# Disable warning 23 (Useless record "with" clause) for generated modules
--<src/gapi/gapi*Model.ml>: warn(-x)
--# Disable warning 3 (Deprecated feature), and 58 (Missing cmx file) for
--# compatibility with old compilers
--<src/gapi/*.ml>: warn(-d-58)
--<src/gdata/*.ml>: warn(-d-58)
--<tools/*.ml>: warn(-d)
--# Disable warning 52 (Fragile costant pattern) for tests
--<src/test/testDocumentsV3Service.ml>: warn(-52)
--
--# OASIS_START
--# DO NOT EDIT (digest: 0e6ebac24f87b5de56171c0568a0ecf9)
--# 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 gapi-ocaml
--"src/gapi/gapi-ocaml.cmxs": use_gapi-ocaml
--<src/gapi/*.ml{,i,y}>: package(cryptokit)
--<src/gapi/*.ml{,i,y}>: package(curl)
--<src/gapi/*.ml{,i,y}>: package(extlib)
--<src/gapi/*.ml{,i,y}>: package(netstring)
--<src/gapi/*.ml{,i,y}>: package(str)
--<src/gapi/*.ml{,i,y}>: package(yojson)
--# Library gdata
--"src/gdata/gdata.cmxs": use_gdata
--<src/gdata/*.ml{,i,y}>: package(cryptokit)
--<src/gdata/*.ml{,i,y}>: package(curl)
--<src/gdata/*.ml{,i,y}>: package(extlib)
--<src/gdata/*.ml{,i,y}>: package(netstring)
--<src/gdata/*.ml{,i,y}>: package(str)
--<src/gdata/*.ml{,i,y}>: package(xmlm)
--<src/gdata/*.ml{,i,y}>: package(yojson)
--<src/gdata/*.ml{,i,y}>: use_gapi-ocaml
--# Executable serviceGenerator
--"tools/serviceGenerator.byte": package(cryptokit)
--"tools/serviceGenerator.byte": package(curl)
--"tools/serviceGenerator.byte": package(extlib)
--"tools/serviceGenerator.byte": package(monad-custom)
--"tools/serviceGenerator.byte": package(netstring)
--"tools/serviceGenerator.byte": package(str)
--"tools/serviceGenerator.byte": package(yojson)
--"tools/serviceGenerator.byte": use_gapi-ocaml
--<tools/*.ml{,i,y}>: package(cryptokit)
--<tools/*.ml{,i,y}>: package(curl)
--<tools/*.ml{,i,y}>: package(extlib)
--<tools/*.ml{,i,y}>: package(monad-custom)
--<tools/*.ml{,i,y}>: package(netstring)
--<tools/*.ml{,i,y}>: package(str)
--<tools/*.ml{,i,y}>: package(yojson)
--<tools/*.ml{,i,y}>: use_gapi-ocaml
--# Executable oauth2Flow
--"examples/auth/oauth2Flow.byte": package(cryptokit)
--"examples/auth/oauth2Flow.byte": package(curl)
--"examples/auth/oauth2Flow.byte": package(extlib)
--"examples/auth/oauth2Flow.byte": package(nethttpd)
--"examples/auth/oauth2Flow.byte": package(netstring)
--"examples/auth/oauth2Flow.byte": package(str)
--"examples/auth/oauth2Flow.byte": package(xmlm)
--"examples/auth/oauth2Flow.byte": package(yojson)
--"examples/auth/oauth2Flow.byte": use_gapi-ocaml
--"examples/auth/oauth2Flow.byte": use_gdata
--<examples/auth/*.ml{,i,y}>: package(xmlm)
--<examples/auth/*.ml{,i,y}>: use_gdata
--# Executable oauth1Flow
--"examples/auth/oauth1Flow.byte": package(cryptokit)
--"examples/auth/oauth1Flow.byte": package(curl)
--"examples/auth/oauth1Flow.byte": package(extlib)
--"examples/auth/oauth1Flow.byte": package(nethttpd)
--"examples/auth/oauth1Flow.byte": package(netstring)
--"examples/auth/oauth1Flow.byte": package(str)
--"examples/auth/oauth1Flow.byte": package(yojson)
--"examples/auth/oauth1Flow.byte": use_gapi-ocaml
--# Executable clientLoginFlow
--"examples/auth/clientLoginFlow.byte": package(cryptokit)
--"examples/auth/clientLoginFlow.byte": package(curl)
--"examples/auth/clientLoginFlow.byte": package(extlib)
--"examples/auth/clientLoginFlow.byte": package(nethttpd)
--"examples/auth/clientLoginFlow.byte": package(netstring)
--"examples/auth/clientLoginFlow.byte": package(str)
--"examples/auth/clientLoginFlow.byte": package(yojson)
--"examples/auth/clientLoginFlow.byte": use_gapi-ocaml
--<examples/auth/*.ml{,i,y}>: package(cryptokit)
--<examples/auth/*.ml{,i,y}>: package(curl)
--<examples/auth/*.ml{,i,y}>: package(extlib)
--<examples/auth/*.ml{,i,y}>: package(nethttpd)
--<examples/auth/*.ml{,i,y}>: package(netstring)
--<examples/auth/*.ml{,i,y}>: package(str)
--<examples/auth/*.ml{,i,y}>: package(yojson)
--<examples/auth/*.ml{,i,y}>: use_gapi-ocaml
--# Executable refreshOAuth2Token
--"src/test/refreshOAuth2Token.byte": package(cryptokit)
--"src/test/refreshOAuth2Token.byte": package(curl)
--"src/test/refreshOAuth2Token.byte": package(extlib)
--"src/test/refreshOAuth2Token.byte": package(netstring)
--"src/test/refreshOAuth2Token.byte": package(oUnit)
--"src/test/refreshOAuth2Token.byte": package(str)
--"src/test/refreshOAuth2Token.byte": package(yojson)
--"src/test/refreshOAuth2Token.byte": use_gapi-ocaml
--# Executable test_suite
--"src/test/testSuite.byte": package(cryptokit)
--"src/test/testSuite.byte": package(curl)
--"src/test/testSuite.byte": package(extlib)
--"src/test/testSuite.byte": package(monad-custom)
--"src/test/testSuite.byte": package(netstring)
--"src/test/testSuite.byte": package(oUnit)
--"src/test/testSuite.byte": package(str)
--"src/test/testSuite.byte": package(xmlm)
--"src/test/testSuite.byte": package(yojson)
--"src/test/testSuite.byte": use_gapi-ocaml
--"src/test/testSuite.byte": use_gdata
--<src/test/*.ml{,i,y}>: package(cryptokit)
--<src/test/*.ml{,i,y}>: package(curl)
--<src/test/*.ml{,i,y}>: package(extlib)
--<src/test/*.ml{,i,y}>: package(monad-custom)
--<src/test/*.ml{,i,y}>: package(netstring)
--<src/test/*.ml{,i,y}>: package(oUnit)
--<src/test/*.ml{,i,y}>: package(str)
--<src/test/*.ml{,i,y}>: package(xmlm)
--<src/test/*.ml{,i,y}>: package(yojson)
--<src/test/*.ml{,i,y}>: use_gapi-ocaml
--<src/test/*.ml{,i,y}>: use_gdata
--# OASIS_STOP
-diff --git a/myocamlbuild.ml b/myocamlbuild.ml
-deleted file mode 100644
-index 0a02225b..00000000
---- a/myocamlbuild.ml
-+++ /dev/null
-@@ -1,902 +0,0 @@
--(* OASIS_START *)
--(* DO NOT EDIT (digest: 841fe3206a3bded1f34d8e80c1037a1d) *)
--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;
--    !what_idx = String.length what
--
--
--  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;
--    !what_idx = -1
--
--
--  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
--
--
--# 437 "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
--
--
--# 517 "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
--
--
--# 878 "myocamlbuild.ml"
--open Ocamlbuild_plugin;;
--let package_default =
--  {
--     MyOCamlbuildBase.lib_ocaml =
--       [("gapi-ocaml", ["src/gapi"], []); ("gdata", ["src/gdata"], [])];
--     lib_c = [];
--     flags = [];
--     includes =
--       [
--          ("tools", ["src/gapi"]);
--          ("src/test", ["src/gapi"; "src/gdata"]);
--          ("src/gdata", ["src/gapi"]);
--          ("examples/auth", ["src/gapi"; "src/gdata"])
--       ]
--  }
--  ;;
--
--let conf = {MyOCamlbuildFindlib.no_automatic_syntax = false}
--
--let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;;
--
--# 901 "myocamlbuild.ml"
--(* OASIS_STOP *)
--Ocamlbuild_plugin.dispatch dispatch_default;;
-diff --git a/opam/descr b/opam/descr
-deleted file mode 100644
-index 9fab749d..00000000
---- a/opam/descr
-+++ /dev/null
-@@ -1,11 +0,0 @@
--A simple OCaml client for Google Services.
--gapi-ocaml is a simple, unofficial, OCaml client for Google Services.
--The library supports ClientLogin, OAuth 1.0a, and OAuth 2.0
--authentication. Supported RESTful APIs: Calendar APIs v3, Google+ API
--v1, Tasks API v1, APIs Discovery Service v1, URL Shortener API v1,
--OAuth2 API v2, Custom Search API v1, Google Analytics API v3, Page
--Speed Online API v1, Blogger API v2, Site Verification API v1, AdSense
--Management API v1.4, BigQuery API v2, Drive API v2, Drive API v3,
--Gmail API v1. Google Data Protocol APIs (GData): Google Documents List
--API v3.
--
-diff --git a/opam/findlib b/opam/findlib
-deleted file mode 100644
-index 2fb603eb..00000000
---- a/opam/findlib
-+++ /dev/null
-@@ -1 +0,0 @@
--gapi-ocaml
-diff --git a/opam/opam b/opam/opam
-deleted file mode 100644
-index b971722b..00000000
---- a/opam/opam
-+++ /dev/null
-@@ -1,36 +0,0 @@
--opam-version: "1.2"
--maintainer: "Alessandro Strada <alessandro.strada at gmail.com>"
--authors: [ "Alessandro Strada" ]
--license: "MIT"
--homepage: "https://github.com/astrada/gapi-ocaml"
--dev-repo: "https://github.com/astrada/gapi-ocaml.git"
--bug-reports: "https://github.com/astrada/gapi-ocaml/issues"
--build: [
--  ["ocaml" "setup.ml" "-configure" "--prefix" prefix]
--  ["ocaml" "setup.ml" "-build"]
--]
--install: ["ocaml" "setup.ml" "-install"]
--remove: [
--  ["ocamlfind" "remove" "gapi-ocaml"]
--]
--build-test: [
--  ["ocaml" "setup.ml" "-configure" "--enable-tests"]
--  ["ocaml" "setup.ml" "-build"]
--  ["ocaml" "setup.ml" "-test"]
--]
--build-doc: [ "ocaml" "setup.ml" "-doc" ]
--depends: [
--  "cryptokit"
--  ("extlib" | "extlib-compat")
--  "ocamlbuild" {build}
--  "ocamlfind" {build}
--  "ocamlnet" {>= "4.1.4"}
--  "ocurl"
--  "xmlm"
--  "yojson"
--]
--depopts: [
--  "ounit" {build & test}
--  "pa_monad_custom" {build}
--]
--available: [ ocaml-version >= "4.02.3" ]
-diff --git a/setup.ml b/setup.ml
-deleted file mode 100644
-index c9e89063..00000000
---- a/setup.ml
-+++ /dev/null
-@@ -1,8484 +0,0 @@
--(* setup.ml generated for the first time by OASIS v0.2.1~alpha1 *)
--
--(* OASIS_START *)
--(* DO NOT EDIT (digest: c0cec11d1d83752facce6588de6ab9c2) *)
--(*
--   Regenerated by OASIS v0.4.10
--   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;
--    !what_idx = String.length what
--
--
--  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;
--    !what_idx = -1
--
--
--  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
--
--
--  type compiled_object =
--    | Byte
--    | Native
--    | Best
--
--
--  type dependency =
--    | FindlibPackage of findlib_full * OASISVersion.comparator option
--    | InternalLibrary of name
--
--
--  type tool =
--    | ExternalTool of name
--    | InternalExecutable of name
--
--
--  type vcs =
--    | Darcs
--    | Git
--    | Svn
--    | Cvs
--    | Hg
--    | Bzr
--    | Arch
--    | Monotone
--    | OtherVCS of url
--
--
--  type plugin_kind =
--    [  `Configure
--    | `Build
--    | `Doc
--    | `Test
--    | `Install
--    | `Extra
--    ]
--
--
--  type plugin_data_purpose =
--    [  `Configure
--    | `Build
--    | `Install
--    | `Clean
--    | `Distclean
--    | `Install
--    | `Uninstall
--    | `Test
--    | `Doc
--    | `Extra
--    | `Other of string
--    ]
--
--
--  type 'a plugin = 'a * name * OASISVersion.t option
--
--
--  type all_plugin = plugin_kind plugin
--
--
--  type plugin_data = (all_plugin * plugin_data_purpose * (unit -> unit)) list
--
--
--  type 'a conditional = 'a OASISExpr.choices
--
--
--  type custom =
--    {
--      pre_command:  (command_line option) conditional;
--      post_command: (command_line option) conditional;
--    }
--
--
--  type common_section =
--    {
--      cs_name: name;
--      cs_data: PropList.Data.t;
--      cs_plugin_data: plugin_data;
--    }
--
--
--  type build_section =
--    {
--      bs_build:                   bool conditional;
--      bs_install:                 bool conditional;
--      bs_path:                    unix_dirname;
--      bs_compiled_object:         compiled_object;
--      bs_build_depends:           dependency list;
--      bs_build_tools:             tool list;
--      bs_interface_patterns:      OASISSourcePatterns.t list;
--      bs_implementation_patterns: OASISSourcePatterns.t list;
--      bs_c_sources:               unix_filename list;
--      bs_data_files:              (unix_filename * unix_filename option) list;
--      bs_findlib_extra_files:     unix_filename list;
--      bs_ccopt:                   args conditional;
--      bs_cclib:                   args conditional;
--      bs_dlllib:                  args conditional;
--      bs_dllpath:                 args conditional;
--      bs_byteopt:                 args conditional;
--      bs_nativeopt:               args conditional;
--    }
--
--
--  type library =
--    {
--      lib_modules:            string list;
--      lib_pack:               bool;
--      lib_internal_modules:   string list;
--      lib_findlib_parent:     findlib_name option;
--      lib_findlib_name:       findlib_name option;
--      lib_findlib_directory:  unix_dirname option;
--      lib_findlib_containers: findlib_name list;
--    }
--
--
--  type object_ =
--    {
--      obj_modules:            string list;
--      obj_findlib_fullname:   findlib_name list option;
--      obj_findlib_directory:  unix_dirname option;
--    }
--
--
--  type executable =
--    {
--      exec_custom:          bool;
--      exec_main_is:         unix_filename;
--    }
--
--
--  type flag =
--    {
--      flag_description:  string option;
--      flag_default:      bool conditional;
--    }
--
--
--  type source_repository =
--    {
--      src_repo_type:        vcs;
--      src_repo_location:    url;
--      src_repo_browser:     url option;
--      src_repo_module:      string option;
--      src_repo_branch:      string option;
--      src_repo_tag:         string option;
--      src_repo_subdir:      unix_filename option;
--    }
--
--
--  type test =
--    {
--      test_type:               [`Test] plugin;
--      test_command:            command_line conditional;
--      test_custom:             custom;
--      test_working_directory:  unix_filename option;
--      test_run:                bool conditional;
--      test_tools:              tool list;
--    }
--
--
--  type doc_format =
--    | HTML of unix_filename (* TODO: source filename. *)
--    | DocText
--    | PDF
--    | PostScript
--    | Info of unix_filename (* TODO: source filename. *)
--    | DVI
--    | OtherDoc
--
--
--  type doc =
--    {
--      doc_type:        [`Doc] plugin;
--      doc_custom:      custom;
--      doc_build:       bool conditional;
--      doc_install:     bool conditional;
--      doc_install_dir: unix_filename; (* TODO: dest filename ?. *)
--      doc_title:       string;
--      doc_authors:     string list;
--      doc_abstract:    string option;
--      doc_format:      doc_format;
--      (* TODO: src filename. *)
--      doc_data_files:  (unix_filename * unix_filename option) list;
--      doc_build_tools: tool list;
--    }
--
--
--  type section =
--    | Library    of common_section * build_section * library
--    | Object     of common_section * build_section * object_
--    | Executable of common_section * build_section * executable
--    | Flag       of common_section * flag
--    | SrcRepo    of common_section * source_repository
--    | Test       of common_section * test
--    | Doc        of common_section * doc
--
--
--  type section_kind =
--    [ `Library | `Object | `Executable | `Flag | `SrcRepo | `Test | `Doc ]
--
--
--  type package =
--    {
--      oasis_version:          OASISVersion.t;
--      ocaml_version:          OASISVersion.comparator option;
--      findlib_version:        OASISVersion.comparator option;
--      alpha_features:         string list;
--      beta_features:          string list;
--      name:                   package_name;
--      version:                OASISVersion.t;
--      license:                OASISLicense.t;
--      license_file:           unix_filename option; (* TODO: source filename. *)
--      copyrights:             string list;
--      maintainers:            string list;
--      authors:                string list;
--      homepage:               url option;
--      bugreports:             url option;
--      synopsis:               string;
--      description:            OASISText.t option;
--      tags:                   string list;
--      categories:             url list;
--
--      conf_type:              [`Configure] plugin;
--      conf_custom:            custom;
--
--      build_type:             [`Build] plugin;
--      build_custom:           custom;
--
--      install_type:           [`Install] plugin;
--      install_custom:         custom;
--      uninstall_custom:       custom;
--
--      clean_custom:           custom;
--      distclean_custom:       custom;
--
--      files_ab:               unix_filename list; (* TODO: source filename. *)
--      sections:               section list;
--      plugins:                [`Extra] plugin list;
--      disable_oasis_section:  unix_filename list; (* TODO: source filename. *)
--      schema_data:            PropList.Data.t;
--      plugin_data:            plugin_data;
--    }
--
--
--end
--
--module OASISFeatures = struct
--(* # 22 "src/oasis/OASISFeatures.ml" *)
--
--  open OASISTypes
--  open OASISUtils
--  open OASISGettext
--  open OASISVersion
--
--  module MapPlugin =
--    Map.Make
--      (struct
--        type t = plugin_kind * name
--        let compare = Pervasives.compare
--      end)
--
--  module Data =
--  struct
--    type t =
--      {
--        oasis_version: OASISVersion.t;
--        plugin_versions: OASISVersion.t option MapPlugin.t;
--        alpha_features: string list;
--        beta_features: string list;
--      }
--
--    let create oasis_version alpha_features beta_features =
--      {
--        oasis_version = oasis_version;
--        plugin_versions = MapPlugin.empty;
--        alpha_features = alpha_features;
--        beta_features = beta_features
--      }
--
--    let of_package pkg =
--      create
--        pkg.OASISTypes.oasis_version
--        pkg.OASISTypes.alpha_features
--        pkg.OASISTypes.beta_features
--
--    let add_plugin (plugin_kind, plugin_name, plugin_version) t =
--      {t with
--         plugin_versions = MapPlugin.add
--             (plugin_kind, plugin_name)
--             plugin_version
--             t.plugin_versions}
--
--    let plugin_version plugin_kind plugin_name t =
--      MapPlugin.find (plugin_kind, plugin_name) t.plugin_versions
--
--    let to_string t =
--      Printf.sprintf
--        "oasis_version: %s; alpha_features: %s; beta_features: %s; \
--         plugins_version: %s"
--        (OASISVersion.string_of_version (t:t).oasis_version)
--        (String.concat ", " t.alpha_features)
--        (String.concat ", " t.beta_features)
--        (String.concat ", "
--           (MapPlugin.fold
--              (fun (_, plg) ver_opt acc ->
--                 (plg^
--                    (match ver_opt with
--                      | Some v ->
--                        " "^(OASISVersion.string_of_version v)
--                      | None -> ""))
--                 :: acc)
--              t.plugin_versions []))
--  end
--
--  type origin =
--    | Field of string * string
--    | Section of string
--    | NoOrigin
--
--  type stage = Alpha | Beta
--
--
--  let string_of_stage =
--    function
--    | Alpha -> "alpha"
--    | Beta -> "beta"
--
--
--  let field_of_stage =
--    function
--    | Alpha -> "AlphaFeatures"
--    | Beta -> "BetaFeatures"
--
--  type publication = InDev of stage | SinceVersion of OASISVersion.t
--
--  type t =
--    {
--      name: string;
--      plugin: all_plugin option;
--      publication: publication;
--      description: unit -> string;
--    }
--
--  (* TODO: mutex protect this. *)
--  let all_features = Hashtbl.create 13
--
--
--  let since_version ver_str = SinceVersion (version_of_string ver_str)
--  let alpha = InDev Alpha
--  let beta = InDev Beta
--
--
--  let to_string t =
--    Printf.sprintf
--      "feature: %s; plugin: %s; publication: %s"
--      (t:t).name
--      (match t.plugin with
--       | None -> "<none>"
--       | Some (_, nm, _) -> nm)
--      (match t.publication with
--       | InDev stage -> string_of_stage stage
--       | SinceVersion ver -> ">= "^(OASISVersion.string_of_version ver))
--
--  let data_check t data origin =
--    let no_message = "no message" in
--
--    let check_feature features stage =
--      let has_feature = List.mem (t:t).name features in
--      if not has_feature then
--        match (origin:origin) with
--        | Field (fld, where) ->
--          Some
--            (Printf.sprintf
--               (f_ "Field %s in %s is only available when feature %s \
--                    is in field %s.")
--               fld where t.name (field_of_stage stage))
--        | Section sct ->
--          Some
--            (Printf.sprintf
--               (f_ "Section %s is only available when features %s \
--                    is in field %s.")
--               sct t.name (field_of_stage stage))
--        | NoOrigin ->
--          Some no_message
--      else
--        None
--    in
--
--    let version_is_good ~min_version version fmt =
--      let version_is_good =
--        OASISVersion.comparator_apply
--          version (OASISVersion.VGreaterEqual min_version)
--      in
--      Printf.ksprintf
--        (fun str -> if version_is_good then None else Some str)
--        fmt
--    in
--
--    match origin, t.plugin, t.publication with
--    | _, _, InDev Alpha -> check_feature data.Data.alpha_features Alpha
--    | _, _, InDev Beta -> check_feature data.Data.beta_features Beta
--    | Field(fld, where), None, SinceVersion min_version ->
--      version_is_good ~min_version data.Data.oasis_version
--        (f_ "Field %s in %s is only valid since OASIS v%s, update \
--             OASISFormat field from '%s' to '%s' after checking \
--             OASIS changelog.")
--        fld where (string_of_version min_version)
--        (string_of_version data.Data.oasis_version)
--        (string_of_version min_version)
--
--    | Field(fld, where), Some(plugin_knd, plugin_name, _),
--      SinceVersion min_version ->
--      begin
--        try
--          let plugin_version_current =
--            try
--              match Data.plugin_version plugin_knd plugin_name data with
--              | Some ver -> ver
--              | None ->
--                failwithf
--                  (f_ "Field %s in %s is only valid for the OASIS \
--                       plugin %s since v%s, but no plugin version is \
--                       defined in the _oasis file, change '%s' to \
--                       '%s (%s)' in your _oasis file.")
--                  fld where plugin_name (string_of_version min_version)
--                  plugin_name
--                  plugin_name (string_of_version min_version)
--            with Not_found ->
--              failwithf
--                (f_ "Field %s in %s is only valid when the OASIS plugin %s \
--                     is defined.")
--                fld where plugin_name
--          in
--          version_is_good ~min_version plugin_version_current
--            (f_ "Field %s in %s is only valid for the OASIS plugin %s \
--                 since v%s, update your plugin from '%s (%s)' to \
--                 '%s (%s)' after checking the plugin's changelog.")
--            fld where plugin_name (string_of_version min_version)
--            plugin_name (string_of_version plugin_version_current)
--            plugin_name (string_of_version min_version)
--        with Failure msg ->
--          Some msg
--      end
--
--    | Section sct, None, SinceVersion min_version ->
--      version_is_good ~min_version data.Data.oasis_version
--        (f_ "Section %s is only valid for since OASIS v%s, update \
--             OASISFormat field from '%s' to '%s' after checking OASIS \
--             changelog.")
--        sct (string_of_version min_version)
--        (string_of_version data.Data.oasis_version)
--        (string_of_version min_version)
--
--    | Section sct, Some(plugin_knd, plugin_name, _),
--      SinceVersion min_version ->
--      begin
--        try
--          let plugin_version_current =
--            try
--              match Data.plugin_version plugin_knd plugin_name data with
--              | Some ver -> ver
--              | None ->
--                failwithf
--                  (f_ "Section %s is only valid for the OASIS \
--                       plugin %s since v%s, but no plugin version is \
--                       defined in the _oasis file, change '%s' to \
--                       '%s (%s)' in your _oasis file.")
--                  sct plugin_name (string_of_version min_version)
--                  plugin_name
--                  plugin_name (string_of_version min_version)
--            with Not_found ->
--              failwithf
--                (f_ "Section %s is only valid when the OASIS plugin %s \
--                     is defined.")
--                sct plugin_name
--          in
--          version_is_good ~min_version plugin_version_current
--            (f_ "Section %s is only valid for the OASIS plugin %s \
--                 since v%s, update your plugin from '%s (%s)' to \
--                 '%s (%s)' after checking the plugin's changelog.")
--            sct plugin_name (string_of_version min_version)
--            plugin_name (string_of_version plugin_version_current)
--            plugin_name (string_of_version min_version)
--        with Failure msg ->
--          Some msg
--      end
--
--    | NoOrigin, None, SinceVersion min_version ->
--      version_is_good ~min_version data.Data.oasis_version "%s" no_message
--
--    | NoOrigin, Some(plugin_knd, plugin_name, _), SinceVersion min_version ->
--      begin
--        try
--          let plugin_version_current =
--            match Data.plugin_version plugin_knd plugin_name data with
--            | Some ver -> ver
--            | None -> raise Not_found
--          in
--          version_is_good ~min_version plugin_version_current
--            "%s" no_message
--        with Not_found ->
--          Some no_message
--      end
--
--
--  let data_assert t data origin =
--    match data_check t data origin with
--    | None -> ()
--    | Some str -> failwith str
--
--
--  let data_test t data =
--    match data_check t data NoOrigin with
--    | None -> true
--    | Some _ -> false
--
--
--  let package_test t pkg =
--    data_test t (Data.of_package pkg)
--
--
--  let create ?plugin name publication description =
--    let () =
--      if Hashtbl.mem all_features name then
--        failwithf "Feature '%s' is already declared." name
--    in
--    let t =
--      {
--        name = name;
--        plugin = plugin;
--        publication = publication;
--        description = description;
--      }
--    in
--    Hashtbl.add all_features name t;
--    t
--
--
--  let get_stage name =
--    try
--      (Hashtbl.find all_features name).publication
--    with Not_found ->
--      failwithf (f_ "Feature %s doesn't exist.") name
--
--
--  let list () =
--    Hashtbl.fold (fun _ v acc -> v :: acc) all_features []
--
--  (*
--   * Real flags.
--   *)
--
--
--  let features =
--    create "features_fields"
--      (since_version "0.4")
--      (fun () ->
--         s_ "Enable to experiment not yet official features.")
--
--
--  let flag_docs =
--    create "flag_docs"
--      (since_version "0.3")
--      (fun () ->
--         s_ "Make building docs require '-docs' flag at configure.")
--
--
--  let flag_tests =
--    create "flag_tests"
--      (since_version "0.3")
--      (fun () ->
--         s_ "Make running tests require '-tests' flag at configure.")
--
--
--  let pack =
--    create "pack"
--      (since_version "0.3")
--      (fun () ->
--         s_ "Allow to create packed library.")
--
--
--  let section_object =
--    create "section_object" beta
--      (fun () ->
--         s_ "Implement an object section.")
--
--
--  let dynrun_for_release =
--    create "dynrun_for_release" alpha
--      (fun () ->
--         s_ "Make '-setup-update dynamic' suitable for releasing project.")
--
--
--  let compiled_setup_ml =
--    create "compiled_setup_ml" alpha
--      (fun () ->
--         s_ "Compile the setup.ml and speed-up actions done with it.")
--
--  let disable_oasis_section =
--    create "disable_oasis_section" alpha
--      (fun () ->
--         s_ "Allow the OASIS section comments and digests to be omitted in \
--             generated files.")
--
--  let no_automatic_syntax =
--    create "no_automatic_syntax" alpha
--      (fun () ->
--         s_ "Disable the automatic inclusion of -syntax camlp4o for packages \
--             that matches the internal heuristic (if a dependency ends with \
--             a .syntax or is a well known syntax).")
--
--  let findlib_directory =
--    create "findlib_directory" beta
--      (fun () ->
--         s_ "Allow to install findlib libraries in sub-directories of the target \
--            findlib directory.")
--
--  let findlib_extra_files =
--    create "findlib_extra_files" beta
--      (fun () ->
--         s_ "Allow to install extra files for findlib libraries.")
--
--  let source_patterns =
--    create "source_patterns" alpha
--      (fun () ->
--         s_ "Customize mapping between module name and source file.")
--end
--
--module OASISSection = struct
--(* # 22 "src/oasis/OASISSection.ml" *)
--
--
--  open OASISTypes
--
--
--  let section_kind_common =
--    function
--      | Library (cs, _, _) ->
--        `Library, cs
--      | Object (cs, _, _) ->
--        `Object, cs
--      | Executable (cs, _, _) ->
--        `Executable, cs
--      | Flag (cs, _) ->
--        `Flag, cs
--      | SrcRepo (cs, _) ->
--        `SrcRepo, cs
--      | Test (cs, _) ->
--        `Test, cs
--      | Doc (cs, _) ->
--        `Doc, cs
--
--
--  let section_common sct =
--    snd (section_kind_common sct)
--
--
--  let section_common_set cs =
--    function
--      | Library (_, bs, lib)     -> Library (cs, bs, lib)
--      | Object (_, bs, obj)      -> Object (cs, bs, obj)
--      | Executable (_, bs, exec) -> Executable (cs, bs, exec)
--      | Flag (_, flg)            -> Flag (cs, flg)
--      | SrcRepo (_, src_repo)    -> SrcRepo (cs, src_repo)
--      | Test (_, tst)            -> Test (cs, tst)
--      | Doc (_, doc)             -> Doc (cs, doc)
--
--
--  (** Key used to identify section
--  *)
--  let section_id sct =
--    let k, cs =
--      section_kind_common sct
--    in
--    k, cs.cs_name
--
--
--  let string_of_section_kind =
--    function
--      | `Library    -> "library"
--      | `Object     -> "object"
--      | `Executable -> "executable"
--      | `Flag       -> "flag"
--      | `SrcRepo    -> "src repository"
--      | `Test       -> "test"
--      | `Doc        -> "doc"
--
--
--  let string_of_section sct =
--    let k, nm = section_id sct in
--    (string_of_section_kind k)^" "^nm
--
--
--  let section_find id scts =
--    List.find
--      (fun sct -> id = section_id sct)
--      scts
--
--
--  module CSection =
--  struct
--    type t = section
--
--    let id = section_id
--
--    let compare t1 t2 =
--      compare (id t1) (id t2)
--
--    let equal t1 t2 =
--      (id t1) = (id t2)
--
--    let hash t =
--      Hashtbl.hash (id t)
--  end
--
--
--  module MapSection = Map.Make(CSection)
--  module SetSection = Set.Make(CSection)
--
--
--end
--
--module OASISBuildSection = struct
--(* # 22 "src/oasis/OASISBuildSection.ml" *)
--
--  open OASISTypes
--
--  (* Look for a module file, considering capitalization or not. *)
--  let find_module source_file_exists bs modul =
--    let possible_lst =
--      OASISSourcePatterns.all_possible_files
--        (bs.bs_interface_patterns @ bs.bs_implementation_patterns)
--        ~path:bs.bs_path
--        ~modul
--    in
--    match List.filter source_file_exists possible_lst with
--    | (fn :: _) as fn_lst -> `Sources (OASISUnixPath.chop_extension fn, fn_lst)
--    | [] ->
--      let open OASISUtils in
--      let _, rev_lst =
--        List.fold_left
--          (fun (set, acc) fn ->
--             let base_fn = OASISUnixPath.chop_extension fn in
--             if SetString.mem base_fn set then
--               set, acc
--             else
--               SetString.add base_fn set, base_fn :: acc)
--          (SetString.empty, []) possible_lst
--      in
--      `No_sources (List.rev rev_lst)
--
--
--end
--
--module OASISExecutable = struct
--(* # 22 "src/oasis/OASISExecutable.ml" *)
--
--
--  open OASISTypes
--
--
--  let unix_exec_is (cs, bs, exec) is_native ext_dll suffix_program =
<Skipped 6278 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/ocaml-gapi-ocaml.git/commitdiff/5b797f51820fd0d719aae9d71863685d436e5ce9



More information about the pld-cvs-commit mailing list