mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-08 18:19:42 +00:00
Use FileName instead of strings in support::Package.
This fixes some encoding problems, and hopefully also bug 3410. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17746 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
675b84c1b0
commit
d4e8fdd703
@ -1555,7 +1555,7 @@ void BufferView::menuInsertLyXFile(string const & filenm)
|
||||
FileDialog fileDlg(_("Select LyX document to insert"),
|
||||
LFUN_FILE_INSERT,
|
||||
make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
|
||||
make_pair(_("Examples|#E#e"), from_utf8(addPath(package().system_support(), "examples"))));
|
||||
make_pair(_("Examples|#E#e"), from_utf8(addPath(package().system_support().absFilename(), "examples"))));
|
||||
|
||||
FileDialog::Result result =
|
||||
fileDlg.open(from_utf8(initpath),
|
||||
|
@ -189,7 +189,7 @@ void ConverterCache::init()
|
||||
return;
|
||||
// We do this here and not in the constructor because package() gets
|
||||
// initialized after all static variables.
|
||||
cache_dir = FileName(addName(support::package().user_support(), "cache"));
|
||||
cache_dir = FileName(addName(support::package().user_support().absFilename(), "cache"));
|
||||
if (!fs::exists(cache_dir.toFilesystemEncoding()))
|
||||
if (support::mkdir(cache_dir, 0700) != 0) {
|
||||
lyxerr << "Could not create cache directory `"
|
||||
|
@ -1142,7 +1142,7 @@ int Buffer::runChktex()
|
||||
string const name = addName(path, getLatexName());
|
||||
string const org_path = filePath();
|
||||
|
||||
support::Path p(path); // path to LaTeX file
|
||||
support::Path p(FileName(path)); // path to LaTeX file
|
||||
message(_("Running chktex..."));
|
||||
|
||||
// Generate the LaTeX file if neccessary
|
||||
|
@ -364,7 +364,7 @@ void BufferList::emergencyWrite(Buffer * buf)
|
||||
}
|
||||
|
||||
// 2) In HOME directory.
|
||||
string s = addName(package().home_dir(), buf->fileName());
|
||||
string s = addName(package().home_dir().absFilename(), buf->fileName());
|
||||
s += ".emergency";
|
||||
lyxerr << ' ' << s << endl;
|
||||
if (buf->writeFile(FileName(s))) {
|
||||
@ -378,7 +378,7 @@ void BufferList::emergencyWrite(Buffer * buf)
|
||||
// 3) In "/tmp" directory.
|
||||
// MakeAbsPath to prepend the current
|
||||
// drive letter on OS/2
|
||||
s = addName(package().temp_dir(), buf->fileName());
|
||||
s = addName(package().temp_dir().absFilename(), buf->fileName());
|
||||
s += ".emergency";
|
||||
lyxerr << ' ' << s << endl;
|
||||
if (buf->writeFile(FileName(s))) {
|
||||
|
@ -48,8 +48,8 @@ public:
|
||||
//lyxerr << "Messages: language(" << l
|
||||
// << ") in dir(" << dir << ")" << std::endl;
|
||||
|
||||
cat_gl = mssg_gl.open(PACKAGE, loc_gl,
|
||||
package().locale_dir().c_str());
|
||||
string const locale_dir = package().locale_dir().toFilesystemEncoding();
|
||||
cat_gl = mssg_gl.open(PACKAGE, loc_gl, locale_dir.c_str());
|
||||
|
||||
}
|
||||
|
||||
@ -112,14 +112,15 @@ public:
|
||||
// return what we got in.
|
||||
return from_ascii(m);
|
||||
errno = 0;
|
||||
char const * c = bindtextdomain(PACKAGE, package().locale_dir().c_str());
|
||||
string const locale_dir = package().locale_dir().toFilesystemEncoding();
|
||||
char const * c = bindtextdomain(PACKAGE, locale_dir.c_str());
|
||||
int e = errno;
|
||||
if (e) {
|
||||
LYXERR(Debug::DEBUG)
|
||||
<< BOOST_CURRENT_FUNCTION << '\n'
|
||||
<< "Error code: " << errno << '\n'
|
||||
<< "Lang, mess: " << lang_ << " " << m << '\n'
|
||||
<< "Directory : " << package().locale_dir() << '\n'
|
||||
<< "Directory : " << package().locale_dir().absFilename() << '\n'
|
||||
<< "Rtn value : " << c << endl;
|
||||
}
|
||||
|
||||
|
@ -349,7 +349,7 @@ bool Converters::convert(Buffer const * buffer,
|
||||
// generated by the converter are deleted when LyX closes and do not
|
||||
// clutter the real working directory.
|
||||
string path = onlyPath(from_file.absFilename());
|
||||
Path p(path);
|
||||
Path p(FileName(path));
|
||||
|
||||
// empty the error list before any new conversion takes place.
|
||||
errorList.clear();
|
||||
@ -431,7 +431,7 @@ bool Converters::convert(Buffer const * buffer,
|
||||
Systemcall one;
|
||||
int res;
|
||||
if (conv.original_dir) {
|
||||
Path p(buffer->filePath());
|
||||
Path p(FileName(buffer->filePath()));
|
||||
res = one.startscript(type,
|
||||
to_filesystem8bit(from_utf8(command)));
|
||||
} else
|
||||
|
@ -116,7 +116,7 @@ CopyStatus copyFile(string const & format,
|
||||
// overwrite themselves. This check could be changed to
|
||||
// boost::filesystem::equivalent(sourceFile, destFile) if export to
|
||||
// other directories than the document directory is desired.
|
||||
if (!prefixIs(onlyPath(sourceFile.absFilename()), package().temp_dir()))
|
||||
if (!prefixIs(onlyPath(sourceFile.absFilename()), package().temp_dir().absFilename()))
|
||||
return ret;
|
||||
|
||||
if (!force) {
|
||||
|
@ -43,7 +43,7 @@ ControlAboutlyx::ControlAboutlyx(Dialog & parent)
|
||||
|
||||
void ControlAboutlyx::getCredits(ostream & ss) const
|
||||
{
|
||||
FileName const name = fileSearch(package().system_support(), "CREDITS");
|
||||
FileName const name = fileSearch(package().system_support().absFilename(), "CREDITS");
|
||||
|
||||
bool found(!name.empty());
|
||||
|
||||
@ -90,10 +90,10 @@ string const ControlAboutlyx::getVersion() const
|
||||
<< lyx_release_date
|
||||
<< ")\n"
|
||||
<< to_utf8(_("Library directory: "))
|
||||
<< to_utf8(makeDisplayPath(package().system_support()))
|
||||
<< to_utf8(makeDisplayPath(package().system_support().absFilename()))
|
||||
<< "\n"
|
||||
<< to_utf8(_("User directory: "))
|
||||
<< to_utf8(makeDisplayPath(package().user_support()));
|
||||
<< to_utf8(makeDisplayPath(package().user_support().absFilename()));
|
||||
|
||||
return ss.str();
|
||||
}
|
||||
|
@ -87,11 +87,11 @@ docstring const ControlGraphics::browse(docstring const & in_name) const
|
||||
docstring const title = _("Select graphics file");
|
||||
|
||||
// Does user clipart directory exist?
|
||||
string clipdir = addName(package().user_support(), "clipart");
|
||||
string clipdir = addName(package().user_support().absFilename(), "clipart");
|
||||
string const encoded_clipdir = FileName(clipdir).toFilesystemEncoding();
|
||||
if (!(fs::exists(encoded_clipdir) && fs::is_directory(encoded_clipdir)))
|
||||
// No - bail out to system clipart directory
|
||||
clipdir = addName(package().system_support(), "clipart");
|
||||
clipdir = addName(package().system_support().absFilename(), "clipart");
|
||||
pair<docstring, docstring> dir1(_("Clipart|#C#c"), from_utf8(clipdir));
|
||||
pair<docstring, docstring> dir2(_("Documents|#o#O"), from_utf8(lyxrc.document_path));
|
||||
// Show the file browser dialog
|
||||
|
@ -100,10 +100,10 @@ docstring const browseLibFile(docstring const & dir,
|
||||
{
|
||||
// FIXME UNICODE
|
||||
pair<docstring, docstring> const dir1(_("System files|#S#s"),
|
||||
from_utf8(addName(package().system_support(), to_utf8(dir))));
|
||||
from_utf8(addName(package().system_support().absFilename(), to_utf8(dir))));
|
||||
|
||||
pair<docstring, docstring> const dir2(_("User files|#U#u"),
|
||||
from_utf8(addName(package().user_support(), to_utf8(dir))));
|
||||
from_utf8(addName(package().user_support().absFilename(), to_utf8(dir))));
|
||||
|
||||
docstring const result = browseFile(from_utf8(
|
||||
libFileSearch(to_utf8(dir), to_utf8(name), to_utf8(ext)).absFilename()),
|
||||
|
@ -167,7 +167,7 @@ string const doSubstitution(InsetExternalParams const & params,
|
||||
'.' + support::getExtension(filename), use_latex_path);
|
||||
result = subst_path(result, "$$Tempname", params.tempname().absFilename(), use_latex_path);
|
||||
result = subst_path(result, "$$Sysdir",
|
||||
support::package().system_support(), use_latex_path);
|
||||
support::package().system_support().absFilename(), use_latex_path);
|
||||
|
||||
// Handle the $$Contents(filename) syntax
|
||||
if (support::contains(result, "$$Contents(\"")) {
|
||||
|
@ -233,7 +233,7 @@ TemplateManager::getPreambleDefByName(string const & name) const
|
||||
}
|
||||
|
||||
|
||||
void TemplateManager::readTemplates(string const & path)
|
||||
void TemplateManager::readTemplates(support::FileName const & path)
|
||||
{
|
||||
support::Path p(path);
|
||||
|
||||
|
@ -19,6 +19,8 @@
|
||||
|
||||
namespace lyx {
|
||||
|
||||
namespace support { class FileName; }
|
||||
|
||||
class LyXLex;
|
||||
|
||||
namespace external {
|
||||
@ -117,7 +119,7 @@ public:
|
||||
std::string const getPreambleDefByName(std::string const & name) const;
|
||||
private:
|
||||
TemplateManager();
|
||||
void readTemplates(std::string const & path);
|
||||
void readTemplates(support::FileName const & path);
|
||||
void dumpTemplates(std::ostream &) const;
|
||||
void dumpPreambleDefs(std::ostream &) const;
|
||||
|
||||
|
@ -309,7 +309,7 @@ int InsetBibtex::latex(Buffer const & buffer, odocstream & os,
|
||||
|
||||
vector<FileName> const InsetBibtex::getFiles(Buffer const & buffer) const
|
||||
{
|
||||
Path p(buffer.filePath());
|
||||
Path p(FileName(buffer.filePath()));
|
||||
|
||||
vector<FileName> vec;
|
||||
|
||||
|
@ -456,7 +456,7 @@ int LyX::exec(int & argc, char * argv[])
|
||||
// such that package().temp_dir() is properly initialized.
|
||||
pimpl_->lyx_server_.reset(new LyXServer(&pimpl_->lyxfunc_, lyxrc.lyxpipes));
|
||||
pimpl_->lyx_socket_.reset(new LyXServerSocket(&pimpl_->lyxfunc_,
|
||||
os::internal_path(package().temp_dir() + "/lyxsocket")));
|
||||
package().temp_dir().absFilename() + "/lyxsocket"));
|
||||
|
||||
// Start the real execution loop.
|
||||
exit_status = pimpl_->application_->exec();
|
||||
@ -482,12 +482,12 @@ void LyX::prepareExit()
|
||||
// do any other cleanup procedures now
|
||||
if (package().temp_dir() != package().system_temp_dir()) {
|
||||
LYXERR(Debug::INFO) << "Deleting tmp dir "
|
||||
<< package().temp_dir() << endl;
|
||||
<< package().temp_dir().absFilename() << endl;
|
||||
|
||||
if (!destroyDir(FileName(package().temp_dir()))) {
|
||||
if (!destroyDir(package().temp_dir())) {
|
||||
docstring const msg =
|
||||
bformat(_("Unable to remove the temporary directory %1$s"),
|
||||
from_utf8(package().temp_dir()));
|
||||
from_utf8(package().temp_dir().absFilename()));
|
||||
Alert::warning(_("Unable to remove temporary directory"), msg);
|
||||
}
|
||||
}
|
||||
@ -812,11 +812,11 @@ bool LyX::init()
|
||||
signal(SIGTERM, error_handler);
|
||||
// SIGPIPE can be safely ignored.
|
||||
|
||||
lyxrc.tempdir_path = package().temp_dir();
|
||||
lyxrc.document_path = package().document_dir();
|
||||
lyxrc.tempdir_path = package().temp_dir().absFilename();
|
||||
lyxrc.document_path = package().document_dir().absFilename();
|
||||
|
||||
if (lyxrc.template_path.empty()) {
|
||||
lyxrc.template_path = addPath(package().system_support(),
|
||||
lyxrc.template_path = addPath(package().system_support().absFilename(),
|
||||
"templates");
|
||||
}
|
||||
|
||||
@ -836,7 +836,7 @@ bool LyX::init()
|
||||
// Add the directory containing the LyX executable to the path
|
||||
// so that LyX can find things like tex2lyx.
|
||||
if (package().build_support().empty())
|
||||
prependEnvPath("PATH", package().binary_dir());
|
||||
prependEnvPath("PATH", package().binary_dir().absFilename());
|
||||
#endif
|
||||
if (!lyxrc.path_prefix.empty())
|
||||
prependEnvPath("PATH", lyxrc.path_prefix);
|
||||
@ -906,9 +906,9 @@ bool LyX::init()
|
||||
FileName const document_path(lyxrc.document_path);
|
||||
if (fs::exists(document_path.toFilesystemEncoding()) &&
|
||||
fs::is_directory(document_path.toFilesystemEncoding()))
|
||||
package().document_dir() = lyxrc.document_path;
|
||||
package().document_dir() = document_path;
|
||||
|
||||
package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path)).absFilename();
|
||||
package().temp_dir() = createLyXTmpDir(FileName(lyxrc.tempdir_path));
|
||||
if (package().temp_dir().empty()) {
|
||||
Alert::error(_("Could not create temporary directory"),
|
||||
bformat(_("Could not create a temporary directory in\n"
|
||||
@ -923,7 +923,9 @@ bool LyX::init()
|
||||
return false;
|
||||
}
|
||||
|
||||
LYXERR(Debug::INIT) << "LyX tmp dir: `" << package().temp_dir() << '\'' << endl;
|
||||
LYXERR(Debug::INIT) << "LyX tmp dir: `"
|
||||
<< package().temp_dir().absFilename()
|
||||
<< '\'' << endl;
|
||||
|
||||
LYXERR(Debug::INIT) << "Reading session information '.lyx/session'..." << endl;
|
||||
pimpl_->session_.reset(new Session(lyxrc.num_lastfiles));
|
||||
@ -1042,13 +1044,13 @@ bool needsUpdate(string const & file)
|
||||
static bool firstrun = true;
|
||||
if (firstrun) {
|
||||
configure_script = FileName(addName(
|
||||
package().system_support(),
|
||||
package().system_support().absFilename(),
|
||||
"configure.py")).toFilesystemEncoding();
|
||||
firstrun = false;
|
||||
}
|
||||
|
||||
string const absfile = FileName(addName(
|
||||
package().user_support(), file)).toFilesystemEncoding();
|
||||
package().user_support().absFilename(), file)).toFilesystemEncoding();
|
||||
return (! fs::exists(absfile))
|
||||
|| (fs::last_write_time(configure_script)
|
||||
> fs::last_write_time(absfile));
|
||||
@ -1061,7 +1063,7 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
|
||||
{
|
||||
// Does user directory exist?
|
||||
string const user_support =
|
||||
FileName(package().user_support()).toFilesystemEncoding();
|
||||
package().user_support().toFilesystemEncoding();
|
||||
if (fs::exists(user_support) && fs::is_directory(user_support)) {
|
||||
first_start = false;
|
||||
|
||||
@ -1080,7 +1082,7 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
|
||||
bformat(_("You have specified a non-existent user "
|
||||
"LyX directory, %1$s.\n"
|
||||
"It is needed to keep your own configuration."),
|
||||
from_utf8(package().user_support())),
|
||||
from_utf8(package().user_support().absFilename())),
|
||||
1, 0,
|
||||
_("&Create directory"),
|
||||
_("&Exit LyX"))) {
|
||||
@ -1089,7 +1091,7 @@ bool LyX::queryUserLyXDir(bool explicit_userdir)
|
||||
}
|
||||
|
||||
lyxerr << to_utf8(bformat(_("LyX: Creating directory %1$s"),
|
||||
from_utf8(package().user_support())))
|
||||
from_utf8(package().user_support().absFilename())))
|
||||
<< endl;
|
||||
|
||||
if (!createDirectory(package().user_support(), 0755)) {
|
||||
|
@ -1005,7 +1005,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
|
||||
// Push directory path.
|
||||
string const path = buffer->temppath();
|
||||
support::Path p(path);
|
||||
support::Path p(FileName(path));
|
||||
|
||||
// there are three cases here:
|
||||
// 1. we print to a file
|
||||
@ -1227,7 +1227,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
int row;
|
||||
istringstream is(argument);
|
||||
is >> file_name >> row;
|
||||
if (prefixIs(file_name, package().temp_dir())) {
|
||||
if (prefixIs(file_name, package().temp_dir().absFilename())) {
|
||||
// Needed by inverse dvi search. If it is a file
|
||||
// in tmpdir, call the apropriated function
|
||||
lyx_view_->setBuffer(theBufferList().getBufferFromTmp(file_name));
|
||||
@ -1462,7 +1462,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
|
||||
case LFUN_PREFERENCES_SAVE: {
|
||||
lyxrc.write(makeAbsPath("preferences",
|
||||
package().user_support()),
|
||||
package().user_support().absFilename()),
|
||||
false);
|
||||
break;
|
||||
}
|
||||
@ -1588,7 +1588,7 @@ void LyXFunc::dispatch(FuncRequest const & cmd)
|
||||
|
||||
case LFUN_BUFFER_SAVE_AS_DEFAULT: {
|
||||
string const fname =
|
||||
addName(addPath(package().user_support(), "templates/"),
|
||||
addName(addPath(package().user_support().absFilename(), "templates/"),
|
||||
"defaults.lyx");
|
||||
Buffer defaults(fname);
|
||||
|
||||
@ -1900,7 +1900,7 @@ void LyXFunc::open(string const & fname)
|
||||
FileDialog fileDlg(_("Select document to open"),
|
||||
LFUN_FILE_OPEN,
|
||||
make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
|
||||
make_pair(_("Examples|#E#e"), from_utf8(addPath(package().system_support(), "examples"))));
|
||||
make_pair(_("Examples|#E#e"), from_utf8(addPath(package().system_support().absFilename(), "examples"))));
|
||||
|
||||
FileDialog::Result result =
|
||||
fileDlg.open(from_utf8(initpath),
|
||||
@ -1974,7 +1974,7 @@ void LyXFunc::doImport(string const & argument)
|
||||
LFUN_BUFFER_IMPORT,
|
||||
make_pair(_("Documents|#o#O"), from_utf8(lyxrc.document_path)),
|
||||
make_pair(_("Examples|#E#e"),
|
||||
from_utf8(addPath(package().system_support(), "examples"))));
|
||||
from_utf8(addPath(package().system_support().absFilename(), "examples"))));
|
||||
|
||||
docstring filter = formats.prettyName(format);
|
||||
filter += " (*.";
|
||||
@ -2155,7 +2155,7 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
|
||||
string const encoded = FileName(
|
||||
lyxrc_new.document_path).toFilesystemEncoding();
|
||||
if (fs::exists(encoded) && fs::is_directory(encoded))
|
||||
support::package().document_dir() = lyxrc.document_path;
|
||||
support::package().document_dir() = FileName(lyxrc.document_path);
|
||||
}
|
||||
case LyXRC::RC_ESC_CHARS:
|
||||
case LyXRC::RC_FONT_ENCODING:
|
||||
|
@ -112,14 +112,15 @@ docstring const Messages::get(string const & m) const
|
||||
|
||||
setlocale(LC_CTYPE, lang_.c_str());
|
||||
errno = 0;
|
||||
char const * c = bindtextdomain(PACKAGE, package().locale_dir().c_str());
|
||||
string const locale_dir = package().locale_dir().toFilesystemEncoding();
|
||||
char const * c = bindtextdomain(PACKAGE, locale_dir.c_str());
|
||||
int e = errno;
|
||||
if (e) {
|
||||
LYXERR(Debug::DEBUG)
|
||||
<< BOOST_CURRENT_FUNCTION << '\n'
|
||||
<< "Error code: " << errno << '\n'
|
||||
<< "Lang, mess: " << lang_ << " " << m << '\n'
|
||||
<< "Directory : " << package().locale_dir() << '\n'
|
||||
<< "Directory : " << package().locale_dir().absFilename() << '\n'
|
||||
<< "Rtn value : " << c << endl;
|
||||
}
|
||||
|
||||
@ -222,7 +223,8 @@ public:
|
||||
//lyxerr << "Messages: language(" << l
|
||||
// << ") in dir(" << dir << ")" << endl;
|
||||
|
||||
cat_gl = mssg_gl.open(PACKAGE, loc_gl, package().locale_dir().c_str());
|
||||
string const locale_dir = package().locale_dir().toFilesystemEncoding();
|
||||
cat_gl = mssg_gl.open(PACKAGE, loc_gl, locale_dir.c_str());
|
||||
|
||||
}
|
||||
|
||||
|
@ -464,7 +464,7 @@ Session::Session(unsigned int num) :
|
||||
{
|
||||
// locate the session file
|
||||
// note that the session file name 'session' is hard-coded
|
||||
session_file = FileName(addName(package().user_support(), "session"));
|
||||
session_file = FileName(addName(package().user_support().absFilename(), "session"));
|
||||
//
|
||||
readFile();
|
||||
}
|
||||
|
@ -192,9 +192,9 @@ FileName const fileOpenSearch(string const & path, string const & name,
|
||||
if (!suffixIs(path_element, '/'))
|
||||
path_element += '/';
|
||||
path_element = subst(path_element, "$$LyX",
|
||||
package().system_support());
|
||||
package().system_support().absFilename());
|
||||
path_element = subst(path_element, "$$User",
|
||||
package().user_support());
|
||||
package().user_support().absFilename());
|
||||
|
||||
real_file = fileSearch(path_element, name, ext);
|
||||
|
||||
@ -274,18 +274,18 @@ FileName const fileSearch(string const & path, string const & name,
|
||||
FileName const libFileSearch(string const & dir, string const & name,
|
||||
string const & ext)
|
||||
{
|
||||
FileName fullname = fileSearch(addPath(package().user_support(), dir),
|
||||
FileName fullname = fileSearch(addPath(package().user_support().absFilename(), dir),
|
||||
name, ext);
|
||||
if (!fullname.empty())
|
||||
return fullname;
|
||||
|
||||
if (!package().build_support().empty())
|
||||
fullname = fileSearch(addPath(package().build_support(), dir),
|
||||
fullname = fileSearch(addPath(package().build_support().absFilename(), dir),
|
||||
name, ext);
|
||||
if (!fullname.empty())
|
||||
return fullname;
|
||||
|
||||
return fileSearch(addPath(package().system_support(), dir), name, ext);
|
||||
return fileSearch(addPath(package().system_support().absFilename(), dir), name, ext);
|
||||
}
|
||||
|
||||
|
||||
@ -417,7 +417,7 @@ string const createBufferTmpDir()
|
||||
// In fact I wrote this code to circumvent a problematic behaviour
|
||||
// (bug?) of EMX mkstemp().
|
||||
string const tmpfl =
|
||||
package().temp_dir() + "/lyx_tmpbuf" +
|
||||
package().temp_dir().absFilename() + "/lyx_tmpbuf" +
|
||||
convert<string>(count++);
|
||||
|
||||
if (mkdir(FileName(tmpfl), 0777)) {
|
||||
@ -450,11 +450,10 @@ FileName const createLyXTmpDir(FileName const & deflt)
|
||||
}
|
||||
|
||||
|
||||
bool createDirectory(string const & path, int permission)
|
||||
bool createDirectory(FileName const & path, int permission)
|
||||
{
|
||||
string temp = rtrim(os::internal_path(path), "/");
|
||||
BOOST_ASSERT(!temp.empty());
|
||||
return mkdir(FileName(temp), permission) == 0;
|
||||
BOOST_ASSERT(!path.empty());
|
||||
return mkdir(path, permission) == 0;
|
||||
}
|
||||
|
||||
|
||||
@ -591,7 +590,7 @@ string const expandPath(string const & path)
|
||||
return getcwd().absFilename() + '/' + rTemp;
|
||||
|
||||
if (temp == "~")
|
||||
return package().home_dir() + '/' + rTemp;
|
||||
return package().home_dir().absFilename() + '/' + rTemp;
|
||||
|
||||
if (temp == "..")
|
||||
return makeAbsPath(copy).absFilename();
|
||||
@ -998,12 +997,12 @@ docstring const makeDisplayPath(string const & path, unsigned int threshold)
|
||||
string str = path;
|
||||
|
||||
// If file is from LyXDir, display it as if it were relative.
|
||||
string const system = package().system_support();
|
||||
string const system = package().system_support().absFilename();
|
||||
if (prefixIs(str, system) && str != system)
|
||||
return from_utf8("[" + str.erase(0, system.length()) + "]");
|
||||
|
||||
// replace /home/blah with ~/
|
||||
string const home = package().home_dir();
|
||||
string const home = package().home_dir().absFilename();
|
||||
if (!home.empty() && prefixIs(str, home))
|
||||
str = subst(str, home, "~");
|
||||
|
||||
@ -1033,20 +1032,18 @@ docstring const makeDisplayPath(string const & path, unsigned int threshold)
|
||||
}
|
||||
|
||||
|
||||
bool readLink(string const & file, string & link, bool resolve)
|
||||
bool readLink(FileName const & file, FileName & link)
|
||||
{
|
||||
#ifdef HAVE_READLINK
|
||||
char linkbuffer[512];
|
||||
// Should be PATH_MAX but that needs autconf support
|
||||
int const nRead = ::readlink(file.c_str(),
|
||||
string const encoded = file.toFilesystemEncoding();
|
||||
int const nRead = ::readlink(encoded.c_str(),
|
||||
linkbuffer, sizeof(linkbuffer) - 1);
|
||||
if (nRead <= 0)
|
||||
return false;
|
||||
linkbuffer[nRead] = '\0'; // terminator
|
||||
if (resolve)
|
||||
link = makeAbsPath(linkbuffer, onlyPath(file)).absFilename();
|
||||
else
|
||||
link = linkbuffer;
|
||||
link = makeAbsPath(linkbuffer, onlyPath(file.absFilename()));
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
|
@ -29,7 +29,7 @@ bool destroyDir(FileName const & tmpdir);
|
||||
std::string const createBufferTmpDir();
|
||||
|
||||
/// Creates directory. Returns true on success
|
||||
bool createDirectory(std::string const & name, int permissions);
|
||||
bool createDirectory(FileName const & name, int permissions);
|
||||
|
||||
/** Creates the global LyX temp dir.
|
||||
\p deflt can be an existing directory name. In this case a new directory
|
||||
@ -276,12 +276,10 @@ std::string const getFileContents(FileName const & fname);
|
||||
*/
|
||||
std::string const replaceEnvironmentPath(std::string const & path);
|
||||
|
||||
/* Set \c link to the path \c file points to as a symbolic link.
|
||||
If \c resolve is true, then \c link is an absolute path
|
||||
Returns true if successful */
|
||||
bool readLink(std::string const & file,
|
||||
std::string & link,
|
||||
bool resolve = false);
|
||||
/** Set \c link to the path \c file points to as a symbolic link.
|
||||
\return true if successful.
|
||||
*/
|
||||
bool readLink(FileName const & file, FileName & link);
|
||||
|
||||
/**
|
||||
* Search a TeX file in all locations the latex compiler would search it,
|
||||
|
@ -328,7 +328,7 @@ void addFontResources()
|
||||
{
|
||||
#ifdef X_DISPLAY_MISSING
|
||||
// Windows only: Add BaKoMa TrueType font resources
|
||||
string const fonts_dir = addPath(package().system_support(), "fonts");
|
||||
string const fonts_dir = addPath(package().system_support().absFilename(), "fonts");
|
||||
|
||||
for (int i = 0 ; i < num_fonts_truetype ; ++i) {
|
||||
string const font_current = to_local8bit(from_utf8(convert_path(
|
||||
@ -344,7 +344,7 @@ void restoreFontResources()
|
||||
{
|
||||
#ifdef X_DISPLAY_MISSING
|
||||
// Windows only: Remove BaKoMa TrueType font resources
|
||||
string const fonts_dir = addPath(package().system_support(), "fonts");
|
||||
string const fonts_dir = addPath(package().system_support().absFilename(), "fonts");
|
||||
|
||||
for(int i = 0 ; i < num_fonts_truetype ; ++i) {
|
||||
string const font_current = to_local8bit(from_utf8(convert_path(
|
||||
|
@ -406,7 +406,7 @@ bool autoOpenFile(string const & filename, auto_open_mode const mode)
|
||||
void addFontResources()
|
||||
{
|
||||
// Windows only: Add BaKoMa TrueType font resources
|
||||
string const fonts_dir = addPath(package().system_support(), "fonts");
|
||||
string const fonts_dir = addPath(package().system_support().absFilename(), "fonts");
|
||||
|
||||
for (int i = 0 ; i < num_fonts_truetype ; ++i) {
|
||||
string const font_current =
|
||||
@ -419,7 +419,7 @@ void addFontResources()
|
||||
void restoreFontResources()
|
||||
{
|
||||
// Windows only: Remove BaKoMa TrueType font resources
|
||||
string const fonts_dir = addPath(package().system_support(), "fonts");
|
||||
string const fonts_dir = addPath(package().system_support().absFilename(), "fonts");
|
||||
|
||||
for(int i = 0 ; i < num_fonts_truetype ; ++i) {
|
||||
string const font_current =
|
||||
|
@ -89,27 +89,27 @@ Package const & package()
|
||||
|
||||
namespace {
|
||||
|
||||
string const abs_path_from_binary_name(string const & exe);
|
||||
FileName const abs_path_from_binary_name(string const & exe);
|
||||
|
||||
std::pair<string, string> const
|
||||
get_build_dirs(string const & abs_binary,
|
||||
std::pair<FileName, FileName> const
|
||||
get_build_dirs(FileName const & abs_binary,
|
||||
exe_build_dir_to_top_build_dir top_build_dir_location);
|
||||
|
||||
string const get_document_dir(string const & home_dir);
|
||||
FileName const get_document_dir(FileName const & home_dir);
|
||||
|
||||
string const get_home_dir();
|
||||
FileName const get_home_dir();
|
||||
|
||||
string const get_locale_dir(string const & system_support_dir);
|
||||
FileName const get_locale_dir(FileName const & system_support_dir);
|
||||
|
||||
string const get_system_support_dir(string const & abs_binary,
|
||||
FileName const get_system_support_dir(FileName const & abs_binary,
|
||||
string const & command_line_system_support_dir);
|
||||
|
||||
string const get_temp_dir();
|
||||
FileName const get_temp_dir();
|
||||
|
||||
string const get_default_user_support_dir(string const & home_dir);
|
||||
FileName const get_default_user_support_dir(FileName const & home_dir);
|
||||
|
||||
std::pair<string, bool> const
|
||||
get_user_support_dir(string const & default_user_support_dir,
|
||||
std::pair<FileName, bool> const
|
||||
get_user_support_dir(FileName const & default_user_support_dir,
|
||||
string const & command_line_user_support_dir);
|
||||
|
||||
|
||||
@ -129,8 +129,8 @@ Package::Package(string const & command_line_arg0,
|
||||
temp_dir_ = system_temp_dir_;
|
||||
document_dir_ = get_document_dir(home_dir_);
|
||||
|
||||
string const abs_binary = abs_path_from_binary_name(command_line_arg0);
|
||||
binary_dir_ = onlyPath(abs_binary);
|
||||
FileName const abs_binary = abs_path_from_binary_name(command_line_arg0);
|
||||
binary_dir_ = FileName(onlyPath(abs_binary.absFilename()));
|
||||
|
||||
// Is LyX being run in-place from the build tree?
|
||||
boost::tie(build_support_dir_, system_support_dir_) =
|
||||
@ -143,26 +143,27 @@ Package::Package(string const & command_line_arg0,
|
||||
|
||||
locale_dir_ = get_locale_dir(system_support_dir_);
|
||||
|
||||
string const default_user_support_dir =
|
||||
FileName const default_user_support_dir =
|
||||
get_default_user_support_dir(home_dir_);
|
||||
boost::tie(user_support_dir_, explicit_user_support_dir_) =
|
||||
get_user_support_dir(default_user_support_dir,
|
||||
command_line_user_support_dir);
|
||||
|
||||
string const configure_script = addName(system_support(), "configure.py");
|
||||
configure_command_ = os::python() + ' ' + quoteName(configure_script)
|
||||
+ with_version_suffix();
|
||||
FileName const configure_script(addName(system_support().absFilename(), "configure.py"));
|
||||
configure_command_ = os::python() + ' ' +
|
||||
quoteName(configure_script.toFilesystemEncoding()) +
|
||||
with_version_suffix();
|
||||
|
||||
lyxerr[Debug::INIT]
|
||||
<< "<package>\n"
|
||||
<< "\tbinary_dir " << binary_dir() << '\n'
|
||||
<< "\tsystem_support " << system_support() << '\n'
|
||||
<< "\tbuild_support " << build_support() << '\n'
|
||||
<< "\tuser_support " << user_support() << '\n'
|
||||
<< "\tlocale_dir " << locale_dir() << '\n'
|
||||
<< "\tdocument_dir " << document_dir() << '\n'
|
||||
<< "\ttemp_dir " << temp_dir() << '\n'
|
||||
<< "\thome_dir " << home_dir() << '\n'
|
||||
<< "\tbinary_dir " << binary_dir().absFilename() << '\n'
|
||||
<< "\tsystem_support " << system_support().absFilename() << '\n'
|
||||
<< "\tbuild_support " << build_support().absFilename() << '\n'
|
||||
<< "\tuser_support " << user_support().absFilename() << '\n'
|
||||
<< "\tlocale_dir " << locale_dir().absFilename() << '\n'
|
||||
<< "\tdocument_dir " << document_dir().absFilename() << '\n'
|
||||
<< "\ttemp_dir " << temp_dir().absFilename() << '\n'
|
||||
<< "\thome_dir " << home_dir().absFilename() << '\n'
|
||||
<< "</package>\n" << std::endl;
|
||||
}
|
||||
|
||||
@ -171,15 +172,19 @@ namespace {
|
||||
|
||||
// These next functions contain the stuff that is substituted at
|
||||
// configuration-time.
|
||||
string const hardcoded_localedir()
|
||||
FileName const hardcoded_localedir()
|
||||
{
|
||||
return string("@LOCALEDIR@");
|
||||
// FIXME UNICODE
|
||||
// The build system needs to make sure that this is in utf8 encoding.
|
||||
return FileName("@LOCALEDIR@");
|
||||
}
|
||||
|
||||
|
||||
string const hardcoded_system_support_dir()
|
||||
FileName const hardcoded_system_support_dir()
|
||||
{
|
||||
return string("@LYX_DIR@");
|
||||
// FIXME UNICODE
|
||||
// The build system needs to make sure that this is in utf8 encoding.
|
||||
return FileName("@LYX_DIR@");
|
||||
}
|
||||
|
||||
|
||||
@ -194,9 +199,11 @@ string const & with_version_suffix()
|
||||
} // namespace anon
|
||||
|
||||
|
||||
string const & Package::top_srcdir()
|
||||
FileName const & Package::top_srcdir()
|
||||
{
|
||||
static string const dir("@TOP_SRCDIR@");
|
||||
// FIXME UNICODE
|
||||
// The build system needs to make sure that this is in utf8 encoding.
|
||||
static FileName const dir("@TOP_SRCDIR@");
|
||||
return dir;
|
||||
}
|
||||
|
||||
@ -207,12 +214,12 @@ bool check_command_line_dir(string const & dir,
|
||||
string const & file,
|
||||
string const & command_line_switch);
|
||||
|
||||
string const extract_env_var_dir(string const & env_var);
|
||||
FileName const extract_env_var_dir(string const & env_var);
|
||||
|
||||
bool check_env_var_dir(string const & dir,
|
||||
bool check_env_var_dir(FileName const & dir,
|
||||
string const & env_var);
|
||||
|
||||
bool check_env_var_dir(string const & dir,
|
||||
bool check_env_var_dir(FileName const & dir,
|
||||
string const & file,
|
||||
string const & env_var);
|
||||
|
||||
@ -221,8 +228,19 @@ string const relative_locale_dir();
|
||||
string const relative_system_support_dir();
|
||||
|
||||
|
||||
std::string const
|
||||
get_build_support_dir(std::string const & binary_dir,
|
||||
/**
|
||||
* Convert \p name to internal path and strip a trailing slash, since it
|
||||
* comes from user input (commandline or environment).
|
||||
* \p name is encoded in utf8.
|
||||
*/
|
||||
string const fix_dir_name(string const & name)
|
||||
{
|
||||
return rtrim(os::internal_path(name), "/");
|
||||
}
|
||||
|
||||
|
||||
FileName const
|
||||
get_build_support_dir(string const & binary_dir,
|
||||
exe_build_dir_to_top_build_dir top_build_dir_location)
|
||||
{
|
||||
string indirection;
|
||||
@ -235,12 +253,12 @@ get_build_support_dir(std::string const & binary_dir,
|
||||
break;
|
||||
}
|
||||
|
||||
return normalizePath(addPath(binary_dir, indirection));
|
||||
return FileName(normalizePath(addPath(binary_dir, indirection)));
|
||||
}
|
||||
|
||||
|
||||
std::pair<string, string> const
|
||||
get_build_dirs(string const & abs_binary,
|
||||
std::pair<FileName, FileName> const
|
||||
get_build_dirs(FileName const & abs_binary,
|
||||
exe_build_dir_to_top_build_dir top_build_dir_location)
|
||||
{
|
||||
string const check_text = "Checking whether LyX is run in place...";
|
||||
@ -253,17 +271,17 @@ get_build_dirs(string const & abs_binary,
|
||||
|
||||
// Note that the name of the lyx binary may be a symbolic link.
|
||||
// If that is the case, then we follow the links too.
|
||||
string binary = abs_binary;
|
||||
FileName binary = abs_binary;
|
||||
while (true) {
|
||||
// Try and find "lyxrc.defaults".
|
||||
string const binary_dir = onlyPath(binary);
|
||||
string const build_support_dir =
|
||||
string const binary_dir = onlyPath(binary.absFilename());
|
||||
FileName const build_support_dir =
|
||||
get_build_support_dir(binary_dir, top_build_dir_location);
|
||||
|
||||
if (!fileSearch(build_support_dir, "Makefile").empty()) {
|
||||
if (!fileSearch(build_support_dir.absFilename(), "Makefile").empty()) {
|
||||
// Try and find "chkconfig.ltx".
|
||||
string const system_support_dir =
|
||||
addPath(Package::top_srcdir(), "lib");
|
||||
addPath(Package::top_srcdir().absFilename(), "lib");
|
||||
|
||||
if (!fileSearch(system_support_dir, "chkconfig.ltx").empty()) {
|
||||
lyxerr[Debug::INIT] << check_text << " yes"
|
||||
@ -274,11 +292,11 @@ get_build_dirs(string const & abs_binary,
|
||||
|
||||
// Check whether binary is a symbolic link.
|
||||
// If so, resolve it and repeat the exercise.
|
||||
if (!fs::symbolic_link_exists(FileName(binary).toFilesystemEncoding()))
|
||||
if (!fs::symbolic_link_exists(binary.toFilesystemEncoding()))
|
||||
break;
|
||||
|
||||
string link;
|
||||
if (readLink(binary, link, true)) {
|
||||
FileName link;
|
||||
if (readLink(binary, link)) {
|
||||
binary = link;
|
||||
} else {
|
||||
// Unable to resolve the link.
|
||||
@ -287,18 +305,18 @@ get_build_dirs(string const & abs_binary,
|
||||
}
|
||||
|
||||
lyxerr[Debug::INIT] << check_text << " no" << std::endl;
|
||||
return std::make_pair(string(), string());
|
||||
return std::make_pair(FileName(), FileName());
|
||||
}
|
||||
|
||||
|
||||
// Specification of document_dir_ may be reset by LyXRC,
|
||||
// but the default is fixed for a given OS.
|
||||
string const get_document_dir(string const & home_dir)
|
||||
FileName const get_document_dir(FileName const & home_dir)
|
||||
{
|
||||
#if defined (USE_WINDOWS_PACKAGING)
|
||||
(void)home_dir; // Silence warning about unused variable.
|
||||
os::GetFolderPath win32_folder_path;
|
||||
return win32_folder_path(os::GetFolderPath::PERSONAL);
|
||||
return FileName(win32_folder_path(os::GetFolderPath::PERSONAL));
|
||||
#else // Posix-like.
|
||||
return home_dir;
|
||||
#endif
|
||||
@ -308,7 +326,7 @@ string const get_document_dir(string const & home_dir)
|
||||
// The specification of home_dir_ is fixed for a given OS.
|
||||
// A typical example on Windows: "C:/Documents and Settings/USERNAME"
|
||||
// and on a Posix-like machine: "/home/USERNAME".
|
||||
string const get_home_dir()
|
||||
FileName const get_home_dir()
|
||||
{
|
||||
#if defined (USE_WINDOWS_PACKAGING)
|
||||
string const home_dir = getEnv("USERPROFILE");
|
||||
@ -316,66 +334,67 @@ string const get_home_dir()
|
||||
string const home_dir = getEnv("HOME");
|
||||
#endif
|
||||
|
||||
return os::internal_path(home_dir);
|
||||
return FileName(fix_dir_name(home_dir));
|
||||
}
|
||||
|
||||
|
||||
// Several sources are probed to ascertain the locale directory.
|
||||
// The only requirement is that the result is indeed a directory.
|
||||
string const get_locale_dir(string const & system_support_dir)
|
||||
FileName const get_locale_dir(FileName const & system_support_dir)
|
||||
{
|
||||
// 1. Use the "LYX_LOCALEDIR" environment variable.
|
||||
string const path_env = extract_env_var_dir("LYX_LOCALEDIR");
|
||||
FileName const path_env = extract_env_var_dir("LYX_LOCALEDIR");
|
||||
if (!path_env.empty() && check_env_var_dir(path_env, "LYX_LOCALEDIR"))
|
||||
return path_env;
|
||||
|
||||
// 2. Search for system_support_dir / <relative locale dir>
|
||||
// The <relative locale dir> is OS-dependent. (On Unix, it will
|
||||
// be "../locale/".)
|
||||
FileName path(normalizePath(addPath(system_support_dir, relative_locale_dir())));
|
||||
FileName path(normalizePath(addPath(system_support_dir.absFilename(),
|
||||
relative_locale_dir())));
|
||||
|
||||
if (fs::exists(path.toFilesystemEncoding()) &&
|
||||
fs::is_directory(path.toFilesystemEncoding()))
|
||||
return path.absFilename();
|
||||
return path;
|
||||
|
||||
// 3. Fall back to the hard-coded LOCALEDIR.
|
||||
path = FileName(hardcoded_localedir());
|
||||
path = hardcoded_localedir();
|
||||
if (fs::exists(path.toFilesystemEncoding()) &&
|
||||
fs::is_directory(path.toFilesystemEncoding()))
|
||||
return path.absFilename();
|
||||
return path;
|
||||
|
||||
return string();
|
||||
return FileName();
|
||||
}
|
||||
|
||||
|
||||
// Specification of temp_dir_ may be reset by LyXRC,
|
||||
// but the default is fixed for a given OS.
|
||||
string const get_temp_dir()
|
||||
FileName const get_temp_dir()
|
||||
{
|
||||
#if defined (USE_WINDOWS_PACKAGING)
|
||||
// Typical example: C:/TEMP/.
|
||||
char path[MAX_PATH];
|
||||
GetTempPath(MAX_PATH, path);
|
||||
return os::internal_path(path);
|
||||
return FileName(os::internal_path(to_utf8(from_local8bit(path))));
|
||||
#else // Posix-like.
|
||||
return "/tmp";
|
||||
return FileName("/tmp");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
// Extracts the absolute path from the foo of "-sysdir foo" or "-userdir foo"
|
||||
string const abs_path_from_command_line(string const & command_line)
|
||||
FileName const abs_path_from_command_line(string const & command_line)
|
||||
{
|
||||
if (command_line.empty())
|
||||
return string();
|
||||
return FileName();
|
||||
|
||||
string const path = os::internal_path(command_line);
|
||||
return os::is_absolute_path(path) ? path : makeAbsPath(path).absFilename();
|
||||
string const path = fix_dir_name(command_line);
|
||||
return os::is_absolute_path(path) ? FileName(path) : makeAbsPath(path);
|
||||
}
|
||||
|
||||
|
||||
// Does the grunt work for abs_path_from_binary_name()
|
||||
string const get_binary_path(string const & exe)
|
||||
FileName const get_binary_path(string const & exe)
|
||||
{
|
||||
#if defined (USE_WINDOWS_PACKAGING)
|
||||
// The executable may have been invoked either with or
|
||||
@ -388,19 +407,19 @@ string const get_binary_path(string const & exe)
|
||||
string const exe_path = os::internal_path(exe);
|
||||
#endif
|
||||
if (os::is_absolute_path(exe_path))
|
||||
return exe_path;
|
||||
return FileName(exe_path);
|
||||
|
||||
// Two possibilities present themselves.
|
||||
// 1. The binary is relative to the CWD.
|
||||
string const abs_exe_path = makeAbsPath(exe_path).absFilename();
|
||||
if (fs::exists(FileName(abs_exe_path).toFilesystemEncoding()))
|
||||
FileName const abs_exe_path = makeAbsPath(exe_path);
|
||||
if (fs::exists(abs_exe_path.toFilesystemEncoding()))
|
||||
return abs_exe_path;
|
||||
|
||||
// 2. exe must be the name of the binary only and it
|
||||
// can be found on the PATH.
|
||||
string const exe_name = onlyFilename(exe_path);
|
||||
if (exe_name != exe_path)
|
||||
return string();
|
||||
return FileName();
|
||||
|
||||
std::vector<string> const path = getEnvPath("PATH");
|
||||
std::vector<string>::const_iterator it = path.begin();
|
||||
@ -409,20 +428,20 @@ string const get_binary_path(string const & exe)
|
||||
// This will do nothing if *it is already absolute.
|
||||
string const exe_dir = makeAbsPath(*it).absFilename();
|
||||
|
||||
string const exe_path = addName(exe_dir, exe_name);
|
||||
if (fs::exists(FileName(exe_path).toFilesystemEncoding()))
|
||||
FileName const exe_path(addName(exe_dir, exe_name));
|
||||
if (fs::exists(exe_path.toFilesystemEncoding()))
|
||||
return exe_path;
|
||||
}
|
||||
|
||||
// Didn't find anything.
|
||||
return string();
|
||||
return FileName();
|
||||
}
|
||||
|
||||
|
||||
// Extracts the absolute path to the binary name received as argv[0].
|
||||
string const abs_path_from_binary_name(string const & exe)
|
||||
FileName const abs_path_from_binary_name(string const & exe)
|
||||
{
|
||||
string const abs_binary = get_binary_path(exe);
|
||||
FileName const abs_binary = get_binary_path(exe);
|
||||
if (abs_binary.empty()) {
|
||||
// FIXME UNICODE
|
||||
throw ExceptionMessage(ErrorException,
|
||||
@ -437,21 +456,21 @@ string const abs_path_from_binary_name(string const & exe)
|
||||
// A plethora of directories is searched to ascertain the system
|
||||
// lyxdir which is defined as the first directory to contain
|
||||
// "chkconfig.ltx".
|
||||
string const
|
||||
get_system_support_dir(string const & abs_binary,
|
||||
FileName const
|
||||
get_system_support_dir(FileName const & abs_binary,
|
||||
string const & command_line_system_support_dir)
|
||||
{
|
||||
string const chkconfig_ltx = "chkconfig.ltx";
|
||||
|
||||
// searched_dirs is used for diagnostic purposes only in the case
|
||||
// that "chkconfig.ltx" is not found.
|
||||
std::list<string> searched_dirs;
|
||||
std::list<FileName> searched_dirs;
|
||||
|
||||
// 1. Use the -sysdir command line parameter.
|
||||
string path = abs_path_from_command_line(command_line_system_support_dir);
|
||||
FileName path = abs_path_from_command_line(command_line_system_support_dir);
|
||||
if (!path.empty()) {
|
||||
searched_dirs.push_back(path);
|
||||
if (check_command_line_dir(path, chkconfig_ltx, "-sysdir"))
|
||||
if (check_command_line_dir(path.absFilename(), chkconfig_ltx, "-sysdir"))
|
||||
return path;
|
||||
}
|
||||
|
||||
@ -472,27 +491,27 @@ get_system_support_dir(string const & abs_binary,
|
||||
|
||||
// One subtlety to be aware of. The name of the lyx binary may be
|
||||
// a symbolic link. If that is the case, then we follow the links too.
|
||||
string binary = abs_binary;
|
||||
FileName binary = abs_binary;
|
||||
while (true) {
|
||||
// Try and find "chkconfig.ltx".
|
||||
string const binary_dir = onlyPath(binary);
|
||||
string const binary_dir = onlyPath(binary.absFilename());
|
||||
|
||||
string const lyxdir =
|
||||
normalizePath(addPath(binary_dir, relative_lyxdir));
|
||||
FileName const lyxdir(
|
||||
normalizePath(addPath(binary_dir, relative_lyxdir)));
|
||||
searched_dirs.push_back(lyxdir);
|
||||
|
||||
if (!fileSearch(lyxdir, chkconfig_ltx).empty()) {
|
||||
if (!fileSearch(lyxdir.absFilename(), chkconfig_ltx).empty()) {
|
||||
// Success! "chkconfig.ltx" has been found.
|
||||
return lyxdir;
|
||||
}
|
||||
|
||||
// Check whether binary is a symbolic link.
|
||||
// If so, resolve it and repeat the exercise.
|
||||
if (!fs::symbolic_link_exists(FileName(binary).toFilesystemEncoding()))
|
||||
if (!fs::symbolic_link_exists(binary.toFilesystemEncoding()))
|
||||
break;
|
||||
|
||||
string link;
|
||||
if (readLink(binary, link, true)) {
|
||||
FileName link;
|
||||
if (readLink(binary, link)) {
|
||||
binary = link;
|
||||
} else {
|
||||
// Unable to resolve the link.
|
||||
@ -501,16 +520,16 @@ get_system_support_dir(string const & abs_binary,
|
||||
}
|
||||
|
||||
// 4. Repeat the exercise on the directory itself.
|
||||
string binary_dir = onlyPath(abs_binary);
|
||||
FileName binary_dir(onlyPath(abs_binary.absFilename()));
|
||||
while (true) {
|
||||
// This time test whether the directory is a symbolic link
|
||||
// *before* looking for "chkconfig.ltx".
|
||||
// (We've looked relative to the original already.)
|
||||
if (!fs::symbolic_link_exists(FileName(binary).toFilesystemEncoding()))
|
||||
if (!fs::symbolic_link_exists(binary.toFilesystemEncoding()))
|
||||
break;
|
||||
|
||||
string link;
|
||||
if (readLink(binary_dir, link, true)) {
|
||||
FileName link;
|
||||
if (readLink(binary_dir, link)) {
|
||||
binary_dir = link;
|
||||
} else {
|
||||
// Unable to resolve the link.
|
||||
@ -518,11 +537,11 @@ get_system_support_dir(string const & abs_binary,
|
||||
}
|
||||
|
||||
// Try and find "chkconfig.ltx".
|
||||
string const lyxdir =
|
||||
normalizePath(addPath(binary_dir, relative_lyxdir));
|
||||
FileName const lyxdir(
|
||||
normalizePath(addPath(binary_dir.absFilename(), relative_lyxdir)));
|
||||
searched_dirs.push_back(lyxdir);
|
||||
|
||||
if (!fileSearch(lyxdir, chkconfig_ltx).empty()) {
|
||||
if (!fileSearch(lyxdir.absFilename(), chkconfig_ltx).empty()) {
|
||||
// Success! "chkconfig.ltx" has been found.
|
||||
return lyxdir;
|
||||
}
|
||||
@ -530,19 +549,19 @@ get_system_support_dir(string const & abs_binary,
|
||||
|
||||
// 5. In desparation, try the hard-coded system support dir.
|
||||
path = hardcoded_system_support_dir();
|
||||
if (!fileSearch(path, chkconfig_ltx).empty())
|
||||
if (!fileSearch(path.absFilename(), chkconfig_ltx).empty())
|
||||
return path;
|
||||
|
||||
// Everything has failed :-(
|
||||
// So inform the user and exit.
|
||||
string searched_dirs_str;
|
||||
typedef std::list<string>::const_iterator iterator;
|
||||
typedef std::list<FileName>::const_iterator iterator;
|
||||
iterator const begin = searched_dirs.begin();
|
||||
iterator const end = searched_dirs.end();
|
||||
for (iterator it = begin; it != end; ++it) {
|
||||
if (it != begin)
|
||||
searched_dirs_str += "\n\t";
|
||||
searched_dirs_str += *it;
|
||||
searched_dirs_str += it->absFilename();
|
||||
}
|
||||
|
||||
// FIXME UNICODE
|
||||
@ -557,21 +576,21 @@ get_system_support_dir(string const & abs_binary,
|
||||
from_utf8(searched_dirs_str)));
|
||||
|
||||
// Keep the compiler happy.
|
||||
return string();
|
||||
return FileName();
|
||||
}
|
||||
|
||||
|
||||
// Returns the absolute path to the user lyxdir, together with a flag
|
||||
// indicating whether this directory was specified explicitly (as -userdir
|
||||
// or through an environment variable) or whether it was deduced.
|
||||
std::pair<string, bool> const
|
||||
get_user_support_dir(string const & default_user_support_dir,
|
||||
std::pair<FileName, bool> const
|
||||
get_user_support_dir(FileName const & default_user_support_dir,
|
||||
string const & command_line_user_support_dir)
|
||||
{
|
||||
bool explicit_userdir = true;
|
||||
|
||||
// 1. Use the -userdir command line parameter.
|
||||
string path =
|
||||
FileName path =
|
||||
abs_path_from_command_line(command_line_user_support_dir);
|
||||
if (!path.empty())
|
||||
return std::make_pair(path, explicit_userdir);
|
||||
@ -589,13 +608,13 @@ get_user_support_dir(string const & default_user_support_dir,
|
||||
|
||||
// $HOME/.lyx on POSIX but on Win32 it will be something like
|
||||
// "C:/Documents and Settings/USERNAME/Application Data/LyX"
|
||||
string const get_default_user_support_dir(string const & home_dir)
|
||||
FileName const get_default_user_support_dir(FileName const & home_dir)
|
||||
{
|
||||
#if defined (USE_WINDOWS_PACKAGING)
|
||||
(void)home_dir; // Silence warning about unused variable.
|
||||
|
||||
os::GetFolderPath win32_folder_path;
|
||||
return addPath(win32_folder_path(os::GetFolderPath::APPDATA), PACKAGE);
|
||||
return FileName(addPath(win32_folder_path(os::GetFolderPath::APPDATA), PACKAGE));
|
||||
|
||||
#elif defined (USE_MACOSX_PACKAGING)
|
||||
(void)home_dir; // Silence warning about unused variable.
|
||||
@ -605,19 +624,20 @@ string const get_default_user_support_dir(string const & home_dir)
|
||||
FSFindFolder(kUserDomain, kApplicationSupportFolderType,
|
||||
kDontCreateFolder, &fsref);
|
||||
if (error_code != 0)
|
||||
return string();
|
||||
return FileName();
|
||||
|
||||
// FSRefMakePath returns the result in utf8
|
||||
char store[PATH_MAX + 1];
|
||||
OSStatus const status_code =
|
||||
FSRefMakePath(&fsref,
|
||||
reinterpret_cast<UInt8*>(store), PATH_MAX);
|
||||
if (status_code != 0)
|
||||
return string();
|
||||
return FileName();
|
||||
|
||||
return addPath(reinterpret_cast<char const *>(store), PACKAGE);
|
||||
return FileName(addPath(reinterpret_cast<char const *>(store), PACKAGE));
|
||||
|
||||
#else // USE_POSIX_PACKAGING
|
||||
return addPath(home_dir, string(".") + PACKAGE);
|
||||
return FileName(addPath(home_dir.absFilename(), string(".") + PACKAGE));
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -642,26 +662,26 @@ bool check_command_line_dir(string const & dir,
|
||||
|
||||
|
||||
// The environment variable @c env_var expands to a (single) file path.
|
||||
string const extract_env_var_dir(string const & env_var)
|
||||
FileName const extract_env_var_dir(string const & env_var)
|
||||
{
|
||||
string const dir = os::internal_path(getEnv(env_var));
|
||||
return dir.empty() ? dir : makeAbsPath(dir).absFilename();
|
||||
string const dir = fix_dir_name(getEnv(env_var));
|
||||
return dir.empty() ? FileName() : makeAbsPath(dir);
|
||||
}
|
||||
|
||||
|
||||
// Check that directory @c dir contains @c file.
|
||||
// Else emit a warning about an invalid @c env_var.
|
||||
bool check_env_var_dir(string const & dir,
|
||||
bool check_env_var_dir(FileName const & dir,
|
||||
string const & file,
|
||||
string const & env_var)
|
||||
{
|
||||
FileName const abs_path = fileSearch(dir, file);
|
||||
FileName const abs_path = fileSearch(dir.absFilename(), file);
|
||||
if (abs_path.empty()) {
|
||||
// FIXME UNICODE
|
||||
throw ExceptionMessage(WarningException, _("File not found"), bformat(
|
||||
_("Invalid %1$s environment variable.\n"
|
||||
"Directory %2$s does not contain %3$s."),
|
||||
from_utf8(env_var), from_utf8(dir),
|
||||
from_utf8(env_var), from_utf8(dir.absFilename()),
|
||||
from_utf8(file)));
|
||||
}
|
||||
|
||||
@ -671,10 +691,10 @@ bool check_env_var_dir(string const & dir,
|
||||
|
||||
// Check that directory @c dir is indeed a directory.
|
||||
// Else emit a warning about an invalid @c env_var.
|
||||
bool check_env_var_dir(string const & dir,
|
||||
bool check_env_var_dir(FileName const & dir,
|
||||
string const & env_var)
|
||||
{
|
||||
string const encoded(FileName(dir).toFilesystemEncoding());
|
||||
string const encoded(dir.toFilesystemEncoding());
|
||||
bool const success = (fs::exists(encoded) && fs::is_directory(encoded));
|
||||
|
||||
if (!success) {
|
||||
@ -687,7 +707,7 @@ bool check_env_var_dir(string const & dir,
|
||||
_("Invalid %1$s environment variable.\n%2$s is not a directory.");
|
||||
|
||||
throw ExceptionMessage(WarningException, _("Directory not found"), bformat(
|
||||
fmt, from_utf8(env_var), from_utf8(dir)));
|
||||
fmt, from_utf8(env_var), from_utf8(dir.absFilename())));
|
||||
}
|
||||
|
||||
return success;
|
||||
|
@ -15,6 +15,8 @@
|
||||
#ifndef LYX_PACHAGE_H
|
||||
#define LYX_PACHAGE_H
|
||||
|
||||
#include "support/filename.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace lyx {
|
||||
@ -69,25 +71,25 @@ public:
|
||||
|
||||
/** The directory containing the LyX executable.
|
||||
*/
|
||||
std::string const & binary_dir() const;
|
||||
FileName const & binary_dir() const;
|
||||
|
||||
/** The top of the LyX source code tree.
|
||||
*/
|
||||
static std::string const & top_srcdir();
|
||||
static FileName const & top_srcdir();
|
||||
|
||||
/** The path to the system-level support files
|
||||
* we're actually going to use.
|
||||
*/
|
||||
std::string const & system_support() const;
|
||||
FileName const & system_support() const;
|
||||
|
||||
/** The path to the autogenerated support files
|
||||
* when running in-place.
|
||||
*/
|
||||
std::string const & build_support() const;
|
||||
FileName const & build_support() const;
|
||||
|
||||
/** The path to the user-level support files.
|
||||
*/
|
||||
std::string const & user_support() const;
|
||||
FileName const & user_support() const;
|
||||
|
||||
/** The user_support directory was set explicitly using either
|
||||
* the -userdir command line switch or
|
||||
@ -97,23 +99,23 @@ public:
|
||||
|
||||
/** The path to the locale directory.
|
||||
*/
|
||||
std::string const & locale_dir() const;
|
||||
FileName const & locale_dir() const;
|
||||
|
||||
/** The default document directory.
|
||||
* Can be reset by LyXRC.
|
||||
*/
|
||||
std::string & document_dir() const;
|
||||
FileName & document_dir() const;
|
||||
|
||||
/** The path to the system temporary directory.
|
||||
* (Eg /tmp on *nix.)
|
||||
*/
|
||||
std::string const & system_temp_dir() const;
|
||||
FileName const & system_temp_dir() const;
|
||||
|
||||
/** The path to the temporary directory used by LyX.
|
||||
* (Eg /tmp/lyx_tmpdir800nBI1z9 on *nix.)
|
||||
* Can be reset by LyXRC.
|
||||
*/
|
||||
std::string & temp_dir() const;
|
||||
FileName & temp_dir() const;
|
||||
|
||||
/** Used when setting the user_support directory.
|
||||
* Used also when expanding "~/" or contracting to "~/". (filetools.C)
|
||||
@ -121,21 +123,24 @@ public:
|
||||
* for the dump.
|
||||
* This may be empty (e. g. when run under a CGI environment)
|
||||
*/
|
||||
std::string const & home_dir() const;
|
||||
FileName const & home_dir() const;
|
||||
|
||||
/// Command to run the configure script
|
||||
/** Command to run the configure script.
|
||||
* Caution: This is "ready-to-run", i.e. in the locale encoding, not
|
||||
* utf8.
|
||||
*/
|
||||
std::string const & configure_command() const;
|
||||
|
||||
private:
|
||||
std::string binary_dir_;
|
||||
std::string system_support_dir_;
|
||||
std::string build_support_dir_;
|
||||
std::string user_support_dir_;
|
||||
std::string locale_dir_;
|
||||
mutable std::string document_dir_;
|
||||
mutable std::string temp_dir_;
|
||||
std::string system_temp_dir_;
|
||||
std::string home_dir_;
|
||||
FileName binary_dir_;
|
||||
FileName system_support_dir_;
|
||||
FileName build_support_dir_;
|
||||
FileName user_support_dir_;
|
||||
FileName locale_dir_;
|
||||
mutable FileName document_dir_;
|
||||
mutable FileName temp_dir_;
|
||||
FileName system_temp_dir_;
|
||||
FileName home_dir_;
|
||||
std::string configure_command_;
|
||||
bool explicit_user_support_dir_;
|
||||
};
|
||||
@ -145,25 +150,25 @@ inline
|
||||
Package::Package() {}
|
||||
|
||||
inline
|
||||
std::string const & Package::binary_dir() const
|
||||
FileName const & Package::binary_dir() const
|
||||
{
|
||||
return binary_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string const & Package::system_support() const
|
||||
FileName const & Package::system_support() const
|
||||
{
|
||||
return system_support_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string const & Package::build_support() const
|
||||
FileName const & Package::build_support() const
|
||||
{
|
||||
return build_support_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string const & Package::user_support() const
|
||||
FileName const & Package::user_support() const
|
||||
{
|
||||
return user_support_dir_;
|
||||
}
|
||||
@ -175,31 +180,31 @@ bool Package::explicit_user_support() const
|
||||
}
|
||||
|
||||
inline
|
||||
std::string const & Package::locale_dir() const
|
||||
FileName const & Package::locale_dir() const
|
||||
{
|
||||
return locale_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string & Package::document_dir() const
|
||||
FileName & Package::document_dir() const
|
||||
{
|
||||
return document_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string & Package::temp_dir() const
|
||||
FileName & Package::temp_dir() const
|
||||
{
|
||||
return temp_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string const & Package::system_temp_dir() const
|
||||
FileName const & Package::system_temp_dir() const
|
||||
{
|
||||
return system_temp_dir_;
|
||||
}
|
||||
|
||||
inline
|
||||
std::string const & Package::home_dir() const
|
||||
FileName const & Package::home_dir() const
|
||||
{
|
||||
return home_dir_;
|
||||
}
|
||||
|
@ -14,7 +14,6 @@
|
||||
#define PATH_C
|
||||
|
||||
#include "support/path.h"
|
||||
#include "support/filename.h"
|
||||
#include "support/lyxlib.h"
|
||||
|
||||
|
||||
@ -24,13 +23,13 @@ using std::string;
|
||||
namespace lyx {
|
||||
namespace support {
|
||||
|
||||
Path::Path(string const & path)
|
||||
Path::Path(FileName const & path)
|
||||
: popped_(false)
|
||||
{
|
||||
if (!path.empty()) {
|
||||
pushedDir_ = getcwd();
|
||||
|
||||
if (pushedDir_.empty() || chdir(FileName(path))) {
|
||||
if (pushedDir_.empty() || chdir(path)) {
|
||||
/* FIXME: throw */
|
||||
}
|
||||
} else {
|
||||
|
@ -37,7 +37,7 @@ namespace support {
|
||||
class Path : boost::noncopyable {
|
||||
public:
|
||||
/// change to the given directory
|
||||
explicit Path(std::string const & path);
|
||||
explicit Path(FileName const & path);
|
||||
|
||||
/// set cwd to the previous value if needed
|
||||
~Path();
|
||||
|
@ -80,8 +80,9 @@ int make_tempfile(char * templ)
|
||||
|
||||
FileName const tempName(FileName const & dir, string const & mask)
|
||||
{
|
||||
// FIXME UNICODE encoding of package().temp_dir() is probably wrong
|
||||
string const tmpdir(dir.empty() ? package().temp_dir() : dir.toFilesystemEncoding());
|
||||
string const tmpdir(dir.empty() ?
|
||||
package().temp_dir().toFilesystemEncoding() :
|
||||
dir.toFilesystemEncoding());
|
||||
string tmpfl(addName(tmpdir, mask));
|
||||
#if defined (HAVE_GETPID)
|
||||
tmpfl += convert<string>(getpid());
|
||||
|
@ -60,7 +60,7 @@ int VCS::doVCCommand(string const & cmd, string const & path)
|
||||
{
|
||||
LYXERR(Debug::LYXVC) << "doVCCommand: " << cmd << endl;
|
||||
Systemcall one;
|
||||
support::Path p(path);
|
||||
support::Path p(FileName(path));
|
||||
int const ret = one.startscript(Systemcall::Wait, cmd);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user