On Sat, 29 Sep 2018 at 14:50:09 +0000, Hugh McMaster wrote: > > The minimal fix for that problem would be to add a dependency on > > pkg-config to libsdl2-dev, and then do > > --cflags) > > - echo -I@includedir@/SDL2 @SDL_CFLAGS@ > > + pkg-config --cflags sdl2 > > ;; > > I’m not able to check right now, but I believe this will cause > problems when libsdl2-dev is installed for a foreign architecture, > because sdl2-config will call pkg-config for the native architecture > instead. It would need to be qualified with the GNU triplet.
Yes, that's why I didn't suggest this. For packages that (at least sometimes) use a foo-config script found in PATH, there's no general way to make the foo-config script produce different output for each architecture, other than perhaps something like Hugh's trick with $CC. As a result, I was looking for ways to make that constant output work with multiarch. I think the constraints are: * /usr/bin/sdl2-config must contain the same bytes on all architectures (because if it didn't, libsdl2-dev couldn't be Multi-Arch: foreign) * some header (the "config header") must contain everything that's in upstream's SDL_config.h, which varies by architecture (because other SDL headers need that) * when compiling with `sdl2-config --cflags` or `pkg-config --cflags SDL2`, #include "SDL_config.h" from a different SDL2 header must result in the config header being included (because they do this) * (maybe) when compiling with `sdl2-config --cflags` or `pkg-config --cflags SDL2`, #include <SDL_config.h> must result in the config header being included (because apps/games might do this) * when *not* compiling with `sdl2-config --cflags` or `pkg-config --cflags SDL2`, #include <SDL_config.h> should not find the config header (because if it did, we would break SDL 1) * when cross-compiling, either `sdl2-config --cflags` or `pkg-config --cflags SDL2` must result in us finding the config header for the host architecture, not the build architecture (I'm using Autotools/Meson terminology here) Are there others? On Fri, 28 Sep 2018 at 12:47:28 +0000, Hugh McMaster wrote: > On Friday, 28 September 2018 5:09 PM, Simon McVittie wrote: > > Here is a possible solution that I think respects all the constraints, > > although I have not tested it: > > > > * move SDL_config.h to /usr/include/<triplet>/SDL2/_real_SDL_config.h > > or similar (so that it has the same level of parallel-installability > > as SDL2 itself, and is clearly not part of the SDL API) > > > > * create /usr/include/SDL2/SDL_config.h containing: > > > > /* Debian-specific, for multiarch support */ > > #include <SDL2/_real_sdl_config.h> > > This is a interesting idea, but sounds messy due to the long list of > #defines I expect it may need. Still, I'd like to see this to learn more. I don't mean that /usr/include/SDL2/SDL_config.h would contain any #defines at all; I mean that it would be literally one comment and one #include (of a file that cpp will find in an architecture-dependent location on its default include path, which can therefore have architecture-dependent contents). smcv