Note:

You are viewing a development version of the library. Goto the latest version.

Module OASISTypes

module OASISTypes: sig .. end
Package definition

This module contains all the types used to build an OASIS package. A package is described by an '_oasis' file.
Author(s): Sylvain Le Gall



Aliases


type name = string 
Standard name.
type package_name = string 
Name of a package, see OASISTypes.package.
type url = string 
Standard URL.
type unix_dirname = string 
UNIX directory name.
type unix_filename = string 
UNIX file name.
type host_dirname = string 
Host directory name.
type host_filename = string 
Host file name.
type prog = string 
Program.
type arg = string 
Command line argument.
type args = arg list 
Command line arguments.
type command_line = prog * args 
Command line.
type findlib_name = string 
Package name for findlib, doesn't contain '.'.
type findlib_full = string 
Package name + path for findlib, made of several findlib name concatenated with '.'.

OASIS package definition


type compiled_object = 
| Byte (*
Always use byte code.
*)
| Native (*
Always use native code.
*)
| Best (*
Use either byte or native, depending ocamlopt availability.
*)
Compilation type.
type dependency = 
| FindlibPackage of findlib_full * OASISVersion.comparator option (*
External findlib package.
*)
| InternalLibrary of name (*
Section library of the given name.
*)
Package dependency.
type tool = 
| ExternalTool of name (*
External tool.
*)
| InternalExecutable of name (*
Section executable of the given name.
*)
Tool dependency.
type vcs = 
| Darcs (*
Darcs
*)
| Git (*
Git
*)
| Svn (*
Subversion
*)
| Cvs (*
CVS
*)
| Hg (*
Mercurial
*)
| Bzr (*
Bazaar
*)
| Arch (*
GNU arch
*)
| Monotone (*
Monotone
*)
| OtherVCS of url (*
Anything else, follow URL for description.
*)
Possible VCS.
type 'a conditional = 'a OASISExpr.choices 
Conditional value, last expression that evaluate to true define the value.
type plugin_kind = [ `Build | `Configure | `Doc | `Extra | `Install | `Test ] 
Plugin kind.
type plugin_data_purpose = [ `Build
| `Clean
| `Configure
| `Distclean
| `Doc
| `Extra
| `Install
| `Other of string
| `Test
| `Uninstall ]
Additional data to allow registration of more than one data property per plugin. See OASISPlugin.data_new_property
type 'a plugin = 'a * name * OASISVersion.t option 
Plugin definition, plugin type depends on which fields this types is used for.
type all_plugin = plugin_kind plugin 
type plugin_data = (all_plugin * plugin_data_purpose * (unit -> unit))
list
Property list storage for plugin data
type custom = {
   pre_command : command_line option conditional; (*
Run before.
*)
   post_command : command_line option conditional; (*
Run after.
*)
}
Set of command lines to run before and after a step.
type common_section = {
   cs_name : name; (*
Name of the section.
*)
   cs_data : PropList.Data.t;
   cs_plugin_data : plugin_data; (*
Property list attached to the section.
*)
}
Common attributes for sections.
type build_section = {
   bs_build : bool conditional; (*
Build this section.
*)
   bs_install : bool conditional; (*
Install this section.
*)
   bs_path : unix_dirname; (*
Top level location of the sources.
*)
   bs_compiled_object : compiled_object; (*
What kind of compilation.
*)
   bs_build_depends : dependency list; (*
List of dependencies.
*)
   bs_build_tools : tool list; (*
List of build tools.
*)
   bs_interface_patterns : OASISSourcePatterns.t list; (*
Patterns used to locate interface source filesi (.mli).
*)
   bs_implementation_patterns : OASISSourcePatterns.t list; (*
Patterns used to locate implementation source files (.ml).
*)
   bs_c_sources : unix_filename list; (*
C sources, relative to bs_path.
*)
   bs_data_files : (unix_filename * unix_filename option) list; (*
Data files and their install location, relative to bs_path.
*)
   bs_findlib_extra_files : unix_filename list; (*
Extra files to install with findlib.
*)
   bs_ccopt : args conditional; (*
Options for -ccopt.
*)
   bs_cclib : args conditional; (*
Options for -cclib.
*)
   bs_dlllib : args conditional; (*
Options for -dllib.
*)
   bs_dllpath : args conditional; (*
Options for -dllpath.
*)
   bs_byteopt : args conditional; (*
Option to pass to ocamlc.
*)
   bs_nativeopt : args conditional; (*
Option to pass to ocamlopt.
*)
}
Common attributes for Executable and Library sections.
type library = {
   lib_modules : string list; (*
List of modules exported by the library.
*)
   lib_pack : bool; (*
Are we building a packed library?
*)
   lib_internal_modules : string list; (*
List of modules not-exported by the library, but compiled along.
*)
   lib_findlib_parent : findlib_name option; (*
Name of the findlib parent, if any.
*)
   lib_findlib_name : findlib_name option; (*
Findlib name of this library, this name is used to refer to this library in build dependencies.
*)
   lib_findlib_directory : unix_dirname option; (*
Findlib sub-directory where the library will be installed. This directory is actually relative to the directory of the findlib parent.
*)
   lib_findlib_containers : findlib_name list; (*
Name of virtual containers (empty findlib package) between findlib parent and findlib name
*)
}
Library definition.
type object_ = {
   obj_modules : string list;
   obj_findlib_fullname : findlib_name list option; (*
Findlib name of this library, this name is used to refer to this library in build dependencies.
*)
   obj_findlib_directory : unix_dirname option; (* *)
}
Object definition.
type executable = {
   exec_custom : bool; (*
Use -custom ocamlc option.
*)
   exec_main_is : unix_filename; (*
Main file to compile, dependencies should be guessed by build system.
*)
}
Executable definition.
type flag = {
   flag_description : string option; (*
Short description.
*)
   flag_default : bool conditional; (*
Default value.
*)
}
Command line flag definition.
type source_repository = {
   src_repo_type : vcs; (*
Repository type.
*)
   src_repo_location : url; (*
Where to fetch the source, using appropriate VCS tool.
*)
   src_repo_browser : url option; (*
Where to browse the source, using web browser.
*)
   src_repo_module : string option; (*
Depending on VCS, which module (e.g. CVS).
*)
   src_repo_branch : string option; (*
Depending on VCS, which branch (e.g. git).
*)
   src_repo_tag : string option; (*
Depending on VCS, which tag (e.g. tag for darcs, git or svn).
*)
   src_repo_subdir : unix_filename option; (*
Depending on VCS, which sub directory (e.g. svn).
*)
}
Source repository definition.
type test = {
   test_type : [ `Test ] plugin; (*
Plugin to run the test, default custom.
*)
   test_command : command_line conditional; (*
Command to run the test, may depend on the plugin meaning.
*)
   test_custom : custom; (*
Custom command lines to run before and after.
*)
   test_working_directory : unix_filename option; (*
Which working directorty to chdir in.
*)
   test_run : bool conditional; (*
Should we run the test.
*)
   test_tools : tool list; (*
Tools required for this test.
*)
}
Test definition.
type doc_format = 
| HTML of unix_filename (*
HTML files and their main entry point (e.g. HTML "index.html")
*)
| DocText (*
Plain text.
*)
| PDF (*
Portable document format.
*)
| PostScript
| Info of unix_filename (*
Info files and their main entry point.
*)
| DVI
| OtherDoc (*
Anything else.
*)
Document formats.
type doc = {
   doc_type : [ `Doc ] plugin; (*
Plugin to build this document, default none.
*)
   doc_custom : custom; (*
Custom command lines ommand to before and after.
*)
   doc_build : bool conditional; (*
Build this document.
*)
   doc_install : bool conditional; (*
Install this document.
*)
   doc_install_dir : unix_filename; (*
Where to install this document.
*)
   doc_title : string; (*
What is the title of this document.
*)
   doc_authors : string list; (*
Who are the authors of this document.
*)
   doc_abstract : string option; (*
Abstract of this document.
*)
   doc_format : doc_format; (*
Format of this document.
*)
   doc_data_files : (unix_filename * unix_filename option) list; (*
All data files and where they should be install, by default to doc_install_dir
*)
   doc_build_tools : tool list; (*
Tools required to generate this document.
*)
}
Document definition.
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
All sections and their attributes.
type section_kind = [ `Doc | `Executable | `Flag | `Library | `Object | `SrcRepo | `Test ] 
type package = {
   oasis_version : OASISVersion.t; (*
OASIS version used to write this package.
*)
   ocaml_version : OASISVersion.comparator option; (*
OCaml version required for this package.
*)
   findlib_version : OASISVersion.comparator option; (*
Findlib version required for this package.
*)
   alpha_features : string list; (*
Alpha features enabled for this package.
*)
   beta_features : string list; (*
Beta features enabled for this package.
*)
   name : package_name; (*
Name of this package.
*)
   version : OASISVersion.t; (*
Version of this package.
*)
   license : OASISLicense.t; (*
License of this package.
*)
   license_file : unix_filename option; (*
File containing the license of this package.
*)
   copyrights : string list; (*
Copyright holders (e.g. companies or people).
*)
   maintainers : string list; (*
People actually taking care of this package (e.g. subset of copyright holders)
*)
   authors : string list; (*
Real people who wrote this package, not their companies.
*)
   homepage : url option; (*
Location of the package homepage.
*)
   bugreports : url option; (*
Location of the page to report bugs.
*)
   synopsis : string; (*
Short description of the package.
*)
   description : OASISText.t option; (*
Long description of the package.
*)
   tags : string list; (*
List of tags.
*)
   categories : url list; (*
List of categories that the package belong to.
*)
   conf_type : [ `Configure ] plugin; (*
Plugin to configure, default internal.
*)
   conf_custom : custom; (*
Actions around configure step.
*)
   build_type : [ `Build ] plugin; (*
Plugin to build, default ocamlbuild.
*)
   build_custom : custom; (*
Actions around build step.
*)
   install_type : [ `Install ] plugin; (*
Plugin to install/uninstall, default internal.
*)
   install_custom : custom; (*
Actions around install step.
*)
   uninstall_custom : custom; (*
Actions around uninstall step.
*)
   clean_custom : custom; (*
Actions around clean step.
*)
   distclean_custom : custom; (*
Actions aroudn distclean step.
*)
   files_ab : unix_filename list; (*
Files to generate by replacing token in it after configure step.
*)
   sections : section list; (*
All sections (libraries, executables, tests...).
*)
   plugins : [ `Extra ] plugin list; (*
Extra plugins applied.
*)
   disable_oasis_section : unix_filename list; (*
Files which should not have OASIS Section comments and digests
*)
   schema_data : PropList.Data.t;
   plugin_data : plugin_data; (*
Property list attached to this package.
*)
}
OASIS package, what an '_oasis' file contains.

Quickstart questions


type 'a quickstart_level = 
| NoChoice of 'a (*
Don't ask question, use provided value.
*)
| Beginner (*
Ask the question to a beginner and above.
*)
| Intermediate (*
Ask the question to an intermediate user and above.
*)
| Expert (*
Ask the question to an expert.
*)
Quickstart level. Not exported.
type 'a quickstart_question = 
| Field (*
Short text.
*)
| Text (*
Long text, may use editor for it.
*)
| Choices of 'a list (*
Multiple choices in a list.
*)
| ExclusiveChoices of 'a list (*
Pick a single choice in the list.
*)
Howto ask questions in quickstart. Not exported.

ODN functions

TODO: rewrite.

These functions allow to generate setup.ml standalone code, by serializing OCaml data using OCaml notation. They are not exported.

See the OCaml data notation project

val odn_of_unix_dirname : unix_dirname -> OASISDataNotation.t
val odn_of_unix_filename : unix_filename -> OASISDataNotation.t
val odn_of_command_line : prog * args -> OASISDataNotation.t
val odn_of_conditional : ('a -> OASISDataNotation.t) -> 'a OASISExpr.choices -> OASISDataNotation.t
val odn_of_package : package -> OASISDataNotation.t