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:
		
							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
				
			
		|  | @ -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> @ </literal><replaceable>hash</replaceable>, | ||||
| 	    for example, | ||||
| 	    <literal>mongoose @ 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> | ||||
|  |  | |||
|  | @ -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>"> | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue