[pacman-dev] Comments with `)' are either broken or disallowed

Phillip Smith lists at fukawi2.nl
Mon May 12 00:05:39 EDT 2014


On 12 May 2014 12:47, Michael Witten <mfwitten at gmail.com> wrote:

>
> As you can plainly see, this ruins the ability to include comments that use
> the `)' character, as in the following:
>

​I think this patch may resolve that by stripping comments early. Posting
on-list to get feedback.

Is there a FS# for this issue?


​
>From 77482a0064919677e5e948e6c00666d0fffe7486 Mon Sep 17 00:00:00 2001
From: Phillip Smith <fukawi2 at gmail.com>
Date: Mon, 12 May 2014 14:00:51 +1000
Subject: [PATCH] strip comments early when evaluating
 provides/backups/optdepends/options

stripping the comments as the first step avoids errors when these arrays
contain multiple lines with comments on each line where the comment
contains a round-bracket eg:
options=(
  '!strip'
  '!makeflags' # issues with concurrency (`-j2', etc.)
)
---
 scripts/makepkg.sh.in | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index d8cdc88..08d19ca 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -2189,8 +2189,9 @@ check_sanity() {
  fi

  local provides_list=()
- eval $(awk '/^[[:space:]]*provides=/,/\)/' "$BUILDFILE" | \
- sed -e "s/provides=/provides_list+=/" -e "s/#.*//" -e 's/\\$//')
+ eval $(sed -e "s/[[:space:]]*#.*//" "$BUILDFILE" | \
+ awk '/^[[:space:]]*provides=/,/\)/' | \
+ sed -e "s/provides=/provides_list+=/" -e 's/\\$//')
  for i in ${provides_list[@]}; do
  if [[ $i == *['<>']* ]]; then
  error "$(gettext "%s array cannot contain comparison (< or >)
operators.")" "provides"
@@ -2199,8 +2200,9 @@ check_sanity() {
  done

  local backup_list=()
- eval $(awk '/^[[:space:]]*backup=/,/\)/' "$BUILDFILE" | \
- sed -e "s/backup=/backup_list+=/" -e "s/#.*//" -e 's/\\$//')
+ eval $(sed -e "s/[[:space:]]*#.*//" "$BUILDFILE" | \
+ awk '/^[[:space:]]*backup=/,/\)/' | \
+ sed -e "s/backup=/backup_list+=/" -e 's/\\$//')
  for i in "${backup_list[@]}"; do
  if [[ ${i:0:1} = "/" ]]; then
  error "$(gettext "%s entry should not contain leading slash : %s")"
"backup" "$i"
@@ -2209,8 +2211,9 @@ check_sanity() {
  done

  local optdepends_list=()
- eval $(awk '/^[[:space:]]*optdepends=\(/,/\)[[:space:]]*(#.*)?$/'
"$BUILDFILE" | \
- sed -e "s/optdepends=/optdepends_list+=/" -e "s/#.*//" -e 's/\\$//')
+ eval $(sed -e "s/[[:space:]]*#.*//" "$BUILDFILE" | \
+ awk '/^[[:space:]]*optdepends=\(/,/\)[[:space:]]*(#.*)?$/' | \
+ sed -e "s/optdepends=/optdepends_list+=/" -e 's/\\$//')
  for i in "${optdepends_list[@]}"; do
  local pkg=${i%%:[[:space:]]*}
  # the '-' character _must_ be first or last in the character range
@@ -2234,8 +2237,9 @@ check_sanity() {

  local valid_options=1
  local known kopt options_list
- eval $(awk '/^[[:space:]]*options=/,/\)/' "$BUILDFILE" | \
- sed -e "s/options=/options_list+=/" -e "s/#.*//" -e 's/\\$//')
+ eval $(sed -e "s/[[:space:]]*#.*//" "$BUILDFILE" | \
+ awk '/^[[:space:]]*options=/,/\)/' | \
+ sed -e "s/options=/options_list+=/" -e 's/\\$//')
  for i in ${options_list[@]}; do
  known=0
  # check if option matches a known option or its inverse
-- 
1.9.2


More information about the pacman-dev mailing list