]> git.lyx.org Git - features.git/commitdiff
Fix bugs #2645 (export BIBINPUTS) and #6634 (Better support for external files in...
authorEnrico Forestieri <forenr@lyx.org>
Tue, 3 Nov 2015 22:28:36 +0000 (23:28 +0100)
committerEnrico Forestieri <forenr@lyx.org>
Tue, 3 Nov 2015 22:28:36 +0000 (23:28 +0100)
Other than BIBINPUTS, also BSTINPUTS and TEXFONTS are exported.
They do not replicate the setting for TEXINPUTS but are set such
that the current dir (i.e., the temp dir) and the document dir
are also searched for bibtex and fonts related files.

src/support/filetools.cpp
src/support/os_cygwin.cpp
src/support/os_unix.cpp
src/support/os_win32.cpp

index 204c842652586988bd09a7a94196692599587c8f..310e621e17a406d94e5b0606767ce4b5364e1ba7 100644 (file)
@@ -710,8 +710,12 @@ string latexEnvCmdPrefix(string const & path, string const & lpath)
        string texinputs_prefix = lyxrc.texinputs_prefix.empty() ? string()
                : os::latex_path_list(
                        replaceCurdirPath(path, lyxrc.texinputs_prefix));
+       string const allother_prefix = os::latex_path_list(path);
        string const sep = string(1, os::path_separator(os::TEXENGINE));
        string const texinputs = getEnv("TEXINPUTS");
+       string const bibinputs = getEnv("BIBINPUTS");
+       string const bstinputs = getEnv("BSTINPUTS");
+       string const texfonts = getEnv("TEXFONTS");
 
        if (use_lpath) {
                string const abslpath = FileName::isAbsolute(lpath)
@@ -727,13 +731,28 @@ string latexEnvCmdPrefix(string const & path, string const & lpath)
 
        if (os::shell() == os::UNIX)
                return "env TEXINPUTS=\"." + sep + texinputs_prefix
-                                         + sep + texinputs + "\" ";
+                                          + sep + texinputs + "\" "
+                        + "BIBINPUTS=\"." + sep + allother_prefix
+                                          + sep + bibinputs + "\" "
+                        + "BSTINPUTS=\"." + sep + allother_prefix
+                                          + sep + bstinputs + "\" "
+                        + "TEXFONTS=\"."  + sep + allother_prefix
+                                          + sep + texfonts + "\" ";
        else
-               // NOTE: the dummy blank dir is necessary to force the
+               // NOTE: the dummy blank dirs are necessary to force the
                //       QProcess parser to quote the argument (see bug 9453)
                return "cmd /d /c set \"TEXINPUTS=." + sep + " "
-                                               + sep + texinputs_prefix
-                                               + sep + texinputs + "\" & ";
+                                               + sep + texinputs_prefix
+                                               + sep + texinputs + "\" & "
+                              + "set \"BIBINPUTS=." + sep + " "
+                                               + sep + allother_prefix
+                                               + sep + bibinputs + "\" & "
+                              + "set \"BSTINPUTS=." + sep + " "
+                                               + sep + allother_prefix
+                                               + sep + bstinputs + "\" & "
+                              + "set \"TEXFONTS=."  + sep + " "
+                                               + sep + allother_prefix
+                                               + sep + texfonts + "\" & ";
 }
 
 
index 572273ce2c9c670dc0f5ae7e1ed8965254ccd9e2..3464c04d785142fd4a4db3e10f686747addceef8 100644 (file)
@@ -438,11 +438,21 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
 {
        string const texinputs = os::latex_path_list(
                        replaceCurdirPath(path, lyxrc.texinputs_prefix));
+       string const otherinputs = os::latex_path_list(path);
        string const sep = windows_style_tex_paths_ ? ";" : ":";
-       string const oldval = getEnv("TEXINPUTS");
-       string const newval = "." + sep + texinputs + sep + oldval;
+       string const oldtexinputs = getEnv("TEXINPUTS");
+       string const newtexinputs = "." + sep + texinputs + sep + oldtexinputs;
+       string const oldbibinputs = getEnv("BIBINPUTS");
+       string const newbibinputs = "." + sep + otherinputs + sep + oldbibinputs;
+       string const oldbstinputs = getEnv("BSTINPUTS");
+       string const newbstinputs = "." + sep + otherinputs + sep + oldbstinputs;
+       string const oldtexfonts = getEnv("TEXFONTS");
+       string const newtexfonts = "." + sep + otherinputs + sep + oldtexfonts;
        if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
-               setEnv("TEXINPUTS", newval);
+               setEnv("TEXINPUTS", newtexinputs);
+               setEnv("BIBINPUTS", newbibinputs);
+               setEnv("BSTINPUTS", newbstinputs);
+               setEnv("TEXFONTS", newtexfonts);
                cygwin_internal(CW_SYNC_WINENV);
        }
 
@@ -453,7 +463,10 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
                                        win_path.c_str(), NULL, NULL, 1)) > 32;
 
        if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
-               setEnv("TEXINPUTS", oldval);
+               setEnv("TEXINPUTS", oldtexinputs);
+               setEnv("BIBINPUTS", oldbibinputs);
+               setEnv("BSTINPUTS", oldbstinputs);
+               setEnv("TEXFONTS", oldtexfonts);
                cygwin_internal(CW_SYNC_WINENV);
        }
        return success;
index 81cbb354fe081f23b7dffa01513de5b1602c99e6..9109fbb58648c0d9cb3e945446718070be939b81 100644 (file)
@@ -298,14 +298,29 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
 
        string const texinputs = os::latex_path_list(
                replaceCurdirPath(path, lyxrc.texinputs_prefix));
-       string const oldval = getEnv("TEXINPUTS");
-       string const newval = ".:" + texinputs + ":" + oldval;
-       if (!path.empty() && !lyxrc.texinputs_prefix.empty())
-               setEnv("TEXINPUTS", newval);
+       string const otherinputs = os::latex_path_list(path);
+       string const oldtexinputs = getEnv("TEXINPUTS");
+       string const newtexinputs = ".:" + texinputs + ":" + oldtexinputs;
+       string const oldbibinputs = getEnv("BIBINPUTS");
+       string const newbibinputs = ".:" + otherinputs + ":" + oldbibinputs;
+       string const oldbstinputs = getEnv("BSTINPUTS");
+       string const newbstinputs = ".:" + otherinputs + ":" + oldbstinputs;
+       string const oldtexfonts = getEnv("TEXFONTS");
+       string const newtexfonts = ".:" + otherinputs + ":" + oldtexfonts;
+       if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
+               setEnv("TEXINPUTS", newtexinputs);
+               setEnv("BIBINPUTS", newbibinputs);
+               setEnv("BSTINPUTS", newbstinputs);
+               setEnv("TEXFONTS", newtexfonts);
+       }
        status = LSOpenFromURLSpec (&launchUrlSpec, NULL);
        CFRelease(launchItems);
-       if (!path.empty() && !lyxrc.texinputs_prefix.empty())
-               setEnv("TEXINPUTS", oldval);
+       if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
+               setEnv("TEXINPUTS", oldtexinputs);
+               setEnv("BIBINPUTS", oldbibinputs);
+               setEnv("BSTINPUTS", oldbstinputs);
+               setEnv("TEXFONTS", oldtexfonts);
+       }
        return status == 0;
 #else
        // silence compiler warnings
index 0928259b72dd47fa9de466d4ca2ccec86450bc0d..c50fa05b1a8370983d6f6c58fd5737f1d109e44c 100644 (file)
@@ -544,19 +544,34 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode,
 {
        string const texinputs = os::latex_path_list(
                        replaceCurdirPath(path, lyxrc.texinputs_prefix));
+       string const otherinputs = os::latex_path_list(path);
        string const sep = windows_style_tex_paths_ ? ";" : ":";
-       string const oldval = getEnv("TEXINPUTS");
-       string const newval = "." + sep + texinputs + sep + oldval;
-       if (!path.empty() && !lyxrc.texinputs_prefix.empty())
-               setEnv("TEXINPUTS", newval);
+       string const oldtexinputs = getEnv("TEXINPUTS");
+       string const newtexinputs = "." + sep + texinputs + sep + oldtexinputs;
+       string const oldbibinputs = getEnv("BIBINPUTS");
+       string const newbibinputs = "." + sep + otherinputs + sep + oldbibinputs;
+       string const oldbstinputs = getEnv("BSTINPUTS");
+       string const newbstinputs = "." + sep + otherinputs + sep + oldbstinputs;
+       string const oldtexfonts = getEnv("TEXFONTS");
+       string const newtexfonts = "." + sep + otherinputs + sep + oldtexfonts;
+       if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
+               setEnv("TEXINPUTS", newtexinputs);
+               setEnv("BIBINPUTS", newbibinputs);
+               setEnv("BSTINPUTS", newbstinputs);
+               setEnv("TEXFONTS", newtexfonts);
+       }
 
        // reference: http://msdn.microsoft.com/en-us/library/bb762153.aspx
        char const * action = (mode == VIEW) ? "open" : "edit";
        bool success = reinterpret_cast<int>(ShellExecute(NULL, action,
                to_local8bit(from_utf8(filename)).c_str(), NULL, NULL, 1)) > 32;
 
-       if (!path.empty() && !lyxrc.texinputs_prefix.empty())
-               setEnv("TEXINPUTS", oldval);
+       if (!path.empty() && !lyxrc.texinputs_prefix.empty()) {
+               setEnv("TEXINPUTS", oldtexinputs);
+               setEnv("BIBINPUTS", oldbibinputs);
+               setEnv("BSTINPUTS", oldbstinputs);
+               setEnv("TEXFONTS", oldtexfonts);
+       }
        return success;
 }