* [PATCH 0 of 2] Make tools cross-friendly @ 2008-01-19 4:02 Aron Griffis 2008-01-19 4:02 ` [PATCH 1 of 2] Make tools/Makefile cross-friendly Aron Griffis 2008-01-19 4:02 ` [PATCH 2 of 2] Make tools/check scripts cross-friendly Aron Griffis 0 siblings, 2 replies; 9+ messages in thread From: Aron Griffis @ 2008-01-19 4:02 UTC (permalink / raw) To: xen-devel; +Cc: xen-ia64-devel Hi, With these patches I'm able to cross-build all of xen-unstable.hg, using the same line that has previously worked only for the hypervisor and kernel: make -j1 XEN_TARGET_ARCH=ia64 CROSS_COMPILE=ia64-linux-gnu- In order to make this work, the sys-root containing the include files and libraries should be mounted on, for example, /usr/ia64-linux-gnu/sys-root/ I intend to post a howto on the wiki for building xen/ia64 on fedora8/x86_64, including the rpms and a sys-root image. It should be trivially adaptable to other architectures. I'm hoping that this procedure will make it easier to avoid accidental breakages by making it relatively easy to test builds for alternative architectures. Thanks, Aron 17 files changed, 160 insertions(+), 224 deletions(-) tools/Makefile | 15 +++++- tools/check/check_brctl | 24 ++--------- tools/check/check_crypto_lib | 20 +-------- tools/check/check_curl | 41 +++--------------- tools/check/check_iproute | 25 +++-------- tools/check/check_openssl_devel | 12 ----- tools/check/check_python | 11 ----- tools/check/check_python_devel | 11 ----- tools/check/check_python_xml | 9 +--- tools/check/check_udev | 31 +++----------- tools/check/check_x11_devel | 15 +----- tools/check/check_xgettext | 12 ----- tools/check/check_xml2 | 34 ++------------- tools/check/check_zlib_devel | 12 ----- tools/check/check_zlib_lib | 18 +------- tools/check/chk | 9 +--- tools/check/funcs.sh | 85 +++++++++++++++++++++++++++++++++++++++ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1 of 2] Make tools/Makefile cross-friendly 2008-01-19 4:02 [PATCH 0 of 2] Make tools cross-friendly Aron Griffis @ 2008-01-19 4:02 ` Aron Griffis 2008-01-19 8:26 ` Keir Fraser 2008-01-19 4:02 ` [PATCH 2 of 2] Make tools/check scripts cross-friendly Aron Griffis 1 sibling, 1 reply; 9+ messages in thread From: Aron Griffis @ 2008-01-19 4:02 UTC (permalink / raw) To: xen-devel; +Cc: xen-ia64-devel # HG changeset patch # User Aron Griffis <aron@hp.com> # Date 1200715193 18000 # Node ID 79cf8ffbc6678f201d35724bf083ea9749818597 # Parent ff90abf572f2d5aa7d4a7f764b3c343b66a06210 Make tools/Makefile cross-friendly Pass Xen cross-compilation options through to ioemu. Export CROSS_SYS_ROOT for use by scripts. Unexport IOEMU_DIR since it isn't used outside of the Makefile. Signed-off-by: Aron Griffis <aron@hp.com> diff -r ff90abf572f2 -r 79cf8ffbc667 tools/Makefile --- a/tools/Makefile Fri Jan 18 14:11:20 2008 -0700 +++ b/tools/Makefile Fri Jan 18 22:59:53 2008 -0500 @@ -26,6 +26,12 @@ ifeq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_A ifeq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) SUBDIRS-$(PYTHON_TOOLS) += python SUBDIRS-$(PYTHON_TOOLS) += pygrub +endif + +# For the sake of linking, set the sys-root +ifneq ($(CROSS_COMPILE),) +CROSS_SYS_ROOT ?= /usr/$(CROSS_COMPILE:-=)/sys-root +export CROSS_SYS_ROOT endif .PHONY: all @@ -65,10 +71,15 @@ check_clean: .PHONY: ioemu ioemuinstall ioemuclean ifeq ($(CONFIG_IOEMU),y) -export IOEMU_DIR ?= ioemu +IOEMU_DIR ?= ioemu +ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) +IOEMU_CONFIGURE_CROSS ?= --cross-prefix=$(CROSS_COMPILE) \ + --interp-prefix=$(CROSS_SYS_ROOT) +endif ioemu ioemuinstall: [ -f $(IOEMU_DIR)/config-host.mak ] || \ - (cd $(IOEMU_DIR) && sh configure --prefix=/usr) + ( cd $(IOEMU_DIR) && sh configure --prefix=/usr \ + $(IOEMU_CONFIGURE_CROSS) ) $(MAKE) -C $(IOEMU_DIR) $(patsubst ioemu%,%,$@) ioemuclean: $(MAKE) -C $(IOEMU_DIR) distclean ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 2] Make tools/Makefile cross-friendly 2008-01-19 4:02 ` [PATCH 1 of 2] Make tools/Makefile cross-friendly Aron Griffis @ 2008-01-19 8:26 ` Keir Fraser 2008-01-19 14:48 ` Aron Griffis 0 siblings, 1 reply; 9+ messages in thread From: Keir Fraser @ 2008-01-19 8:26 UTC (permalink / raw) To: Aron Griffis, xen-devel; +Cc: xen-ia64-devel On 19/1/08 04:02, "Aron Griffis" <aron@hp.com> wrote: > +# For the sake of linking, set the sys-root > +ifneq ($(CROSS_COMPILE),) > +CROSS_SYS_ROOT ?= /usr/$(CROSS_COMPILE:-=)/sys-root > +export CROSS_SYS_ROOT > endif I suppose this is a completely arbitrary path that happens to work for you? For your example command line make -j1 XEN_TARGET_ARCH=ia64 CROSS_COMPILE=ia64-linux-gnu- ...this would link against the ugly and bizarre path /usr/ia64linuxgnu/sys-root? -- Keir ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 2] Make tools/Makefile cross-friendly 2008-01-19 8:26 ` Keir Fraser @ 2008-01-19 14:48 ` Aron Griffis 2008-01-19 15:33 ` Aron Griffis 0 siblings, 1 reply; 9+ messages in thread From: Aron Griffis @ 2008-01-19 14:48 UTC (permalink / raw) To: Keir Fraser; +Cc: xen-devel, xen-ia64-devel Keir Fraser wrote: [Sat Jan 19 2008, 03:26:30AM EST] > On 19/1/08 04:02, "Aron Griffis" <aron@hp.com> wrote: > > > +# For the sake of linking, set the sys-root > > +ifneq ($(CROSS_COMPILE),) > > +CROSS_SYS_ROOT ?= /usr/$(CROSS_COMPILE:-=)/sys-root > > +export CROSS_SYS_ROOT > > endif > > I suppose this is a completely arbitrary path that happens to work for you? No, it appears to be pretty standard. I took my cue on the sys-root from the cross-compilers on arm. My own cross compilers are theirs plus some patches (which I'm preparing to send their direction next) > For your example command line > make -j1 XEN_TARGET_ARCH=ia64 CROSS_COMPILE=ia64-linux-gnu- > ...this would link against the ugly and bizarre path > /usr/ia64linuxgnu/sys-root? No, $(CROSS_COMPILE:-=) only removes the trailing dash. The resulting path is /usr/ia64-linux-gnu/sys-root, so the sys-root lives right next to the rest of the toolchain support: $ ls /usr/ia64-linux-gnu bin/ lib/ sys-root/ Aron ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1 of 2] Make tools/Makefile cross-friendly 2008-01-19 14:48 ` Aron Griffis @ 2008-01-19 15:33 ` Aron Griffis 0 siblings, 0 replies; 9+ messages in thread From: Aron Griffis @ 2008-01-19 15:33 UTC (permalink / raw) To: Keir Fraser; +Cc: xen-devel, xen-ia64-devel To follow up a bit more on the sys-root question, this web page explains it: http://benoit.papillault.free.fr/notes/cross-gcc.php.en The sys-root is built into both the compiler and binutils using the --with-sysroot option. That way the compiler can find the include files, and the linker can find the libraries. The cross-toolchain that I based mine on are from here: http://www.redhat.com/archives/fedora-devel-list/2007-October/msg00045.html These assume the sys-root will be in /usr/$target/sys-root, so that's how I set things up too. Lennert suggests using a script repack_cross.pl to install target rpms in the sys-root. I used that for a while but the number of rpms needed was overwhelming, so eventually I realized it would be a lot easier to use an entire root filesystem. For the rootfs, I started with fedora8/ia64 but it's missing some libs, so I switched to rhel5/ia64. For the howto, I intend to switch to centos4.6 so licensing isn't an issue. In any case, it's not hard to do a simple ia64 installation then bundle up the sys-root from it. Hope that helps, Aron ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2 of 2] Make tools/check scripts cross-friendly 2008-01-19 4:02 [PATCH 0 of 2] Make tools cross-friendly Aron Griffis 2008-01-19 4:02 ` [PATCH 1 of 2] Make tools/Makefile cross-friendly Aron Griffis @ 2008-01-19 4:02 ` Aron Griffis 2008-01-21 11:05 ` Christoph Egger 1 sibling, 1 reply; 9+ messages in thread From: Aron Griffis @ 2008-01-19 4:02 UTC (permalink / raw) To: xen-devel; +Cc: xen-ia64-devel # HG changeset patch # User Aron Griffis <aron@hp.com> # Date 1200715193 18000 # Node ID 735710fbd87c8c3701bb2e33746500793acf14bf # Parent 79cf8ffbc6678f201d35724bf083ea9749818597 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> diff -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_brctl --- a/tools/check/check_brctl Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_brctl Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_crypto_lib --- a/tools/check/check_crypto_lib Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_crypto_lib Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_curl --- a/tools/check/check_curl Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_curl Fri Jan 18 22:59:53 2008 -0500 @@ -1,38 +1,13 @@ #!/bin/sh # CHECK-BUILD CHECK-INSTALL -if [ ! "$LIBXENAPI_BINDINGS" = "y" ] -then - echo -n "unused, " - exit 0 +. funcs.sh + +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 - -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 -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_iproute --- a/tools/check/check_iproute Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_iproute Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_openssl_devel --- a/tools/check/check_openssl_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_openssl_devel Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_python --- a/tools/check/check_python Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_python Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_python_devel --- a/tools/check/check_python_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_python_devel Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_python_xml --- a/tools/check/check_python_xml Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_python_xml Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_udev --- a/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 @@ -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 vncconfig ;; 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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_x11_devel --- a/tools/check/check_x11_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_x11_devel Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_xgettext --- a/tools/check/check_xgettext Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_xgettext Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_xml2 --- a/tools/check/check_xml2 Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_xml2 Fri Jan 18 22:59:53 2008 -0500 @@ -1,5 +1,7 @@ #!/bin/sh # CHECK-BUILD CHECK-INSTALL + +. funcs.sh if [ ! "$LIBXENAPI_BINDINGS" = "y" -a ! "$ACM_SECURITY" = "y" ] then @@ -7,32 +9,6 @@ then 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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_zlib_devel --- a/tools/check/check_zlib_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_zlib_devel Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_zlib_lib --- a/tools/check/check_zlib_lib Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_zlib_lib Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/chk --- a/tools/check/chk Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/chk Fri Jan 18 22:59:53 2008 -0500 @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/funcs.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/check/funcs.sh Fri Jan 18 22:59:53 2008 -0500 @@ -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. We can + # only fix it if it's writeable. + [ "$OS" != Linux ] || \ + [ -f "$CROSS_SYS_ROOT/etc/ld.so.cache" ] || \ + ldconfig -r "$CROSS_SYS_ROOT" && \ + 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 +} ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2 of 2] Make tools/check scripts cross-friendly 2008-01-19 4:02 ` [PATCH 2 of 2] Make tools/check scripts cross-friendly Aron Griffis @ 2008-01-21 11:05 ` Christoph Egger 2008-01-21 14:50 ` Aron Griffis 0 siblings, 1 reply; 9+ messages in thread From: Christoph Egger @ 2008-01-21 11:05 UTC (permalink / raw) To: xen-devel; +Cc: Aron Griffis check_udev fails due to a typo in the patch. See inline for other comments. Christoph On Saturday 19 January 2008 05:02:31 Aron Griffis wrote: > # HG changeset patch > # User Aron Griffis <aron@hp.com> > # Date 1200715193 18000 > # Node ID 735710fbd87c8c3701bb2e33746500793acf14bf > # Parent 79cf8ffbc6678f201d35724bf083ea9749818597 > 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> > [snip] > diff -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_udev > --- a/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 > @@ -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 vncconfig ^^^^^^ Typo!! > ;; > 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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_x11_devel > --- a/tools/check/check_x11_devel Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/check_x11_devel Fri Jan 18 22:59:53 2008 -0500 > @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_xgettext > --- a/tools/check/check_xgettext Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/check_xgettext Fri Jan 18 22:59:53 2008 -0500 > @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_xml2 > --- a/tools/check/check_xml2 Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/check_xml2 Fri Jan 18 22:59:53 2008 -0500 > @@ -1,5 +1,7 @@ > #!/bin/sh > # CHECK-BUILD CHECK-INSTALL > + > +. funcs.sh > > if [ ! "$LIBXENAPI_BINDINGS" = "y" -a ! "$ACM_SECURITY" = "y" ] > then > @@ -7,32 +9,6 @@ then > 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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_zlib_devel > --- a/tools/check/check_zlib_devel Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/check_zlib_devel Fri Jan 18 22:59:53 2008 -0500 > @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_zlib_lib > --- a/tools/check/check_zlib_lib Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/check_zlib_lib Fri Jan 18 22:59:53 2008 -0500 > @@ -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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/chk > --- a/tools/check/chk Fri Jan 18 22:59:53 2008 -0500 > +++ b/tools/check/chk Fri Jan 18 22:59:53 2008 -0500 > @@ -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 What does this fix? Don't change this if you can't test on Solaris. > 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 -r 79cf8ffbc667 -r 735710fbd87c tools/check/funcs.sh > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/tools/check/funcs.sh Fri Jan 18 22:59:53 2008 -0500 > @@ -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. We can > + # only fix it if it's writeable. > + [ "$OS" != Linux ] || \ > + [ -f "$CROSS_SYS_ROOT/etc/ld.so.cache" ] || \ > + ldconfig -r "$CROSS_SYS_ROOT" && \ > + ldconfig -p ${CROSS_SYS_ROOT+-r "$CROSS_SYS_ROOT"} | grep -Fq "$1" > + return $? > + ) > +} This can be more readable with "if test" constructs. > + > +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 > +} > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel -- AMD Saxony, Dresden, Germany Operating System Research Center Legal Information: AMD Saxony Limited Liability Company & Co. KG Sitz (Geschäftsanschrift): Wilschdorfer Landstr. 101, 01109 Dresden, Deutschland Registergericht Dresden: HRA 4896 vertretungsberechtigter Komplementär: AMD Saxony LLC (Sitz Wilmington, Delaware, USA) Geschäftsführer der AMD Saxony LLC: Dr. Hans-R. Deppe, Thomas McCoy ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2 of 2] Make tools/check scripts cross-friendly 2008-01-21 11:05 ` Christoph Egger @ 2008-01-21 14:50 ` Aron Griffis 0 siblings, 0 replies; 9+ messages in thread From: Aron Griffis @ 2008-01-21 14:50 UTC (permalink / raw) To: Christoph Egger; +Cc: xen-devel Christoph Egger wrote: [Mon Jan 21 2008, 06:05:42AM EST] > > diff -r 79cf8ffbc667 -r 735710fbd87c tools/check/check_udev > > --- a/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 > > +++ b/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 > > @@ -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 vncconfig > ^^^^^^ > Typo!! Thanks, will fix and repost. > > -if test "${OS}" = "SunOS"; then > > +if [ "$OS" = "SunOS" ]; then > > What does this fix? I tried to make the scripts more consistently written while working on them. > Don't change this if you can't test on Solaris. *shrug* This works on every Bourne shell on every Solaris. I'll change it back if you want, but it's pointless. > > +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. We can > > + # only fix it if it's writeable. > > + [ "$OS" != Linux ] || \ > > + [ -f "$CROSS_SYS_ROOT/etc/ld.so.cache" ] || \ > > + ldconfig -r "$CROSS_SYS_ROOT" && \ > > + ldconfig -p ${CROSS_SYS_ROOT+-r "$CROSS_SYS_ROOT"} | grep -Fq "$1" > > + return $? > > + ) > > +} > > This can be more readable with "if test" constructs. Yeah, I wasn't very happy with that either. I'll make it better, thanks. Aron ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0 of 2] Make tools cross-friendly, try 2
@ 2008-01-21 15:29 Aron Griffis
2008-01-21 15:29 ` [PATCH 2 of 2] Make tools/check scripts cross-friendly Aron Griffis
0 siblings, 1 reply; 9+ messages in thread
From: Aron Griffis @ 2008-01-21 15:29 UTC (permalink / raw)
To: xen-devel; +Cc: Christoph.Egger, xen-ia64-devel
Hi,
This is an update of the patchset originally posted here:
http://lists.xensource.com/archives/html/xen-devel/2008-01/msg00620.html
This update includes changes suggested by Christoph's review,
in particular:
- fix vnconfig typo
- make the ldconfig logic better
That last fix actually behaves a bit differently than
before, but I think it's better to alert the user than
assume we can create the cache. Here's the delta:
# This relatively common in a sys-root; libs are installed but
- # ldconfig hasn't run there, so ldconfig -p won't work. We can
- # only fix it if it's writeable.
- [ "$OS" != Linux ] || \
- [ -f "$CROSS_SYS_ROOT/etc/ld.so.cache" ] || \
- ldconfig -r "$CROSS_SYS_ROOT" && \
+ # 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 $?
I did not revert the SunOS test. I have a high degree of
confidence that it's correct, and IMHO it's better to be
consistent.
Thanks,
Aron
17 files changed, 160 insertions(+), 224 deletions(-)
tools/Makefile | 15 +++++-
tools/check/check_brctl | 24 ++---------
tools/check/check_crypto_lib | 20 +--------
tools/check/check_curl | 41 +++---------------
tools/check/check_iproute | 25 +++--------
tools/check/check_openssl_devel | 12 -----
tools/check/check_python | 11 -----
tools/check/check_python_devel | 11 -----
tools/check/check_python_xml | 9 +---
tools/check/check_udev | 31 +++-----------
tools/check/check_x11_devel | 15 +-----
tools/check/check_xgettext | 12 -----
tools/check/check_xml2 | 34 ++-------------
tools/check/check_zlib_devel | 12 -----
tools/check/check_zlib_lib | 18 +-------
tools/check/chk | 9 +---
tools/check/funcs.sh | 85 +++++++++++++++++++++++++++++++++++++++
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 2 of 2] Make tools/check scripts cross-friendly 2008-01-21 15:29 [PATCH 0 of 2] Make tools cross-friendly, try 2 Aron Griffis @ 2008-01-21 15:29 ` Aron Griffis 0 siblings, 0 replies; 9+ messages in thread From: Aron Griffis @ 2008-01-21 15:29 UTC (permalink / raw) To: xen-devel; +Cc: Christoph.Egger, xen-ia64-devel # HG changeset patch # User Aron Griffis <aron@hp.com> # Date 1200929111 18000 # Node ID f2f6aedc492be200642868501255c332b9e4186b # Parent 79cf8ffbc6678f201d35724bf083ea9749818597 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> diff -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_brctl --- a/tools/check/check_brctl Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_brctl Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_crypto_lib --- a/tools/check/check_crypto_lib Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_crypto_lib Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_curl --- a/tools/check/check_curl Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_curl Mon Jan 21 10:25:11 2008 -0500 @@ -1,38 +1,13 @@ #!/bin/sh # CHECK-BUILD CHECK-INSTALL -if [ ! "$LIBXENAPI_BINDINGS" = "y" ] -then - echo -n "unused, " - exit 0 +. funcs.sh + +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 - -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 -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_iproute --- a/tools/check/check_iproute Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_iproute Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_openssl_devel --- a/tools/check/check_openssl_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_openssl_devel Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_python --- a/tools/check/check_python Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_python Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_python_devel --- a/tools/check/check_python_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_python_devel Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_python_xml --- a/tools/check/check_python_xml Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_python_xml Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_udev --- a/tools/check/check_udev Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_udev Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_x11_devel --- a/tools/check/check_x11_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_x11_devel Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_xgettext --- a/tools/check/check_xgettext Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_xgettext Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_xml2 --- a/tools/check/check_xml2 Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_xml2 Mon Jan 21 10:25:11 2008 -0500 @@ -1,5 +1,7 @@ #!/bin/sh # CHECK-BUILD CHECK-INSTALL + +. funcs.sh if [ ! "$LIBXENAPI_BINDINGS" = "y" -a ! "$ACM_SECURITY" = "y" ] then @@ -7,32 +9,6 @@ then 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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_zlib_devel --- a/tools/check/check_zlib_devel Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_zlib_devel Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/check_zlib_lib --- a/tools/check/check_zlib_lib Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/check_zlib_lib Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/chk --- a/tools/check/chk Fri Jan 18 22:59:53 2008 -0500 +++ b/tools/check/chk Mon Jan 21 10:25:11 2008 -0500 @@ -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 -r 79cf8ffbc667 -r f2f6aedc492b tools/check/funcs.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/check/funcs.sh Mon Jan 21 10:25:11 2008 -0500 @@ -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 +} ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-01-21 15:29 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-01-19 4:02 [PATCH 0 of 2] Make tools cross-friendly Aron Griffis 2008-01-19 4:02 ` [PATCH 1 of 2] Make tools/Makefile cross-friendly Aron Griffis 2008-01-19 8:26 ` Keir Fraser 2008-01-19 14:48 ` Aron Griffis 2008-01-19 15:33 ` Aron Griffis 2008-01-19 4:02 ` [PATCH 2 of 2] Make tools/check scripts cross-friendly Aron Griffis 2008-01-21 11:05 ` Christoph Egger 2008-01-21 14:50 ` Aron Griffis -- strict thread matches above, loose matches on Subject: below -- 2008-01-21 15:29 [PATCH 0 of 2] Make tools cross-friendly, try 2 Aron Griffis 2008-01-21 15:29 ` [PATCH 2 of 2] Make tools/check scripts cross-friendly Aron Griffis
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.