import os, sys, signal, re

env=Environment()

latex = WhereIs('latex')
pdflatex = WhereIs('pdflatex')
makeindex = WhereIs('makeindex')
bibtex = WhereIs('bibtex')
natbib = WhereIs('natbib')
epstopdf = WhereIs('epstopdf') or WhereIs('a2ping')
convert = WhereIs('convert') 

def interrupt(signum,frame):
    global child
    print "%s: aborting..." % sys.argv[0]
    print "Press Enter a few times to empty LaTeX buffer!"
    if child:
        os.kill(child,signal.SIGINT)
    sys.exit(1)

signal.signal(signal.SIGINT,interrupt)

def system(command,arg):
    global child
    child = os.fork()
    if child:        
        child,err = os.waitpid(child,0)
        child = 0
        return err
    else:
        os.execv(command,[command,arg])
        os._exit(1)

def latex2pdf(target=None,source=None,env=None):
    "Convert LaTeX to DVI"
    tex = str(source[0])
    pdf = str(target[0])
    stem = re.sub('\.[^\.]+$','',pdf) 
    # First latex run
    if system(pdflatex,tex):
        return 1
    system(bibtex,stem)
    system(natbib,stem)
    system(pdflatex,tex)
    system(pdflatex,tex)
    return 0

def latex_emitter(target, source, env):
    '''Produces a list of extra outputs from the LaTeX/BibTeX'''
    base = re.sub('\.[^\.]+$','',str(source[0]))
    extra = map (lambda x: base+x,['.pdf','.aux','.log','.bbl','.blg'])
    return (extra,source)

Pdf = Builder(action = Action(latex2pdf),
              emitter=latex_emitter,src_suffix='.ltx',suffix='.pdf')
env.Append(BUILDERS={'Pdf':Pdf})

#======================
#presentations
#env.Pdf('front-page.pdf', ['front-page.tex','migration.bib'])
#seg abstracts=========
env.Pdf('paper.pdf',['paper.tex','allrefs.bib'])
#env.Pdf('paper-final.pdf',['paper-final.tex','paper.tex'])
