On 2015-11-27 12:40, Tanu Kaskinen wrote: > On Thu, 2015-11-26 at 18:29 +0100, David Henningsson wrote: >> The relationship between sinks, sources, cards, profiles, and ports >> is becoming ever more intertwined, to the point that if you try to >> include one file from the other, you're likely to end up with some >> weird error somewhere else. > > If you add a circular dependency between two headers, you get errors, > which you can fix by moving the typedefs above the #include lines. I > don't think those errors are weird or difficult to deal with (once you > know the fix). As an example, I was trying to add "#include <pulsecore/device-port.h>" to card.h. Both pa_card and pa_device_port have their typedefs above the #include lines. Still, that leads to this error: In file included from ../../src/pulsecore/card.h:29:0, from ../../src/pulsecore/source.h:43, from ../../src/pulsecore/sink.h:38, from ../../src/pulsecore/core.h:49, from ../../src/pulsecore/module.h:31, from ../../src/pulsecore/cli-text.c:28: ../../src/pulsecore/device-port.h:49:5: error: unknown type name 'pa_available_t' Maybe that can be worked around some other way, but if I include the typedefs.h file, then I don't need to include device-port.h in the first place. > This patch has another potential benefit, though: it allows > removing includes between headers. If the unnecessary includes are > removed, that will reduce the need to recompile stuff when changing the > headers. Currently, if you touch e.g. sink.h, that will trigger a > rebuild of pretty much everything. Indeed. >> Work around this by creating a new typedefs.h, which does not depend >> on anything else, and just creates a few typedefs. >> >> (Can be expanded with more typedefs in the future if the need arises.) > > What's the criteria for deciding whether a typedef should go in > typdefs.h? Except those who are already there, I don't have a strong opinion. -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic