Page MenuHomeFreeBSD

D13271.id35960.diff
No OneTemporary

D13271.id35960.diff

Index: en_US.ISO8859-1/books/porters-handbook/Makefile
===================================================================
--- en_US.ISO8859-1/books/porters-handbook/Makefile
+++ en_US.ISO8859-1/books/porters-handbook/Makefile
@@ -25,6 +25,7 @@
SRCS+= quick-porting/chapter.xml
SRCS+= slow-porting/chapter.xml
SRCS+= makefiles/chapter.xml
+SRCS+= flavors/chapter.xml
SRCS+= special/chapter.xml
SRCS+= plist/chapter.xml
SRCS+= pkg-files/chapter.xml
Index: en_US.ISO8859-1/books/porters-handbook/book.xml
===================================================================
--- en_US.ISO8859-1/books/porters-handbook/book.xml
+++ en_US.ISO8859-1/books/porters-handbook/book.xml
@@ -70,6 +70,7 @@
&chap.slow-porting;
&chap.makefiles;
&chap.special;
+ &chap.flavors;
&chap.plist;
&chap.pkg-files;
&chap.testing;
Index: en_US.ISO8859-1/books/porters-handbook/chapters.ent
===================================================================
--- en_US.ISO8859-1/books/porters-handbook/chapters.ent
+++ en_US.ISO8859-1/books/porters-handbook/chapters.ent
@@ -16,6 +16,7 @@
<!ENTITY chap.slow-porting SYSTEM "slow-porting/chapter.xml">
<!ENTITY chap.makefiles SYSTEM "makefiles/chapter.xml">
<!ENTITY chap.special SYSTEM "special/chapter.xml">
+<!ENTITY chap.flavors SYSTEM "flavors/chapter.xml">
<!ENTITY chap.plist SYSTEM "plist/chapter.xml">
<!ENTITY chap.pkg-files SYSTEM "pkg-files/chapter.xml">
<!ENTITY chap.testing SYSTEM "testing/chapter.xml">
Index: en_US.ISO8859-1/books/porters-handbook/flavors/chapter.xml
===================================================================
--- /dev/null
+++ en_US.ISO8859-1/books/porters-handbook/flavors/chapter.xml
@@ -0,0 +1,317 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+ The FreeBSD Documentation Project
+
+ $FreeBSD$
+
+-->
+
+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink=
+ "http://www.w3.org/1999/xlink" version="5.0" xml:id="flavors">
+
+ <title>Flavors</title>
+
+ <sect1 xml:id="flavors-intro">
+ <title>An Introduction to Flavors</title>
+
+ <para>Flavors are a way to have multiple variants of a port. The
+ port is built multiple times, with variations. For example, a
+ port can have a normal version, and a lite version.</para>
+ </sect1>
+
+ <sect1 xml:id="flavors-using">
+ <title>Using FLAVORS</title>
+
+ <para>To declare a port having multiple flavors, add
+ <varname>FLAVORS</varname> to its <filename>Makefile</filename>.
+ The first flavor in <varname>FLAVORS</varname> is the default
+ flavor.</para>
+
+ <important>
+ <para>Flavor names can <emphasis>only</emphasis> contain
+ lowercase letters, numbers, and the underscore
+ <literal>_</literal>.</para>
+ </important>
+
+ <example xml:id="flavors-using-ex1">
+ <title>Basic Flavors Usage</title>
+
+ <para>If a port has a <quote>lite</quote> slave port, the slave
+ port can be removed, and the port can be converted to flavors
+ with:</para>
+
+ <programlisting>FLAVORS= normal lite
+lite_PKGNAMESUFFIX= -lite
+[...]
+.if ${FLAVOR:U} != lite
+[enable non lite features]
+.endif</programlisting>
+ </example>
+
+ <example xml:id="flavors-using-ex2">
+ <title>More Complex Flavors Usage</title>
+
+ <para>Here is a slightly edited exceprt of what is present in
+ <package role="port">devel/libpeas</package>, a port that
+ uses the <link
+ linkend="flavors-auto-python"><application>Python</application>
+ flavors</link>. With the default
+ <application>Python</application> 2 and 3 versions being 2.7
+ and 3.6, it will automatically get <literal>FLAVORS=py27
+ py36</literal></para>
+
+ <programlisting>USES= gnome python
+USE_PYTHON= flavors <co xml:id="flavors-using-ex2-use"/>
+
+.if ${FLAVOR:Upy27:Mpy2*} <co xml:id="flavors-using-ex2-if"/>
+USE_GNOME= pygobject3 <co xml:id="flavors-using-ex2-pygobject3"/>
+
+CONFIGURE_ARGS+= --enable-python2 --disable-python3
+
+BUILD_WRKSRC= ${WRKSRC}/loaders/python <co xml:id="flavors-using-ex2-build2"/>
+INSTALL_WRKSRC= ${WRKSRC}/loaders/python <co xml:id="flavors-using-ex2-install2"/>
+.else # py3*
+USE_GNOME+= py3gobject3 <co xml:id="flavors-using-ex2-py3gobject3"/>
+
+CONFIGURE_ARGS+= --disable-python2 --enable-python3 \
+ ac_cv_path_PYTHON3_CONFIG=${LOCALBASE}/bin/python${PYTHON_VER}-config <co xml:id="flavors-using-ex2-ac_cv"/>
+
+BUILD_WRKSRC= ${WRKSRC}/loaders/python3 <co xml:id="flavors-using-ex2-build3"/>
+INSTALL_WRKSRC= ${WRKSRC}/loaders/python3 <co xml:id="flavors-using-ex2-install3"/>
+.endif
+
+py34_PLIST= ${.CURDIR}/pkg-plist-py3 <co xml:id="flavors-using-ex2-plist34"/>
+py35_PLIST= ${.CURDIR}/pkg-plist-py3 <co xml:id="flavors-using-ex2-plist35"/>
+py36_PLIST= ${.CURDIR}/pkg-plist-py3 <co xml:id="flavors-using-ex2-plist36"/></programlisting>
+
+ <calloutlist>
+ <callout arearefs="flavors-using-ex2-use">
+ <para>This port does not use
+ <literal>USE_PYTHON=distutils</literal> but needs
+ <application>Python</application> flavors anyway.</para>
+ </callout>
+
+ <callout arearefs="flavors-using-ex2-if">
+ <para>To guard against <varname>FLAVOR</varname> being
+ empty, use the FLAVOR:U &man.make.1; construct, but as
+ this is testing for the default flavor, we have to test
+ that <varname>FLAVOR</varname> is undefined, or that
+ <varname>FLAVOR</varname> matches <literal>py2*</literal>,
+ this can be done by using the argument to
+ <literal>:U</literal> that will be returned if the
+ variable is undefined.</para>
+ </callout>
+
+ <callout arearefs="flavors-using-ex2-pygobject3
+ flavors-using-ex2-py3gobject3">
+ <para>The <application>Gnome</application>
+ <application>Python</application> gobject3 bindings have
+ two different names, one for
+ <application>Python</application> 2, pygobject3 and one
+ for <application>Python</application> 3,
+ py3gobject3.</para>
+ </callout>
+
+ <callout arearefs="flavors-using-ex2-build2
+ flavors-using-ex2-install2 flavors-using-ex2-build3
+ flavors-using-ex2-install3">
+ <para>The <command>configure</command> script has to run in
+ <filename>${WRKSRC}</filename>, but we are only interested
+ in building and installing the Python 2 or Python 3 parts
+ of the software, so set the build and install base
+ directories appropriately.</para>
+ </callout>
+
+ <callout arearefs="flavors-using-ex2-ac_cv">
+ <para>Hint about the correct
+ <application>Python</application> 3 config script
+ path name.</para>
+ </callout>
+
+ <callout arearefs="flavors-using-ex2-plist34
+ flavors-using-ex2-plist35 flavors-using-ex2-plist36">
+ <para>The packing list is different when the built with
+ <application>Python</application> 3. As there are three
+ possible <application>Python</application> 3 versions, set
+ <varname>PLIST</varname> for all three using the <link
+ linkend="flavors-using-helpers">helper</link>.</para>
+ </callout>
+ </calloutlist>
+ </example>
+
+ <sect2 xml:id="flavors-using-helpers">
+ <title>Flavors Helpers</title>
+
+ <para>To make <filename>Makefile</filename> easier to write, a
+ few flavors helpers exist.</para>
+
+ <para>This list of helpers will set their variable:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_PKGNAMEPREFIX</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_PKGNAMESUFFIX</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_PLIST</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_DESCR</varname></para>
+ </listitem>
+ </itemizedlist>
+
+ <para><varname>This list of helpers will append to their variable:</varname></para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_CONFLICTS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_CONFLICTS_BUILD</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_CONFLICTS_INSTALL</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_PKG_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_EXTRACT_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_PATCH_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_FETCH_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_BUILD_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_LIB_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_RUN_DEPENDS</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname><replaceable>flavor</replaceable>_TEST_DEPENDS</varname></para>
+ </listitem>
+ </itemizedlist>
+
+ <example xml:id="flavors-helpers-ex1">
+ <title>Flavor Specific <varname>PKGNAME</varname></title>
+
+ <para>As all packages must have a different package name,
+ flavors must change theirs, using
+ <varname><replaceable>flavor</replaceable>_PKGNAMESUFFIX</varname>
+ and
+ <varname><replaceable>flavor</replaceable>_PKGNAMESUFFIX</varname>
+ makes this easy:</para>
+
+ <programlisting>FLAVORS= normal lite
+lite_PKGNAMESUFFIX= -lite</programlisting>
+ </example>
+ </sect2>
+ </sect1>
+
+ <sect1 xml:id="flavors-auto">
+ <title>Flavors Auto-Activation</title>
+
+ <sect2 xml:id="flavors-auto-python">
+ <title><literal>USES=python</literal> and Flavors</title>
+
+ <para>When using <link
+ linkend="uses-python"><literal>USES=python</literal></link>
+ and <literal>USE_PYTHON=distutils</literal>, the port will
+ automatically have <varname>FLAVORS</varname> filled in with
+ the <application>Python</application> versions it
+ supports.</para>
+
+ <example xml:id="flavors-auto-python-ex1">
+ <title>Simple <literal>USES=python</literal></title>
+
+ <para>Supposing the current <application>Python</application>
+ supported versions are 2.7, 3.4, 3.5, and 3.6, and the
+ default <application>Python</application> 2 and 3 versions
+ are 2.7 and 3.6, a port with:</para>
+
+ <programlisting>USES= python
+USE_PYTHON= distutils</programlisting>
+
+ <para>Will get these flavors: <literal>py27</literal>, and
+ <literal>py36</literal>.</para>
+
+ <programlisting>USES= python
+USE_PYTHON= distutils allflavors</programlisting>
+
+ <para>Will get these flavors: <literal>py27</literal>,
+ <literal>py34</literal>, <literal>py35</literal> and
+ <literal>py36</literal>.</para>
+ </example>
+
+ <example xml:id="flavors-auto-python-ex2">
+ <title><literal>USES=python</literal> with Version
+ Requirements</title>
+
+ <para>Supposing the current <application>Python</application>
+ supported versions are 2.7, 3.4, 3.5, and 3.6, and the
+ default <application>Python</application> 2 and 3 versions
+ are 2.7 and 3.6, a port with:</para>
+
+ <programlisting>USES= python:-3.5
+USE_PYTHON= distutils</programlisting>
+
+ <para>Will get these flavors: <literal>py27</literal>,
+ <literal>py34</literal>, and <literal>py35</literal>.</para>
+
+ <programlisting>USES= python:3.4+
+USE_PYTHON= distutils</programlisting>
+
+ <para>Will get these flavors: <literal>py36</literal>.</para>
+
+ <programlisting>USES= python:3.4+
+USE_PYTHON= distutils allflavors</programlisting>
+
+ <para>Will get these flavors: <literal>py34</literal>,
+ <literal>py35</literal>, and <literal>py36</literal>.</para>
+ </example>
+
+ <para><varname>PY_FLAVOR</varname> will be available to depend
+ on the correct version of <application>Python</application>
+ modules. This is most useful for ports that are not
+ <application>Python</application> modules and do not have
+ <application>Python</application> flavors but do use
+ <command>python</command> for some part of their
+ operations.</para>
+
+ <example xml:id="flavors-auto-python-ex3">
+ <title>For a Port Not Using
+ <literal>distutils</literal></title>
+
+ <para>If the default <application>Python</application> 3
+ version is 3.6, the following will set
+ <varname>PY_FLAVOR</varname> to
+ <literal>py36</literal>:</para>
+
+ <programlisting>RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}mutagen>0:audio/py-mutagen@${PY_FLAVOR}
+
+USES= python:3.5+</programlisting>
+ </example>
+ </sect2>
+ </sect1>
+</chapter>
Index: en_US.ISO8859-1/books/porters-handbook/order/chapter.xml
===================================================================
--- en_US.ISO8859-1/books/porters-handbook/order/chapter.xml
+++ en_US.ISO8859-1/books/porters-handbook/order/chapter.xml
@@ -373,6 +373,16 @@
</itemizedlist>
</sect1>
+ <sect1 xml:id="porting-order-flavors">
+ <title>Flavors</title>
+
+ <para>This block is optional.</para>
+
+ <para>Start this section with defining <varname>FLAVORS</varname>.
+ Continue with the possible Flavors helpers. See <xref
+ linkend="flavors-using"/> for more Information.</para>
+ </sect1>
+
<sect1 xml:id="porting-order-uses">
<title><varname>USES</varname> and
<varname>USE_<replaceable>x</replaceable></varname></title>
Index: en_US.ISO8859-1/books/porters-handbook/special/chapter.xml
===================================================================
--- en_US.ISO8859-1/books/porters-handbook/special/chapter.xml
+++ en_US.ISO8859-1/books/porters-handbook/special/chapter.xml
@@ -3627,7 +3627,8 @@
<buildtarget>do-install</buildtarget> targets and may
also override <buildtarget>do-configure</buildtarget>
if <varname>GNU_CONFIGURE</varname> is not
- defined.</entry>
+ defined. Additionally, it implies
+ <literal>USE_PYTHON=flavors</literal>.</entry>
</row>
<row>
@@ -3650,6 +3651,23 @@
otherwise would install conflicting files.</entry>
</row>
+ <row>
+ <entry><literal>USE_PYTHON=flavors</literal></entry>
+ <entry>The port does not use distutils but still supports
+ multiple Python versions. <varname>FLAVORS</varname>
+ will be set to the supported Python versions. See <xref
+ linkend="flavors-auto-python"/> for more
+ information.</entry>
+ </row>
+
+ <row>
+ <entry><literal>USE_PYTHON=optsuffix</literal></entry>
+ <entry>If the current Python version is not the default
+ one, the port will have gain
+ <literal>PKGNAMESUFFIX=${PYTHON_PKGNAMESUFFIX}</literal>.
+ Only useful with flavors.</entry>
+ </row>
+
<row>
<entry><varname>PYTHON_PKGNAMEPREFIX</varname></entry>
<entry>Used as a <varname>PKGNAMEPREFIX</varname> to
@@ -3681,7 +3699,15 @@
<entry>Python interpreter command line, including
version number.</entry>
</row>
+ </tbody>
+ </tgroup>
+ </table>
+ <table frame="none" xml:id="using-python-variables-helpers">
+ <title>Python Module Dependency Helpers</title>
+
+ <tgroup cols="2">
+ <tbody>
<row>
<entry><varname>PYNUMERIC</varname></entry>
<entry>Dependency line for numeric extension.</entry>
@@ -3700,6 +3726,41 @@
Python 2.0 and higher as it is also in base
distribution).</entry>
</row>
+
+ <row>
+ <entry><varname>PY_ENUM34</varname></entry>
+ <entry>Conditionnal dependency on
+ <package>devel/py-enum34</package> depending on the
+ Python version.</entry>
+ </row>
+
+ <row>
+ <entry><varname>PY_ENUM_COMPAT</varname></entry>
+ <entry>Conditionnal dependency on
+ <package>devel/py-enum-compat</package> depending on the
+ Python version.</entry>
+ </row>
+
+ <row>
+ <entry><varname>PY_PATHLIB</varname></entry>
+ <entry>Conditionnal dependency on
+ <package>devel/py-pathlib</package> depending on the
+ Python version.</entry>
+ </row>
+
+ <row>
+ <entry><varname>PY_IPADDRESS</varname></entry>
+ <entry>Conditionnal dependency on
+ <package>net/py-ipaddress</package> depending on the
+ Python version.</entry>
+ </row>
+
+ <row>
+ <entry><varname>PY_FUTURES</varname></entry>
+ <entry>Conditionnal dependency on
+ <package>devel/py-futures</package> depending on the
+ Python version.</entry>
+ </row>
</tbody>
</tgroup>
</table>

File Metadata

Mime Type
text/plain
Expires
Wed, Feb 11, 5:31 AM (6 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28638843
Default Alt Text
D13271.id35960.diff (16 KB)

Event Timeline