Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
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"