xref: /OK3568_Linux_fs/kernel/Documentation/sphinx/load_config.py (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun# -*- coding: utf-8; mode: python -*-
2*4882a593Smuzhiyun# pylint: disable=R0903, C0330, R0914, R0912, E0401
3*4882a593Smuzhiyun
4*4882a593Smuzhiyunimport os
5*4882a593Smuzhiyunimport sys
6*4882a593Smuzhiyunfrom sphinx.util.pycompat import execfile_
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun# ------------------------------------------------------------------------------
9*4882a593Smuzhiyundef loadConfig(namespace):
10*4882a593Smuzhiyun# ------------------------------------------------------------------------------
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun    u"""Load an additional configuration file into *namespace*.
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun    The name of the configuration file is taken from the environment
15*4882a593Smuzhiyun    ``SPHINX_CONF``. The external configuration file extends (or overwrites) the
16*4882a593Smuzhiyun    configuration values from the origin ``conf.py``.  With this you are able to
17*4882a593Smuzhiyun    maintain *build themes*.  """
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun    config_file = os.environ.get("SPHINX_CONF", None)
20*4882a593Smuzhiyun    if (config_file is not None
21*4882a593Smuzhiyun        and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ):
22*4882a593Smuzhiyun        config_file = os.path.abspath(config_file)
23*4882a593Smuzhiyun
24*4882a593Smuzhiyun        # Let's avoid one conf.py file just due to latex_documents
25*4882a593Smuzhiyun        start = config_file.find('Documentation/')
26*4882a593Smuzhiyun        if start >= 0:
27*4882a593Smuzhiyun            start = config_file.find('/', start + 1)
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun        end = config_file.rfind('/')
30*4882a593Smuzhiyun        if start >= 0 and end > 0:
31*4882a593Smuzhiyun            dir = config_file[start + 1:end]
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun            print("source directory: %s" % dir)
34*4882a593Smuzhiyun            new_latex_docs = []
35*4882a593Smuzhiyun            latex_documents = namespace['latex_documents']
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun            for l in latex_documents:
38*4882a593Smuzhiyun                if l[0].find(dir + '/') == 0:
39*4882a593Smuzhiyun                    has = True
40*4882a593Smuzhiyun                    fn = l[0][len(dir) + 1:]
41*4882a593Smuzhiyun                    new_latex_docs.append((fn, l[1], l[2], l[3], l[4]))
42*4882a593Smuzhiyun                    break
43*4882a593Smuzhiyun
44*4882a593Smuzhiyun            namespace['latex_documents'] = new_latex_docs
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun        # If there is an extra conf.py file, load it
47*4882a593Smuzhiyun        if os.path.isfile(config_file):
48*4882a593Smuzhiyun            sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
49*4882a593Smuzhiyun            config = namespace.copy()
50*4882a593Smuzhiyun            config['__file__'] = config_file
51*4882a593Smuzhiyun            execfile_(config_file, config)
52*4882a593Smuzhiyun            del config['__file__']
53*4882a593Smuzhiyun            namespace.update(config)
54*4882a593Smuzhiyun        else:
55*4882a593Smuzhiyun            config = namespace.copy()
56*4882a593Smuzhiyun            config['tags'].add("subproject")
57*4882a593Smuzhiyun            namespace.update(config)
58