Support simple conditionals in package lists

This patch adds support for simple conditionals in package lists. For
example, to limit a package to i386 only:

 foo
 #if ARCHITECTURE i386
 package-only-in-i386
 #endif
 bar

Any variable that beings in LH_ can be expanded:

 #if MODE ubuntu
 package-only-in-ubuntu
 #endif

Nesting of conditionals is not supported. If the variable to be expanded
does not exist, the conditional is false.

Signed-off-by: Chris Lamb <chris@chris-lamb.co.uk>
This commit is contained in:
Chris Lamb 2008-04-26 23:43:01 +01:00
parent bb68e30166
commit d77ee36137
1 changed files with 50 additions and 10 deletions

View File

@ -20,6 +20,8 @@ Expand_packagelist ()
_LH_LIST_NAME="$(echo ${_LH_EXPAND_QUEUE} | cut -d" " -f1)" _LH_LIST_NAME="$(echo ${_LH_EXPAND_QUEUE} | cut -d" " -f1)"
_LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} | cut -s -d" " -f2-)" _LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} | cut -s -d" " -f2-)"
_LH_LIST_LOCATION="" _LH_LIST_LOCATION=""
_LH_NESTED=0
_LH_ENABLED=1
for _LH_SEARCH_PATH in ${@} "${LH_BASE:-/usr/share/live-helper}/lists" for _LH_SEARCH_PATH in ${@} "${LH_BASE:-/usr/share/live-helper}/lists"
do do
@ -35,17 +37,55 @@ Expand_packagelist ()
continue continue
fi fi
# Output packages while read _LH_LINE
grep -v "^#" ${_LH_LIST_LOCATION} | grep . do
case "${_LH_LINE}" in
\#if\ *)
if [ ${_LH_NESTED} -eq 1 ]
then
echo "E: Nesting conditionals is not supported" >&2
exit 1
fi
# Find includes _LH_NESTED=1
_LH_INCLUDES="$(sed -n \ _LH_VAR="$(echo "${_LH_LINE}" | cut -d' ' -f2)"
-e 's|^#<include> \([^ ]*\)|\1|gp' \ _LH_VAL="$(echo "${_LH_LINE}" | cut -d' ' -f3)"
-e 's|^#include <\([^ ]*\)>|\1|gp' \
"${_LH_LIST_LOCATION}")"
# Add to queue if [ -n "${_LH_VAR}" ] && [ "$(eval "echo \$LH_${_LH_VAR}")" != "${_LH_VAL}" ]
_LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} ${_LH_INCLUDES} | \ then
sed -e 's|[ ]*$||' -e 's|^[ ]*||')" _LH_ENABLED=0
fi
;;
\#endif*)
_LH_NESTED=0
_LH_ENABLED=1
;;
\#*)
if [ ${_LH_ENABLED} -ne 1 ]
then
continue
fi
# Find includes
_LH_INCLUDES="$(echo "${_LH_LINE}" | sed -n \
-e 's|^#<include> \([^ ]*\)|\1|gp' \
-e 's|^#include <\([^ ]*\)>|\1|gp')"
# Add to queue
_LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} ${_LH_INCLUDES} |
sed -e 's|[ ]*$||' -e 's|^[ ]*||')"
;;
*)
if [ ${_LH_ENABLED} -eq 1 ]
then
echo "${_LH_LINE}"
fi
;;
esac
done < "${_LH_LIST_LOCATION}"
done done
} }