On Thu, Jan 15, 2015 at 08:52:44AM -0700, Eric Blake wrote: > On 01/15/2015 03:51 AM, Jiri Denemark wrote: > > On Thu, Jan 15, 2015 at 10:42:39 +0000, Daniel Berrange wrote: > >> On Wed, Jan 14, 2015 at 08:08:16PM -0700, Eric Blake wrote: > >>> In some cases, it is very easy for downstream distros to backport > >>> enum values without requiring a .so bump. Keying the conditional > >>> code off of the upstream version where the enum value was added > >>> is not ideal, because downstream then has to patch that the feature > >>> is available in their build that still reports an earlier version > >>> number. For example, if RHEL 7 backports events from 1.2.11 into > >>> a build based on 1.2.8, building the python bindings would warn: > >>> > > >>> + if name.startswith('VIR_DOMAIN_EVENT_ID_') or name.startswith('VIR_NETWORK_EVENT_ID_'): > >>> + event_ids.append(name) > >> > >> If you use brackets you can break the line without confusing > >> python eg > >> > >> if (name.startswith('VIR_DOMAIN_EVENT_ID_') or > >> name.startswith('VIR_NETWORK_EVENT_ID_')): > > Thanks. > > > >>> + # Write define wrappers around event id enums > >>> + include.write("\n") > >>> + for event_id in event_ids: > >>> + include.write("#define %s %s\n" % (event_id, event_id)) > >> > >> I'm not seeing the point of adding this define ? > > ... > >>> -#if LIBVIR_CHECK_VERSION(0, 10, 0) > >>> +#ifdef VIR_DOMAIN_EVENT_ID_BALLOON_CHANGE > > > > Without that define, you can't check for the events using ifdef, > > C preprocessor doesn't see enum items. > > Correct. Creating self-referential macros is the canonical way to > convert enums into something that can be probed at preprocessor time for > using conditional compilation. Since we have one macro for every enum > that we read from the xml of the libvirt we are targetting, we can make > the bindings support exactly the set of enum values that were backported > into the particular libvirt, without having to worry about backporting > crossing version number checks. Sigh. In a sane world we would just fix the CPP to honour enums directly ;-P > So does this count as an ACK with the long line fixed? Sure, ACK Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list