On Thu, 2017-06-01 at 12:21 +0100, Daniel P. Berrange wrote: > This is not that attractive from POV the language bindings. > > eg in the Go code, I need to make usage of the new APIs > conditional at compile time. For example for the new APIs > added in 3.4.0 I have code like > > func (v *Stream) RecvFlags(p []byte, flags StreamRecvFlagsValues) (int, error) { > if C.LIBVIR_VERSION_NUMBER < 3004000 { > return 0, GetNotImplementedError("virStreamRecvFlags") > } > > n := C.virStreamRecvFlagsCompat(v.ptr, (*C.char)(unsafe.Pointer(&p[0])), C.size_t(len(p)), C.uint(flags)) > > ...snip... > } > > and > > int virStreamRecvFlagsCompat(virStreamPtr st, > char *data, > size_t nbytes, > unsigned int flags) > { > #if LIBVIR_VERSION_NUMBER < 3004000 > assert(0); // Caller should have checked version > #else > return virStreamRecvFlags(st, data, nbytes, flags); > #endif > } > > The suggested versioning scheme would require changing all these version > numbers checks to 3003090 is rather unpleasant IMHO. Well, that shouldn't be needed for released versions of the bindings as they would of course depend on a released version of libvirt, but I see how it would make it more difficult than necessary to develop the bindings in parallel to the new libvirt version. So I guess disregard my proposal :) -- Andrea Bolognani / Red Hat / Virtualization -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list