1# -*- coding: utf-8; mode: python -*- 2# pylint: disable=R0903, C0330, R0914, R0912, E0401 3 4import os 5import sys 6from sphinx.util.osutil import fs_encoding 7 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 environment 15 ``SPHINX_CONF``. The external configuration file extends (or overwrites) the 16 configuration values from the origin ``conf.py``. With this you are able to 17 maintain *build themes*. """ 18 19 config_file = os.environ.get("SPHINX_CONF", None) 20 if (config_file is not None 21 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_documents 25 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 = True 40 fn = l[0][len(dir) + 1:] 41 new_latex_docs.append((fn, l[1], l[2], l[3], l[4])) 42 break 43 44 namespace['latex_documents'] = new_latex_docs 45 46 # If there is an extra conf.py file, load it 47 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_file 51 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