title: Doxygen does not recognise function calls when the functions are passed as arguments to threads
body: <h3>Brief</h3>
  
  <p>I use doxygen (Version 1.8.16) to document some python project. One of the main processes calls some subprocesses as threads. Unfortunately this is not recognised in the call graphs in doxygen. I suppose it is because these functions are passed as arguments (without the "()").</p>
  
  <pre class="lang-py prettyprint-override"><code># functionA / functionB are not recognised as called functions by doxygen
  t1 = Thread(target = functionA, args=(argA,argB))
  t2 = Thread(target = functionB, args=(argC,argD))
  
  t1.start()
  t2.start()
  
  t1.join()
  t2.join()
  </code></pre>
  
  <p>Has anybody a best practice or hack or filter for doxygen to take care of such cases, when functions are called indirectly?</p>
  
  <h3>Full example</h3>
  
  <p>The example python file to document</p>
  
  <pre class="lang-py prettyprint-override"><code>## @file 
  #@brief This is a simple doxygen test document.
  
  ## @brief A test function
  # This is a simple test function for doxygen.
  # It calls two functions, &lt;em&gt; functionA, functionB &lt;/em&gt; by spawning threads, which is not recognised by doxygen.
  def test():        
      t1 = Thread(target = functionA, args=(argA,argB))
      t2 = Thread(target = functionB, args=(argC,argD))
      t1.start()
      t2.start()
      t1.join()
      t2.join()
  
  ## @brief Another test function
  # This is a simple test function for doxygen.
  # It calls two functions, &lt;em&gt; &lt;functionA, functionB&gt; directly, which is recognised by doxygen and reflected in the callgraph.
  def test_serial():        
      functionA()
      functionB()    
  
  ## @brief One test function
  # @param testParA \b =1 A test constant
  # @return \b str A test return
  def functionA():
      testParA = 1
      testVarA = "test"
      return testVarA
  
  ## @brief Another test function
  # @param testParB \b ="test" A test constant
  # @return \b int Another test return
  def functionB():
      testParB = "test"
      testVarB = 1
      return testVarB
  </code></pre>
  
  <p>The doxygen config is to long to add here. You may use the default and just add.
  Note that graphviz with dot needs to be installed and findable (i.e. added to PATH environment) </p>
  
  <pre><code>OPTIMIZE_OUTPUT_JAVA   = YES
  EXTRACT_LOCAL_METHODS  = YES
  
  REFERENCED_BY_RELATION = YES
  REFERENCES_RELATION    = YES
  
  HAVE_DOT               = YES
  UML_LOOK               = YES
  
  CALL_GRAPH             = YES
  CALLER_GRAPH           = YES
  </code></pre>