From 76dfde36d47189cf863eda7982888f6664630a57 Mon Sep 17 00:00:00 2001 From: Enrico Forestieri Date: Tue, 3 Nov 2015 23:28:36 +0100 Subject: [PATCH] Fix bugs #2645 (export BIBINPUTS) and #6634 (Better support for external files in ERT) 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 | 27 +++++++++++++++++++++++---- src/support/os_cygwin.cpp | 21 +++++++++++++++++---- src/support/os_unix.cpp | 27 +++++++++++++++++++++------ src/support/os_win32.cpp | 27 +++++++++++++++++++++------ 4 files changed, 82 insertions(+), 20 deletions(-) diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp index 204c842652..310e621e17 100644 --- a/src/support/filetools.cpp +++ b/src/support/filetools.cpp @@ -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 + "\" & "; } diff --git a/src/support/os_cygwin.cpp b/src/support/os_cygwin.cpp index 572273ce2c..3464c04d78 100644 --- a/src/support/os_cygwin.cpp +++ b/src/support/os_cygwin.cpp @@ -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; diff --git a/src/support/os_unix.cpp b/src/support/os_unix.cpp index 81cbb354fe..9109fbb586 100644 --- a/src/support/os_unix.cpp +++ b/src/support/os_unix.cpp @@ -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 diff --git a/src/support/os_win32.cpp b/src/support/os_win32.cpp index 0928259b72..c50fa05b1a 100644 --- a/src/support/os_win32.cpp +++ b/src/support/os_win32.cpp @@ -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(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; }