Guess pkg-config flags when pkg-config is missing/broken

This commit is contained in:
Kp 2016-01-13 04:33:44 +00:00
parent 15e4130e1a
commit 65790ec925

View file

@ -210,6 +210,8 @@ class ConfigureTests:
if pkgconfig is None:
CHOST = user_settings.CHOST
pkgconfig = ('%s-pkg-config' % CHOST) if CHOST else 'pkg-config'
if sys.platform == 'win32':
pkgconfig += '.exe'
try:
return _cache[pkgconfig]
except KeyError:
@ -217,14 +219,15 @@ class ConfigureTests:
return path
@staticmethod
def merge(context,message,user_settings,pkgconfig_name,display_name,
guess_flags,
__get_pkg_config_path=__get_pkg_config_path,
_cache={}):
Display = context.Display
Display("%s: checking %s pkg-config %s\n" % (message, display_name, pkgconfig_name))
pkgconfig = __get_pkg_config_path(context, message, user_settings, display_name)
if not pkgconfig:
Display("%s: skipping %s pkg-config; user must add required flags via environment for `%s`\n" % (message, display_name))
return {}
Display("%s: skipping %s pkg-config; using default flags %r\n" % (message, display_name, guess_flags))
return guess_flags
cmd = '%s --cflags --libs %s' % (pkgconfig, pkgconfig_name)
try:
flags = _cache[cmd]
@ -239,8 +242,8 @@ class ConfigureTests:
}
Display("%s: %s settings: %r\n" % (message, display_name, flags))
except OSError as o:
Display("%s: %s pkg-config failed; user must add required flags via environment for `%s`\n" % (message, display_name, cmd))
flags = {}
Display("%s: %s pkg-config failed; using default flags for `%s`: %r\n" % (message, display_name, cmd, guess_flags))
flags = guess_flags
_cache[cmd] = flags
return flags
# Force test to report failure
@ -766,14 +769,20 @@ int main(int argc,char**argv){(void)argc;(void)argv;
self.check_libSDL(context)
self.check_SDL_mixer(context)
@_implicit_test
def check_libSDL(self,context):
self._check_libSDL(context, '')
def check_libSDL(self,context,_guess_flags={
'CPPFLAGS' : ['-I/usr/include/SDL'],
'LIBS' : ['SDL'],
}):
self._check_libSDL(context, '', _guess_flags)
@_implicit_test
def check_libSDL2(self,context):
self._check_libSDL(context, '2')
def _check_libSDL(self,context,sdl2):
def check_libSDL2(self,context,_guess_flags={
'CPPFLAGS' : ['-I/usr/include/SDL2'],
'LIBS' : ['SDL2'],
}):
self._check_libSDL(context, '2', _guess_flags)
def _check_libSDL(self,context,sdl2,guess_flags):
user_settings = self.user_settings
successflags = self.pkgconfig.merge(context, self.msgprefix, user_settings, 'sdl%s' % sdl2, 'SDL%s' % sdl2).copy()
successflags = self.pkgconfig.merge(context, self.msgprefix, user_settings, 'sdl%s' % sdl2, 'SDL%s' % sdl2, guess_flags).copy()
if user_settings.max_joysticks:
# If joysticks are enabled, but all possible inputs are
# disabled, then disable joystick support.
@ -811,13 +820,18 @@ int main(int argc,char**argv){(void)argc;(void)argv;
''' % init_cdrom,
lib='SDL', successflags=successflags
)
# SDL_mixer/SDL2_mixer use the same -I line as SDL/SDL2
@_implicit_test
def check_SDL_mixer(self,context):
self._check_SDL_mixer(context, '')
def check_SDL_mixer(self,context,_guess_flags={
'LIBS' : ['SDL_mixer'],
}):
self._check_SDL_mixer(context, '', _guess_flags)
@_implicit_test
def check_SDL2_mixer(self,context):
self._check_SDL_mixer(context, '2')
def _check_SDL_mixer(self,context,sdl2):
def check_SDL2_mixer(self,context,_guess_flags={
'LIBS' : ['SDL2_mixer'],
}):
self._check_SDL_mixer(context, '2', _guess_flags)
def _check_SDL_mixer(self,context,sdl2,guess_flags):
mixer = 'SDL%s_mixer' % sdl2
user_settings = self.user_settings
context.Display('%s: checking whether to use %s...%s\n' % (self.msgprefix, mixer, 'yes' if user_settings.sdlmixer else 'no'))
@ -825,7 +839,7 @@ int main(int argc,char**argv){(void)argc;(void)argv;
if not user_settings.sdlmixer:
return
self.successful_flags['CPPDEFINES'].append('USE_SDLMIXER')
successflags = self.pkgconfig.merge(context, self.msgprefix, user_settings, mixer, mixer)
successflags = self.pkgconfig.merge(context, self.msgprefix, user_settings, mixer, mixer, guess_flags)
if user_settings.host_platform == 'darwin':
successflags = successflags.copy()
successflags['FRAMEWORKS'] = [mixer]