[git] GPG-ERROR - branch, gniibe/pkg-config-support, updated. libgpg-error-1.32-17-gfb1d0cd

by NIIBE Yutaka cvs at cvs.gnupg.org
Fri Aug 31 09:08:45 CEST 2018


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Error codes used by GnuPG et al.".

The branch, gniibe/pkg-config-support has been updated
       via  fb1d0cd7105e0603482257e05c559c035b210c9c (commit)
      from  e0aecec6d0402bb305aa768656b080c995f781cc (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit fb1d0cd7105e0603482257e05c559c035b210c9c
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Fri Aug 31 16:07:12 2018 +0900

    Support module dependency.

diff --git a/src/gpg-error-config.in b/src/gpg-error-config.in
index d5e2f3b..49451e7 100644
--- a/src/gpg-error-config.in
+++ b/src/gpg-error-config.in
@@ -92,30 +92,48 @@ substitute_vars () {
 # For KEY: VALUE, value is stored in the shell variable ATTR_*.
 #
 read_config_from_stdin () {
+    local filename=$1
     local line
     local varname
     local value
     local key
+    local reading_attrs
 
     while read line; do
-	case "$line" in
-	    *=*)
-		varname="${line%%=*}"
-		value="${line#*=}"
-		VAR_list="$VAR_list VAR_$varname"
-		read VAR_$varname <<EOF1
+	if [ -z "$line" ]; then
+	    reading_attrs=yes
+	    continue
+	elif [ -z "$reading_attrs" ]; then
+	    case "$line" in
+		*=*)
+		    varname="${line%%=*}"
+		    value="${line#*=}"
+		    VAR_list="$VAR_list VAR_$varname"
+		    read VAR_$varname <<EOF1
 $(substitute_vars "$value")
 EOF1
-		;;
-	    *:\ *)
-		key="${line%%:\ *}"
-		value="${line#*:\ }"
-		ATTR_list="$ATTR_list ATTR_$key"
-		read ATTR_$key <<EOF2
+		    continue
+		    ;;
+		*) reading_attrs=yes ;;
+	    esac
+	fi
+	if [ -n "$reading_attrs" ]; then
+	    case "$line" in
+		*:\ *)
+		    key="${line%%:\ *}"
+		    value="${line#*:\ }"
+		    ATTR_list="$ATTR_list ATTR_$key"
+		    read ATTR_$key <<EOF2
 $(substitute_vars "$value")
 EOF2
-		;;
-	esac
+		    ;;
+		*:|*:\ ) ;;
+		*)
+		    echo "Error reading $filename: $line" 1>&2
+		    exit 1
+		    ;;
+	    esac
+	fi
     done
 }
 
@@ -145,7 +163,7 @@ read_config_file () {
 	echo "Can't find $1.pc" 1>&2
 	exit 1
     fi
-    read_config_from_stdin < $config_file
+    read_config_from_stdin $config_file < $config_file
 }
 
 cleanup_vars_attrs () {
@@ -219,32 +237,161 @@ list_only_once_for_libs () {
     echo $result
 }
 
+arg1_is_same () {
+    [ "$1" = "=" -o "$1" = ">=" -o "$1" = "<=" ]
+}
+
+arg1_is_less () {
+    [ "$1" = "!=" -o "$1" = "<" -o "$1" = "<=" ]
+}
+
+arg1_is_great () {
+    [ "$1" = "!=" -o "$1" = ">" -o "$1" = ">=" ]
+}
+
+#
+# Evaluate comparison between versions in RPM way
+#
+eval_compare_version () {
+    local str1="$1"
+    local cmp="$2"
+    local str2="$3"
+    local char1 char2
+    local chunk1 chunk2
+
+    while [ -n "$str1" -a -n "$str2" ]; do
+	# Trim anything that's not alnum or tilde from the front
+	str1="$(expr "$str1" : '[^0-9A-Za-z~]*\(.*\)')"
+	str2="$(expr "$str2" : '[^0-9A-Za-z~]*\(.*\)')"
+
+	# Get the first character
+	char1=${str1%${str1#?}}
+	char2=${str2%${str2#?}}
+
+	if [ "$char1" = ~ -o "$char2" = ~ ]; then
+	    if [ "$char1" != ~ ]; then
+		arg1_is_great $cmp
+		return
+	    fi
+	    if [ "$char2" != ~ ]; then
+		arg1_is_less $cmp
+		return
+	    fi
+	    str1=${str1#~}
+	    str2=${str2#~}
+	    continue
+	fi
+
+	if [ -z "$char1" -o -z "$char2" ]; then
+	    break
+	fi
+
+	case "$char1$char2" in
+	    [0-9][A-Za-z])
+		arg1_is_great $cmp
+		return
+		;;
+	    [A-Za-z][0-9])
+		arg1_is_less $cmp
+		return
+		;;
+	    [0-9][0-9])
+		chunk1="$(expr "$str1" : '\([0-9]*\)')"
+		chunk2="$(expr "$str2" : '\([0-9]*\)')"
+		;;
+	    [A-Za-z][A-Za-z])
+		chunk1="$(expr "$str1" : '\([A-Za-z]*\)')"
+		chunk2="$(expr "$str2" : '\([A-Za-z]*\)')"
+		;;
+	esac
+
+	# Compare chunks numerically if digits, or lexicographically
+	if expr "$chunk1" "!=" "$chunk2" >/dev/null; then
+	    if expr "$chunk1" ">" "$chunk2" >/dev/null; then
+		arg1_is_great $cmp
+		return
+	    else
+		arg1_is_less $cmp
+		return
+	    fi
+	fi
+
+	# Remove the chunk
+	str1="${str1#$chunk1}"
+	str2="${str2#$chunk2}"
+    done
+
+    # Either STR1, STR2 or both is empty here
+    if [ -n "$str1" ]; then
+	case "$str1" in
+	    ~*) arg1_is_less $cmp ;;
+	    *)  arg1_is_great $cmp ;;
+	esac
+    elif [ -n "$str2" ]; then
+	case "$str2" in
+	    ~*) arg1_is_great $cmp ;;
+	    *)  arg1_is_less $cmp ;;
+	esac
+    else
+	arg1_is_same $cmp
+    fi
+}
+
 #
 # Recursively solve package dependencies
 #
-# XXX: version requirement (version comparison) is not yet supported
+# Result is in the pkg_list variable
 #
 all_required_config_files () {
     local list
     local all_list
     local new_list
-    local p
-
-    list="$@"
-    all_list="$list"
+    local p pkg cmp ver
 
+    list=$*
     while [ -n "$list" ]; do
-	new_list=""
 	for p in $list; do
-	    read_config_file $p $PKG_CONFIG_PATH
+	    if [ -z "$pkg" ]; then
+		pkg=$p
+	    elif [ -z "$cmp" ]; then
+		case "$p" in
+		    "="|"!="|"<"|">"|"<="|">=") cmp=$p ;;
+		    *)
+			read_config_file $pkg $PKG_CONFIG_PATH
+			all_list="$all_list $pkg"
+			new_list="$new_list $(get_attr Requires)"
+			cleanup_vars_attrs
+			pkg=$p
+			;;
+		esac
+	    else
+		read_config_file $pkg $PKG_CONFIG_PATH
+		if ! eval_compare_version "$(get_attr Version)" $cmp $p; then
+		    echo "Version mismatch for $pkg $cmp $p: $(get_attr Version)" 1>&2
+		    exit 1
+		fi
+		all_list="$all_list $pkg"
+		new_list="$new_list $(get_attr Requires)"
+		cleanup_vars_attrs
+		pkg=
+		cmp=
+	    fi
+	done
+	if [ -n "$cmp" ]; then
+	    echo "No version after comparison operator ($cmp): $pkg" 1>&2
+	    exit 1
+	elif [ -n "$pkg" ]; then
+	    read_config_file $pkg $PKG_CONFIG_PATH
+	    all_list="$all_list $pkg"
 	    new_list="$new_list $(get_attr Requires)"
 	    cleanup_vars_attrs
-	done
-	all_list="$all_list $new_list"
+	fi
+
 	list="$new_list"
+	new_list=""
     done
 
-    echo $(list_only_once $all_list)
+    pkg_list=$(list_only_once $all_list)
 }
 
 #### end of pkgconf-funcs
@@ -349,14 +496,14 @@ if [ $myname = "gpg-error-config" -a -z "$modules" ]; then
 
     requires="$(get_attr Requires)"
     cleanup_vars_attrs
-    pkg_list=$(all_required_config_files $requires)
+    all_required_config_files $requires
 else
     if [ -z "$modules" ]; then
 	modules=${myname%-config}
     fi
     cflags=""
     libs=""
-    pkg_list=$(all_required_config_files $modules)
+    all_required_config_files $modules
 fi
 
 for p in $pkg_list; do
@@ -374,14 +521,14 @@ done
 
 if [ -z "$output_var" -a -z "$output_attr" ]; then
     if [ $opt_cflags = yes ]; then
-	output="$output $(list_only_once $cflags)"
+	output="$output${output:+ }$(list_only_once $cflags)"
 	# Backward compatibility to old gpg-error-config
 	if [ $mt = yes ]; then
 	    output="$output $mtcflags"
 	fi
     fi
     if [ $opt_libs = yes ]; then
-	output="$output $(list_only_once_for_libs $libs)"
+	output="$output${output:+ }$(list_only_once_for_libs $libs)"
 	# Backward compatibility to old gpg-error-config
 	if [ $mt = yes ]; then
 	    output="$output $mtlibs"

-----------------------------------------------------------------------

Summary of changes:
 src/gpg-error-config.in | 205 +++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 176 insertions(+), 29 deletions(-)


hooks/post-receive
-- 
Error codes used by GnuPG et al.
http://git.gnupg.org




More information about the Gnupg-commits mailing list