commit 76dfde36d47189cf863eda7982888f6664630a57
Author: Enrico Forestieri <[email protected]>
Date: Tue Nov 3 23:28:36 2015 +0100
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.
diff --git a/src/support/filetools.cpp b/src/support/filetools.cpp
index 204c842..310e621 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 572273c..3464c04 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 81cbb35..9109fbb 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 0928259..c50fa05 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<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;
}