diff --git a/cfg.mk b/cfg.mk
index ab163af338ec63a470bd506c55742180fa590149..ff9adcb1908bfc4f4a94a4a36019ac4b82269199 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -831,3 +831,5 @@ exclude_file_name_regexp--sc_size_of_brackets = cfg.mk
exclude_file_name_regexp--sc_correct_id_types = \
(^src/locking/lock_protocol.x$$)
+
+exclude_file_name_regexp--sc_m4_quote_check = m4/virt-lib.m4
diff --git a/m4/virt-lib.m4 b/m4/virt-lib.m4
new file mode 100644
index 0000000000000000000000000000000000000000..771c37615e507cb2ad77cbdd894672d8922bdd5a
--- /dev/null
+++ b/m4/virt-lib.m4
@@ -0,0 +1,391 @@
+dnl
+dnl virt-lib.m4: Helper macros for checking for libraries
+dnl
+dnl Copyright (C) 2012-2013 Red Hat, Inc.
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library. If not, see
+dnl .
+dnl
+
+
+dnl Probe for existence of libXXXX and set WITH_XXX
+dnl config header var, WITH_XXXX make conditional and
+dnl with_XXX configure shell var.
+dnl
+dnl LIBVIRT_CHECK_LIB([CHECK_NAME], [LIBRARY_NAME],
+dnl [FUNCTION_NAME], [HEADER_NAME])
+dnl
+dnl CHECK_NAME: Suffix/prefix used for variables / flags, in uppercase.
+dnl Used to set
+dnl config.h: WITH_XXX macro
+dnl Makefile: WITH_XXX conditional
+dnl Makefile: XXX_CFLAGS, XXX_LIBS variables
+dnl configure: --with-xxx argument
+dnl configure: with_xxx variable
+dnl
+dnl LIBRARY_NAME: base name of library to check for eg libXXX.so
+dnl FUNCTION_NAME: function to check for in libXXX.so
+dnl HEADER_NAME: header file to check for
+dnl
+dnl e.g.
+dnl
+dnl LIBVIRT_CHECK_LIB([SELINUX], [selinux],
+dnl [getfilecon], [selinux/selinux.h])
+dnl LIBVIRT_CHECK_LIB([SANLOCK], [sanlock_client],
+dnl [sanlock_init], [sanlock.h])
+dnl LIBVIRT_CHECK_LIB([LIBATTR], [attr],
+dnl [getxattr], [attr/attr.h])
+dnl
+AC_DEFUN([LIBVIRT_CHECK_LIB],[
+ m4_pushdef([check_name], [$1])
+ m4_pushdef([library_name], [$2])
+ m4_pushdef([function_name], [$3])
+ m4_pushdef([header_name], [$4])
+
+ m4_pushdef([check_name_lc], m4_tolower(check_name))
+
+ m4_pushdef([config_var], [WITH_]check_name)
+ m4_pushdef([make_var], [WITH_]check_name)
+ m4_pushdef([cflags_var], check_name[_CFLAGS])
+ m4_pushdef([libs_var], check_name[_LIBS])
+ m4_pushdef([arg_var], [with-]check_name_lc)
+ m4_pushdef([with_var], [with_]check_name_lc)
+
+ AC_ARG_WITH(check_name_lc,
+ [AS_HELP_STRING([--arg_var],
+ [with lib]]m4_dquote(library_name)[[ support @<:@default=check@:>@])],
+ [],[with_var][=check])
+
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+ cflags_var=
+ libs_var=
+
+ fail=0
+ if test "x$with_var" != "xno" ; then
+ if test "x$with_var" != "xyes" && test "x$with_var" != "xcheck" ; then
+ cflags_var="-I$with_var/include"
+ libs_var="-L$with_var/lib"
+ fi
+ CFLAGS="$CFLAGS $cflags_var"
+ LIBS="$LIBS $libs_var"
+ AC_CHECK_LIB(library_name, function_name, [],[
+ if test "x$with_var" != "xcheck"; then
+ fail=1
+ fi
+ m4_expand(with_var[=no])
+ ])
+ if test "$fail" = "0" && test "x$with_var" != "xno" ; then
+ AC_CHECK_HEADER([header_name], [
+ m4_expand(with_var[=yes])
+ ],[
+ if test "x$with_var" != "xcheck"; then
+ fail=1
+ fi
+ m4_expand(with_var[=no])
+ ])
+ fi
+ fi
+
+ LIBS=$old_LIBS
+ CFLAGS=$old_CFLAGS
+
+ if test $fail = 1; then
+ AC_MSG_ERROR([You must install the lib]library_name[ library & headers to compile libvirt])
+ else
+ if test "x$with_var" = "xyes" ; then
+ if test "x$libs_var" = 'x' ; then
+ libs_var="-l[]library_name"
+ else
+ libs_var="$libs_var -l[]library_name"
+ fi
+ AC_DEFINE_UNQUOTED(config_var, 1, [whether lib]library_name[ is available])
+ fi
+
+ AM_CONDITIONAL(make_var, [test "x$with_var" = "xyes"])
+
+ AC_SUBST(cflags_var)
+ AC_SUBST(libs_var)
+ fi
+
+ m4_popdef([with_var])
+ m4_popdef([arg_var])
+ m4_popdef([libs_var])
+ m4_popdef([cflags_var])
+ m4_popdef([make_var])
+ m4_popdef([config_var])
+
+ m4_popdef([check_name_lc])
+
+ m4_popdef([header_name])
+ m4_popdef([function_name])
+ m4_popdef([library_name])
+ m4_popdef([check_name])
+])
+
+dnl Probe for existence of libXXXX and set WITH_XXX
+dnl config header var, WITH_XXXX make conditional and
+dnl with_XXX configure shell var.
+dnl
+dnl LIBVIRT_CHECK_LIB_ALT([CHECK_NAME], [LIBRARY_NAME],
+dnl [FUNCTION_NAME], [HEADER_NAME],
+dnl [CHECK_NAME_ALT, [LIBRARY_NAME_ALT],
+dnl [FUNCTION_NAME_ALT], [HEADER_NAME_ALT])
+dnl
+dnl CHECK_NAME: Suffix/prefix used for variables / flags, in uppercase.
+dnl Used to set
+dnl config.h: WITH_XXX macro
+dnl Makefile: WITH_XXX conditional
+dnl Makefile: XXX_CFLAGS, XXX_LIBS variables
+dnl configure: --with-xxx argument
+dnl configure: with_xxx variable
+dnl
+dnl LIBRARY_NAME: base name of library to check for eg libXXX.so
+dnl FUNCTION_NAME: function to check for in libXXX.so
+dnl HEADER_NAME: header file to check for
+dnl
+dnl CHECK_NAME_ALT: Suffix/prefix used to set additional
+dnl variables if alternative check succeeds
+dnl config.h: WITH_XXX macro
+dnl Makefile: WITH_XXX conditional
+dnl NB all vars for CHECK_NAME are also set
+dnl LIBRARY_NAME_ALT: alternative library name to check for
+dnl FUNCTION_NAME_ALT: alternative function name to check for
+dnl HEADER_NAME_ALT: alternative header file to check for
+dnl
+dnl e.g.
+dnl
+dnl LIBVIRT_CHECK_LIB([YAJL], [yajl],
+dnl [yajl_parse_complete], [yajl/yajl_common.h],
+dnl [YAJL2], [yajl],
+dnl [yajl_tree_parse], [yajl/yajl_common.h])
+dnl
+AC_DEFUN([LIBVIRT_CHECK_LIB_ALT],[
+ m4_pushdef([check_name], [$1])
+ m4_pushdef([library_name], [$2])
+ m4_pushdef([function_name], [$3])
+ m4_pushdef([header_name], [$4])
+ m4_pushdef([check_name_alt], [$5])
+ m4_pushdef([library_name_alt], [$6])
+ m4_pushdef([function_name_alt], [$7])
+ m4_pushdef([header_name_alt], [$8])
+
+ m4_pushdef([check_name_lc], m4_tolower(check_name))
+
+ m4_pushdef([config_var], [WITH_]check_name)
+ m4_pushdef([make_var], [WITH_]check_name)
+ m4_pushdef([cflags_var], check_name[_CFLAGS])
+ m4_pushdef([libs_var], check_name[_LIBS])
+ m4_pushdef([arg_var], [with-]check_name_lc)
+ m4_pushdef([with_var], [with_]check_name_lc)
+ m4_pushdef([config_var_alt], [WITH_]check_name_alt)
+ m4_pushdef([make_var_alt], [WITH_]check_name_alt)
+
+ AC_ARG_WITH(check_name_lc,
+ [AS_HELP_STRING([--arg_var],
+ [with lib]]m4_dquote(library_name)[[ support @<:@default=check@:>@])],
+ [],[with_var][=check])
+
+ old_LIBS=$LIBS
+ old_CFLAGS=$CFLAGS
+ cflags_var=
+ libs_var=
+
+ fail=0
+ alt=0
+ if test "x$with_var" != "xno" ; then
+ if test "x$with_var" != "xyes" && test "x$with_var" != "xcheck" ; then
+ cflags_var="-I$with_var/include"
+ libs_var="-L$with_var/lib"
+ fi
+ CFLAGS="$CFLAGS $cflags_var"
+ LIBS="$LIBS $libs_var"
+ AC_CHECK_LIB(library_name, function_name, [],[
+ AC_CHECK_LIB(library_name_alt, function_name_alt, [
+ alt=1
+ ],[
+ if test "x$with_var" != "xcheck"; then
+ fail=1
+ fi
+ m4_expand(with_var[=no])
+ ])
+ ])
+ if test "$fail" = "0" && test "x$with_var" != "xno" ; then
+ AC_CHECK_HEADER([header_name], [
+ m4_expand(with_var[=yes])
+ ],[
+ AC_CHECK_HEADER([header_name_alt], [
+ m4_expand(with_var[=yes])
+ ],[
+ if test "x$with_var" != "xcheck"; then
+ fail=1
+ fi
+ m4_expand(with_var[=no])
+ ])
+ ])
+ fi
+ fi
+
+ LIBS=$old_LIBS
+ CFLAGS=$old_CFLAGS
+
+ if test $fail = 1; then
+ AC_MSG_ERROR([You must install the lib]library_name[ library & headers to compile libvirt])
+ else
+ if test "x$with_var" = "xyes" ; then
+ if test "x$libs_var" = 'x' ; then
+ libs_var="-l[]library_name"
+ else
+ libs_var="$libs_var -l[]library_name"
+ fi
+
+ AC_DEFINE_UNQUOTED(config_var, 1, [whether lib]library_name[ is available])
+ if test "$alt" = "1" ; then
+ AC_DEFINE_UNQUOTED(config_var_alt, 1, [whether lib]library_name[ is available])
+ fi
+ fi
+
+ AM_CONDITIONAL(make_var, [test "x$with_var" = "xyes"])
+ AM_CONDITIONAL(make_var_alt, [test "x$with_var" = "xyes" && test "$alt" = "1"])
+
+ AC_SUBST(cflags_var)
+ AC_SUBST(libs_var)
+ fi
+
+ m4_popdef([make_var_alt])
+ m4_popdef([config_var_alt])
+ m4_popdef([with_var])
+ m4_popdef([arg_var])
+ m4_popdef([libs_var])
+ m4_popdef([cflags_var])
+ m4_popdef([make_var])
+ m4_popdef([config_var])
+
+ m4_popdef([check_name_lc])
+
+ m4_popdef([header_name_alt])
+ m4_popdef([function_name_alt])
+ m4_popdef([library_name_alt])
+ m4_popdef([header_name])
+ m4_popdef([function_name])
+ m4_popdef([library_name])
+ m4_popdef([check_name])
+])
+
+dnl
+dnl Probe for existence of libXXXX and set WITH_XXX
+dnl config header var, WITH_XXXX make conditional and
+dnl with_XXX configure shell var.
+dnl
+dnl LIBVIRT_CHECK_PKG([CHECK_NAME], [PC_NAME], [PC_VERSION])
+dnl
+dnl CHECK_NAME: Suffix/prefix used for variables / flags, in uppercase.
+dnl Used to set
+dnl config.h: WITH_XXX macro
+dnl Makefile: WITH_XXX conditional
+dnl Makefile: XXX_CFLAGS, XXX_LIBS variables
+dnl configure: --with-xxx argument
+dnl configure: with_xxx variable
+dnl PC_NAME: Name of the pkg-config module
+dnl PC_VERSION: Version of the pkg-config module
+dnl
+dnl eg
+dnl
+dnl LIBVIRT_CHECK_PKG([NETCF], [netcf], [0.1.4])
+dnl
+AC_DEFUN([LIBVIRT_CHECK_PKG],[
+ m4_pushdef([check_name], [$1])
+ m4_pushdef([pc_name], [$2])
+ m4_pushdef([pc_version], [$3])
+
+ m4_pushdef([check_name_lc], m4_tolower(check_name))
+
+ m4_pushdef([config_var], [WITH_]check_name)
+ m4_pushdef([make_var], [WITH_]check_name)
+ m4_pushdef([cflags_var], check_name[_CFLAGS])
+ m4_pushdef([libs_var], check_name[_LIBS])
+ m4_pushdef([arg_var], [with-]check_name_lc)
+ m4_pushdef([with_var], [with_]check_name_lc)
+
+ AC_ARG_WITH(check_name_lc,
+ [AS_HELP_STRING([--arg_var],
+ [with ]]m4_dquote(pc_name)[[ (>= ]]m4_dquote(pc_version)[[) support @<:@default=check@:>@])],
+ [],[with_var][=check])
+
+ fail=0
+ if test "x$with_var" != "xno" ; then
+ PKG_CHECK_MODULES(check_name, pc_name[ >= ]pc_version, [
+ m4_expand(with_var[=yes])
+ ],[
+ if test "x$with_var" != "xcheck"; then
+ fail=1
+ fi
+ m4_expand(with_var[=no])
+ ])
+ fi
+
+ if test $fail = 1; then
+ AC_MSG_ERROR([You must install the ]pc_name[ >= ]pc_version[pkg-config module to compile libvirt])
+ fi
+
+ if test "x$with_var" = "xyes" ; then
+ AC_DEFINE_UNQUOTED(config_var, 1, [whether ]pc_name[ >= ]pc_version[ is available])
+ fi
+
+ AM_CONDITIONAL(make_var, [test "x$with_var" = "xyes"])
+
+ m4_popdef([with_var])
+ m4_popdef([arg_var])
+ m4_popdef([libs_var])
+ m4_popdef([cflags_var])
+ m4_popdef([make_var])
+ m4_popdef([config_var])
+
+ m4_popdef([check_name_lc])
+
+ m4_popdef([pc_version])
+ m4_popdef([pc_name])
+ m4_popdef([check_name])
+])
+
+dnl
+dnl To be used after a call to LIBVIRT_CHECK_LIB,
+dnl LIBVIRT_CHECK_LIB_ALT or LIBVIRT_CHECK_PKG
+dnl to print the result status
+dnl
+dnl LIBVIRT_RESULT_LIB([CHECK_NAME])
+dnl
+dnl CHECK_NAME: Suffix/prefix used for variables / flags, in uppercase.
+dnl
+dnl LIBVIRT_RESULT_LIB([SELINUX])
+dnl
+AC_DEFUN([LIBVIRT_RESULT_LIB],[
+ m4_pushdef([check_name], [$1])
+
+ m4_pushdef([check_name_lc], m4_tolower(check_name))
+
+ m4_pushdef([cflags_var], check_name[_CFLAGS])
+ m4_pushdef([libs_var], check_name[_LIBS])
+ m4_pushdef([with_var], [with_]check_name_lc)
+
+ LIBVIRT_RESULT(check_name_lc, [$with_var], [CFLAGS='$cflags_var' LIBS='$libs_var'])
+
+ m4_popdef([with_var])
+ m4_popdef([libs_var])
+ m4_popdef([cflags_var])
+
+ m4_popdef([check_name_lc])
+
+ m4_popdef([check_name])
+])
diff --git a/m4/virt-result.m4 b/m4/virt-result.m4
new file mode 100644
index 0000000000000000000000000000000000000000..cc622fe35bdf778a844cafbf4db18b3a69f15450
--- /dev/null
+++ b/m4/virt-result.m4
@@ -0,0 +1,42 @@
+dnl
+dnl virt-result.m4: Helper macros for checking for libraries
+dnl
+dnl Copyright (C) 2012-2013 Red Hat, Inc.
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library. If not, see
+dnl .
+dnl
+
+dnl
+dnl To be used to print the results of a conditional test
+dnl
+dnl LIBVIRT_RESULT(CHECK_NAME, STATUS, DETAILS)
+dnl
+dnl CHECK_NAME: Name of the item being checked
+dnl STATUS: 'yes' or 'no' result of check
+dnl DETAILS: Details of result eg compiler flags
+dnl
+dnl eg
+dnl
+dnl LIBVIRT_RESULT([yajl], [yes], [-I/opt/yajl/include -lyajl])
+dnl
+AC_DEFUN([LIBVIRT_RESULT], [
+ if test "$2" = "no" || test -z "$3" ; then
+ STR=`printf "%10s: %-3s" "$1" "$2"`
+ else
+ STR=`printf "%10s: %-3s (%s)" "$1" "$2" "$3"`
+ fi
+
+ AC_MSG_NOTICE([$STR])
+])