Not terrible, but I think if we did use this approach there should be a prominent comment in red-types.h explaining why this seemingly-arbitrary set of types are defined there. On Wed, 2016-05-25 at 11:43 +0200, Christophe Fergeau wrote: > This fixes compilation on el6. This is achieved by moving the most problematic > typedef to a red-types.h header. Ideally, it will go away once we have put > some > order in the header content/API/... For example, StreamAgent would be better > as > an opaque type. > --- > > Here is my take on this. > > Christophe > > server/Makefile.am | 1 + > server/image-cache.h | 4 +--- > server/main-channel-client.h | 7 ++----- > server/main-channel.c | 1 + > server/main-channel.h | 2 +- > server/red-channel.h | 2 +- > server/red-types.h | 26 ++++++++++++++++++++++++++ > server/red-worker.c | 2 +- > server/reds.c | 1 + > server/sound.c | 1 + > server/stream.c | 3 ++- > server/stream.h | 3 --- > 12 files changed, 38 insertions(+), 15 deletions(-) > create mode 100644 server/red-types.h > > diff --git a/server/Makefile.am b/server/Makefile.am > index cca3b9b..708940d 100644 > --- a/server/Makefile.am > +++ b/server/Makefile.am > @@ -148,6 +148,7 @@ libserver_la_SOURCES = \ > display-limits.h \ > dcc-encoders.c \ > dcc-encoders.h \ > + red-types.h \ > $(NULL) > > if HAVE_SMARTCARD > diff --git a/server/image-cache.h b/server/image-cache.h > index 38a318e..fffd82d 100644 > --- a/server/image-cache.h > +++ b/server/image-cache.h > @@ -23,9 +23,7 @@ > #include <common/canvas_base.h> > #include <common/ring.h> > > -/* FIXME: move back to display-channel.h (once structs are private) */ > -typedef struct Drawable Drawable; > -typedef struct DisplayChannelClient DisplayChannelClient; > +#include "red-types.h" > > typedef struct ImageCacheItem { > RingItem lru_link; > diff --git a/server/main-channel-client.h b/server/main-channel-client.h > index c74f847..6ce3f34 100644 > --- a/server/main-channel-client.h > +++ b/server/main-channel-client.h > @@ -17,11 +17,8 @@ > #ifndef __MAIN_CHANNEL_CLIENT_H__ > #define __MAIN_CHANNEL_CLIENT_H__ > > -#include "red-channel.h" > - > -/* FIXME: remove extra MainChannel typedef when possible */ > -typedef struct MainChannel MainChannel; > -typedef struct MainChannelClient MainChannelClient; > +#include "main-channel.h" > +#include "red-types.h" > > MainChannelClient *main_channel_client_create(MainChannel *main_chan, > RedClient *client, > RedsStream *stream, uint32_t > connection_id, > diff --git a/server/main-channel.c b/server/main-channel.c > index 1a18200..daa6b5d 100644 > --- a/server/main-channel.c > +++ b/server/main-channel.c > @@ -23,6 +23,7 @@ > > #include "red-common.h" > #include "main-channel.h" > +#include "main-channel-client.h" > #include "reds.h" > > int main_channel_is_connected(MainChannel *main_chan) > diff --git a/server/main-channel.h b/server/main-channel.h > index 868a14a..d4b63f6 100644 > --- a/server/main-channel.h > +++ b/server/main-channel.h > @@ -23,7 +23,7 @@ > #include <common/marshaller.h> > > #include "red-channel.h" > -#include "main-channel-client.h" > +#include "red-types.h" > > // TODO: Defines used to calculate receive buffer size, and also by reds.c > // other options: is to make a reds_main_consts.h, to duplicate defines. > diff --git a/server/red-channel.h b/server/red-channel.h > index 57ea660..c71927a 100644 > --- a/server/red-channel.h > +++ b/server/red-channel.h > @@ -33,6 +33,7 @@ > #include "reds-stream.h" > #include "stat.h" > #include "red-pipe-item.h" > +#include "red-types.h" > > #define MAX_SEND_BUFS 1000 > #define CLIENT_ACK_WINDOW 20 > @@ -131,7 +132,6 @@ typedef struct OutgoingHandler { > typedef struct RedChannel RedChannel; > typedef struct RedChannelClient RedChannelClient; > typedef struct RedClient RedClient; > -typedef struct MainChannelClient MainChannelClient; > > /* Messages handled by red_channel > * SET_ACK - sent to client on channel connection > diff --git a/server/red-types.h b/server/red-types.h > new file mode 100644 > index 0000000..a920074 > --- /dev/null > +++ b/server/red-types.h > @@ -0,0 +1,26 @@ > +/* > + Copyright (C) 2016 Red Hat, Inc. > + > + This library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + This library is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with this library; if not, see <http://www.gnu.org/licenses/ > >. > +*/ > + > +#ifndef _H_RED_TYPES > +#define _H_RED_TYPES > + > +typedef struct MainChannelClient MainChannelClient; > +typedef struct DisplayChannelClient DisplayChannelClient; > +typedef struct DisplayChannel DisplayChannel; > +typedef struct Drawable Drawable; > + > +#endif > diff --git a/server/red-worker.c b/server/red-worker.c > index 0c945c1..63c0d00 100644 > --- a/server/red-worker.c > +++ b/server/red-worker.c > @@ -45,8 +45,8 @@ > #include <common/ring.h> > > #include "display-channel.h" > +#include "main-channel-client.h" > #include "stream.h" > - > #include "spice.h" > #include "red-worker.h" > #include "cursor-channel.h" > diff --git a/server/reds.c b/server/reds.c > index 5c0f9b6..ff51598 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -57,6 +57,7 @@ > #include "agent-msg-filter.h" > #include "inputs-channel.h" > #include "main-channel.h" > +#include "main-channel-client.h" > #include "red-qxl.h" > #include "main-dispatcher.h" > #include "sound.h" > diff --git a/server/sound.c b/server/sound.c > index 8335101..3e6eec4 100644 > --- a/server/sound.c > +++ b/server/sound.c > @@ -32,6 +32,7 @@ > #include "spice.h" > #include "red-common.h" > #include "main-channel.h" > +#include "main-channel-client.h" > #include "reds.h" > #include "red-qxl.h" > #include "sound.h" > diff --git a/server/stream.c b/server/stream.c > index 2aa13d1..3cf50ed 100644 > --- a/server/stream.c > +++ b/server/stream.c > @@ -18,8 +18,9 @@ > #include <config.h> > #endif > > -#include "stream.h" > #include "display-channel.h" > +#include "main-channel-client.h" > +#include "stream.h" > > #define FPS_TEST_INTERVAL 1 > #define FOREACH_STREAMS(display, item) \ > diff --git a/server/stream.h b/server/stream.h > index 715f920..80dc60f 100644 > --- a/server/stream.h > +++ b/server/stream.h > @@ -42,9 +42,6 @@ > #define RED_STREAM_DEFAULT_LOW_START_BIT_RATE (2.5 * 1024 * 1024) // 2.5Mbps > #define MAX_FPS 30 > > -/* move back to display_channel once struct private */ > -typedef struct DisplayChannel DisplayChannel; > - > typedef struct Stream Stream; > > typedef struct RedStreamActivateReportItem { _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel