]> git.lyx.org Git - lyx.git/blobdiff - src/support/package.C.in
make "make distcheck" work
[lyx.git] / src / support / package.C.in
index f87537022ee65da2c68fecd6d0b16c861e22e6b9..9a9a2afc7b6fe0a6468fcab8dd24b6b9aca281cb 100644 (file)
@@ -19,6 +19,7 @@
 #include "debug.h"
 #include "gettext.h"
 
+#include "support/environment.h"
 #include "support/filetools.h"
 #include "support/lstrings.h"
 #include "support/os.h"
@@ -66,7 +67,8 @@ bool initialised_ = false;
 
 void init_package(string const & command_line_arg0,
                  string const & command_line_system_support_dir,
-                 string const & command_line_user_support_dir)
+                 string const & command_line_user_support_dir,
+                 exe_build_dir_to_top_build_dir top_build_dir_location)
 {
        // Can do so only once.
        if (initialised_)
@@ -74,7 +76,8 @@ void init_package(string const & command_line_arg0,
 
        package_ = Package(command_line_arg0,
                           command_line_system_support_dir,
-                          command_line_user_support_dir);
+                          command_line_user_support_dir,
+                          top_build_dir_location);
        initialised_ = true;
 }
 
@@ -93,7 +96,9 @@ namespace {
 
 string const abs_path_from_binary_name(string const & exe);
 
-std::pair<string, string> const get_build_dirs(string const & abs_binary);
+std::pair<string, string> const
+get_build_dirs(string const & abs_binary,
+              exe_build_dir_to_top_build_dir top_build_dir_location);
 
 string const get_document_dir(string const & home_dir);
 
@@ -117,7 +122,8 @@ get_user_support_dir(string const & default_user_support_dir,
 
 Package::Package(string const & command_line_arg0,
                 string const & command_line_system_support_dir,
-                string const & command_line_user_support_dir)
+                string const & command_line_user_support_dir,
+                exe_build_dir_to_top_build_dir top_build_dir_location)
        : explicit_user_support_dir_(false)
 {
        home_dir_ = get_home_dir();
@@ -129,7 +135,7 @@ Package::Package(string const & command_line_arg0,
 
        // Is LyX being run in-place from the build tree?
        boost::tie(build_support_dir_, system_support_dir_) =
-               get_build_dirs(abs_binary);
+               get_build_dirs(abs_binary, top_build_dir_location);
 
        if (build_support_dir_.empty())
                system_support_dir_ =
@@ -224,7 +230,27 @@ string const win32_folder_path(int folder_id)
 #endif
 
 
-std::pair<string, string> const get_build_dirs(string const & abs_binary)
+std::string const
+get_build_support_dir(std::string const & binary_dir,
+                     exe_build_dir_to_top_build_dir top_build_dir_location)
+{
+       string indirection;
+       switch (top_build_dir_location) {
+       case top_build_dir_is_one_level_up:
+               indirection = "../lib";
+               break;
+       case top_build_dir_is_two_levels_up:
+               indirection = "../../lib";
+               break;
+       }
+
+       return NormalizePath(AddPath(binary_dir, indirection));
+}
+
+
+std::pair<string, string> const
+get_build_dirs(string 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...";
 
@@ -241,7 +267,7 @@ std::pair<string, string> const get_build_dirs(string const & abs_binary)
                // Try and find "lyxrc.defaults".
                string const binary_dir = OnlyPath(binary);
                string const build_support_dir =
-                       NormalizePath(AddPath(binary_dir, "../lib"));
+                       get_build_support_dir(binary_dir, top_build_dir_location);
 
                if (!FileSearch(build_support_dir, "lyxrc.defaults").empty()) {
                        // Try and find "chkconfig.ltx".
@@ -294,9 +320,9 @@ string const get_document_dir(string const & home_dir)
 string const get_home_dir()
 {
 #if defined (USE_WINDOWS_PACKAGING)
-       string const home_dir = GetEnv("USERPROFILE");
+       string const home_dir = getEnv("USERPROFILE");
 #else // Posix-like.
-       string const home_dir = GetEnv("HOME");
+       string const home_dir = getEnv("HOME");
 #endif
 
        return os::internal_path(home_dir);
@@ -625,7 +651,7 @@ 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)
 {
-       string const dir = os::internal_path(GetEnv(env_var));
+       string const dir = os::internal_path(getEnv(env_var));
        return dir.empty() ? dir : MakeAbsPath(dir);
 }
 
@@ -662,7 +688,7 @@ bool check_env_var_dir(string const & dir,
                // translation.
                string const fmt =
                _("Invalid %1$s environment variable.\n%2$s is not a directory.");
-               
+
                lyxerr << bformat(fmt, env_var, dir)
                       << std::endl;
        }