aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-01-22 09:44:17 +0000
committerKeir Fraser <keir.fraser@citrix.com>2008-01-22 09:44:17 +0000
commitb7d7bde93532745ac21f2a09b7f926533f104861 (patch)
treece340c915fbe6b23694eed63d675db647064290d
parent036e6bd11be95e3e78d2316b0cf0847740b539bc (diff)
downloadxen-b7d7bde93532745ac21f2a09b7f926533f104861.tar.gz
xen-b7d7bde93532745ac21f2a09b7f926533f104861.tar.bz2
xen-b7d7bde93532745ac21f2a09b7f926533f104861.zip
Make tools/check scripts cross-friendly
This patch introduces tools/check/funcs.sh with some cross-friendly abstractions, then modifies the check_* scripts to use them. Signed-off-by: Aron Griffis <aron@hp.com>
-rwxr-xr-xtools/check/check_brctl24
-rwxr-xr-xtools/check/check_crypto_lib20
-rwxr-xr-xtools/check/check_curl39
-rwxr-xr-xtools/check/check_iproute25
-rwxr-xr-xtools/check/check_openssl_devel12
-rwxr-xr-xtools/check/check_python11
-rwxr-xr-xtools/check/check_python_devel11
-rwxr-xr-xtools/check/check_python_xml9
-rwxr-xr-xtools/check/check_udev31
-rwxr-xr-xtools/check/check_x11_devel15
-rwxr-xr-xtools/check/check_xgettext12
-rwxr-xr-xtools/check/check_xml234
-rwxr-xr-xtools/check/check_zlib_devel12
-rwxr-xr-xtools/check/check_zlib_lib18
-rwxr-xr-xtools/check/chk9
-rw-r--r--tools/check/funcs.sh85
16 files changed, 146 insertions, 221 deletions
diff --git a/tools/check/check_brctl b/tools/check/check_brctl
index e926120235..782af5a06f 100755
--- a/tools/check/check_brctl
+++ b/tools/check/check_brctl
@@ -1,27 +1,13 @@
#!/bin/sh
# CHECK-INSTALL
-RC=0
+. funcs.sh
-case ${OS} in
+case $OS in
OpenBSD|NetBSD|FreeBSD)
- # These systems have a bridge builtin
- TOOL="brconfig"
- which ${TOOL} 1>/dev/null 2>&1 || RC=1
- ;;
+ has_or_fail brconfig ;;
Linux)
- TOOL="brctl"
- which ${TOOL} 1>/dev/null 2>&1 || RC=1
- ;;
+ has_or_fail brctl ;;
*)
- TOOL=""
- echo "Unknown OS" && RC=1
- ;;
+ fail "unknown OS" ;;
esac
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for the bridge control utils (${TOOL}) FAILED"
-fi
-
-exit ${RC}
diff --git a/tools/check/check_crypto_lib b/tools/check/check_crypto_lib
index 4717cca7f9..1292d791d1 100755
--- a/tools/check/check_crypto_lib
+++ b/tools/check/check_crypto_lib
@@ -1,23 +1,11 @@
#!/bin/sh
# CHECK-BUILD CHECK-INSTALL
-RC=0
+. funcs.sh
-case $(uname -s) in
+case $OS in
FreeBSD|NetBSD|OpenBSD)
- exit 0
- ;;
-*)
- ;;
+ exit 0 ;;
esac
-PATH=/sbin:$PATH
-set -e
-ldconfig -p 2>&1 | grep -q libcrypto.so || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for crypto library FAILED"
-fi
-
-exit ${RC}
+has_lib libcrypto.so || fail "missing libcrypto.so"
diff --git a/tools/check/check_curl b/tools/check/check_curl
index 7176c896c7..eb6add3ef4 100755
--- a/tools/check/check_curl
+++ b/tools/check/check_curl
@@ -1,38 +1,13 @@
#!/bin/sh
# CHECK-BUILD CHECK-INSTALL
-if [ ! "$LIBXENAPI_BINDINGS" = "y" ]
-then
- echo -n "unused, "
- exit 0
-fi
-
-RC=0
-
-CURL_CONFIG="$(which curl-config)"
-tmpfile=$(mktemp)
-
-if test -z ${CURL_CONFIG}; then
- RC=1
-else
- ${CURL_CONFIG} --libs 2>&1 > /dev/null
- RC=$?
-fi
+. funcs.sh
-if test $RC -ne 0; then
- echo "FAILED"
- echo " *** curl-config is missing. "
- echo " *** Please install curl-devel."
-elif ! ld $($CURL_CONFIG --libs) -o $tmpfile >/dev/null 2>&1; then
- echo "FAILED"
- echo " *** dependency libraries for curl are missing: "
- RC=1
- for i in $(ld $($CURL_CONFIG --libs) -o $tmpfile 2>&1 >/dev/null); do
- case $i in
- -l*) echo lib${i#-l}
- esac
- done
+if [ "$LIBXENAPI_BINDINGS" != "y" ]; then
+ echo -n "unused, "
+ exit 0
fi
-rm -f $tmpfile
-exit $RC
+has_or_fail curl-config
+curl_libs=`curl-config --libs` || fail "curl-config --libs failed"
+test_link $curl_libs || fail "dependency libraries for curl are missing"
diff --git a/tools/check/check_iproute b/tools/check/check_iproute
index 35af9a4c4b..a900165436 100755
--- a/tools/check/check_iproute
+++ b/tools/check/check_iproute
@@ -1,26 +1,15 @@
#!/bin/sh
# CHECK-INSTALL
-RC=0
+. funcs.sh
-case ${OS} in
+PATH=/sbin:$PATH
+
+case $OS in
OpenBSD|NetBSD|FreeBSD)
- TOOL="ifconfig"
- eval ${TOOL} -a 1>/dev/null 2>&1 || RC=1
- ;;
+ has_or_fail ifconfig ;;
Linux)
- TOOL="ip addr"
- eval ${TOOL} list 1>/dev/null 2>&1 || RC=1
- ;;
+ has_or_fail ip ;;
*)
- TOOL=""
- echo "Unknown OS" && RC=1
- ;;
+ fail "unknown OS" ;;
esac
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for iproute (${TOOL}) FAILED"
-fi
-
-exit ${RC}
diff --git a/tools/check/check_openssl_devel b/tools/check/check_openssl_devel
index c05a29dd8f..1b4d1581cd 100755
--- a/tools/check/check_openssl_devel
+++ b/tools/check/check_openssl_devel
@@ -1,14 +1,6 @@
#!/bin/sh
# CHECK-BUILD
-RC=0
+. funcs.sh
-set -e
-test -r /usr/include/openssl/md5.h || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for openssl headers FAILED"
-fi
-
-exit ${RC}
+has_header openssl/md5.h || fail "missing openssl headers"
diff --git a/tools/check/check_python b/tools/check/check_python
index 6d665ea4b2..feeb6fc5b0 100755
--- a/tools/check/check_python
+++ b/tools/check/check_python
@@ -1,16 +1,9 @@
#!/bin/sh
# CHECK-BUILD CHECK-INSTALL
-RC=0
+. funcs.sh
python -c '
import sys
sys.exit(sys.version_info[0] < 2 or sys.version_info[1] < 2)
-' || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for Python version >= 2.2 FAILED"
-fi
-
-exit ${RC}
+' || fail "need python version >= 2.2"
diff --git a/tools/check/check_python_devel b/tools/check/check_python_devel
index d2f05368d2..7630bb0241 100755
--- a/tools/check/check_python_devel
+++ b/tools/check/check_python_devel
@@ -1,7 +1,7 @@
#!/bin/sh
# CHECK-BUILD
-RC=0
+. funcs.sh
python -c '
import os.path, sys
@@ -9,11 +9,4 @@ for p in sys.path:
if os.path.exists(p + "/config/Makefile"):
sys.exit(0)
sys.exit(1)
-' || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for python development environment FAILED"
-fi
-
-exit ${RC}
+' || fail "can't find python devel files"
diff --git a/tools/check/check_python_xml b/tools/check/check_python_xml
index faf56bb083..879c8a82d4 100755
--- a/tools/check/check_python_xml
+++ b/tools/check/check_python_xml
@@ -1,8 +1,7 @@
#!/bin/sh
# CHECK-INSTALL
-python -c 'import xml.dom.minidom' 2>/dev/null || {
- echo
- echo " *** Check for python-xml package FAILED"
- exit 1
-}
+. funcs.sh
+
+python -c 'import xml.dom.minidom' 2>/dev/null || \
+fail "can't import xml.dom.minidom"
diff --git a/tools/check/check_udev b/tools/check/check_udev
index a4295cf4fa..169632bc35 100755
--- a/tools/check/check_udev
+++ b/tools/check/check_udev
@@ -1,34 +1,19 @@
#!/bin/sh
# CHECK-INSTALL
-RC=0
+. funcs.sh
-case ${OS} in
+case $OS in
OpenBSD|NetBSD|FreeBSD)
- TOOL="vnconfig"
- which ${TOOL} 1>/dev/null 2>&1 || RC=1
+ has_or_fail vnconfig
;;
Linux)
- TOOL="udevinfo"
- UDEV_VERSION="0"
- test -x "$(which ${TOOL} 2>/dev/null)" && \
- UDEV_VERSION=$(${TOOL} -V | sed -e 's/^[^0-9]* \([0-9]\{1,\}\)[^0-9]\{0,\}/\1/')
- if test "${UDEV_VERSION}" -ge 059; then
- RC=0
- else
- TOOL="hotplug"
- which ${TOOL} 1>/dev/null 2>&1 || RC=1
- fi
+ has_or_fail udevinfo
+ [ "`udevinfo -V | awk '{print $NF}'`" -ge 59 ] 2>/dev/null || \
+ has hotplug || \
+ fail "udev is too old, upgrade to version 59 or later"
;;
*)
- TOOL=""
- echo "Unknown OS" && RC=1
+ fail "unknown OS"
;;
esac
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for ${TOOL} FAILED"
-fi
-
-exit ${RC}
diff --git a/tools/check/check_x11_devel b/tools/check/check_x11_devel
index 722df86344..6956ce034b 100755
--- a/tools/check/check_x11_devel
+++ b/tools/check/check_x11_devel
@@ -1,15 +1,8 @@
#!/bin/sh
# CHECK-BUILD
-RC=0
+. funcs.sh
-set -e
-test -r /usr/include/X11/keysymdef.h || \
-test -r /usr/X11R6/include/X11/keysymdef.h || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for x11 headers FAILED"
-fi
-
-exit ${RC}
+has_header X11/keysymdef.h || \
+has_header /usr/X11R6/include/X11/keysymdef.h || \
+fail "can't find X11 headers"
diff --git a/tools/check/check_xgettext b/tools/check/check_xgettext
index 0781ec50d9..ac66e6864c 100755
--- a/tools/check/check_xgettext
+++ b/tools/check/check_xgettext
@@ -1,14 +1,6 @@
#!/bin/sh
# CHECK-BUILD
-RC=0
+. funcs.sh
-TOOL="xgettext"
-which ${TOOL} 1>/dev/null 2>&1 || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for the gettext utility (${TOOL}) FAILED"
-fi
-
-exit ${RC}
+has_or_fail xgettext
diff --git a/tools/check/check_xml2 b/tools/check/check_xml2
index e8def042ad..8b1adbfdc0 100755
--- a/tools/check/check_xml2
+++ b/tools/check/check_xml2
@@ -1,38 +1,14 @@
#!/bin/sh
# CHECK-BUILD CHECK-INSTALL
+. funcs.sh
+
if [ ! "$LIBXENAPI_BINDINGS" = "y" -a ! "$ACM_SECURITY" = "y" ]
then
echo -n "unused, "
exit 0
fi
-RC=0
-
-XML2_CONFIG="$(which xml2-config)"
-tmpfile=$(mktemp)
-
-if test -z ${XML2_CONFIG}; then
- RC=1
-else
- ${XML2_CONFIG} --libs 2>&1 > /dev/null
- RC=$?
-fi
-
-if test $RC -ne 0; then
- echo "FAILED"
- echo " *** xml2-config is missing. "
- echo " *** Please install libxml2-devel."
-elif ! ld $($XML2_CONFIG --libs) -o $tmpfile >/dev/null 2>&1; then
- echo "FAILED"
- echo " *** dependency libraries for xml2 are missing: "
- RC=1
- for i in $(ld $($XML2_CONFIG --libs) -o $tmpfile 2>&1 >/dev/null); do
- case $i in
- -l*) echo lib${i#-l}
- esac
- done
-fi
-rm -f $tmpfile
-
-exit $RC
+has_or_fail xml2-config
+xml2_libs=`xml2-config --libs` || fail "xml2-config --libs failed"
+test_link $xml2_libs || fail "dependency libraries for xml2 are missing"
diff --git a/tools/check/check_zlib_devel b/tools/check/check_zlib_devel
index 108e06a616..33236de872 100755
--- a/tools/check/check_zlib_devel
+++ b/tools/check/check_zlib_devel
@@ -1,14 +1,6 @@
#!/bin/sh
# CHECK-BUILD
-RC=0
+. funcs.sh
-set -e
-test -r /usr/include/zlib.h || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for zlib headers FAILED"
-fi
-
-exit ${RC}
+has_header zlib.h || fail "can't find zlib headers"
diff --git a/tools/check/check_zlib_lib b/tools/check/check_zlib_lib
index a4231d606a..804b78374e 100755
--- a/tools/check/check_zlib_lib
+++ b/tools/check/check_zlib_lib
@@ -1,24 +1,12 @@
#!/bin/sh
# CHECK-BUILD CHECK-INSTALL
-RC=0
+. funcs.sh
-case $(uname -s) in
+case $OS in
FreeBSD|NetBSD|OpenBSD)
exit 0
;;
-*)
- ;;
esac
-PATH=/sbin:$PATH
-
-set -e
-ldconfig -p 2>&1 | grep -q libz.so || RC=1
-
-if test ${RC} -ne 0; then
- echo
- echo " *** Check for zlib library FAILED"
-fi
-
-exit ${RC}
+has_lib libz.so || fail "can't find zlib"
diff --git a/tools/check/chk b/tools/check/chk
index d8eb2f17e3..e776cff3af 100755
--- a/tools/check/chk
+++ b/tools/check/chk
@@ -7,17 +7,16 @@ func_usage ()
echo
echo "Check suitability for Xen build or install."
echo "Exit with 0 if OK, 1 if not."
- echo "Prints only failed tests."
echo
echo "Calling with 'clean' removes generated files."
exit 1
}
-PATH=${PATH}:/sbin:/usr/sbin
+PATH=$PATH:/sbin:/usr/sbin
OS=`uname -s`
export PATH OS
-if test "${OS}" = "SunOS"; then
+if [ "$OS" = "SunOS" ]; then
exit 0
fi
@@ -38,7 +37,7 @@ esac
failed=0
-echo "Xen ${check} " $(date)
+echo "Xen ${check} " `date`
for f in check_* ; do
case $f in
*~)
@@ -50,7 +49,7 @@ for f in check_* ; do
if ! [ -x $f ] ; then
continue
fi
- if ! grep -q ${check} $f ; then
+ if ! grep -Fq "$check" $f ; then
continue
fi
echo -n "Checking $f: "
diff --git a/tools/check/funcs.sh b/tools/check/funcs.sh
new file mode 100644
index 0000000000..d3fb60abb3
--- /dev/null
+++ b/tools/check/funcs.sh
@@ -0,0 +1,85 @@
+# has is the same as which, except it handles cross environments
+has() {
+ if [ -z "$CROSS_COMPILE" ]; then
+ command which "$@"
+ return $?
+ fi
+
+ check_sys_root || return 1
+
+ # subshell to prevent pollution of caller's IFS
+ (
+ IFS=:
+ for p in $PATH; do
+ if [ -x "$CROSS_SYS_ROOT/$p/$1" ]; then
+ echo "$CROSS_SYS_ROOT/$p/$1"
+ return 0
+ fi
+ done
+ return 1
+ )
+}
+
+has_or_fail() {
+ has "$1" >/dev/null || fail "can't find $1"
+}
+
+has_header() {
+ case $1 in
+ /*) ;;
+ *) set -- "/usr/include/$1" ;;
+ esac
+
+ check_sys_root || return 1
+
+ test -r "$CROSS_SYS_ROOT$1"
+ return $?
+}
+
+has_lib() {
+ check_sys_root || return 1
+
+ # subshell to prevent pollution of caller's environment
+ (
+ PATH=/sbin:$PATH # for ldconfig
+
+ # This relatively common in a sys-root; libs are installed but
+ # ldconfig hasn't run there, so ldconfig -p won't work.
+ if [ "$OS" = Linux -a ! -f "$CROSS_SYS_ROOT/etc/ld.so.cache" ]; then
+ echo "Please run ldconfig -r \"$CROSS_SYS_ROOT\" to generate ld.so.cache"
+ # fall through; ldconfig test below should fail
+ fi
+ ldconfig -p ${CROSS_SYS_ROOT+-r "$CROSS_SYS_ROOT"} | grep -Fq "$1"
+ return $?
+ )
+}
+
+test_link() {
+ # subshell to trap removal of tmpfile
+ (
+ unset tmpfile
+ trap 'rm -f "$tmpfile"; exit' 0 1 2 15
+ tmpfile=`mktemp` || return 1
+ ld "$@" -o "$tmpfile" >/dev/null 2>&1
+ return $?
+ )
+}
+
+# this function is used commonly above
+check_sys_root() {
+ [ -z "$CROSS_COMPILE" ] && return 0
+ if [ -z "$CROSS_SYS_ROOT" ]; then
+ echo "please set CROSS_SYS_ROOT in the environment"
+ return 1
+ fi
+ if [ ! -d "$CROSS_SYS_ROOT" ]; then
+ echo "no sys-root found at $CROSS_SYS_ROOT"
+ return 1
+ fi
+}
+
+fail() {
+ echo
+ echo " *** `basename "$0"` FAILED${*+: $*}"
+ exit 1
+}