Hi, Gergely:

Gergely Nagy wrote:
> Robert Edmonds <edmo...@debian.org> writes:
> 
> > riemann-c-client
> > ----------------
> >
> >     Rebuilt by hand successfully against protobuf-c 1.0.0~rc2-1 from
> >     experimental.
> >
> >     Has an unversioned build dependency on libprotobuf-c0-dev.  This
> >     needs to be updated to libprotobuf-c-dev eventually.
> 
> I can switch that to libprotobuf-c-dev | libprotobuf-c0-dev in the next
> upload (I'd like to be able to compile the package on wheezy without
> changes, hence the alternative). Since I just released a new upstream
> version of the library, I'll be doing an upload at some point anyway,
> I'll try to make it so that binNMUs won't be required after.

OK, "Build-Depends: protobuf-c-compiler, libprotobuf-c-dev |
libprotobuf-c0-dev" will work fine to preserve the ability to build on
wheezy.  Eventually (post-jessie) I'd like to get rid of the
"libprotobuf-c0-dev" package name entirely.

> >     Has a build dependency on protobuf-c-compiler and runs protoc-c
> >     during the build.
> >
> >     No protoc-c generated symbols are exported by libriemann-client0.
> >
> >     The libriemann-client-dev package exports the following header files
> >     generated by protoc-c:
> >
> >         /usr/include/riemann/proto/riemann.pb-c.h
> >
> >     However, I have not found any packages in the Debian archive which
> >     utilize this file.
> 
> The various riemann-c-client headers in /usr/include/riemann include
> proto/riemann.pb-c.h, and there's syslog-ng-mod-riemann (from
> syslog-ng-incubator) that uses the library, thus, the generated header
> too, transitively.

Ah, right.  From a brief look at the source code for that module it
looks like it doesn't require a (bin-)NMU at all, if I'm understanding
the libriemann-client API correctly.

> >     I would recommend that the upstream developers ship a .proto file
> >     instead.
> 
> I'd rather not ship a .proto file, if at all possible. I'll see if I can
> hide it completely.

This would eliminate the problem, too.

It looks like you typedef the structures generated by protoc-c and wrap
them in your own API, e.g. from <riemann/query.h>:

    #include <riemann/proto/riemann.pb-c.h>

    typedef Query riemann_query_t;

    riemann_query_t *riemann_query_new (const char *string);
    void riemann_query_free (riemann_query_t *query);

    int riemann_query_set_string (riemann_query_t *query, const char *string);

("Query" is from "typedef struct _Query Query" in riemann.pb-c.h.)

If your API callers always use the *_new(), *_free(), etc. functions and
never try to dereference or calculate sizeof() on the wrapped struct's
it might be possible to remove the #include of the .pb-c.h file and
change your typedef to, e.g.:

    typedef struct _Query riemann_query_t;

And then have "riemann_query_t" be an opaque type.  Though this depends
on protoc-c continuing to generate structure tags with leading
underscores, which may not always be the case.  (I've wanted to get rid
of the leading underscores for a while now.)

(Similiarly for the other riemann_*_t types that wrap protoc-c generated
structures.)

It might also be possible to wrap the structure types generated by
protoc-c in your own opaque structure type and expose that wrapper type
via your API.  Something like:

    typedef struct riemann_query riemann_query_t;

    riemann_query_t *riemann_query_new (const char *string);
    void riemann_query_free (riemann_query_t *query);

    int riemann_query_set_string (riemann_query_t *query, const char *string);

(In <riemann/query.h>.)

    #include "proto/riemann.pb-c.h"

    struct riemann_query {
        Query query;
    };

    /* rest of the implementation... */

(In lib/riemann/query.c.)

That's a bit uglier since you have to update accesses to go via the
wrapper but would provide the maximum amount of insulation between the
libriemann-client API and the underlying structures generated by the
protoc-c code generator.

-- 
Robert Edmonds
edmo...@debian.org


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to