Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144608923
D13271.id35960.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
D13271.id35960.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D13271: Add a Flavors chapter.
Attached
Detach File
Event Timeline
Log In to Comment