import os.path
import re
+import fnmatch
import SCons.Action
import SCons.Builder
def _detect(env):
"""Not really safe, but fast method to detect the QT library"""
- try: return env['QTDIR']
+ try: env['QTDIR']
except KeyError: pass
+ else: return env.Dir(env.subst('$QTDIR')).abspath
try: return os.environ['QTDIR']
except KeyError: pass
# TODO: Does dbusxml2cpp need an adapter
env.AddMethod(enable_modules, "EnableQt4Modules")
+ resourceDirectoryBuilder = Builder(
+ action = Action(resourceDirectory),
+ source_factory = env.Dir)
+ env.Append( BUILDERS = { 'Qt4ResourceFromDirectory' : resourceDirectoryBuilder } )
+
# Utilities
env.AddMethod(qt4glob, "Qt4Glob")
if sys.platform in ["darwin", "linux2"] and not crosscompiling :
if debug : debugSuffix = '_debug'
for module in modules :
- if module not in pclessModules : continue
- self.AppendUnique(LIBS=[module+debugSuffix])
- self.AppendUnique(LIBPATH=[os.path.join("$QTDIR","lib")])
+ if sys.platform == "darwin":
+ self.AppendUnique(FRAMEWORKS=[module+debugSuffix])
+ self.AppendUnique(FRAMEWORKPATH=[os.path.join("$QTDIR","lib")])
+ else:
+ self.AppendUnique(LIBS=[module+debugSuffix])
+ self.AppendUnique(LIBPATH=[os.path.join("$QTDIR","lib")])
self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include","qt4")])
self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include","qt4",module)])
- pcmodules = [module+debugSuffix for module in modules if module not in pclessModules ]
- if 'QtDBus' in pcmodules:
+ if 'QtDBus' in modules:
self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include","qt4","QtDBus")])
- if "QtAssistant" in pcmodules:
+ if "QtAssistant" in modules:
self.AppendUnique(CPPPATH=[os.path.join("$QTDIR","include","qt4","QtAssistant")])
- pcmodules.remove("QtAssistant")
- pcmodules.append("QtAssistantClient")
- self.ParseConfig('pkg-config %s --libs --cflags'% ' '.join(pcmodules))
self["QT4_MOCCPPPATH"] = self["CPPPATH"]
return
if sys.platform == "win32" or crosscompiling :
def qt4glob(env):
resources = env.Glob("*.qrc")
sources = [ f for f in env.Glob("*.cc")
- if not f.name.startswith("qrc_") ]
+ if not f.name.startswith("qrc_") and not f.name.startswith("moc_") ]
return sources + resources
+def scanResourceDirectory(directory, root, prefix="", exclude=[]):
+ rv = [
+ '<!DOCTYPE RCC>',
+ # '<?xml version="1.0" encoding="utf-8"?>',
+ '<RCC version="1.0">' ]
+ for base, subdirs, files in os.walk(str(directory)):
+ rv.append('<qresource prefix="%s">' % os.path.join(prefix, base[len(str(directory)):]))
+ for f in files:
+ if not [True for pattern in exclude if fnmatch.fnmatch(f,pattern)]:
+ rv.append('<file alias="%s">%s</file>'
+ % (f, directory.fs.File(os.path.join(base, f)).get_path(root)))
+ rv.append("'</qresource>'")
+ rv.append('</RCC>\n')
+ return '\n'.join(rv)
+
+def resourceDirectory(env, target, source):
+ file(str(target[0]), 'w').write(scanResourceDirectory(
+ source[0], root=target[0].dir,
+ prefix=env.get('RESOURCE_PREFIX', ''), exclude=env.get('EXCLUDE', [])))
+
def exists(env):
return _detect(env)