waf, waflib: update to 1.7.13
[aubio.git] / waflib / Tools / qt4.py
index 4300a57..b4328e7 100644 (file)
@@ -20,18 +20,22 @@ MOC_H=['.h','.hpp','.hxx','.hh']
 EXT_RCC=['.qrc']
 EXT_UI=['.ui']
 EXT_QT4=['.cpp','.cc','.cxx','.C']
-QT4_LIBS="QtCore QtGui QtUiTools QtNetwork QtOpenGL QtSql QtSvg QtTest QtXml QtXmlPatterns QtWebKit Qt3Support QtHelp QtScript QtDeclarative"
-class qxx(cxx.cxx):
+QT4_LIBS="QtCore QtGui QtUiTools QtNetwork QtOpenGL QtSql QtSvg QtTest QtXml QtXmlPatterns QtWebKit Qt3Support QtHelp QtScript QtDeclarative QtDesigner"
+class qxx(Task.classes['cxx']):
        def __init__(self,*k,**kw):
                Task.Task.__init__(self,*k,**kw)
                self.moc_done=0
        def scan(self):
                (nodes,names)=c_preproc.scan(self)
+               lst=[]
                for x in nodes:
                        if x.name.endswith('.moc'):
-                               nodes.remove(x)
-                               names.append(x.path_from(self.inputs[0].parent.get_bld()))
-               return(nodes,names)
+                               s=x.path_from(self.inputs[0].parent.get_bld())
+                               if s not in names:
+                                       names.append(s)
+                       else:
+                               lst.append(x)
+               return(lst,names)
        def runnable_status(self):
                if self.moc_done:
                        return Task.Task.runnable_status(self)
@@ -41,6 +45,21 @@ class qxx(cxx.cxx):
                                        return Task.ASK_LATER
                        self.add_moc_tasks()
                        return Task.Task.runnable_status(self)
+       def create_moc_task(self,h_node,m_node):
+               try:
+                       moc_cache=self.generator.bld.moc_cache
+               except AttributeError:
+                       moc_cache=self.generator.bld.moc_cache={}
+               try:
+                       return moc_cache[h_node]
+               except KeyError:
+                       tsk=moc_cache[h_node]=Task.classes['moc'](env=self.env,generator=self.generator)
+                       tsk.set_inputs(h_node)
+                       tsk.set_outputs(m_node)
+                       gen=self.generator.bld.producer
+                       gen.outstanding.insert(0,tsk)
+                       gen.total+=1
+                       return tsk
        def add_moc_tasks(self):
                node=self.inputs[0]
                bld=self.generator.bld
@@ -90,24 +109,14 @@ class qxx(cxx.cxx):
                        if not h_node:
                                raise Errors.WafError('no header found for %r which is a moc file'%d)
                        bld.node_deps[(self.inputs[0].parent.abspath(),m_node.name)]=h_node
-                       task=Task.classes['moc'](env=self.env,generator=self.generator)
-                       task.set_inputs(h_node)
-                       task.set_outputs(m_node)
-                       gen=bld.producer
-                       gen.outstanding.insert(0,task)
-                       gen.total+=1
+                       task=self.create_moc_task(h_node,m_node)
                        moctasks.append(task)
                tmp_lst=bld.raw_deps[self.uid()]=mocfiles
                lst=bld.node_deps.get(self.uid(),())
                for d in lst:
                        name=d.name
                        if name.endswith('.moc'):
-                               task=Task.classes['moc'](env=self.env,generator=self.generator)
-                               task.set_inputs(bld.node_deps[(self.inputs[0].parent.abspath(),name)])
-                               task.set_outputs(d)
-                               gen=bld.producer
-                               gen.outstanding.insert(0,task)
-                               gen.total+=1
+                               task=self.create_moc_task(bld.node_deps[(self.inputs[0].parent.abspath(),name)],d)
                                moctasks.append(task)
                self.run_after.update(set(moctasks))
                self.moc_done=1
@@ -175,7 +184,7 @@ def apply_qt4(self):
                                lst.append('-'+flag[1:])
                        else:
                                lst.append(flag)
-       self.env['MOC_FLAGS']=lst
+       self.env.append_value('MOC_FLAGS',lst)
 @extension(*EXT_QT4)
 def cxx_hook(self,node):
        return self.create_compiled_task('qxx',node)
@@ -224,6 +233,7 @@ class qm2rcc(Task.Task):
 def configure(self):
        self.find_qt4_binaries()
        self.set_qt4_libs_to_check()
+       self.set_qt4_defines()
        self.find_qt4_libraries()
        self.add_qt4_rpath()
        self.simplify_qt4_libs()
@@ -405,7 +415,7 @@ def simplify_qt4_libs(self):
 @conf
 def add_qt4_rpath(self):
        env=self.env
-       if Options.options.want_rpath:
+       if getattr(Options.options,'want_rpath',False):
                def process_rpath(vars_,coreval):
                        for d in vars_:
                                var=d.upper()
@@ -429,6 +439,14 @@ def set_qt4_libs_to_check(self):
        if not hasattr(self,'qt4_vars_debug'):
                self.qt4_vars_debug=[a+'_debug'for a in self.qt4_vars]
        self.qt4_vars_debug=Utils.to_list(self.qt4_vars_debug)
+@conf
+def set_qt4_defines(self):
+       if sys.platform!='win32':
+               return
+       for x in self.qt4_vars:
+               y=x[2:].upper()
+               self.env.append_unique('DEFINES_%s'%x.upper(),'QT_%s_LIB'%y)
+               self.env.append_unique('DEFINES_%s_DEBUG'%x.upper(),'QT_%s_LIB'%y)
 def options(opt):
        opt.add_option('--want-rpath',action='store_true',default=False,dest='want_rpath',help='enable the rpath for qt libraries')
        opt.add_option('--header-ext',type='string',default='',help='header extension for moc files',dest='qt_header_ext')