#!/usr/bin/python """ This is an example on how the Qt4 examples should be compiled using the qt4 tool for scons. """ qt4ToolLocation='.' import glob import os def recursiveDirs(root) : return filter( (lambda a : a.rfind( "CVS")==-1 ), [ a[0] for a in os.walk(root)] ) def unique(list) : return dict.fromkeys(list).keys() def scanFiles(dir, accept=["*.cpp"], reject=[]) : sources = [] paths = recursiveDirs(dir) for path in paths : for pattern in accept : sources+=glob.glob(path+"/"+pattern) for pattern in reject : sources = filter( (lambda a : a.rfind(pattern)==-1 ), sources ) return unique(sources) def subdirsContaining(root, patterns): dirs = unique(map(os.path.dirname, scanFiles(root, patterns))) dirs.sort() return dirs targetDirs = subdirsContaining(".", ["*.cpp"]) # The following blacklisted directories contain examples that # couldn't be compiled with that script and the tool as they are. blacklist=[ "./designer/calculatorbuilder", # Missing designer libs in debian "./designer/containerextension", # Missing designer libs in debian "./designer/customwidgetplugin", # Missing designer libs in debian "./designer/taskmenuextension", # Missing designer libs in debian "./designer/worldtimeclockbuilder", # Missing designer libs in debian "./designer/worldtimeclockplugin", # Missing designer libs in debian "./network/torrent", # Tool Bug: cxx moc handling "./qtestlib/tutorial1", # Tool Bug: cxx moc handling "./qtestlib/tutorial2", # Tool Bug: cxx moc handling "./qtestlib/tutorial3", # Tool Bug: cxx moc handling "./qtestlib/tutorial4", # Tool Bug: cxx moc handling # "./sql/relationaltablemodel", # Should pkg_config define QT_GUI_LIB? "./tools/qtdemo", # includes private/x11_qt_p.h "./tools/plugandpaintplugins/basictools", # Not a normal project (to be reviewed) "./tools/plugandpaintplugins/extrafilters", # Not a normal project (to be reviewed) ] blacklist = map(os.path.normpath, blacklist) env = Environment(tools=['default','qt4'], toolpath=[qt4ToolLocation]) env['CXXFILESUFFIX']='.cpp' env.EnableQt4Modules(["QtGui","QtCore","QtNetwork","QtOpenGL","QtXml","QtSvg","QtSql","QtTest"]) programs = [] for dir in targetDirs: if os.path.normpath(dir) in blacklist: continue sources = scanFiles(dir, accept=["*.cpp", "*.c"], # *.c needed for some 3rd party files on the examples reject=["qrc_", "ui_", "moc_"]) # rcc needs a -name flag because examples use identified resource files def takebasename(file) : return os.path.splitext(os.path.basename(file))[0] resources = [ env.Qrc(qrc, QT4_QRCFLAGS='-name '+takebasename(qrc)) for qrc in scanFiles(dir, ['*.qrc'])] interfaces = [env.Uic4(uic) for uic in scanFiles(dir, ['*.ui'])] additionalPaths = subdirsContaining(dir, ['*.h', '*.ui']) programs += [ env.Program( dir+"/"+os.path.basename(dir), sources+resources, CPPPATH=env['CPPPATH']+additionalPaths) ] env.Alias('programs', programs) env.Default('programs')