As it turned out, we need to share some enums and declarations between libvirt.h and libvirt-admin.h, but since our policy forbids direct includes of libvirt*.h, there has to be some header exempt from this rule. This patch moves the relevant part of code from libvirt.h.in to libvirt-common.h.in. Moreover, since there is no need to have libvirt.h generated anymore, introduce a new header libvirt.h which was previosly ignored from git and make the common header ignored and generated instead. --- I'd like add a couple more patches as a reaction to some reviews of this series, namely, adding a new admin configuration file, adding a new common public header file and also admin reimplementation of virGetVersion. .gitignore | 2 +- cfg.mk | 2 +- configure.ac | 2 +- docs/Makefile.am | 3 +- include/libvirt/Makefile.am | 2 +- include/libvirt/libvirt-admin.h | 3 + include/libvirt/libvirt-common.h.in | 127 ++++++++++++++++++++++++++++++++++++ include/libvirt/libvirt-host.h | 30 --------- include/libvirt/libvirt.h | 54 +++++++++++++++ include/libvirt/libvirt.h.in | 109 ------------------------------- 10 files changed, 190 insertions(+), 144 deletions(-) create mode 100644 include/libvirt/libvirt-common.h.in create mode 100644 include/libvirt/libvirt.h delete mode 100644 include/libvirt/libvirt.h.in diff --git a/.gitignore b/.gitignore index 2d52a8f..63f4edf 100644 --- a/.gitignore +++ b/.gitignore @@ -87,7 +87,7 @@ /gnulib/lib/* /gnulib/m4/* /gnulib/tests/* -/include/libvirt/libvirt.h +/include/libvirt/libvirt-common.h /libtool /libvirt-*.tar.gz /libvirt-[0-9]* diff --git a/cfg.mk b/cfg.mk index fd9fd75..85cbf95 100644 --- a/cfg.mk +++ b/cfg.mk @@ -1215,7 +1215,7 @@ exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \ ^(src/internal\.h$$|tools/wireshark/src/packet-libvirt.h$$) exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \ - ^(tools/|examples/|include/libvirt/(virterror|libvirt-(qemu|lxc))\.h$$) + ^(tools/|examples/|include/libvirt/(virterror|libvirt(-(admin|qemu|lxc))?)\.h$$) exclude_file_name_regexp--sc_prohibit_int_ijk = \ ^(src/remote_protocol-structs|src/remote/remote_protocol.x|cfg.mk|include/)$ diff --git a/configure.ac b/configure.ac index 4b7c9ed..a94308e 100644 --- a/configure.ac +++ b/configure.ac @@ -2789,7 +2789,7 @@ AC_CONFIG_FILES([\ src/libvirt-lxc.pc \ libvirt.spec mingw-libvirt.spec \ po/Makefile.in \ - include/libvirt/Makefile include/libvirt/libvirt.h \ + include/libvirt/Makefile include/libvirt/libvirt-common.h \ daemon/Makefile \ tools/Makefile \ tests/Makefile \ diff --git a/docs/Makefile.am b/docs/Makefile.am index bfae35e..13d7a5f 100644 --- a/docs/Makefile.am +++ b/docs/Makefile.am @@ -301,7 +301,8 @@ EXTRA_DIST += $(APIBUILD_STAMP) $(python_generated_files): $(APIBUILD_STAMP) $(APIBUILD_STAMP): $(srcdir)/apibuild.py \ - $(top_srcdir)/include/libvirt/libvirt.h.in \ + $(top_srcdir)/include/libvirt/libvirt.h \ + $(top_srcdir)/include/libvirt/libvirt-common.h.in \ $(top_srcdir)/include/libvirt/libvirt-domain-snapshot.h \ $(top_srcdir)/include/libvirt/libvirt-domain.h \ $(top_srcdir)/include/libvirt/libvirt-event.h \ diff --git a/include/libvirt/Makefile.am b/include/libvirt/Makefile.am index 2d40621..8e5b1b8 100644 --- a/include/libvirt/Makefile.am +++ b/include/libvirt/Makefile.am @@ -37,7 +37,7 @@ virinc_HEADERS = libvirt.h \ install-exec-hook: $(mkinstalldirs) $(DESTDIR)$(virincdir) -EXTRA_DIST = libvirt.h.in +EXTRA_DIST = libvirt-common.h.in # Temporarily disabled, but we need it for building EXTRA_DIST += libvirt-admin.h diff --git a/include/libvirt/libvirt-admin.h b/include/libvirt/libvirt-admin.h index 9997cc2..ae033d1 100644 --- a/include/libvirt/libvirt-admin.h +++ b/include/libvirt/libvirt-admin.h @@ -30,6 +30,9 @@ extern "C" { # endif +# define __VIR_ADMIN_H_INCLUDES__ +# include <libvirt/libvirt-common.h> +# undef __VIR_ADMIN_H_INCLUDES__ /** * virAdmConnect: diff --git a/include/libvirt/libvirt-common.h.in b/include/libvirt/libvirt-common.h.in new file mode 100644 index 0000000..efbb91b --- /dev/null +++ b/include/libvirt/libvirt-common.h.in @@ -0,0 +1,127 @@ +/* -*- c -*- + * libvirt-common.h + * Summary: common macros and enums for the libvirt and libvirt-admin library + * Description: Provides common macros and enums needed by both libvirt and + * libvirt-admin libraries + * + * Copyright (C) 2015 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Erik Skultety <eskultet@xxxxxxxxxx> + */ + +#if !defined __VIR_LIBVIRT_H_INCLUDES__ && !defined __VIR_ADMIN_H_INCLUDES__ +# error "Don't include this file directly" +#endif + +#ifndef __VIR_VIRCOMMON_H__ +# define __VIR_VIRCOMMON_H__ + +# include <sys/types.h> + +# ifdef __cplusplus +extern "C" { +# endif + +# ifndef VIR_DEPRECATED + /* The feature is present in gcc-3.1 and newer. */ +# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) +# define VIR_DEPRECATED __attribute__((__deprecated__)) +# else +# define VIR_DEPRECATED /* nothing */ +# endif +# endif /* VIR_DEPRECATED */ + +# ifdef WIN32 +# ifdef LIBVIRT_STATIC +# define VIR_EXPORT_VAR extern +# else +# ifdef IN_LIBVIRT +# define VIR_EXPORT_VAR __declspec(dllexport) +# else +# define VIR_EXPORT_VAR __declspec(dllimport) extern +# endif +# endif +# else +# define VIR_EXPORT_VAR extern +# endif + +/* General note - in the header files, any linear enumeration which + * might be expanded in the future has an optional *_LAST value that + * gives the size of the enum at the time of compilation, if the user + * defines VIR_ENUM_SENTINELS. Enumerations for bit values do not + * have a *_LAST value, but additional bits may be defined. */ + +/* library versioning */ + +/** + * LIBVIR_VERSION_NUMBER: + * + * Macro providing the version of the library as + * version * 1,000,000 + minor * 1000 + micro + */ + +# define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@ + +/** + * LIBVIR_CHECK_VERSION: + * @major: major component of the version number + * @minor: minor component of the version number + * @micro: micro component of the version number + * + * Macro for developers to easily check what version of the library + * their code is compiling against. + * e.g. + * #if LIBVIR_CHECK_VERSION(1,1,3) + * // some code that only works in 1.1.3 and newer + * #endif + */ +# define LIBVIR_CHECK_VERSION(major, minor, micro) \ + ((major) * 1000000 + (minor) * 1000 + (micro) <= LIBVIR_VERSION_NUMBER) + +/* + * virFreeCallback: + * @opaque: opaque user data provided at registration + * + * Type for a callback cleanup function to be paired with a callback. This + * function will be called as a final chance to clean up the @opaque + * registered with the primary callback, at the time when the primary + * callback is deregistered. + * + * It is forbidden to call any other libvirt APIs from an + * implementation of this callback, since it can be invoked + * from a context which is not re-entrant safe. Failure to + * abide by this requirement may lead to application deadlocks + * or crashes. + */ +typedef void (*virFreeCallback)(void *opaque); + +typedef enum { + VIR_CONNECT_CLOSE_REASON_ERROR = 0, /* Misc I/O error */ + VIR_CONNECT_CLOSE_REASON_EOF = 1, /* End-of-file from server */ + VIR_CONNECT_CLOSE_REASON_KEEPALIVE = 2, /* Keepalive timer triggered */ + VIR_CONNECT_CLOSE_REASON_CLIENT = 3, /* Client requested it */ + +# ifdef VIR_ENUM_SENTINELS + VIR_CONNECT_CLOSE_REASON_LAST +# endif +} virConnectCloseReason; + +# ifdef __cplusplus +} +# endif + +#endif /* __VIR_VIRCOMMON_H__ */ diff --git a/include/libvirt/libvirt-host.h b/include/libvirt/libvirt-host.h index 3669711..8786fbb 100644 --- a/include/libvirt/libvirt-host.h +++ b/include/libvirt/libvirt-host.h @@ -29,24 +29,6 @@ # endif -/* - * virFreeCallback: - * @opaque: opaque user data provided at registration - * - * Type for a callback cleanup function to be paired with a callback. This - * function will be called as a final chance to clean up the @opaque - * registered with the primary callback, at the time when the primary - * callback is deregistered. - * - * It is forbidden to call any other libvirt APIs from an - * implementation of this callback, since it can be invoked - * from a context which is not re-entrant safe. Failure to - * abide by this requirement may lead to application deadlocks - * or crashes. - */ -typedef void (*virFreeCallback)(void *opaque); - - /** * virConnect: * @@ -755,18 +737,6 @@ char * virConnectGetSysinfo (virConnectPtr conn, int virConnectSetKeepAlive(virConnectPtr conn, int interval, unsigned int count); - -typedef enum { - VIR_CONNECT_CLOSE_REASON_ERROR = 0, /* Misc I/O error */ - VIR_CONNECT_CLOSE_REASON_EOF = 1, /* End-of-file from server */ - VIR_CONNECT_CLOSE_REASON_KEEPALIVE = 2, /* Keepalive timer triggered */ - VIR_CONNECT_CLOSE_REASON_CLIENT = 3, /* Client requested it */ - -# ifdef VIR_ENUM_SENTINELS - VIR_CONNECT_CLOSE_REASON_LAST -# endif -} virConnectCloseReason; - /** * virConnectCloseFunc: * @conn: virConnect connection diff --git a/include/libvirt/libvirt.h b/include/libvirt/libvirt.h new file mode 100644 index 0000000..36f6d60 --- /dev/null +++ b/include/libvirt/libvirt.h @@ -0,0 +1,54 @@ +/* -*- c -*- + * libvirt.h: Core interfaces for the libvirt library + * Summary: core interfaces for the libvirt library + * Description: Provides the interfaces of the libvirt library to handle + * virtualized domains + * + * Copyright (C) 2005-2006, 2010-2014 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + * + * Author: Daniel Veillard <veillard@xxxxxxxxxx> + */ + +#ifndef __VIR_VIRLIB_H__ +# define __VIR_VIRLIB_H__ + +# include <sys/types.h> + +# ifdef __cplusplus +extern "C" { +# endif + +# define __VIR_LIBVIRT_H_INCLUDES__ +# include <libvirt/libvirt-common.h> +# include <libvirt/libvirt-host.h> +# include <libvirt/libvirt-domain.h> +# include <libvirt/libvirt-domain-snapshot.h> +# include <libvirt/libvirt-event.h> +# include <libvirt/libvirt-interface.h> +# include <libvirt/libvirt-network.h> +# include <libvirt/libvirt-nodedev.h> +# include <libvirt/libvirt-nwfilter.h> +# include <libvirt/libvirt-secret.h> +# include <libvirt/libvirt-storage.h> +# include <libvirt/libvirt-stream.h> +# undef __VIR_LIBVIRT_H_INCLUDES__ + +# ifdef __cplusplus +} +# endif + +#endif /* __VIR_VIRLIB_H__ */ diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in deleted file mode 100644 index 7706978..0000000 --- a/include/libvirt/libvirt.h.in +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- c -*- - * libvirt.h: Core interfaces for the libvirt library - * Summary: core interfaces for the libvirt library - * Description: Provides the interfaces of the libvirt library to handle - * virtualized domains - * - * Copyright (C) 2005-2006, 2010-2014 Red Hat, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * <http://www.gnu.org/licenses/>. - * - * Author: Daniel Veillard <veillard@xxxxxxxxxx> - */ - -#ifndef __VIR_VIRLIB_H__ -# define __VIR_VIRLIB_H__ - -# include <sys/types.h> - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef VIR_DEPRECATED - /* The feature is present in gcc-3.1 and newer. */ -# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) -# define VIR_DEPRECATED __attribute__((__deprecated__)) -# else -# define VIR_DEPRECATED /* nothing */ -# endif -# endif /* VIR_DEPRECATED */ - -# ifdef WIN32 -# ifdef LIBVIRT_STATIC -# define VIR_EXPORT_VAR extern -# else -# ifdef IN_LIBVIRT -# define VIR_EXPORT_VAR __declspec(dllexport) -# else -# define VIR_EXPORT_VAR __declspec(dllimport) extern -# endif -# endif -# else -# define VIR_EXPORT_VAR extern -# endif - -/* General note - in the header files, any linear enumeration which - * might be expanded in the future has an optional *_LAST value that - * gives the size of the enum at the time of compilation, if the user - * defines VIR_ENUM_SENTINELS. Enumerations for bit values do not - * have a *_LAST value, but additional bits may be defined. */ - -/* library versioning */ - -/** - * LIBVIR_VERSION_NUMBER: - * - * Macro providing the version of the library as - * version * 1,000,000 + minor * 1000 + micro - */ - -# define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@ - -/** - * LIBVIR_CHECK_VERSION: - * @major: major component of the version number - * @minor: minor component of the version number - * @micro: micro component of the version number - * - * Macro for developers to easily check what version of the library - * their code is compiling against. - * e.g. - * #if LIBVIR_CHECK_VERSION(1,1,3) - * // some code that only works in 1.1.3 and newer - * #endif - */ -# define LIBVIR_CHECK_VERSION(major, minor, micro) \ - ((major) * 1000000 + (minor) * 1000 + (micro) <= LIBVIR_VERSION_NUMBER) - -# define __VIR_LIBVIRT_H_INCLUDES__ -# include <libvirt/libvirt-host.h> -# include <libvirt/libvirt-domain.h> -# include <libvirt/libvirt-domain-snapshot.h> -# include <libvirt/libvirt-event.h> -# include <libvirt/libvirt-interface.h> -# include <libvirt/libvirt-network.h> -# include <libvirt/libvirt-nodedev.h> -# include <libvirt/libvirt-nwfilter.h> -# include <libvirt/libvirt-secret.h> -# include <libvirt/libvirt-storage.h> -# include <libvirt/libvirt-stream.h> -# undef __VIR_LIBVIRT_H_INCLUDES__ - -# ifdef __cplusplus -} -# endif - -#endif /* __VIR_VIRLIB_H__ */ -- 2.4.3 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list