Roger Pau Monne
2012-Jan-09 20:37 UTC
[PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
# HG changeset patch # User Roger Pau Monne <roger.pau@entel.upc.edu> # Date 1326141232 -3600 # Node ID 7d90cbdca2c26ba817f10a404737b25e85d56a7f # Parent 4086e4811547ddffb9a53fbf2efb6c2fa436b70a build: add autoconf to replace custom checks in tools/check Added autotools magic to replace custom check scripts. The previous checks have been ported to autoconf, and some additional ones have been added (plus the suggestions from running autoscan). Two files are created as a result from executing configure script, config/Autoconf.mk and config.h. Autoconf.mk is included by Config.mk, and contains most of the options previously defined in .config, that can now be set passing parameters or defining environment variables when executing configure script. config.h is still not used anywhere, and is automatically created by autoheader, altough this migh change when we start to include this file. Just a first release, and since Iit's my first autoconf script I guess there will be many things to polish here... Please review and comment. Changes since v1: * Moved autoconf stuff inside tools folder. * Add Makefile rules for cleaning. * Removed Automake dependency. * Create autogen.sh to automatically create configure script when building from source repository. * Cached values of options passed from command line. * Add necessary ignores to .hgignore. * Added Autoconf to the list of dependencies. * Changed hypen to underscore in XML2 and CURL variable names. * Added script to get version from xen/Makefile. * Set Ocaml tools to optional. * Added procedence of m4/ocaml.m4. Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu> diff -r 4086e4811547 -r 7d90cbdca2c2 .hgignore --- a/.hgignore Thu Jan 05 17:25:23 2012 +0000 +++ b/.hgignore Mon Jan 09 21:33:52 2012 +0100 @@ -22,6 +22,7 @@ ^[^/]*\.bz2$ ^\.config$ ^\.pc +^configure$ (^|/)(tags|TAGS)$ ^build-.*$ ^dist/.*$ @@ -308,6 +309,10 @@ ^tools/ocaml/libs/xl/xenlight\.ml$ ^tools/ocaml/libs/xl/xenlight\.mli$ ^tools/ocaml/xenstored/oxenstored$ +^tools/autom4te.cache$ +^tools/config.*$ +^tools/configure$ +^config/Tools.mk$ ^xen/\.banner.*$ ^xen/BLOG$ ^xen/System.map$ diff -r 4086e4811547 -r 7d90cbdca2c2 Config.mk --- a/Config.mk Thu Jan 05 17:25:23 2012 +0000 +++ b/Config.mk Mon Jan 09 21:33:52 2012 +0100 @@ -70,9 +70,6 @@ EXTRA_INCLUDES += $(EXTRA_PREFIX)/includ EXTRA_LIB += $(EXTRA_PREFIX)/$(LIBLEAFDIR) endif -BISON ?= bison -FLEX ?= flex - PYTHON ?= python PYTHON_PREFIX_ARG ?= --prefix="$(PREFIX)" # The above requires that PREFIX contains *no spaces*. This variable is here @@ -175,22 +172,9 @@ CFLAGS += $(foreach i, $(PREPEND_INCLUDE APPEND_LDFLAGS += $(foreach i, $(APPEND_LIB), -L$(i)) APPEND_CFLAGS += $(foreach i, $(APPEND_INCLUDES), -I$(i)) -CHECK_LIB = $(EXTRA_LIB) $(PREPEND_LIB) $(APPEND_LIB) -CHECK_INCLUDES = $(EXTRA_INCLUDES) $(PREPEND_INCLUDES) $(APPEND_INCLUDES) - EMBEDDED_EXTRA_CFLAGS := -nopie -fno-stack-protector -fno-stack-protector-all EMBEDDED_EXTRA_CFLAGS += -fno-exceptions -# Enable XSM security module (by default, Flask). -XSM_ENABLE ?= n -FLASK_ENABLE ?= $(XSM_ENABLE) - -# Download GIT repositories via HTTP or GIT's own protocol? -# GIT's protocol is faster and more robust, when it works at all (firewalls -# may block it). We make it the default, but if your GIT repository downloads -# fail or hang, please specify GIT_HTTP=y in your environment. -GIT_HTTP ?= n - XEN_EXTFILES_URL=http://xenbits.xensource.com/xen-extfiles # All the files at that location were downloaded from elsewhere on # the internet. The original download URL is preserved as a comment @@ -222,17 +206,3 @@ QEMU_TAG ?= bb36d632e4cabf47882adff07a45 # Note that using SeaBIOS requires the use the upstream qemu as the # device model. SEABIOS_DIR ?= - -# Optional components -XENSTAT_XENTOP ?= y -VTPM_TOOLS ?= n -LIBXENAPI_BINDINGS ?= n -PYTHON_TOOLS ?= y -OCAML_TOOLS ?= y -CONFIG_MINITERM ?= n -CONFIG_LOMOUNT ?= n -CONFIG_SYSTEM_LIBAIO ?= y - -ifeq ($(OCAML_TOOLS),y) -OCAML_TOOLS := $(shell ocamlopt -v > /dev/null 2>&1 && echo "y" || echo "n") -endif diff -r 4086e4811547 -r 7d90cbdca2c2 Makefile --- a/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ b/Makefile Mon Jan 09 21:33:52 2012 +0100 @@ -40,11 +40,9 @@ dist: DESTDIR=$(DISTDIR)/install dist: dist-xen dist-kernels dist-tools dist-stubdom dist-docs dist-misc dist-misc: - $(INSTALL_DIR) $(DISTDIR)/check $(INSTALL_DATA) ./COPYING $(DISTDIR) $(INSTALL_DATA) ./README $(DISTDIR) $(INSTALL_PROG) ./install.sh $(DISTDIR) - $(INSTALL_PROG) tools/check/chk tools/check/check_* tools/check/funcs.sh $(DISTDIR)/check dist-%: DESTDIR=$(DISTDIR)/install dist-%: install-% @: # do nothing diff -r 4086e4811547 -r 7d90cbdca2c2 README --- a/README Thu Jan 05 17:25:23 2012 +0000 +++ b/README Mon Jan 09 21:33:52 2012 +0100 @@ -41,6 +41,7 @@ provided by your OS distributor: * GCC v3.4 or later * GNU Make * GNU Binutils + * GNU Autoconf v2.67 or later * Development install of zlib (e.g., zlib-dev) * Development install of Python v2.3 or later (e.g., python-dev) * Development install of curses (e.g., libncurses-dev) @@ -87,9 +88,21 @@ 2. cd to xen-unstable (or whatever you s 3. For the very first build, or if you want to destroy build trees, perform the following steps: + If you are building Xen from a repository (git or mercurial) you + must run: + + # ./autogen.sh + + Before executing ./configure (this step can be ommited when + building from a distribution package). + + # ./configure # make world # make install + If you want, you can run ./configure --help to see the list of + options available options when building and installing Xen. + This will create and install onto the local machine. It will build the xen binary (xen.gz), the tools and the documentation. diff -r 4086e4811547 -r 7d90cbdca2c2 autogen.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/autogen.sh Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,11 @@ +#!/bin/sh +rm -rf configure +cd tools +autoheader && autoconf +if [ "$?" = "0" ] +then + cd .. + echo "#!/bin/sh" >> configure + echo "cd tools && ./configure \$@" >> configure + chmod +x configure +fi diff -r 4086e4811547 -r 7d90cbdca2c2 config/Tools.mk.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/Tools.mk.in Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,50 @@ +# Prefix and install folder +PREFIX := @prefix@ +LIBLEAFDIR_x86_64 := @LIB_PATH@ + +# A debug build of tools? +debug := @debug@ + +# Tools path +BISON := @BISON@ +FLEX := @FLEX@ +PYTHON := @PYTHON@ +PYTHON_PATH := @PYTHONPATH@ +PERL := @PERL@ +BRCTL := @BRCTL@ +IP := @IP@ +CURL_CONFIG := @CURL@ +XML2_CONFIG := @XML@ +BASH := @BASH@ +XGETTTEXT := @XGETTEXT@ + +# Extra folder for libs/includes +PREPEND_INCLUDES := @PREPEND_INCLUDES@ +PREPEND_LIB := @PREPEND_LIB@ +APPEND_INCLUDES := @APPEND_INCLUDES@ +APPEND_LIB := @APPEND_LIB@ + +# Enable XSM security module (by default, Flask). +XSM_ENABLE := @xsm@ +FLASK_ENABLE := @xsm@ + +# Download GIT repositories via HTTP or GIT's own protocol? +# GIT's protocol is faster and more robust, when it works at all (firewalls +# may block it). We make it the default, but if your GIT repository downloads +# fail or hang, please specify GIT_HTTP=y in your environment. +GIT_HTTP := @githttp@ + +# Optional components +XENSTAT_XENTOP := @monitors@ +VTPM_TOOLS := @vtpm@ +LIBXENAPI_BINDINGS := @xapi@ +PYTHON_TOOLS := @pythontools@ +OCAML_TOOLS := @ocamltools@ +CONFIG_MINITERM := @miniterm@ +CONFIG_LOMOUNT := @lomount@ + +#System options +CONFIG_SYSTEM_LIBAIO:= @system_aio@ +CONFIG_LIBICONV := @libiconv@ +CONFIG_GCRYPT := @libgcrypt@ +CONFIG_EXT2FS := @libext2fs@ diff -r 4086e4811547 -r 7d90cbdca2c2 tools/Makefile --- a/tools/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ b/tools/Makefile Mon Jan 09 21:33:52 2012 +0100 @@ -6,7 +6,6 @@ SUBDIRS-libaio := libaio endif SUBDIRS-y :-SUBDIRS-y += check SUBDIRS-y += include SUBDIRS-y += libxc SUBDIRS-y += flask @@ -72,10 +71,14 @@ install: subdirs-install .PHONY: clean clean: subdirs-clean + rm -rf ../config/Tools.mk config.h config.log config.status \ + config.cache .PHONY: distclean distclean: subdirs-distclean rm -rf ioemu-dir ioemu-remote + rm -rf ../config/Tools.mk config.h config.log config.status \ + config.cache ../configure autom4te.cache config.h.in configure ifneq ($(XEN_COMPILE_ARCH),$(XEN_TARGET_ARCH)) IOEMU_CONFIGURE_CROSS ?= --cpu=$(XEN_TARGET_ARCH) \ diff -r 4086e4811547 -r 7d90cbdca2c2 tools/Rules.mk --- a/tools/Rules.mk Thu Jan 05 17:25:23 2012 +0000 +++ b/tools/Rules.mk Mon Jan 09 21:33:52 2012 +0100 @@ -3,6 +3,7 @@ # `all' is the default target all: +include $(XEN_ROOT)/config/Tools.mk include $(XEN_ROOT)/Config.mk export _INSTALL := $(INSTALL) @@ -80,8 +81,6 @@ check-$(CONFIG_X86) = $(call cc-ver-chec "Xen requires at least gcc-3.4") $(eval $(check-y)) -_PYTHON_PATH := $(shell which $(PYTHON)) -PYTHON_PATH ?= $(_PYTHON_PATH) INSTALL_PYTHON_PROG = \ $(XEN_ROOT)/tools/python/install-wrap "$(PYTHON_PATH)" $(INSTALL_PROG) @@ -109,3 +108,7 @@ subdir-all-% subdir-clean-% subdir-insta subdir-distclean-%: .phony $(MAKE) -C $* clean + +$(XEN_ROOT)/config/Tools.mk: + @echo "You have to run ./configure before building or installing the tools" + @exit 1 diff -r 4086e4811547 -r 7d90cbdca2c2 tools/blktap/drivers/Makefile --- a/tools/blktap/drivers/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ b/tools/blktap/drivers/Makefile Mon Jan 09 21:33:52 2012 +0100 @@ -13,7 +13,7 @@ CFLAGS += $(CFLAGS_libxenstore) CFLAGS += -I $(MEMSHR_DIR) CFLAGS += -D_GNU_SOURCE -ifeq ($(shell . ./check_gcrypt $(CC)),yes) +ifeq ($CONFIG_GCRYPT,y) CFLAGS += -DUSE_GCRYPT CRYPT_LIB := -lgcrypt else diff -r 4086e4811547 -r 7d90cbdca2c2 tools/blktap/drivers/check_gcrypt --- a/tools/blktap/drivers/check_gcrypt Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -#!/bin/sh - -cat > .gcrypt.c << EOF -#include <gcrypt.h> -int main(void) { return 0; } -EOF - -if $1 -o .gcrypt .gcrypt.c -lgcrypt 2>/dev/null ; then - echo "yes" -else - echo "no" -fi - -rm -f .gcrypt* diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/Makefile --- a/tools/check/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -XEN_ROOT = $(CURDIR)/../.. -include $(XEN_ROOT)/tools/Rules.mk - -# Export the necessary environment variables for the tests -export PYTHON -export LIBXENAPI_BINDINGS -export CHECK_INCLUDES -export CHECK_LIB -export CONFIG_SYSTEM_LIBAIO - -.PHONY: all install -all install: check-build - -# Check this machine is OK for building on. -.PHONY: check-build -check-build: - ./chk build - -# Check this machine is OK for installing on. -.PHONY: check-install -check-install: - ./chk install - -.PHONY: clean -clean: - ./chk clean diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/README --- a/tools/check/README Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -Checks for the suitability of a machine for Xen build or install. -To check for build suitability use - - ./chk build - -To check for install suitability use - - ./chk install - -The chk script will run checks in this directory and print -the ones that failed. It prints nothing if checks succeed. -The chk script exits with 0 on success and 1 on failure. - -The chk script runs executable files in this directory whose -names begin with 'check_'. Files containing CHECK-BUILD -are run for the build check, and files containing CHECK-INSTALL -are run for the install check. - -Detailed output from the check scripts is in .chkbuild for build -and .chkinstall for install. \ No newline at end of file diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_brctl --- a/tools/check/check_brctl Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -#!/bin/sh -# CHECK-INSTALL - -. ./funcs.sh - -case $OS in -OpenBSD|NetBSD|FreeBSD) - has_or_fail brconfig ;; -Linux) - has_or_fail brctl ;; -*) - fail "unknown OS" ;; -esac diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_crypto_lib --- a/tools/check/check_crypto_lib Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -case $OS in -FreeBSD|NetBSD|OpenBSD) - exit 0 ;; -esac - -has_lib libcrypto.so || fail "missing libcrypto.so" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_curl --- a/tools/check/check_curl Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -if [ "$LIBXENAPI_BINDINGS" != "y" ]; then - echo -n "unused, " - exit 0 -fi - -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 4086e4811547 -r 7d90cbdca2c2 tools/check/check_iproute --- a/tools/check/check_iproute Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -#!/bin/sh -# CHECK-INSTALL - -. ./funcs.sh - -PATH=/sbin:$PATH - -case $OS in -OpenBSD|NetBSD|FreeBSD) - has_or_fail ifconfig ;; -Linux) - has_or_fail ip ;; -*) - fail "unknown OS" ;; -esac diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_libaio_devel --- a/tools/check/check_libaio_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -if [ X${CONFIG_SYSTEM_LIBAIO} != X"y" ] ; then - exit 0 -fi -if ! has_header libaio.h ; then - fail "can't find libaio headers, install libaio devel package or set CONFIG_SYSTEM_LIBAIO=n" -fi diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_libaio_lib --- a/tools/check/check_libaio_lib Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -if [ X${CONFIG_SYSTEM_LIBAIO} != X"y" ] ; then - exit 0 -fi -has_lib libaio.so || fail "can't find libaio" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_openssl_devel --- a/tools/check/check_openssl_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -has_header openssl/md5.h || fail "missing openssl headers" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_python --- a/tools/check/check_python Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -if test -z ${PYTHON}; then - PYTHON=python -fi - -${PYTHON} -c ' -import sys -sys.exit(sys.version_info[0] < 2 or sys.version_info[1] < 3) -' || fail "need python version >= 2.3" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_python_devel --- a/tools/check/check_python_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -if test -z ${PYTHON}; then - PYTHON=python -fi -has_or_fail ${PYTHON} - -${PYTHON} -c ' -import os.path, sys -for p in sys.path: - if os.path.exists(p + "/config/Makefile"): - sys.exit(0) -sys.exit(1) -' || fail "can't find python devel files" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_python_xml --- a/tools/check/check_python_xml Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -#!/bin/sh -# CHECK-INSTALL - -. ./funcs.sh - -if test -z ${PYTHON}; then - PYTHON=python -fi -has_or_fail ${PYTHON} - -${PYTHON} -c 'import xml.dom.minidom' 2>/dev/null || \ -fail "can't import xml.dom.minidom" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_udev --- a/tools/check/check_udev Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22 +0,0 @@ -#!/bin/sh -# CHECK-INSTALL - -. ./funcs.sh - -case $OS in -OpenBSD|NetBSD|FreeBSD) - has_or_fail vnconfig - ;; -Linux) - has /sbin/udevadm && \ - udevver=`/sbin/udevadm info -V | awk '{print $NF}'` - [ -z "$udevver" ] && has_or_fail udevinfo && \ - udevver=`udevinfo -V | awk '{print $NF}'` - [ "$udevver" -ge 59 ] 2>/dev/null || \ - has hotplug || \ - fail "udev is too old, upgrade to version 59 or later" - ;; -*) - fail "unknown OS" - ;; -esac diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_uuid_devel --- a/tools/check/check_uuid_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -has_header uuid.h || \ -has_header uuid/uuid.h || fail "missing uuid headers (package uuid-dev)" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_x11_devel --- a/tools/check/check_x11_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -has_header X11/keysymdef.h || \ -has_header /usr/X11R6/include/X11/keysymdef.h || \ -has_header /usr/X11R7/include/X11/keysymdef.h || \ -warning "can't find X11 headers" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_xgettext --- a/tools/check/check_xgettext Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -has_or_fail xgettext diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_xml2 --- a/tools/check/check_xml2 Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -if [ ! "$LIBXENAPI_BINDINGS" = "y" ] -then - echo -n "unused, " - exit 0 -fi - -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 4086e4811547 -r 7d90cbdca2c2 tools/check/check_yajl_devel --- a/tools/check/check_yajl_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -has_header yajl/yajl_parse.h || fail "can't find yajl/yajl_parse.h" -has_header yajl/yajl_gen.h || fail "can't find yajl/yajl_gen.h" -has_lib libyajl.so || fail "can't find libyajl.so" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_yajl_lib --- a/tools/check/check_yajl_lib Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -has_lib libyajl.so.1 || fail "can't find libyajl.so.1 version 1" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_zlib_devel --- a/tools/check/check_zlib_devel Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -#!/bin/sh -# CHECK-BUILD - -. ./funcs.sh - -has_header zlib.h || fail "can't find zlib headers" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/check_zlib_lib --- a/tools/check/check_zlib_lib Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -#!/bin/sh -# CHECK-BUILD CHECK-INSTALL - -. ./funcs.sh - -case $OS in -FreeBSD|NetBSD|OpenBSD) - exit 0 - ;; -esac - -has_lib libz.so || fail "can't find zlib" diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/chk --- a/tools/check/chk Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -#!/bin/sh - -func_usage () -{ - echo "Usage:" - echo " $0 [build|install|clean]" - echo - echo "Check suitability for Xen build or install." - echo "Exit with 0 if OK, 1 if not." - echo - echo "Calling with 'clean' removes generated files." - exit 1 -} - -PATH=$PATH:/sbin:/usr/sbin -OS=`uname -s` -export PATH OS - -if [ "$OS" = "SunOS" ]; then - exit 0 -fi - -case $1 in - build) - check="CHECK-BUILD" - ;; - install) - check="CHECK-INSTALL" - ;; - clean) - exit 0 - ;; - *) - func_usage - ;; -esac - -failed=0 - -echo "Xen ${check} " `date` -for f in check_* ; do - case $f in - *~) - continue - ;; - *) - ;; - esac - if ! [ -x $f ] ; then - continue - fi - if ! grep -Fq "$check" $f ; then - continue - fi - echo -n "Checking $f: " - if ./$f 2>&1 ; then - echo OK - else - failed=1 - fi -done - -exit ${failed} diff -r 4086e4811547 -r 7d90cbdca2c2 tools/check/funcs.sh --- a/tools/check/funcs.sh Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -# 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() { - check_sys_root || return 1 - - case $1 in - /*) ;; - *) - if [ -r "$CROSS_SYS_ROOT/usr/include/$1" ]; then - return 0 - fi - for path in ${CHECK_INCLUDES}; do - if [ -r "$CROSS_SYS_ROOT${path}/$1" ]; then - return 0 - fi - done - ;; - esac - - return 1 -} - -has_lib() { - check_sys_root || return 1 - - # subshell to prevent pollution of caller's environment - ( - PATH=/sbin:$PATH # for ldconfig - LIBRARIES="$CHECK_LIB /usr/lib" - - # 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 - if [ "${OS}" = "Linux" ]; then - ldconfig -p ${CROSS_SYS_ROOT+-r "$CROSS_SYS_ROOT"} | grep -Fq "$1" - return $? - fi - if [ "${OS}" = "NetBSD" ]; then - ls -1 ${LIBRARIES} | grep -Fq "$1" - return $? - fi - return 1 - ) -} - -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 -} - -warning() { - echo - echo " *** `basename "$0"` FAILED${*+: $*}" -} - -fail() { - echo - echo " *** `basename "$0"` FAILED${*+: $*}" - exit 1 -} diff -r 4086e4811547 -r 7d90cbdca2c2 tools/configure.ac --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/configure.ac Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,179 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ([2.67]) +AC_INIT([Xen Hypervisor],m4_esyscmd([../version.sh ../xen/Makefile]), [xen-devel@lists.xensource.com]) +AC_CONFIG_SRCDIR([libxl/libxl.c]) +AC_CONFIG_FILES([../config/Tools.mk]) +AC_CONFIG_HEADERS([config.h]) +AC_PREFIX_DEFAULT([/usr]) + +# Check if CFLAGS, LDFLAGS, LIBS, CPPFLAGS or CPP is set and print a warning + +AS_IF([test -n "$CC$CFLAGS$LDFLAGS$LIBS$CPPFLAGS$CPP"], [ + AC_MSG_WARN( +[Setting CC, CFLAGS, LDFLAGS, LIBS, CPPFLAGS or CPP is not \ +recommended, use PREPEND_INCLUDES, PREPEND_LIB, \ +APPEND_INCLUDES and APPEND_LIB instead when possible.]) +]) + +AC_USE_SYSTEM_EXTENSIONS + +# M4 Macro includes +m4_include([m4/enable_feature.m4]) +m4_include([m4/disable_feature.m4]) +m4_include([m4/path_or_fail.m4]) +m4_include([m4/python_xml.m4]) +m4_include([m4/python_version.m4]) +m4_include([m4/python_devel.m4]) +m4_include([m4/udev.m4]) +m4_include([m4/ocaml.m4]) +m4_include([m4/default_lib.m4]) +m4_include([m4/set_cflags_ldflags.m4]) + +# Enable/disable options +AX_ARG_ENABLE_AND_EXPORT([xsm], + [Enable XSM security module (by default, Flask)]) +AX_ARG_ENABLE_AND_EXPORT([githttp], [Download GIT repositories via HTTP]) +AX_ARG_DISABLE_AND_EXPORT([monitors], + [Disable xenstat and xentop monitoring tools]) +AX_ARG_ENABLE_AND_EXPORT([vtpm], [Enable Virtual Trusted Platform Module]) +AX_ARG_ENABLE_AND_EXPORT([xapi], [Enable Xen API Bindings]) +AX_ARG_DISABLE_AND_EXPORT([pythontools], [Disable Python tools]) +AX_ARG_DISABLE_AND_EXPORT([ocamltools], [Disable Ocaml tools]) +AX_ARG_ENABLE_AND_EXPORT([miniterm], [Enable miniterm]) +AX_ARG_ENABLE_AND_EXPORT([lomount], [Enable lomount]) +AX_ARG_DISABLE_AND_EXPORT([debug], [Disable debug build of Xen and tools]) + +AC_ARG_VAR([PREPEND_INCLUDES], + [List of include folders to prepend to CFLAGS (without -I)]) +AC_ARG_VAR([PREPEND_LIB], + [List of library folders to prepend to LDFLAGS (without -L)]) +AC_ARG_VAR([APPEND_INCLUDES], + [List of include folders to append to CFLAGS (without -I)]) +AC_ARG_VAR([APPEND_LIB], + [List of library folders to append to LDFLAGS (without -L)]) + +AX_SET_FLAGS + +AC_ARG_VAR([PYTHON], [Path to the Python parser]) +AC_ARG_VAR([PERL], [Path to Perl parser]) +AC_ARG_VAR([BRCTL], [Path to brctl tool]) +AC_ARG_VAR([IP], [Path to ip tool]) +AC_ARG_VAR([BISON], [Path to Bison parser generator]) +AC_ARG_VAR([FLEX], [Path to Flex lexical analyser generator]) +AC_ARG_VAR([CURL], [Path to curl-config tool]) +AC_ARG_VAR([XML], [Path to xml2-config tool]) +AC_ARG_VAR([BASH], [Path to bash shell]) +AC_ARG_VAR([XGETTEXT], [Path to xgetttext tool]) + +# Checks for programs. +AC_PROG_SED +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AX_PATH_PROG_OR_FAIL([PERL], [perl]) +AX_PATH_PROG_OR_FAIL([BRCTL], [brctl]) +AX_PATH_PROG_OR_FAIL([IP], [ip]) +AX_PATH_PROG_OR_FAIL([BISON], [bison]) +AX_PATH_PROG_OR_FAIL([FLEX], [flex]) +AS_IF([test "x$xapi" = "xy"], [ + AX_PATH_PROG_OR_FAIL([CURL], [curl-config]) + AX_PATH_PROG_OR_FAIL([XML], [xml2-config]) +]) +AS_IF([test "x$ocamltools" = "xy"], [ + AC_PROG_OCAML + AS_IF([test "x$OCAMLC" = "xno"], [ + ocamltools="n" + ]) +]) +AX_PATH_PROG_OR_FAIL([BASH], [bash]) +AS_IF([test "x$pythontools" = "xy"], [ + AS_IF([echo "$PYTHON" | grep -q "^/"], [ + PYTHONPATH=$PYTHON + PYTHON=`basename $PYTHONPATH` + ],[test -z "$PYTHON"], [PYTHON="python"], + [AC_MSG_ERROR([PYTHON specified, but is not an absolute path])]) + AX_PATH_PROG_OR_FAIL([PYTHONPATH], [$PYTHON]) + AX_CHECK_PYTHON_VERSION([2], [3]) + AX_CHECK_PYTHON_XML() + AX_CHECK_PYTHON_DEVEL() +]) +AX_PATH_PROG_OR_FAIL([XGETTEXT], [xgettext]) +AX_CHECK_UDEV([59]) + +# Check library path +AX_DEFAULT_LIB + +# Checks for libraries. +AC_CHECK_LIB([aio], [io_setup], [system_aio="y"], [system_aio="n"]) +AC_SUBST(system_aio) +AC_CHECK_LIB([crypto], [MD5], [], [AC_MSG_ERROR([Could not find libcrypto])]) +AC_CHECK_LIB([ext2fs], [ext2fs_open2], [libext2fs="y"], [libext2fs="n"]) +AC_SUBST(libext2fs) +AC_CHECK_LIB([gcrypt], [gcry_md_hash_buffer], [libgcrypt="y"], [libgcrypt="n"]) +AC_SUBST(libgcrypt) +AC_CHECK_LIB([pthread], [pthread_create], [] , + [AC_MSG_ERROR([Could not find libpthread])]) +AC_CHECK_LIB([rt], [clock_gettime]) +AC_CHECK_LIB([uuid], [uuid_clear], [], + [AC_MSG_ERROR([Could not find libuuid])]) +AC_CHECK_LIB([yajl], [yajl_alloc], [], + [AC_MSG_ERROR([Could not find yajl])]) +AC_CHECK_LIB([z], [deflateCopy], [], [AC_MSG_ERROR([Could not find zlib])]) +AC_CHECK_LIB([iconv], [libiconv_open], [libiconv="y"], [libiconv="n"]) +AC_SUBST(libiconv) + +# Autoscan stuff (except for yajl/yajl_version.h check) +# Checks for header files. +AC_FUNC_ALLOCA +AC_CHECK_HEADERS([ \ + arpa/inet.h fcntl.h inttypes.h libintl.h limits.h malloc.h \ + netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h \ + strings.h sys/file.h sys/ioctl.h sys/mount.h sys/param.h \ + sys/socket.h sys/statvfs.h sys/time.h syslog.h termios.h \ + unistd.h yajl/yajl_version.h \ + ]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_HEADER_STDBOOL +AC_TYPE_UID_T +AC_C_INLINE +AC_TYPE_INT16_T +AC_TYPE_INT32_T +AC_TYPE_INT64_T +AC_TYPE_INT8_T +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_C_RESTRICT +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_CHECK_MEMBERS([struct stat.st_blksize]) +AC_STRUCT_ST_BLOCKS +AC_CHECK_MEMBERS([struct stat.st_rdev]) +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T +AC_CHECK_TYPES([ptrdiff_t]) + +# Checks for library functions. +AC_FUNC_ERROR_AT_LINE +AC_FUNC_FORK +AC_FUNC_FSEEKO +AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK +AC_HEADER_MAJOR +AC_FUNC_STRTOD +AC_CHECK_FUNCS([ \ + alarm atexit bzero clock_gettime dup2 fdatasync ftruncate \ + getcwd gethostbyname gethostname getpagesize gettimeofday \ + inet_ntoa isascii localtime_r memchr memmove memset mkdir \ + mkfifo munmap pathconf realpath regcomp rmdir select setenv \ + socket strcasecmp strchr strcspn strdup strerror strndup \ + strpbrk strrchr strspn strstr strtol strtoul strtoull tzset \ + uname \ + ]) + +AC_OUTPUT() diff -r 4086e4811547 -r 7d90cbdca2c2 tools/debugger/gdbsx/xg/Makefile --- a/tools/debugger/gdbsx/xg/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ b/tools/debugger/gdbsx/xg/Makefile Mon Jan 09 21:33:52 2012 +0100 @@ -21,7 +21,6 @@ xg_all.a: $(XG_OBJS) Makefile $(XG_HDRS) # $(CC) -m32 -c -o $@ $^ xen-headers: - $(MAKE) -C ../../../check $(MAKE) -C ../../../include # xg_main.o: xg_main.c Makefile $(XG_HDRS) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/libfsimage/Makefile --- a/tools/libfsimage/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ b/tools/libfsimage/Makefile Mon Jan 09 21:33:52 2012 +0100 @@ -2,7 +2,11 @@ XEN_ROOT = $(CURDIR)/../.. include $(XEN_ROOT)/tools/Rules.mk SUBDIRS-y = common ufs reiserfs iso9660 fat zfs xfs -SUBDIRS-y += $(shell env CC="$(CC)" ./check-libext2fs) +ifeq ($(CONFIG_EXT2FS), y) + SUBDIRS-y += ext2fs-lib +else + SUBDIRS-y += ext2fs +endif .PHONY: all clean install all clean install: %: subdirs-% diff -r 4086e4811547 -r 7d90cbdca2c2 tools/libfsimage/check-libext2fs --- a/tools/libfsimage/check-libext2fs Thu Jan 05 17:25:23 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -#!/bin/sh - -cat >ext2-test.c <<EOF -#include <ext2fs/ext2fs.h> - -int main() -{ - ext2fs_open2; -} -EOF - -${CC-gcc} -o ext2-test ext2-test.c -lext2fs >/dev/null 2>&1 -if [ $? = 0 ]; then - echo ext2fs-lib -else - echo ext2fs -fi - -rm -f ext2-test ext2-test.c - -exit 0 diff -r 4086e4811547 -r 7d90cbdca2c2 tools/libxen/Makefile --- a/tools/libxen/Makefile Thu Jan 05 17:25:23 2012 +0000 +++ b/tools/libxen/Makefile Mon Jan 09 21:33:52 2012 +0100 @@ -22,12 +22,12 @@ MAJOR = 1.0 MINOR = 0 CFLAGS += -Iinclude \ - $(shell xml2-config --cflags) \ - $(shell curl-config --cflags) \ + $(shell $(XML2_CONFIG) --cflags) \ + $(shell $(CURL_CONFIG) --cflags) \ -fPIC -LDFLAGS += $(shell xml2-config --libs) \ - $(shell curl-config --libs) +LDFLAGS += $(shell $(XML2_CONFIG) --libs) \ + $(shell $(CURL_CONFIG) --libs) LIBXENAPI_HDRS = $(wildcard include/xen/api/*.h) include/xen/api/xen_all.h LIBXENAPI_OBJS = $(patsubst %.c, %.o, $(wildcard src/*.c)) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/default_lib.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/default_lib.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,8 @@ +AC_DEFUN([AX_DEFAULT_LIB], +[AS_IF([test -d "$prefix/lib64"], [ + LIB_PATH="lib64" +],[ + LIB_PATH="lib" +]) +AC_SUBST(LIB_PATH)]) + diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/disable_feature.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/disable_feature.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,13 @@ +AC_DEFUN([AX_ARG_DISABLE_AND_EXPORT], +[AC_ARG_ENABLE([$1], + AS_HELP_STRING([--disable-$1], [$2])) + +AS_IF([test "x$enable_$1" = "xno"], [ + ax_cv_$1="n" +], [test "x$enable_$1" = "xyes"], [ + ax_cv_$1="y" +], [test -z $ax_cv_$1], [ + ax_cv_$1="y" +]) +$1=$ax_cv_$1 +AC_SUBST($1)]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/enable_feature.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/enable_feature.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,13 @@ +AC_DEFUN([AX_ARG_ENABLE_AND_EXPORT], +[AC_ARG_ENABLE([$1], + AS_HELP_STRING([--enable-$1], [$2])) + +AS_IF([test "x$enable_$1" = "xyes"], [ + ax_cv_$1="y" +], [test "x$enable_$1" = "xno"], [ + ax_cv_$1="n" +], [test -z $ax_cv_$1], [ + ax_cv_$1="n" +]) +$1=$ax_cv_$1 +AC_SUBST($1)]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/ocaml.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/ocaml.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,241 @@ +dnl autoconf macros for OCaml +dnl from http://forge.ocamlcore.org/ +dnl +dnl Copyright © 2009 Richard W.M. Jones +dnl Copyright © 2009 Stefano Zacchiroli +dnl Copyright © 2000-2005 Olivier Andrieu +dnl Copyright © 2000-2005 Jean-Christophe Filliâtre +dnl Copyright © 2000-2005 Georges Mariano +dnl +dnl For documentation, please read the ocaml.m4 man page. + +AC_DEFUN([AC_PROG_OCAML], +[dnl + # checking for ocamlc + AC_CHECK_TOOL([OCAMLC],[ocamlc],[no]) + + if test "$OCAMLC" != "no"; then + OCAMLVERSION=`$OCAMLC -v | sed -n -e 's|.*version* *\(.*\)$|\1|p'` + AC_MSG_RESULT([OCaml version is $OCAMLVERSION]) + # If OCAMLLIB is set, use it + if test "$OCAMLLIB" = ""; then + OCAMLLIB=`$OCAMLC -where 2>/dev/null || $OCAMLC -v|tail -1|cut -d ' ' -f 4` + else + AC_MSG_RESULT([OCAMLLIB previously set; preserving it.]) + fi + AC_MSG_RESULT([OCaml library path is $OCAMLLIB]) + + AC_SUBST([OCAMLVERSION]) + AC_SUBST([OCAMLLIB]) + + # checking for ocamlopt + AC_CHECK_TOOL([OCAMLOPT],[ocamlopt],[no]) + OCAMLBEST=byte + if test "$OCAMLOPT" = "no"; then + AC_MSG_WARN([Cannot find ocamlopt; bytecode compilation only.]) + else + TMPVERSION=`$OCAMLOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([versions differs from ocamlc; ocamlopt discarded.]) + OCAMLOPT=no + else + OCAMLBEST=opt + fi + fi + + AC_SUBST([OCAMLBEST]) + + # checking for ocamlc.opt + AC_CHECK_TOOL([OCAMLCDOTOPT],[ocamlc.opt],[no]) + if test "$OCAMLCDOTOPT" != "no"; then + TMPVERSION=`$OCAMLCDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([versions differs from ocamlc; ocamlc.opt discarded.]) + else + OCAMLC=$OCAMLCDOTOPT + fi + fi + + # checking for ocamlopt.opt + if test "$OCAMLOPT" != "no" ; then + AC_CHECK_TOOL([OCAMLOPTDOTOPT],[ocamlopt.opt],[no]) + if test "$OCAMLOPTDOTOPT" != "no"; then + TMPVERSION=`$OCAMLOPTDOTOPT -v | sed -n -e 's|.*version* *\(.*\)$|\1|p' ` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([version differs from ocamlc; ocamlopt.opt discarded.]) + else + OCAMLOPT=$OCAMLOPTDOTOPT + fi + fi + fi + + AC_SUBST([OCAMLOPT]) + fi + + AC_SUBST([OCAMLC]) + + # checking for ocaml toplevel + AC_CHECK_TOOL([OCAML],[ocaml],[no]) + + # checking for ocamldep + AC_CHECK_TOOL([OCAMLDEP],[ocamldep],[no]) + + # checking for ocamlmktop + AC_CHECK_TOOL([OCAMLMKTOP],[ocamlmktop],[no]) + + # checking for ocamlmklib + AC_CHECK_TOOL([OCAMLMKLIB],[ocamlmklib],[no]) + + # checking for ocamldoc + AC_CHECK_TOOL([OCAMLDOC],[ocamldoc],[no]) + + # checking for ocamlbuild + AC_CHECK_TOOL([OCAMLBUILD],[ocamlbuild],[no]) +]) + + +AC_DEFUN([AC_PROG_OCAMLLEX], +[dnl + # checking for ocamllex + AC_CHECK_TOOL([OCAMLLEX],[ocamllex],[no]) + if test "$OCAMLLEX" != "no"; then + AC_CHECK_TOOL([OCAMLLEXDOTOPT],[ocamllex.opt],[no]) + if test "$OCAMLLEXDOTOPT" != "no"; then + OCAMLLEX=$OCAMLLEXDOTOPT + fi + fi + AC_SUBST([OCAMLLEX]) +]) + +AC_DEFUN([AC_PROG_OCAMLYACC], +[dnl + AC_CHECK_TOOL([OCAMLYACC],[ocamlyacc],[no]) + AC_SUBST([OCAMLYACC]) +]) + + +AC_DEFUN([AC_PROG_CAMLP4], +[dnl + AC_REQUIRE([AC_PROG_OCAML])dnl + + # checking for camlp4 + AC_CHECK_TOOL([CAMLP4],[camlp4],[no]) + if test "$CAMLP4" != "no"; then + TMPVERSION=`$CAMLP4 -v 2>&1| sed -n -e 's|.*version *\(.*\)$|\1|p'` + if test "$TMPVERSION" != "$OCAMLVERSION" ; then + AC_MSG_RESULT([versions differs from ocamlc]) + CAMLP4=no + fi + fi + AC_SUBST([CAMLP4]) + + # checking for companion tools + AC_CHECK_TOOL([CAMLP4BOOT],[camlp4boot],[no]) + AC_CHECK_TOOL([CAMLP4O],[camlp4o],[no]) + AC_CHECK_TOOL([CAMLP4OF],[camlp4of],[no]) + AC_CHECK_TOOL([CAMLP4OOF],[camlp4oof],[no]) + AC_CHECK_TOOL([CAMLP4ORF],[camlp4orf],[no]) + AC_CHECK_TOOL([CAMLP4PROF],[camlp4prof],[no]) + AC_CHECK_TOOL([CAMLP4R],[camlp4r],[no]) + AC_CHECK_TOOL([CAMLP4RF],[camlp4rf],[no]) + AC_SUBST([CAMLP4BOOT]) + AC_SUBST([CAMLP4O]) + AC_SUBST([CAMLP4OF]) + AC_SUBST([CAMLP4OOF]) + AC_SUBST([CAMLP4ORF]) + AC_SUBST([CAMLP4PROF]) + AC_SUBST([CAMLP4R]) + AC_SUBST([CAMLP4RF]) +]) + + +AC_DEFUN([AC_PROG_FINDLIB], +[dnl + AC_REQUIRE([AC_PROG_OCAML])dnl + + # checking for ocamlfind + AC_CHECK_TOOL([OCAMLFIND],[ocamlfind],[no]) + AC_SUBST([OCAMLFIND]) +]) + + +dnl Thanks to Jim Meyering for working this next bit out for us. +dnl XXX We should define AS_TR_SH if it's not defined already +dnl (eg. for old autoconf). +AC_DEFUN([AC_CHECK_OCAML_PKG], +[dnl + AC_REQUIRE([AC_PROG_FINDLIB])dnl + + AC_MSG_CHECKING([for OCaml findlib package $1]) + + unset found + unset pkg + found=no + for pkg in $1 $2 ; do + if $OCAMLFIND query $pkg >/dev/null 2>/dev/null; then + AC_MSG_RESULT([found]) + AS_TR_SH([OCAML_PKG_$1])=$pkg + found=yes + break + fi + done + if test "$found" = "no" ; then + AC_MSG_RESULT([not found]) + AS_TR_SH([OCAML_PKG_$1])=no + fi + + AC_SUBST(AS_TR_SH([OCAML_PKG_$1])) +]) + + +AC_DEFUN([AC_CHECK_OCAML_MODULE], +[dnl + AC_MSG_CHECKING([for OCaml module $2]) + + cat > conftest.ml <<EOF +open $3 +EOF + unset found + for $1 in $$1 $4 ; do + if $OCAMLC -c -I "$$1" conftest.ml >&5 2>&5 ; then + found=yes + break + fi + done + + if test "$found" ; then + AC_MSG_RESULT([$$1]) + else + AC_MSG_RESULT([not found]) + $1=no + fi + AC_SUBST([$1]) +]) + + +dnl XXX Cross-compiling +AC_DEFUN([AC_CHECK_OCAML_WORD_SIZE], +[dnl + AC_REQUIRE([AC_PROG_OCAML])dnl + AC_MSG_CHECKING([for OCaml compiler word size]) + cat > conftest.ml <<EOF + print_endline (string_of_int Sys.word_size) + EOF + OCAML_WORD_SIZE=`$OCAML conftest.ml` + AC_MSG_RESULT([$OCAML_WORD_SIZE]) + AC_SUBST([OCAML_WORD_SIZE]) +]) + +AC_DEFUN([AC_CHECK_OCAML_OS_TYPE], +[dnl + AC_REQUIRE([AC_PROG_OCAML])dnl + AC_MSG_CHECKING([OCaml Sys.os_type]) + + cat > conftest.ml <<EOF + print_string(Sys.os_type);; +EOF + + OCAML_OS_TYPE=`$OCAML conftest.ml` + AC_MSG_RESULT([$OCAML_OS_TYPE]) + AC_SUBST([OCAML_OS_TYPE]) +]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/path_or_fail.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/path_or_fail.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,6 @@ +AC_DEFUN([AX_PATH_PROG_OR_FAIL], +[AC_PATH_PROG([$1], [$2], [no]) +if test x"${$1}" == x"no" +then + AC_MSG_ERROR([Unable to find $2, please install $2]) +fi]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/python_devel.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/python_devel.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,18 @@ +AC_DEFUN([AX_CHECK_PYTHON_DEVEL], +[AC_MSG_CHECKING([for python devel]) + +`$PYTHON -c ' +import os.path, sys +for p in sys.path: + if os.path.exists(p + "/config/Makefile"): + sys.exit(0) +sys.exit(1) +' > /dev/null 2>&1` + +if test "$?" != "0" +then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Python devel package not found]) +else + AC_MSG_RESULT([yes]) +fi]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/python_version.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/python_version.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,12 @@ +AC_DEFUN([AX_CHECK_PYTHON_VERSION], +[AC_MSG_CHECKING([for python version >= $1.$2 ]) +`$PYTHON -c 'import sys; exit(eval("sys.version_info < ($1, $2)"))'` +if test "$?" != "0" +then + python_version=`$PYTHON -V 2>&1` + AC_MSG_RESULT([no]) + AC_MSG_ERROR( + [$python_version is too old, minimum required version is $1.$2]) +else + AC_MSG_RESULT([yes]) +fi]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/python_xml.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/python_xml.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,10 @@ +AC_DEFUN([AX_CHECK_PYTHON_XML], +[AC_MSG_CHECKING([for python xml.dom.minidom]) +`$PYTHON -c 'import xml.dom.minidom'` +if test "$?" != "0" +then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Unable to find xml.dom.minidom module]) +else + AC_MSG_RESULT([yes]) +fi]) diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/set_cflags_ldflags.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/set_cflags_ldflags.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,20 @@ +AC_DEFUN([AX_SET_FLAGS], +[for cflag in $PREPEND_INCLUDES +do + PREPEND_CFLAGS+=" -I$cflag" +done +for ldflag in $PREPEND_LIB +do + PREPEND_LDFLAGS+=" -L$ldflag" +done +for cflag in $APPEND_INCLUDES +do + APPEND_CFLAGS+=" -I$cflag" +done +for ldflag in $APPEND_LIB +do + APPEND_LDFLAGS+=" -L$ldflag" +done +CFLAGS="$PREPEND_CFLAGS $CFLAGS $APPEND_CFLAGS" +LDFLAGS="$PREPEND_LDFLAGS $LDFLAGS $APPEND_LDFLAGS"]) + diff -r 4086e4811547 -r 7d90cbdca2c2 tools/m4/udev.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/m4/udev.m4 Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,32 @@ +AC_DEFUN([AX_CHECK_UDEV], +[if test "`uname -s`" == "Linux" +then + AC_PATH_PROG([UDEVADM], [udevadm], [no]) + if test x"${UDEVADM}" == x"no" + then + AC_PATH_PROG([UDEVINFO], [udevinfo], [no]) + if test x"${UDEVINFO}" == x"no" + then + AC_MSG_ERROR( + [Unable to find udevadm or udevinfo, please install udev]) + fi + udevver=`${UDEVINFO} -V | awk '{print $NF}'` + else + udevver=`${UDEVADM} info -V | awk '{print $NF}'` + fi + if test ${udevver} -lt 59 + then + AC_PATH_PROG([HOTPLUG], [hotplug], [no]) + if test x"${HOTPLUG}" == x"no" + then + AC_MSG_ERROR([udev is too old, upgrade to version 59 or later]) + fi + fi +else + AC_PATH_PROG([VNCONFIG], [vnconfig], [no]) + if test x"${VNCONFIG}" == x"no" + then + AC_MSG_ERROR([Not a Linux system and unable to find vnd]) + fi +fi +]) diff -r 4086e4811547 -r 7d90cbdca2c2 version.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/version.sh Mon Jan 09 21:33:52 2012 +0100 @@ -0,0 +1,4 @@ +#!/bin/sh +MAJOR=`grep "export XEN_VERSION" $1 | sed 's/.*=//g' | tr -s " "` +MINOR=`grep "export XEN_SUBVERSION" $1 | sed 's/.*=//g' | tr -s " "` +printf "%d.%d" $MAJOR $MINOR _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2012-Jan-10 13:19 UTC
Re: [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
>>> On 09.01.12 at 21:37, Roger Pau Monne <roger.pau@entel.upc.edu> wrote: > --- a/README Thu Jan 05 17:25:23 2012 +0000 > +++ b/README Mon Jan 09 21:33:52 2012 +0100 > @@ -41,6 +41,7 @@ provided by your OS distributor: > * GCC v3.4 or later > * GNU Make > * GNU Binutils > + * GNU Autoconf v2.67 or laterI think Ian had asked this already, but I also think that I didn''t see an answer: Is this relatively new version really a requirement. Not even SLE11 SP2, which hasn''t shipped yet, has this new an autoconf package. And I would hope to continue to be able to build on SLE10 SP4, which only has 2.59, without having to manually build newer packages...> * Development install of zlib (e.g., zlib-dev) > * Development install of Python v2.3 or later (e.g., python-dev) > * Development install of curses (e.g., libncurses-dev) > @@ -87,9 +88,21 @@ 2. cd to xen-unstable (or whatever you s > 3. For the very first build, or if you want to destroy build trees, > perform the following steps: > > + If you are building Xen from a repository (git or mercurial) you > + must run: > + > + # ./autogen.sh > + > + Before executing ./configure (this step can be ommited when > + building from a distribution package). > + > + # ./configureCan these two steps be automated (i.e. the need to run either be determined by the absence of some file(s), and them being invoked from the top level Makefile)?> # make world > # make install > > + If you want, you can run ./configure --help to see the list of > + options available options when building and installing Xen. > + > This will create and install onto the local machine. It will build > the xen binary (xen.gz), the tools and the documentation. > > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/autogen.sh Mon Jan 09 21:33:52 2012 +0100 > @@ -0,0 +1,11 @@ > +#!/bin/shAdding -e here ...> +rm -rf configure > +cd tools > +autoheader && autoconf > +if [ "$?" = "0" ] > +then... would eliminate the need for this conditional ...> + cd .. > + echo "#!/bin/sh" >> configure > + echo "cd tools && ./configure \$@" >> configure > + chmod +x configure... and catch failure anywhere here.> +fi > --- a/tools/Rules.mk Thu Jan 05 17:25:23 2012 +0000 > +++ b/tools/Rules.mk Mon Jan 09 21:33:52 2012 +0100 > @@ -3,6 +3,7 @@ > # `all'' is the default target > all: > > +include $(XEN_ROOT)/config/Tools.mk > include $(XEN_ROOT)/Config.mkWouldn''t the order better be the other way around (generic before subdir specific)?> > export _INSTALL := $(INSTALL)Jan
Roger Pau Monné
2012-Jan-10 13:32 UTC
Re: [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
2012/1/10 Jan Beulich <JBeulich@suse.com>:>>>> On 09.01.12 at 21:37, Roger Pau Monne <roger.pau@entel.upc.edu> wrote: >> --- a/README Thu Jan 05 17:25:23 2012 +0000 >> +++ b/README Mon Jan 09 21:33:52 2012 +0100 >> @@ -41,6 +41,7 @@ provided by your OS distributor: >> * GCC v3.4 or later >> * GNU Make >> * GNU Binutils >> + * GNU Autoconf v2.67 or later > > I think Ian had asked this already, but I also think that I didn't see > an answer: Is this relatively new version really a requirement. Not > even SLE11 SP2, which hasn't shipped yet, has this new an > autoconf package. And I would hope to continue to be able to > build on SLE10 SP4, which only has 2.59, without having to > manually build newer packages...I've only tested this with 2.68 and 2.67, I *guess* it will work with 2.59, but it will be good if you could run the script and prove that it actually does. We agreed with Ian that version will be downgraded based on user-feedback.> >> * Development install of zlib (e.g., zlib-dev) >> * Development install of Python v2.3 or later (e.g., python-dev) >> * Development install of curses (e.g., libncurses-dev) >> @@ -87,9 +88,21 @@ 2. cd to xen-unstable (or whatever you s >> 3. For the very first build, or if you want to destroy build trees, >> perform the following steps: >> >> + If you are building Xen from a repository (git or mercurial) you >> + must run: >> + >> + # ./autogen.sh >> + >> + Before executing ./configure (this step can be ommited when >> + building from a distribution package). >> + >> + # ./configure > > Can these two steps be automated (i.e. the need to run either > be determined by the absence of some file(s), and them being > invoked from the top level Makefile)?It probably could, just making a target for config.h in tools/Makefile. Are you sure this is what we want? The configure script has several build options that should be set by the user (or at least reviewed, so the user know it has build/install options).> >> # make world >> # make install >> >> + If you want, you can run ./configure --help to see the list of >> + options available options when building and installing Xen. >> + >> This will create and install onto the local machine. It will build >> the xen binary (xen.gz), the tools and the documentation. >> >> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 >> +++ b/autogen.sh Mon Jan 09 21:33:52 2012 +0100 >> @@ -0,0 +1,11 @@ >> +#!/bin/sh > > Adding -e here ... > >> +rm -rf configure >> +cd tools >> +autoheader && autoconf >> +if [ "$?" = "0" ] >> +then > > ... would eliminate the need for this conditional ... > >> + cd .. >> + echo "#!/bin/sh" >> configure >> + echo "cd tools && ./configure \$@" >> configure >> + chmod +x configure > > ... and catch failure anywhere here.Will change that.> >> +fi >> --- a/tools/Rules.mk Thu Jan 05 17:25:23 2012 +0000 >> +++ b/tools/Rules.mk Mon Jan 09 21:33:52 2012 +0100 >> @@ -3,6 +3,7 @@ >> # `all' is the default target >> all: >> >> +include $(XEN_ROOT)/config/Tools.mk >> include $(XEN_ROOT)/Config.mk > > Wouldn't the order better be the other way around (generic before > subdir specific)?Since Config.mk uses ?= when setting variables, I don't think it really matters (the only variable that could be overwritten by Config.mk is PYTHON, and it is set with ?= in Config.mk), anyway, I will change it.> >> >> export _INSTALL := $(INSTALL) > > Jan >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2012-Jan-10 15:16 UTC
Re: [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
>>> On 10.01.12 at 14:32, Roger Pau Monné<roger.pau@entel.upc.edu> wrote: > 2012/1/10 Jan Beulich <JBeulich@suse.com>: >>>>> On 09.01.12 at 21:37, Roger Pau Monne <roger.pau@entel.upc.edu> wrote: >>> @@ -87,9 +88,21 @@ 2. cd to xen-unstable (or whatever you s >>> 3. For the very first build, or if you want to destroy build trees, >>> perform the following steps: >>> >>> + If you are building Xen from a repository (git or mercurial) you >>> + must run: >>> + >>> + # ./autogen.sh >>> + >>> + Before executing ./configure (this step can be ommited when >>> + building from a distribution package). >>> + >>> + # ./configure >> >> Can these two steps be automated (i.e. the need to run either >> be determined by the absence of some file(s), and them being >> invoked from the top level Makefile)? > > It probably could, just making a target for config.h in > tools/Makefile. Are you sure this is what we want? The configure > script has several build options that should be set by the user (or at > least reviewed, so the user know it has build/install options).Let's see what other want; my thinking is that if one didn't care to run ./configure manually, default settings are intended. That's what an invocation without arguments should result in, without any user interaction. Jan _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Jackson
2012-Jan-10 17:25 UTC
Re: [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
Jan Beulich writes ("Re: [Xen-devel] [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check"):> I think Ian had asked this already, but I also think that I didn''t see > an answer: Is this relatively new version really a requirement. Not > even SLE11 SP2, which hasn''t shipped yet, has this new an > autoconf package. And I would hope to continue to be able to > build on SLE10 SP4, which only has 2.59, without having to > manually build newer packages...Indeed. There are two parts to the answer: * Firstly, an older autoconf should do fine. I think we should aim to be compatible with autoconf 2.59 certainly. * Secondly, autoconf should not be added to the build dependencies. Instead, we should check in the autoconf-generated files.> > + # ./autogen.sh > > + > > + Before executing ./configure (this step can be ommited when > > + building from a distribution package). > > + > > + # ./configure > > Can these two steps be automated (i.e. the need to run either > be determined by the absence of some file(s), and them being > invoked from the top level Makefile)?Automating this turns out to be very annoying. If the autoconfery is checked in then running autogen.sh is not necessary. The usual approach is then to simply ./configure make make install Ian.
Ian Jackson
2012-Jan-10 17:27 UTC
Re: [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
Jan Beulich writes ("Re: [Xen-devel] [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check"):> Let''s see what other want; my thinking is that if one didn''t care to > run ./configure manually, default settings are intended. That''s > what an invocation without arguments should result in, without > any user interaction.I don''t think running configure automatically is at all desirable. Ian.
Jan Beulich
2012-Jan-10 17:37 UTC
Re: [PATCH RFC v2] build: add autoconf to replace custom checks in tools/check
>>> On 10.01.12 at 18:27, Ian Jackson <Ian.Jackson@eu.citrix.com> wrote: > Jan Beulich writes ("Re: [Xen-devel] [PATCH RFC v2] build: add autoconf to > replace custom checks in tools/check"): >> Let''s see what other want; my thinking is that if one didn''t care to >> run ./configure manually, default settings are intended. That''s >> what an invocation without arguments should result in, without >> any user interaction. > > I don''t think running configure automatically is at all desirable.I can certainly put the invocation of it into the script I''m using to build fresh trees, but I''m still curious why you think this is such a bad idea. The usual situation - needing a Makefile to be generated to have something to run make on - isn''t the case here. Jan