Bug#909778: libsdl2-dev: SDL_config.h no longer in cflags provided by pkg-config/sdl2-config

Simon McVittie smcv at debian.org
Sat Sep 29 16:25:26 BST 2018

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 at 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).


More information about the Pkg-sdl-maintainers mailing list