compilation séquentielle par défaut

Cette révision appartient à :
Yann Salmon
2020-03-02 19:50:50 +01:00
Parent 8e025953fe
révision 86a4479f3e

Voir le fichier

@@ -4,26 +4,31 @@ import subprocess
import sys import sys
import os import os
def compiler(nf, lsuff) : def compiler(nf, lsuff, parallel = False) :
basedir = os.path.dirname(nf) basedir = os.path.dirname(nf)
builddir = os.path.join(basedir, "_build") builddir = os.path.join(basedir, "_build")
basejobname = os.path.splitext(os.path.basename(nf))[0] basejobname = os.path.splitext(os.path.basename(nf))[0]
if parallel :
call = subprocess.Popen
else :
call = subprocess.call
# https://stackoverflow.com/a/9745864 # https://stackoverflow.com/a/9745864
processes = [] processes = []
for suff in lsuff : for suff in lsuff :
options = suff[1] options = suff[1]
processes.append(subprocess.Popen('''latexmk -pdflua -shell-escape -bibtex-cond -cd -interaction=batchmode -dvi- -jobname=''' +basejobname+suff[0] +''' -outdir=''' + builddir + ''' -latexoption="--output-directory='''+builddir+''' --synctex=0 ''' + options + '''" ''' + nf, shell=True, stdout=subprocess.PIPE, processes.append(call('''latexmk -pdflua -shell-escape -bibtex-cond -cd -interaction=batchmode -dvi- -jobname=''' +basejobname+suff[0] +''' -outdir=''' + builddir + ''' -latexoption="--output-directory='''+builddir+''' --synctex=0 ''' + options + '''" ''' + nf, shell=True, stdout=subprocess.PIPE,
bufsize=1, close_fds=True, bufsize=1, close_fds=True,
universal_newlines=True)) universal_newlines=True))
while len(processes) > 0 : if parallel :
for p in processes: while len(processes) > 0 :
if p.poll() is not None: # process ended for p in processes:
p.stdout.close() if p.poll() is not None: # process ended
processes.remove(p) p.stdout.close()
processes.remove(p)
for suff in lsuff : for suff in lsuff :
os.rename(os.path.join(builddir, basejobname+suff[0]+".pdf"), os.path.join(basedir, basejobname+suff[0]+".pdf")) os.rename(os.path.join(builddir, basejobname+suff[0]+".pdf"), os.path.join(basedir, basejobname+suff[0]+".pdf"))
def clean(nf, suff) : def clean(nf, suff) :
subprocess.call(["latexmk", "-cd", "-c", "-jobname="+os.path.splitext(os.path.basename(nf))[0]+suff, nf]) subprocess.call(["latexmk", "-cd", "-c", "-jobname="+os.path.splitext(os.path.basename(nf))[0]+suff, nf])
@@ -33,7 +38,6 @@ if sys.argv[1].endswith(".tex") :
else : else :
nf = sys.argv[1]+".tex" nf = sys.argv[1]+".tex"
with open(nf) as f : with open(nf) as f :
for l in f.readlines() : for l in f.readlines() :
if l.strip() == "" or l.strip().startswith("%") : if l.strip() == "" or l.strip().startswith("%") :
@@ -47,5 +51,5 @@ with open(nf) as f :
break break
compiler(nf, modes) compiler(nf, modes, len(sys.argv)>2 and sys.argv[2]=="--parallel")