162306a36Sopenharmony_ci# -*- coding: utf-8; mode: python -*-
262306a36Sopenharmony_ci# pylint: disable=R0903, C0330, R0914, R0912, E0401
362306a36Sopenharmony_ci
462306a36Sopenharmony_ciimport os
562306a36Sopenharmony_ciimport sys
662306a36Sopenharmony_cifrom sphinx.util.osutil import fs_encoding
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci# ------------------------------------------------------------------------------
962306a36Sopenharmony_cidef loadConfig(namespace):
1062306a36Sopenharmony_ci# ------------------------------------------------------------------------------
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci    u"""Load an additional configuration file into *namespace*.
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci    The name of the configuration file is taken from the environment
1562306a36Sopenharmony_ci    ``SPHINX_CONF``. The external configuration file extends (or overwrites) the
1662306a36Sopenharmony_ci    configuration values from the origin ``conf.py``.  With this you are able to
1762306a36Sopenharmony_ci    maintain *build themes*.  """
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci    config_file = os.environ.get("SPHINX_CONF", None)
2062306a36Sopenharmony_ci    if (config_file is not None
2162306a36Sopenharmony_ci        and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ):
2262306a36Sopenharmony_ci        config_file = os.path.abspath(config_file)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci        # Let's avoid one conf.py file just due to latex_documents
2562306a36Sopenharmony_ci        start = config_file.find('Documentation/')
2662306a36Sopenharmony_ci        if start >= 0:
2762306a36Sopenharmony_ci            start = config_file.find('/', start + 1)
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci        end = config_file.rfind('/')
3062306a36Sopenharmony_ci        if start >= 0 and end > 0:
3162306a36Sopenharmony_ci            dir = config_file[start + 1:end]
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci            print("source directory: %s" % dir)
3462306a36Sopenharmony_ci            new_latex_docs = []
3562306a36Sopenharmony_ci            latex_documents = namespace['latex_documents']
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci            for l in latex_documents:
3862306a36Sopenharmony_ci                if l[0].find(dir + '/') == 0:
3962306a36Sopenharmony_ci                    has = True
4062306a36Sopenharmony_ci                    fn = l[0][len(dir) + 1:]
4162306a36Sopenharmony_ci                    new_latex_docs.append((fn, l[1], l[2], l[3], l[4]))
4262306a36Sopenharmony_ci                    break
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci            namespace['latex_documents'] = new_latex_docs
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci        # If there is an extra conf.py file, load it
4762306a36Sopenharmony_ci        if os.path.isfile(config_file):
4862306a36Sopenharmony_ci            sys.stdout.write("load additional sphinx-config: %s\n" % config_file)
4962306a36Sopenharmony_ci            config = namespace.copy()
5062306a36Sopenharmony_ci            config['__file__'] = config_file
5162306a36Sopenharmony_ci            with open(config_file, 'rb') as f:
5262306a36Sopenharmony_ci                code = compile(f.read(), fs_encoding, 'exec')
5362306a36Sopenharmony_ci                exec(code, config)
5462306a36Sopenharmony_ci            del config['__file__']
5562306a36Sopenharmony_ci            namespace.update(config)
5662306a36Sopenharmony_ci        else:
5762306a36Sopenharmony_ci            config = namespace.copy()
5862306a36Sopenharmony_ci            config['tags'].add("subproject")
5962306a36Sopenharmony_ci            namespace.update(config)
60