aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gpg-error-config-main.sh31
-rw-r--r--src/pkgconf-funcs.sh53
2 files changed, 76 insertions, 8 deletions
diff --git a/src/gpg-error-config-main.sh b/src/gpg-error-config-main.sh
index 37eb193..d7b9c56 100644
--- a/src/gpg-error-config-main.sh
+++ b/src/gpg-error-config-main.sh
@@ -88,21 +88,36 @@ while test $# -gt 0; do
shift
done
-if [ opt_cflags = yes ]; then
- output="$output $(get_attr Cflags)"
+cflags="$(get_attr Cflags)"
+libs="$(get_attr Libs)"
+
+mtcflags="$(get_var mtcflags)"
+mtlibs="$(get_var mtlibs)"
+
+requires="$(get_attr Requires)"
+cleanup_vars_attrs
+pkg_list=$(all_required_config_files $requires)
+
+for p in $pkg_list; do
+ read_config_file $p $PKG_CONFIG_PATH
+ cflags="$cflags $(get_attr Cflags)"
+ libs="$libs $(get_attr Libs)"
+ cleanup_vars_attrs
+done
+
+if [ $opt_cflags = yes ]; then
+ output="$output $cflags"
# Backward compatibility to old gpg-error-config
if [ $mt = yes ]; then
- output="$output $(get_var mtcflags)"
+ output="$output $mtcflags"
fi
fi
-if [ opt_libs = yes ]; then
- output="$output $(get_attr Libs)"
+if [ $opt_libs = yes ]; then
+ output="$output $libs"
# Backward compatibility to old gpg-error-config
if [ $mt = yes ]; then
- output="$output $(get_var mtlibs)"
+ output="$output $mtlibs"
fi
fi
-# cleanup_vars_attrs
-
echo $output
diff --git a/src/pkgconf-funcs.sh b/src/pkgconf-funcs.sh
index 38dccf0..a51a8c3 100644
--- a/src/pkgconf-funcs.sh
+++ b/src/pkgconf-funcs.sh
@@ -135,4 +135,57 @@ cleanup_vars_attrs () {
eval unset $ATTR_list ATTR_list
}
+not_listed_yet () {
+ local m=$1
+ shift
+
+ for arg; do
+ if [ $m = $arg ]; then
+ return 1
+ fi
+ done
+
+ return 0
+}
+
+list_only_once () {
+ local result=""
+ local arg
+
+ for arg; do
+ if not_listed_yet $arg "$result"; then
+ result="$result $arg"
+ fi
+ done
+
+ echo $result
+}
+
+#
+# Recursively solve package dependencies
+#
+# XXX: version requirement (version comparison) is not yet supported
+#
+all_required_config_files () {
+ local list="$1"
+ local all_list
+ local new_list
+ local p
+
+ all_list="$list"
+
+ while [ -n "$list" ]; do
+ new_list=""
+ for p in $list; do
+ read_config_file $p $PKG_CONFIG_PATH
+ new_list="$new_list $(get_attr Requires)"
+ cleanup_vars_attrs
+ done
+ all_list="$all_list $new_list"
+ list="$new_list"
+ done
+
+ echo $(list_only_once $all_list)
+}
+
#### end of pkgconf-funcs