]> git.donarmstrong.com Git - lilypond.git/commitdiff
(expand_environment_variables): new function.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 21 Apr 2006 21:02:13 +0000 (21:02 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 21 Apr 2006 21:02:13 +0000 (21:02 +0000)
(read_line): id.
(read_relocation_file): id.

ChangeLog
THANKS
lily/main.cc
lily/relocate.cc

index 2cbec4e08ef7ef4052727591e19a74f0c98af3a4..2f1c086e407e5429e37a5a9361b7ff3e84212df0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2006-04-22  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * lily/relocate.cc (expand_environment_variables): new function.
+       (read_line): id.
+       (read_relocation_file): id.
+
        * scm/stencil.scm (eps-file->stencil): fix EPS PS embedding code 
 
 2006-04-21  Erlend Aasland  <erlenda@gmail.com>
diff --git a/THANKS b/THANKS
index 9ea568b509030d5def5c34e6d1fc79f04f81e62e..112cec27c261165a130563744ed35df1d139f392 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -41,12 +41,12 @@ Colin Wilding
 David Rogers
 J. Leung
 Harald Wellmann
+Keith Packard
 Orm Finnendahl
 Rick Hansen
 Stephen Carter
 Werner Lemberg
 
-
 Release 2.8
 ***********
 
index 255efe5b80a1be719be38f239e91462b79878ff7..481d4542a69ca7a0d1e4c1edf9da03b7a8efd87a 100644 (file)
@@ -604,12 +604,15 @@ setup_guile_env ()
   sane_putenv ("GUILE_MIN_YIELD_MALLOC", yield, overwrite);
 }
 
+void read_relocation_file(string);
 int
 main (int argc, char **argv)
 {
   if (getenv ("LILYPOND_VERBOSE"))
     be_verbose_global = true;
 
+  read_relocation_file ("test.reloc");
+
   setup_localisation ();
   parse_argv (argc, argv);
   if (isatty (STDIN_FILENO))
index 6bfbc8ae5797ff2433fbfd1981ca66ec8887689a..65e4bc29a74973b9b915ab4e384259a66145e572 100644 (file)
@@ -277,3 +277,130 @@ setup_paths (char const *argv0_ptr)
   for (vsize i = 0; i < dirs.size (); i++)
     global_path.prepend (dirs[i]);
 }
+
+
+
+string
+expand_environment_variables (string orig)
+{
+  const char *start_ptr = orig.c_str();
+  const char *ptr = orig.c_str();
+  size_t len = orig.length();
+
+  string out;
+  while (ptr < start_ptr + len)
+    {
+      char *dollar = strchr (ptr, '$');
+      
+      if (dollar != NULL)
+       {
+         char *start_var = dollar + 1;
+         char *end_var = start_var;
+         char *start_next = end_var;
+         
+         out += string (ptr, dollar - ptr);
+         ptr = dollar;
+
+         if (*start_var == '{')
+           {
+             start_var ++;
+             
+             end_var = strchr (start_var, '}');
+             
+             if (end_var == NULL)
+               {
+                 end_var = start_var + len;
+                 start_next = end_var;
+               }
+             else
+               {
+                 start_next = end_var + 1; 
+               }
+           }
+         else 
+           {
+             /*
+               Hmm. what to do for $1 , $~ etc.?
+              */
+             do
+               {
+                 end_var ++;
+               }
+             while (isalnum (*end_var) || *end_var == '_');
+             start_next = end_var;
+           }
+
+         if (start_var < end_var)
+           {
+             string var_name (start_var, end_var - start_var);
+             const char *value = getenv (var_name.c_str());
+             if (value != NULL)
+               out += string (value);
+
+             ptr = start_next;
+           }
+       }
+      else
+       break;
+
+    }
+
+  out += ptr;
+
+  return out;
+}
+
+
+string
+read_line (FILE *f)
+{
+  string out;
+  
+  int c = 0;
+  while ((c = fgetc (f)) != EOF && c != '\n')
+    out += c;
+
+  return out;
+}
+
+void
+read_relocation_file (string filename)
+{
+  char const *cname = filename.c_str ();
+  FILE *f = fopen (cname, "r");
+  if (!f)
+    error (_f ("can't open file %s", cname));
+
+  while (!feof (f))
+    {
+      string line = read_line (f);
+      size_t idx = line.find (' ');
+      if (idx == NPOS)
+       continue;
+      
+      string command = line.substr (0, idx);
+      line = line.substr (idx + 1);
+      
+      if (idx == NPOS)
+       continue;
+      idx = line.find ('=');
+
+      string variable = line.substr (0, idx);
+      string value = line.substr (idx + 1);
+
+      value = expand_environment_variables (value);
+
+      if (command == "set")
+       sane_putenv (variable.c_str(), value, true);
+      else if (command == "setdir")
+       set_env_dir (variable.c_str(), value);
+      else if (command == "setfile")
+       set_env_file (variable.c_str(), value);
+      else if (command == "prependdir")
+       prepend_env_path (variable.c_str (), value);
+      else
+       error ( _f("Unknown relocation command %s", command));
+    }
+
+  fclose (f);
+}