/usr/lib/ocaml/oasis/OASISFileTemplate.mli is in liboasis-ocaml-dev 0.3.0-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | (******************************************************************************)
(* OASIS: architecture for building OCaml libraries and applications *)
(* *)
(* Copyright (C) 2008-2010, OCamlCore SARL *)
(* *)
(* This library is free software; you can redistribute it and/or modify it *)
(* under the terms of the GNU Lesser General Public License as published by *)
(* the Free Software Foundation; either version 2.1 of the License, or (at *)
(* your option) any later version, with the OCaml static compilation *)
(* exception. *)
(* *)
(* This library is distributed in the hope that it will be useful, but *)
(* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *)
(* or FITNESS FOR A PARTICULAR PURPOSE. See the file COPYING for more *)
(* details. *)
(* *)
(* You should have received a copy of the GNU Lesser General Public License *)
(* along with this library; if not, write to the Free Software Foundation, *)
(* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *)
(******************************************************************************)
(** Generate files replacing parts of it
This module allow to generate files using template. Each template files
is split into three parts: an header, a body and a footer. We target at
changing the body part. If target file already exists, we load the header
and the footer from it. We merge the three parts and repalce the target
files.
There are some safety limits:
- embed a digest to check nothing has changed in the body
- if digest of the body has changed, create a backup
- if we cannot find OASIS_START/OASIS_STOP body section, leave the
file untouched
The whole module is {b not exported}.
@author Sylvain Le Gall
*)
open OASISUnixPath
(** {2 Comments} *)
(** Comment definition. *)
type comment
(** .ml comments.
*)
val comment_ml: comment
(** Shell comments.
*)
val comment_sh: comment
(** Makefile comments.
*)
val comment_makefile: comment
(** OCamlbuild comments.
*)
val comment_ocamlbuild: comment
(** .bat file comments.
*)
val comment_bat: comment
(** META file comments.
*)
val comment_meta: comment
(** {2 Template} *)
type line = string
type body =
NoBody
| Body of line list
| BodyWithDigest of Digest.t * line list
type template =
{
fn : host_filename;
comment : comment;
header : line list;
body : body;
footer : line list;
perm : int;
}
(** [template_make fn cmt header body footer] Create a template for which
target file is [fn].
*)
val template_make :
host_filename ->
comment -> line list -> line list -> line list -> template
(** [template_of_string_list ~ctxt ~template fn cmt lst] Split a the
list [lst] of into an header, a body and a footer, using comment
[cmt] to determine each part. Set [~template] if this is an
embedded template (i.e. not a file loaded from disk). See
{!template_make} for other options. *)
val template_of_string_list :
ctxt:OASISContext.t ->
template:bool -> host_filename -> comment -> line list -> template
(** [template_of_ml_file fn] Create an OCaml file template taking into account
subtleties, like line modifier. See {!template_make} for other options.
*)
val template_of_mlfile :
host_filename -> line list -> line list -> line list -> template
(** {2 File generation} *)
(** Describe what has been done to generate a file out of a template.
*)
type file_generate_change =
Create of host_filename
(** [Create fn], [fn] is the target file, nothing exists before *)
| Change of host_filename * host_filename option
(** [Change (fn, bak)], [bak] is the backup file, an existing file
has been changed. *)
| NoChange
(** Nothing done, the file doesn't need to be updated *)
(** Reset to pristine a generated file.
*)
val file_rollback : ctxt:OASISContext.t -> file_generate_change -> unit
(** Generate a file using a template. Only the part between OASIS_START and
OASIS_STOP will be really replaced if the file exists. If the file doesn't
exist use the whole template.
*)
val file_generate :
ctxt:OASISContext.t -> backup:bool -> template -> file_generate_change
(** {2 Multiple templates management } *)
(** Try to add a file that is already in the set
*)
exception AlreadyExists of host_filename
(** Set of templates.
*)
type templates
(** No generated template files.
*)
val empty : templates
(** Find a generated template file.
*)
val find : host_filename -> templates -> template
(** Add a generated template file.
*)
val add : template -> templates -> templates
(** Remove a generated template file.
*)
val remove : host_filename -> templates -> templates
(** Add or replace a generated template file.
*)
val replace : template -> templates -> templates
(** Fold over generated template files.
*)
val fold : (template -> 'b -> 'b) -> templates -> 'b -> 'b
|