request for port create command, to build a portfile from a URL
Enrico Maria Crisostomo
enrico.m.crisostomo at gmail.com
Fri Mar 9 19:22:04 UTC 2018
Ken,
I pushed to GitHub a skeleton of the idea:
https://github.com/emcrisostomo/macports-utils
I've moved what I'm using to a new script to see what the end result looked like. If you want to try it, just grab the release tarball here (if you don't have the Autotools installed):
./configure && make install
otherwise just clone the repo, bootstrap it and use it:
./autogen.sh && ./configure && make install
An example:
$ port-gen --url https://github.com/emcrisostomo/semver-utils/releases/download/1.1.3/semver-utils-1.1.3.tar.gz
outputs:
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup github 1.0
github.setup emcrisostomo semver-utils 1.1.3
github.tarball_from releases
categories changeme
platforms darwin
license GPL-3
maintainers obfuscated-maintainer-mail \
openmaintainer
description Add a short port description here.
long_description Add a long port description here.
homepage https://github.com/emcrisostomo/semver-utils
checksums md5 e65be62dc9e25af8aa467aa99cde1e00 \
rmd160 71cf46420315edd8019d6974062033480b5c79a0 \
sha256 888a688feabc82ce59abc754c63fd2babff5747f0463fb1a3f8fffaf50d5d982 \
size 514429
livecheck.url ${github.homepage}/releases/latest
The template is intuitive:
$ cat /usr/local/share/macports-utils/templates/github.in
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup github 1.0
github.setup ${GITHUB_AUTHOR} ${PORT_NAME} ${PORT_VERSION}
github.tarball_from releases
categories changeme
platforms darwin
license GPL-3
maintainers obfuscated-maintainer-mail \\\\
openmaintainer
description Add a short port description here.
long_description Add a long port description here.
homepage ${GITHUB_REPO_URL}
checksums md5 ${CHECKSUM_MD5} \\\\
rmd160 ${CHECKSUM_RMD160} \\\\
sha256 ${CHECKSUM_SHA256} \\\\
size ${CHECKSUM_SIZE}
livecheck.url \${github.homepage}/releases/latest
> On 7 Mar 2018, at 10:23, Enrico Maria Crisostomo <enrico.m.crisostomo at gmail.com> wrote:
>
> Hi Ken,
>
> I think it's a great idea. I'm maintaining a lot of software both on my personal machines and at work using MacPorts and I've setup some local Makefile targets to do some of this work. Perhaps I could contribute some work on this area, but first I'd like to know what is it that we'd like to have.
>
> What is currently working for me is a very simple, template-based approach. Since 90% of the time I'm dealing with ports using the github portgroup, I'm basically calculating the relevant variables (port name, version, checksums, etc.) and fill in a template. The template is a file where shell expansion is performed (i.e.: variables in the form ${VAR}) are expanded.) I think this approach could be both very useful and simple to maintain if we had a list of pre-defined templates. It doesn't scale well with the number of different templates to support and their complexity. If we needed templates to have logic in it (flow control, expressions, etc.),then my guts say we should move to a suitable templating engine (or a different kind of solution altogether).
>
> I've had a look at portfile-gen and it's a nice source of inspiration. Yet, I'm not convinced that outputting text directly from the program flow is either easy to read or easily maintainable, especially if complexity goes up.
>
> portfile-gen, if I understand correctly, supports the following groups:
>
> * perl5
> * php
> * python
> * ruby
> * github
>
> If we extracted a template for each one of those groups (or more templates in case a group may have multiple templates), then the effort required to come up with a working prototype would be implementing the functions required to populate the environment (i.e.: downloading a file if needed, calculating checksums, examining it). Perhaps we would have to split a Portfile in multiple segments, and generate each segment from a specific template (e.g.: if a port requires GNU Autotools).
>
> What are your gut feelings about a template-based solution? Do you think it would be able to manage the level of Portfile complexity we desire for this tool?
>
> Cheers,
> --
> Enrico
>
>
>> On 7 Mar 2018, at 01:27, Ken Cunningham <ken.cunningham.webuse at gmail.com> wrote:
>>
>>
>> On 2018-03-06, at 7:19 AM, Joshua Root wrote:
>>
>>>
>>> There's a fairly basic tool called portfile-gen in contrib. Improvements
>>> are certainly welcome.
>>
>> That is indeed a step towards what I was thinking of.
>>
>> I'll look at this.
>>
>> Ken
>>
>
More information about the macports-dev
mailing list