mirror of
https://github.com/Cantera/cantera.git
synced 2026-07-31 08:38:28 -05:00
The javascript for the search box wouldn't work due to an earlier error in the javascript for the version switcher when the switcher JSON file couldn't be loaded.
107 lines
4.6 KiB
Python
107 lines
4.6 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 not env['run_examples']:
|
|
cmd.extend(('-D', 'plot_gallery=0'))
|
|
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")
|
|
copy_contrib = localenv.Command("#build/doc/sphinx/develop/CONTRIBUTING.md",
|
|
"#CONTRIBUTING.md",
|
|
Copy("$TARGET", "$SOURCE"))
|
|
|
|
copy_switcher = localenv.Command("#build/doc/html/dev/_static/doc-versions.json",
|
|
"sphinx/_static/doc-versions.json",
|
|
Copy("$TARGET", "$SOURCE"))
|
|
|
|
sphinxdocs = build(localenv.Command('#build/doc/html/index.html',
|
|
'sphinx/conf.py', build_sphinx))
|
|
env.Alias('sphinx', sphinxdocs)
|
|
env.Depends(sphinxdocs, [copy_sphinx, copy_contrib, copy_switcher])
|
|
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 as 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'])
|