# Doxyfile — DigiRadio firmware
# Curated (non-default settings only; Doxygen fills the rest with defaults).
# Verified against Doxygen 1.9.x.

#---------------------------------------------------------------------------
# Project
#---------------------------------------------------------------------------
PROJECT_NAME           = "DigiRadio Firmware"
PROJECT_BRIEF          = "Open-source Hi-Fi DAB+/FM receiver firmware (ESP32-S3)"
OUTPUT_DIRECTORY       = docs/api
CREATE_SUBDIRS         = YES

#---------------------------------------------------------------------------
# Input
#---------------------------------------------------------------------------
INPUT                  = src include
FILE_PATTERNS          = *.hpp *.h *.cpp
RECURSIVE              = YES
# Exclude vendored / generated code from the doc requirement:
EXCLUDE_PATTERNS       = */vendor/* */generated/* */build/*

#---------------------------------------------------------------------------
# Build: enforce documentation (this is what makes the rule real)
#---------------------------------------------------------------------------
# Do NOT auto-document everything: we want undocumented symbols to warn.
EXTRACT_ALL            = NO
EXTRACT_PRIVATE        = NO
EXTRACT_STATIC         = YES
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO

#---------------------------------------------------------------------------
# Warnings: fail the build on any missing or malformed documentation
#---------------------------------------------------------------------------
QUIET                  = YES
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_IF_INCOMPLETE_DOC = YES
WARN_NO_PARAMDOC       = YES
# FAIL_ON_WARNINGS turns any of the above into a non-zero exit -> CI fails.
WARN_AS_ERROR          = FAIL_ON_WARNINGS
WARN_LOGFILE           = docs/api/doxygen-warnings.log

#---------------------------------------------------------------------------
# Custom field aliases — map the DigiRadio doc-block fields to Doxygen
#---------------------------------------------------------------------------
# ^^ is a newline inside an alias. These render as titled sections in the
# generated docs, so "Public state used" becomes a real doc section.
ALIASES += "dname=\par Name:^^"
ALIASES += "pubstate=\par Public state used:^^"

#---------------------------------------------------------------------------
# C++ language handling
#---------------------------------------------------------------------------
OPTIMIZE_OUTPUT_FOR_C  = NO
BUILTIN_STL_SUPPORT    = YES
JAVADOC_AUTOBRIEF      = YES
MARKDOWN_SUPPORT       = YES

#---------------------------------------------------------------------------
# Output formats
#---------------------------------------------------------------------------
GENERATE_HTML          = YES
GENERATE_LATEX         = NO
# XML is handy if you later feed the docs to another tool (e.g. Sphinx):
GENERATE_XML           = NO

#---------------------------------------------------------------------------
# Diagrams (optional, needs Graphviz 'dot'; great for "fits in your head")
#---------------------------------------------------------------------------
HAVE_DOT               = YES
CLASS_GRAPH            = YES
COLLABORATION_GRAPH    = YES
CALL_GRAPH             = NO
CALLER_GRAPH           = NO
DOT_IMAGE_FORMAT       = svg
