]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/main.cc
* SConstruct: Further development.
[lilypond.git] / lily / main.cc
index 337918b3f21d9cb7c6ab85f5696e395d676015df..e171dfff822f7aebbe11e757745c4b44ca7fd60e 100644 (file)
 #include <locale.h>
 #include <string.h>
 
-#include "config.h"
+#include "config.hh"
 
 #if HAVE_GETTEXT
 #include <libintl.h>
 #endif
 
-#include "lily-guile.hh"
-#include "lily-version.hh"
 #include "all-font-metrics.hh"
+#include "file-name.hh"
+#include "file-path.hh"
 #include "getopt-long.hh"
+#include "global-ctor.hh"
+#include "kpath.hh"
+#include "lily-guile.hh"
+#include "lily-version.hh"
+#include "main.hh"
 #include "misc.hh"
+#include "output-def.hh"
 #include "string.hh"
-#include "main.hh"
-#include "file-path.hh"
-#include "input-file-results.hh"
 #include "warn.hh"
-#include "lily-guile.hh"
-#include "paper-def.hh"
-#include "midi-def.hh"
-#include "global-ctor.hh"
-#include "kpath.hh"
-
-Array<String> failed_files;
 
 /*
  * Global options that can be overridden through command line.
  */
 
-/* Write dependencies file? */
-bool dependency_global_b = false;
-
-/* Prepend to dependencies */
-String dependency_prefix_global;
-
 /* Names of header fields to be dumped to a separate file. */
 Array<String> dump_header_fieldnames_global;
 
@@ -68,22 +58,18 @@ bool safe_global_b = false;
 /* Verbose progress indication? */
 bool verbose_global_b = false;
 
-/* Scheme code to execute before parsing, after .scm init */
+/* Scheme code to execute before parsing, after .scm init
+   This is where -e arguments are appended to.
+*/
 String init_scheme_code_string = "(begin #t ";
 
 
+
 /*
  * Miscellaneous global stuff.
  */
-
-All_font_metrics *all_fonts_global;
-int exit_status_global;
 File_path global_path;
 
-/* Number of current score output block.  If there's more than one
-   score block, this counter will be added to the output filename. */
-int score_count_global;
-
 
 /*
  * File globals.
@@ -141,10 +127,8 @@ static Long_option_init options_static[] =
     {_i ("FIELD"), "header", 'H',  _i ("write header field to BASENAME.FIELD")},
     {_i ("DIR"), "include", 'I',  _i ("add DIR to search path")},
     {_i ("FILE"), "init", 'i',  _i ("use FILE as init file")},
-    {0, "dependencies", 'M',  _i ("write Makefile dependencies")},
     {0, "no-paper", 'm',  _i ("produce MIDI output only")},
     {_i ("FILE"), "output", 'o',  _i ("write output to FILE")},
-    {_i ("DIR"), "dep-prefix", 'P',  _i ("prepend DIR to dependencies")},
     {0, "safe-mode", 's',  _i ("run in safe mode")},
     {0, "version", 'v',  _i ("print version number")},
     {0, "verbose", 'V', _i ("be verbose")},
@@ -156,12 +140,12 @@ static void
 dir_info (FILE *out)
 {
   fputs ("\n", out);
-  fprintf (out, "lilypond_datadir: `%s'\n", LILYPOND_DATADIR);
-  fprintf (out, "local_lilypond_datadir: `%s'\n", LOCAL_LILYPOND_DATADIR);
-  fprintf (out, "localedir: `%s'\n", LOCALEDIR);
+  fprintf (out, "LILYPOND_DATADIR=\"%s\"\n", LILYPOND_DATADIR);
+  fprintf (out, "LOCAL_LILYPOND_DATADIR=\%s\"\n", LOCAL_LILYPOND_DATADIR);
+  fprintf (out, "LOCALEDIR=\"%s\"\n", LOCALEDIR);
 
   char *lilypond_prefix = getenv ("LILYPONDPREFIX");
-  fprintf (out, "LILYPONDPREFIX: `%s'\n",
+  fprintf (out, "LILYPONDPREFIX=\"%s\"\n",
           (lilypond_prefix ? lilypond_prefix : ""));
 }
 
@@ -200,7 +184,7 @@ usage ()
   printf ("\n\n");
   printf (_ ("LilyPond produces beautiful music notation.").to_str0 ());
   printf ("\n");
-  printf (_f ("For more information, see %s,", PROGRAM_URL).to_str0 ());
+  printf (_f ("For more information, see %s", PROGRAM_URL).to_str0 ());
   printf ("\n\n");
   printf (_ ("Options:").to_str0 ());
   printf ("\n");
@@ -227,7 +211,7 @@ setup_paths ()
   if (char const *lilypond_prefix = getenv ("LILYPONDPREFIX"))
     prefix_directory[1] = lilypond_prefix;
 
-  global_path.add ("");
+  global_path.append ("");
 
   /* Adding mf/out make lilypond unchanged source directory, when setting
      LILYPONDPREFIX to lilypond-x.y.z */
@@ -242,7 +226,7 @@ setup_paths ()
 #if !KPATHSEA
        /* Urg: GNU make's $ (word) index starts at 1 */
        int i  = 1;
-       while (global_path.try_add (p + to_string (".") + to_string (i)))
+       while (global_path.try_append (p + to_string (".") + to_string (i)))
          i++;
 #endif
       }
@@ -270,39 +254,44 @@ main_with_guile (void *, int, char **)
   if (verbose_global_b)
     dir_info (stderr);
 
-  ly_init_guile ();
+  ly_c_init_guile ();
   call_constructors ();
   progress_indication ("\n");
 
   all_fonts_global = new All_font_metrics (global_path.to_string ());
 
   init_scheme_code_string += ")";
-  gh_eval_str ((char*) init_scheme_code_string.to_str0 ());
-  
-  bool first = true;
+  scm_c_eval_string ((char*) init_scheme_code_string.to_str0 ());
+
+  /* We accept multiple independent music files on the command line to
+     reduce compile time when processing lots of small files.
+     Starting the GUILE engine is very time consuming.  */
+
+  SCM files = SCM_EOL;
+  SCM *tail = &files;
   while (char const *arg = option_parser->get_next_arg ())
     {
-      do_one_file (arg);
-      first = false;
+      *tail = scm_cons (scm_makfrom0str (arg), SCM_EOL);
+      tail = SCM_CDRLOC (*tail);
     }
   delete option_parser;
   option_parser = 0;
 
-  /* No FILE arguments is now a usage error */
-  if (first)
+  if (files == SCM_EOL)
     {
+      /* No FILE arguments is now a usage error to help newbies.  If you
+        want a filter, you're not a newbie and should know to use file
+        argument `-'.  */
       usage ();
       exit (2);
     }
 
-  if (exit_status_global)
-    {
-      printf ("Failed files: ");
-      for (int i = 0; i < failed_files.size (); i++)
-       printf ("%s ", failed_files[i].to_str0 ());
-      printf ("\n");
-    }
-  exit (exit_status_global);
+  SCM result = scm_call_1 (ly_scheme_function ("lilypond-main"), files);
+  (void) result;
+
+
+  /* Unreachable.  */
+  exit (0);
 }
 
 static void
@@ -328,7 +317,7 @@ parse_argv (int argc, char **argv)
 {
   bool help_b = false;
   option_parser = new Getopt_long (argc, argv, options_static);
-  while (Long_option_init const * opt = (*option_parser) ())
+  while (Long_option_init const *opt = (*option_parser) ())
     {
       switch (opt->shortname_char_)
        {
@@ -339,10 +328,8 @@ parse_argv (int argc, char **argv)
        case 'o':
          {
            String s = option_parser->optional_argument_str0_;
-           Path p = split_path (s);
-           if (s != "-" && p.ext.is_empty ())
-             p.ext = output_format_global;
-           output_name_global = p.to_string ();
+           File_name file_name (s);
+           output_name_global = file_name.to_string ();
          }
          break;
        case 'e':
@@ -361,15 +348,12 @@ parse_argv (int argc, char **argv)
            }
          output_format_global = option_parser->optional_argument_str0_;
          break;
-       case 'P':
-           dependency_prefix_global = option_parser->optional_argument_str0_;
-         break;
        case 'H':
          dump_header_fieldnames_global
            .push (option_parser->optional_argument_str0_);
          break;
        case 'I':
-         global_path.push (option_parser->optional_argument_str0_);
+         global_path.append (option_parser->optional_argument_str0_);
          break;
        case 'i':
          init_name_global = option_parser->optional_argument_str0_;
@@ -383,9 +367,6 @@ parse_argv (int argc, char **argv)
        case 's':
          safe_global_b = true;
          break;
-       case 'M':
-         dependency_global_b = true;
-         break; 
        case 'm':
          no_paper_global_b = true;
          break;