Allow makeindex, nomencl, and bibtex runs to be canceled, too.

This commit is contained in:
Richard Heck 2017-12-21 18:46:06 -05:00
parent 12b03b30f4
commit b5e5c2576a
2 changed files with 53 additions and 22 deletions

View File

@ -284,20 +284,34 @@ int LaTeX::run(TeXErrors & terr)
LYXERR(Debug::LATEX, "Running MakeIndex.");
message(_("Running Index Processor."));
// onlyFileName() is needed for cygwin
rerun |= runMakeIndex(onlyFileName(idxfile.absFileName()),
runparams);
int const ret =
runMakeIndex(onlyFileName(idxfile.absFileName()), runparams);
if (ret)
return ret;
rerun = true;
}
FileName const nlofile(changeExtension(file.absFileName(), ".nlo"));
// If all nomencl entries are removed, nomencl writes an empty nlo file.
// DepTable::hasChanged() returns false in this case, since it does not
// distinguish empty files from non-existing files. This is why we need
// the extra checks here (to trigger a rerun). Cf. discussions in #8905.
// FIXME: Sort out the real problem in DepTable.
if (head.haschanged(nlofile) || (nlofile.exists() && nlofile.isFileEmpty()))
rerun |= runMakeIndexNomencl(file, ".nlo", ".nls");
if (head.haschanged(nlofile) || (nlofile.exists() && nlofile.isFileEmpty())) {
int const ret = runMakeIndexNomencl(file, ".nlo", ".nls");
if (ret)
return ret;
rerun = true;
}
FileName const glofile(changeExtension(file.absFileName(), ".glo"));
if (head.haschanged(glofile))
rerun |= runMakeIndexNomencl(file, ".glo", ".gls");
if (head.haschanged(glofile)) {
int const ret = runMakeIndexNomencl(file, ".glo", ".gls");
if (ret)
return ret;
rerun = true;
}
// check if we're using biber instead of bibtex
// biber writes no info to the aux file, so we just check
@ -315,7 +329,10 @@ int LaTeX::run(TeXErrors & terr)
LYXERR(Debug::LATEX, "Running BibTeX.");
message(_("Running BibTeX."));
updateBibtexDependencies(head, bibtex_info);
rerun |= runBibTeX(bibtex_info, runparams);
int exitCode;
rerun |= runBibTeX(bibtex_info, runparams, exitCode);
if (exitCode)
return exitCode;
FileName const blgfile(changeExtension(file.absFileName(), ".blg"));
if (blgfile.exists())
bscanres = scanBlgFile(head, terr);
@ -368,7 +385,10 @@ int LaTeX::run(TeXErrors & terr)
LYXERR(Debug::LATEX, "Running BibTeX.");
message(_("Running BibTeX."));
updateBibtexDependencies(head, bibtex_info);
rerun |= runBibTeX(bibtex_info, runparams);
int exitCode;
rerun |= runBibTeX(bibtex_info, runparams, exitCode);
if (exitCode)
return exitCode;
FileName const blgfile(changeExtension(file.absFileName(), ".blg"));
if (blgfile.exists())
bscanres = scanBlgFile(head, terr);
@ -388,8 +408,11 @@ int LaTeX::run(TeXErrors & terr)
LYXERR(Debug::LATEX, "Running MakeIndex.");
message(_("Running Index Processor."));
// onlyFileName() is needed for cygwin
rerun = runMakeIndex(onlyFileName(changeExtension(
int const ret = runMakeIndex(onlyFileName(changeExtension(
file.absFileName(), ".idx")), runparams);
if (ret)
return ret;
rerun = true;
}
// I am not pretty sure if need this twice.
@ -455,7 +478,7 @@ int LaTeX::startscript()
}
bool LaTeX::runMakeIndex(string const & f, OutputParams const & runparams,
int LaTeX::runMakeIndex(string const & f, OutputParams const & runparams,
string const & params)
{
string tmp = runparams.use_japanese ?
@ -478,12 +501,13 @@ bool LaTeX::runMakeIndex(string const & f, OutputParams const & runparams,
tmp += quoteName(f);
tmp += params;
Systemcall one;
one.startscript(Systemcall::Wait, tmp, path, lpath);
return true;
Systemcall::Starttype const starttype =
allow_cancel ? Systemcall::WaitLoop : Systemcall::Wait;
return one.startscript(starttype, tmp, path, lpath, true);
}
bool LaTeX::runMakeIndexNomencl(FileName const & file,
int LaTeX::runMakeIndexNomencl(FileName const & file,
string const & nlo, string const & nls)
{
LYXERR(Debug::LATEX, "Running MakeIndex for nomencl.");
@ -494,8 +518,9 @@ bool LaTeX::runMakeIndexNomencl(FileName const & file,
tmp += " -o "
+ onlyFileName(changeExtension(file.toFilesystemEncoding(), nls));
Systemcall one;
one.startscript(Systemcall::Wait, tmp, path, lpath);
return true;
Systemcall::Starttype const starttype =
allow_cancel ? Systemcall::WaitLoop : Systemcall::Wait;
return one.startscript(starttype, tmp, path, lpath, true);
}
@ -629,9 +654,10 @@ void LaTeX::updateBibtexDependencies(DepTable & dep,
bool LaTeX::runBibTeX(vector<AuxInfo> const & bibtex_info,
OutputParams const & runparams)
OutputParams const & runparams, int & exit_code)
{
bool result = false;
exit_code = 0;
for (vector<AuxInfo>::const_iterator it = bibtex_info.begin();
it != bibtex_info.end(); ++it) {
if (!biber && it->databases.empty())
@ -644,7 +670,12 @@ bool LaTeX::runBibTeX(vector<AuxInfo> const & bibtex_info,
tmp += quoteName(onlyFileName(removeExtension(
it->aux_file.absFileName())));
Systemcall one;
one.startscript(Systemcall::Wait, tmp, path, lpath);
Systemcall::Starttype const starttype =
allow_cancel ? Systemcall::WaitLoop : Systemcall::Wait;
exit_code = one.startscript(starttype, tmp, path, lpath, true);
if (exit_code) {
return result;
}
}
// Return whether bibtex was run
return result;

View File

@ -188,12 +188,12 @@ private:
///
void deplog(DepTable & head);
///
bool runMakeIndex(std::string const &, OutputParams const &,
/// returns exit code
int runMakeIndex(std::string const &, OutputParams const &,
std::string const & = std::string());
///
bool runMakeIndexNomencl(support::FileName const &,
/// returns exit code
int runMakeIndexNomencl(support::FileName const &,
std::string const &, std::string const &);
///
@ -215,7 +215,7 @@ private:
///
bool runBibTeX(std::vector<AuxInfo> const &,
OutputParams const &);
OutputParams const &, int & exit_code);
///
void removeAuxiliaryFiles() const;