parameters: (self, target, source, env)
return_statement: return (target, out_sources)
docstring: Smart autoscan function. Gets the list of objects for the Program
          or Lib. Adds objects and builders for the special qt files.
docstring_summary: Smart autoscan function. Gets the list of objects for the Program
          or Lib. Adds objects and builders for the special qt files.
docstring_tokens: Smart autoscan function . Gets the list of objects for the Program or Lib . Adds objects and builders for the special qt files .
function: def __call__(self, target, source, env):
          """
          Smart autoscan function. Gets the list of objects for the Program
          or Lib. Adds objects and builders for the special qt files.
          """
          try:
              if int(env.subst('$QT_AUTOSCAN')) == 0:
                  return target, source
          except ValueError:
              pass
          try:
              debug = int(env.subst('$QT_DEBUG'))
          except ValueError:
              debug = 0
          
          # some shortcuts used in the scanner
          splitext = SCons.Util.splitext
          objBuilder = getattr(env, self.objBuilderName)
    
          # some regular expressions:
          # Q_OBJECT detection
          q_object_search = re.compile(r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]') 
          # cxx and c comment 'eater'
          #comment = re.compile(r'(//.*)|(/\*(([^*])|(\*[^/]))*\*/)')
          # CW: something must be wrong with the regexp. See also bug #998222
          #     CURRENTLY THERE IS NO TEST CASE FOR THAT
          
          # The following is kind of hacky to get builders working properly (FIXME)
          objBuilderEnv = objBuilder.env
          objBuilder.env = env
          mocBuilderEnv = env.Moc.env
          env.Moc.env = env
          
          # make a deep copy for the result; MocH objects will be appended
          out_sources = source[:]
  
          for obj in source:
              if not obj.has_builder():
                  # binary obj file provided
                  if debug:
                      print("scons: qt: '%s' seems to be a binary. Discarded." % str(obj))
                  continue
              cpp = obj.sources[0]
              if not splitext(str(cpp))[1] in cxx_suffixes:
                  if debug:
                      print("scons: qt: '%s' is no cxx file. Discarded." % str(cpp)) 
                  # c or fortran source
                  continue
              #cpp_contents = comment.sub('', cpp.get_text_contents())
              if debug:
                  print("scons: qt: Getting contents of %s" % cpp)
              cpp_contents = cpp.get_text_contents()
              h=None
              for h_ext in header_extensions:
                  # try to find the header file in the corresponding source
                  # directory
                  hname = splitext(cpp.name)[0] + h_ext
                  h = find_file(hname, (cpp.get_dir(),), env.File)
                  if h:
                      if debug:
                          print("scons: qt: Scanning '%s' (header of '%s')" % (str(h), str(cpp)))
                      #h_contents = comment.sub('', h.get_text_contents())
                      h_contents = h.get_text_contents()
                      break
              if not h and debug:
                  print("scons: qt: no header for '%s'." % (str(cpp)))
              if h and q_object_search.search(h_contents):
                  # h file with the Q_OBJECT macro found -> add moc_cpp
                  moc_cpp = env.Moc(h)
                  moc_o = objBuilder(moc_cpp)
                  out_sources.append(moc_o)
                  #moc_cpp.target_scanner = SCons.Defaults.CScan
                  if debug:
                      print("scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(h), str(moc_cpp)))
              if cpp and q_object_search.search(cpp_contents):
                  # cpp file with Q_OBJECT macro found -> add moc
                  # (to be included in cpp)
                  moc = env.Moc(cpp)
                  env.Ignore(moc, moc)
                  if debug:
                      print("scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % (str(cpp), str(moc)))
                  #moc.source_scanner = SCons.Defaults.CScan
          # restore the original env attributes (FIXME)
          objBuilder.env = objBuilderEnv
          env.Moc.env = mocBuilderEnv
  
          return (target, out_sources)
function_tokens: def __call__ ( self , target , source , env ) : try : if int ( env . subst ( '$QT_AUTOSCAN' ) ) == 0 : return target , source except ValueError : pass try : debug = int ( env . subst ( '$QT_DEBUG' ) ) except ValueError : debug = 0 # some shortcuts used in the scanner splitext = SCons . Util . splitext objBuilder = getattr ( env , self . objBuilderName ) # some regular expressions: # Q_OBJECT detection q_object_search = re . compile ( r'[^A-Za-z0-9]Q_OBJECT[^A-Za-z0-9]' ) # cxx and c comment 'eater' #comment = re.compile(r'(//.*)|(/\*(([^*])|(\*[^/]))*\*/)') # CW: something must be wrong with the regexp. See also bug #998222 #     CURRENTLY THERE IS NO TEST CASE FOR THAT # The following is kind of hacky to get builders working properly (FIXME) objBuilderEnv = objBuilder . env objBuilder . env = env mocBuilderEnv = env . Moc . env env . Moc . env = env # make a deep copy for the result; MocH objects will be appended out_sources = source [ : ] for obj in source : if not obj . has_builder ( ) : # binary obj file provided if debug : print ( "scons: qt: '%s' seems to be a binary. Discarded." % str ( obj ) ) continue cpp = obj . sources [ 0 ] if not splitext ( str ( cpp ) ) [ 1 ] in cxx_suffixes : if debug : print ( "scons: qt: '%s' is no cxx file. Discarded." % str ( cpp ) ) # c or fortran source continue #cpp_contents = comment.sub('', cpp.get_text_contents()) if debug : print ( "scons: qt: Getting contents of %s" % cpp ) cpp_contents = cpp . get_text_contents ( ) h = None for h_ext in header_extensions : # try to find the header file in the corresponding source # directory hname = splitext ( cpp . name ) [ 0 ] + h_ext h = find_file ( hname , ( cpp . get_dir ( ) , ) , env . File ) if h : if debug : print ( "scons: qt: Scanning '%s' (header of '%s')" % ( str ( h ) , str ( cpp ) ) ) #h_contents = comment.sub('', h.get_text_contents()) h_contents = h . get_text_contents ( ) break if not h and debug : print ( "scons: qt: no header for '%s'." % ( str ( cpp ) ) ) if h and q_object_search . search ( h_contents ) : # h file with the Q_OBJECT macro found -> add moc_cpp moc_cpp = env . Moc ( h ) moc_o = objBuilder ( moc_cpp ) out_sources . append ( moc_o ) #moc_cpp.target_scanner = SCons.Defaults.CScan if debug : print ( "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % ( str ( h ) , str ( moc_cpp ) ) ) if cpp and q_object_search . search ( cpp_contents ) : # cpp file with Q_OBJECT macro found -> add moc # (to be included in cpp) moc = env . Moc ( cpp ) env . Ignore ( moc , moc ) if debug : print ( "scons: qt: found Q_OBJECT macro in '%s', moc'ing to '%s'" % ( str ( cpp ) , str ( moc ) ) ) #moc.source_scanner = SCons.Defaults.CScan # restore the original env attributes (FIXME) objBuilder . env = objBuilderEnv env . Moc . env = mocBuilderEnv return ( target , out_sources )