We are integrating Doxygen into a large existing C++ project. The project make extensive use of macros in certain inheritance hierarchies where consistency of interface and implementation are required. This seems to be causing Doxygen some trouble. The problem I'm having is that no related errors or warnings are emitted. I'm stuck, and not sure how to get some actionable info about what the problem and solution might be.

Here's an example of such a macro

   #define TECA_ALGORITHM_PROPERTY(T, NAME)                 \
   \
   /** Set the value of the NAME algorithm property */      \
   void set_##NAME(const T &v)                              \
   { \
        if (this->NAME != v)                                 \
   {                                                    \
            this->NAME = v;                                  \
   this->set_modified();                            \
   }                                                    \
   } \
   \
   /** Get the value of the NAME algorithm property */      \
   const T &get_##NAME() const                              \
   { \
        return this->NAME;                                   \
   }

For context, a link to its definition in the code base (a number of similar macros are defined there as well)
https://github.com/LBL-EESA/TECA/blob/8d19be022df763e6d2c2fb8e83f56be3ef9ee897/core/teca_algorithm.h#L84

Where this macro is used in a class we want to Doxygen the use, by having a group like this:

        /** @name files_regex
         * Set a regular expression identifying the set of files
   comprising the
         * dataset. This should contain the full path to the files and
   the regular
         * expression.  Only the final component of a path may contain
   a regex.
         * Be aware that regular expression control characters do not
   have the
         * same meaning as shell glob control characters. When used in
   a shell
         * regular expression control characters need to be quoted or
   escaped to
         * prevent the shell from interpreting them.
         */
        ///@{
        TECA_ALGORITHM_PROPERTY(std::string, files_regex)
        ///@}

For context here is the use in class definition:
https://github.com/LBL-EESA/TECA/blob/8d19be022df763e6d2c2fb8e83f56be3ef9ee897/io/teca_cf_reader.h#L99

The resulting Doxygen web pages however do not include any of the class methods, only the brief and detailed class description.
https://teca.readthedocs.io/en/integrating_breathe/doxygen/classteca__cf__reader.html

no warning or error are emitted.

I've tried various Doxyfile settings, here is what I'm using

   ENABLE_PREPROCESSING   = YES
   MACRO_EXPANSION        = YES
   EXPAND_ONLY_PREDEF     = NO
   SKIP_FUNCTION_MACROS = YES

I experimented with

   SKIP_FUNCTION_MACROS   = NO

However, with SKIP_FUNCTION_MACROS   = NO any class that used the macros was dropped from the site entirely. There were many warnings issued on the class constructors about the macro not ending in a semi colon. I don't understand why macros would end in a semi colon as that's not a language requirement and makes no sense for defining functions like the macros in question here do - the appropriate terminating character is } not ;. Not sure how to work around that.

My questions are: Should Doxygen be able to handle this? Does anyone know what the issue might be? If not how could we get some actionable info about the failures?

Thank you!


_______________________________________________
Doxygen-users mailing list
Doxygen-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/doxygen-users

Reply via email to