X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Frelocate.cc;h=2adfb6f2f75c759d9b96b3d36fa383470c5975bd;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=0d600820ae0fa977029b7e439aaae2a4ba86c9e6;hpb=08560a1b8076630c4fc6cb9b902614d8b74fd6fc;p=lilypond.git diff --git a/lily/relocate.cc b/lily/relocate.cc index 0d600820ae..2adfb6f2f7 100644 --- a/lily/relocate.cc +++ b/lily/relocate.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 2005--2012 Han-Wen Nienhuys + Copyright (C) 2005--2015 Han-Wen Nienhuys LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -42,7 +42,7 @@ #define FRAMEWORKDIR ".." int -sane_putenv (char const *key, string value, bool overwrite) +sane_putenv (char const *key, const string &value, bool overwrite) { if (overwrite || !getenv (key)) { @@ -64,7 +64,7 @@ sane_putenv (char const *key, string value, bool overwrite) } static int -set_env_file (char const *key, string value, bool overwrite = false) +set_env_file (char const *key, const string &value, bool overwrite = false) { if (is_file (value)) return sane_putenv (key, value, overwrite); @@ -75,7 +75,7 @@ set_env_file (char const *key, string value, bool overwrite = false) } static int -set_env_dir (char const *key, string value) +set_env_dir (char const *key, const string &value) { if (is_dir (value)) return sane_putenv (key, value, false); @@ -108,7 +108,7 @@ prepend_env_path (char const *key, string value) #endif static void -prefix_relocation (string prefix) +prefix_relocation (const string &prefix) { string bindir = prefix + "/bin"; string datadir = prefix + "/share"; @@ -141,7 +141,7 @@ prefix_relocation (string prefix) */ static void -framework_relocation (string prefix) +framework_relocation (const string &prefix) { debug_output (_f ("Relocation: framework_prefix=%s", prefix)); @@ -165,66 +165,51 @@ setup_paths (char const *argv0_ptr) if (relocate_binary) { string prefix_directory; - if (getenv ("LILYPOND_RELOCATE_PREFIX")) + string argv0_abs; + if (argv0_filename.is_absolute ()) { - prefix_directory = getenv ("LILYPOND_RELOCATE_PREFIX"); -#ifdef __MINGW32__ - /* Normalize file name. */ - prefix_directory = File_name (prefix_directory).to_string (); -#endif /* __MINGW32__ */ - - prefix_relocation (prefix_directory); - string bindir = prefix_directory + "/bin"; - framework_relocation (bindir); + argv0_abs = argv0_filename.to_string (); + debug_output (_f ("Relocation: is absolute: argv0=%s\n", argv0_ptr)); } - else if (relocate_binary) + else if (argv0_filename.dir_.length ()) { - string argv0_abs; - if (argv0_filename.is_absolute ()) - { - argv0_abs = argv0_filename.to_string (); - debug_output (_f ("Relocation: is absolute: argv0=%s\n", argv0_ptr)); - } - else if (argv0_filename.dir_.length ()) - { - argv0_abs = get_working_directory () - + "/" + string (argv0_filename.to_string ()); - debug_output (_f ("Relocation: from cwd: argv0=%s\n", argv0_ptr)); - } - else - { - /* Find absolute ARGV0 name, using PATH. */ - File_path path; - path.parse_path (getenv ("PATH")); + argv0_abs = get_working_directory () + + "/" + string (argv0_filename.to_string ()); + debug_output (_f ("Relocation : from cwd: argv0=%s\n", argv0_ptr)); + } + else + { + /* Find absolute ARGV0 name, using PATH. */ + File_path path; + path.parse_path (getenv ("PATH")); #ifndef __MINGW32__ - argv0_abs = path.find (argv0_filename.to_string ()); + argv0_abs = path.find (argv0_filename.to_string ()); #else /* __MINGW32__ */ - path.prepend (get_working_directory ()); - char const *ext[] = {"exe", "", 0 }; - argv0_abs = path.find (argv0_filename.to_string (), ext); + path.prepend (get_working_directory ()); + char const *ext[] = {"exe", "", 0 }; + argv0_abs = path.find (argv0_filename.to_string (), ext); #endif /* __MINGW32__ */ - debug_output (_f ("Relocation: from PATH=%s\nargv0=%s", - path.to_string ().c_str (), argv0_ptr), true); + debug_output (_f ("Relocation: from PATH=%s\nargv0=%s\n", + path.to_string ().c_str (), argv0_ptr), true); - if (argv0_abs.empty ()) - programming_error ("cannot find absolute argv0"); - } + if (argv0_abs.empty ()) + programming_error ("cannot find absolute argv0"); + } - string bindir = dir_name (argv0_abs); - string argv0_prefix = dir_name (bindir); - string compile_prefix = dir_name (dir_name (dir_name (lilypond_datadir))); - if (argv0_prefix != compile_prefix) - { - prefix_relocation (argv0_prefix); - prefix_directory = argv0_prefix; - } - if (argv0_prefix != compile_prefix || string (FRAMEWORKDIR) != "..") - { - framework_relocation (bindir + "/" + FRAMEWORKDIR); - prefix_directory = bindir + "/" + FRAMEWORKDIR; - } + string bindir = dir_name (argv0_abs); + string argv0_prefix = dir_name (bindir); + string compile_prefix = dir_name (dir_name (dir_name (lilypond_datadir))); + if (argv0_prefix != compile_prefix) + { + prefix_relocation (argv0_prefix); + prefix_directory = argv0_prefix; + } + if (argv0_prefix != compile_prefix || string (FRAMEWORKDIR) != "..") + { + framework_relocation (bindir + "/" + FRAMEWORKDIR); + prefix_directory = bindir + "/" + FRAMEWORKDIR; } lilypond_datadir = prefix_directory @@ -272,7 +257,7 @@ setup_paths (char const *argv0_ptr) } string -expand_environment_variables (string orig) +expand_environment_variables (const string &orig) { char const *start_ptr = orig.c_str (); char const *ptr = orig.c_str (); @@ -355,7 +340,7 @@ read_line (FILE *f) } void -read_relocation_file (string filename) +read_relocation_file (const string &filename) { debug_output (_f ("Relocation file: %s", filename.c_str ()) + "\n"); char const *cname = filename.c_str (); @@ -398,7 +383,7 @@ read_relocation_file (string filename) } void -read_relocation_dir (string dirname) +read_relocation_dir (const string &dirname) { if (DIR *dir = opendir (dirname.c_str ())) while (struct dirent *ent = readdir (dir))