diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-01-22 09:44:17 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-01-22 09:44:17 +0000 |
commit | b7d7bde93532745ac21f2a09b7f926533f104861 (patch) | |
tree | ce340c915fbe6b23694eed63d675db647064290d | |
parent | 036e6bd11be95e3e78d2316b0cf0847740b539bc (diff) | |
download | xen-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-x | tools/check/check_brctl | 24 | ||||
-rwxr-xr-x | tools/check/check_crypto_lib | 20 | ||||
-rwxr-xr-x | tools/check/check_curl | 39 | ||||
-rwxr-xr-x | tools/check/check_iproute | 25 | ||||
-rwxr-xr-x | tools/check/check_openssl_devel | 12 | ||||
-rwxr-xr-x | tools/check/check_python | 11 | ||||
-rwxr-xr-x | tools/check/check_python_devel | 11 | ||||
-rwxr-xr-x | tools/check/check_python_xml | 9 | ||||
-rwxr-xr-x | tools/check/check_udev | 31 | ||||
-rwxr-xr-x | tools/check/check_x11_devel | 15 | ||||
-rwxr-xr-x | tools/check/check_xgettext | 12 | ||||
-rwxr-xr-x | tools/check/check_xml2 | 34 | ||||
-rwxr-xr-x | tools/check/check_zlib_devel | 12 | ||||
-rwxr-xr-x | tools/check/check_zlib_lib | 18 | ||||
-rwxr-xr-x | tools/check/chk | 9 | ||||
-rw-r--r-- | tools/check/funcs.sh | 85 |
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 +} |