OpenSDE Framework (without history before r20070)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

153 lines
3.4 KiB

#!/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 <<EOT >> "$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