[libvirt] [PATCHv2] Macro for testing the version you are compiling with

Doug Goldstein cardoe at cardoe.com
Wed Nov 13 19:19:40 UTC 2013


On Wed, Nov 13, 2013 at 12:26 PM, Eric Blake <eblake at redhat.com> wrote:
> On 11/13/2013 11:02 AM, Doug Goldstein wrote:
>> Added a macro similar to the GLib's GLIB_CHECK_VERSION so that one can
>> simplydo something like:
>
> s/simplydo/simply do/
>
>>
>>  #if LIBVIRT_CHECK_VERSION(1,1,3)
>>    /* Call function here that appeared in 1.1.3 and newer */
>>    virSomeNewFunction();
>>  #endif
>> ---
>>  include/libvirt/libvirt.h.in | 14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>
> Closer.
>
>>
>> diff --git a/include/libvirt/libvirt.h.in b/include/libvirt/libvirt.h.in
>> index 80b2d78..65f98c6 100644
>> --- a/include/libvirt/libvirt.h.in
>> +++ b/include/libvirt/libvirt.h.in
>> @@ -1466,6 +1466,20 @@ VIR_EXPORT_VAR virConnectAuthPtr virConnectAuthPtrDefault;
>>
>>  #define LIBVIR_VERSION_NUMBER @LIBVIRT_VERSION_NUMBER@
>>
>> +/**
>> + * LIBVIRT_CHECK_VERSION:
>
> Should we document @major, @minor, @micro here, so the doc comments are
> more complete?
>
>> + *
>> + * 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)
>
> Mismatch between LIBVIRT_ vs. LIBVIR_.  Given that we already expose
> LIBVIR_VERSION_NUMBER, I think the LIBVIR_ prefix is preferred for the
> public interface, and that this example is correct...

Last minute change from v1 because I noticed Daniel called it
LIBVIRT_CHECK_VERSION. I originally had the macro start with LIBVIR.
Its up to you guys what you'd prefer.

>
>> + *   // some code that only works in 1.1.3 and newer
>> + * #endif
>
> Indent the #if and #endif, so that the generated html page represents
> this as a three-line code box.
>
>> + */
>> +#define LIBVIRT_CHECK_VERSION(major,minor,micro) \
>
> ...while the define name has an extra T.
>
> Space after comma.
>
>> +    ((((major) * 1000000) + ((minor) * 1000) + (micro)) <= \
>
> This isn't lisp :)  The following is equivalent, with fewer ():
>
> ((major) * 1000000 + (minor) * 1000 + (micro) <= LIBVIR_VERSION_NUMBER)
>
>> +     LIBVIR_VERSION_NUMBER)
>> +
>>  int                     virGetVersion           (unsigned long *libVer,
>>                                                   const char *type,
>>                                                   unsigned long *typeVer);
>>
>
> --
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
>



-- 
Doug Goldstein




More information about the libvir-list mailing list