Skip to content

Commits on Source 11

......@@ -7,7 +7,7 @@
#set -x
version="1.7.3"
version="1.8.1"
# Remember the old IFS value:
oldifs="$IFS"
......@@ -184,14 +184,14 @@ echo "Configuring core..."
# Some standard Unix tools must be available:
for tool in sed awk ocaml ocamlc uname rm make cat m4 dirname basename; do
for tool in sed ocaml ocamlc uname rm make cat m4 dirname basename; do
if in_path $tool; then true; else
echo "configure: $tool not in PATH; this is required" 1>&2
exit 1
fi
done
lib_suffix=`ocamlc -config 2>/dev/null|grep '^ext_lib'|sed 's/ext_lib: //'`
lib_suffix=`ocamlc -config 2>/dev/null|tr -d '\015'|sed -n -e 's/^ext_lib: //p'`
# Check for Cygwin:
......@@ -225,7 +225,7 @@ use_cygpath=0
# Whether we have to translate Unix paths to/from Windows paths.
if [ -z "$system" ]; then
system=`ocamlc -config 2>/dev/null|grep '^system'|sed 's/system: //'`
system=`ocamlc -config 2>/dev/null|tr -d '\015'|sed -n -e 's/^system: //p'`
# This may be
# - mingw or mingw64
# - win32
......@@ -328,7 +328,11 @@ if [ -z "${ocamlfind_config}" ]; then
d="$ocaml_core_bin"
case "$d" in
*/bin)
if [ -f `dirname "$d"`/lib/findlib.conf ]; then
ocamlfind_config=`dirname "$d"`/lib/findlib.conf
else
ocamlfind_config=`dirname "$d"`/etc/findlib.conf
fi
;;
*)
ocamlfind_config=/usr/local/etc/findlib.conf
......@@ -350,18 +354,15 @@ ocaml itest-aux/remdir.ml >/dev/null 2>/dev/null || have_remdir=0
echo "Testing threading model..."
if ocamlc -vmthread >/dev/null 2>/dev/null; then
:
ocaml_threads="vm"
else
echo "The -vmthread switch is not supported: Your ocaml version is too old!"
exit 1
ocaml_threads="none"
fi
if ocamlc -config >/dev/null 2>/dev/null; then
# Good. ocamlc tells us the threading model.
if ocamlc -config | grep 'systhread_supported: true'; then
ocaml_threads="posix"
else
ocaml_threads="vm"
fi
else
# Old ocamlc do not have -config.
......@@ -372,8 +373,6 @@ else
if [ -z "$output" ]; then
ocaml_threads="posix"
else
ocaml_threads="vm"
fi
fi
......@@ -514,7 +513,10 @@ fi
# dbm?
if [ -f "${ocaml_core_stdlib}/dbm.cmi" ]; then
if [ -f "${ocaml_sitelib}/dbm/META" ]; then
echo "dbm: package already present"
ldbm=""
elif [ -f "${ocaml_core_stdlib}/dbm.cmi" ]; then
echo "dbm: found"
ldbm="dbm"
else
......@@ -524,8 +526,12 @@ fi
# num?
if [ -f "${ocaml_core_stdlib}/num.cmi" ]; then
echo "num: found"
if [ -f "${ocaml_sitelib}/num/META" ]; then
echo "num: package already present"
lnum=""
numtop=""
elif [ -f "${ocaml_core_stdlib}/num.cmi" ]; then
echo "num: found but not as package"
lnum="num num-top"
numtop="num-top"
else
......@@ -536,7 +542,8 @@ fi
# bytes?
if [ -f "${ocaml_core_stdlib}/bytes.cmi" ]; then
if [ -f "${ocaml_core_stdlib}/bytes.cmi" -o \
-f "${ocaml_core_stdlib}/stdlib__bytes.cmi" ]; then
echo "bytes: found, installing fake library"
lbytes="bytes"
cbytes=0
......@@ -556,10 +563,20 @@ else
lspacetime=""
fi
# graphics?
if [ -f "${ocaml_core_stdlib}/graphics.cmi" ]; then
echo "graphics: found"
lgraphics="graphics"
else
echo "graphics: not found"
lgraphics=""
fi
# Generate the META files now.
l="$ldbm dynlink graphics $lnum str threads unix stdlib bigarray ocamldoc $llabltk $lcamlp4 $lobuild $lcomplibs $lbytes $lspacetime"
l="$ldbm dynlink $lgraphics $lnum str threads unix stdlib bigarray ocamldoc $llabltk $lcamlp4 $lobuild $lcomplibs $lbytes $lspacetime"
for dir in site-lib-src/*; do
# We do not really know if $dir is a directory.
......
findlib (1.8.1-1) UNRELEASED; urgency=medium
* New upstream release
* Update Vcs-*
* Bump Standards-Version to 4.4.0
* Bump debhelper compat level to 12
-- Stéphane Glondu <glondu@debian.org> Mon, 29 Jul 2019 16:31:30 +0200
findlib (1.7.3-2) unstable; urgency=medium
* Upload to unstable.
......
......@@ -7,16 +7,16 @@ Uploaders:
Stéphane Glondu <glondu@debian.org>,
Ximin Luo <infinity0@debian.org>
Build-Depends:
debhelper (>= 9),
debhelper (>= 12),
bash-completion,
ocaml-nox (>= 4.03.0),
ocaml,
m4,
gawk | awk,
dh-ocaml (>= 0.9~)
Standards-Version: 4.0.0
Vcs-Git: https://anonscm.debian.org/git/pkg-ocaml-maint/packages/findlib.git
Vcs-Browser: https://anonscm.debian.org/git/pkg-ocaml-maint/packages/findlib.git
Standards-Version: 4.4.0
Vcs-Git: https://salsa.debian.org/ocaml-team/findlib.git
Vcs-Browser: https://salsa.debian.org/ocaml-team/findlib
Homepage: http://projects.camlcity.org/projects/findlib.html
Package: ocaml-findlib
......
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Contact: Gerd Stolpmann <gerd@gerd-stolpmann.de>
Source: http://projects.camlcity.org/projects/findlib.html
......
usr/lib/ocaml/ocamlbuild/META
......@@ -13,6 +13,8 @@ Signed-off-by: Stephane Glondu <steph@glondu.net>
findlib.conf.in | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/findlib.conf.in b/findlib.conf.in
index 261d2c8..05f6c3d 100644
--- a/findlib.conf.in
+++ b/findlib.conf.in
@@ -1,2 +1,2 @@
......
......@@ -12,9 +12,11 @@ Signed-off-by: Stephane Glondu <steph@glondu.net>
src/findlib/findlib_config.mlp | 1 +
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/findlib/findlib.ml b/src/findlib/findlib.ml
index dc9b2b4..3027ce0 100644
--- a/src/findlib/findlib.ml
+++ b/src/findlib/findlib.ml
@@ -122,6 +122,8 @@
@@ -127,6 +127,8 @@ let init
let configd_file =
config_file ^ ".d" in
......@@ -23,7 +25,7 @@ Signed-off-by: Stephane Glondu <steph@glondu.net>
let vars_of_file f =
let ch = open_in f in
try
@@ -165,12 +167,17 @@
@@ -170,12 +172,17 @@ let init
vars_of_file config_file
else
[] in
......@@ -42,6 +44,8 @@ Signed-off-by: Stephane Glondu <steph@glondu.net>
if vars <> [] then (
let found = ref false in
let lookup name default =
diff --git a/src/findlib/findlib_config.mlp b/src/findlib/findlib_config.mlp
index 64b4840..cf2fa86 100644
--- a/src/findlib/findlib_config.mlp
+++ b/src/findlib/findlib_config.mlp
@@ -4,6 +4,7 @@
......
......@@ -8,18 +8,22 @@ Subject: META.num*: bugfix,
site-lib-src/num/META.in | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/site-lib-src/num-top/META.in b/site-lib-src/num-top/META.in
index 184d65f..1b18b74 100644
--- a/site-lib-src/num-top/META.in
+++ b/site-lib-src/num-top/META.in
@@ -3,5 +3,6 @@
@@ -3,5 +3,6 @@ dnl This file is input of the m4 macro processor.
`requires = "num.core"'
`version = "'findlib_version`"'
`description = "Add-on for num inside toploops"'
+`directory = "+num-top"'
`archive(byte,toploop) = "num_top.cma"'
diff --git a/site-lib-src/num/META.in b/site-lib-src/num/META.in
index c6d950e..b22b568 100644
--- a/site-lib-src/num/META.in
+++ b/site-lib-src/num/META.in
@@ -4,8 +4,8 @@
@@ -4,8 +4,8 @@ dnl This file is input of the m4 macro processor.
`requires(toploop) = "num.core,num-top"'
`version = "[distributed with Ocaml]"'
`description = "Arbitrary-precision rational arithmetic"'
......
......@@ -8,6 +8,8 @@ Debian-Bug: https://bugs.debian.org/605695
site-lib-src/labltk/META.in | 1 +
2 files changed, 2 insertions(+)
diff --git a/site-lib-src/graphics/META.in b/site-lib-src/graphics/META.in
index 561ec5f..c654a9c 100644
--- a/site-lib-src/graphics/META.in
+++ b/site-lib-src/graphics/META.in
@@ -1,6 +1,7 @@
......@@ -18,6 +20,8 @@ Debian-Bug: https://bugs.debian.org/605695
`version = "[distributed with Ocaml]"'
`description = "Portable drawing primitives"'
`directory = "^"'
diff --git a/site-lib-src/labltk/META.in b/site-lib-src/labltk/META.in
index 29347bd..6819198 100644
--- a/site-lib-src/labltk/META.in
+++ b/site-lib-src/labltk/META.in
@@ -1,6 +1,7 @@
......
......@@ -56,6 +56,7 @@ override_dh_auto_clean:
-rm -f Makefile.config ocargs.log src/findlib/ocaml_args.ml
-rm -Rf site-lib-src/camlp4/
.PHONY: override_dh_install
override_dh_install:
dh_install --fail-missing -Xocamlbuild/META
override_dh_missing:
dh_missing --fail-missing
override_dh_dwz:
......@@ -85,6 +85,22 @@ of questions.
List of Changes
==============================================================================
- 1.8.1: Adapted to upcoming ocaml-4.09.
New API Findlib.list_packages' can specify a package prefix.
- 1.8.0: Fix reinstallation of "num" for OCaml-4.06.
Fix build with OCaml-4.07.
The installation of graphics/META is now optional.
Fix "ocamlfind query -d".
The environment variable OCAMLFIND_IGNORE_DUPS_IN is now interpreted as a
list of directories.
Packages for "ocamlfind query" may now be separated by commas, too.
New "warning" property for packages.
Forgetting to pass -thread/-vmthread only prints a warning now, but doesn't
stop the build.
For dealing with case-sensitive filesystems it is now only tried to match
ASCII characters, but not encoding-dependent characters.
- 1.7.3: Fix regarding num-top: this library is now also optional, as num.
- 1.7.2: Trying to protect against failures when several package installs are
......
......@@ -109,6 +109,27 @@ configuration files, and library routines in detail.</p>
<title>List of Changes</title>
<ul>
<li>
<p><em>1.8.1:</em> Adapted to upcoming ocaml-4.09.</p>
<p>New API Findlib.list_packages' can specify a package prefix.</p>
</li>
<li>
<p><em>1.8.0:</em> Fix reinstallation of "num" for OCaml-4.06.
</p>
<p>Fix build with OCaml-4.07.</p>
<p>The installation of graphics/META is now optional.</p>
<p>Fix "ocamlfind query -d".</p>
<p>The environment variable OCAMLFIND_IGNORE_DUPS_IN is now interpreted
as a list of directories.</p>
<p>Packages for "ocamlfind query" may now be separated by commas, too.</p>
<p>New "warning" property for packages.</p>
<p>Forgetting to pass -thread/-vmthread only prints a warning now,
but doesn't stop the build.</p>
<p>For dealing with case-sensitive filesystems it is now only tried to
match ASCII characters, but not encoding-dependent characters.</p>
</li>
<li>
<p><em>1.7.3:</em> Fix regarding num-top: this library is now also
optional, as num.</p>
......
......@@ -113,6 +113,16 @@ CLASS="LITERAL"
>).
</P
></LI
><LI
><P
>If an error is too much, it might be a good idea to
just inform the user about possible problems. In this case
you can emit a warning instead:
</P
><PRE
CLASS="PROGRAMLISTING"
>warning(pkg_q) = "Using package p and q together is a really bad idea"</PRE
></LI
></UL
><P
>Note that such error conditions should only be added if there is
......
......@@ -11,10 +11,10 @@ TITLE="The findlib Reference Manual"
HREF="index.html"><LINK
REL="UP"
TITLE="Library"
HREF="p1117.html"><LINK
HREF="p1119.html"><LINK
REL="PREVIOUS"
TITLE="Library"
HREF="p1117.html"></HEAD
HREF="p1119.html"></HEAD
><BODY
CLASS="CHAPTER"
BGCOLOR="#FFFFFF"
......@@ -42,7 +42,7 @@ WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="p1117.html"
HREF="p1119.html"
ACCESSKEY="P"
>Prev</A
></TD
......@@ -65,7 +65,7 @@ WIDTH="100%"></DIV
CLASS="CHAPTER"
><H1
><A
NAME="AEN1119"
NAME="AEN1121"
></A
>Chapter 1. The findlib library</H1
><P
......@@ -92,7 +92,7 @@ WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="p1117.html"
HREF="p1119.html"
ACCESSKEY="P"
>Prev</A
></TD
......@@ -122,7 +122,7 @@ WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="p1117.html"
HREF="p1119.html"
ACCESSKEY="U"
>Up</A
></TD
......
......@@ -74,26 +74,26 @@ HREF="r759.html"
>&nbsp;--&nbsp;[File that specifies metainformation of OCaml packages]</DT
><DT
><A
HREF="r863.html"
HREF="r865.html"
>findlib.conf</A
>&nbsp;--&nbsp;[Configuration of findlib/ocamlfind]</DT
><DT
><A
HREF="r1059.html"
HREF="r1061.html"
>site-lib</A
>&nbsp;--&nbsp;[Location of package directories]</DT
></DL
></DD
><DT
>III. <A
HREF="p1117.html"
HREF="p1119.html"
>Library</A
></DT
><DD
><DL
><DT
>1. <A
HREF="c1119.html"
HREF="c1121.html"
>The findlib library</A
></DT
></DL
......
This diff is collapsed.
......@@ -3,6 +3,7 @@
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="Start" href="index.html">
<link rel="previous" href="Fl_metascanner.html">
<link rel="next" href="Topfind.html">
......@@ -24,36 +25,34 @@
</div>
<h1>Module <a href="type_Fl_dynload.html">Fl_dynload</a></h1>
<pre><span class="keyword">module</span> Fl_dynload: <code class="code">sig</code> <a href="Fl_dynload.html">..</a> <code class="code">end</code></pre><div class="info module top">
Utilities for loading dynamically packages<br>
<pre><span id="MODULEFl_dynload"><span class="keyword">module</span> Fl_dynload</span>: <code class="code">sig</code> <a href="Fl_dynload.html">..</a> <code class="code">end</code></pre><div class="info module top">
<div class="info-desc">
<p>Utilities for loading dynamically packages</p>
</div>
</div>
<hr width="100%">
<pre><span id="VALload_packages"><span class="keyword">val</span> load_packages</span> : <code class="type">?debug:bool -> string list -> unit</code></pre><div class="info ">
Load the given packages and all their dependencies dynamically. Packages
<div class="info-desc">
<p>Load the given packages and all their dependencies dynamically. Packages
already loaded or already in-core are not loaded again. The predicates
are taken from <a href="Findlib.html#VALrecorded_predicates"><code class="code">Findlib.recorded_predicates</code></a>, which are normally the
predicates from the link-time of the executable.
<p>
predicates from the link-time of the executable.</p>
In order to initialize this module correctly, you need to link the
<p>In order to initialize this module correctly, you need to link the
executable in a special way. This is done by including "findlib.dynload"
in the <code class="code">ocamlfind</code> command, e.g.
<p>
in the <code class="code">ocamlfind</code> command, e.g.</p>
<pre class="codepre"><code class="code"> ocamlfind ocamlopt -o program -package findlib.dynload -linkpkg m.ml </code></pre>
<p>
It is not sufficient to just link <code class="code">findlib_dynload.cm(x)a</code> into the
<p>It is not sufficient to just link <code class="code">findlib_dynload.cm(x)a</code> into the
executable. The above command adds special initialization code that
(a) records the predicates and (b) records the packages already present
in the executable. Also <code class="code">-linkall</code> is implicitly added.
<p>
in the executable. Also <code class="code">-linkall</code> is implicitly added.</p>
The dynamic package loader works both for bytecode and native code.
<p>The dynamic package loader works both for bytecode and native code.
The META files of the packages need to specify the cma or cmxs files
in the following way:
<p>
in the following way:</p>
<ul>
<li>First, the "plugin" variable is checked (instead of "archive"), e.g.
<pre class="codepre"><code class="code">plugin(byte) = "my_plugin.cma"
......@@ -66,6 +65,6 @@ plugin(native) = "my_plugin.cmxs"
<li>Third, for native-code only, the "archive(plugin)" variable
is also accepted. This is for legacy packages.</li>
</ul>
<br>
</div>
</div>
</body></html>
......@@ -3,6 +3,7 @@
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="Start" href="index.html">
<link rel="previous" href="Fl_package_base.html">
<link rel="next" href="Fl_dynload.html">
......@@ -24,8 +25,10 @@
</div>
<h1>Module <a href="type_Fl_metascanner.html">Fl_metascanner</a></h1>
<pre><span class="keyword">module</span> Fl_metascanner: <code class="code">sig</code> <a href="Fl_metascanner.html">..</a> <code class="code">end</code></pre><div class="info module top">
Parses META files<br>
<pre><span id="MODULEFl_metascanner"><span class="keyword">module</span> Fl_metascanner</span>: <code class="code">sig</code> <a href="Fl_metascanner.html">..</a> <code class="code">end</code></pre><div class="info module top">
<div class="info-desc">
<p>Parses META files</p>
</div>
</div>
<hr width="100%">
......@@ -34,8 +37,10 @@ Parses META files<br>
<pre><span id="TYPEflavour"><span class="keyword">type</span> <code class="type"></code>flavour</span> = <code class="type">[ `Appendix | `BaseDef ]</code> </pre>
<div class="info ">
<code class="code">`BaseDef</code> refers to META definitions using the "=" operator,
and <code class="code">`Appendix</code> refers to definitions using the "+=" operator.<br>
<div class="info-desc">
<p><code class="code">`BaseDef</code> refers to META definitions using the "=" operator,
and <code class="code">`Appendix</code> refers to definitions using the "+=" operator.</p>
</div>
</div>
......@@ -46,7 +51,9 @@ Parses META files<br>
<td align="left" valign="top" >
<code><span id="TYPEELTpkg_definition.def_var">def_var</span>&nbsp;: <code class="type">string</code>;</code></td>
<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><div class="info ">
The name of the defined variable<br>
<div class="info-desc">
<p>The name of the defined variable</p>
</div>
</div>
</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
</tr>
......@@ -56,7 +63,9 @@ The name of the defined variable<br>
<td align="left" valign="top" >
<code><span id="TYPEELTpkg_definition.def_flav">def_flav</span>&nbsp;: <code class="type"><a href="Fl_metascanner.html#TYPEflavour">flavour</a></code>;</code></td>
<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><div class="info ">
The flavour of the definition<br>
<div class="info-desc">
<p>The flavour of the definition</p>
</div>
</div>
</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
</tr>
......@@ -66,7 +75,9 @@ The flavour of the definition<br>
<td align="left" valign="top" >
<code><span id="TYPEELTpkg_definition.def_preds">def_preds</span>&nbsp;: <code class="type"><a href="Fl_metascanner.html#TYPEformal_pred">formal_pred</a> list</code>;</code></td>
<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><div class="info ">
The formal predicates of the def<br>
<div class="info-desc">
<p>The formal predicates of the def</p>
</div>
</div>
</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
</tr>
......@@ -76,19 +87,23 @@ The formal predicates of the def<br>
<td align="left" valign="top" >
<code><span id="TYPEELTpkg_definition.def_value">def_value</span>&nbsp;: <code class="type">string</code>;</code></td>
<td class="typefieldcomment" align="left" valign="top" ><code>(*</code></td><td class="typefieldcomment" align="left" valign="top" ><div class="info ">
The value assigned to the variable<br>
<div class="info-desc">
<p>The value assigned to the variable</p>
</div>
</div>
</td><td class="typefieldcomment" align="left" valign="bottom" ><code>*)</code></td>
</tr></table>
}
<div class="info ">
A <code class="code">pkg_definition</code> is expressed by the syntax
<pre class="codepre"><code class="code"> var(p1,p2,...) = "value" </code></pre> (flavour `BaseDef),
or the syntax
<pre class="codepre"><code class="code"> var(p1,p2,...) += "value" </code></pre> (flavour `Appendix)
<div class="info-desc">
<p>A <code class="code">pkg_definition</code> is expressed by the syntax</p>
<pre class="codepre"><code class="code"> var(p1,p2,...) = "value" </code></pre><p>(flavour `BaseDef),
or the syntax</p>
<pre class="codepre"><code class="code"> var(p1,p2,...) += "value" </code></pre><p>(flavour `Appendix)
in the META file. The list of predicates may be omitted. Predicates
may be negated by using "-", e.g. "-x".<br>
may be negated by using "-", e.g. "-x".</p>
</div>
</div>
......@@ -110,68 +125,77 @@ A <code class="code">pkg_definition</code> is expressed by the syntax
}
<div class="info ">
A value of type <code class="code">pkg_expr</code> denotes the contents of a META file.
<div class="info-desc">
<p>A value of type <code class="code">pkg_expr</code> denotes the contents of a META file.
The component <code class="code">pkg_defs</code> are the variable definitions.
The component <code class="code">pkg_children</code> contains
the definitions of the subpackages.<br>
the definitions of the subpackages.</p>
</div>
</div>
<pre><span id="VALparse"><span class="keyword">val</span> parse</span> : <code class="type">Pervasives.in_channel -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre><div class="info ">
<code class="code">parse ch:</code>
<pre><span id="VALparse"><span class="keyword">val</span> parse</span> : <code class="type">Stdlib.in_channel -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">parse ch:</code>
scans and parses the file connected with channel <code class="code">ch</code>. The file must
have a syntax compatible with the META format. The return value
contains the found definitions for the package and all subpackages.
<p>
contains the found definitions for the package and all subpackages.</p>
<code class="code">exception Stream.Error of string:</code> is
raised on syntax errors. The string explains the error.<br>
<p><code class="code">exception Stream.Error of string:</code> is
raised on syntax errors. The string explains the error.</p>
</div>
</div>
<pre><span id="VALparse2"><span class="keyword">val</span> parse2</span> : <code class="type">Pervasives.in_channel -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre>
<pre><span id="VALparse2_lexing"><span class="keyword">val</span> parse2_lexing</span> : <code class="type">Lexing.lexbuf -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre>
<pre><span id="VALparse_lexing"><span class="keyword">val</span> parse_lexing</span> : <code class="type">Lexing.lexbuf -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre>
<pre><span id="VALprint_def"><span class="keyword">val</span> print_def</span> : <code class="type">Pervasives.out_channel -> <a href="Fl_metascanner.html#TYPEpkg_definition">pkg_definition</a> -> unit</code></pre><div class="info ">
<code class="code">print_def ch def</code>:
Outputs the definition to a channel.<br>
<pre><span id="VALparse2"><span class="keyword">val</span> parse2</span> : <code class="type">Stdlib.in_channel -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre>
<pre><span id="VALparse2_lexing"><span class="keyword">val</span> parse2_lexing</span> : <code class="type">Stdlib.Lexing.lexbuf -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre>
<pre><span id="VALparse_lexing"><span class="keyword">val</span> parse_lexing</span> : <code class="type">Stdlib.Lexing.lexbuf -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a></code></pre>
<pre><span id="VALprint_def"><span class="keyword">val</span> print_def</span> : <code class="type">Stdlib.out_channel -> <a href="Fl_metascanner.html#TYPEpkg_definition">pkg_definition</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">print_def ch def</code>:
Outputs the definition to a channel.</p>
</div>
</div>
<pre><span id="VALprint"><span class="keyword">val</span> print</span> : <code class="type">Pervasives.out_channel -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a> -> unit</code></pre><div class="info ">
<code class="code">print ch expr</code>:
Outputs the package expression to a channel.<br>
<pre><span id="VALprint"><span class="keyword">val</span> print</span> : <code class="type">Stdlib.out_channel -> <a href="Fl_metascanner.html#TYPEpkg_expr">pkg_expr</a> -> unit</code></pre><div class="info ">
<div class="info-desc">
<p><code class="code">print ch expr</code>:
Outputs the package expression to a channel.</p>
</div>
</div>
<pre><span id="VALlookup"><span class="keyword">val</span> lookup</span> : <code class="type">string -> string list -> <a href="Fl_metascanner.html#TYPEpkg_definition">pkg_definition</a> list -> string</code></pre><div class="info ">
<code class="code">lookup variable_name predicate_list def</code>:
<p>
<div class="info-desc">
<p><code class="code">lookup variable_name predicate_list def</code>:</p>
Returns the value of <code class="code">variable_name</code> in <code class="code">def</code> under the assumption
that the predicates in <code class="code">predicate_list</code> hold, but no other predicates.
<p>
<p>Returns the value of <code class="code">variable_name</code> in <code class="code">def</code> under the assumption
that the predicates in <code class="code">predicate_list</code> hold, but no other predicates.</p>
The rules are as follows: In the step (A), only the <code class="code">`BaseDef</code>
<p>The rules are as follows: In the step (A), only the <code class="code">`BaseDef</code>
definitions are considered. The first base definition is determined where
all predicates are satisfied and that has the longest predicate list.
In the step (B) only the <code class="code">`Appendix</code> definitions are considered.
All definitions are determined where all predicates are satisfied.
The final result is the concatenation of the single result of (A)
and all results of (B) (in the order they are defined). A space
character is inserted between two concatenated strings.
<p>
character is inserted between two concatenated strings.</p>
When step (A) does not find any matching definition, the exception
<code class="code">Not_found</code> is raised.<br>
<p>When step (A) does not find any matching definition, the exception
<code class="code">Not_found</code> is raised.</p>
</div>
</div>
<pre><span id="VALlookup_2"><span class="keyword">val</span> lookup_2</span> : <code class="type">string -><br> string list -><br> <a href="Fl_metascanner.html#TYPEpkg_definition">pkg_definition</a> list -><br> string * <a href="Fl_metascanner.html#TYPEformal_pred">formal_pred</a> list</code></pre><div class="info ">
Like <code class="code">lookup</code>, but also returns the list of predicates that had to
be considered to select the particular variable definition.<br>
<div class="info-desc">
<p>Like <code class="code">lookup</code>, but also returns the list of predicates that had to
be considered to select the particular variable definition.</p>
</div>
</div>
<pre><span id="VALpredicate_exists"><span class="keyword">val</span> predicate_exists</span> : <code class="type">string -> <a href="Fl_metascanner.html#TYPEpkg_definition">pkg_definition</a> list -> bool</code></pre><div class="info ">
<code class="code">predicate_exists variable_name def</code>:
<p>
<div class="info-desc">
<p><code class="code">predicate_exists variable_name def</code>:</p>
Whether <code class="code">variable_name</code> is explicitly mentioned in <code class="code">def</code>.<br>
<p>Whether <code class="code">variable_name</code> is explicitly mentioned in <code class="code">def</code>.</p>
</div>
</div>
</body></html>