From 0a654319f9a1d0ebaacb5572139f72c7f236b100 Mon Sep 17 00:00:00 2001 From: Alexey Neyman Date: Sun, 7 May 2017 15:12:08 -0700 Subject: First stab at gen-versions.sh Signed-off-by: Alexey Neyman --- maintainer/gen-versions.sh | 253 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100755 maintainer/gen-versions.sh (limited to 'maintainer') diff --git a/maintainer/gen-versions.sh b/maintainer/gen-versions.sh new file mode 100755 index 00000000..1d5cb767 --- /dev/null +++ b/maintainer/gen-versions.sh @@ -0,0 +1,253 @@ +#!/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!" -- cgit v1.2.3