diff options
Diffstat (limited to 'functions/packagelists.sh')
-rwxr-xr-x | functions/packagelists.sh | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/functions/packagelists.sh b/functions/packagelists.sh new file mode 100755 index 000000000..94f016fbf --- /dev/null +++ b/functions/packagelists.sh @@ -0,0 +1,98 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2010 Daniel Baumann <daniel@debian.org> +## +## live-build comes with ABSOLUTELY NO WARRANTY; for details see COPYING. +## This is free software, and you are welcome to redistribute it +## under certain conditions; see COPYING for details. + + +Expand_packagelist () +{ + _LB_EXPAND_QUEUE="$(basename "${1}")" + + shift + + while [ -n "${_LB_EXPAND_QUEUE}" ] + do + _LB_LIST_NAME="$(echo ${_LB_EXPAND_QUEUE} | cut -d" " -f1)" + _LB_EXPAND_QUEUE="$(echo ${_LB_EXPAND_QUEUE} | cut -s -d" " -f2-)" + _LB_LIST_LOCATION="" + _LB_NESTED=0 + _LB_ENABLED=1 + + for _LB_SEARCH_PATH in ${@} config/lists "${LB_BASE:-/usr/share/live/build}/lists" + do + if [ -e "${_LB_SEARCH_PATH}/${_LB_LIST_NAME}" ] + then + _LB_LIST_LOCATION="${_LB_SEARCH_PATH}/${_LB_LIST_NAME}" + break + fi + done + + if [ -z "${_LB_LIST_LOCATION}" ] + then + echo "W: Unknown package list '${_LB_LIST_NAME}'" >&2 + continue + fi + + while read _LB_LINE + do + case "${_LB_LINE}" in + \#if\ *) + if [ ${_LB_NESTED} -eq 1 ] + then + echo "E: Nesting conditionals is not supported" >&2 + exit 1 + fi + _LB_NESTED=1 + + _LB_NEEDLE="$(echo "${_LB_LINE}" | cut -d' ' -f3-)" + _LB_HAYSTACK="$(eval "echo \$LB_$(echo "${_LB_LINE}" | cut -d' ' -f2)")" + + _LB_ENABLED=0 + for _LB_NEEDLE_PART in ${_LB_NEEDLE} + do + for _LB_HAYSTACK_PART in ${_LB_HAYSTACK} + do + if [ "${_LB_NEEDLE_PART}" = "${_LB_HAYSTACK_PART}" ] + then + _LB_ENABLED=1 + fi + done + done + ;; + + \#endif*) + _LB_NESTED=0 + _LB_ENABLED=1 + ;; + + \#*) + if [ ${_LB_ENABLED} -ne 1 ] + then + continue + fi + + # Find includes + _LB_INCLUDES="$(echo "${_LB_LINE}" | sed -n \ + -e 's|^#<include> \([^ ]*\)|\1|gp' \ + -e 's|^#include <\([^ ]*\)>|\1|gp')" + + # Add to queue + _LB_EXPAND_QUEUE="$(echo ${_LB_EXPAND_QUEUE} ${_LB_INCLUDES} | + sed -e 's|[ ]*$||' -e 's|^[ ]*||')" + ;; + + *) + if [ ${_LB_ENABLED} -eq 1 ] + then + echo "${_LB_LINE}" + fi + ;; + + esac + done < "${_LB_LIST_LOCATION}" + done +} |