def doLatex(doc_dir,build_dir,config, master, xmoslatex=False): if hasattr(sys,'_MEIPASS'): os.environ['TEXINPUTS'] = os.path.join(sys._MEIPASS,'infr_docs','base')+listsep + os.path.join(sys._MEIPASS,'texinputs')+listsep else: os.environ['TEXINPUTS'] = os.path.join(config['XDOC_DIR'],'..','infr_docs','base')+listsep + os.path.join(config['XDOC_DIR'],'..','..','infr_docs','base')+listsep os.environ['TEXINPUTS'] += os.path.join(config['XDOC_DIR'],'texinput')+listsep texfile = os.path.join(doc_dir,master+".tex") if not os.path.exists(os.path.join(build_dir,os.path.basename(master)+".tex")): print "Cannot find latex file: %s\n. Something must have gone wrong" % os.path.join(build_dir,os.path.basename(master)+".tex") exit(1) #shutil.copy(os.path.join(build_dir,master+".tex"),texfile) os.environ['TEXINPUTS'] += os.path.abspath(build_dir) + listsep + os.path.abspath(doc_dir) + listsep filt = XSphinxFilter(sys.stdout, sys.stderr, os.path.join(build_dir,'latex.output')) texfile = os.path.basename(master)+'.tex' if xmoslatex: import_xmos(config) from xmossphinx.xmos_latex import make_xmos_latex texfile = make_xmos_latex(build_dir, texfile, config) lines = runlatex(build_dir,['-shell-escape','-interaction=nonstopmode', texfile]) outfile = texfile.replace('.tex','.pdf') if xmoslatex: shutil.copy(os.path.join(build_dir,outfile), os.path.join(build_dir,os.path.basename(master)+'.pdf')) os.remove(os.path.join(build_dir,outfile)) for line in lines: filt.write(line) sys.stdout, sys.stderr = filt.finish()
def build(path, config, target = 'html',subdoc=None): pop_if_exists(os.environ,'XMOSLATEX') if target == 'html': builder = 'html' elif target == 'gh-pages': builder = 'html' elif target == 'pdf': builder = 'xlatex' elif target == 'xmospdf': builder = 'xlatex' os.environ['XMOSLATEX'] = '1' elif target == 'xref': builder = 'xmos_xref' os.environ['XMOSLATEX'] = '1' elif target == 'xmoshtml': builder = 'xdehtml' os.environ['USE_XDEONLY_HTML'] = "0" elif target == 'xdehtml': builder = 'xdehtml' os.environ['USE_XDEONLY_HTML'] = "1" elif target == 'xdetutorial': builder = 'xdehtml' os.environ['USE_XDEONLY_HTML'] = "1" os.environ['XDETUTORIAL_HTML'] = "1" elif target == 'text': builder = 'text' elif target == 'xmostext': builder = 'xmostext' else: sys.stderr.write("xdoc: Unknown target %s\n"%target) exit(1) toc,title = checktoc(config['SPHINX_MASTER_DOC']+".rst", config['OTHER_DOC_DIRS'], path=path) if toc == []: os.environ['XMOSCOMPACTPDF']='1' os.environ['XMOSMANUALPDF']='0' else: os.environ['XMOSCOMPACTPDF']='0' os.environ['XMOSMANUALPDF']='1' os.environ['SPHINX_PROJECT_NAME'] = title config['TOC'] = toc os.environ['COLLECTION'] = ' '.join([x + '__0' for x in toc]) os.environ['CURRENT_BUILDER'] = builder os.environ['OTHER_DOC_DIRS_ABS'] = ' '.join([os.path.abspath(x) for x in config['OTHER_DOC_DIRS']]) if subdoc: os.environ['_SPHINX_MASTER_DOC'] = subdoc os.environ['COLLECTION'] = '' os.environ['XMOSCOMPACTPDF'] = '1' else: os.environ['_SPHINX_MASTER_DOC'] = config['SPHINX_MASTER_DOC'] build_dir = os.path.join(path,"_build",builder) if os.path.exists(build_dir): shutil.rmtree(build_dir) if 'XDEHTML_UNPAGED_OUTPUT' in config: os.environ['XDEHTML_UNPAGED_OUTPUT'] = config['XDEHTML_UNPAGED_OUTPUT'] else: os.environ['XDEHTML_UNPAGED_OUTPUT'] = '0' if 'SOURCE_SUFFIX' in config: os.environ['SOURCE_SUFFIX'] = config['SOURCE_SUFFIX'] else: os.environ['SOURCE_SUFFIX'] = '.rst' os.makedirs(build_dir) if target == 'xref': print "Getting xref info" else: print "Running Sphinx" filt = XSphinxFilter(sys.stdout, sys.stderr, os.path.join(build_dir,'sphinx.output')) sys.stdout = filt sys.stderr = filt sphinx.main(['sphinx-build', '-c',os.path.join(config['XDOC_DIR'],'xsphinx'), '-b',builder, path, os.path.join(path,"_build",builder)]) sys.stdout, sys.stderr = filt.finish() if builder == 'xlatex': doLatex(path, os.path.join(path,"_build",builder), config, config['SPHINX_MASTER_DOC'], xmoslatex = target in xmos_targets) if target in ['xdehtml','xmoshtml','html']: print "Removing excess files" build_path = os.path.join(path,"_build",builder) refs = set() fs = [os.path.join(build_path, f) for f in os.listdir(build_path)] static_path = os.path.join(build_path,"_static") fs += [os.path.join(static_path, f) for f in os.listdir(static_path)] html_files = [f for f in fs if f.endswith("html")] css_files = [f for f in fs if f.endswith("css")] refs = refimage.get_references(html_files, css_files) if refs: refs.add('list.png') image_dir = os.path.join(build_dir,'_static','images') static_dir = os.path.join(build_dir,'_static') fs = [] if os.path.exists(image_dir): fs += [os.path.join(image_dir,f) for f in os.listdir(image_dir)] if os.path.exists(static_dir): fs += [os.path.join(static_dir,f) for f in os.listdir(static_dir)] for f in fs: if os.path.isfile(f) and not os.path.basename(f) in refs: os.remove(f) if target != 'xref': print "Build Complete"