#!/bin/bash # Where the version configs are generated config_dir=config/versions defaults=packages/default.desc declare -A forks debug() { if [ -n "${DEBUG}" ]; then echo ":: $@" >&2 fi } read_files() { local f l for f in ${defaults} "$@"; do [ -r "${f}" ] || continue while read l; do case "${l}" in "#*") continue;; *) echo "[${l%%=*}]=${l#*=}";; esac done < "${f}" done } derived_package() { info[name]=${p} info[forks]=${forks[${p}]} info[master]=${info[master]:-${p}} # Various kconfig-ized prefixes tmp=${p^^} info[pfx]=${tmp//[^0-9A-Z_]/_} tmp=${info[origin]^^} info[originpfx]=${tmp//[^0-9A-Z_/_} tmp=${info[master]^^} info[masterpfx]=${tmp//[^0-9A-Z_/_} } read_package_desc() { read_files "packages/${1}/package.desc" } read_version_desc() { read_files "packages/${1}/package.desc" "packages/${1}/${2}/version.desc" } for_each_package() { local list="${1}" local -A info local p tmp debug "Entering: for_each_package $@" shift for p in ${list}; do eval "info=( `read_package_desc ${p}` )" derived_package ${p} debug "Evaluate for ${p}: $@" eval "$@" done } for_each_version() { local pkg="${1}" local -A info prev local -a versions local v tmp debug "Entering: for_each_version $@" shift versions=( `cd packages/${pkg} && ls */version.desc 2>/dev/null | sed 's,/version.desc$,,' | sort -rV` ) tmp= for v in "${versions[@]}"; do if [ -n "${tmp}" ]; then prev["${tmp}"]=${v} fi tmp="${v}" done if [ -n "${tmp}" ]; then prev["${tmp}"]= fi for v in "${versions[@]}"; do eval "info=( `read_version_desc "${pkg}" "${v}"` )" debug "INFO [[ `read_version_desc "${pkg}" "${v}"` ]]" derived_package ${pkg} info[ver]="${v}" info[kcfg]="${v//[^0-9A-Za-z_]/_}" info[prev]="${prev[${v}]//[^0-9A-Za-z_]/_}" debug "Evaluate for ${pkg}/${v}: $@" eval "$@" done } # Setup: find master-fork relationships between packages find_forks() { [ "${info[master]}" != "${info[name]}" ] && forks[${info[master]}]+=" ${info[name]}" } gen_versions() { local cond=$1 debug "Entering: gen_versions $@" if [ -n "${cond}" ]; then cat <"${config_dir}/${info[name]}.in" cat </dev/null | sed 's,/package.desc$,,' | xargs echo` debug "Generating package version descriptions" debug "Packages: ${all_packages}" for_each_package "${all_packages}" find_forks for_each_package "${all_packages}" gen_one_component debug "Done!"