[pacman-dev] [RFC] makepkg: introduce .SRCINFO files for source packages
Allan McRae
allan at archlinux.org
Sun Oct 19 11:28:12 UTC 2014
On 18/10/14 11:59, Dave Reisner wrote:
> Similar to .PKGINFO, .SRCINFO provides structured metadata from the
> PKGBUILD to be included with source packages.
>
> The format is structured such that it contains a "pkgbase" and one to
> many "pkgname" sections. Each "pkgname" section represents an "output
> package", and inherits all of the attributes of the "pkgbase" section,
> and then can define their own additive fields.
>
> For example, a simple PKGBUILD:
>
> pkgbase=ponies
> pkgname=('applejack' 'pinkiepie')
> pkgver=1.2.3
> pkgrel=1
> arch=('x86_64' 'i686')
> depends=('friendship' 'magic')
>
> build() { ...; }
>
> package_applejack() {
> provides=('courage')
>
> ...;
> }
>
> package_pinkiepie() {
> provides=('laughter')
>
> ...;
> }
>
> Would yield the following .SRCINFO file:
>
> pkgbase = ponies
> pkgdesc = friendship is magic
> pkgver = 1.2.3
> pkgrel = 1
> arch = x86_64
> arch = i686
> depends = friendship
> depends = magic
>
> pkgname = applejack
> provides = courage
>
> pkgname = pinkiepie
> provides = laughter
>
Having been forced to watch this by my daughter, I still do not
understand the appeal of ponies...
> The code to generate this new file is taken a project which I've been
> incubating[0] under the guise of 'mkaurball', which creates .AURINFO
> files for the AUR. AURINFO is the exactly same file as .SRCINFO, but
> named as such to make it clear that this is specific to the AUR.
>
> Because we're parsing shell in the packaging functions rather than
> executing it, there *are* some limitations, but these only really crop
> up in more "exotic" PKGBUILDs. Smoketesting[1] for accuracy in the Arch
> repos yields 100% accuracy for [core] and [extra]. [community] clocks in
> at ~98% accuracy (.3% difference per PKGBUILD), largely due to silly
> haskell packages calling pacman from inside the PKGBUILD to determine
> dependencies.
WTF!
> [multilib] currently shows about 92% accuracy -- a
> statistic which can be largely improved by utilizing the recently merged
> arch-specific attribute work. This is also a smaller repo so the numbers
> are somewhat inflated. In reality, this is only a .8% variance per
> PKGBUILD.
Having not even looked at your patch at this stage... Do we detect when
this fails? Could we detect it at the .PKGINFO construction stage and
print a warning?
> Together, we can make PKGBUILD better.
>
> [0] https://github.com/falconindy/pkgbuild-introspection
> [1] https://github.com/falconindy/pkgbuild-introspection/blob/master/test/smoketest
> ---
> Based on Allan's recent email about the feature freeze being pushed back,
> I'm offering this up for discussion.
This was something that had been flagged as potential for inclusion
anyway. And I want this in for what I have planned post release...
My usual test PKGBUILD:
PKGBUILD:
pkgname='foobar'
pkgver=1
pkgrel=1
arch=('i686' 'x86_64')
source=('tmp.txt')
source_x86_64+=('foo.bar')
md5sums=('d41d8cd98f00b204e9800998ecf8427e')
md5sums_x86_64=('d41d8cd98f00b204e9800998ecf8427e')
.SRCINFO
# Generated by makepkg 4.1.2-468-gf74e
# Sun Oct 19 11:22:00 UTC 2014
pkgbase = foobar
pkgver = 1
pkgrel = 1
epoch = 0
arch = i686
arch = x86_64
checkdepends =
makedepends =
depends =
optdepends =
provides =
conflicts =
replaces =
source = tmp.txt
md5sums = d41d8cd98f00b204e9800998ecf8427e
source_x86_64 = foo.bar
pkgname = foobar
So there are some bugs:
- epoch = 0 (should be not printed)
- Lots of empty values
- No md5sum_x86_64
Otherwise, all good. Small query:
> +
> +srcinfo_write_attr() {
> + # $1: attr name
> + # $2: attr values
> +
> + local attrname=$1 attrvalues=("${@:2}")
> +
> + # normalize whitespace, strip leading and trailing
> + attrvalues=("${attrvalues[@]//+([[:space:]])/ }")
> + attrvalues=("${attrvalues[@]#[[:space:]]}")
> + attrvalues=("${attrvalues[@]%[[:space:]]}")
Make all whitespace a single space then strip whitespace from start and
finish? What is the first step for?
Allan
More information about the pacman-dev
mailing list