3 # Copyright (c) 2013 Dag-Erling Smørgrav
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
15 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 USERLAND_VERSION="@@REVISION@@-@@BRANCH@@"
35 : ${LOADER_DIR:=$ROOT/boot}
36 : ${LOADER_CONF_FILES:=$LOADER_DIR/defaults/loader.conf $LOADER_DIR/loader.conf $LOADER_DIR/loader.conf.local}
37 LOADER_RE1='^\([A-Z_a-z][0-9A-Z_a-z]*=[-./0-9A-Z_a-z]\{1,\}\).*$'
38 LOADER_RE2='^\([A-Z_a-z][0-9A-Z_a-z]*="[-./0-9A-Z_a-z]\{1,\}"\).*$'
39 KERNEL_RE='^@(#)@@TYPE@@ \([-.0-9A-Za-z]\{1,\}\) .*$'
41 progname=$(basename $0)
44 # Print an error message and exit.
47 echo "$progname: $*" >&2
52 # Try to get the name of the installed kernel from loader.conf and
53 # return the full path. If loader.conf does not exist or we could not
54 # read it, return the path to the default kernel.
57 eval $(sed -n "s/$LOADER_RE1/\\1;/p; s/$LOADER_RE2/\\1;/p" \
58 $LOADER_CONF_FILES 2>/dev/null)
59 echo "$LOADER_DIR/${kernel:-kernel}/${bootfile:-kernel}"
63 # Extract the kernel version from the installed kernel.
66 kernfile=$(kernel_file)
67 if [ ! -f "$kernfile" -o ! -r "$kernfile" ] ; then
68 error "unable to locate kernel"
70 strings "$kernfile" | sed -n "s/$KERNEL_RE/\\1/p"
74 # Print the hardcoded userland version.
77 echo $USERLAND_VERSION
81 # Print a usage string and exit.
84 echo "usage: $progname [-ku]" >&2
92 # parse command-line arguments
93 while getopts "ku" option ; do
106 if [ $OPTIND -le $# ] ; then
111 if [ $((opt_k + opt_u)) -eq 0 ] ; then
115 # print kernel version
120 # print userland version