From 1812c946fc0babb35af1120c558aec0c0551d4c1 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Fri, 15 Sep 2023 18:04:55 +0200 Subject: [PATCH] Fix nomencl launching The problem here was that we checked depfile changes too late. After all these subsequent LaTeX runs, the files's checksums did not change any longer. --- src/LaTeX.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/src/LaTeX.cpp b/src/LaTeX.cpp index 7d9810aef1..3afe312d30 100644 --- a/src/LaTeX.cpp +++ b/src/LaTeX.cpp @@ -305,6 +305,19 @@ int LaTeX::run(TeXErrors & terr) deplog(head); // reads the latex log head.update(); + // Record here (after the first LaTeX run) whether nomencl aux files exist + // and have changed. + // The programs itself are then launched later after the pagination has settled. + 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. + bool const run_nomencl = head.haschanged(nlofile) || (nlofile.exists() && nlofile.isFileEmpty()); + FileName const glofile(changeExtension(file.absFileName(), ".glo")); + bool const run_nomencl_glo = head.haschanged(glofile); + // 1 // At this point we must run the bibliography processor if needed. // First, check if we're using biber instead of bibtex -- @@ -446,20 +459,13 @@ int LaTeX::run(TeXErrors & terr) iscanres = scanIlgFile(terr); 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())) { + if (run_nomencl) { int const ret = runMakeIndexNomencl(file, ".nlo", ".nls"); if (ret == Systemcall::KILLED || ret == Systemcall::TIMEOUT) return ret; rerun = true; } - FileName const glofile(changeExtension(file.absFileName(), ".glo")); - if (head.haschanged(glofile)) { + if (run_nomencl_glo) { int const ret = runMakeIndexNomencl(file, ".glo", ".gls"); if (ret) return ret; -- 2.39.5