#!/bin/sh # ------------------------------------------------------------------- # isFreetzType # ------------------------------------------------------------------- # Author: Alexander Kriegisch (http://scrum-master.de) # ------------------------------------------------------------------- # Simplify logical OR comparisons with Freetz box types or types of # lab firmwares etc. # # Example: The following construct... # # if [ "$FREETZ_TYPE_FON_5010" == "y" ] || \ # [ "$FREETZ_TYPE_FON_5050" == "y" ] || \ # [ "$FREETZ_TYPE_FON_WLAN_7050" == "y" ] || \ # [ "$FREETZ_TYPE_FON_WLAN_7140" == "y" ] || \ # [ "$FREETZ_TYPE_FON_WLAN_7141" == "y" ] || \ # [ "$FREETZ_TYPE_FON_7150" == "y" ] || \ # [ "$FREETZ_TYPE_FON_WLAN_7170" == "y" ] # then # # ... can now be abbreviated by: # # if isFreetzType 5010 5050 7050 7140 7141 7150 7170; then # # This is also possible: # # if isFreetzType 7170 7240 7270 && isFreetzType LABOR_AIO; then # ------------------------------------------------------------------- isFreetzType() { while [ $# -gt 0 ]; do for group in '' _FON _FON_WLAN _WLAN _SINUS _SPEEDPORT; do varname=`echo "\\$FREETZ_TYPE$group"_$1` [ "`eval echo $varname`" == "y" ] && return 0 done shift done return 1 } # little helper function used by many patches (maybe this should be sourced out) rm_files() { for file in "$@"; do echo2 "rm $file" rm -rf $file done } #another little helper modsed() { #modsed [grep-expression-to-verify-sed] #should be used instead of sed -i -e in patch scripts [ $# -le 1 ] && error 1 "modsed failed, not enough parameters." if [ -f "$2" ]; then echo2 "patching $2" sed -i -e "$1" "$2" if [ $# -ge 3 ]; then grep -q "$3" "$2" || error 1 "modsed failed editing $2" fi else if [ $# -lt 3 ]; then warn "$2 not found, skipping." else error 1 "$2 not found, aborting." fi fi } #parameter -n: no new-line #parameter -l: no spaces at beginning echoX() { local tabl="$1" local newl="" shift while [ "$1" == "-n" -o "$1" == "-l" ]; do [ "$1" == "-n" ] && newl="-n" [ "$1" == "-l" ] && tabl="" shift done echo -e $newl "$tabl$*" } echo0() { [ "$FREETZ_VERBOSITY_LEVEL" -ge 0 ] && echoX "${L0}" "$@" } echo1() { [ "$FREETZ_VERBOSITY_LEVEL" -ge 1 ] && echoX "${L1}" "$@" } echo2() { [ "$FREETZ_VERBOSITY_LEVEL" -ge 2 ] && echoX "${L2}" "$@" } # error exit-code error-message error() { if [ "$1" -gt 0 ]; then echo -e "${__Y}ERROR: $2${__N}" 1>&2 exit $1 fi } # warn warn-message warn() { echo -e "WARNING: $1" 1>&2 } modunsqfs() { local STATUS if [ "$FREETZ_VERBOSITY_LEVEL" -ge 2 ]; then "$UNSQUASHFS" "$UNSQUASHFS_OPTIONS" -dest "$1" "$2" 2>&1 | grep -v "^$" | sed -e "s/^/${L2}/g" STATUS=${PIPESTATUS[0]} else "$UNSQUASHFS" "$UNSQUASHFS_OPTIONS" -dest "$1" "$2" > /dev/null STATUS=$? fi if [ $STATUS -gt 0 ]; then error 1 "modunsqfs: Error in $2" fi } modlangsubst() { # modlangsubst # Substitutes all $(lang de:"Deutscher Text" en:"English text" ...) occurrences # in with of the corresponding :"" section. s='[\t\r\n ]' val='\(\([^"\\]*\(\\.\)*\)*\)' entry="\w\+:\"${val}\"" LC_ALL="" LC_CTYPE=C sed -i -e " :a s/\$(lang\(${s}\+${entry}\)*${s}\+${1}:\"${val}\"\(${s}\+${entry}\)*${s}*)/\$(lang:\"\5\")/g s/\$(lang\(${s}\+${entry}\)*${s}*)/*** error: language[${1}] not available ***/g :n s/\$(lang:\"\(\([^\"\\]\+\)\|[\\]\(.\)\)${val}\")/\2\3\$(lang:\"\4\")/g tn s/\$(lang:\"\")//g /\$(lang\(${s}\|\$\)/ {N; ba} " "$2" } modlangconf() { # modlangconf # Get of a { } section in s='[\t\r\n ]' sed -n -e ":n;N;\$!bn;s/^.*${1}${s}\+{${s}*\([^}]*\)${s}*}.*$/\1/p" "$2" } modlang() { # modlang case $1 in /*) conffile=$1 ;; *) conffile="$PWD/$1" ;; esac avail="$(modlangconf "languages" "$conffile")" default="$FREETZ_LANG_STRING $(modlangconf "default" "$conffile") en de $avail" lang="" for i in $default; do for j in $avail; do if [ "$i" == "$j" ]; then lang="$j" break 2 fi done done if [ -z "$lang" ]; then error 1 "no language available" fi [ "$lang" == "$FREETZ_LANG_STRING" ] || \ echo "NOTICE: language $FREETZ_LANG_STRING not available; $lang chosen." 1>&2 ( if ! cd "${2}"; then warn "modlang: $2 does not exist" return fi local dot_exclude="$(echo $FREETZ_BASE_DIR/$1 | sed 's/language$/exclude/')" for i in $(modlangconf "files" "$conffile"); do if [ -e "${i}" ]; then modlangsubst "$lang" "${i}" else do_excluded=n while read l; do echo $i | grep -q $l && do_excluded=y done 2>/dev/null < "$dot_exclude" [ "$do_excluded" != "y" ] && warn "modlang: ${2}/${i} not found" fi done ) } # list of static packages, sorted by start level static_packages() { if [ -r "$STATIC_PACKAGES_FILE" ]; then sort "$STATIC_PACKAGES_FILE" \ | sed -e 's/^[\ \t]*//' -e 's/[\ \t]*$//' -e 's/^S[0-9]*//' \ | grep -v '^#' | grep -v '^$' fi } static_addons() { if [ -r "$STATIC_ADDON_FILE" ]; then cat "$STATIC_ADDON_FILE" \ | sed -e 's/^[\ \t]*//' -e 's/[\ \t]*$//' \ | grep -v '^#' | grep -v '^$' fi } pkg_name() { local name=$1 echo "$name" | sed -r -e 's/-(alpha|beta|rc|(un)?stable|.)[0-9]*$//i' -e 's/-[0-9][^-]*$//' -e 's/-cgi$//' }