Il 21/04/2013 21:11, Lluís Vilanova ha scritto: > This problem arises in the following patches.
Removing inclusions of qemu-common.h from .h files is definitely useful. However, the TRACE__CONTROL__USE__TRACE_PRINT_EVENTS is really hideous. :) Just make inclusion of qemu-common.h mandatory before inclusion of trace/control.h. Paolo > Signed-off-by: Lluís Vilanova <vilan...@ac.upc.edu> > --- > hw/virtio/virtio.c | 1 + > monitor.c | 4 +++- > scripts/tracetool/format/h.py | 9 ++++++++- > trace/control-internal.h | 4 +++- > trace/control.c | 4 +++- > trace/control.h | 9 +++++++-- > trace/default.c | 4 +++- > trace/simple.c | 4 +++- > trace/simple.h | 1 + > trace/stderr.c | 4 +++- > 10 files changed, 35 insertions(+), 9 deletions(-) > > diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c > index 1c2282c..a3dda2c 100644 > --- a/hw/virtio/virtio.c > +++ b/hw/virtio/virtio.c > @@ -14,6 +14,7 @@ > #include <inttypes.h> > > #include "trace.h" > +#include "qemu-common.h" > #include "qemu/error-report.h" > #include "hw/virtio/virtio.h" > #include "qemu/atomic.h" > diff --git a/monitor.c b/monitor.c > index c897e80..a8f49d9 100644 > --- a/monitor.c > +++ b/monitor.c > @@ -22,6 +22,9 @@ > * THE SOFTWARE. > */ > #include <dirent.h> > +#define TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > +#include "trace/control.h" > +#undef TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > #include "hw/hw.h" > #include "monitor/qdev.h" > #include "hw/usb.h" > @@ -59,7 +62,6 @@ > #include "qemu/osdep.h" > #include "cpu.h" > #include "trace.h" > -#include "trace/control.h" > #ifdef CONFIG_TRACE_SIMPLE > #include "trace/simple.h" > #endif > diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py > index ed7c8a5..c98aebd 100644 > --- a/scripts/tracetool/format/h.py > +++ b/scripts/tracetool/format/h.py > @@ -22,7 +22,14 @@ def begin(events): > '#ifndef TRACE__GENERATED_TRACERS_H', > '#define TRACE__GENERATED_TRACERS_H', > '', > - '#include "qemu-common.h"') > + '/* Do not directly include "qemu-common.h" to avoid circular > dependencies */', > + '#include <stdint.h>', > + '#include <inttypes.h>', > + '#include <stdbool.h>', > + '#include <stddef.h>', > + '#include <unistd.h>', > + '', > + ) > > def end(events): > out('#endif /* TRACE__GENERATED_TRACERS_H */') > diff --git a/trace/control-internal.h b/trace/control-internal.h > index cce2da4..a15a994 100644 > --- a/trace/control-internal.h > +++ b/trace/control-internal.h > @@ -1,7 +1,7 @@ > /* > * Interface for configuring and controlling the state of tracing events. > * > - * Copyright (C) 2011-2012 Lluís Vilanova <vilan...@ac.upc.edu> > + * Copyright (C) 2011-2013 Lluís Vilanova <vilan...@ac.upc.edu> > * > * This work is licensed under the terms of the GNU GPL, version 2 or later. > * See the COPYING file in the top-level directory. > @@ -11,6 +11,8 @@ > #define TRACE__CONTROL_INTERNAL_H > > #include <string.h> > +#include <assert.h> > +#include <stddef.h> > > > extern TraceEvent trace_events[]; > diff --git a/trace/control.c b/trace/control.c > index 49f61e1..dd7b260 100644 > --- a/trace/control.c > +++ b/trace/control.c > @@ -1,7 +1,7 @@ > /* > * Interface for configuring and controlling the state of tracing events. > * > - * Copyright (C) 2011-2012 Lluís Vilanova <vilan...@ac.upc.edu> > + * Copyright (C) 2011-2013 Lluís Vilanova <vilan...@ac.upc.edu> > * > * This work is licensed under the terms of the GNU GPL, version 2 or later. > * See the COPYING file in the top-level directory. > @@ -9,6 +9,8 @@ > > #include "trace/control.h" > > +#include "qemu-common.h" > + > > TraceEvent *trace_event_name(const char *name) > { > diff --git a/trace/control.h b/trace/control.h > index cde8260..29ff9c1 100644 > --- a/trace/control.h > +++ b/trace/control.h > @@ -1,7 +1,7 @@ > /* > * Interface for configuring and controlling the state of tracing events. > * > - * Copyright (C) 2011-2012 Lluís Vilanova <vilan...@ac.upc.edu> > + * Copyright (C) 2011-2013 Lluís Vilanova <vilan...@ac.upc.edu> > * > * This work is licensed under the terms of the GNU GPL, version 2 or later. > * See the COPYING file in the top-level directory. > @@ -10,7 +10,6 @@ > #ifndef TRACE__CONTROL_H > #define TRACE__CONTROL_H > > -#include "qemu-common.h" > #include "trace/generated-events.h" > > > @@ -155,6 +154,10 @@ void trace_event_set_state_dynamic_backend(TraceEvent > *ev, bool state); > > > > +#if defined(TRACE__CONTROL__USE__TRACE_PRINT_EVENTS) > +/* Minimize inclusions of "qemu-common.h" to avoid circular dependencies */ > +#include "qemu-common.h" Can you just include this from the C files instead? > /** > * trace_print_events: > * > @@ -164,6 +167,8 @@ void trace_event_set_state_dynamic_backend(TraceEvent > *ev, bool state); > */ > void trace_print_events(FILE *stream, fprintf_function stream_printf); > > +#endif /* defined(TRACE__CONTROL__USE__TRACE_PRINT_EVENTS) */ > + > /** > * trace_backend_init: > * @events: Name of file with events to be enabled at startup; may be NULL. > diff --git a/trace/default.c b/trace/default.c > index 6e07a47..4dbaf11 100644 > --- a/trace/default.c > +++ b/trace/default.c > @@ -1,13 +1,15 @@ > /* > * Default implementation for backend initialization from commandline. > * > - * Copyright (C) 2011-2012 Lluís Vilanova <vilan...@ac.upc.edu> > + * Copyright (C) 2011-2013 Lluís Vilanova <vilan...@ac.upc.edu> > * > * This work is licensed under the terms of the GNU GPL, version 2. See > * the COPYING file in the top-level directory. > */ > > +#define TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > #include "trace/control.h" > +#undef TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > > > void trace_print_events(FILE *stream, fprintf_function stream_printf) > diff --git a/trace/simple.c b/trace/simple.c > index 8b59760..cb4361f 100644 > --- a/trace/simple.c > +++ b/trace/simple.c > @@ -19,8 +19,10 @@ > #include <pthread.h> > #endif > #include "qemu/timer.h" > -#include "trace.h" > +#define TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > #include "trace/control.h" > +#undef TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > +#include "trace.h" > > /** Trace file header event ID */ > #define HEADER_EVENT_ID (~(uint64_t)0) /* avoids conflicting with > TraceEventIDs */ > diff --git a/trace/simple.h b/trace/simple.h > index 5260d9a..1541ea0 100644 > --- a/trace/simple.h > +++ b/trace/simple.h > @@ -16,6 +16,7 @@ > #include <stdio.h> > > #include "trace/generated-events.h" > +#include "qemu-common.h" > > > void st_print_trace_file_status(FILE *stream, fprintf_function > stream_printf); > diff --git a/trace/stderr.c b/trace/stderr.c > index e212efd..3a6f4bd 100644 > --- a/trace/stderr.c > +++ b/trace/stderr.c > @@ -1,5 +1,7 @@ > -#include "trace.h" > +#define TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > #include "trace/control.h" > +#undef TRACE__CONTROL__USE__TRACE_PRINT_EVENTS > +#include "trace.h" > > > void trace_print_events(FILE *stream, fprintf_function stream_printf) > > >