From f21c50eb04bdcc37cd4c2756df3c12065e043b6f Mon Sep 17 00:00:00 2001 From: David Scott Date: Wed, 11 Nov 2009 17:41:48 +0000 Subject: [PATCH] Use autoconf to detect: xen headers; XS_RESTRICT in patchqueue; ocaml packages xmlm, type-conf; libdevicemapper; and linux-specific CDROM ioctls. Modify the xen-api-libs.hg master Makefile to conditionally compile only those libraries whose system dependencies are met. So we: * don't compile the xen libraries (xc, xb etc) if xen/xen.h is missing * don't compile the cdrom library if the linux ioctls are missing * don't compile the xml-light2, rss libraries if xmlm is missing * don't compile rpc-light if type-conv is missing * don't compile camldm if libdevicemapper is missing This makes it easier for these libs to be used by other tools which may not need (eg) the xen or devicemapper bindings. Note that xen-api.hg needs most of these so any missing library will lead to a xen-api.hg build failure. Signed-off-by: David Scott --- Makefile.in | 67 +++++++++++++++++++++++++++++++++++----------- configure.ac | 21 +++++++++++++-- log/Makefile | 3 ++- log/syslog_stubs.c | 2 ++ stdext/config.h.in | 1 - 5 files changed, 75 insertions(+), 19 deletions(-) delete mode 100644 stdext/config.h.in diff --git a/Makefile.in b/Makefile.in index 6fbb686..839b9e7 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,73 +1,110 @@ +AUTOMAKE_OPTIONS = foreign +HAVE_XEN = @XEN@ +HAVE_DEVICE_MAPPER = @DEVICE_MAPPER@ +HAVE_LINUX_CDROM = @LINUX_CDROM@ +HAVE_XMLM = @OCAML_PKG_xmlm@ +HAVE_TYPECONV = @OCAML_PKG_type_conv@ + .PHONY: all all: $(MAKE) -C uuid - $(MAKE) -C camldm $(MAKE) -C stdext $(MAKE) -C log $(MAKE) -C stunnel $(MAKE) -C pciutil - $(MAKE) -C cdrom - $(MAKE) -C xml-light2 - $(MAKE) -C rss - $(MAKE) -C rpc-light $(MAKE) -C http-svr $(MAKE) -C close-and-exec $(MAKE) -C sexpr +ifeq ($(HAVE_TYPECONV),type-conv) + $(MAKE) -C rpc-light +endif +ifeq ($(HAVE_XMLM),xmlm) + $(MAKE) -C xml-light2 + $(MAKE) -C rss +endif +ifeq ($(HAVE_LINUX_CDROM),1) + $(MAKE) -C cdrom +endif +ifeq ($(HAVE_DEVICE_MAPPER),1) + $(MAKE) -C camldm +endif .PHONY: allxen allxen: +ifeq ($(HAVE_XEN),1) $(MAKE) -C mmap $(MAKE) -C xc $(MAKE) -C xb $(MAKE) -C xs $(MAKE) -C xsrpc $(MAKE) -C eventchn +endif install: $(MAKE) -C uuid install - $(MAKE) -C camldm install $(MAKE) -C stdext install $(MAKE) -C log install $(MAKE) -C stunnel install $(MAKE) -C pciutil install - $(MAKE) -C cdrom install - $(MAKE) -C xml-light2 install - $(MAKE) -C rss install - $(MAKE) -C rpc-light install $(MAKE) -C http-svr install $(MAKE) -C close-and-exec install $(MAKE) -C sexpr install +ifeq ($(HAVE_TYPECONV),type-conv) + $(MAKE) -C rpc-light install +endif +ifeq ($(HAVE_XMLM),xmlm) + $(MAKE) -C xml-light2 install + $(MAKE) -C rss install +endif +ifeq ($(HAVE_LINUX_CDROM),1) + $(MAKE) -C cdrom install +endif +ifeq ($(HAVE_DEVICE_MAPPER),1) + $(MAKE) -C camldm install +endif installxen: +ifeq ($(HAVE_XEN),1) $(MAKE) -C mmap install $(MAKE) -C xc install $(MAKE) -C xb install $(MAKE) -C xs install $(MAKE) -C xsrpc install $(MAKE) -C eventchn install +endif uninstall: $(MAKE) -C uuid uninstall - $(MAKE) -C camldm uninstall $(MAKE) -C stdext uninstall $(MAKE) -C log uninstall $(MAKE) -C stunnel uninstall $(MAKE) -C pciutil uninstall - $(MAKE) -C cdrom uninstall - $(MAKE) -C xml-light2 uninstall - $(MAKE) -C rss uninstall - $(MAKE) -C rpc-light uninstall $(MAKE) -C http-svr uninstall $(MAKE) -C close-and-exec uninstall $(MAKE) -C sexpr uninstall +ifeq ($(HAVE_TYPECONV),type-conv) + $(MAKE) -C rpc-light uninstall +endif +ifeq ($(HAVE_XMLM),xmlm) + $(MAKE) -C xml-light2 uninstall + $(MAKE) -C rss uninstall +endif +ifeq ($(HAVE_LINUX_CDROM),1) + $(MAKE) -C cdrom uninstall +endif +ifeq ($(HAVE_DEVICE_MAPPER),1) + $(MAKE) -C camldm uninstall +endif uninstallxen: +ifeq ($(HAVE_XEN),1) $(MAKE) -C eventchn uninstall $(MAKE) -C xsrpc uninstall $(MAKE) -C xs uninstall $(MAKE) -C xb uninstall $(MAKE) -C xc uninstall $(MAKE) -C mmap uninstall +endif bins: $(MAKE) -C pciutil bins diff --git a/configure.ac b/configure.ac index 5c8c18a..dd54017 100644 --- a/configure.ac +++ b/configure.ac @@ -1,10 +1,10 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_PREREQ([2.63]) +AC_PREREQ([2.59]) AC_INIT([xen-api-libs], [0.1], [xen-api@lists.xensource.com]) AC_CONFIG_SRCDIR([]) -AC_CONFIG_HEADERS([stdext/config.h]) +AC_CONFIG_HEADERS([include/config.h]) AC_CONFIG_AUX_DIR(./mk) AC_CANONICAL_SYSTEM @@ -26,8 +26,17 @@ AC_PROG_MAKE_SET # Checks for header files. AC_CHECK_HEADERS([string.h sys/param.h]) +AC_CHECK_HEADERS([xen/xen.h],[XEN=1],[XEN=0]) +AC_CHECK_HEADERS([libdevmapper.h], [DEVICE_MAPPER=1], [DEVICE_MAPPER=0]) +AC_CHECK_HEADERS([linux/cdrom.h], [LINUX_CDROM=1], [LINUX_CDROM=0]) # Checks for typedefs, structures, and compiler characteristics. +AC_CHECK_DECLS([XS_RESTRICT],[],[],[ +[ +#include +#include +#include +]]) # Checks for library functions. AC_CHECK_FUNCS([realpath]) @@ -42,5 +51,13 @@ if test "$OCAMLFIND" = "no"; then AC_MSG_ERROR([You must install OCaml findlib (the ocamlfind command)]) fi +AC_CHECK_OCAML_PKG([xmlm]) +AC_CHECK_OCAML_PKG([type-conv]) + AC_CONFIG_FILES([Makefile]) +AC_SUBST([XEN]) +AC_SUBST([DEVICE_MAPPER]) +AC_SUBST([LINUX_CDROM]) +AC_SUBST([OCAML_PKG_xmlm]) +AC_SUBST([OCAML_PKG_type_conv]) AC_OUTPUT diff --git a/log/Makefile b/log/Makefile index 7a9702b..aa3f608 100644 --- a/log/Makefile +++ b/log/Makefile @@ -1,5 +1,6 @@ CC = gcc -CFLAGS = -Wall -fPIC -O2 -I/opt/xensource/lib/ocaml +OCAMLLOC := $(shell ocamlc -where) +CFLAGS = -Wall -fPIC -O2 -I/opt/xensource/lib/ocaml -I$(OCAMLLOC) OCAMLC = ocamlc OCAMLOPT = ocamlopt diff --git a/log/syslog_stubs.c b/log/syslog_stubs.c index 4ecaa7a..408ecef 100644 --- a/log/syslog_stubs.c +++ b/log/syslog_stubs.c @@ -13,10 +13,12 @@ */ #include +#include #include #include #include #include +#include static int __syslog_level_table[] = { LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, diff --git a/stdext/config.h.in b/stdext/config.h.in deleted file mode 100644 index 77a8732..0000000 --- a/stdext/config.h.in +++ /dev/null @@ -1 +0,0 @@ -// Autoconf config.h file -- 2.39.5