[pacman-dev] makepkg and (n)awk

Dave Reisner d at falconindy.com
Sun Dec 26 18:23:11 EST 2010


On Sun, Dec 26, 2010 at 01:59:05AM +0200, Nezmer wrote:
> Hi,
> 
> In commit ef977865, awk was added as an external tool needed by makepkg.
> 
> As you know, there is different awk implementations out there. nawk is
> the implementation shipped by default in non-GNU systems As far as I
> know.
> 
> Unfortunately, awk usage in makepkg is not nawk-compatible.
> 
> Command:
> 
> %gawk '/^[[:space:]]*provides=/,/)/' B | sed "s/provides=/provides_list+=/"
> 
> Output:
> 
>  provides_list+=('p1' 'p2' '3') # comment
> 
> Command:
> 
> % awk '/^[[:space:]]*provides=/,/)/' B | sed "s/provides=/provides_list+=/"
> 
> Output:
> 
> awk: illegal primary in regular expression ) at
>  source line number 1
>  context is
>          >>> /^[[:space:]]*provides=/,/)/ <<<
> 
> 
> ======================
> 
> Anyway, what is awk doing here? Is it the same as:
> egrep '^\s*provides=\(.*\)'
> 

Installed nawk to play around with this. It looks like all that's needed is to
escape the closing parenthesis on the ending address:

$ nawk '/^[[:space:]]*md5sums=/,/\)/' < PKGBUILD 
md5sums=('f26f78f09cc675c9d2c0eacc54b223d6'
         'c5e849fcb1101149977355c99d8ff78f'
         '096a46ef386817988250d2d7bddd1b34')

This plays well with gawk and mawk as well.

Wasn't able to locate a multi-line provides, but any multi-line array attribute
should be sufficient, no?

dave



More information about the pacman-dev mailing list