1 # Copyright 2013 Intel Corporation
2 # Author: Artem Bityutskiy
5 # This file contains common functions for setup-ivi-* programs
8 __PROG="$PROG:-setup-ivi-sh-functions"
10 # Just a useful variable for the newline character(s)
16 IFS= printf "%s\n" "$PROG: error: $*" 1>&2
22 if [ -n "$verbose" ]; then
23 IFS= printf "%s\n" "$PROG (verbose): $*" >&2
27 # Finds out the OS name and sets the "$1" variable to the OS name upon exit.
30 local osrelease_path="$(installerfw_mnt_prefix "$__osrelease_file")"
32 # Make sure the OS release information file is present
33 [ -f "$osrelease_path" ] ||
34 fatal "the \"$osrelease_path\" file not found"
37 local __os_name="$(LC_ALL=C sed -n -e 's/^PRETTY_NAME="\(.*\)"$/\1/p' \
38 -- "$osrelease_path")"
39 [ -n "$__os_name" ] || \
40 fatal "cannot find \"PRETTY_NAME\" variable in \"$osrelease_path\""
42 if [ "${1:-%}" != "%" ]; then
44 verbose "get_os_name(): OS name: $1=$__os_name"
48 # Escape a string which is going to be used in a regexp. Shuould work for both
49 # sed and grep regexps.
54 printf "%s" "$regexp" | LC_ALL=C sed -e 's/[]\/()$*.^|[]/\\&/g'
57 # Escape a string which is going to be used at the "replacement" part of the
58 # sed "substitute" command (as in s/regexp/replacement/flags')
59 # Usage: esc_sed_replacement <replacement>
62 local replacement="$1";
64 printf "%s" "$replacement" | LC_ALL=C sed -e "s/[\&/]/\\&/g"
67 # Turn strings "abc" into "[Aa][Bb][Cc]" for case-insensitive matching in
68 # regular expressions.
69 case_insensitive_regexp()
73 printf "%s" "$regexp" | LC_ALL=C sed -e 's/[[:alpha:]]/[\U&\l&]/g'
76 # Check if dash is available and we are not running in dash
79 if command -v "dash" >/dev/null 2>&1; then
80 if [ -n "${BASH_VERSION:-}" ]; then
88 # Get the newest kernel, "$1" is the directory to search at, "$2" is an
89 # optional argument, and if it present, it tells which kernel should not be
90 # returned by this function.
93 local bootdir="$1"; shift
95 # Generate the list of installed kernels
96 local kernels="$(ls -1 "$bootdir" | LC_ALL=C grep -- "^vmlinuz-" | \
99 # Exclude the unwanted kernel, if any
100 if [ -n "${1:-}" ]; then
101 local kernel="$(esc_regexp "$1")"
102 kernels="$(printf "%s" "$kernels" | LC_ALL=C grep -v -- \
106 printf "%s" "$kernels" | head -n1
109 # Remove all empty lines from the end of file, including lines which contain
110 # nothing but blanks (tabs and spaces).
111 remove_trailing_empty_lines()
115 LC_ALL=C sed -i -n -e '
116 :l # sed jump lable named "l"
117 /^[[:blank:]\n]*$/ { # matches multiple blank lines with any
118 # number of spaces or tabs
119 $d # if these are last lines, delete them
120 N; # otherwise append to the current pattern buf
123 /^[[:blank:]]*$/!p # print the pattern buffer for non-blank lines