18c2ecf20Sopenharmony_ci# -*- coding: utf-8; mode: python -*-
28c2ecf20Sopenharmony_ci# pylint: disable=R0903, C0330, R0914, R0912, E0401
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ciimport os
58c2ecf20Sopenharmony_ciimport sys
68c2ecf20Sopenharmony_cifrom sphinx.util.osutil import fs_encoding
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci# ------------------------------------------------------------------------------
98c2ecf20Sopenharmony_cidef loadConfig(namespace):
108c2ecf20Sopenharmony_ci# ------------------------------------------------------------------------------
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci    u"""Load an additional configuration file into *namespace*.
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci    The name of the configuration file is taken from the environment
158c2ecf20Sopenharmony_ci    ``SPHINX_CONF``. The external configuration file extends (or overwrites) the
168c2ecf20Sopenharmony_ci    configuration values from the origin ``conf.py``.  With this you are able to
178c2ecf20Sopenharmony_ci    maintain *build themes*.  """
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci    config_file = os.environ.get("SPHINX_CONF", None)
208c2ecf20Sopenharmony_ci    if (config_file is not None
218c2ecf20Sopenharmony_ci        and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ):
228c2ecf20Sopenharmony_ci        config_file = os.path.abspath(config_file)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci        # Let's avoid one conf.py file just due to latex_documents
258c2ecf20Sopenharmony_ci        start = config_file.find('Documentation/')
268c2ecf20Sopenharmony_ci        if start >= 0:
278c2ecf20Sopenharmony_ci            start = config_file.find('/', start + 1)
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ci        end = config_file.rfind('/')
308c2ecf20Sopenharmony_ci        if start >= 0 and end > 0:
318c2ecf20Sopenharmony_ci            dir = config_file[start + 1:end]
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci            print("source directory: %s" % dir)
348c2ecf20Sopenharmony_ci            new_latex_docs = []
358c2ecf20Sopenharmony_ci            latex_documents = namespace['latex_documents']
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci            for l in latex_documents:
388c2ecf20Sopenharmony_ci                if l[0].find(dir + '/') == 0:
398c2ecf20Sopenharmony_ci                    has = True
408c2ecf20Sopenharmony_ci                    fn = l[0][len(dir) + 1:]
418c2ecf20Sopenharmony_ci                    new_latex_docs.append((fn, l[1], l[2], l[3], l[4]))
428c2ecf20Sopenharmony_ci                    break
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci            namespace['latex_documents'] = new_latex_docs
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci        # If there is an extra conf.py file, load it
478c2ecf20Sopenharmony_ci        if os.path.isfile(config_file):
488c2ecf20Sopenharmony_ci            sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
498c2ecf20Sopenharmony_ci            config = namespace.copy()
508c2ecf20Sopenharmony_ci            config['__file__'] = config_file
518c2ecf20Sopenharmony_ci            with open(config_file, 'rb') as f:
528c2ecf20Sopenharmony_ci                code = compile(f.read(), fs_encoding, 'exec')
538c2ecf20Sopenharmony_ci                exec(code, config)
548c2ecf20Sopenharmony_ci            del config['__file__']
558c2ecf20Sopenharmony_ci            namespace.update(config)
568c2ecf20Sopenharmony_ci        else:
578c2ecf20Sopenharmony_ci            config = namespace.copy()
588c2ecf20Sopenharmony_ci            config['tags'].add("subproject")
598c2ecf20Sopenharmony_ci            namespace.update(config)
60