[packages/ocaml-gapi-ocaml] - up to 0.3.6 - revert build system change
baggins
baggins at pld-linux.org
Sun Feb 18 16:47:46 CET 2018
commit e787fbc92544987c4ece87116eb8e6db584f8df9
Author: Jan Rękorajski <baggins at pld-linux.org>
Date: Sun Feb 18 16:47:21 2018 +0100
- up to 0.3.6
- revert build system change
jbuilder.patch | 10154 ++++++++++++++++++++++++++++++++++++++++++++++++
ocaml-gapi-ocaml.spec | 11 +-
2 files changed, 10160 insertions(+), 5 deletions(-)
---
diff --git a/ocaml-gapi-ocaml.spec b/ocaml-gapi-ocaml.spec
index bf6c752..0a8f824 100644
--- a/ocaml-gapi-ocaml.spec
+++ b/ocaml-gapi-ocaml.spec
@@ -11,23 +11,23 @@
%define debug_package %{nil}
Summary: Google Data Protocol (GData) client library
Name: ocaml-%{pkgname}
-Version: 0.3.3
+Version: 0.3.6
Release: 1
License: MIT
Group: Libraries
Source0: https://github.com/astrada/gapi-ocaml/archive/v%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: ad2e8f0df3e31561bf7234c1408e9e22
+# Source0-md5: b8759b3a9010769db86786141ed374dd
+Patch0: jbuilder.patch
URL: http://gapi-ocaml.forge.ocamlcore.org/
BuildRequires: cppo >= 0.9.3
-BuildRequires: ocaml >= 3.04-7
+BuildRequires: ocaml >= 4.02.3
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 >= 3.6
-#BuildRequires: ocaml-net-netstring-devel >= 3.7.3
+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
@@ -68,6 +68,7 @@ tej biblioteki.
%prep
%setup -q -n %{pkgname}-%{version}
+%patch0 -p1 -R
%build
ocaml setup.ml -configure \
diff --git a/jbuilder.patch b/jbuilder.patch
new file mode 100644
index 0000000..e77f441
--- /dev/null
+++ b/jbuilder.patch
@@ -0,0 +1,10154 @@
+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 =
+- let dir =
+- OASISUnixPath.concat
+- bs.bs_path
+- (OASISUnixPath.dirname exec.exec_main_is)
+- in
+- let is_native_exec =
+- match bs.bs_compiled_object with
+- | Native -> true
+- | Best -> is_native ()
+- | Byte -> false
+- in
+-
+- OASISUnixPath.concat
+- dir
+- (cs.cs_name^(suffix_program ())),
+-
+- if not is_native_exec &&
+- not exec.exec_custom &&
+- bs.bs_c_sources <> [] then
+- Some (dir^"/dll"^cs.cs_name^"_stubs"^(ext_dll ()))
+- else
+- None
+-
+-
+-end
+-
+-module OASISLibrary = struct
+-(* # 22 "src/oasis/OASISLibrary.ml" *)
+-
+-
+- open OASISTypes
+- open OASISGettext
+-
+- let find_module ~ctxt source_file_exists cs bs modul =
+- match OASISBuildSection.find_module source_file_exists bs modul with
+- | `Sources _ as res -> res
+- | `No_sources _ as res ->
+- OASISMessage.warning
+- ~ctxt
+- (f_ "Cannot find source file matching module '%s' in library %s.")
+- modul cs.cs_name;
+- OASISMessage.warning
+- ~ctxt
+- (f_ "Use InterfacePatterns or ImplementationPatterns to define \
+- this file with feature %S.")
+- (OASISFeatures.source_patterns.OASISFeatures.name);
+- res
+-
+- let source_unix_files ~ctxt (cs, bs, lib) source_file_exists =
+- List.fold_left
+- (fun acc modul ->
<Skipped 6227 lines>
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/ocaml-gapi-ocaml.git/commitdiff/e787fbc92544987c4ece87116eb8e6db584f8df9
More information about the pld-cvs-commit
mailing list