[Libvir] PATCH 1/5: Use pkg-config for libxml

Daniel P. Berrange berrange at redhat.com
Tue Sep 18 13:40:06 UTC 2007


On Tue, Sep 18, 2007 at 03:32:35AM -0400, Daniel Veillard wrote:
> On Tue, Sep 18, 2007 at 02:29:50AM +0100, Daniel P. Berrange wrote:
> > Currently if you have a configured working directory and you touch some
> > file that would cause autoconf to re-run configure it'll crash & burn with
> > an error like
> > 
> > 
> > $ make
> > cd . && /bin/sh /home/berrange/src/xen/libvirt/missing --run aclocal-1.9 -I m4
> > cd . && /bin/sh /home/berrange/src/xen/libvirt/missing --run automake-1.9 --gnu 
> > cd . && /bin/sh /home/berrange/src/xen/libvirt/missing --run autoconf
> > configure.in:268: error: possibly undefined macro: PKG_CONFIG_ENABLED
> >       If this token and others are legitimate, please use m4_pattern_allow.
> >       See the Autoconf documentation.
> > 
> > 
> > This is due to this bit of configure where we reference an env variable
> > which doesn't exist:
> > 
> > 
> > if test "z$with_libxml" = "zno" ; then 
> >     AC_MSG_CHECKING(for libxml2 libraries >= $LIBXML_MIN_VERSION) 
> >     AC_MSG_ERROR(libxml2 >= $LIBXML_MIN_VERSION is required for $XMLSEC_PACKAGE)
> > elif test "z$with_libxml" = "z" -a "z$PKG_CONFIG_ENABLED" = "zyes" ; then
> >     PKG_CHECK_MODULES(LIBXML, libxml-2.0 >= $LIBXML_MIN_VERSION,
> >         [LIBXML_FOUND=yes],
> >         [LIBXML_FOUND=no])
> > fi
> > 
> > 
> > The whole test for libxml is overly complex and can be reduced to a single
> > call to PKG_CHECK_MODULES. There is no need to have special configure 
> > script --with_libxml args to override the location, since pkg-config already
> > gives you two ways todo that - either use PKG_CONFIG_PATH to point to your
> > alternative install, or use  LIBXML_CFLAGS and LIBXML_LIBS env vars to set
> > the explicitly flags.
> 
>   IMHO this severely reduces the set of OSes where configure will wok as a
> result. Not everything ships with all libraries registered with pkg-config.
> I would like to hear what the non-Linux users think. xml2-config is part of
> libxml2 distribution, pkg-config is not, so the pkg-config check will work
> only if the OS integration decided to make it work. To me the goal of configure
> is to get maximum portability (otherwise honnestly, why bother with the 
> auto*, right ?)

pkg-config is trivial to install on any common OS & is widely used by all 
modern libraries. The whole point is to increase portability & reliability
of package configuration and give developers a standard way to override 
what versions of an library you build against. Only having to worry about
pkg-config, instead of a multitude of different library specific XXX-config
scripts is a more pleasant proposition. It also increases the clarity of
the configure scripts.

>   In the case of libvirt though we may conclude that we target only OSes
> where pkg-config is set up, could someone clarify to me the status of
> pkg-config (at least for libxml2) on:
>      - Solaris (I guess yes)
>      - OS-X
>      - cygwin

http://pkg-config.freedesktop.org/wiki/

  "pkg-config works on multiple platforms: Linux and other UNIX-like 
   operating systems, Mac OS X and Windows. It does not require anything 
   but a reasonably well working C compiler and a C library"


Any recent library is using pkg-config for build integration - we provide a
pkgconfig script ourselves in libvirt. It is the defacto standard as can be
seen from the listof pkg-config files installed even on FC6....

alsa.pc                       libgsf-gnome-1.pc
aspell.pc                     libgtop-2.0.pc
atk.pc                        libgvc.pc
audiofile.pc                  libIDL-2.0.pc
bigreqsproto.pc               libidn.pc
blkid.pc                      libloginhelper-1.0.pc
bonobo-activation-2.0.pc      libmetacity-private.pc
cairo-ft.pc                   libnfsidmap.pc
cairo.pc                      libnm-util.pc
cairo-pdf.pc                  libpanelapplet-2.0.pc
cairo-png.pc                  libpathplan.pc
cairo-ps.pc                   libpng12.pc
cairo-svg.pc                  libpng.pc
cairo-xlib.pc                 librpcsecgss.pc
cairo-xlib-xrender.pc         librsvg-2.0.pc
com_err.pc                    libspi-1.0.pc
compositeproto.pc             libssl.pc
cspi-1.0.pc                   libstartup-notification-1.0.pc
damageproto.pc                libstatgrab.pc
dbus-1.pc                     libuser.pc
dbus-glib-1.pc                libvirt.pc
devmapper.pc                  libwnck-1.0.pc
dmxproto.pc                   libxml-2.0.pc
e2p.pc                        libxslt.pc
eel-2.0.pc                    loudmouth-1.0.pc
esound.pc                     neon.pc
evieproto.pc                  NetworkManager.pc
ext2fs.pc                     nspr.pc
firefox-gtkmozembed.pc        nss.pc
firefox-js.pc                 ogg.pc
firefox-plugin.pc             openssl.pc
firefox-xpcom.pc              ORBit-2.0.pc
fixesproto.pc                 ORBit-CosNaming-2.0.pc
fontcacheproto.pc             ORBit-idl-2.0.pc
fontconfig.pc                 ORBit-imodule-2.0.pc
fontenc.pc                    pangocairo.pc
fontsproto.pc                 pangoft2.pc
fontutil.pc                   pango.pc
freetype2.pc                  pangoxft.pc
gail.pc                       pangox.pc
gconf-2.0.pc                  pycairo.pc
gdk-2.0.pc                    pygobject-2.0.pc
gdk-pixbuf-2.0.pc             pygtk-2.0.pc
gdk-pixbuf-xlib-2.0.pc        randrproto.pc
gdk-x11-2.0.pc                recordproto.pc
gdlib.pc                      renderproto.pc
glib-2.0.pc                   resourceproto.pc
glproto.pc                    scrnsaverproto.pc
gmime-sharp.pc                sdl.pc
gmodule-2.0.pc                shared-mime-info.pc
gmodule-export-2.0.pc         sm.pc
gmodule-no-export-2.0.pc      sqlite3.pc
gnet-2.0.pc                   ss.pc
gnome-desktop-2.0.pc          tomboy-plugins.pc
gnome-keyring-1.pc            trapproto.pc
gnome-mime-data-2.0.pc        uuid.pc
gnome-pilot-2.0.pc            valgrind.pc
gnome-python-desktop-2.0.pc   videoproto.pc
gnome-python-extras-2.0.pc    vorbisenc.pc
gnome-screensaver.pc          vorbisfile.pc
gnome-settings-daemon.pc      vorbis.pc
gnome-vfs-2.0.pc              vte.pc
gnome-vfs-module-2.0.pc       x11.pc
gnome-window-settings-2.0.pc  xau.pc
gnutls-extra.pc               xaw6.pc
gnutls.pc                     xaw7.pc
gobject-2.0.pc                xcmiscproto.pc
gswitchit.pc                  xcomposite.pc
gthread-2.0.pc                xcursor.pc
gtk+-2.0.pc                   xdamage.pc
gtk-engines-2.pc              xdmcp.pc
gtksourceview-1.0.pc          xevie.pc
gtk+-unix-print-2.0.pc        xext.pc
gtk-vnc-1.0.pc                xextproto.pc
gtk+-x11-2.0.pc               xf86bigfontproto.pc
gweather.pc                   xf86dgaproto.pc
hal.pc                        xf86driproto.pc
hal-storage.pc                xf86miscproto.pc
ice.pc                        xf86rushproto.pc
inputproto.pc                 xf86vidmodeproto.pc
kbproto.pc                    xfixes.pc
libagraph.pc                  xfontcache.pc
libart-2.0.pc                 xfont.pc
libbonobo-2.0.pc              xft.pc
libbonoboui-2.0.pc            xinerama.pc
libcdt.pc                     xineramaproto.pc
libcroco-0.6.pc               xi.pc
libcrypto.pc                  xmu.pc
libcurl.pc                    xmuu.pc
libdrm.pc                     xorg-server.pc
libexslt.pc                   xpm.pc
libgail-gnome.pc              xproto.pc
libgcj.pc                     xproxymngproto.pc
libglade-2.0.pc               xrandr.pc
libgnome-2.0.pc               xrender.pc

Regards,
Dan.
-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 




More information about the libvir-list mailing list