#include <utility>
#include <string>
+#include <set>
namespace lyx {
namespace support {
class FileName;
+/// Record used temp file names
+static std::set<std::string> tmp_names_;
+
+/// Get a temporary file name.
+/**
+* The actual temp file (QTemporaryFile object) is immediately
+* destroyed after the name has been generated, so a new file
+* has to be created manually from the name.
+* This is needed if the temp file has to be manually removed
+* (e.g., when temp files are used as conversion target, and the initial
+* file only serves as a placeholder), since QTemporaryFile objects
+* cannot be manually removed at least on Windows (they are always
+* kept open internally even after close()).
+* In order to avoid race conditions due to duplicate names, we record
+* all used temp file names.
+* If you don't have to remove the temp file manually, use TempFile instead!
+*/
+FileName const tempFileName(FileName, bool const dir = false);
+/// Get temporary file name with custom path
+FileName const tempFileName(FileName, std::string const &, bool const dir = false);
+/// Get temporary file name with default path
+FileName const tempFileName(std::string const &, bool const dir = false);
+
+/// Remove and unregister a temporary file.
+void removeTempFile(FileName const &);
+
/** Creates the global LyX temp dir.
\p deflt can be an existing directory name. In this case a new directory
inside \p deflt is created. If \p deflt does not exist yet, \p deflt is
/// How to quote a filename
enum quote_style {
- /** Quote for the (OS dependant) shell. This is needed for command
+ /** Quote for the (OS dependent) shell. This is needed for command
line arguments of subprocesses. */
quote_shell,
- /** Quote a file name for the (OS dependant) shell. This is needed
+ /** Quote a file name for the (OS dependent) shell. This is needed
for file names as command line arguments of subprocesses. */
quote_shell_filename,
/** Quote for python. Use this if you want to store a filename in a
* If @c path contains LaTeX special characters, these are escaped.
* Eg, '~' -> '\\string~'
* If @c path contains spaces, then the returned path is enclosed in
- * "-quotes. This last fix will lead to successful compiliation of the
+ * "-quotes. This last fix will lead to successful compilation of the
* LaTeX file only if a sufficiently modern LaTeX compiler is used.
* If @c ext == EXCLUDE_EXTENSION the extension is left outside the quotes.
* This is needed for pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4)
* \param format The file format as used by kpsewhich, e.g. "bib", "bst" etc.
*/
FileName const findtexfile(std::string const & fil,
- std::string const & format);
+ std::string const & format,
+ bool const onlykpse = false);
/** \param file1, file2 the two files to be compared. Must have absolute paths.
* \returns 1 if \c file1 has a more recent timestamp than \c file2,
/// Does file \p file need to be updated by configure.py?
bool configFileNeedsUpdate(std::string const & file);
-typedef std::pair<int, std::string> cmd_ret;
+struct cmd_ret {
+ bool valid;
+ std::string result;
+};
cmd_ret const runCommand(std::string const & cmd);