Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python call graph is not completely correct #8851

Closed
zlonqi opened this issue Oct 25, 2021 · 20 comments
Closed

Python call graph is not completely correct #8851

zlonqi opened this issue Oct 25, 2021 · 20 comments

Comments

@zlonqi
Copy link

zlonqi commented Oct 25, 2021

I used doxywizard to genarate call and caller graph for a large python project. call graph was not completely correct.

 class SawtoothSubmitter:
        def a:
                xxx
        def b:
               xxx
        def c:
               xxx

The result is a->b->c, But in fact there is no call relationship between them. Thank you so much~

@albert-github albert-github added needinfo reported bug is incomplete, please add additional info Python labels Oct 25, 2021
@albert-github
Copy link
Collaborator

  • Can you please attach a, small, self contained example (source+configuration file in a tar or zip) that allows us to reproduce the problem? Please don't add external links as they might not be persistent.
  • Please also specify the full doxygen version used (doxygen -v).

@albert-github
Copy link
Collaborator

As a spin off I did a quick test with:

## \file

## class docu
class test_py:
  ## fie docu
  def a:
    pass

  ## fie docu
  def b:
    pass

  ## fie docu
  def c:
    pass

  ## fie docu
  def d(i):
    if (i > 0):
      return i+d(i-1)

And here we see a self recursive relation for each function though this should only be the case for the d function.
In case we translate the code to Cpp or Fortran we see with these languages that only d is, self, recursive.
This looks like to have to do with the code in the function getLinkInScope in pycode.l:

      if (yyextra->currentDefinition && yyextra->currentMemberDef && yyextra->collectXRefs)
      {
        std::lock_guard<std::mutex> lock(g_docCrossReferenceMutex);
        addDocCrossReference(toMemberDefMutable(yyextra->currentMemberDef),toMemberDefMutable(md));
      }

the analogous code for Cpp and Fortran loooks:

      if (yyextra->currentDefinition && yyextra->currentMemberDef &&
          yyextra->insideBody && yyextra->collectXRefs)
      {
        std::lock_guard<std::mutex> lock(g_docCrossReferenceMutex);
        addDocCrossReference(toMemberDefMutable(yyextra->currentMemberDef),toMemberDefMutable(md));
      }

so with and extra yyextra->insideBody. The concept of insideBody for pycode.l has never been implemented.

Example: example.tar.gz

It might be that this also causes the original problem @zlonqi has but this is hard to tell (and therfore the example is still wanted. as I don't see the original problem).

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

As a spin off I did a quick test with:

## \file

## class docu
class test_py:
  ## fie docu
  def a:
    pass

  ## fie docu
  def b:
    pass

  ## fie docu
  def c:
    pass

  ## fie docu
  def d(i):
    if (i > 0):
      return i+d(i-1)

And here we see a self recursive relation for each function though this should only be the case for the d function. In case we translate the code to Cpp or Fortran we see with these languages that only d is, self, recursive. This looks like to have to do with the code in the function getLinkInScope in pycode.l:

      if (yyextra->currentDefinition && yyextra->currentMemberDef && yyextra->collectXRefs)
      {
        std::lock_guard<std::mutex> lock(g_docCrossReferenceMutex);
        addDocCrossReference(toMemberDefMutable(yyextra->currentMemberDef),toMemberDefMutable(md));
      }

the analogous code for Cpp and Fortran loooks:

      if (yyextra->currentDefinition && yyextra->currentMemberDef &&
          yyextra->insideBody && yyextra->collectXRefs)
      {
        std::lock_guard<std::mutex> lock(g_docCrossReferenceMutex);
        addDocCrossReference(toMemberDefMutable(yyextra->currentMemberDef),toMemberDefMutable(md));
      }

so with and extra yyextra->insideBody. The concept of insideBody for pycode.l has never been implemented.

Example: example.tar.gz

It might be that this also causes the original problem @zlonqi has but this is hard to tell (and therfore the example is still wanted. as I don't see the original problem).

Maybe it is reason. Thank you so much~

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

Can you please attach a, small, self contained example (source+configuration file in a tar or zip) that allows us to reproduce the problem? Please don't add external links as they might not be persistent.

Please also specify the **full** doxygen version used (`doxygen -v`).
# doxygen -v
1.8.13

The small project is python.tar.gz
The doxygen and graphviz results are html.tar.gz
the test case is python/pdo/submitter/sawtooth/sawtooth_submitter.py::SawtoothSubmitter:

class SawtoothSubmitter(sub.Submitter):
    def __init__(self, ledger_config, *args, **kwargs):
        super().__init__(ledger_config, *args, **kwargs)

        # Sawtooth Specific Parameters.
        self.wait = ledger_config.get('wait', 30.0) # submitter will wait 30 seconds to hear back from Sawtooth
                                    # If no response, client to check back with Sawtooth about the status
        #Sawtooth read helper
        self.read_helper = PdoRegistryHelper(self.url) #registry helper for read transactions

# -----------------------------------------------------------------
    def submit_json(self, json_input, address_family, **extra_params) :

        # Get the write connect_helper. This cannot be attached to the class instance, since
        # the sawtooth header signing key must be unique for each transaction.
        # Previously, each class instance was used only for a single transaction,
        # so this was not a problem. The current implementation permits an instance to be reused

        key_str = extra_params.get('key_str', None) # this is the header signing key
        if key_str is None:
            txn_keys = keys.TransactionKeys()
            key_str = txn_keys.txn_private

        transaction_dependency_list = extra_params.get('transaction_dependency_list', None)

        # Sawtooth connector supports a few extra parameters. We shall fix these in PDO
        keyfile = None
        auto_generate = False
        exception_type = Exception
        verbose = False

        connect_helper = PdoClientConnectHelper(self.url, keyfile, key_str, auto_generate)

        json_payload = json.dumps(json_input)
        signature = connect_helper.\
            execute_json_transaction(
                json_payload,
                address_family,
                self.wait,
                exception_type,
                verbose,
                transaction_dependency_list=transaction_dependency_list)
        logger.debug("json: %s", json_payload)
        logger.debug("signature: %s", signature)

        return signature


    def register_encalve(self,
        enclave_verifying_key,
        enclave_encryption_key,
        proof_data,
        registration_block_context,
        organizational_info,
        **extra_params):

        json_input = JsonPayloadBuilder.build_enclave_registration_from_data(
            enclave_verifying_key,
            enclave_encryption_key,
            proof_data,
            registration_block_context,
            organizational_info)

        extra_params['key_str'] = self.pdo_signer.txn_private # for enclave registration, the eservice keys
                                # are used to sign the Sawtooth header
        return self.submit_json(json_input, json_input['af'], **extra_params)


    def register_contract(self,
        contract_code_hash,
        provisioning_service_ids,
        **extra_params):

        txn_keys = keys.TransactionKeys()

        json_input = JsonPayloadBuilder.build_contract_registration_from_data(
            self.pdo_signer.signing_key,
            self.pdo_signer.verifying_key,
            txn_keys.txn_public,
            crypto.byte_array_to_base64(contract_code_hash),
            provisioning_service_ids)

        extra_params['key_str'] = txn_keys.txn_private

        return self.submit_json(json_input, json_input['af'], **extra_params)

# -----------------------------------------------------------------
    def add_enclave_to_contract(self,
        contract_id,
        enclave_info_quintuples,
        **extra_params):

        txn_keys = keys.TransactionKeys()

        json_input = JsonPayloadBuilder.build_add_enclave_from_data(
            self.pdo_signer.signing_key,
            txn_keys.txn_public,
            contract_id,
            enclave_info_quintuples)

        extra_params['key_str'] = txn_keys.txn_private

        return self.submit_json(json_input, json_input['af'], **extra_params)

# -----------------------------------------------------------------
    def ccl_initialize(self,
        channel_keys,
        contract_enclave_id,
        enclave_signature,
        contract_id,
        message_hash,
        current_state_hash,
        contract_code_hash,
        **extra_params):

        json_input = JsonPayloadBuilder.build_ccl_transaction_from_data(
            self.pdo_signer.signing_key,
            self.pdo_signer.verifying_key,
            'initialize',
            channel_keys.txn_public,
            contract_enclave_id,
            enclave_signature,
            contract_id,
            crypto.byte_array_to_base64(message_hash),
            crypto.byte_array_to_base64(current_state_hash),
            "",     # previous_state_hash,
            "",     # encyrpted root block. No longer stored in Sawtooth
            [],     # empty dependency_list
            crypto.byte_array_to_base64(contract_code_hash))
                            # contract code hash is necessary for the pdo signature

        extra_params['key_str'] = channel_keys.txn_private

        return self.submit_json(json_input, json_input['af'], **extra_params)

The call and caller is below But this is not entirely correct
screenshot

the configuration is follow as below, any suggestions will be useful, thank you~

# Doxyfile 1.8.13

#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "My Project"
PROJECT_NUMBER         = 
PROJECT_BRIEF          = 
PROJECT_LOGO           = 
OUTPUT_DIRECTORY       = /root/doxygen/python
CREATE_SUBDIRS         = NO
ALLOW_UNICODE_NAMES    = NO
OUTPUT_LANGUAGE        = English
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       = "The $name class" \
                         "The $name widget" \
                         "The $name file" \
                         is \
                         provides \
                         specifies \
                         contains \
                         represents \
                         a \
                         an \
                         the
ALWAYS_DETAILED_SEC    = NO
INLINE_INHERITED_MEMB  = NO
FULL_PATH_NAMES        = YES
STRIP_FROM_PATH        = 
STRIP_FROM_INC_PATH    = 
SHORT_NAMES            = NO
JAVADOC_AUTOBRIEF      = NO
QT_AUTOBRIEF           = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS           = YES
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 4
ALIASES                = 
TCL_SUBST              = 
OPTIMIZE_OUTPUT_FOR_C  = NO
OPTIMIZE_OUTPUT_JAVA   = NO
OPTIMIZE_FOR_FORTRAN   = NO
OPTIMIZE_OUTPUT_VHDL   = NO
EXTENSION_MAPPING      = 
MARKDOWN_SUPPORT       = YES
TOC_INCLUDE_HEADINGS   = 0
AUTOLINK_SUPPORT       = YES
BUILTIN_STL_SUPPORT    = NO
CPP_CLI_SUPPORT        = NO
SIP_SUPPORT            = NO
IDL_PROPERTY_SUPPORT   = YES
DISTRIBUTE_GROUP_DOC   = NO
GROUP_NESTED_COMPOUNDS = NO
SUBGROUPING            = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS  = NO
TYPEDEF_HIDES_STRUCT   = NO
LOOKUP_CACHE_SIZE      = 0
#---------------------------------------------------------------------------
# Build related configuration options
#---------------------------------------------------------------------------
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_PACKAGE        = YES
EXTRACT_STATIC         = YES
EXTRACT_LOCAL_CLASSES  = YES
EXTRACT_LOCAL_METHODS  = YES
EXTRACT_ANON_NSPACES   = NO
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
HIDE_IN_BODY_DOCS      = NO
INTERNAL_DOCS          = NO
CASE_SENSE_NAMES       = NO
HIDE_SCOPE_NAMES       = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES     = YES
SHOW_GROUPED_MEMB_INC  = NO
FORCE_LOCAL_INCLUDES   = NO
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
SORT_BRIEF_DOCS        = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES       = NO
SORT_BY_SCOPE_NAME     = NO
STRICT_PROTO_MATCHING  = NO
GENERATE_TODOLIST      = YES
GENERATE_TESTLIST      = YES
GENERATE_BUGLIST       = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS       = 
MAX_INITIALIZER_LINES  = 30
SHOW_USED_FILES        = YES
SHOW_FILES             = YES
SHOW_NAMESPACES        = YES
FILE_VERSION_FILTER    = 
LAYOUT_FILE            = 
CITE_BIB_FILES         = 
#---------------------------------------------------------------------------
# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_AS_ERROR          = NO
WARN_FORMAT            = "$file:$line: $text"
WARN_LOGFILE           = 
#---------------------------------------------------------------------------
# Configuration options related to the input files
#---------------------------------------------------------------------------
INPUT                  = /root/private-data-objects/python
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          = *.c \
                         *.cc \
                         *.cxx \
                         *.cpp \
                         *.c++ \
                         *.java \
                         *.ii \
                         *.ixx \
                         *.ipp \
                         *.i++ \
                         *.inl \
                         *.idl \
                         *.ddl \
                         *.odl \
                         *.h \
                         *.hh \
                         *.hxx \
                         *.hpp \
                         *.h++ \
                         *.cs \
                         *.d \
                         *.php \
                         *.php4 \
                         *.php5 \
                         *.phtml \
                         *.inc \
                         *.m \
                         *.markdown \
                         *.md \
                         *.mm \
                         *.dox \
                         *.py \
                         *.pyw \
                         *.f90 \
                         *.f95 \
                         *.f03 \
                         *.f08 \
                         *.f \
                         *.for \
                         *.tcl \
                         *.vhd \
                         *.vhdl \
                         *.ucf \
                         *.qsf
RECURSIVE              = YES
EXCLUDE                = 
EXCLUDE_SYMLINKS       = NO
EXCLUDE_PATTERNS       = 
EXCLUDE_SYMBOLS        = 
EXAMPLE_PATH           = 
EXAMPLE_PATTERNS       = *
EXAMPLE_RECURSIVE      = NO
IMAGE_PATH             = 
INPUT_FILTER           = 
FILTER_PATTERNS        = 
FILTER_SOURCE_FILES    = NO
FILTER_SOURCE_PATTERNS = 
USE_MDFILE_AS_MAINPAGE = 
#---------------------------------------------------------------------------
# Configuration options related to source browsing
#---------------------------------------------------------------------------
SOURCE_BROWSER         = YES
INLINE_SOURCES         = NO
STRIP_CODE_COMMENTS    = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION    = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS        = YES
USE_HTAGS              = NO
VERBATIM_HEADERS       = YES
CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS          = 
#---------------------------------------------------------------------------
# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
ALPHABETICAL_INDEX     = YES
COLS_IN_ALPHA_INDEX    = 5
IGNORE_PREFIX          = 
#---------------------------------------------------------------------------
# Configuration options related to the HTML output
#---------------------------------------------------------------------------
GENERATE_HTML          = YES
HTML_OUTPUT            = html
HTML_FILE_EXTENSION    = .html
HTML_HEADER            = 
HTML_FOOTER            = 
HTML_STYLESHEET        = 
HTML_EXTRA_STYLESHEET  = 
HTML_EXTRA_FILES       = 
HTML_COLORSTYLE_HUE    = 220
HTML_COLORSTYLE_SAT    = 100
HTML_COLORSTYLE_GAMMA  = 80
HTML_TIMESTAMP         = NO
HTML_DYNAMIC_SECTIONS  = NO
HTML_INDEX_NUM_ENTRIES = 100
GENERATE_DOCSET        = NO
DOCSET_FEEDNAME        = "Doxygen generated docs"
DOCSET_BUNDLE_ID       = org.doxygen.Project
DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
DOCSET_PUBLISHER_NAME  = Publisher
GENERATE_HTMLHELP      = YES
CHM_FILE               = 
HHC_LOCATION           = 
GENERATE_CHI           = NO
CHM_INDEX_ENCODING     = 
BINARY_TOC             = NO
TOC_EXPAND             = NO
GENERATE_QHP           = NO
QCH_FILE               = 
QHP_NAMESPACE          = org.doxygen.Project
QHP_VIRTUAL_FOLDER     = doc
QHP_CUST_FILTER_NAME   = 
QHP_CUST_FILTER_ATTRS  = 
QHP_SECT_FILTER_ATTRS  = 
QHG_LOCATION           = 
GENERATE_ECLIPSEHELP   = NO
ECLIPSE_DOC_ID         = org.doxygen.Project
DISABLE_INDEX          = NO
GENERATE_TREEVIEW      = NO
ENUM_VALUES_PER_LINE   = 4
TREEVIEW_WIDTH         = 250
EXT_LINKS_IN_WINDOW    = NO
FORMULA_FONTSIZE       = 10
FORMULA_TRANSPARENT    = YES
USE_MATHJAX            = NO
MATHJAX_FORMAT         = HTML-CSS
MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
MATHJAX_EXTENSIONS     = 
MATHJAX_CODEFILE       = 
SEARCHENGINE           = YES
SERVER_BASED_SEARCH    = NO
EXTERNAL_SEARCH        = NO
SEARCHENGINE_URL       = 
SEARCHDATA_FILE        = searchdata.xml
EXTERNAL_SEARCH_ID     = 
EXTRA_SEARCH_MAPPINGS  = 
#---------------------------------------------------------------------------
# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
GENERATE_LATEX         = YES
LATEX_OUTPUT           = latex
LATEX_CMD_NAME         = latex
MAKEINDEX_CMD_NAME     = makeindex
COMPACT_LATEX          = NO
PAPER_TYPE             = a4
EXTRA_PACKAGES         = 
LATEX_HEADER           = 
LATEX_FOOTER           = 
LATEX_EXTRA_STYLESHEET = 
LATEX_EXTRA_FILES      = 
PDF_HYPERLINKS         = YES
USE_PDFLATEX           = YES
LATEX_BATCHMODE        = NO
LATEX_HIDE_INDICES     = NO
LATEX_SOURCE_CODE      = NO
LATEX_BIB_STYLE        = plain
LATEX_TIMESTAMP        = NO
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
GENERATE_RTF           = NO
RTF_OUTPUT             = rtf
COMPACT_RTF            = NO
RTF_HYPERLINKS         = NO
RTF_STYLESHEET_FILE    = 
RTF_EXTENSIONS_FILE    = 
RTF_SOURCE_CODE        = NO
#---------------------------------------------------------------------------
# Configuration options related to the man page output
#---------------------------------------------------------------------------
GENERATE_MAN           = NO
MAN_OUTPUT             = man
MAN_EXTENSION          = .3
MAN_SUBDIR             = 
MAN_LINKS              = NO
#---------------------------------------------------------------------------
# Configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML           = NO
XML_OUTPUT             = xml
XML_PROGRAMLISTING     = YES
#---------------------------------------------------------------------------
# Configuration options related to the DOCBOOK output
#---------------------------------------------------------------------------
GENERATE_DOCBOOK       = NO
DOCBOOK_OUTPUT         = docbook
DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
GENERATE_AUTOGEN_DEF   = NO
#---------------------------------------------------------------------------
# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
GENERATE_PERLMOD       = NO
PERLMOD_LATEX          = NO
PERLMOD_PRETTY         = YES
PERLMOD_MAKEVAR_PREFIX = 
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = NO
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           = 
INCLUDE_FILE_PATTERNS  = 
PREDEFINED             = 
EXPAND_AS_DEFINED      = 
SKIP_FUNCTION_MACROS   = YES
#---------------------------------------------------------------------------
# Configuration options related to external references
#---------------------------------------------------------------------------
TAGFILES               = 
GENERATE_TAGFILE       = 
ALLEXTERNALS           = NO
EXTERNAL_GROUPS        = YES
EXTERNAL_PAGES         = YES
PERL_PATH              = /usr/bin/perl
#---------------------------------------------------------------------------
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
CLASS_DIAGRAMS         = YES
MSCGEN_PATH            = 
DIA_PATH               = 
HIDE_UNDOC_RELATIONS   = YES
HAVE_DOT               = YES
DOT_NUM_THREADS        = 0
DOT_FONTNAME           = Helvetica
DOT_FONTSIZE           = 10
DOT_FONTPATH           = 
CLASS_GRAPH            = YES
COLLABORATION_GRAPH    = YES
GROUP_GRAPHS           = YES
UML_LOOK               = YES
UML_LIMIT_NUM_FIELDS   = 10
TEMPLATE_RELATIONS     = NO
INCLUDE_GRAPH          = YES
INCLUDED_BY_GRAPH      = YES
CALL_GRAPH             = YES
CALLER_GRAPH           = YES
GRAPHICAL_HIERARCHY    = YES
DIRECTORY_GRAPH        = YES
DOT_IMAGE_FORMAT       = gif
INTERACTIVE_SVG        = NO
DOT_PATH               = /usr/bin/
DOTFILE_DIRS           = 
MSCFILE_DIRS           = 
DIAFILE_DIRS           = 
PLANTUML_JAR_PATH      = 
PLANTUML_CFG_FILE      = 
PLANTUML_INCLUDE_PATH  = 
DOT_GRAPH_MAX_NODES    = 50
MAX_DOT_GRAPH_DEPTH    = 0
DOT_TRANSPARENT        = NO
DOT_MULTI_TARGETS      = NO
GENERATE_LEGEND        = YES
DOT_CLEANUP            = YES

@albert-github
Copy link
Collaborator

albert-github commented Oct 26, 2021

  • thanks for the project and the images unfortunately he given project is far from minimal ( :-( ), hopefully the recursive problem I saw will solve also the problems here.
  • do you mean that the arrows indicated in red (i.e running from left to right should not be present?
    • there are more arrows from left to right that you didn't circle are they correct? (also the ones that run off the page)
  • The doxygen 1.8.13 version is a bit old (December 29,2016), the current version is 1.9.2

The result with the 1.9.2 version looks like:

image

  • This looks reasonable OK to me except for the self recursive problem. Correct?

Note: you also have twice the submit_json routine, but this is probably due to the fact that you run doxygen over the build and the pdo directory

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

  • thanks for the project and the images unfortunately he given project is far from minimal ( :-( ), hopefully the recursive problem I saw will solve also the problems here.

  • do you mean that the arrows indicated in red (i.e running from left to right should not be present?

    • there are more arrows from left to right that you didn't circle are they correct? (also the ones that run off the page)
  • The doxygen 1.8.13 version is a bit old (December 29,2016), the current version is 1.9.2

The result with the 1.9.2 version looks like:

image

  • This looks reasonable OK to me except for the self recursive problem. Correct?

Note: you also have twice the submit_json routine, but this is probably due to the fact that you run doxygen over the build and the pdo directory

ok, I've reinstall doxygen with v1.92 by source code, but it doesn't has doxywizard GUI, so can you share your configuration file with me for v1.92 ? Thank you so much~

@albert-github
Copy link
Collaborator

The configuration file is basically the same as I used for the 1.8.13 version (but just updated it to 1.9.2 with doxygen -x):
Doxyfile.tar.gz

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

The configuration file is basically the same as I used for the 1.8.13 version (but just updated it to 1.9.2 with doxygen -x): Doxyfile.tar.gz

ok, I use the v1.8.13 configuration , it breaks at /usr/sbin/dot: not found. My dot path is /usr/bin/dot and it was set corretly.

@albert-github
Copy link
Collaborator

Apparently the dot tool is not there where you think it is:

  • what happens when you just type which dot?
    • when this succeeds just set DOT_PAT= in the Doxyfile

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

Apparently the dot tool is not there where you think it is:

  • what happens when you just type which dot?

    • when this succeeds just set DOT_PAT= in the Doxyfile

ok, it replys where : command not found, Should I install dot first?

@albert-github
Copy link
Collaborator

I think that would be a good idea, Strange that you didn't have the problems when you executed your previous runs.

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

I think that would be a good idea, Strange that you didn't have the problems when you executed your previous runs.

Before I install v1.92, I've remove the older v1.8.13 with command apt-get remove. May it be that reason.

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

I think that would be a good idea, Strange that you didn't have the problems when you executed your previous runs.

I'm found the DOT_PATH is the path of Graphviz. And I got the graph as yours.
And final flaw is the spin arrow that is not appear in the c++ diagram. (I've try EXCLUDE=pdo/build but it does's work)
Thank you for your kindness!

@albert-github
Copy link
Collaborator

albert-github commented Oct 26, 2021

I think you should use EXCLUDE = python/build

@zlonqi
Copy link
Author

zlonqi commented Oct 26, 2021

I think you should use EXCLUDE = python/build

I'm sorry I typed the wrong word. I used EXCLUDE = python/build actually.

albert-github added a commit to albert-github/doxygen that referenced this issue Oct 26, 2021
We saw that in the `pycode.l` the `yyextra->insideBody` wasn't implemented contrary to e.g. `code.l` and `fortrancode.l` Thi omission has been corrected.
@albert-github albert-github removed the needinfo reported bug is incomplete, please add additional info label Oct 26, 2021
@albert-github
Copy link
Collaborator

I've just pushed a proposed patch, pull request #8860

@zlonqi zlonqi closed this as completed Oct 27, 2021
@albert-github
Copy link
Collaborator

Please don't close, the pull request is still a proposed pull request and not in the master version / a release.
The issue will be automatically closed when it is in a release.

@albert-github albert-github reopened this Oct 27, 2021
doxygen added a commit that referenced this issue Oct 27, 2021
issue #8851 Python call graph is not completely correct
@albert-github albert-github added the fixed but not released Bug is fixed in github, but still needs to make its way to an official release label Oct 28, 2021
@albert-github
Copy link
Collaborator

Code has been integrated in master on GitHub (please don't close the issue as this will be done at the moment of an official release).

@zlonqi
Copy link
Author

zlonqi commented Oct 28, 2021

Code has been integrated in master on GitHub (please don't close the issue as this will be done at the moment of an official release).

That's great. I've tried it, it's perfect. Thank you very much~

@doxygen
Copy link
Owner

doxygen commented Dec 31, 2021

This issue was previously marked 'fixed but not released',
which means it should be fixed in doxygen version 1.9.3.
Please verify if this is indeed the case. Reopen the
issue if you think it is not fixed and please include any additional information
that you think can be relevant (preferably in the form of a self-contained example).

@doxygen doxygen removed the fixed but not released Bug is fixed in github, but still needs to make its way to an official release label Dec 31, 2021
@doxygen doxygen closed this as completed Dec 31, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants