Files
cantera/doc/SConscript
2024-03-28 09:27:10 -04:00

98 lines
4.0 KiB
Python

from collections import namedtuple
from os.path import join as pjoin
from pathlib import Path
import os
import subprocess
from buildutils import *
from SCons import Errors
Import('env', 'build', 'install')
localenv = env.Clone()
Page = namedtuple('Page', ['name', 'title', 'objects'])
if localenv['doxygen_docs'] or localenv['sphinx_docs']:
docs = build(localenv.Command(
'#build/doc/html/cxx/index.html', 'doxygen/Doxyfile',
[
Delete("build/doc/html/cxx"),
'doxygen $SOURCE',
Copy("build/doc/html/cxx", "build/doc/doxygen/html")
]
))
env.Depends(docs, env.Glob('#doc/doxygen/*') +
multi_glob(env, '#include/cantera', 'h') +
multi_glob(env, '#include/cantera/*', 'h') +
multi_glob(env, '#src/cantera/*', 'h', 'cpp'))
env.Alias('doxygen', docs)
if localenv['sphinx_docs']:
localenv.PrependENVPath('PYTHONPATH', Dir('#build/python').abspath)
def build_sphinx(target, source, env):
cmd = [env['sphinx_cmd']] + env['sphinx_options'].split()
if env['logging'] == 'debug':
cmd.append('-v')
cmd += ('-b', 'html', '-d', 'build/doc/sphinx/doctrees', 'build/doc/sphinx',
'build/doc/html')
code = subprocess.call(cmd, env=env['ENV'])
if code:
raise Errors.BuildError(target, action=env['sphinx_cmd'])
# RecursiveInstall knows to copy modified files, unlike Copy
copy_sphinx = localenv.RecursiveInstall("#build/doc/sphinx", "sphinx")
copy_python_samples = localenv.RecursiveInstall("#build/doc/samples/python",
"#samples/python")
copy_matlab_ex_samples = localenv.RecursiveInstall(
"#build/doc/samples/matlab_experimental", "#samples/matlab_experimental")
sphinxdocs = build(localenv.Command('build/doc/sphinx/html/index.html',
'sphinx/conf.py', build_sphinx))
env.Alias('sphinx', sphinxdocs)
env.Depends(sphinxdocs, copy_sphinx)
env.Depends(sphinxdocs, [copy_python_samples, copy_matlab_ex_samples])
env.Depends(sphinxdocs, env['python_module'])
# Gather all C++ samples into a single directory so they can be presented a single
# sub-gallery by sphinx-gallery
cxxfiles = (Glob("#samples/cxx/*/*.cpp") + Glob("#samples/cxx/*/*.h")
+ Glob("#samples/cxx/*.rst"))
for cxxfile in cxxfiles:
env.Depends(sphinxdocs,
localenv.Command(f"#build/doc/samples/cxx/{cxxfile.name}", cxxfile,
Copy("$TARGET", "$SOURCE")))
# Gather all Fortran (F77 and F90) samples into a single directory
fort_files = (Glob("#samples/f77/*.f") + Glob("#samples/f77/*.cpp")
+ Glob("#samples/f90/*.f90") + Glob("#samples/f90/README.rst"))
for fort_file in fort_files:
env.Depends(sphinxdocs,
localenv.Command(f"#build/doc/samples/fortran/{fort_file.name}",
fort_file, Copy("$TARGET", "$SOURCE")))
# Gather clib sample files
clib_files = Glob("#samples/clib/*.c") + [File("#samples/clib/README.rst")]
for clib_file in clib_files:
env.Depends(sphinxdocs,
localenv.Command(f"#build/doc/samples/clib/{clib_file.name}",
clib_file, Copy("$TARGET", "$SOURCE")))
# Generate documentation for SCons configuration options
def save_config(target, source, env):
Path(str(target[0])).parent.mkdir(parents=True, exist_ok=True)
with open(str(target[0]), "w") as outfile:
outfile.write(env["config"].to_rest())
scons_opts = localenv.Command(
"#build/doc/sphinx/develop/compiling/scons-config-options.rst.inc",
"#SConstruct", save_config)
env.Depends(sphinxdocs, scons_opts)
localenv.AlwaysBuild(sphinxdocs)
if localenv['doxygen_docs']:
localenv.Depends(sphinxdocs, docs)
install(localenv.RecursiveInstall, '$inst_docdir/html',
'#build/doc/html', exclude=['\\.map', '\\.md5'])