Mailing List Archive

[PATCH RFC] build: add autoconf to replace custom checks in tools/check
# HG changeset patch
# User Roger Pau Monne <roger.pau@entel.upc.edu>
# Date 1325906230 -3600
# Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
# 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.

Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>

diff -r 4086e4811547 -r e12ec1071410 Config.mk
--- a/Config.mk Thu Jan 05 17:25:23 2012 +0000
+++ b/Config.mk Sat Jan 07 04:17:10 2012 +0100
@@ -9,8 +9,6 @@ realpath = $(wildcard $(foreach file,$(1

-include $(XEN_ROOT)/.config

-# A debug build of Xen and tools?
-debug ?= y

XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
-e s/i86pc/x86_32/ -e s/amd64/x86_64/)
@@ -43,6 +41,7 @@ endif

include $(XEN_ROOT)/config/$(XEN_OS).mk
include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
+include $(XEN_ROOT)/config/Autoconf.mk

SHAREDIR ?= $(PREFIX)/share
DOCDIR ?= $(SHAREDIR)/doc/xen
@@ -70,10 +69,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
# to permit the user to set PYTHON_PREFIX_ARG to '' to workaround this bug:
@@ -175,22 +170,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 +204,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 e12ec1071410 Makefile
--- a/Makefile Thu Jan 05 17:25:23 2012 +0000
+++ b/Makefile Sat Jan 07 04:17:10 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 e12ec1071410 README
--- a/README Thu Jan 05 17:25:23 2012 +0000
+++ b/README Sat Jan 07 04:17:10 2012 +0100
@@ -87,9 +87,15 @@ 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:

+ # automake -a
+ # autoheader && autoconf
+ # ./configure
# make world
# make install

+ If you want, you can run ./configure --help to see the list of
+ optins 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 e12ec1071410 config/Autoconf.mk.in
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/config/Autoconf.mk.in Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,49 @@
+# Prefix and install folder
+PREFIX := @prefix@
+LIBLEAFDIR_x86_64 := @LIB_PATH@
+
+# A debug build of Xen and tools?
+debug := @debug@
+
+# Tools path
+BISON := @BISON@
+FLEX := @FLEX@
+PYTHON := @PYTHON@
+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 e12ec1071410 configure.ac
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/configure.ac Sat Jan 07 04:17:10 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], [4.2], [xen-devel@lists.xensource.com])
+AC_CONFIG_SRCDIR([tools/libxl/libxl.c])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([config/Autoconf.mk])
+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
+AC_CANONICAL_HOST
+
+# 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 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"], [
+ AC_MSG_ERROR([You must install the OCaml compiler])
+ ])
+])
+AX_PATH_PROG_OR_FAIL([BASH], [bash])
+AS_IF([test "x$pythontools" = "xy"], [
+ AX_PATH_PROG_OR_FAIL([PYTHON], [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)
+
+# 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_MALLOC
+AC_FUNC_MKTIME
+AC_FUNC_MMAP
+AC_FUNC_REALLOC
+AC_FUNC_STRNLEN
+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 e12ec1071410 m4/default_lib.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/default_lib.m4 Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,7 @@
+AC_DEFUN([AX_DEFAULT_LIB],
+[AS_IF([test -d "$prefix/lib64"], [
+ LIB_PATH="lib64"
+],[
+ LIB_PATH="lib"
+])
+AC_SUBST(LIB_PATH)])
\ No newline at end of file
diff -r 4086e4811547 -r e12ec1071410 m4/disable_feature.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/disable_feature.m4 Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,10 @@
+AC_DEFUN([AX_ARG_DISABLE_AND_EXPORT],
+[AC_ARG_ENABLE([$1],
+ AS_HELP_STRING([--disable-$1], [$2]))
+
+AS_IF([test "x$enable_$1" = "xno"], [
+ $1="n"
+],[
+ $1="y"
+])
+AC_SUBST($1)])
\ No newline at end of file
diff -r 4086e4811547 -r e12ec1071410 m4/enable_feature.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/enable_feature.m4 Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,10 @@
+AC_DEFUN([AX_ARG_ENABLE_AND_EXPORT],
+[AC_ARG_ENABLE([$1],
+ AS_HELP_STRING([--enable-$1], [$2]))
+
+AS_IF([test "x$enable_$1" = "xyes"], [
+ $1="y"
+],[
+ $1="n"
+])
+AC_SUBST($1)])
\ No newline at end of file
diff -r 4086e4811547 -r e12ec1071410 m4/ocaml.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/ocaml.m4 Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,240 @@
+dnl autoconf macros for OCaml
+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 e12ec1071410 m4/path_or_fail.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/path_or_fail.m4 Sat Jan 07 04:17:10 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 e12ec1071410 m4/python_devel.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/python_devel.m4 Sat Jan 07 04:17:10 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 e12ec1071410 m4/python_version.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/python_version.m4 Sat Jan 07 04:17:10 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 e12ec1071410 m4/python_xml.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/python_xml.m4 Sat Jan 07 04:17:10 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 e12ec1071410 m4/set_cflags_ldflags.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/set_cflags_ldflags.m4 Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,19 @@
+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"])
\ No newline at end of file
diff -r 4086e4811547 -r e12ec1071410 m4/udev.m4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/m4/udev.m4 Sat Jan 07 04:17:10 2012 +0100
@@ -0,0 +1,32 @@
+AC_DEFUN([AX_CHECK_UDEV],
+[if test "$host_os" == "linux-gnu"
+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 e12ec1071410 tools/Makefile
--- a/tools/Makefile Thu Jan 05 17:25:23 2012 +0000
+++ b/tools/Makefile Sat Jan 07 04:17:10 2012 +0100
@@ -6,7 +6,6 @@ SUBDIRS-libaio := libaio
endif

SUBDIRS-y :=
-SUBDIRS-y += check
SUBDIRS-y += include
SUBDIRS-y += libxc
SUBDIRS-y += flask
diff -r 4086e4811547 -r e12ec1071410 tools/blktap/drivers/Makefile
--- a/tools/blktap/drivers/Makefile Thu Jan 05 17:25:23 2012 +0000
+++ b/tools/blktap/drivers/Makefile Sat Jan 07 04:17:10 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 e12ec1071410 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 Sat Jan 07 04:17:10 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 e12ec1071410 tools/libfsimage/Makefile
--- a/tools/libfsimage/Makefile Thu Jan 05 17:25:23 2012 +0000
+++ b/tools/libfsimage/Makefile Sat Jan 07 04:17:10 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 e12ec1071410 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 e12ec1071410 tools/libxen/Makefile
--- a/tools/libxen/Makefile Thu Jan 05 17:25:23 2012 +0000
+++ b/tools/libxen/Makefile Sat Jan 07 04:17:10 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))
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
>>> On 07.01.12 at 04:20, Roger Pau Monne <roger.pau@entel.upc.edu> wrote:
> # HG changeset patch
> # User Roger Pau Monne <roger.pau@entel.upc.edu>
> # Date 1325906230 -3600
> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
> # 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.
>
> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>
> diff -r 4086e4811547 -r e12ec1071410 Config.mk
> --- a/Config.mk Thu Jan 05 17:25:23 2012 +0000
> +++ b/Config.mk Sat Jan 07 04:17:10 2012 +0100
> @@ -9,8 +9,6 @@ realpath = $(wildcard $(foreach file,$(1
>
> -include $(XEN_ROOT)/.config
>
> -# A debug build of Xen and tools?
> -debug ?= y

I think this should be kept here (possibly override-able by the autoconf
determined setting, i.e. it may need moving past the inclusion below).

>
> XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
> -e s/i86pc/x86_32/ -e s/amd64/x86_64/)
> @@ -43,6 +41,7 @@ endif
>
> include $(XEN_ROOT)/config/$(XEN_OS).mk
> include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
> +include $(XEN_ROOT)/config/Autoconf.mk

And I would really like to avoid having hypervisor (and perhaps
also stubdom) builds to require running the autoconfig thing
first - this ought to be limited to the tools (as were the check
scripts).

Jan

> SHAREDIR ?= $(PREFIX)/share
> DOCDIR ?= $(SHAREDIR)/doc/xen



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
2012/1/9 Jan Beulich <JBeulich@suse.com>:
>>>> On 07.01.12 at 04:20, Roger Pau Monne <roger.pau@entel.upc.edu> wrote:
>> # HG changeset patch
>> # User Roger Pau Monne <roger.pau@entel.upc.edu>
>> # Date 1325906230 -3600
>> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
>> # 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.
>>
>> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>>
>> diff -r 4086e4811547 -r e12ec1071410 Config.mk
>> --- a/Config.mk       Thu Jan 05 17:25:23 2012 +0000
>> +++ b/Config.mk       Sat Jan 07 04:17:10 2012 +0100
>> @@ -9,8 +9,6 @@ realpath = $(wildcard $(foreach file,$(1
>>
>>  -include $(XEN_ROOT)/.config
>>
>> -# A debug build of Xen and tools?
>> -debug ?= y
>
> I think this should be kept here (possibly override-able by the autoconf
> determined setting, i.e. it may need moving past the inclusion below).
>
>>
>>  XEN_COMPILE_ARCH    ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
>>                           -e s/i86pc/x86_32/ -e s/amd64/x86_64/)
>> @@ -43,6 +41,7 @@ endif
>>
>>  include $(XEN_ROOT)/config/$(XEN_OS).mk
>>  include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
>> +include $(XEN_ROOT)/config/Autoconf.mk
>
> And I would really like to avoid having hypervisor (and perhaps
> also stubdom) builds to require running the autoconfig thing
> first - this ought to be limited to the tools (as were the check
> scripts).


Doing something like this is probably more suitable:

diff -r e12ec1071410 tools/Makefile
--- a/tools/Makefile Sat Jan 07 04:17:10 2012 +0100
+++ b/tools/Makefile Sat Jan 07 06:46:55 2012 +0100
@@ -1,4 +1,5 @@
XEN_ROOT = $(CURDIR)/..
+include $(XEN_ROOT)/config/Autoconf.mk
include $(XEN_ROOT)/tools/Rules.mk

ifneq ($(CONFIG_SYSTEM_LIBAIO),y)

Also, I'm having some trouble with automake, I just want it to
generate config.sub and related files, but it keeps trying to parse
Makefile.am, and I don't know how to disable that. Someone with
experience on autotools can shed some light on this?

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
>>> On 09.01.12 at 12:06, Roger Pau Monné<roger.pau@entel.upc.edu> wrote:
> 2012/1/9 Jan Beulich <JBeulich@suse.com>:
>>>>> On 07.01.12 at 04:20, Roger Pau Monne <roger.pau@entel.upc.edu> wrote:
>>> # HG changeset patch
>>> # User Roger Pau Monne <roger.pau@entel.upc.edu>
>>> # Date 1325906230 -3600
>>> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
>>> # 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.
>>>
>>> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>>>
>>> diff -r 4086e4811547 -r e12ec1071410 Config.mk
>>> --- a/Config.mk Thu Jan 05 17:25:23 2012 +0000
>>> +++ b/Config.mk Sat Jan 07 04:17:10 2012 +0100
>>> @@ -9,8 +9,6 @@ realpath = $(wildcard $(foreach file,$(1
>>>
>>> -include $(XEN_ROOT)/.config
>>>
>>> -# A debug build of Xen and tools?
>>> -debug ?= y
>>
>> I think this should be kept here (possibly override-able by the autoconf
>> determined setting, i.e. it may need moving past the inclusion below).
>>
>>>
>>> XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
>>> -e s/i86pc/x86_32/ -e s/amd64/x86_64/)
>>> @@ -43,6 +41,7 @@ endif
>>>
>>> include $(XEN_ROOT)/config/$(XEN_OS).mk
>>> include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
>>> +include $(XEN_ROOT)/config/Autoconf.mk
>>
>> And I would really like to avoid having hypervisor (and perhaps
>> also stubdom) builds to require running the autoconfig thing
>> first - this ought to be limited to the tools (as were the check
>> scripts).
>
>
> Doing something like this is probably more suitable:
>
> diff -r e12ec1071410 tools/Makefile
> --- a/tools/Makefile Sat Jan 07 04:17:10 2012 +0100
> +++ b/tools/Makefile Sat Jan 07 06:46:55 2012 +0100
> @@ -1,4 +1,5 @@
> XEN_ROOT = $(CURDIR)/..
> +include $(XEN_ROOT)/config/Autoconf.mk
> include $(XEN_ROOT)/tools/Rules.mk
>
> ifneq ($(CONFIG_SYSTEM_LIBAIO),y)

Yes, please. Of course, the question then is whether it shouldn't
really be tools/Autoconf.mk (and whether perhaps the whole set
of new files should also be rooted under tools/ rather than at
$(XEN_ROOT)/).

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
2012/1/9 Jan Beulich <JBeulich@suse.com>:
>>>> On 09.01.12 at 12:06, Roger Pau Monné<roger.pau@entel.upc.edu> wrote:
>> 2012/1/9 Jan Beulich <JBeulich@suse.com>:
>>>>>> On 07.01.12 at 04:20, Roger Pau Monne <roger.pau@entel.upc.edu> wrote:
>>>> # HG changeset patch
>>>> # User Roger Pau Monne <roger.pau@entel.upc.edu>
>>>> # Date 1325906230 -3600
>>>> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
>>>> # 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.
>>>>
>>>> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>>>>
>>>> diff -r 4086e4811547 -r e12ec1071410 Config.mk
>>>> --- a/Config.mk       Thu Jan 05 17:25:23 2012 +0000
>>>> +++ b/Config.mk       Sat Jan 07 04:17:10 2012 +0100
>>>> @@ -9,8 +9,6 @@ realpath = $(wildcard $(foreach file,$(1
>>>>
>>>>  -include $(XEN_ROOT)/.config
>>>>
>>>> -# A debug build of Xen and tools?
>>>> -debug ?= y
>>>
>>> I think this should be kept here (possibly override-able by the autoconf
>>> determined setting, i.e. it may need moving past the inclusion below).
>>>
>>>>
>>>>  XEN_COMPILE_ARCH    ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
>>>>                           -e s/i86pc/x86_32/ -e s/amd64/x86_64/)
>>>> @@ -43,6 +41,7 @@ endif
>>>>
>>>>  include $(XEN_ROOT)/config/$(XEN_OS).mk
>>>>  include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
>>>> +include $(XEN_ROOT)/config/Autoconf.mk
>>>
>>> And I would really like to avoid having hypervisor (and perhaps
>>> also stubdom) builds to require running the autoconfig thing
>>> first - this ought to be limited to the tools (as were the check
>>> scripts).
>>
>>
>> Doing something like this is probably more suitable:
>>
>> diff -r e12ec1071410 tools/Makefile
>> --- a/tools/Makefile  Sat Jan 07 04:17:10 2012 +0100
>> +++ b/tools/Makefile  Sat Jan 07 06:46:55 2012 +0100
>> @@ -1,4 +1,5 @@
>>  XEN_ROOT = $(CURDIR)/..
>> +include $(XEN_ROOT)/config/Autoconf.mk
>>  include $(XEN_ROOT)/tools/Rules.mk
>>
>>  ifneq ($(CONFIG_SYSTEM_LIBAIO),y)
>
> Yes, please. Of course, the question then is whether it shouldn't
> really be tools/Autoconf.mk (and whether perhaps the whole set
> of new files should also be rooted under tools/ rather than at
> $(XEN_ROOT)/).

I think it's more common to find a configure script in the root folder
of the package rather than having to search for it under some folder.
Also I prefer to rename config/Autoconf.mk to config/Tools.mk than to
place it inside tools/.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
On Sat, 2012-01-07 at 03:20 +0000, Roger Pau Monne wrote:
> # HG changeset patch
> # User Roger Pau Monne <roger.pau@entel.upc.edu>
> # Date 1325906230 -3600
> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
> # 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.
>
> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>

I would have expected to see an update to the clean/distclean rules
and .hgignore due to all the new generated files.

> diff -r 4086e4811547 -r e12ec1071410 README
> --- a/README Thu Jan 05 17:25:23 2012 +0000
> +++ b/README Sat Jan 07 04:17:10 2012 +0100
> @@ -87,9 +87,15 @@ 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:
>
> + # automake -a

We aren't using automake though? Perhaps this explains your problem with
things alwyas trying to use Makefile.am?

> + # autoheader && autoconf

What does autoheader do? This should be clearly noted as being only
necessary if building from hg and not if you are building from tarball.
I expect we also need some makefile runes or process updates to make
sure the generated stuff gets included in the tarball.

You need to add the relevant packages to the list of build requirements.

> + # ./configure
> # make world
> # make install
>
> + If you want, you can run ./configure --help to see the list of
> + optins available options when building and installing Xen.

options

> +
> 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 e12ec1071410 config/Autoconf.mk.in
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/config/Autoconf.mk.in Sat Jan 07 04:17:10 2012 +0100
> @@ -0,0 +1,49 @@
> +# Prefix and install folder
> +PREFIX := @prefix@
> +LIBLEAFDIR_x86_64 := @LIB_PATH@
> +
> +# A debug build of Xen and tools?
> +debug := @debug@
> +
> +# Tools path
> +BISON := @BISON@
> +FLEX := @FLEX@
> +PYTHON := @PYTHON@
> +PERL := @PERL@
> +BRCTL := @BRCTL@
> +IP := @IP@
> +CURL-CONFIG := @CURL@

Are hyphens ok in make variables?

> +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 e12ec1071410 configure.ac
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/configure.ac Sat Jan 07 04:17:10 2012 +0100
> @@ -0,0 +1,179 @@
> +# -*- Autoconf -*-
> +# Process this file with autoconf to produce a configure script.
> +
> +AC_PREREQ([2.67])

This is the version in Debian stable which is my rule of thumb for how
far back to support things as a minimum.

However do we rely on features of 2.67 or could we go older if someone
has an older version?

> +AC_INIT([Xen Hypervisor], [4.2], [xen-devel@lists.xensource.com])

Ideally the 4.2 would not be duplicated both here and in xen/Makefile.
I'm not sure how this can be resolved without conflicting with Jan's
(quite reasonable) desire not to need ./configure for the hypervisor.

I suppose it must be possible via the magic of m4 to pull out the
version from the Makefile and include it here.

I didn't review all the tests in detail, I presume we'll end up having
to find a bunch of those errors via testing anywhere.

Does the set of tests here precisely equal those currently done by
tools/check (or elsewhere) or did you add more as you went? It might
have been better for review to present this as a basic infrastructure
patch, the conversion of each test individually as a patch each and
lastly any new tests etc so we could easily review. But I think it's a
bit late now and there's no point splitting this patch up now you've got
it.

> +AC_CONFIG_SRCDIR([tools/libxl/libxl.c])
> +AC_CONFIG_HEADERS([config.h])
> +AC_CONFIG_FILES([config/Autoconf.mk])
> +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
> +AC_CANONICAL_HOST
> +
> +# 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)])

Does this macro include support for reading from config.cache as well as
the cmdline option?

[...]
> +AS_IF([test "x$ocamltools" = "xy"], [
> + AC_PROG_OCAML
> + AS_IF([test "x$OCAMLC" = "xno"], [
> + AC_MSG_ERROR([You must install the OCaml compiler])

ocaml was previously optional, I think.

[...]
> +
> +# 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

There's no AC_TYPE_STDINT or similar?

> +AC_TYPE_MODE_T
> +AC_TYPE_OFF_T
> +AC_TYPE_PID_T
> +AC_C_RESTRICT
> +AC_TYPE_SIZE_T
> +AC_TYPE_SSIZE_T

Is there not some umbrella test for these sorts of very standard things,
e.g. AC_POSIX or something like that?

> +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_MALLOC
> +AC_FUNC_MKTIME
> +AC_FUNC_MMAP
> +AC_FUNC_REALLOC
> +AC_FUNC_STRNLEN
> +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 e12ec1071410 m4/default_lib.m4
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/m4/default_lib.m4 Sat Jan 07 04:17:10 2012 +0100
> @@ -0,0 +1,7 @@
> +AC_DEFUN([AX_DEFAULT_LIB],
> +[AS_IF([test -d "$prefix/lib64"], [
> + LIB_PATH="lib64"
> +],[
> + LIB_PATH="lib"
> +])
> +AC_SUBST(LIB_PATH)])

Does this get exposed via config.cache and/or the command line? It
should be.

Did you write m4/* from scratch or did they come from some snippet
library?

Isn't the management of these snippets the sort of thing aclocal does
for you?

> \ No newline at end of file

Might this newline be significant in a macro expansion library? I think
it's good practice to include it anyway (here and elsewhere).

[...]
> diff -r 4086e4811547 -r e12ec1071410 m4/ocaml.m4
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/m4/ocaml.m4 Sat Jan 07 04:17:10 2012 +0100
> @@ -0,0 +1,240 @@
> +dnl autoconf macros for OCaml

Please add a comment describing where this came from so we know how to
update in the future.

Shouldn't/couldn't this be provided by the ocaml packages and just
included by us?

[...]

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
>>> On 09.01.12 at 12:40, Roger Pau Monné<roger.pau@entel.upc.edu> wrote:
> 2012/1/9 Jan Beulich <JBeulich@suse.com>:
>>>>> On 09.01.12 at 12:06, Roger Pau Monné<roger.pau@entel.upc.edu> wrote:
>>> 2012/1/9 Jan Beulich <JBeulich@suse.com>:
>>>>>>> On 07.01.12 at 04:20, Roger Pau Monne <roger.pau@entel.upc.edu> wrote:
>>>>> # HG changeset patch
>>>>> # User Roger Pau Monne <roger.pau@entel.upc.edu>
>>>>> # Date 1325906230 -3600
>>>>> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
>>>>> # 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.
>>>>>
>>>>> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>>>>>
>>>>> diff -r 4086e4811547 -r e12ec1071410 Config.mk
>>>>> --- a/Config.mk Thu Jan 05 17:25:23 2012 +0000
>>>>> +++ b/Config.mk Sat Jan 07 04:17:10 2012 +0100
>>>>> @@ -9,8 +9,6 @@ realpath = $(wildcard $(foreach file,$(1
>>>>>
>>>>> -include $(XEN_ROOT)/.config
>>>>>
>>>>> -# A debug build of Xen and tools?
>>>>> -debug ?= y
>>>>
>>>> I think this should be kept here (possibly override-able by the autoconf
>>>> determined setting, i.e. it may need moving past the inclusion below).
>>>>
>>>>>
>>>>> XEN_COMPILE_ARCH ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
>>>>> -e s/i86pc/x86_32/ -e s/amd64/x86_64/)
>>>>> @@ -43,6 +41,7 @@ endif
>>>>>
>>>>> include $(XEN_ROOT)/config/$(XEN_OS).mk
>>>>> include $(XEN_ROOT)/config/$(XEN_TARGET_ARCH).mk
>>>>> +include $(XEN_ROOT)/config/Autoconf.mk
>>>>
>>>> And I would really like to avoid having hypervisor (and perhaps
>>>> also stubdom) builds to require running the autoconfig thing
>>>> first - this ought to be limited to the tools (as were the check
>>>> scripts).
>>>
>>>
>>> Doing something like this is probably more suitable:
>>>
>>> diff -r e12ec1071410 tools/Makefile
>>> --- a/tools/Makefile Sat Jan 07 04:17:10 2012 +0100
>>> +++ b/tools/Makefile Sat Jan 07 06:46:55 2012 +0100
>>> @@ -1,4 +1,5 @@
>>> XEN_ROOT = $(CURDIR)/..
>>> +include $(XEN_ROOT)/config/Autoconf.mk
>>> include $(XEN_ROOT)/tools/Rules.mk
>>>
>>> ifneq ($(CONFIG_SYSTEM_LIBAIO),y)
>>
>> Yes, please. Of course, the question then is whether it shouldn't
>> really be tools/Autoconf.mk (and whether perhaps the whole set
>> of new files should also be rooted under tools/ rather than at
>> $(XEN_ROOT)/).
>
> I think it's more common to find a configure script in the root folder
> of the package rather than having to search for it under some folder.
> Also I prefer to rename config/Autoconf.mk to config/Tools.mk than to
> place it inside tools/.

Having a ./configure at the root is certainly fine, just that it should
then be a simple wrapper around the individual subtree scripts (where
they exist), just like the top level Makefile just controls the invocation
of subtree makes.

Unless there is really meaningful sharing of configure determined
data between subtrees, all of their subtree specific bits should
reside in that subtree imo.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
2012/1/9 Ian Campbell <Ian.Campbell@citrix.com>:
> On Sat, 2012-01-07 at 03:20 +0000, Roger Pau Monne wrote:
>> # HG changeset patch
>> # User Roger Pau Monne <roger.pau@entel.upc.edu>
>> # Date 1325906230 -3600
>> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
>> # 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.
>>
>> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
>
> I would have expected to see an update to the clean/distclean rules
> and .hgignore due to all the new generated files.

Yes, I was going to do that when we agree on were should things
reside, that's why I didn't include any of this on the patch.

>> diff -r 4086e4811547 -r e12ec1071410 README
>> --- a/README    Thu Jan 05 17:25:23 2012 +0000
>> +++ b/README    Sat Jan 07 04:17:10 2012 +0100
>> @@ -87,9 +87,15 @@ 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:
>>

This will be like:

# aclocal && automake -a

>> +    # automake -a
>
> We aren't using automake though? Perhaps this explains your problem with
> things alwyas trying to use Makefile.am?

We need to run automake, because it generates config.sub and
config.guess, which is needed for certain autoconf tests. The problem
is that I don't know how to call automake to only generate those files
and don't try to parse Makefile.am, because automake tries to parse
Makefile.am and exits with an error code, that's also preventing me
from using autoreconf and forget about calling aclocal, automake,
autoheader... separately. I was hoping that some autotools expert has
a solution for this (I will keep searching also).

>> +    # autoheader && autoconf
>
> What does autoheader do? This should be clearly noted as being only
> necessary if building from hg and not if you are building from tarball.
> I expect we also need some makefile runes or process updates to make
> sure the generated stuff gets included in the tarball.

autoheader creates a generic config.h.in which contains defines for
all the exported variables. We could create our own config.h.in and
don't run autoheader, but I think the generated file is fine.

>
> You need to add the relevant packages to the list of build requirements.

Ok, will make a list

>> +    # ./configure
>>      # make world
>>      # make install
>>
>> +   If you want, you can run ./configure --help to see the list of
>> +   optins available options when building and installing Xen.
>
>      options

Also Ok when we decide the definitive options.

>> +
>>     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 e12ec1071410 config/Autoconf.mk.in
>> --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
>> +++ b/config/Autoconf.mk.in     Sat Jan 07 04:17:10 2012 +0100
>> @@ -0,0 +1,49 @@
>> +# Prefix and install folder
>> +PREFIX              := @prefix@
>> +LIBLEAFDIR_x86_64   := @LIB_PATH@
>> +
>> +# A debug build of Xen and tools?
>> +debug               := @debug@
>> +
>> +# Tools path
>> +BISON               := @BISON@
>> +FLEX                := @FLEX@
>> +PYTHON              := @PYTHON@
>> +PERL                := @PERL@
>> +BRCTL               := @BRCTL@
>> +IP                  := @IP@
>> +CURL-CONFIG         := @CURL@
>
> Are hyphens ok in make variables?

Looks like, but I will replace them with underscores (_) to be on the safe side.

>
>> +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 e12ec1071410 configure.ac
>> --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
>> +++ b/configure.ac      Sat Jan 07 04:17:10 2012 +0100
>> @@ -0,0 +1,179 @@
>> +#                                               -*- Autoconf -*-
>> +# Process this file with autoconf to produce a configure script.
>> +
>> +AC_PREREQ([2.67])
>
> This is the version in Debian stable which is my rule of thumb for how
> far back to support things as a minimum.
>
> However do we rely on features of 2.67 or could we go older if someone
> has an older version?

AC_PREREQ is automatically set by autoscan based on the used version.
I've generated this with 2.68, and changed the AC_PREREQ to 2.67
because I knew that you where going to check debian stable version.
I've tested this under 2.67 with Debian and it works fine, but I don't
know about older versions.

>> +AC_INIT([Xen Hypervisor], [4.2], [xen-devel@lists.xensource.com])
>
> Ideally the 4.2 would not be duplicated both here and in xen/Makefile.
> I'm not sure how this can be resolved without conflicting with Jan's
> (quite reasonable) desire not to need ./configure for the hypervisor.
>
> I suppose it must be possible via the magic of m4 to pull out the
> version from the Makefile and include it here.

Probably with some m4 and shell scripting

> I didn't review all the tests in detail, I presume we'll end up having
> to find a bunch of those errors via testing anywhere.
>
> Does the set of tests here precisely equal those currently done by
> tools/check (or elsewhere) or did you add more as you went?

I've moved all tools/check, and added a test for libiconv and
yajl/yajl_version.h.

> It might
> have been better for review to present this as a basic infrastructure
> patch, the conversion of each test individually as a patch each and
> lastly any new tests etc so we could easily review. But I think it's a
> bit late now and there's no point splitting this patch up now you've got
> it.

Each test has it's own m4 file inside m4/, if it's really difficult to
understand (m4 is not easy for the eye, although I tried to follow
libxl CODING_STYLE), I will split it up in several patches (one for
each m4/ and one for the rest of the autotools infrastructure).

>
>> +AC_CONFIG_SRCDIR([tools/libxl/libxl.c])
>> +AC_CONFIG_HEADERS([config.h])
>> +AC_CONFIG_FILES([config/Autoconf.mk])
>> +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
>> +AC_CANONICAL_HOST
>> +
>> +# 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)])
>
> Does this macro include support for reading from config.cache as well as
> the cmdline option?

They weren't but I've added support and they are cached now (provided
that you run configure with --config-cache).

>
> [...]
>> +AS_IF([test "x$ocamltools" = "xy"], [.
>> +    AC_PROG_OCAML
>> +    AS_IF([test "x$OCAMLC" = "xno"], [.
>> +      AC_MSG_ERROR([You must install the OCaml compiler])
>
> ocaml was previously optional, I think.

Ok, I will set to disabled by default then.

>
> [...]
>> +
>> +# 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
>
> There's no AC_TYPE_STDINT or similar?

This was automatically done by autoscan, and I've tried searching for
something like AC_TYPE_STDINT, but I haven't been able to find
anything. If you want I can bundle the INT checks inside a macro
called AX_TYPE_STDINT.

>
>> +AC_TYPE_MODE_T
>> +AC_TYPE_OFF_T
>> +AC_TYPE_PID_T
>> +AC_C_RESTRICT
>> +AC_TYPE_SIZE_T
>> +AC_TYPE_SSIZE_T
>
> Is there not some umbrella test for these sorts of very standard things,
> e.g. AC_POSIX or something like that?

Again, the same as above.

>
>> +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_MALLOC
>> +AC_FUNC_MKTIME
>> +AC_FUNC_MMAP
>> +AC_FUNC_REALLOC
>> +AC_FUNC_STRNLEN
>> +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 e12ec1071410 m4/default_lib.m4
>> --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
>> +++ b/m4/default_lib.m4 Sat Jan 07 04:17:10 2012 +0100
>> @@ -0,0 +1,7 @@
>> +AC_DEFUN([AX_DEFAULT_LIB],
>> +[AS_IF([test -d "$prefix/lib64"], [
>> +    LIB_PATH="lib64"
>> +],[
>> +    LIB_PATH="lib"
>> +])
>> +AC_SUBST(LIB_PATH)])
>
> Does this get exposed via config.cache and/or the command line? It
> should be.
>
> Did you write m4/* from scratch or did they come from some snippet
> library?

The only one that comes from a library is ocaml.m4, the other ones are
hand-written. Most are translations of tools/check/check_*, and the
rest are a couple of handful macros that avoid repeating code blocks
all over.

>
> Isn't the management of these snippets the sort of thing aclocal does
> for you?

aclocal just scans configure.ac and concatenates all necessary macros
into aclocal.m4, I've tried to use all the predefined macros I could,
and most of the files inside m4/* are just wrappers to make
configure.ac cleaner and easier to understand.

>
>> \ No newline at end of file
>
> Might this newline be significant in a macro expansion library? I think
> it's good practice to include it anyway (here and elsewhere).

Yup, I've forgot.

>
> [...]
>> diff -r 4086e4811547 -r e12ec1071410 m4/ocaml.m4
>> --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
>> +++ b/m4/ocaml.m4       Sat Jan 07 04:17:10 2012 +0100
>> @@ -0,0 +1,240 @@
>> +dnl autoconf macros for OCaml
>
> Please add a comment describing where this came from so we know how to
> update in the future.
>
> Shouldn't/couldn't this be provided by the ocaml packages and just
> included by us?

This comes from http://forge.ocamlcore.org/, and the manpage states that:

"To begin using these macros, you will need to copy the ocaml.m4 file
(usually located at /usr/share/aclocal/ocaml.m4) to the autoconf
macros directory in your project. Normally this is the m4/ directory
in your project, but the directory can be changed using the
AC_CONFIG_MACRO_DIR(DIR) directive."

That's why I copied it to m4/

>
> [...]
>
> Ian.
>

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
On Mon, 2012-01-09 at 13:51 +0000, Roger Pau Monné wrote:
> 2012/1/9 Ian Campbell <Ian.Campbell@citrix.com>:
> > On Sat, 2012-01-07 at 03:20 +0000, Roger Pau Monne wrote:
> >> # HG changeset patch
> >> # User Roger Pau Monne <roger.pau@entel.upc.edu>
> >> # Date 1325906230 -3600
> >> # Node ID e12ec1071410c946367cb0508cf218a0c3b596ca
> >> # 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.
> >>
> >> Signed-off-by: Roger Pau Monne <roger.pau@entel.upc.edu>
> >
> > I would have expected to see an update to the clean/distclean rules
> > and .hgignore due to all the new generated files.
>
> Yes, I was going to do that when we agree on were should things
> reside, that's why I didn't include any of this on the patch.

OK

> >> diff -r 4086e4811547 -r e12ec1071410 README
> >> --- a/README Thu Jan 05 17:25:23 2012 +0000
> >> +++ b/README Sat Jan 07 04:17:10 2012 +0100
> >> @@ -87,9 +87,15 @@ 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:
> >>
>
> This will be like:
>
> # aclocal && automake -a
>
> >> + # automake -a
> >
> > We aren't using automake though? Perhaps this explains your problem with
> > things alwyas trying to use Makefile.am?
>
> We need to run automake, because it generates config.sub and
> config.guess, which is needed for certain autoconf tests. The problem
> is that I don't know how to call automake to only generate those files
> and don't try to parse Makefile.am, because automake tries to parse
> Makefile.am and exits with an error code, that's also preventing me
> from using autoreconf and forget about calling aclocal, automake,
> autoheader... separately. I was hoping that some autotools expert has
> a solution for this (I will keep searching also).

I'm afraid I don't know the answer to this. It seems like it should be
obvious that we shouldn't be running automake unless we want to use
automake, but with auto* who knows what goes on ;-).

[...]

> >> + # ./configure
> >> # make world
> >> # make install
> >>
> >> + If you want, you can run ./configure --help to see the list of
> >> + optins available options when building and installing Xen.
> >
> > options
>
> Also Ok when we decide the definitive options.

I was pointing out the typo "optins".

> >
> >> +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 e12ec1071410 configure.ac
> >> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> >> +++ b/configure.ac Sat Jan 07 04:17:10 2012 +0100
> >> @@ -0,0 +1,179 @@
> >> +# -*- Autoconf -*-
> >> +# Process this file with autoconf to produce a configure script.
> >> +
> >> +AC_PREREQ([2.67])
> >
> > This is the version in Debian stable which is my rule of thumb for how
> > far back to support things as a minimum.
> >
> > However do we rely on features of 2.67 or could we go older if someone
> > has an older version?
>
> AC_PREREQ is automatically set by autoscan based on the used version.
> I've generated this with 2.68, and changed the AC_PREREQ to 2.67
> because I knew that you where going to check debian stable version.
> I've tested this under 2.67 with Debian and it works fine, but I don't
> know about older versions.

I think we can fault them in as testers report issues.

[...]

> > I didn't review all the tests in detail, I presume we'll end up having
> > to find a bunch of those errors via testing anywhere.
> >
> > Does the set of tests here precisely equal those currently done by
> > tools/check (or elsewhere) or did you add more as you went?
>
> I've moved all tools/check, and added a test for libiconv and
> yajl/yajl_version.h.

There seems to be a lot more tests in the configure.ac than there ever
were under tools/check though? All sorts of headers and function checks
etc. Did they come from autoscan? (autoscan is new to me...)

> > It might
> > have been better for review to present this as a basic infrastructure
> > patch, the conversion of each test individually as a patch each and
> > lastly any new tests etc so we could easily review. But I think it's a
> > bit late now and there's no point splitting this patch up now you've got
> > it.
>
> Each test has it's own m4 file inside m4/, if it's really difficult to
> understand (m4 is not easy for the eye, although I tried to follow
> libxl CODING_STYLE), I will split it up in several patches (one for
> each m4/ and one for the rest of the autotools infrastructure).

I guess most of the stuff was from autoscan can't logically be split up,
so don't worry.

> > [...]
> >> +AS_IF([test "x$ocamltools" = "xy"], [.
> >> + AC_PROG_OCAML
> >> + AS_IF([test "x$OCAMLC" = "xno"], [
> >> + AC_MSG_ERROR([You must install the OCaml compiler])
> >
> > ocaml was previously optional, I think.
>
> Ok, I will set to disabled by default then.

By default it should be enabled if the necessary bits are present and
disabled otherwise.

[...]
> > There's no AC_TYPE_STDINT or similar?
>
> This was automatically done by autoscan, and I've tried searching for
> something like AC_TYPE_STDINT, but I haven't been able to find
> anything. If you want I can bundle the INT checks inside a macro
> called AX_TYPE_STDINT.
[...]
> > Is there not some umbrella test for these sorts of very standard things,
> > e.g. AC_POSIX or something like that?
>
> Again, the same as above.

Lets just leave it then.

> > Isn't the management of these snippets the sort of thing aclocal does
> > for you?
>
> aclocal just scans configure.ac and concatenates all necessary macros
> into aclocal.m4, I've tried to use all the predefined macros I could,
> and most of the files inside m4/* are just wrappers to make
> configure.ac cleaner and easier to understand.

OK.

> > [...]
> >> diff -r 4086e4811547 -r e12ec1071410 m4/ocaml.m4
> >> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> >> +++ b/m4/ocaml.m4 Sat Jan 07 04:17:10 2012 +0100
> >> @@ -0,0 +1,240 @@
> >> +dnl autoconf macros for OCaml
> >
> > Please add a comment describing where this came from so we know how to
> > update in the future.
> >
> > Shouldn't/couldn't this be provided by the ocaml packages and just
> > included by us?
>
> This comes from http://forge.ocamlcore.org/, and the manpage states that:
>
> "To begin using these macros, you will need to copy the ocaml.m4 file
> (usually located at /usr/share/aclocal/ocaml.m4) to the autoconf
> macros directory in your project. Normally this is the m4/ directory
> in your project, but the directory can be changed using the
> AC_CONFIG_MACRO_DIR(DIR) directive."
>
> That's why I copied it to m4/

Fair enough!

Ian.



_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
Ian Campbell writes ("Re: [Xen-devel] [PATCH RFC] build: add autoconf to replace custom checks in tools/check"):
> On Sat, 2012-01-07 at 03:20 +0000, Roger Pau Monne wrote:
> > + # autoheader && autoconf
>
> What does autoheader do? This should be clearly noted as being only
> necessary if building from hg and not if you are building from tarball.
> I expect we also need some makefile runes or process updates to make
> sure the generated stuff gets included in the tarball.

autoheader generates config.h.in, which is processed by configure to
make config.h.

I think the output of autoconf and autoheader should be committed to
the hg tree. It only needs to be rerun when we change the set of
things we test for, add features, etc. And it is not very portable.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
Re: [PATCH RFC] build: add autoconf to replace custom checks in tools/check [ In reply to ]
Roger Pau Monné writes ("Re: [Xen-devel] [PATCH RFC] build: add autoconf to replace custom checks in tools/check"):
> We need to run automake, because it generates config.sub and
> config.guess, which is needed for certain autoconf tests.

config.sub and config.guess are fixed files which you can just copy
into your source tree. They should be in our hg.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel