]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/relocate.cc
Web-ja: update introduction
[lilypond.git] / lily / relocate.cc
index 0d600820ae0fa977029b7e439aaae2a4ba86c9e6..879377a1cc0928bae14c6fd92c5fd8f032eacac2 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2005--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
 #include "version.hh"
 #include "warn.hh"
 
+#ifdef __MINGW32__
+#include <winbase.h>
+#endif
+
 #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 +68,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 +79,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);
@@ -103,12 +107,8 @@ prepend_env_path (char const *key, string value)
   return -1;
 }
 
-#ifdef __MINGW32__
-#include <winbase.h>
-#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,53 @@ 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;
+          char *p = getenv ("PATH");
+          if (p)
+            path.parse_path (p);
 
 #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 +259,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 +342,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 +385,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))