# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# http://www.sphinx-doc.org/en/master/config

# -- Path setup --------------------------------------------------------------

# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import pathlib
import subprocess
import sys
sys.path.insert(0, os.path.abspath('.'))


# -- Project information -----------------------------------------------------

project = 'libfyaml'
copyright = '2019-2026, Pantelis Antoniou'
author = 'Pantelis Antoniou'

ROOT_DIR = pathlib.Path(__file__).resolve().parent.parent


def get_release():
    tarball_version = ROOT_DIR / '.tarball-version'
    if tarball_version.exists():
        version = tarball_version.read_text(encoding='utf-8').strip()
        if version:
            return version

    git_version_gen = ROOT_DIR / 'build-aux' / 'git-version-gen'
    if git_version_gen.exists():
        try:
            version = subprocess.check_output(
                [str(git_version_gen), str(tarball_version)],
                cwd=ROOT_DIR,
                text=True,
            ).strip()
            if version:
                return version
        except (OSError, subprocess.SubprocessError):
            pass

    return os.environ.get('PACKAGE_VERSION', '0.0')


# The short X.Y version and the full release, including alpha/beta/rc tags.
release = get_release()
version = release.split('-', 1)[0]


# -- General configuration ---------------------------------------------------

# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
    'linuxdoc.rstFlatTable'    # Implementation of the 'flat-table' reST-directive.
  , 'linuxdoc.rstKernelDoc'    # Implementation of the 'kernel-doc' reST-directive.
  , 'linuxdoc.kernel_include'  # Implementation of the 'kernel-include' reST-directive.
  , 'linuxdoc.manKernelDoc'    # Implementation of the 'kernel-doc-man' builder
  , 'linuxdoc.cdomain'         # Replacement for the sphinx c-domain.
  , 'linuxdoc.kfigure'         # Sphinx extension which implements scalable image handling.
  , 'sphinx_markdown_builder'  # Sphinx markdown builder
]

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']


# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages.  See the documentation for
# a list of builtin themes.
#
# html_theme = 'alabaster'
html_theme = 'sphinx_rtd_theme'

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ['_static']

master_doc = 'index'

# Tell kernel-doc to strip libfyaml-specific compiler-hint macros from
# function prototypes before passing them to Sphinx C domain.
kernel_doc_known_attrs = "FY_ALWAYS_INLINE"

man_pages = [
    ('man/fy-tool', 'fy-tool', 'fy-tool documentation ', '', 1),
    ('libfyaml', 'libfyaml', 'libfyaml API overview', '', 3),
    ('libfyaml-core', 'libfyaml-core', 'libfyaml core API', '', 3),
    ('libfyaml-misc', 'libfyaml-misc', 'libfyaml miscellaneous API', '', 3),
]
