#!/bin/bash # --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: lib/sde-config/pkgseldir_compile.sh # Copyright (C) 2008 - 2010 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 2 of the License. A copy of the # GNU General Public License can be found in the file COPYING. # --- SDE-COPYRIGHT-NOTE-END --- PKGSEL_LIST_VAR="$1" VAR_PREFIX="$2" OUT_PREFIX="$3" shift 3 OUT_CONFIG="${OUT_PREFIX}config.in" OUT_PKGSEL="${OUT_PREFIX}pkgsel.in" OUT_PKGSELAWK="${OUT_PREFIX}pkgsel.awk" trap ' ' INT module_get_var() { echo "${VAR_PREFIX}${1}" | tr ' a-z-' '_A-Z_' } module_get_description() { sed -n -e 's/^#[ \t]*Description:[ \t]*\(.*\)/\1/p' "$1" } module_get_default() { sed -n -e 's/^# Default: \(.*\)/\1/p' "$1" } module_render() { local pkgseldir="$1" module_dir="$2" module_filename="$3" module_name="$4" module_type="$5" local file= var= desc= default= # recompose the full path to the module file file="$pkgseldir${module_dir:+/$module_dir}/$module_filename" var="$( module_get_var "$module_name" )" # print headers cat <<-EOT | tee -a "$OUT_CONFIG.$$" >> "$OUT_PKGSEL.$$" # BEGIN:$var ($module_filename) # EOT case "$module_type" in auto) cat <<-EOT >> "$OUT_PKGSEL.$$" $PKGSEL_LIST_VAR="\$$PKGSEL_LIST_VAR $file" EOT ;; boolean) desc="$( module_get_description "$file" )" default="$( module_get_default "$file" )" cat <<-EOT >> "$OUT_CONFIG.$$" bool '${desc:-${module_name//_/ }}' $var ${default:-0} EOT cat <<-EOT >> "$OUT_PKGSEL.$$" if [ "\$$var" = 1 ]; then $PKGSEL_LIST_VAR="\$$PKGSEL_LIST_VAR $file" fi EOT ;; esac # print footers cat <<-EOT | tee -a "$OUT_CONFIG.$$" >> "$OUT_PKGSEL.$$" # END:$var EOT } cat <<-EOT | tee "$OUT_CONFIG.$$" > "$OUT_PKGSEL.$$" # Generated by $0 # ($( date )) # using: $@ EOT for pkgseldir; do if [ ! -d "$pkgseldir" ]; then echo "$pkgseldir: Invalid pkgseldir." >&2 continue else pkgseldir=$( cd "$pkgseldir"; pwd -P ) fi bin/find "$pkgseldir" -name '*.all' -o -name '*.ask' | sort | while read module; do # simple parsing # module_dir="${module%/*}" module_filename="${module##*/}" module_file_ext="${module##*.}" case "$module_file_ext" in all) module_type=auto ;; ask) module_type=boolean ;; *) # not a module continue ;; esac # make $module_dir $pkgseldir relative if [ "$module_dir" = "$pkgseldir" ]; then module_dir= else module_dir="${module_dir#$pkgseldir/}" fi module_name="$( echo "${module_filename%.*}" | sed -e 's/^[0-9][0-9]-//' )" module_render "$pkgseldir" "$module_dir" "$module_filename" "$module_name" "$module_type" done done cat <> "$OUT_PKGSEL.$$" # Update .awk file only if needed # if [ ! -s "$OUT_PKGSELAWK" -o "\$( cat "$OUT_PKGSELAWK.cache" 2> /dev/null)" != "\$$PKGSEL_LIST_VAR" ]; then echo "\$$PKGSEL_LIST_VAR" > $OUT_PKGSELAWK.cache cat <<-EOF > "$OUT_PKGSELAWK.\$\$" # Generated by \$0 # \$( date ) # using: \$$PKGSEL_LIST_VAR EOF lib/sde-config/pkgsel2awk.sh \$$PKGSEL_LIST_VAR >> "$OUT_PKGSELAWK.\$\$" mv "$OUT_PKGSELAWK.\$\$" "$OUT_PKGSELAWK" fi EOT for x in $OUT_CONFIG $OUT_PKGSEL; do mv "$x.$$" "$x" done