diff options
author | Chris Lamb <chris@chris-lamb.co.uk> | 2008-04-26 23:43:01 +0100 |
---|---|---|
committer | Daniel Baumann <daniel@debian.org> | 2011-03-09 19:03:33 +0100 |
commit | 9ae7a0054427afd8df2dfeff7948b652d89d4430 (patch) | |
tree | a6527b20eb18f75fd337135cf3efdb46117904dc /functions | |
parent | c7424482096a6f1f4239f4b16b9f8695e72d030d (diff) | |
download | live-build-9ae7a0054427afd8df2dfeff7948b652d89d4430.zip live-build-9ae7a0054427afd8df2dfeff7948b652d89d4430.tar.gz |
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.
Diffstat (limited to 'functions')
-rwxr-xr-x | functions/packageslists.sh | 60 |
1 files 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|^#<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|^[ ]*||')" + ;; - # Find includes - _LH_INCLUDES="$(sed -n \ - -e 's|^#<include> \([^ ]*\)|\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 } |