Date: Sat, 3 Mar 2018 07:03:10 +0000 (UTC) From: Richard Gallamore <ultima@FreeBSD.org> To: doc-committers@freebsd.org, svn-doc-all@freebsd.org, svn-doc-head@freebsd.org Subject: svn commit: r51456 - head/en_US.ISO8859-1/books/porters-handbook/makefiles Message-ID: <201803030703.w2373AgM024183@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: ultima (ports committer) Date: Sat Mar 3 07:03:10 2018 New Revision: 51456 URL: https://svnweb.freebsd.org/changeset/doc/51456 Log: * Add USE_GITLAB This will explain how to properly use the new USE_GITLAB feature. Reviewed by: mat wblock Approved by: mat Differential Revision: https://reviews.freebsd.org/D12261 Modified: head/en_US.ISO8859-1/books/porters-handbook/makefiles/chapter.xml Modified: head/en_US.ISO8859-1/books/porters-handbook/makefiles/chapter.xml ============================================================================== --- head/en_US.ISO8859-1/books/porters-handbook/makefiles/chapter.xml Sat Mar 3 00:01:48 2018 (r51455) +++ head/en_US.ISO8859-1/books/porters-handbook/makefiles/chapter.xml Sat Mar 3 07:03:10 2018 (r51456) @@ -2907,6 +2907,294 @@ GH_TUPLE= utelle:wxsqlite3:v3.4.0:wxsqlite3/lib/wxsqli </sect3> </sect2> + <sect2 xml:id="makefile-master_sites-gitlab"> + <title><varname>USE_GITLAB</varname></title> + + <para>Similar to GitHub, if the distribution file comes from + <link xlink:href="https://gitlab.com">gitlab.com</link> + or is hosting the <application>GitLab</application> + software, these variables are available for use and might + need to be set.</para> + + <table xml:id="makefile-master_sites-gitlab-description"> + <title><varname>USE_GITLAB</varname> Description</title> + + <tgroup cols="3"> + <thead> + <row> + <entry>Variable</entry> + <entry>Description</entry> + <entry>Default</entry> + </row> + </thead> + + <tbody> + <row> + <entry><varname>GL_SITE</varname></entry> + <entry>Site name hosting the <application>GitLab</application> + project</entry> <entry>https://gitlab.com</entry> + </row> + + <row> + <entry><varname>GL_ACCOUNT</varname></entry> + <entry>Account name of the <application>GitLab</application> + user hosting the project</entry> + <entry><literal>${PORTNAME}</literal></entry> + </row> + + <row> + <entry><varname>GL_PROJECT</varname></entry> + <entry>Name of the project on <application>GitLab</application></entry> + <entry><literal>${PORTNAME}</literal></entry> + </row> + + <row> + <entry><varname>GL_COMMIT</varname></entry> + <entry>The commit hash to download. Must be the full + 160 bit, 40 character hex sha1 hash. This is a required + variable for <application>GitLab</application>.</entry> + <entry><literal>(none)</literal></entry> + </row> + + <row> + <entry><varname>GL_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-gitlab-multiple"/> + for more information.</entry> + <entry>(none)</entry> + </row> + + <row> + <entry><varname>GL_TUPLE</varname></entry> + <entry><varname>GL_TUPLE</varname> allows putting + <varname>GL_SITE</varname>, + <varname>GL_ACCOUNT</varname>, + <varname>GL_PROJECT</varname>, + <varname>GL_COMMIT</varname>, and + <varname>GL_SUBDIR</varname> into a single variable. + The format is + <replaceable>site</replaceable><literal>:</literal><replaceable>account</replaceable><literal>:</literal><replaceable>project</replaceable><literal>:</literal><replaceable>commit</replaceable><literal>:</literal><replaceable>group</replaceable><literal>/</literal><replaceable>subdir</replaceable>. + The <replaceable>site</replaceable><literal>:</literal> and + <literal>/</literal><replaceable>subdir</replaceable> + part is optional. It is helpful when there are more + than one <application>GitLab</application> project from + which to fetch.</entry> + </row> + </tbody> + </tgroup> + </table> + + <example xml:id="makefile-master_sites-gitlab-ex1"> + <title>Simple Use of <varname>USE_GITLAB</varname></title> + + <para>While trying to make a port for version + <literal>1.14</literal> of <application>libsignon-glib</application> + from the accounts-sso user on gitlab.com, at <link + xlink:href="https://gitlab.com/accounts-sso/libsignon-glib"/>, The + <filename>Makefile</filename> would end up looking like + this for fetching the distribution files:</para> + + <programlisting>PORTNAME= libsignon-glib +DISTVERSION= 1.14 + +USE_GITLAB= yes +GL_ACCOUNT= accounts-sso +GL_COMMIT= e90302e342bfd27bc8c9132ab9d0ea3d8723fd03</programlisting> + + <para>It will automatically have + <varname>MASTER_SITES</varname> set to <link + xlink:href="https://gitlab.com">gitlab.com</link> + and <varname>WRKSRC</varname> to + <literal>${WRKDIR}/libsignon-glib-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03-e90302e342bfd27bc8c9132ab9d0ea3d8723fd03</literal>.</para> + </example> + + <example xml:id="makefile-master_sites-gitlab-ex2"> + <title>More Complete Use of + <varname>USE_GITLAB</varname></title> + + <para>A more complete use of the above if + port had no versioning and <application>foobar</application> + from the foo user on project bar on a self hosted <application>GitLab</application> + site <literal>https://gitlab.example.com</literal>, the <filename>Makefile</filename> + ends up looking like this for fetching distribution files:</para> + + <programlisting>PORTNAME= foobar +DISTVERSION= g20170906 + +USE_GITLAB= yes +GL_SITE= https://gitlab.example.com +GL_ACCOUNT= foo +GL_PROJECT= bar +GL_COMMIT= 9c1669ce60c3f4f5eb43df874d7314483fb3f8a6</programlisting> + + <para>It will have <varname>MASTER_SITES</varname> set to + "<literal>https://gitlab.example.com</literal>" and <varname>WRKSRC</varname> to + <literal>${WRKDIR}/bar-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6-9c1669ce60c3f4f5eb43df874d7314483fb3f8a6</literal>.</para> + + <tip> + <para><literal>20170906</literal> is the date of the + commit referenced in <varname>GL_COMMIT</varname>, not + the date the <filename>Makefile</filename> is edited, or + the date the commit to the &os; ports tree is made.</para> + </tip> + + <note> + <para><varname>GL_SITE</varname>'s protocol, port and + webroot can all be modified in the same variable.</para> + </note> + </example> + + <sect3 xml:id="makefile-master_sites-gitlab-multiple"> + <title>Fetching Multiple Files from <application>GitLab</application></title> + + <para>The <varname>USE_GITLAB</varname> framework also + supports fetching multiple distribution files from + different places from <application>GitLab</application> + and <application>GitLab</application> hosted sites. It + works in a way very similar to <xref + linkend="porting-master-sites-n"/> and xref + linkend="makefile-master_sites-gitlab-multiple".</para> + + <para>When fetching multiple files using <application>GitLab</application>, + sometimes the default distribution file is not fetched from a <application>GitLab</application> + site. To disable fetching the default distribution, set:</para> + + <programlisting>USE_GITLAB= nodefault</programlisting> + + <para>Multiple values are added to + <varname>GL_SITE</varname>, + <varname>GL_ACCOUNT</varname>, + <varname>GL_PROJECT</varname> and + <varname>GL_COMMIT</varname>. Each different value is + assigned a group. + <xref + linkend="makefile-master_sites-gitlab-description"/>.</para> + + <para><varname>GL_TUPLE</varname> can also be used when there + are a lot of distribution files. It helps keep the site, + account, project, commit, and group information at the same + place.</para> + + <para>For each group, a + <varname>${WRKSRC_<replaceable>group</replaceable>}</varname> + helper variable is created, containing the directory into + which the file has been extracted. The + <varname>${WRKSRC_<replaceable>group</replaceable>}</varname> + variables can be used to move directories around during + <buildtarget>post-extract</buildtarget>, or add to + <varname>CONFIGURE_ARGS</varname>, or whatever is needed + so that the software builds correctly.</para> + + <caution> + <para>The + <literal>:<replaceable>group</replaceable></literal> part + <emphasis>must</emphasis> be used for <emphasis>only + one</emphasis> distribution file. It is used as a + unique key and using it more than once will overwrite the + previous values.</para> + </caution> + + <note> + <para>As this is only syntastic sugar above + <varname>DISTFILES</varname> and + <varname>MASTER_SITES</varname>, the group names must + adhere to the restrictions on group names outlined in + <xref linkend="porting-master-sites-n"/></para> + </note> + + <example xml:id="makefile-master_sites-gitlab-multi"> + <title>Use of <varname>USE_GITLAB</varname> with Multiple + Distribution Files</title> + + <para>From time to time, there is a need to fetch more + than one distribution file. For example, when the + upstream git repository uses submodules. This can be + done easily using groups in the + <varname>GL_<replaceable>*</replaceable></varname> + variables:</para> + + <programlisting>PORTNAME= foo +DISTVERSION= 1.0.2 + +USE_GITLAB= yes +GL_SITE= https://gitlab.example.com:9434/gitlab:icons +GL_ACCOUNT= bar:icons,contrib +GL_PROJECT= foo-icons:icons foo-contrib:contrib +GL_COMMIT= c189207a55da45305c884fe2b50e086fcad4724b ae7368cab1ca7ca754b38d49da064df87968ffe4:icons 9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib +GL_SUBDIR= ext/icons:icons + +CONFIGURE_ARGS= --with-contrib=${WRKSRC_contrib}</programlisting> + + <para>This will fetch two distribution files from + gitlab.com and one from <literal>gitlab.example.com</literal> + hosting <application>GitLab</application>. The default one comes + from <filename>https://gitlab.com/foo/foo</filename> and commit is + <literal>c189207a55da45305c884fe2b50e086fcad4724b</literal>. The + second one, with the <literal>icons</literal> group, comes from + <filename>https://gitlab.example.com:9434/gitlab/bar/foo-icons</filename> + and commit is <literal>ae7368cab1ca7ca754b38d49da064df87968ffe4</literal>. + The third one comes from <filename>https://gitlab.com/bar/foo-contrib</filename> + and is commit <literal>9e4dd76ad9b38f33fdb417a4c01935958d5acd2a</literal>. + The distribution files are named <filename>foo-foo-c189207a55da45305c884fe2b50e086fcad4724b_GL0.tar.gz</filename>, + <filename>bar-foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4_GL0.tar.gz</filename>, and + <filename>bar-foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a_GL0.tar.gz</filename>.</para> + + <para>All the distribution files are extracted in + <varname>${WRKDIR}</varname> in their respective + subdirectories. The default file is still extracted in + <varname>${WRKSRC}</varname>, in this case, + <filename>${WRKDIR}/foo-c189207a55da45305c884fe2b50e086fcad4724b-c189207a55da45305c884fe2b50e086fcad4724b</filename>. + Each additional distribution file is extracted in + <varname>${WRKSRC_<replaceable>group</replaceable>}</varname>. + Here, for the <literal>icons</literal> group, it is called + <varname>${WRKSRC_icons}</varname> and it contains + <filename>${WRKDIR}/foo-icons-ae7368cab1ca7ca754b38d49da064df87968ffe4-ae7368cab1ca7ca754b38d49da064df87968ffe4</filename>. + The file with the <literal>contrib</literal> group is + called <varname>${WRKSRC_contrib}</varname> and contains + <literal>${WRKDIR}/foo-contrib-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a-9e4dd76ad9b38f33fdb417a4c01935958d5acd2a</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>GL_SUBDIR</varname> is used. + <varname>GL_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-gitlab-multi2"> + <title>Use of <varname>USE_GITLAB</varname> with Multiple + Distribution Files Using + <varname>GL_TUPLE</varname></title> + + <para>This is functionally equivalent to <xref + linkend="makefile-master_sites-gitlab-multi"/>, but + using <varname>GL_TUPLE</varname>:</para> + + <programlisting>PORTNAME= foo +DISTVERSION= 1.0.2 + +USE_GITLAB= yes +GL_COMMIT= c189207a55da45305c884fe2b50e086fcad4724b +GL_TUPLE= https://gitlab.example.com:9434/gitlab:bar:foo-icons:ae7368cab1ca7ca754b38d49da064df87968ffe4:icons/ext/icons \ + bar:foo-contrib:9e4dd76ad9b38f33fdb417a4c01935958d5acd2a:contrib + +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>GL_TUPLE</varname> + because grouping is not possible.</para> + </example> + </sect3> + </sect2> + <sect2 xml:id="makefile-extract_sufx"> <title><varname>EXTRACT_SUFX</varname></title>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803030703.w2373AgM024183>