60 lines · python
1# -*- coding: utf-8; mode: python -*-2# pylint: disable=R0903, C0330, R0914, R0912, E04013 4import os5import sys6from sphinx.util.osutil import fs_encoding7 8# ------------------------------------------------------------------------------9def loadConfig(namespace):10# ------------------------------------------------------------------------------11 12 u"""Load an additional configuration file into *namespace*.13 14 The name of the configuration file is taken from the environment15 ``SPHINX_CONF``. The external configuration file extends (or overwrites) the16 configuration values from the origin ``conf.py``. With this you are able to17 maintain *build themes*. """18 19 config_file = os.environ.get("SPHINX_CONF", None)20 if (config_file is not None21 and os.path.normpath(namespace["__file__"]) != os.path.normpath(config_file) ):22 config_file = os.path.abspath(config_file)23 24 # Let's avoid one conf.py file just due to latex_documents25 start = config_file.find('Documentation/')26 if start >= 0:27 start = config_file.find('/', start + 1)28 29 end = config_file.rfind('/')30 if start >= 0 and end > 0:31 dir = config_file[start + 1:end]32 33 print("source directory: %s" % dir)34 new_latex_docs = []35 latex_documents = namespace['latex_documents']36 37 for l in latex_documents:38 if l[0].find(dir + '/') == 0:39 has = True40 fn = l[0][len(dir) + 1:]41 new_latex_docs.append((fn, l[1], l[2], l[3], l[4]))42 break43 44 namespace['latex_documents'] = new_latex_docs45 46 # If there is an extra conf.py file, load it47 if os.path.isfile(config_file):48 sys.stdout.write("load additional sphinx-config: %s\n" % config_file)49 config = namespace.copy()50 config['__file__'] = config_file51 with open(config_file, 'rb') as f:52 code = compile(f.read(), fs_encoding, 'exec')53 exec(code, config)54 del config['__file__']55 namespace.update(config)56 else:57 config = namespace.copy()58 config['tags'].add("subproject")59 namespace.update(config)60