4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Angus Leeming
9 * Full author contact details are available in file CREDITS.
11 * A store of the paths to the various different directories used
12 * by LyX. These paths differ markedly from one OS to another,
13 * following the local Windows, MacOS X or Posix conventions.
19 #include "support/FileName.h"
30 /** Initialise package() with the command line data.
31 * This data is exactly as it was passed in the argv[] array.
33 * @param command_line_arg0 argv[0], the name of the LyX executable
34 * as passed on the command line.
36 * @param command_line_system_support_dir, the LyX system dir,
37 * as specified on the command line with "-sysdir <path to dir>".
39 * @param command_line_user_support_dir, the LyX user dir,
40 * as specified on the command line with "-userdir <path to dir>".
42 void init_package(std::string const & command_line_arg0,
43 std::string const & command_line_system_support_dir,
44 std::string const & command_line_user_support_dir);
46 /** Accessor to the global data.
47 * Asserts that init_package() has been called first.
49 Package const & package();
53 /// Default constructor does not lead to the paths being set.
54 Package() : explicit_user_support_dir_(false), in_build_dir_(false) {}
56 /** Called by init_package, above.
57 * All paths will be initialized.
59 Package(std::string const & command_line_arg0,
60 std::string const & command_line_system_support_dir,
61 std::string const & command_line_user_support_dir);
63 /** The directory containing the main executable (LyX or tex2lyx).
65 FileName const & binary_dir() const { return binary_dir_; }
67 /** The absolute path to the LyX executable.
69 FileName const & lyx_binary() const { return lyx_binary_; }
71 /** The absolute path to the LyX package directory.
72 * This is one level up from the binary dir.
74 FileName const & lyx_dir() const { return lyx_dir_; }
76 /** The top of the LyX source code tree.
78 static FileName const & top_srcdir();
80 /** The path to the system-level support files
81 * we're actually going to use.
83 FileName const & system_support() const { return system_support_dir_; }
85 /** The path to the autogenerated support files
86 * when running in-place.
88 FileName const & build_support() const { return build_support_dir_; }
90 /** The path to the user-level support files.
92 FileName const & user_support() const { return user_support_dir_; }
94 /** The user_support directory was set explicitly using either
95 * the -userdir command line switch or
96 * the LYX_USERDIR_${major}${minor}x environment variable.
98 bool explicit_user_support() const { return explicit_user_support_dir_; }
100 /** The path to the locale directory.
102 FileName const & locale_dir() const { return locale_dir_; }
104 /** The file name that should contain the message file (.mo)
105 * for language code \param c. Does not check whether the
106 * file exists. Handles running in place.
108 FileName messages_file(std::string const & c) const;
110 /** The default document directory.
111 * Can be reset by LyXRC.
113 FileName & document_dir() const { return document_dir_; }
115 /** The path to the system temporary directory.
118 FileName const & system_temp_dir() const { return system_temp_dir_; }
121 /** The path to the temporary directory used by %LyX.
122 * (Eg /tmp/lyx_tmpdir800nBI1z9 on *nix.)
123 * Can be reset by LyXRC.
125 FileName const & temp_dir() const { return temp_dir_; }
126 void set_temp_dir(FileName const & temp_dir) const;
129 /** Used when setting the user_support directory.
130 * Used also when expanding "~/" or contracting to "~/". (filetools.cpp)
131 * Used in emergencyWrite (BufferList.cpp) as one possible location
133 * This may be empty (e. g. when run under a CGI environment)
135 static FileName const & get_home_dir();
138 int reconfigureUserLyXDir(std::string const & option) const;
141 std::string getConfigureLockName() const;
144 FileName binary_dir_;
145 FileName lyx_binary_;
147 FileName system_support_dir_;
148 FileName build_support_dir_;
149 FileName user_support_dir_;
150 FileName locale_dir_;
151 mutable FileName document_dir_;
152 mutable FileName temp_dir_;
153 FileName system_temp_dir_;
154 /** Command to run the configure script.
155 * Caution: This is "ready-to-run", i.e. in the locale encoding, not
158 mutable std::string configure_command_;
159 bool explicit_user_support_dir_;
163 } // namespace support