On quinta-feira, 4 de julho de 2013 18.35.16, sardemff7+wayl...@sardemff7.net wrote: > > Suppose that our headers #include headers from a project whose headers > > aren't usually in /usr/include (that is, they require -I). In order for > > our users' applications to build, they need to add those -I as well. The > > Requires is what tells pkg-config to add them. > > Requires.private too.
See below. > > What's more, even if the include paths are not an issue, the linking could > > be. Since we included some third party API in our API, it's conceivable > > that users might need to call functions in those libraries. If that > > happens, then user applications must also link directly to the libraries, > > not indirectly only. > > And they must link directly! That is the proper way to do that. I partially agree. If I know in my API that I am using both libs X and Y, I should tell my buildsystem so. But there are cases when I don't know of the indirect dependency. I'm using X, and I'm not using any of Y's API. Yet to compile my application, X requires Y's headers. That means X's .pc file should declare it depends non-privately on Y. This is especially the case in C++, when base classes, operators, constructors and other things can hide from you the fact that you're using some other library. > A plugin is using libxkbcommon for a feature, but provides several more. > Weston is build with libxkbcommon support. All is fine. Yes. > Now, the same plugin is build against a non-libxkbcommon Weston (this is > the now-possible case): it will break badly. > Explicit usage is the way. Period. Agreed: the plugin should declare explicitly. If a project uses intentionally a library, it should declare explicitly the dependency. But I also disagree: if libweston's public API headers include unconditionally some other library's headers, libweston's .pc file should declare the public dependency. Otherwise, no plugin will compile. Of course, there's also a grey area: an optional feature. Suppose that there's exactly one Weston header that requires xkbcommon and that header is not included by any other: weston-xkbcommon.h. In that case, anyone who uses that header is intentionally depending on xkbcommon. So in that case, weston.pc doesn't declare the public Requires. -- Thiago Macieira - thiago.macieira (AT) intel.com Software Architect - Intel Open Source Technology Center
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel