pmem / pmdk

Persistent Memory Development Kit
https://pmem.io
Other
1.34k stars 508 forks source link

No checking of all macros in PMDK #6077

Open osalyk opened 3 months ago

osalyk commented 3 months ago

In the docs_test.py file in the get_macros() function, we only search the libpmemobj path:

def get_macros(pmdk_path):
    """
    Parses all headers from the libpmemobj library, extracts all macros, and
    returns them in a list.
    """
    macros = []
    exceptions = get_exceptions(pmdk_path)
    is_macro_in_next_line = False
    includes_path = path.join(pmdk_path, 'src', 'include', 'libpmemobj')
    # Definition of macro occurs after the phrases: 'static inline' or '#define'
    for header_file in listdir(includes_path):
        with open(path.join(includes_path, header_file), 'r') as f:
            file_lines = f.readlines()
        for line in file_lines:
            if line.startswith('static inline'):
                is_macro_in_next_line = True
            elif is_macro_in_next_line:
                parse_macro_name(exceptions, line,
                                 EXPRESSION_AT_THE_LINE_START, macros)
                is_macro_in_next_line = False
            elif '#define' in line:
                parse_macro_name(exceptions, line,
                                 EXPRESSION_AFTER_DEFINE_PHRASE, macros)
    return macros
janekmi commented 3 months ago

It causes two problems:

  1. The libpmemobj is validated differently compared to the rest of the libraries.
  2. Other libraries cannot introduce manpages for their macro definitions since they will be marked as redundant.

The ideal solution is to: