[Spice-devel] typedefs and header dependencies

Frediano Ziglio fziglio at redhat.com
Tue May 24 08:58:36 UTC 2016


> 
> Hi,
> 
> On Mon, 2016-05-23 at 16:19 -0500, Jonathon Jongsma wrote:
> > On Mon, 2016-05-23 at 15:17 -0500, Jonathon Jongsma wrote:
> > > On Sun, 2016-05-22 at 04:19 -0400, Frediano Ziglio wrote:
> > > 
> > > > >  /* FIXME: move back to display-channel.h (once structs are private)
> > > > >  */
> > > > >  typedef struct Drawable Drawable;
> > > > > -typedef struct DisplayChannelClient DisplayChannelClient;
> > > > >  
> > > > 
> > > > We definitively should consider using struct Xxxx instead of moving
> > > > these typedef everytime in order to compile...
> > > 
> > > Or create a spice-types.h header that contains forward declarations for
> > > all
> > > structs and include that in every other file. The includes really are
> > > quite
> > > a
> > > tangled mess and it's not an easy problem to unravel. I spent some time
> > > trying,
> > > but it's very difficult to do in a gradual way. I've resisted doing
> > > something
> > > like this in the past, but I'm starting to warm up to it...
> > > 
> > > Jonathon
> > 
> > 
> > So, I chatted (very briefly) with Frediano about this on IRC after sending
> > this
> > email and I thought we should gauge opinions on options here.
> > 
> > This typedef stuff really does make refactoring more difficult. When we
> > move
> > stuff around, we have to keep adding temporary typedefs to make things
> > compile.
> > Or we have to remove these typedefs to avoid redefining the same struct
> > multiple
> > types. So there are several options:
> > 
> > 1. Use 'struct Foo' throughout the code instead of 'Foo' so that we don't
> > have
> > to deal with the typedef mess.
> 
> yes, +1

The issue here is having a lot of "struct Xxxx".

I would propose a half way to this:
typedef only in the public relative header (for instance DisplayChannel in
display-challel.h). This should avoid most typedefs in .c files. Also is
supposed that most function dealing with that type are declared in that file
too so this way you can reuse the typedef. Other headers will use 
struct Xxxx; (declaration) and struct Xxxx when referenced.

+1.

> > 
> > 2. the approach listed above (a spice-types.h file that simply typedefs all
> > structs). This is a bit of a maintenance nightmare and needs to be kept up
> > to
> > date and for a lot of types that are relatively self-contained it's not
> > even
> > necessary to put them in a global header like this...
> 
> I am afraid that would be easy to forget about updating the file

There are some issues of this approach:
- scalability, if all types get into a single file every type addition
  will cause all files to be recompiled;
- prone to exceptions:
  - public headers have to keep their types;
  - why moving self contained (like glz or encoders) into this file?

> > 
> > 3. continue with the fragile approach we now have
> 
> I think fragile is too strong word

Surely not!
-1!

> > 
> > 4. use C++ :D
> 
> I would wait with this

Yes, I think this is a weak argument, there are lot more useful feature
we can use for other stuff.

> > 
> > Anything else I'm not thinking of? I'd like to hear opinions from as many
> > regular contributors as possible so we have a rough consensus, but I'd
> > really
> > like to do something about it.
> 
> Personally I would go for the first option, but it would be nice to avoid
> some
> mass rename...
> 
> Pavel
> 

Jonathon, is not clear your vote :)

Frediano


More information about the Spice-devel mailing list