X-Git-Url: http://git.annexia.org/?p=virt-top.git;a=blobdiff_plain;f=configure.ac;h=57517f862857f087103e3cd684e18e9478cc9f7c;hp=c238643721a785afcd6b9f1070f6e33833e8b8fc;hb=b2a619b32d66d94779b7fef0363aecfa17cef6f7;hpb=38e7a75efaab8a6a709cbad8342bca4a45ead8cc diff --git a/configure.ac b/configure.ac index c238643..57517f8 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ # ocaml-libvirt -# Copyright (C) 2007 Red Hat Inc., Richard W.M. Jones +# Copyright (C) 2007-2008 Red Hat Inc., Richard W.M. Jones # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -17,7 +17,7 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT(ocaml-libvirt,0.3.3.4) +AC_INIT(ocaml-libvirt,0.4.1.1) dnl Check for basic C environment. AC_PROG_CC @@ -29,6 +29,24 @@ test "x$U" != "x" && AC_MSG_ERROR(Compiler not ANSI compliant) AC_PROG_CC_C_O +dnl Select some C flags based on the host type. +AC_CANONICAL_HOST + +DEBUG="-g" +WARNINGS="-Wall -Werror" +CFLAGS_FPIC="-fPIC" +WIN32=no +case "$host" in + *-*-mingw*) + WARNINGS="$WARNINGS -Wno-unused" + CFLAGS_FPIC="" + WIN32=yes +esac +AC_SUBST(DEBUG) +AC_SUBST(WARNINGS) +AC_SUBST(CFLAGS_FPIC) +AC_SUBST(WIN32) + dnl Check for libvirt development environment. AC_ARG_WITH(libvirt, AC_HELP_STRING([--with-libvirt=PATH],[Set path to installed libvirt]), @@ -44,6 +62,11 @@ AC_CHECK_HEADER([libvirt/libvirt.h], [], AC_MSG_ERROR([You must install libvirt development package])) +dnl We also use +AC_CHECK_HEADER([libvirt/virterror.h], + [], + AC_MSG_ERROR([You must install libvirt development package])) + dnl Check for libvirt >= 0.2.1 (our minimum supported version). dnl See: http://libvirt.org/hvsupport.html AC_CHECK_FUNC(virConnectGetCapabilities, @@ -52,72 +75,316 @@ AC_CHECK_FUNC(virConnectGetCapabilities, dnl Check for optional libvirt functions added since 0.2.1. dnl See: http://libvirt.org/hvsupport.html -AC_CHECK_FUNCS([virConnectGetHostname virConnectGetURI virDomainBlockStats virDomainGetSchedulerParameters virDomainGetSchedulerType virDomainInterfaceStats virDomainMigrate virDomainSetSchedulerParameters virNodeGetFreeMemory virNodeGetCellsFreeMemory]) +AC_CHECK_FUNCS([virConnectGetHostname \ + virConnectGetURI \ + virDomainBlockStats \ + virDomainGetSchedulerParameters \ + virDomainGetSchedulerType \ + virDomainInterfaceStats \ + virDomainMigrate \ + virDomainSetSchedulerParameters \ + virNodeGetFreeMemory \ + virNodeGetCellsFreeMemory \ + virStoragePoolGetConnect \ + virConnectNumOfStoragePools \ + virConnectListStoragePools \ + virConnectNumOfDefinedStoragePools \ + virConnectListDefinedStoragePools \ + virStoragePoolLookupByName \ + virStoragePoolLookupByUUID \ + virStoragePoolLookupByUUIDString \ + virStoragePoolLookupByVolume \ + virStoragePoolCreateXML \ + virStoragePoolDefineXML \ + virStoragePoolBuild \ + virStoragePoolUndefine \ + virStoragePoolCreate \ + virStoragePoolDestroy \ + virStoragePoolDelete \ + virStoragePoolFree \ + virStoragePoolRefresh \ + virStoragePoolGetName \ + virStoragePoolGetUUID \ + virStoragePoolGetUUIDString \ + virStoragePoolGetInfo \ + virStoragePoolGetXMLDesc \ + virStoragePoolGetAutostart \ + virStoragePoolSetAutostart \ + virStoragePoolNumOfVolumes \ + virStoragePoolListVolumes \ + virStorageVolLookupByName \ + virStorageVolLookupByKey \ + virStorageVolLookupByPath \ + virStorageVolGetName \ + virStorageVolGetKey \ + virStorageVolCreateXML \ + virStorageVolDelete \ + virStorageVolFree \ + virStorageVolGetInfo \ + virStorageVolGetXMLDesc \ + virStorageVolGetPath \ +]) -dnl We also use -AC_CHECK_HEADER([libvirt/virterror.h], - [], - AC_MSG_ERROR([You must install libvirt development package])) +# This jobs API was never published and is due to get overhauled +# in the near future: +# virJobGetInfo +# virJobGetDomain +# virJobGetNetwork +# virJobCancel +# virJobFree +# virDomainCreateLinuxJob +# virDomainSaveJob +# virDomainRestoreJob +# virDomainCoreDumpJob +# virDomainCreateJob +# virNetworkCreateXMLJob +# virNetworkCreateJob + +dnl Check for optional types added since 0.2.1. +AC_CHECK_TYPES([virJobPtr, virStoragePoolPtr, virStorageVolPtr],,, + [#include ]) dnl Check for optional ncurses. AC_CHECK_LIB(ncurses,initscr) +dnl Check for optional GNOME icons (from gnome-icon-theme package). +AC_ARG_WITH(icons, + AC_HELP_STRING([--with-icons=PATH], + [Set path to installed icons @<:@default=/usr/share/icons@:>@]), + [],[with_icons=/usr/share/icons]) +icons="" +if test "x$with_icons" != "xno"; then + for size in 16 24 32 48; do + for f in devices/computer.png; do + fname="${with_icons}/gnome/${size}x${size}/${f}" + AC_MSG_CHECKING([checking for icon $fname]) + if test -f "$fname"; then + AC_MSG_RESULT([yes]) + icons="$size $f $fname $icons" + else + AC_MSG_RESULT([no]) + fi + done + done +fi +AC_SUBST(with_icons) +AC_SUBST(icons) + dnl Check for basic OCaml environment & findlib. +dnl Note that findlib is not necessary, but things will work better +dnl if it is present. AC_PROG_OCAML AC_PROG_FINDLIB -dnl Check for required OCaml packages. -AC_CHECK_OCAML_PKG(unix) -if test "x$pkg_unix" != "xyes"; then - AC_MSG_ERROR([Cannot find required OCaml package 'unix']) -fi -AC_CHECK_OCAML_PKG(extlib) -if test "x$pkg_extlib" != "xyes"; then - AC_MSG_ERROR([Cannot find required OCaml package 'extlib']) +if test "x$OCAMLFIND" != "x"; then + dnl Use ocamlfind to find the required packages ... + + dnl Check for required OCaml packages. + AC_CHECK_OCAML_PKG(unix) + if test "x$pkg_unix" != "xyes"; then + AC_MSG_ERROR([Cannot find required OCaml package 'unix']) + fi + + dnl Check for optional OCaml packages. + AC_CHECK_OCAML_PKG(extlib) + AC_CHECK_OCAML_PKG(lablgtk2) + AC_CHECK_OCAML_PKG(curses) + AC_CHECK_OCAML_PKG(gettext) + AC_CHECK_OCAML_PKG(xml-light) + AC_CHECK_OCAML_PKG(csv) + AC_CHECK_OCAML_PKG(dbus) + AC_CHECK_OCAML_PKG(gettext) + + dnl Need to check which version of calendar is installed. + AC_CHECK_OCAML_MODULE(calendar,pkg_calendar2,CalendarLib.Date,[+calendar]) + if test "x$pkg_calendar2" = "xno"; then + AC_CHECK_OCAML_PKG(calendar) + fi + + AC_SUBST(pkg_unix) + AC_SUBST(pkg_extlib) + AC_SUBST(pkg_lablgtk2) + AC_SUBST(pkg_curses) + AC_SUBST(pkg_gettext) + AC_SUBST(pkg_xml_light) + AC_SUBST(pkg_csv) + AC_SUBST(pkg_dbus) + AC_SUBST(pkg_gettext) + AC_SUBST(pkg_calendar) + AC_SUBST(pkg_calendar2) +else + dnl Use a basic module test if there is no findlib ... + + dnl Check for required OCaml modules. + AC_CHECK_OCAML_MODULE(unix,pkg_unix,Unix,[.]) + if test "x$pkg_unix" = "xno"; then + AC_MSG_ERROR([Cannot find required OCaml package 'unix']) + fi + + dnl Check for optional OCaml modules. + AC_CHECK_OCAML_MODULE(extlib,pkg_extlib,ExtString,[+extlib]) + AC_CHECK_OCAML_MODULE(lablgtk2,pkg_lablgtk2,GMain,[+lablgtk2]) + AC_CHECK_OCAML_MODULE(curses,pkg_curses,Curses,[+curses]) + AC_CHECK_OCAML_MODULE(gettext,pkg_gettext,Gettext,[+gettext]) dnl XXX + AC_CHECK_OCAML_MODULE(xml-light,pkg_xml_light,Xml,[+xml-light]) + AC_CHECK_OCAML_MODULE(csv,pkg_csv,Csv,[+csv]) + AC_CHECK_OCAML_MODULE(dbus,pkg_dbus,DBus,[+dbus]) + AC_CHECK_OCAML_MODULE(gettext,pkg_gettext,Gettext,[+gettext]) + dnl XXX Version check - see above. + AC_CHECK_OCAML_MODULE(calendar,pkg_calendar,Calendar,[+calendar]) fi -dnl Check for optional OCaml packages. -AC_CHECK_OCAML_PKG(lablgtk2) -AC_CHECK_OCAML_PKG(curses) -AC_CHECK_OCAML_PKG(gettext) -AC_CHECK_OCAML_PKG(xml-light) -AC_CHECK_OCAML_PKG(csv) -AC_CHECK_OCAML_PKG(calendar) - -AC_SUBST(pkg_lablgtk2) -AC_SUBST(pkg_curses) -AC_SUBST(pkg_gettext) -AC_SUBST(pkg_xml_light) -AC_SUBST(pkg_csv) -AC_SUBST(pkg_calendar) +dnl Which subpackages (== subdirs) will we build? +subdirs="libvirt examples mlvirsh" +if test "x$pkg_lablgtk2" != "xno"; then + subdirs="$subdirs virt-ctrl" +fi +if test "x$pkg_extlib" != "xno" -a "x$pkg_curses" != "xno"; then + subdirs="$subdirs virt-top" +fi +if test "x$pkg_extlib" != "xno" -a "x$pkg_xml_light" != "xno"; then + subdirs="$subdirs virt-df" +fi +AC_SUBST(subdirs) dnl Check for optional perldoc (for building manual pages). AC_CHECK_PROG(HAVE_PERLDOC,perldoc,perldoc) +dnl Check for optional gdk-pixbuf-mlsource (for icons). +AC_CHECK_PROG(HAVE_GDK_PIXBUF_MLSOURCE,gdk-pixbuf-mlsource,gdk-pixbuf-mlsource) + +dnl Check for recommended ocaml-gettext tool. +AC_CHECK_PROG(OCAML_GETTEXT,ocaml-gettext,ocaml-gettext) + +dnl Check for optional NSIS (for building a Windows installer). +AC_ARG_WITH([nsis], + [AS_HELP_STRING([--with-nsis], + [use NSIS to build a Windows installer])], + [], + [with_nsis=no]) + +MAKENSIS= +LIBVIRT_DLL_PATH= +LIBXDR_DLL_PATH= +LIBXML2_DLL_PATH= +GNUTLS_DLL_PATH= +GTK_PATH= +GTK_DLL_PATH= + +[ +msys_to_win_dir () { + eval pushd "\$$1" > /dev/null + eval $1=`pwd -W` + popd > /dev/null +} +] + +if test "x$with_nsis" != "xno"; then + AC_PATH_PROG(MAKENSIS,makensis,[],[$with_nsis:$PATH]) + if test "x$MAKENSIS" = "x"; then + AC_MSG_FAILURE([--with-nsis was given, but could not find MAKENSIS.EXE]) + fi + + # MAKENSIS is set so we will build a rule for making a Windows + # installer. To support this, generate wininstaller.nsis. + saved_IFS=$IFS + IFS=$PATH_SEPARATOR + for d in $PATH; do + IFS=$saved_IFS + echo Checking $d for DLLs ... >&5 + if test -f "$d/libvirt-0.dll"; then + LIBVIRT_DLL_PATH="$d" + fi + if test -f "$d/libxdr.dll"; then + LIBXDR_DLL_PATH="$d" + fi + if test -f "$d/libxml2-2.dll"; then + LIBXML2_DLL_PATH="$d" + fi + if test -f "$d/libgpg-error-0.dll"; then + GNUTLS_DLL_PATH="$d" + fi + if test -f "$d/libgtk-win32-2.0-0.dll"; then + GTK_DLL_PATH="$d" + GTK_PATH="$d/.." + fi + done + IFS=$saved_IFS + + if test "x$LIBVIRT_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find libvirt-0.dll in PATH]) + fi + if test "x$LIBXDR_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find libxdr.dll in PATH]) + fi + if test "x$LIBXML2_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find libxml2-2.dll in PATH]) + fi + if test "x$GNUTLS_DLL_PATH" = "x"; then + AC_MSG_FAILURE([cannot find GnuTLS DLLs in PATH]) + fi + if test "x$GTK_DLL_PATH" = "x"; then + AC_MSG_WARN([cannot find GTK DLLs in PATH]) + fi + + # Change the paths to Windows paths. + msys_to_win_dir LIBVIRT_DLL_PATH + msys_to_win_dir LIBXDR_DLL_PATH + msys_to_win_dir LIBXML2_DLL_PATH + msys_to_win_dir GNUTLS_DLL_PATH + if test "x$GTK_DLL_PATH" != "x"; then + msys_to_win_dir GTK_DLL_PATH + msys_to_win_dir GTK_PATH + fi +fi +AC_SUBST(MAKENSIS) +AC_SUBST(LIBVIRT_DLL_PATH) +AC_SUBST(LIBXDR_DLL_PATH) +AC_SUBST(LIBXML2_DLL_PATH) +AC_SUBST(GNUTLS_DLL_PATH) +AC_SUBST(GTK_DLL_PATH) +AC_SUBST(GTK_PATH) + +dnl Write gettext modules for the programs. +dnl http://www.le-gall.net/sylvain+violaine/documentation/ocaml-gettext/html/reference-manual/ch03s04.html +for d in mlvirsh virt-ctrl virt-df virt-top; do + f=`echo $d | tr - _`_gettext.ml + AC_MSG_NOTICE([creating $d/$f]) + rm -f $d/$f + echo "(* This file is generated automatically by ./configure. *)" > $d/$f + if test "x$pkg_gettext" != "xno"; then + # Gettext module is available, so use it. + cat <>$d/$f +module Gettext = Gettext.Program ( + struct + let textdomain = "$d" + let codeset = None + let dir = None + let dependencies = [[]] + end +) (GettextStub.Native) +EOT + else + # No gettext module is available, so fake the translation functions. + cat <>$d/$f +module Gettext = struct + external s_ : string -> string = "%identity" + external f_ : ('a -> 'b, 'c, 'd) format -> ('a -> 'b, 'c, 'd) format + = "%identity" + let sn_ : string -> string -> int -> string + = fun s p n -> if n = 1 then s else p + let fn_ : ('a -> 'b, 'c, 'd) format -> ('a -> 'b, 'c, 'd) format -> int + -> ('a -> 'b, 'c, 'd) format + = fun s p n -> if n = 1 then s else p +end +EOT + fi +done + dnl Summary. echo "------------------------------------------------------------" echo "Thanks for downloading" $PACKAGE_STRING -echo " OCaml libvirt bindings . yes" -echo " example programs . . . . yes" -echo " mlvirsh . . . . . . . . yes" -echo -n " mlvirtmanager . . . . . " -if test "x$pkg_lablgtk2" = "xyes"; then - echo "yes" -else - echo "no (needs optional lablgtk2)" -fi -echo -n " virt-top . . . . . . . " -if test "x$pkg_curses" = "xyes"; then - echo "yes" -else - echo "no (needs optional ocaml-curses)" -fi -echo -n " virt-df . . . . . . . " -if test "x$pkg_xml_light" = "xyes"; then - echo "yes" -else - echo "no (needs optional xml-light)" -fi +echo " subpackages to build : $subdirs" echo "------------------------------------------------------------" dnl Produce output files. @@ -125,11 +392,16 @@ AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([META libvirt/libvirt_version.ml Makefile + Make.rules + po/Makefile libvirt/Makefile examples/Makefile mlvirsh/Makefile - mlvirtmanager/Makefile + virt-ctrl/Makefile virt-top/Makefile virt-df/Makefile ]) +if test "x$MAKENSIS" != "x"; then + AC_CONFIG_FILES([wininstaller.nsis]) +fi AC_OUTPUT