Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 May 2020 02:50:34 +0000
From:      "Montgomery-Smith, Stephen" <stephen@missouri.edu>
To:        Matthew Seaman <matthew@FreeBSD.org>, "freebsd-ports@freebsd.org" <freebsd-ports@freebsd.org>
Subject:   Re: Ports from github
Message-ID:  <9694e545-167b-404f-fbd7-2e97f7cd9482@missouri.edu>
In-Reply-To: <5bb5cc69-ef90-2285-324f-58e09399d3ef@FreeBSD.org>
References:  <3c6205ea-e589-769b-7b12-ee7e6d3fa8ff@missouri.edu> <5bb5cc69-ef90-2285-324f-58e09399d3ef@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--gXxJw8cLIty7ucupn13wVAteitqUafq2w
Content-Type: multipart/mixed; boundary="2SmAL9rxqlkkEl4LlpKsrXmfwrWtzsU7a"

--2SmAL9rxqlkkEl4LlpKsrXmfwrWtzsU7a
Content-Type: text/plain; charset=utf-8
Content-Language: en-US
Content-Transfer-Encoding: quoted-printable

On 5/24/20 3:49 AM, Matthew Seaman wrote:
> On 24/05/2020 03:39, Montgomery-Smith, Stephen wrote:
>> Is there a "howto" that explains how to build a port from a project th=
at
>> is on github?  The FreeBSD porters handbook seems to assume a lot of
>> knowledge is already understood.
>=20
> Well, the only thing "different" about porting something from Github, a=
s
> opposed to any other distfile location, occurs in the 'fetch' phase --
> actually pulling down the distfiles.  Once you've got past that, the
> rest of building the port is exactly the same as it would be if you got=

> the distfiles from anywhere else.
>=20
> So, minimally a Github using port will set the following variables:
>=20
> PORTNAME=3D someport
> PORTVERSION=3D 1.2.3
> DISTVERSIONPREFIX=3D v
> USE_GITHUB=3D yes
> GH_ACCOUNT=3D someone
>=20
> and it won't set:
>=20
> MASTER_SITES
> DISTFILES
>=20
> An example from amongst the ports I maintain is database/pg_citus:
>=20
> PORTNAME=3D       citus
> PORTVERSION=3D    9.3.0
> DISTVERSIONPREFIX=3D      v
>=20
> USE_GITHUB=3D     yes
> GH_ACCOUNT=3D     citusdata
>=20
> From this, the ports can work out that the Github project is:
>=20
>    https://github.com/citusdata/citus/
>                       ^^^^^^^^^
>                       GH_ACCOUNT
>                                 ^^^^^
>                                 PORTNAME
>=20
> If you go to that project URL and look at their releases page:
>=20
>   https://github.com/citusdata/citus/releases
>=20
> you'll see the list of versions like so:
>=20
>   v9.3.0
>   ^ ^^^^
>   | PORTVERSION
>   DISTVERSIONPREFIX
>=20
> That's all that is needed for this port to be able to download a tarbal=
l
> of the project's sources.
>=20
> Now, this is about the simplest possible example of what you might need=

> when pulling sources from Github, and this pattern probably accounts fo=
r
> the largest fraction of the Github-using ports in the tree.
>=20
> Beyond that, the next largest fraction will be projects where the
> PORTNAME doesn't quite match the GH project URL, or their release tags
> specify the version as (eg.) v1_2_3 rather than v1.2.3 -- all just mino=
r
> tweaks so the ports can put together the right URL to pull the distfile=
s
> from.
>=20
> Beyond that is where it can start to get pretty complicated though.
> Sometimes a project doesn't create formal releases, or you want to pull=

> down a code base a few commits beyond the latest release, or the projec=
t
> uses a lot of different sub-projects linked into its tree from other
> github repositories.  Certain programs written in go are pretty
> notorious for this, and can end up with huge lists of distfiles.  See
> www/gitlab-pages for an example.
>=20
> Finally, and only if you really want to blow your mind: throw in an
> unreasonable number of port options to the mix.  www/nginx is the
> pinnacle (or is it nadir?) here.
>=20
> In general I'd offer the following three pieces of advice when trying t=
o
> get to grips with a new area in porting:
>=20
>   * Find a good example of a port that does something similar and
>     blatantly copy it[*].
>   * Keep things as simple as possible (but no simpler).
>   * Work iteratively: start with something close, and make simple
>     minimal changes, one at a time and testing as you go, to get it spo=
t
>     on.
>=20
> [*] The trick here is not to copy a port that does things sub-optimally=
=2E
>  Sods law has it that if there's a dozen good examples you might copy,
> and one bad one, it's the bad one that will seem like the most enticing=

> prospect.
>=20
> If in doubt, ask.  It helps if you can provide a concrete example or a
> specific context for your questions, and indeed, trying to formulate
> such a question will often lead you directly to the answer yourself.
>=20
> 	Cheers,
>=20
> 	Matthew

Thank you.  That really helped a lot.  I was able to figure it out from
this point.


--2SmAL9rxqlkkEl4LlpKsrXmfwrWtzsU7a--

--gXxJw8cLIty7ucupn13wVAteitqUafq2w
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: OpenPGP digital signature
Content-Disposition: attachment; filename="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQEzBAEBCgAdFiEEcCMd3cXf2WTGWYmWK5cnauCP2YIFAl7LMnkACgkQK5cnauCP
2YLeqQf8CfHzyClOoYAd9hX3plrQ+Z9xiDP2mu/NXSh5JKaz0K7BtJoie4WIC145
YzDdc6+aFDnaZTuF1WqeSJtnNFFZCTGqs8PKQrzyxq/BQACWxf9sBeu83bZam4Ks
qWZXUvPOu1AyX+GcRiQC1hSZzhGnBQ2BeF/rZcr+yxCzhKjygzE1NZLC+4KqKZJh
svmI2NAS8T/C67Md8YLPm05UQ6gOGFEmFkGuJuBQFTISDicoN9YbbPnJT4PSlXUw
tX0uEW6vr4ib+MNVZT7kvjlOjoghJv57g9BE4gIdel6wMEZkHnRS/1Zfik2MY7BN
KBUsaaJ8/7VUOLbvqgmuOQJPYhpgTw==
=UViT
-----END PGP SIGNATURE-----

--gXxJw8cLIty7ucupn13wVAteitqUafq2w--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9694e545-167b-404f-fbd7-2e97f7cd9482>