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