On 27.11.2015 10:59, Remi Collet wrote:
Le 27/11/2015 09:33, Remi Collet a écrit :
> > Notice: I think it will be simpler to switch to the standard PHP
> > extension build system (phpize; configure; make)
See attached patch.
This only manage the extension build (not the documentation)
TODO: add a --enable-libvirt-debug option to avoid having it always
build in.
Remi
0001-add-config.m4-to-allow-standard-PHP-extension-build-.patch
>From 5b6e08f23f5eb5388c8ac7274786edd12a6695f0 Mon Sep 17 00:00:00 2001
Strange. Where does this line come from? I have to manually delete it to let git am
through.
From: Remi Collet <fedora(a)famillecollet.com>
Date: Fri, 27 Nov 2015 10:57:32 +0100
Subject: [PATCH] add config.m4 to allow standard PHP extension build system
---
src/config.m4 | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 src/config.m4
diff --git a/src/config.m4 b/src/config.m4
new file mode 100644
index 0000000..ee2b47d
--- /dev/null
+++ b/src/config.m4
I guess the file should be at the top level instead of src/
@@ -0,0 +1,52 @@
+PHP_ARG_WITH(libvirt, for libvirt support,
+[ --with-libvirt Include varnish support])
Sort of misleading ... configure --with-libvirt for varnish support?
+
+if test "$PHP_LIBVIRT" != "no"; then
+
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+ if test -x "$PKG_CONFIG" && $PKG_CONFIG varnishapi --exists ; then
Why? This module is a php module, not a varnish one. E.g. on my system, I do have php
installed but no varnish.
+ AC_MSG_CHECKING(libvirt version)
+ if $PKG_CONFIG libvirt --atleast-version=1.2.8 ; then
I'd rather see this comparing to a variable, since you're repeating it throughout
the code.
+ LIBVIRT_INCLUDE=`$PKG_CONFIG libvirt --cflags`
+ LIBVIRT_LIBRARY=`$PKG_CONFIG libvirt --libs`
+ LIBVIRT_VERSION=`$PKG_CONFIG libvirt --modversion`
+ AC_MSG_RESULT($LIBVIRT_VERSION)
+ else
+ AC_MSG_ERROR(version too old)
+ fi
+ PHP_EVAL_INCLINE($LIBVIRT_INCLUDE)
+ PHP_EVAL_LIBLINE($LIBVIRT_LIBRARY, LIBVIRT_SHARED_LIBADD)
This is rather displeasing. I mean, on one hand we have grown powerful m4 language with
all the nice macros and now we have to throw it away and write what would have fit on a
single line into blocks like these. But I guess there's not a better way.
+
+ AC_MSG_CHECKING(libvirt-qemu version)
+ if $PKG_CONFIG libvirt-qemu --atleast-version=1.2.8 ; then
+ QEMU_INCLUDE=`$PKG_CONFIG libvirt-qemu --cflags`
+ QEMU_LIBRARY=`$PKG_CONFIG libvirt-qemu --libs`
+ QEMU_VERSION=`$PKG_CONFIG libvirt-qemu --modversion`
+ AC_MSG_RESULT($QEMU_VERSION)
+ else
+ AC_MSG_ERROR(version too old)
+ fi
+ PHP_EVAL_INCLINE($QEMU_INCLUDE)
+ PHP_EVAL_LIBLINE($QEMU_LIBRARY, LIBVIRT_SHARED_LIBADD)
+
+ AC_MSG_CHECKING(libxml version)
+ if $PKG_CONFIG libxml-2.0 --atleast-version=1.2.8 ; then
See? this should have been 2.0.0
+ LIBXML_INCLUDE=`$PKG_CONFIG libxml-2.0 --cflags`
+ LIBXML_LIBRARY=`$PKG_CONFIG libxml-2.0 --libs`
+ LIBXML_VERSION=`$PKG_CONFIG libxml-2.0 --modversion`
+ AC_MSG_RESULT($LIBXML_VERSION)
+ else
+ AC_MSG_ERROR(version too old)
+ fi
+ PHP_EVAL_INCLINE($LIBXML_INCLUDE)
+ PHP_EVAL_LIBLINE($LIBXML_LIBRARY, LIBVIRT_SHARED_LIBADD)
+
+ CFLAGS="$CFLAGS -DCOMPILE_DL_LIBVIRT=1"
+
+ PHP_SUBST(LIBVIRT_SHARED_LIBADD)
+ PHP_NEW_EXTENSION(libvirt, libvirt-php.c sockets.c vncfunc.c, $ext_shared)
+ else
+ AC_MSG_ERROR(pkg-config not found)
+ fi
+fi
-- 2.1.0
there's a plenty of other features missing - e.g. docs won't be built with this. I
don't know about tests, because I am unable to get this working on my machine. I mean,
this is what I've managed to get to:
libvirt-php.git $ make
/bin/sh /home/zippy/work/libvirt/libvirt-php.git/libtool --mode=link cc -DPHP_ATOM_INC
-I/home/zippy/work/libvirt/libvirt-php.git/include
-I/home/zippy/work/libvirt/libvirt-php.git/main -I/home/zippy/work/libvirt/libvirt-php.git
-I/usr/lib64/php5.5/include/php -I/usr/lib64/php5.5/include/php/main
-I/usr/lib64/php5.5/include/php/TSRM -I/usr/lib64/php5.5/include/php/Zend
-I/usr/lib64/php5.5/include/php/ext -I/usr/lib64/php5.5/include/php/ext/date/lib
-I/usr/include/libxml2 -DHAVE_CONFIG_H -g -O2 -o libvirt.la -export-dynamic
-avoid-version -prefer-pic -module -rpath /home/zippy/work/libvirt/libvirt-php.git/modules
src/.lo -lvirt -lvirt-qemu -lvirt -lxml2
libtool: Version mismatch error. This is libtool 2.4.6, but the
libtool: definition of this LT_INIT comes from an older release.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4.6
libtool: and run autoconf again.
Makefile:186: recipe for target 'libvirt.la' failed
make: *** [libvirt.la] Error 63
Frankly, I got frustrated by the lack of documentation on this, but that's not your
fault.
This is what I have rewritten your patch into:
diff --git a/config.m4 b/config.m4
new file mode 100644
index 0000000..fef145f
--- /dev/null
+++ b/config.m4
@@ -0,0 +1,54 @@
+PHP_ARG_WITH(libvirt, for libvirt support,
+[ --with-libvirt Include libvirt support], yes)
+
+LIBVIRT_REQUIRED=1.2.9
+LIBXML_REQUIRED=2.0.0
+
+if test "$PHP_LIBVIRT" != "no"; then
+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
+
+ if ! test -x "$PKG_CONFIG" ; then
+ AC_MSG_ERROR(no pkg-config found)
+ fi
+
+ AC_MSG_CHECKING(for libvirt)
+ LIBVIRT_VERSION=`$PKG_CONFIG libvirt --modversion`
+ if $PKG_CONFIG libvirt --atleast-version=$LIBVIRT_REQUIRED ; then
+ LIBVIRT_INCLUDE=`$PKG_CONFIG libvirt --cflags`
+ LIBVIRT_LIBRARY=`$PKG_CONFIG libvirt --libs`
+ AC_MSG_RESULT($LIBVIRT_VERSION)
+ else
+ AC_MSG_ERROR($LIBVIRT_VERSION found, but $LIBVIRT_REQUIRED required)
+ fi
+
+ PHP_EVAL_INCLINE($LIBVIRT_INCLUDE)
+ PHP_EVAL_LIBLINE($LIBVIRT_LIBRARY, LIBVIRT_SHARED_LIBADD)
+
+ AC_MSG_CHECKING(libvirt-qemu version)
+ QEMU_VERSION=`$PKG_CONFIG libvirt-qemu --modversion`
+ if $PKG_CONFIG libvirt-qemu --atleast-version=$LIBVIRT_REQUIRED ; then
+ QEMU_INCLUDE=`$PKG_CONFIG libvirt-qemu --cflags`
+ QEMU_LIBRARY=`$PKG_CONFIG libvirt-qemu --libs`
+ AC_MSG_RESULT($QEMU_VERSION)
+ else
+ AC_MSG_ERROR(QEMU_VERSION found, but $LIBVIRT_REQUIRED required)
+ fi
+
+ PHP_EVAL_INCLINE($QEMU_INCLUDE)
+ PHP_EVAL_LIBLINE($QEMU_LIBRARY, LIBVIRT_SHARED_LIBADD)
+
+ AC_MSG_CHECKING(libxml version)
+ LIBXML_VERSION=`$PKG_CONFIG libxml-2.0 --modversion`
+ if $PKG_CONFIG libxml-2.0 --atleast-version=$LIBXML_REQUIRED ; then
+ LIBXML_INCLUDE=`$PKG_CONFIG libxml-2.0 --cflags`
+ LIBXML_LIBRARY=`$PKG_CONFIG libxml-2.0 --libs`
+ AC_MSG_RESULT($LIBXML_VERSION)
+ else
+ AC_MSG_ERROR($LIBXML_VERSION found, but $LIBXML_REQUIRED required)
+ fi
+ PHP_EVAL_INCLINE($LIBXML_INCLUDE)
+ PHP_EVAL_LIBLINE($LIBXML_LIBRARY, LIBVIRT_SHARED_LIBADD)
+
+ PHP_SUBST(LIBVIRT_SHARED_LIBADD)
+ PHP_NEW_EXTENSION(libvirt, src/, $ext_shared)
+fi
Which yet again is lacking a lot of features that are in configure.ac, but it could have
been good starting point.
Anyway, we should either use phpize or configure.ac -- because phpize is unhappy with fact
that we have the two at the same time.
Michal