Menu

Processing variables present in an included header file (FORTRAN)

2020-06-26
2021-10-25
  • Robert Gregg

    Robert Gregg - 2020-06-26

    Hi all,

    I have a mature FORTRAN code which I would like to modernise and as part of this process incorporate DOXYGEN comments throughout. The code contains header files which contain lists of variables (and previously common blocks) that could then be included in subroutines where access to these variables are required. Regardless of what I do, I can not get DOXYGEN (1.8.13) to process these files. I have written a simpler example involving three files below to show what I mean:

    MODULE.f

    !> @brief An example of a module with global variables defined
    !> @details The purpose is to explain why the global variables in group VARGROUP2 in the included file do not appear in the DOXYGEN ouptut.
    !> @details Why? Please help! I can not see where I have made a mistake
          MODULE EXAMPLE
          INTEGER N
          PARAMETRER(N=10)
    
    !> @name VARGROUP1
    !! Parameters in group 1
    !> @{ 
          DOUBLE PRECISION GR1_GLOBAL1                 !< Example of a global variable
          DOUBLE PRECISION GR1_GLOBAL2                 !< Another example of a global variable
          DOUBLE PRECISION GR1_VECTOR(N)               !< An example of a global vector variable
    !> @}
    #include "VARIABLES.h"
    !> @name VARGROUP3
    !! Parameters in group 3
    !> @{ 
          DOUBLE PRECISION GR3_GLOBAL1                 !< Example of a global variable
          DOUBLE PRECISION GR3_GLOBAL2                 !< Another example of a global variable
    !> @}
    
          CONTAINS
    !> @brief An example of a subroutine within a module
    !> @details A simple Hello World Program
          SUBROUTINE EXSUB
          INTEGER I                                    !< Example of a local variable
          I = 0
          GR1_GLOBAL1 = 0
          GR2_GLOBAL1 = 0
          WRITE(*,*) 'HELLO WORLD'
          WRITE(*,*) I,GR1_GLOBAL1,GR2_GLOBAL1
          END SUBROUTINE EXSUB
          END MODULE EXAMPLE
    

    The included header file (VARIABLES.h):

    !> @name VARGROUP2
    !! Parameters in group 2
    !> @{ 
          DOUBLE PRECISION GR2_GLOBAL1                 !< Example of a global variable
          DOUBLE PRECISION GR2_GLOBAL2                 !< Another example of a global variable
    !> @}
    

    And for completeness, the FORTRAN program which makes use of this module (PROG.f):

          PROGRAM PROG
          USE EXAMPLE
          CALL EXSUB
          END
    

    When I try to doxygen this, the HTML output successfully shows VARGROUP1 and VARGROUP3. However, VARGROUP2 (as defined in the VARIABLES.h file) are not present. I have tried many options in DOXYGEN such as 'FORCE_LOCAL_INCLUDES', 'ENABLE_PREPROESSING', 'MACRO_EXPANSION' and 'SEARCH_INCLUDES'.

    Any help you can offer would be much appreciated.

     
  • Robert Gregg

    Robert Gregg - 2020-06-26

    UPDATE: after posting, I noticed there was a more recent (bleeding edge) version of DOXYGEN available (1.8.19). Unfortunately, none of my variable groups appear in the DOXYGEN HTML output !!!!!! ARGHHHH

     
  • Paul A Bristow

    Paul A Bristow - 2020-06-26

    I suspect that you need to show the details of your doxyfile?

    Are you sure that you have asked to process the .h file?

     
  • Robert Gregg

    Robert Gregg - 2020-06-26

    Good suggestion Paul. I think I am requesting doxygen to process the .h files (see extension mapping and/or list of file types in 'FILE_PATTERNS' below.

    For completeness, this is the configuration generated by doxywizrd:

    # Doxyfile 1.8.13
    
    #---------------------------------------------------------------------------
    # Project related configuration options
    #---------------------------------------------------------------------------
    DOXYFILE_ENCODING      = UTF-8
    PROJECT_NAME           = "Example which does not work"
    PROJECT_NUMBER         = 
    PROJECT_BRIEF          = 
    PROJECT_LOGO           = 
    OUTPUT_DIRECTORY       = /home/USER/SCRATCH/OFFICIAL_CHANGE/TEST/doxytest/OUTPUT
    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   = YES
    OPTIMIZE_OUTPUT_VHDL   = NO
    EXTENSION_MAPPING      = "EXTENSION_MAPPING= .h=fortran"
    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   = YES
    HIDE_UNDOC_MEMBERS     = NO
    HIDE_UNDOC_CLASSES     = NO
    HIDE_FRIEND_COMPOUNDS  = NO
    HIDE_IN_BODY_DOCS      = NO
    INTERNAL_DOCS          = YES
    CASE_SENSE_NAMES       = YES
    HIDE_SCOPE_NAMES       = NO
    HIDE_COMPOUND_REFERENCE= NO
    SHOW_INCLUDE_FILES     = YES
    SHOW_GROUPED_MEMB_INC  = YES
    FORCE_LOCAL_INCLUDES   = YES
    INLINE_INFO            = YES
    SORT_MEMBER_DOCS       = YES
    SORT_BRIEF_DOCS        = YES
    SORT_MEMBERS_CTORS_1ST = YES
    SORT_GROUP_NAMES       = YES
    SORT_BY_SCOPE_NAME     = YES
    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                  = /home/USER/SCRATCH/OFFICIAL_CHANGE/TEST/doxytest
    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         = YES
    STRIP_CODE_COMMENTS    = YES
    REFERENCED_BY_RELATION = YES
    REFERENCES_RELATION    = YES
    REFERENCES_LINK_SOURCE = YES
    SOURCE_TOOLTIPS        = YES
    USE_HTAGS              = YES
    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      = NO
    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        = YES
    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         = NO
    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               = NO
    UML_LIMIT_NUM_FIELDS   = 10
    TEMPLATE_RELATIONS     = NO
    INCLUDE_GRAPH          = YES
    INCLUDED_BY_GRAPH      = YES
    CALL_GRAPH             = NO
    CALLER_GRAPH           = NO
    GRAPHICAL_HIERARCHY    = YES
    DIRECTORY_GRAPH        = YES
    DOT_IMAGE_FORMAT       = png
    INTERACTIVE_SVG        = NO
    DOT_PATH               = 
    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
    
     

    Last edit: Robert Gregg 2020-06-26
  • Paul A Bristow

    Paul A Bristow - 2020-06-26

    Are you quite sure that

    INPUT = /home/USER/SCRATCH/OFFICIAL_CHANGE/TEST/doxytest

    directory contains your .h file?

    Try changing it to .for ? to check if your alias is working as expected?

     
  • Robert Gregg

    Robert Gregg - 2020-06-26

    hi Paul,
    thanks for the input. I asked the same question on stack overflow at the same time and sorted it out:

    https://stackoverflow.com/questions/62592165/doxygen-fails-to-process-header-files-in-fortran-code

    The problem stems from the fact that Doygen expects all files (including the header files) to resemble fully formed FORTRAN files (i.e. they must comprise a module, subroutine or function. Given my header file merely had a snippet of code, Doxygen was having trouble processing the file.

    If possible, I will delete the post here in preference to the stackoverflow thread to avoid duplication.

     
  • gas ase

    gas ase - 2021-10-25

    That sounds quite definitive. Is it a hard feature to add? Could I upload it myself? I even have respectable expertise link C and programming on POSIX systems. My enjoy in windows is confined.

     

Log in to post a comment.