]> git.lyx.org Git - features.git/commitdiff
Fix nomencl launching
authorJuergen Spitzmueller <spitz@lyx.org>
Fri, 15 Sep 2023 16:04:55 +0000 (18:04 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Fri, 15 Sep 2023 16:08:10 +0000 (18:08 +0200)
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

index 7d9810aef1a8b22e147c8d571191ec98145ae693..3afe312d3097e17dc894c472ee7e960ceec6ea86 100644 (file)
@@ -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;