From 9ae7a0054427afd8df2dfeff7948b652d89d4430 Mon Sep 17 00:00:00 2001 From: Chris Lamb Date: Sat, 26 Apr 2008 23:43:01 +0100 Subject: 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. --- functions/packageslists.sh | 60 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/functions/packageslists.sh b/functions/packageslists.sh index 443caad..5f05a4b 100755 --- a/functions/packageslists.sh +++ b/functions/packageslists.sh @@ -20,6 +20,8 @@ Expand_packagelist () _LH_LIST_NAME="$(echo ${_LH_EXPAND_QUEUE} | cut -d" " -f1)" _LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} | cut -s -d" " -f2-)" _LH_LIST_LOCATION="" + _LH_NESTED=0 + _LH_ENABLED=1 for _LH_SEARCH_PATH in ${@} "${LH_BASE:-/usr/share/live-helper}/lists" do @@ -35,17 +37,55 @@ Expand_packagelist () continue fi - # Output packages - grep -v "^#" ${_LH_LIST_LOCATION} | grep . + while read _LH_LINE + do + case "${_LH_LINE}" in + \#if\ *) + if [ ${_LH_NESTED} -eq 1 ] + then + echo "E: Nesting conditionals is not supported" >&2 + exit 1 + fi + + _LH_NESTED=1 + _LH_VAR="$(echo "${_LH_LINE}" | cut -d' ' -f2)" + _LH_VAL="$(echo "${_LH_LINE}" | cut -d' ' -f3)" + + if [ -n "${_LH_VAR}" ] && [ "$(eval "echo \$LH_${_LH_VAR}")" != "${_LH_VAL}" ] + then + _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|^# \([^ ]*\)|\1|gp' \ + -e 's|^#include <\([^ ]*\)>|\1|gp')" + + # Add to queue + _LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} ${_LH_INCLUDES} | + sed -e 's|[ ]*$||' -e 's|^[ ]*||')" + ;; - # Find includes - _LH_INCLUDES="$(sed -n \ - -e 's|^# \([^ ]*\)|\1|gp' \ - -e 's|^#include <\([^ ]*\)>|\1|gp' \ - "${_LH_LIST_LOCATION}")" + *) + if [ ${_LH_ENABLED} -eq 1 ] + then + echo "${_LH_LINE}" + fi + ;; - # Add to queue - _LH_EXPAND_QUEUE="$(echo ${_LH_EXPAND_QUEUE} ${_LH_INCLUDES} | \ - sed -e 's|[ ]*$||' -e 's|^[ ]*||')" + esac + done < "${_LH_LIST_LOCATION}" done } -- cgit v1.0