# 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:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

import pathlib
import shutil
import sys
import re

from rocm_docs import ROCmDocs

# We need to add the location of the rocrand Python module to the PATH
# in order to build the documentation of that module
docs_dir_path = pathlib.Path(__file__).parent
python_dir_path = docs_dir_path.parent / "python" / "rocrand"
sys.path.append(str(python_dir_path))

with open("../CMakeLists.txt", encoding="utf-8") as f:
    match = re.search(r"rocm_setup_version\( VERSION\s+\"?([0-9.]+)[^0-9.]+", f.read())
    if not match:
        raise ValueError("VERSION not found!")
    version_number = match[1]
left_nav_title = f"rocRAND {version_number} Documentation"
shutil.copy2("../library/src/fortran/README.md", "./fortran-api-reference.md")

# for PDF output on Read the Docs
project = "rocRAND Documentation"
author = "Advanced Micro Devices, Inc."
copyright = "Copyright (c) 2025 Advanced Micro Devices, Inc. All rights reserved."
version = version_number
release = version_number

external_toc_path = "./sphinx/_toc.yml"
external_projects_current_project = "rocrand"

docs_core = ROCmDocs(left_nav_title)
docs_core.run_doxygen(doxygen_root="doxygen", doxygen_path="doxygen/xml")
docs_core.enable_api_reference()
docs_core.setup()

external_projects_current_project = "rocrand"

for sphinx_var in ROCmDocs.SPHINX_VARS:
    globals()[sphinx_var] = getattr(docs_core, sphinx_var)

# Suppresses "WARNING: toctree directive not expected with external-toc"
# Ideally suppression wouldn't be needed; see sphinx-external-toc#36
suppress_warnings = ["etoc.toctree"]

cpp_id_attributes = ["__forceinline__", "__device__", "__host__", "ROCRANDAPI"]

extensions = globals().get("extensions", []) + ["sphinxcontrib.datatemplates"]
