Mail archive
alpine-aports

new APKBUILD format? (WAS: Re: [alpine-aports] [PATCH 2/2] main/git: add git-gui and gitk subpackages)

From: Natanael Copa <ncopa_at_alpinelinux.org>
Date: Fri, 29 May 2015 10:41:19 +0200

Thank you for this patch.

This patch uncovers a problem in abuild/APKBUILD that I'd like to solve.

The problem is that we need to tell abuild (and aports building tools)
the dependencies in global scope.

I'll explain below.

On Fri, 29 May 2015 14:04:23 -0400
Andrew Hills <ahills_at_ednos.net> wrote:

> _at_@ -24,6 +24,8 @@ subpackages="$pkgname-doc
> $pkgname-subtree
> $pkgname-subtree-doc:subtree_doc
> $pkgname-perl:_git_perl
> + $pkgname-gui
> + $pkgname-gitk
> "
>
> makedepends="zlib-dev openssl-dev curl-dev expat-dev perl-dev python-dev

We have 2 subpackages, git-gui and git-gitk.

...
  
> _at_@ -189,6 +190,31 @@ subtree_doc() {
> make install-man prefix=/usr DESTDIR="$subpkgdir"
> }
>
> +gui() {
> + depends="git=$pkgver-r$pkgrel tcl tk"

git-gui needs tcl and tk to run.

...
> +gitk() {
> + depends="git=$pkgver-r$pkgrel tcl tk"


so does git-gitk.

The problem here is that when building the repository from scratch,
there is no way for the build scripts to know that tcl and tk needs to
be built before git. The tcl and tk must be built before git because if
other package would have makedepends="git-gui" the would the build fail
if tcl and tk is not built at that point.

The problem is not the patch itself but the problem is in APKBUILD. We
need a way to say that subpackage git-gui has depends of tcl and tk.

Something like this in global scope would have been nice:

  git-gui.depends="git=$pkgver-r$pkgdr tcl tk"
  git-gui.pkgdesc="GUI interface for git"

but that is not possible in shell. (it would be possible to do like
git_gui_depends="..." and then do tricks with eval, but i would very much
want avoid that)

For this specific case we can work around it with:
makedepends="tcl tk ..."

To fix this properly, we would need replace APKBUILD with another
format (embedded yaml? lua? .spec?), where the meta data (pkgname,
depends, etc) was not shell.

If we want stick to shell then we could also do some kind of hack:

subdepends="
        $pkgname-gui:tcl
        $pkgname-gui:tk
        "

This problem alone does not justify replacing APKBUILD, but there are
other issues too with the APKBUILD format that i'd like to fix.

I am open to ideas.

-nc


---
Unsubscribe:  alpine-aports+unsubscribe_at_lists.alpinelinux.org
Help:         alpine-aports+help_at_lists.alpinelinux.org
---
Received on Fri May 29 2015 - 10:41:19 GMT