Update porters handbook for Lua changes

Submitted by:	 andrew_tao173.riddles.org.uk
Approved by:	mat@
Differential Revision:	https://reviews.freebsd.org/D24430
This commit is contained in:
Sergio Carlavilla Delgado 2020-10-19 17:41:54 +00:00
parent 1fbd368d54
commit b6d1ce8b50
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=54612
3 changed files with 306 additions and 32 deletions

View file

@ -424,4 +424,28 @@ USE_PYTHON= distutils allflavors</programlisting>
USES= python:3.5+</programlisting>
</example>
</sect1>
<sect1 xml:id="flavors-auto-lua">
<title><literal>USES=lua</literal> and Flavors</title>
<para>When using <link
linkend="uses-lua"><literal>USES=lua:module</literal></link>
or <link
linkend="uses-lua"><literal>USES=lua:flavors</literal></link>,
the port will automatically have <varname>FLAVORS</varname>
filled in with the <application>Lua</application> versions it
supports. However, it is not expected that ordinary
applications (rather than <application>Lua</application>
modules) should use this feature; most applications that embed
or otherwise use <application>Lua</application> should simply
use <literal>USES=lua</literal>.</para>
<para><varname>LUA_FLAVOR</varname> is available (and must be
used) to depend on the correct version of dependencies
regardless of whether the port used the
<literal>flavors</literal> or <literal>module</literal>
parameters.</para>
<para>See <xref linkend="using-lua" /> for further
information.</para>
</sect1>
</chapter>

View file

@ -6390,20 +6390,155 @@ PLIST_SUB+= VERSION="${VER_STR}"
application has to be modified to find the expected version.
But it can be solved by adding some additional flags to the
compiler and linker.</para>
<para>Applications that use <application>Lua</application>
should normally build for just one version. However, loadable
modules for Lua are built in a separate flavor for each Lua
version that they support, and dependencies on such modules
should specify the flavor using the
<literal>@${LUA_FLAVOR}</literal> suffix on the port
origin.</para>
</sect2>
<sect2 xml:id="lua-version">
<title>Version Selection</title>
<para>A port using <application>Lua</application> only needs to
have this line:</para>
<para>A port using <application>Lua</application> should
have a line of this form:</para>
<programlisting>USES= lua</programlisting>
<para>If a specific version of Lua is needed, instructions on
how to select it are given in the <link
linkend="uses-lua"><literal>USES=lua</literal></link> part
of <xref linkend="uses"/>.</para>
<para>If a specific version of Lua, or range of versions, is
needed, it can be specified as a parameter in the form
<literal>XY</literal> (which may be used multiple times),
<literal>XY+</literal>, <literal>-XY</literal>, or
<literal>XY-ZA</literal>. The default version of
<application>Lua</application> as set via
<varname>DEFAULT_VERSIONS</varname> will be used if it falls
in the requested range, otherwise the closest requested
version to the default will be used. For example:</para>
<programlisting>USES= lua:52-53</programlisting>
<para>Note that no attempt is made to adjust the version
selection based on the presence of any already-installed
<application>Lua</application> version.</para>
<note>
<para>The <literal>XY+</literal> form of version specification
should not be used without careful consideration; the
<application>Lua</application> API changes to some extent in
every version, and configuration tools like
<application>CMake</application> or
<application>Autoconf</application> will often fail to work
on future versions of <application>Lua</application> until
updated to do so.</para>
</note>
</sect2>
<sect2 xml:id="lua-version-config">
<title>Configuration and Compiler flags</title>
<para>Software that uses <application>Lua</application> may have
been written to auto-detect the <application>Lua</application>
version in use. In general ports should override this
assumption, and force the use of the specific
<application>Lua</application> version selected as described
above. Depending on the sortware being ported, this might
require any or all of:
</para>
<itemizedlist>
<listitem>
<para>Using <varname>LUA_VER</varname> as part of a parameter
to the software's configuration script via
<varname>CONFIGURE_ARGS</varname> or
<varname>CONFIGURE_ENV</varname> (or equivalent for other
build systems);
</para>
</listitem>
<listitem>
<para>Adding <literal>-I${LUA_INCDIR}</literal>,
<literal>-L${LUA_LIBDIR}</literal>, and
<literal>-llua-${LUA_VER}</literal> to <varname>CFLAGS</varname>,
<varname>LDFLAGS</varname>, <varname>LIBS</varname> respectively
as appropriate;
</para>
</listitem>
<listitem>
<para>Patch the software's configuration or build files to select
the correct version.
</para>
</listitem>
</itemizedlist>
</sect2>
<sect2 xml:id="lua-version-flavors">
<title>Version Flavors</title>
<para>A port which installs a <application>Lua</application>
module (rather than an application that simply makes use of
<application>Lua</application>) should build a separate
flavor for each supported <application>Lua</application>
version. This is done by adding the <literal>module</literal>
parameter:</para>
<programlisting>USES= lua:module</programlisting>
<para>A version number or range of versions can be specified as
well; use a comma to separate parameters.</para>
<para>Since each flavor must have a different package name, the
variable <varname>LUA_PKGNAMEPREFIX</varname> is provided which
will be set to an appropriate value; the intended usage
is:</para>
<programlisting>PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}</programlisting>
<para>Module ports should normally install files only to
<varname>LUA_MODLIBDIR</varname>,
<varname>LUA_MODSHAREDIR</varname>,
<varname>LUA_DOCSDIR</varname>, and
<varname>LUA_EXAMPLESDIR</varname>, all of which are set up
to refer to version-specific subdirectories. Installing any
other files must be done with care to avoid conflicts between
versions.</para>
<para>A port (other than a <application>Lua</application> module)
which wishes to build a separate package for each
<application>Lua</application> version should use the
<literal>flavors</literal> parameter:</para>
<programlisting>USES= lua:flavors</programlisting>
<para>This operates the same way as the <literal>module</literal>
parameter described above, but without the assumption that the
package should be documented as a <application>Lua</application>
module (so <varname>LUA_DOCSDIR</varname> and
<varname>LUA_EXAMPLESDIR</varname> are not defined by
default). However, the port may choose to define
<varname>LUA_DOCSUBDIR</varname> as a suitable subdirectory name
(usually the port's <varname>PORTNAME</varname> as long as this
does not conflict with the <varname>PORTNAME</varname> of any
module), in which case the framework will define both
<varname>LUA_DOCSDIR</varname> and
<varname>LUA_EXAMPLESDIR</varname>.
</para>
<para>As with module ports, a flavored port should avoid installing
files that would conflict between versions. Typically this is done
by adding <varname>LUA_VER_STR</varname> as a suffix to program
names (e.g. using
<link linkend="uses-uniquefiles">USES=uniquefiles</link>), and
otherwise using either <varname>LUA_VER</varname> or
<varname>LUA_VER_STR</varname> as part of any other files or
subdirectories used outside of <varname>LUA_MODLIBDIR</varname>
and <varname>LUA_MODSHAREDIR</varname>.
</para>
</sect2>
<sect2 xml:id="lua-defined-variables">
@ -6439,48 +6574,69 @@ PLIST_SUB+= VERSION="${VER_STR}"
</row>
<row>
<entry><varname>LUA_PREFIX</varname></entry>
<entry>The prefix where <application>Lua</application>
(and components) is installed</entry>
<entry><varname>LUA_FLAVOR</varname></entry>
<entry>The flavor name corresponding to the selected
<application>Lua</application> version, to be used
for specifying dependencies</entry>
</row>
<row>
<entry><varname>LUA_SUBDIR</varname></entry>
<entry>The directory under
<filename>${PREFIX}/bin</filename>,
<filename>${PREFIX}/share</filename> and
<filename>${PREFIX}/lib</filename> where
<application>Lua</application> is installed</entry>
<entry><varname>LUA_BASE</varname></entry>
<entry>The prefix that should be used to locate
<application>Lua</application> (and components) that
are already installed</entry>
</row>
<row>
<entry><varname>LUA_PREFIX</varname></entry>
<entry>The prefix where <application>Lua</application>
(and components) are to be installed by this port</entry>
</row>
<row>
<entry><varname>LUA_INCDIR</varname></entry>
<entry>The directory where
<application>Lua</application> and
<application>tolua</application> header files are
<application>Lua</application> header files are
installed</entry>
</row>
<row>
<entry><varname>LUA_LIBDIR</varname></entry>
<entry>The directory where
<application>Lua</application> and
<application>tolua</application> libraries are
<application>Lua</application> libraries are
installed</entry>
</row>
<row>
<entry><varname>LUA_REFMODLIBDIR</varname></entry>
<entry>The directory where
<application>Lua</application> module libraries
(<filename>.so</filename>) that are already
installed are to be found</entry>
</row>
<row>
<entry><varname>LUA_REFMODSHAREDIR</varname></entry>
<entry>The directory where
<application>Lua</application> modules
(<filename>.lua</filename>) that are already
installed are to be found</entry>
</row>
<row>
<entry><varname>LUA_MODLIBDIR</varname></entry>
<entry>The directory where
<application>Lua</application> module libraries
(<filename>.so</filename>) are installed</entry>
(<filename>.so</filename>) are to be installed
by this port</entry>
</row>
<row>
<entry><varname>LUA_MODSHAREDIR</varname></entry>
<entry>The directory where
<application>Lua</application> modules
(<filename>.lua</filename>) are installed</entry>
(<filename>.lua</filename>) are to be installed
by this port</entry>
</row>
<row>
@ -6491,18 +6647,96 @@ PLIST_SUB+= VERSION="${VER_STR}"
<row>
<entry><varname>LUA_CMD</varname></entry>
<entry>The path to the <application>Lua</application>
interpreter</entry>
<entry>The name of the <application>Lua</application>
interpreter (e.g. <literal>lua53</literal>)</entry>
</row>
<row>
<entry><varname>LUAC_CMD</varname></entry>
<entry>The path to the <application>Lua</application>
compiler</entry>
<entry>The name of the <application>Lua</application>
compiler (e.g. <literal>luac53</literal>)</entry>
</row>
</tbody>
</tgroup>
</table>
<para>These additional variables are available for ports that
specified the <literal>module</literal> parameter:</para>
<table frame="none" xml:id="using-lua-variables-modules">
<title>Variables Defined for <application>Lua</application>
Module Ports</title>
<tgroup cols="2">
<thead>
<row>
<entry>Name</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry><varname>LUA_DOCSDIR</varname></entry>
<entry>the directory to which the module's
documentation should be installed.</entry>
</row>
<row>
<entry><varname>LUA_EXAMPLESDIR</varname></entry>
<entry>the directory to which the module's
example files should be installed.</entry>
</row>
</tbody>
</tgroup>
</table>
</sect2>
<sect2 xml:id="lua-examples">
<title>Examples</title>
<example xml:id="lua-app-Makefile">
<title>Makefile for an application using
<application>Lua</application></title>
<para>This example shows how to reference a
<application>Lua</application> module required at run
time. Notice that the reference must specify a
flavor.</para>
<programlisting>PORTNAME= sample
DISTVERSION= 1.2.3
CATEGORIES= whatever
MAINTAINER= john@doe.tld
COMMENT= Sample
RUN_DEPENDS= ${LUA_REFMODLIBDIR}/lpeg.so:devel/lua-lpeg@${LUA_FLAVOR}
USES= lua
.include &lt;bsd.port.mk&gt;</programlisting>
</example>
<example xml:id="lua-mod-Makefile">
<title>Makefile for a simple <application>Lua</application>
module</title>
<programlisting>PORTNAME= sample
DISTVERSION= 1.2.3
CATEGORIES= whatever
PKGNAMEPREFIX= ${LUA_PKGNAMEPREFIX}
MAINTAINER= john@doe.tld
COMMENT= Sample
USES= lua:module
DOCSDIR= ${LUA_DOCSDIR}
.include &lt;bsd.port.mk&gt;</programlisting>
</example>
</sect2>
</sect1>

View file

@ -1969,17 +1969,33 @@ GSSAPI_NONE_CONFIGURE_ON= --without-gssapi</programlisting>
<title><literal>lua</literal></title>
<para>Possible arguments: (none),
<literal><replaceable>XY</replaceable>+</literal>,
<literal><replaceable>XY</replaceable></literal>,
<literal>build</literal>, <literal>run</literal></para>
<literal><replaceable>XY</replaceable>+</literal>,
<literal>-<replaceable>XY</replaceable></literal>,
<literal><replaceable>XY</replaceable>-<replaceable>ZA</replaceable></literal>,
<literal>module</literal>, <literal>flavors</literal>,
<literal>build</literal>, <literal>run</literal>,
<literal>env</literal></para>
<para>Adds a dependency on <application>Lua</application>. By
default this is a library dependency, unless overridden by the
<literal>build</literal> or <literal>run</literal> option. The
default version is 5.2, unless set by the
<literal><replaceable>XY</replaceable></literal> parameter (for
example, <literal>51</literal> or
<literal>52+</literal>).</para>
<literal>build</literal> and/or <literal>run</literal> option.
The <literal>env</literal> option prevents the addition of any
dependency, while still defining all the usual variables.</para>
<para>The default version is set by the usual
<literal>DEFAULT_VERSIONS</literal> mechanism, unless a version or
range of versions is specified as an argument, for
example, <literal>51</literal> or <literal>51-53</literal>.</para>
<para>Applications using <application>Lua</application> are
normally built for only a single <application>Lua</application>
version. However, library modules intended to be loaded by
<application>Lua</application> code should use the
<literal>module</literal> option to build with multiple
flavors.</para>
<para>For more information see <xref linkend="using-lua" />.</para>
</sect1>
<sect1 xml:id="uses-lxqt">