Commit 235225ec authored by Jose Fonseca's avatar Jose Fonseca

scons: Expose pkg-config in a simpler manner.

parent 2699fce0
......@@ -33,6 +33,8 @@ Custom builders and methods.
import os
import os.path
import re
import sys
import subprocess
import SCons.Action
import SCons.Builder
......@@ -154,6 +156,79 @@ def createCodeGenerateMethod(env):
env.AddMethod(code_generate, 'CodeGenerate')
def _pkg_check_modules(env, name, modules):
'''Simple wrapper for pkg-config.'''
env['HAVE_' + name] = False
# For backwards compatability
env[name.lower()] = False
if env['platform'] == 'windows':
return
if not env.Detect('pkg-config'):
return
if subprocess.call(["pkg-config", "--exists", ' '.join(modules)]) != 0:
return
# Other flags may affect the compilation of unrelated targets, so store
# them with a prefix, (e.g., XXX_CFLAGS, XXX_LIBS, etc)
try:
flags = env.ParseFlags('!pkg-config --cflags --libs ' + ' '.join(modules))
except OSError:
return
prefix = name + '_'
for flag_name, flag_value in flags.iteritems():
assert '_' not in flag_name
env[prefix + flag_name] = flag_value
env['HAVE_' + name] = True
def pkg_check_modules(env, name, modules):
sys.stdout.write('Checking for %s...' % name)
_pkg_check_modules(env, name, modules)
result = env['HAVE_' + name]
sys.stdout.write(' %s\n' % ['no', 'yes'][int(bool(result))])
# XXX: For backwards compatability
env[name.lower()] = result
def pkg_use_modules(env, names):
'''Search for all environment flags that match NAME_FOO and append them to
the FOO environment variable.'''
names = env.Flatten(names)
for name in names:
prefix = name + '_'
if not 'HAVE_' + name in env:
print 'Attempt to use unknown module %s' % name
env.Exit(1)
if not env['HAVE_' + name]:
print 'Attempt to use unavailable module %s' % name
env.Exit(1)
flags = {}
for flag_name, flag_value in env.Dictionary().iteritems():
if flag_name.startswith(prefix):
flag_name = flag_name[len(prefix):]
if '_' not in flag_name:
flags[flag_name] = flag_value
if flags:
env.MergeFlags(flags)
def createPkgConfigMethods(env):
env.AddMethod(pkg_check_modules, 'PkgCheckModules')
env.AddMethod(pkg_use_modules, 'PkgUseModules')
def generate(env):
"""Common environment generation code"""
......@@ -164,6 +239,7 @@ def generate(env):
# Custom builders and methods
createConvenienceLibBuilder(env)
createCodeGenerateMethod(env)
createPkgConfigMethods(env)
# for debugging
#print env.Dump()
......
......@@ -104,41 +104,6 @@ def num_jobs():
return 1
def pkg_config_modules(env, name, modules):
'''Simple wrapper for pkg-config.'''
env[name] = False
if env['platform'] == 'windows':
return
if not env.Detect('pkg-config'):
return
if subprocess.call(["pkg-config", "--exists", ' '.join(modules)]) != 0:
return
# Put -I and -L flags directly into the environment, as these don't affect
# the compilation of targets that do not use them
try:
env.ParseConfig('pkg-config --cflags-only-I --libs-only-L ' + ' '.join(modules))
except OSError:
return
# Other flags may affect the compilation of unrelated targets, so store
# them with a prefix, (e.g., XXX_CFLAGS, XXX_LIBS, etc)
try:
flags = env.ParseFlags('!pkg-config --cflags-only-other --libs-only-l --libs-only-other ' + ' '.join(modules))
except OSError:
return
prefix = name.upper() + '_'
for flag_name, flag_value in flags.iteritems():
env[prefix + flag_name] = flag_value
env[name] = True
def generate(env):
"""Common environment generation code"""
......@@ -637,19 +602,21 @@ def generate(env):
if env['llvm']:
env.Tool('llvm')
pkg_config_modules(env, 'x11', ['x11', 'xext'])
pkg_config_modules(env, 'drm', ['libdrm'])
pkg_config_modules(env, 'drm_intel', ['libdrm_intel'])
pkg_config_modules(env, 'drm_radeon', ['libdrm_radeon'])
pkg_config_modules(env, 'xorg', ['xorg-server'])
pkg_config_modules(env, 'kms', ['libkms'])
env['dri'] = env['x11'] and env['drm']
# Custom builders and methods
env.Tool('custom')
createInstallMethods(env)
env.PkgCheckModules('X11', ['x11', 'xext', 'xdamage', 'xfixes'])
env.PkgCheckModules('XF86VIDMODE', ['xxf86vm'])
env.PkgCheckModules('DRM', ['libdrm'])
env.PkgCheckModules('DRM_INTEL', ['libdrm_intel'])
env.PkgCheckModules('DRM_RADEON', ['libdrm_radeon'])
env.PkgCheckModules('XORG', ['xorg-server'])
env.PkgCheckModules('KMS', ['libkms'])
env.PkgCheckModules('UDEV', ['libudev'])
env['dri'] = env['x11'] and env['drm']
# for debugging
#print env.Dump()
......
......@@ -2,11 +2,7 @@ Import('*')
env = env.Clone()
try:
env.ParseConfig('pkg-config --cflags libdrm_radeon')
except OSError:
print 'warning: not building r600'
Return()
env.PkgUseModules('DRM_RADEON')
env.Append(CPPPATH = [
'#/include',
......
......@@ -5,7 +5,7 @@ Import('*')
env = env.Clone()
env.ParseConfig('pkg-config --cflags --libs libdrm')
env.PkgUseModules(['DRM'])
env.Append(CPPPATH = [
'#/src/mapi',
......
......@@ -40,6 +40,7 @@ else:
env.Append(CPPDEFINES = ['GLX_DIRECT_RENDERING'])
sources.append(['#/src/glx/dri2.c'])
if env['drm']:
env.PkgUseModules('DRM')
env.Append(CPPDEFINES = ['HAVE_DRM_BACKEND'])
env.Append(CPPPATH = [
'#/src/gbm/main',
......
......@@ -9,10 +9,11 @@ env.Append(CPPPATH = [
'#/src/mesa',
])
env.ParseConfig('pkg-config --cflags --libs libdrm xorg-server')
env.PkgUseModules(['DRM', 'XORG'])
if env['kms']:
if env['HAVE_KMS']:
env.Append(CPPDEFINES = ['HAVE_LIBKMS'])
env.PkgUseModules(['KMS'])
conf = env.Configure()
......
......@@ -29,7 +29,7 @@ drienv.Replace(CPPPATH = [
'#src/egl/drivers/dri',
])
drienv.ParseConfig('pkg-config --cflags --libs libdrm')
drienv.PkgUseModules('DRM')
dri_common_utils = drienv.SharedObject(
target = 'utils.o',
......
......@@ -2,7 +2,7 @@ Import('*')
env = drienv.Clone()
env.ParseConfig('pkg-config --cflags --libs libdrm_intel')
env.PkgUseModules('DRM_INTEL')
env.Append(CPPDEFINES = ['GALLIUM_RBUG', 'GALLIUM_TRACE', 'GALLIUM_GALAHAD'])
......@@ -26,4 +26,4 @@ module = env.LoadableModule(
SHLIBPREFIX = '',
)
env.Alias('dri-i915', module)
\ No newline at end of file
env.Alias('dri-i915', module)
......@@ -2,7 +2,7 @@ Import('*')
env = drienv.Clone()
env.ParseConfig('pkg-config --cflags --libs libdrm_intel')
env.PkgUseModules('DRM_INTEL')
env.Append(CPPDEFINES = [
'GALLIUM_SOFTPIPE',
......@@ -29,4 +29,4 @@ module = env.LoadableModule(
SHLIBPREFIX = '',
)
env.Alias('dri-i965', module)
\ No newline at end of file
env.Alias('dri-i965', module)
......@@ -39,4 +39,6 @@ module = env.LoadableModule(
SHLIBPREFIX = '',
)
module = env.InstallSharedLibrary(module)
env.Alias('dri-swrast', module)
......@@ -79,21 +79,17 @@ if True:
openvg_name = 'OpenVG' if env['platform'] != 'windows' else 'libOpenVG'
env.Prepend(LIBS = [openvg_name, st_vega])
if env['x11']:
if env['HAVE_X11']:
env.Prepend(LIBS = [
ws_xlib,
env['X11_LIBS'],
])
if env['dri']:
env.ParseConfig('pkg-config --cflags --libs xfixes')
env.PkgUseModules('X11')
# pipe drivers
if env['drm']:
env.ParseConfig('pkg-config --cflags --libs libdrm')
if env['HAVE_DRM']:
env.PkgUseModules('DRM')
if env['drm_intel']:
env.ParseConfig('pkg-config --cflags --libs libdrm_intel')
if env['HAVE_DRM_INTEL']:
env.Append(CPPDEFINES = ['_EGL_PIPE_I915', '_EGL_PIPE_I965'])
env.Prepend(LIBS = [
i915drm,
......@@ -103,7 +99,7 @@ if env['drm']:
ws_wrapper,
])
if env['drm_radeon']:
if env['HAVE_DRM_RADEON']:
env.Append(CPPDEFINES = ['_EGL_PIPE_R300', '_EGL_PIPE_R600'])
env.Prepend(LIBS = [
radeonwinsys,
......
......@@ -4,10 +4,10 @@ Import('*')
env = env.Clone()
env.ParseConfig('pkg-config --cflags --libs libdrm xorg-server')
env.PkgUseModules(['DRM', 'XORG'])
if env['kms']:
env.ParseConfig('pkg-config --cflags --libs libkms')
env.PkgUseModules(['KMS'])
env.Prepend(CPPPATH = [
'#/include',
......
......@@ -2,7 +2,7 @@ Import('*')
env = env.Clone()
env.ParseConfig('pkg-config --cflags libdrm')
env.PkgUseModules('DRM')
i915drm_sources = [
'i915_drm_batchbuffer.c',
......
......@@ -2,7 +2,7 @@ Import('*')
env = env.Clone()
env.ParseConfig('pkg-config --cflags libdrm')
env.PkgUseModules('DRM')
i965drm_sources = [
'i965_drm_buffer.c',
......
......@@ -13,11 +13,7 @@ r600_sources = [
'r600_bomgr.c',
]
try:
env.ParseConfig('pkg-config --cflags libdrm_radeon')
except OSError:
print 'warning: not building r600g'
Return()
env.PkgUseModules('DRM_RADEON')
env.Append(CPPPATH = '#/src/gallium/drivers/r600')
......
......@@ -8,11 +8,7 @@ radeon_sources = [
'radeon_drm_winsys.c',
]
try:
env.ParseConfig('pkg-config --cflags libdrm')
except:
print 'warning: not building Gallium Radeon'
Return()
env.PkgUseModules('DRM')
radeonwinsys = env.ConvenienceLibrary(
target ='radeonwinsys',
......
......@@ -2,7 +2,7 @@ Import('*')
env = env.Clone()
env.ParseConfig('pkg-config --cflags libdrm')
env.PkgUseModules('DRM')
if env['gcc']:
env.Append(CCFLAGS = ['-fvisibility=hidden'])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment