]> git.lyx.org Git - lyx.git/blob - src/support/package.h
69d11c6f762af35cfc90ecf61394af73a89461c2
[lyx.git] / src / support / package.h
1 // -*- C++ -*-
2 /**
3  * \file package.h
4  * This file is part of LyX, the document processor.
5  * Licence details can be found in the file COPYING.
6  *
7  * \author Angus Leeming
8  *
9  * Full author contact details are available in file CREDITS.
10  *
11  * A store of the paths to the various different directoies used
12  * by LyX. These paths differ markedly from one OS to another,
13  * following the local Windows, MacOS X or Posix conventions.
14  */
15 #ifndef LYX_PACHAGE_H
16 #define LYX_PACHAGE_H
17
18 #include <string>
19
20 namespace lyx {
21 namespace support {
22
23 class Package;
24
25 /** When run in-place <build-dir>/src/lyx is one level up from
26  *  the <build-dir> whilst <build-dir>/src/tex2lyx/tex2lyx is
27  *  two levels up.
28  */
29 enum exe_build_dir_to_top_build_dir {
30         top_build_dir_is_one_level_up,
31         top_build_dir_is_two_levels_up
32 };
33
34
35 /** Initialise package() with the command line data.
36  *  This data is exactly as it was passed in the argv[] array.
37  *
38  *  @param command_line_arg0 argv[0], the name of the LyX executable
39  *  as passed on the command line.
40  *
41  *  @param command_line_system_support_dir, the LyX system dir,
42  *  as specified on the command line with "-sysdir <path to dir>".
43  *
44  *  @param command_line_user_support_dir, the LyX user dir,
45  *  as specified on the command line with "-userdir <path to dir>".
46  */
47 void init_package(std::string const & command_line_arg0,
48                   std::string const & command_line_system_support_dir,
49                   std::string const & command_line_user_support_dir,
50                   exe_build_dir_to_top_build_dir);
51
52 /** Accessor to the global data.
53  *  Asserts that init_package() has been called first.
54  */
55 Package const & package();
56
57 class Package {
58 public:
59         /// Default constructor does not lead to the paths being set.
60         Package();
61
62         /** Called by init_package, above.
63          *  All paths will be initialized.
64          */
65         Package(std::string const & command_line_arg0,
66                 std::string const & command_line_system_support_dir,
67                 std::string const & command_line_user_support_dir,
68                 exe_build_dir_to_top_build_dir);
69
70         /** The directory containing the LyX executable.
71          */
72         std::string const & binary_dir() const;
73
74         /** The top of the LyX source code tree.
75          */
76         std::string const & top_srcdir() const;
77
78         /** The path to the system-level support files
79          *  we're actually going to use.
80          */
81         std::string const & system_support() const;
82
83         /** The path to the autogenerated support files
84          *  when running in-place.
85          */
86         std::string const & build_support() const;
87
88         /** The path to the user-level support files.
89          */
90         std::string const & user_support() const;
91
92         /** The user_support directory was set explicitly using either
93          *  the -userdir command line switch or
94          *  the LYX_USERDIR_14x environment variable.
95          */
96         bool explicit_user_support() const;
97
98         /** The path to the locale directory.
99          */
100         std::string const & locale_dir() const;
101
102         /** The default document directory.
103          *  Can be reset by LyXRC.
104          */
105         std::string & document_dir() const;
106
107         /** The path to the system temporary directory.
108          *  (Eg /tmp on *nix.)
109          */
110         std::string const & system_temp_dir() const;
111
112         /** The path to the temporary directory used by LyX.
113          *  (Eg /tmp/lyx_tmpdir800nBI1z9 on *nix.)
114          *  Can be reset by LyXRC.
115          */
116         std::string & temp_dir() const;
117
118         /** Used when setting the user_support directory.
119          *  Used also when expanding "~/" or contracting to "~/". (filetools.C)
120          *  Used in emergencyWrite (bufferlist.C) as one possible location
121          *  for the dump.
122          *  This may be empty (e. g. when run under a CGI environment)
123          */
124         std::string const & home_dir() const;
125
126         /// Command to run the configure script
127         std::string const & configure_command() const;
128
129 private:
130         std::string binary_dir_;
131         std::string system_support_dir_;
132         std::string build_support_dir_;
133         std::string user_support_dir_;
134         std::string locale_dir_;
135         mutable std::string document_dir_;
136         mutable std::string temp_dir_;
137         std::string system_temp_dir_;
138         std::string home_dir_;
139         std::string configure_command_;
140         bool explicit_user_support_dir_;
141 };
142
143
144 inline
145 Package::Package() {}
146
147 inline
148 std::string const & Package::binary_dir() const
149 {
150         return binary_dir_;
151 }
152
153 inline
154 std::string const & Package::system_support() const
155 {
156         return system_support_dir_;
157 }
158
159 inline
160 std::string const & Package::build_support() const
161 {
162         return build_support_dir_;
163 }
164
165 inline
166 std::string const & Package::user_support() const
167 {
168         return user_support_dir_;
169 }
170
171 inline
172 bool Package::explicit_user_support() const
173 {
174         return explicit_user_support_dir_;
175 }
176
177 inline
178 std::string const & Package::locale_dir() const
179 {
180         return locale_dir_;
181 }
182
183 inline
184 std::string & Package::document_dir() const
185 {
186         return document_dir_;
187 }
188
189 inline
190 std::string & Package::temp_dir() const
191 {
192         return temp_dir_;
193 }
194
195 inline
196 std::string const & Package::system_temp_dir() const
197 {
198         return system_temp_dir_;
199 }
200
201 inline
202 std::string const & Package::home_dir() const
203 {
204         return home_dir_;
205 }
206
207 inline
208 std::string const & Package::configure_command() const
209 {
210         return configure_command_;
211 }
212
213 } // namespace support
214 } // namespace lyx
215
216 #endif // LYX_PACHAGE_H