[Pkg-ocaml-maint-commits] [findlib] 04/16: Imported Upstream version 1.5.4
Stéphane Glondu
glondu at moszumanska.debian.org
Wed Feb 18 09:19:59 UTC 2015
This is an automated email from the git hooks/post-receive script.
glondu pushed a commit to branch master
in repository findlib.
commit e4dcf2ccca8e31d5e94513d5e2556b3dab6fe393
Author: Stephane Glondu <steph at glondu.net>
Date: Tue Feb 17 16:44:56 2015 +0100
Imported Upstream version 1.5.4
---
configure | 24 +++++++++++--
doc/README | 3 ++
doc/README.xml | 6 ++++
doc/ref-html/{c1045.html => c1054.html} | 12 +++----
doc/ref-html/index.html | 8 ++---
doc/ref-html/{p1043.html => p1052.html} | 16 ++++-----
doc/ref-html/p698.html | 4 +--
doc/ref-html/r17.html | 14 ++++----
doc/ref-html/r700.html | 26 ++++++++++----
doc/ref-html/{r796.html => r798.html} | 38 ++++++++++++++++----
doc/ref-html/{r985.html => r994.html} | 22 ++++++------
doc/ref-man/META.5 | 28 ++++++++++++++-
doc/ref-man/findlib.conf.5 | 23 ++++++++++++
doc/src/findlib_conf.mod | 12 +++++++
doc/src/findlib_meta.mod | 17 ++++++++-
doc/src/findlib_reference.xml | 27 +++++++++++++-
itest-aux/ppx.ml | 1 +
src/findlib/Makefile | 16 +++++++--
src/findlib/findlib.ml | 4 +--
src/findlib/frontend.ml | 51 ++++++++++++++++++++++-----
src/findlib/{topfind.ml => topfind.ml.in} | 58 ++++++++++++++++++++++++++++---
21 files changed, 336 insertions(+), 74 deletions(-)
diff --git a/configure b/configure
index ed92e18..2c7ef6f 100755
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
#! /bin/sh
-# $Id: configure 237 2014-09-16 11:21:09Z gerd $
+# $Id: configure 244 2014-10-15 11:06:21Z gerd $
# ----------------------------------------------------------------------
#
@@ -7,7 +7,7 @@
#set -x
-version="1.5.3"
+version="1.5.4"
# Remember the old IFS value:
oldifs="$IFS"
@@ -382,6 +382,19 @@ have_dlls="yes"
ocaml unix.cma itest-aux/simple.ml >/dev/null || have_dlls="no"
######################################################################
+# Does this version of OCaml support extension points?
+
+echo "Testing whether ppxopt can be supported..."
+
+with_ppxopt=1
+enable_topfind_ppxopt=true
+
+ocaml -I +compiler-libs itest-aux/ppx.ml >/dev/null || {
+ with_ppxopt=0
+ enable_topfind_ppxopt=false
+}
+
+######################################################################
# Configure libraries
echo "Configuring libraries..."
@@ -583,6 +596,7 @@ echo "INSTALL_CAMLP4=${with_camlp4}" >>Makefile.config
echo "USE_CYGPATH=${use_cygpath}" >>Makefile.config
echo "HAVE_NATDYNLINK=${have_natdynlink}" >>Makefile.config
echo "VERSION=${version}" >>Makefile.config
+echo "ENABLE_TOPFIND_PPXOPT=${enable_topfind_ppxopt}" >>Makefile.config
echo "SYSTEM=${system}" >>Makefile.config
if [ "$mingw_lib" != "" ]; then
echo "OCAMLC_FLAGS=-I \"${mingw_lib}\"" >>Makefile.config
@@ -611,6 +625,12 @@ else
echo " topfind script: omitted"
fi
+if [ $with_ppxopt -gt 0 ]; then
+ echo "Topfind ppxopt support: yes"
+else
+ echo "Topfind ppxopt support: no"
+fi
+
if [ $with_toolbox -gt 0 ]; then
echo "Toolbox: yes"
else
diff --git a/doc/README b/doc/README
index 7a2e526..4a5a31a 100644
--- a/doc/README
+++ b/doc/README
@@ -85,6 +85,9 @@ of questions.
List of Changes
==============================================================================
+- 1.5.4: New ppxopt META variables (Peter Zotov).
+ Support for OCAMLFIND_TOOLCHAIN environment variable (Peter Zotov).
+
- 1.5.3: The installation of "bytes" respects now $prefix and the configured
destination.
New option -pp for "ocamlfind query", to get preprocessor packages.
diff --git a/doc/README.xml b/doc/README.xml
index 746eeb0..de6c1a5 100644
--- a/doc/README.xml
+++ b/doc/README.xml
@@ -110,6 +110,12 @@ configuration files, and library routines in detail.</p>
<ul>
<li>
+ <p><em>1.5.4:</em> New ppxopt META variables (Peter Zotov).</p>
+ <p>Support for OCAMLFIND_TOOLCHAIN environment variable (Peter Zotov).
+ </p>
+ </li>
+
+ <li>
<p><em>1.5.3:</em> The installation of "bytes" respects now $prefix and
the configured destination.</p>
<p>New option -pp for "ocamlfind query", to get preprocessor packages.</p>
diff --git a/doc/ref-html/c1045.html b/doc/ref-html/c1054.html
similarity index 93%
rename from doc/ref-html/c1045.html
rename to doc/ref-html/c1054.html
index 0bf3111..f79da7a 100644
--- a/doc/ref-html/c1045.html
+++ b/doc/ref-html/c1054.html
@@ -11,10 +11,10 @@ TITLE="The findlib Reference Manual"
HREF="index.html"><LINK
REL="UP"
TITLE="Library"
-HREF="p1043.html"><LINK
+HREF="p1052.html"><LINK
REL="PREVIOUS"
TITLE="Library"
-HREF="p1043.html"></HEAD
+HREF="p1052.html"></HEAD
><BODY
CLASS="CHAPTER"
BGCOLOR="#FFFFFF"
@@ -42,7 +42,7 @@ WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
-HREF="p1043.html"
+HREF="p1052.html"
ACCESSKEY="P"
>Prev</A
></TD
@@ -65,7 +65,7 @@ WIDTH="100%"></DIV
CLASS="CHAPTER"
><H1
><A
-NAME="AEN1045"
+NAME="AEN1054"
></A
>Chapter 1. The findlib library</H1
><P
@@ -92,7 +92,7 @@ WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
-HREF="p1043.html"
+HREF="p1052.html"
ACCESSKEY="P"
>Prev</A
></TD
@@ -122,7 +122,7 @@ WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
-HREF="p1043.html"
+HREF="p1052.html"
ACCESSKEY="U"
>Up</A
></TD
diff --git a/doc/ref-html/index.html b/doc/ref-html/index.html
index ee1251f..02d3606 100644
--- a/doc/ref-html/index.html
+++ b/doc/ref-html/index.html
@@ -74,26 +74,26 @@ HREF="r700.html"
> -- [File that specifies metainformation of OCaml packages]</DT
><DT
><A
-HREF="r796.html"
+HREF="r798.html"
>findlib.conf</A
> -- [Configuration of findlib/ocamlfind]</DT
><DT
><A
-HREF="r985.html"
+HREF="r994.html"
>site-lib</A
> -- [Location of package directories]</DT
></DL
></DD
><DT
>III. <A
-HREF="p1043.html"
+HREF="p1052.html"
>Library</A
></DT
><DD
><DL
><DT
>1. <A
-HREF="c1045.html"
+HREF="c1054.html"
>The findlib library</A
></DT
></DL
diff --git a/doc/ref-html/p1043.html b/doc/ref-html/p1052.html
similarity index 92%
rename from doc/ref-html/p1043.html
rename to doc/ref-html/p1052.html
index 66f684d..7d4fcf7 100644
--- a/doc/ref-html/p1043.html
+++ b/doc/ref-html/p1052.html
@@ -11,10 +11,10 @@ TITLE="The findlib Reference Manual"
HREF="index.html"><LINK
REL="PREVIOUS"
TITLE="site-lib"
-HREF="r985.html"><LINK
+HREF="r994.html"><LINK
REL="NEXT"
TITLE="The findlib library"
-HREF="c1045.html"></HEAD
+HREF="c1054.html"></HEAD
><BODY
CLASS="PART"
BGCOLOR="#FFFFFF"
@@ -42,7 +42,7 @@ WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
-HREF="r985.html"
+HREF="r994.html"
ACCESSKEY="P"
>Prev</A
></TD
@@ -56,7 +56,7 @@ WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
-HREF="c1045.html"
+HREF="c1054.html"
ACCESSKEY="N"
>Next</A
></TD
@@ -68,7 +68,7 @@ WIDTH="100%"></DIV
><DIV
CLASS="PART"
><A
-NAME="AEN1043"
+NAME="AEN1052"
></A
><DIV
CLASS="TITLEPAGE"
@@ -84,7 +84,7 @@ CLASS="TOC"
></DT
><DT
>1. <A
-HREF="c1045.html"
+HREF="c1054.html"
>The findlib library</A
></DT
></DL
@@ -107,7 +107,7 @@ WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
-HREF="r985.html"
+HREF="r994.html"
ACCESSKEY="P"
>Prev</A
></TD
@@ -125,7 +125,7 @@ WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
-HREF="c1045.html"
+HREF="c1054.html"
ACCESSKEY="N"
>Next</A
></TD
diff --git a/doc/ref-html/p698.html b/doc/ref-html/p698.html
index 7eb0818..19b9773 100644
--- a/doc/ref-html/p698.html
+++ b/doc/ref-html/p698.html
@@ -89,12 +89,12 @@ HREF="r700.html"
> -- [File that specifies metainformation of OCaml packages]</DT
><DT
><A
-HREF="r796.html"
+HREF="r798.html"
>findlib.conf</A
> -- [Configuration of findlib/ocamlfind]</DT
><DT
><A
-HREF="r985.html"
+HREF="r994.html"
>site-lib</A
> -- [Location of package directories]</DT
></DL
diff --git a/doc/ref-html/r17.html b/doc/ref-html/r17.html
index 3c99b5b..9577ec2 100644
--- a/doc/ref-html/r17.html
+++ b/doc/ref-html/r17.html
@@ -1290,7 +1290,7 @@ export OCAMLFIND_COMMANDS</PRE
><P
>Alternatively, you can change the configuration file
<A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>.</P
></DIV
@@ -1892,7 +1892,7 @@ CLASS="LITERAL"
>destdir</TT
> of
<A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>), or in the directory
specified by the -destdir option. This
@@ -1914,7 +1914,7 @@ CLASS="LITERAL"
>metadir</TT
> of
<A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>, or to specify the
-metadir option. In this case, the file called META is copied to the
@@ -2048,7 +2048,7 @@ CLASS="LITERAL"
>destdir</TT
> of
<A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>). If the package
resides at a different location, it will not be removed by default;
@@ -2065,7 +2065,7 @@ CLASS="LITERAL"
>metadir</TT
> variable
of <A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>, or by specifying
the -metadir option.</P
@@ -2308,7 +2308,7 @@ NAME="AEN682"
> The configuration file and environment variables are documented
in the manual page for
<A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>.</P
></DIV
@@ -2357,7 +2357,7 @@ compiles file.ml with toolchain "foo". By selecting toolchains one
can switch to different command sets. For instance, the toolchain
"foo" may consist of a patched ocamlc compiler.
See <A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
> how to
configure toolchains.</P
diff --git a/doc/ref-html/r700.html b/doc/ref-html/r700.html
index 58e17d8..d36e193 100644
--- a/doc/ref-html/r700.html
+++ b/doc/ref-html/r700.html
@@ -17,7 +17,7 @@ TITLE="Files"
HREF="p698.html"><LINK
REL="NEXT"
TITLE="findlib.conf"
-HREF="r796.html"></HEAD
+HREF="r798.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFFFFF"
@@ -59,7 +59,7 @@ WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
-HREF="r796.html"
+HREF="r798.html"
ACCESSKEY="N"
>Next</A
></TD
@@ -281,7 +281,7 @@ name (without special syntax). In the latter case, the interpretation
depends on whether it is contained in a main or sub package, and
whether the standard repository layout or the alternate layout is in
effect (see <A
-HREF="r985.html#SITE-LIB"
+HREF="r994.html#SITE-LIB"
>site-lib</A
> for these terms).
For a main package in standard layout the base directory is the
@@ -369,7 +369,21 @@ via the -ppx option (available since OCaml-4.01). If the command is
relative to the current directory (e.g. ./cmd), the command is expected
in the package directory. The special forms as defined for "archive"
are also available (e.g. @otherpkg/cmd). Additional arguments can be
-specified on the ocamlfind command line with the -ppxopt option.</P
+specified on the ocamlfind command line with the -ppxopt option
+or the "ppxopt" variable.</P
+></LI
+><LI
+STYLE="list-style-type: disc"
+><P
+>The variable "ppxopt" is a set of options that are added to the ppx
+rewriter invocation. The contents of the variable consists of one or
+several whitespace-separated parts. Every part consists of several
+comma-separated subparts; the first subpart indicates the package
+that contains the ppx rewriter invocation, the rest contain the options
+to be appended. If the option is a path relative to the current directory
+(e.g. ./foo.cma), the path is expanded relative to the package directory.
+The special forms as defined for "archive" are also available
+(e.g. @otherpkg/foo.cma).</P
></LI
></UL
><P
@@ -379,7 +393,7 @@ no software interpreting them.</P
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN769"
+NAME="AEN771"
></A
><H2
>PREDICATES</H2
@@ -495,7 +509,7 @@ WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
-HREF="r796.html"
+HREF="r798.html"
ACCESSKEY="N"
>Next</A
></TD
diff --git a/doc/ref-html/r796.html b/doc/ref-html/r798.html
similarity index 96%
rename from doc/ref-html/r796.html
rename to doc/ref-html/r798.html
index f8c2520..9611b2d 100644
--- a/doc/ref-html/r796.html
+++ b/doc/ref-html/r798.html
@@ -17,7 +17,7 @@ TITLE="META"
HREF="r700.html"><LINK
REL="NEXT"
TITLE="site-lib"
-HREF="r985.html"></HEAD
+HREF="r994.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFFFFF"
@@ -59,7 +59,7 @@ WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
-HREF="r985.html"
+HREF="r994.html"
ACCESSKEY="N"
>Next</A
></TD
@@ -70,7 +70,7 @@ ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
-NAME="AEN796"
+NAME="AEN798"
></A
>findlib.conf</H1
><DIV
@@ -84,7 +84,7 @@ NAME="FINDLIB.CONF"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN804"
+NAME="AEN806"
></A
><H2
>GENERAL</H2
@@ -163,7 +163,7 @@ CLASS="LITERAL"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN828"
+NAME="AEN830"
></A
><H2
>findlib.conf</H2
@@ -491,7 +491,7 @@ HREF="r17.html#OCAMLFIND"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN911"
+NAME="AEN913"
></A
><H2
>Environment</H2
@@ -527,6 +527,30 @@ CLASS="VARIABLELIST"
><DT
><TT
CLASS="LITERAL"
+>OCAMLFIND_TOOLCHAIN</TT
+></DT
+><DD
+><P
+> This variable sets the currently selected toolchain when
+ a <TT
+CLASS="LITERAL"
+>-toolchain</TT
+> option is not passed
+ on the command line.
+ </P
+></DD
+></DL
+></DIV
+>
+
+<P
+></P
+><DIV
+CLASS="VARIABLELIST"
+><DL
+><DT
+><TT
+CLASS="LITERAL"
>OCAMLPATH</TT
></DT
><DD
@@ -787,7 +811,7 @@ WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
-HREF="r985.html"
+HREF="r994.html"
ACCESSKEY="N"
>Next</A
></TD
diff --git a/doc/ref-html/r985.html b/doc/ref-html/r994.html
similarity index 96%
rename from doc/ref-html/r985.html
rename to doc/ref-html/r994.html
index 75135bd..c9d57cf 100644
--- a/doc/ref-html/r985.html
+++ b/doc/ref-html/r994.html
@@ -14,10 +14,10 @@ TITLE="Files"
HREF="p698.html"><LINK
REL="PREVIOUS"
TITLE="findlib.conf"
-HREF="r796.html"><LINK
+HREF="r798.html"><LINK
REL="NEXT"
TITLE="Library"
-HREF="p1043.html"></HEAD
+HREF="p1052.html"></HEAD
><BODY
CLASS="REFENTRY"
BGCOLOR="#FFFFFF"
@@ -45,7 +45,7 @@ WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
-HREF="r796.html"
+HREF="r798.html"
ACCESSKEY="P"
>Prev</A
></TD
@@ -59,7 +59,7 @@ WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
-HREF="p1043.html"
+HREF="p1052.html"
ACCESSKEY="N"
>Next</A
></TD
@@ -70,7 +70,7 @@ ALIGN="LEFT"
WIDTH="100%"></DIV
><H1
><A
-NAME="AEN985"
+NAME="AEN994"
></A
>site-lib</H1
><DIV
@@ -84,7 +84,7 @@ NAME="SITE-LIB"
><DIV
CLASS="REFSYNOPSISDIV"
><A
-NAME="AEN993"
+NAME="AEN1002"
></A
><H2
>STANDARD LAYOUT</H2
@@ -140,7 +140,7 @@ CLASS="REPLACEABLE"
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN1001"
+NAME="AEN1010"
></A
><H2
>DESCRIPTION</H2
@@ -157,7 +157,7 @@ CLASS="LITERAL"
>destdir</TT
> (used to install new packages);
see <A
-HREF="r796.html#FINDLIB.CONF"
+HREF="r798.html#FINDLIB.CONF"
>findlib.conf</A
>.</P
><P
@@ -212,7 +212,7 @@ installation or removal of a package, respectively.</P
><DIV
CLASS="REFSECT1"
><A
-NAME="AEN1018"
+NAME="AEN1027"
></A
><H2
>ALTERNATE LAYOUT</H2
@@ -350,7 +350,7 @@ WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
-HREF="r796.html"
+HREF="r798.html"
ACCESSKEY="P"
>Prev</A
></TD
@@ -368,7 +368,7 @@ WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
-HREF="p1043.html"
+HREF="p1052.html"
ACCESSKEY="N"
>Next</A
></TD
diff --git a/doc/ref-man/META.5 b/doc/ref-man/META.5
index 532322b..bb427ac 100644
--- a/doc/ref-man/META.5
+++ b/doc/ref-man/META.5
@@ -409,7 +409,33 @@ in the package directory. The special forms as defined for "archive"\c
\&
are also available (e.g. @otherpkg/cmd). Additional arguments can be\c
\&
-specified on the ocamlfind command line with the -ppxopt option.\c
+specified on the ocamlfind command line with the -ppxopt option\c
+\&
+or the "ppxopt" variable.\c
+.RE
+.ft R
+.sp
+.RS "7m"
+.ft R
+\&\h'-3m'\z\(bu\h'3m'\c
+.ft R
+The variable "ppxopt" is a set of options that are added to the ppx\c
+\&
+rewriter invocation. The contents of the variable consists of one or\c
+\&
+several whitespace-separated parts. Every part consists of several\c
+\&
+comma-separated subparts; the first subpart indicates the package\c
+\&
+that contains the ppx rewriter invocation, the rest contain the options\c
+\&
+to be appended. If the option is a path relative to the current directory\c
+\&
+(e.g. ./foo.cma), the path is expanded relative to the package directory.\c
+\&
+The special forms as defined for "archive" are also available\c
+\&
+(e.g. @otherpkg/foo.cma).\c
.RE
.ft R
.PP
diff --git a/doc/ref-man/findlib.conf.5 b/doc/ref-man/findlib.conf.5
index ae15b98..4ecbf5a 100644
--- a/doc/ref-man/findlib.conf.5
+++ b/doc/ref-man/findlib.conf.5
@@ -541,6 +541,29 @@ This variable overrides the location of the configuration file\c
.ft R
.RS "2m"
.ft R
+OCAMLFIND_TOOLCHAIN\c
+.RE
+.ft R
+.sp
+.RS "7m"
+.ft R
+.ft R
+This variable sets the currently selected toolchain when\c
+\&
+\& a
+-toolchain\c
+\& option is not passed\c
+\&
+\& on the command line.\c
+\&
+\&
+.RE
+.ft R
+.PP
+.ft R
+.ft R
+.RS "2m"
+.ft R
OCAMLPATH\c
.RE
.ft R
diff --git a/doc/src/findlib_conf.mod b/doc/src/findlib_conf.mod
index 14cbd12..2b2fd72 100644
--- a/doc/src/findlib_conf.mod
+++ b/doc/src/findlib_conf.mod
@@ -315,6 +315,18 @@ findlib/ocamlfind:
<variablelist>
<varlistentry>
+ <term><literal>OCAMLFIND_TOOLCHAIN</literal></term>
+ <listitem><para>
+ This variable sets the currently selected toolchain when
+ a <literal>-toolchain</literal> option is not passed
+ on the command line.
+ </para>
+ </listitem>
+</varlistentry>
+</variablelist>
+
+<variablelist>
+<varlistentry>
<term><literal>OCAMLPATH</literal></term>
<listitem><para>
This variable may contain an additional search path for package
diff --git a/doc/src/findlib_meta.mod b/doc/src/findlib_meta.mod
index 23e0fda..0bc094b 100644
--- a/doc/src/findlib_meta.mod
+++ b/doc/src/findlib_meta.mod
@@ -268,7 +268,22 @@ via the -ppx option (available since OCaml-4.01). If the command is
relative to the current directory (e.g. ./cmd), the command is expected
in the package directory. The special forms as defined for "archive"
are also available (e.g. @otherpkg/cmd). Additional arguments can be
-specified on the ocamlfind command line with the -ppxopt option.
+specified on the ocamlfind command line with the -ppxopt option
+or the "ppxopt" variable.
+</para>
+</listitem>
+
+<listitem>
+<para>
+The variable "ppxopt" is a set of options that are added to the ppx
+rewriter invocation. The contents of the variable consists of one or
+several whitespace-separated parts. Every part consists of several
+comma-separated subparts; the first subpart indicates the package
+that contains the ppx rewriter invocation, the rest contain the options
+to be appended. If the option is a path relative to the current directory
+(e.g. ./foo.cma), the path is expanded relative to the package directory.
+The special forms as defined for "archive" are also available
+(e.g. @otherpkg/foo.cma).
</para>
</listitem>
diff --git a/doc/src/findlib_reference.xml b/doc/src/findlib_reference.xml
index d26fca7..aaa027d 100644
--- a/doc/src/findlib_reference.xml
+++ b/doc/src/findlib_reference.xml
@@ -1386,7 +1386,18 @@ via the -ppx option (available since OCaml-4.01). If the command is
relative to the current directory (e.g. ./cmd), the command is expected
in the package directory. The special forms as defined for "archive"
are also available (e.g. @otherpkg/cmd). Additional arguments can be
-specified on the ocamlfind command line with the -ppxopt option.</PARA></LISTITEM></ITEMIZEDLIST><PARA
+specified on the ocamlfind command line with the -ppxopt option
+or the "ppxopt" variable.</PARA></LISTITEM><LISTITEM
+><PARA
+>The variable "ppxopt" is a set of options that are added to the ppx
+rewriter invocation. The contents of the variable consists of one or
+several whitespace-separated parts. Every part consists of several
+comma-separated subparts; the first subpart indicates the package
+that contains the ppx rewriter invocation, the rest contain the options
+to be appended. If the option is a path relative to the current directory
+(e.g. ./foo.cma), the path is expanded relative to the package directory.
+The special forms as defined for "archive" are also available
+(e.g. @otherpkg/foo.cma).</PARA></LISTITEM></ITEMIZEDLIST><PARA
>It is possible to define additional variables but there is currently
no software interpreting them.</PARA></REFSECT1><REFSECT1
><TITLE
@@ -1720,6 +1731,20 @@ MOREINFO="NONE"
><TERM
><LITERAL
MOREINFO="NONE"
+>OCAMLFIND_TOOLCHAIN</LITERAL></TERM><LISTITEM
+><PARA
+> This variable sets the currently selected toolchain when
+ a <LITERAL
+MOREINFO="NONE"
+>-toolchain</LITERAL> option is not passed
+ on the command line.
+ </PARA></LISTITEM></VARLISTENTRY></VARIABLELIST>
+
+<VARIABLELIST
+><VARLISTENTRY
+><TERM
+><LITERAL
+MOREINFO="NONE"
>OCAMLPATH</LITERAL></TERM><LISTITEM
><PARA
> This variable may contain an additional search path for package
diff --git a/itest-aux/ppx.ml b/itest-aux/ppx.ml
new file mode 100644
index 0000000..73ce200
--- /dev/null
+++ b/itest-aux/ppx.ml
@@ -0,0 +1 @@
+Toploop.preprocess_phrase;;
diff --git a/src/findlib/Makefile b/src/findlib/Makefile
index 31282e6..5466d95 100644
--- a/src/findlib/Makefile
+++ b/src/findlib/Makefile
@@ -70,6 +70,17 @@ findlib_config.ml: findlib_config.mlp $(TOP)/Makefile.config
-e 's;@SYSTEM@;$(SYSTEM);g' \
>findlib_config.ml
+topfind.ml: topfind.ml.in
+ if [ "$(ENABLE_TOPFIND_PPXOPT)" = "true" ]; then \
+ cp topfind.ml.in topfind.ml; \
+ else \
+ sed -e '/PPXOPT_BEGIN/,/PPXOPT_END/{d}' topfind.ml.in \
+ > topfind.ml ; \
+ fi
+
+topfind.cmo: topfind.cmi
+topfind.cmx: topfind.cmi
+
topfind: topfind_rd$(OCAML_REMOVE_DIRECTORY).p
USE_CYGPATH="$(USE_CYGPATH)"; \
export USE_CYGPATH; \
@@ -82,9 +93,8 @@ num_top.cma: $(NUMTOP_OBJECTS)
clean:
rm -f *.cmi *.cmo *.cma *.cmx *.a *.o *.cmxa \
- fl_meta.ml findlib_config.ml findlib.mml topfind \
+ fl_meta.ml findlib_config.ml findlib.mml topfind.ml topfind \
ocamlfind$(EXEC_SUFFIX) ocamlfind_opt$(EXEC_SUFFIX)
- #rm -f ocaml_args.ml
install: all
mkdir -p "$(prefix)$(OCAML_SITELIB)/$(NAME)"
@@ -118,7 +128,7 @@ depend: *.ml *.mli fl_meta.ml fl_metascanner.ml
# Some 'make' implementations require that .SUFFIXES must occur before
# the first suffix rule. (E.g. AIX)
-.SUFFIXES: .mll .cmo .cmi .cmx .ml .mli .mml
+.SUFFIXES: .mll .cmo .cmi .cmx .ml .mli .mml
# .src
.mml.cmo:
diff --git a/src/findlib/findlib.ml b/src/findlib/findlib.ml
index fd6d0fa..b8fd035 100644
--- a/src/findlib/findlib.ml
+++ b/src/findlib/findlib.ml
@@ -1,4 +1,4 @@
-(* $Id: findlib.ml 225 2014-07-15 22:44:36Z gerd $
+(* $Id: findlib.ml 241 2014-10-14 09:55:08Z gerd $
* ----------------------------------------------------------------------
*
*)
@@ -136,7 +136,7 @@ let init
let config_preds =
match toolchain with
- | None -> []
+ | None -> (try [Sys.getenv "OCAMLFIND_TOOLCHAIN"] with Not_found -> [])
| Some p -> [p] in
let sys_ocamlc, sys_ocamlopt, sys_ocamlcp, sys_ocamloptp, sys_ocamlmklib,
diff --git a/src/findlib/frontend.ml b/src/findlib/frontend.ml
index 2b44f11..3a4094e 100644
--- a/src/findlib/frontend.ml
+++ b/src/findlib/frontend.ml
@@ -1,4 +1,4 @@
-(* $Id: frontend.ml 231 2014-09-06 18:03:16Z gerd $
+(* $Id: frontend.ml 239 2014-10-14 09:39:42Z gerd $
* ----------------------------------------------------------------------
*
*)
@@ -551,7 +551,7 @@ let process_ppx_spec predicates packages ppx_opts =
package_deep_ancestors predicates packages in
let ppx_opts =
- List.map
+ List.map
(fun opt ->
match Fl_split.in_words opt with
| pkg :: ((_ :: _) as opts) ->
@@ -559,25 +559,60 @@ let process_ppx_spec predicates packages ppx_opts =
try ignore(package_directory pkg); true
with No_such_package _ -> false in
if not exists then
- failwith ("The package named in -ppxopt does not exist: " ^
+ failwith ("The package named in -ppxopt does not exist: " ^
pkg);
pkg, opts
- | _ ->
+ | _ ->
failwith "-ppxopt must include package name, e.g. -ppxopt \"foo,-name bar\""
)
ppx_opts in
+ let meta_ppx_opts =
+ List.concat
+ (List.map
+ (fun pname ->
+ try
+ let opts = package_property predicates pname "ppxopt" in
+ (* Split by whitespace to get (package,options) combinations.
+ Then, split by commas to get individual options. *)
+ List.map
+ (fun opts ->
+ match Fl_split.in_words opts with
+ | pkg :: ((_ :: _) as opts) ->
+ let exists =
+ try ignore(package_directory pkg); true
+ with No_such_package _ -> false in
+ if not exists then
+ failwith ("The package named in ppxopt variable does not exist: " ^
+ pkg ^ " (from " ^ pname ^ ")");
+ let base = package_directory pname in
+ pkg, List.map (resolve_path ~base ~explicit:true) opts
+ | _ ->
+ failwith ("ppxopt variable must include package name, e.g. " ^
+ "ppxopt=\"foo,-name bar\" (from " ^ pname ^ ")")
+ )
+ (Fl_split.in_words_ws opts)
+ with Not_found -> []
+ )
+ ppx_packages
+ ) in
+
List.flatten
- (List.map
+ (List.map
(fun pname ->
let base = package_directory pname in
let options =
- try List.assoc pname ppx_opts
- with Not_found -> [] in
+ try
+ List.concat
+ (List.map (fun (_, opts) -> opts)
+ (List.filter (fun (pname', _) -> pname' = pname)
+ (meta_ppx_opts @ ppx_opts)))
+ with Not_found -> []
+ in
try
let preprocessor =
resolve_path
- ~base ~explicit:true
+ ~base ~explicit:true
(package_property predicates pname "ppx") in
["-ppx"; String.concat " " (preprocessor :: options)]
with Not_found -> []
diff --git a/src/findlib/topfind.ml b/src/findlib/topfind.ml.in
similarity index 78%
rename from src/findlib/topfind.ml
rename to src/findlib/topfind.ml.in
index b96064e..caaabdd 100644
--- a/src/findlib/topfind.ml
+++ b/src/findlib/topfind.ml.in
@@ -1,4 +1,4 @@
-(* $Id: topfind.ml 225 2014-07-15 22:44:36Z gerd $
+(* $Id: topfind.ml.in 239 2014-10-14 09:39:42Z gerd $
* ----------------------------------------------------------------------
*
*)
@@ -47,6 +47,18 @@ let add_dir d =
end
;;
+let exec_string s =
+ let l = Lexing.from_string s in
+ let ph = !Toploop.parse_toplevel_phrase l in
+(* PPXOPT_BEGIN *)
+ let ph = Toploop.preprocess_phrase Format.err_formatter ph in
+(* PPXOPT_END *)
+ let fmt = Format.make_formatter (fun _ _ _ -> ()) (fun _ -> ()) in
+ try
+ Toploop.execute_phrase false fmt ph
+ with
+ _ -> false
+;;
let load pkglist =
List.iter
@@ -81,22 +93,58 @@ let load pkglist =
(Findlib.package_property !predicates pkg "ppx")
)
with Not_found -> None
- in
+ and ppxopts =
+ try
+ List.map
+ (fun opt ->
+ match Fl_split.in_words opt with
+ | pkg :: opts ->
+ pkg,
+ List.map
+ (Findlib.resolve_path ~base:d ~explicit:true) opts
+ | _ -> assert false)
+ (Fl_split.in_words_ws
+ (Findlib.package_property !predicates pkg "ppxopt"))
+ with Not_found -> [] in
(* Feed the 'ppx' property into the toplevel. To remain compatible
with pre-4.01 OCaml, construct and execute a phrase instead of directly
altering Clflags. *)
- match ppx with
+ begin match ppx with
| Some ppx ->
+
+
begin try
match Hashtbl.find Toploop.directive_table "ppx" with
| Toploop.Directive_string fn ->
fn ppx; !log (ppx ^ ": activated")
| _ -> assert false
with Not_found ->
- failwith "Package defines a ppx preprocessor, but OCaml does not support \
- the #ppx directive. Use OCaml >=4.02."
+ failwith "Package defines a ppx preprocessor, but OCaml is too old. \
+ Use OCaml >= 4.02.0 for ppx support."
end
| None -> ()
+ end;
+ (* Feed the 'ppxopt' property into the toplevel. *)
+ match ppxopts with
+ | [] -> ()
+ | _ ->
+(* PPXOPT_BEGIN *)
+ List.iter
+ (fun (pkg, opts) ->
+ ignore (exec_string ("[@@@findlib.ppxopt " ^
+ (String.concat ", "
+ (List.map (Printf.sprintf "%S") (pkg :: opts))) ^
+ "];;"));
+ !log (pkg ^ ": " ^ (String.concat " " opts) ^
+ ": option added"))
+ ppxopts
+(*
+(* PPXOPT_END *)
+ failwith "Package defines a ppx preprocessor option, but OCaml is too old. \
+ Use OCaml >=4.02.1 for ppxopt support."
+(* PPXOPT_BEGIN *)
+*)
+(* PPXOPT_END *)
end;
(* The package is loaded: *)
loaded := pkg :: !loaded
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/findlib.git
More information about the Pkg-ocaml-maint-commits
mailing list