Import('env', 'os', 'glob', 'sys', 'hasQt', 'hasCollada', 'mainEnv', 'resources', 'converter_objects') # For running Uic & Moc (below) def recursiveDirs(root) : return filter((lambda a : a.rfind(".svn") == -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) sources = map((lambda a : os.path.basename(a)), sources) return unique(sources) if hasQt: qtEnv = mainEnv.Clone() qtEnv.Append(CPPPATH=['#src/qtgui']) qtEnv.EnableQt4Modules(['QtGui', 'QtCore', 'QtOpenGL', 'QtXml', 'QtNetwork']) if sys.platform == 'win32': index = qtEnv['CXXFLAGS'].index('_CONSOLE') del qtEnv['CXXFLAGS'][index-1] del qtEnv['CXXFLAGS'][index-1] index = qtEnv['LINKFLAGS'].index('/SUBSYSTEM:CONSOLE') del qtEnv['LINKFLAGS'][index] qtEnv.Append(CXXFLAGS=['/D', '_WINDOWS']) qtEnv.Append(LINKFLAGS=['/SUBSYSTEM:WINDOWS']) qtEnv.Append(LIBS=['qtmain']) elif sys.platform == 'darwin': qtEnv.Append(LINKFLAGS=['-Fdependencies/darwin', '-framework', 'BWToolkitFramework']) bpath = env.GetBuildPath('#src/qtgui') qtInterfaces = [qtEnv.Uic4(uic) for uic in scanFiles(bpath, ['*.ui'])] qtResources = [qtEnv.Qrc(qrc) for qrc in scanFiles(bpath, ['*.qrc'])] qtSources = scanFiles(bpath, ['*.cpp']) + qtResources + resources if hasCollada: qtSources += converter_objects if env.has_key('COLLADALIBDIR'): qtEnv.Prepend(LIBPATH=env['COLLADALIBDIR']) if env.has_key('COLLADALIB'): qtEnv.Prepend(LIBS=env['COLLADALIB']) if sys.platform == 'darwin': qtEnv_osx = qtEnv.Clone() # Objective C++ does not permit the following optimization flags qtEnv_osx['CXXFLAGS'].remove('-fstrict-aliasing') qtEnv_osx['CXXFLAGS'].remove('-ftree-vectorize') qtEnv_osx['CXXFLAGS'].append('-fno-strict-aliasing') qtEnv_osx['CXXFLAGS'].append(['-Fdependencies/darwin', '-framework', 'BWToolkitFramework']) qtSources += qtEnv_osx.StaticObject('previewsettingsdlg_cocoa_impl.mm') else: qtSources = [x for x in qtSources if (not isinstance(x, str) or 'cocoa' not in x)] qtgui = qtEnv.Program('mtsgui', qtSources) if sys.platform == 'darwin': qtEnv.AddPostAction(qtgui, 'install_name_tool -change QtGui.framework/Versions/4/QtGui @executable_path/../Frameworks/QtGui $TARGET') qtEnv.AddPostAction(qtgui, 'install_name_tool -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/QtCore $TARGET') qtEnv.AddPostAction(qtgui, 'install_name_tool -change QtOpenGL.framework/Versions/4/QtOpenGL @executable_path/../Frameworks/QtOpenGL $TARGET') qtEnv.AddPostAction(qtgui, 'install_name_tool -change QtXml.framework/Versions/4/QtXml @executable_path/../Frameworks/QtXml $TARGET') qtEnv.AddPostAction(qtgui, 'install_name_tool -change QtNetwork.framework/Versions/4/QtNetwork @executable_path/../Frameworks/QtNetwork $TARGET')