Document GH_SUBDIR.

While there, add an example on how to do work with git submodules.

Reviewed by:	wblock
Sponsored by:	Absolight
Differential Revision:	https://reviews.freebsd.org/D7661
This commit is contained in:
Mathieu Arnold 2016-09-05 11:34:07 +00:00
parent 885419426c
commit 7216289ca8
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=49366
2 changed files with 144 additions and 17 deletions

View file

@ -1981,16 +1981,30 @@ MASTER_SITE_SUBDIR= stardict/WyabdcRealPeopleTTS/${PORTVERSION}</programlisting>
<entry><literal>${DISTVERSIONPREFIX}${DISTVERSION}${DISTVERSIONSUFFIX}</literal></entry>
</row>
<row>
<entry><varname>GH_SUBDIR</varname></entry>
<entry>When the software needs an additional
distribution file to be extracted within
<varname>${WRKSRC}</varname>, this variable can be
used. See the examples in <xref
linkend="makefile-master_sites-github-multiple"/>
for more information.</entry>
<entry>(none)</entry>
</row>
<row>
<entry><varname>GH_TUPLE</varname></entry>
<entry><varname>GH_TUPLE</varname> allows putting all
the <varname>GH_ACCOUNT</varname>,
<varname>GH_PROJECT</varname>, and
<varname>GH_TAGNAME</varname> into one variable. The
format is
<replaceable>account</replaceable><literal>:</literal><replaceable>project</replaceable><literal>:</literal><replaceable>tagname</replaceable><literal>:</literal><replaceable>group</replaceable>.
It is helpful when there is more than one GitHub
project from which to fetch.</entry>
<entry><varname>GH_TUPLE</varname> allows putting
<varname>GH_ACCOUNT</varname>,
<varname>GH_PROJECT</varname>,
<varname>GH_TAGNAME</varname>, and
<varname>GH_SUBDIR</varname> into a single variable.
The format is
<replaceable>account</replaceable><literal>:</literal><replaceable>project</replaceable><literal>:</literal><replaceable>tagname</replaceable><literal>:</literal><replaceable>group</replaceable><literal>/</literal><replaceable>subdir</replaceable>.
The
<literal>/</literal><replaceable>subdir</replaceable>
part is optional. It is helpful when there is more
than one GitHub project from which to fetch.</entry>
</row>
</tbody>
</tgroup>
@ -2132,11 +2146,9 @@ USE_GITHUB= yes
GH_ACCOUNT= bar:icons,contrib
GH_PROJECT= foo-icons:icons foo-contrib:contrib
GH_TAGNAME= 1.0:icons fa579bc:contrib
GH_SUBDIR= ext/icons:icons
CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
post-extract:
@${MV} ${WRKSRC_icons} ${WRKSRC}/icons</programlisting>
CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}</programlisting>
<para>This will fetch three distribution files from
github. The default one comes from
@ -2165,6 +2177,17 @@ post-extract:
with the <literal>contrib</literal> tag is called
<varname>${WRKSRC_contrib}</varname> and contains
<literal>${WRKDIR}/foo-contrib-fa579bc</literal>.</para>
<para>The software's build system expects to find the icons
in a <filename>ext/icons</filename> subdirectory in its
sources, so <varname>GH_SUBDIR</varname> is used.
<varname>GH_SUBDIR</varname> makes sure that
<filename>ext</filename> exists, but that
<filename>ext/icons</filename> does not already exist.
Then it does this:</para>
<programlisting>post-extract:
@${MV} ${WRKSRC_icons} ${WRKSRC}/ext/icons</programlisting>
</example>
<example xml:id="makefile-master_sites-github-multi2">
@ -2180,19 +2203,118 @@ post-extract:
PORTVERSION= 1.0.2
USE_GITHUB= yes
GH_TUPLE= bar:foo-icons:1.0:icons \
GH_TUPLE= bar:foo-icons:1.0:icons/ext/icons \
bar:foo-contrib:fa579bc:contrib
CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}
post-extract:
@${MV} ${WRKSRC_icons} ${WRKSRC}/icons</programlisting>
CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}</programlisting>
<para>Grouping was used in the previous example with
<literal>bar:icons,contrib</literal>. Some redundant
information is present with <varname>GH_TUPLE</varname>
because grouping is not possible.</para>
</example>
<example xml:id="makefile-master_sites-github-submodules">
<title>How to Use <varname>USE_GITHUB</varname> with
<application>Git</application> Submodules?</title>
<para>Ports with GitHub as an upstream repository sometimes
use submodules. See &man.git-submodule.1; for more
information.</para>
<para>The problem with submodules is that each is a separate
repository. As such, they each must be fetched
separately.</para>
<para>Using <package
role="port">finance/moneymanagerex</package> as an
example, its GitHub repository is <link
xlink:href="https://github.com/moneymanagerex/moneymanagerex"/>.
It has a <link
xlink:href="https://github.com/moneymanagerex/moneymanagerex/blob/master/.gitmodules"><filename>.gitmodules</filename></link>
file at the root. This file describes all the submodules
used in this repository, and lists additional repositories
needed. This file will tell what additional repositories
are needed:</para>
<programlisting>[submodule "lib/wxsqlite3"]
path = lib/wxsqlite3
url = https://github.com/utelle/wxsqlite3.git
[submodule "3rd/mongoose"]
path = 3rd/mongoose
url = https://github.com/cesanta/mongoose.git
[submodule "3rd/LuaGlue"]
path = 3rd/LuaGlue
url = https://github.com/moneymanagerex/LuaGlue.git
[submodule "3rd/cgitemplate"]
path = 3rd/cgitemplate
url = https://github.com/moneymanagerex/html-template.git
[...]</programlisting>
<para>The only information missing from that file is the
commit hash or tag to use as a version. This information
is found after cloning the repository:</para>
<screen>&prompt.user; <userinput>git clone --recurse-submodules https://github.com/moneymanagerex/moneymanagerex.git</userinput>
Cloning into 'moneymanagerex'...
remote: Counting objects: 32387, done.
[...]
Submodule '3rd/LuaGlue' (https://github.com/moneymanagerex/LuaGlue.git) registered for path '3rd/LuaGlue'
Submodule '3rd/cgitemplate' (https://github.com/moneymanagerex/html-template.git) registered for path '3rd/cgitemplate'
Submodule '3rd/mongoose' (https://github.com/cesanta/mongoose.git) registered for path '3rd/mongoose'
Submodule 'lib/wxsqlite3' (https://github.com/utelle/wxsqlite3.git) registered for path 'lib/wxsqlite3'
[...]
Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/LuaGlue'...
Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/cgitemplate'...
Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/3rd/mongoose'...
Cloning into '/home/mat/work/freebsd/ports/finance/moneymanagerex/moneymanagerex/lib/wxsqlite3'...
[...]
Submodule path '3rd/LuaGlue': checked out 'c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b'
Submodule path '3rd/cgitemplate': checked out 'cd434eeeb35904ebcd3d718ba29c281a649b192c'
Submodule path '3rd/mongoose': checked out '2140e5992ab9a3a9a34ce9a281abf57f00f95cda'
Submodule path 'lib/wxsqlite3': checked out 'fb66eb230d8aed21dec273b38c7c054dcb7d6b51'
[...]
&prompt.user; <userinput>cd moneymanagerex</userinput>
&prompt.user; <userinput>git submodule status</userinput>
c51d11a247ee4d1e9817dfa2a8da8d9e2f97ae3b 3rd/LuaGlue (heads/master)
cd434eeeb35904ebcd3d718ba29c281a649b192c 3rd/cgitemplate (cd434ee)
2140e5992ab9a3a9a34ce9a281abf57f00f95cda 3rd/mongoose (6.2-138-g2140e59)
fb66eb230d8aed21dec273b38c7c054dcb7d6b51 lib/wxsqlite3 (v3.4.0)
[...]</screen>
<para>It can also be found on GitHub. Each subdirectory
that is a submodule is shown as
<replaceable>directory</replaceable><literal>&nbsp;@&nbsp;</literal><replaceable>hash</replaceable>,
for example,
<literal>mongoose&nbsp;@&nbsp;2140e59</literal>.</para>
<note>
<para>While getting the information from GitHub seems more
straightforward, the information found using
<command>git submodule status</command> will provide
more meaningful information. For example, here,
<literal>lib/wxsqlite3</literal>'s commit hash
<literal>fb66eb2</literal> correspond to
<literal>v3.4.0</literal>. Both can be used
interchangeably, but when a tag is available, use
it.</para>
</note>
<para>Now that all the required information has been
gathered, the <filename>Makefile</filename> can be written
(only GitHub-related lines are shown):</para>
<programlisting>PORTNAME= moneymanagerex
PORTVERSION= 1.3.0
DISTVERSIONPREFIX= v
USE_GITHUB= yes
GH_TUPLE= utelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqlite3 \
moneymanagerex:LuaGlue:c51d11a:lua_glue/3rd/LuaGlue \
moneymanagerex:html-template:cd434ee:html_template/3rd/cgitemplate \
cesanta:mongoose:2140e59:mongoose/3rd/mongoose \
[...]</programlisting>
</example>
</sect3>
</sect2>
@ -4754,6 +4876,10 @@ LIB_DEPENDS+= libb.so:devel/b
<para><varname>GH_PROJECT</varname></para>
</listitem>
<listitem>
<para><varname>GH_SUBDIR</varname></para>
</listitem>
<listitem>
<para><varname>GH_TAGNAME</varname></para>
</listitem>

View file

@ -257,6 +257,7 @@
<!ENTITY man.getfacl.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>getfacl</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY man.getopt.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>getopt</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY man.getopts.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>getopts</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY man.git-submodule.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>git-submodule</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY man.glob.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>glob</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY man.gnu-ar.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>gnu-ar</refentrytitle><manvolnum>1</manvolnum></citerefentry>">
<!ENTITY man.gnu-ranlib.1 "<citerefentry xmlns='http://docbook.org/ns/docbook'><refentrytitle>gnu-ranlib</refentrytitle><manvolnum>1</manvolnum></citerefentry>">