source file of the GNU LilyPond music typesetter
- (c) 1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include <stdlib.h>
#include "global-ctor.hh"
#include "kpath.hh"
+Array<String> failed_files;
+
static int sane_putenv (char const* key, char const* value, bool overwrite = false);
/*
/* Current output name. */
String output_name_global;
-/* Run in safe mode? -- FIXME: should be re-analised */
+/* Run in safe mode? */
bool safe_global_b = false;
/* Verbose progress indication? */
/* another bug in option parser: --output=foe is taken as an abbreviation
for --output-format */
{_i ("EXT"), "format", 'f', _i ("use output format EXT")},
- {0, "help", 'h', _i ("this help")},
+ {0, "help", 'h', _i ("print this help")},
{_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, "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")},
-#if 0
- /*
- should audit again.
- */
- {0, "safe", 's', _i ("inhibit file output naming and exporting")},
-#endif
+ {0, "safe-mode", 's', _i ("run in safe mode")},
{0, "version", 'v', _i ("print version number")},
- {0, "verbose", 'V', _i ("verbose")},
+ {0, "verbose", 'V', _i ("be verbose")},
{0, "warranty", 'w', _i ("show warranty and copyright")},
{0,0,0,0}
};
{
fputs (gnu_lilypond_version_string ().to_str0 (), out);
}
-
+
void
dirinfo (FILE *out)
{
{
printf ("\n");
/* No version number or newline here. It confuses help2man. */
- printf (_f ("Usage: %s [OPTION]... FILE...", "lilypond").to_str0 ());
+ printf (_f ("Usage: %s [OPTIONS]... FILE...", "lilypond").to_str0 ());
printf ("\n\n");
- printf (_ ("Typeset music and or play MIDI from FILE").to_str0 ());
+ printf (_ ("Typeset music and/or produce MIDI from FILE.").to_str0 ());
printf ("\n\n");
- printf(_ (
-"LilyPond is a music typesetter. It produces beautiful sheet music\n"
-"using a high level description file as input. LilyPond is part of \n"
-"the GNU Project.\n"
+ printf(_ ("LilyPond produces beautiful music notation.\n"
+ "For more information, see http://lilypond.org/"
).to_str0 ());
printf ("\n");
printf ("\n");
printf (Long_option_init::table_string (options_static).to_str0 ());
printf ("\n");
+ printf (_f ("Report bugs to %s.", "bug-lilypond@gnu.org").to_str0 ());
printf ("\n");
-
- printf (_f ("Report bugs to %s", "bug-lilypond@gnu.org").to_str0 ());
printf ("\n");
}
"lilypond").to_str0 ());
printf ("\n");
- printf (_f ("Copyright (c) %s by", "1996--2002").to_str0 ());
+ printf (_f ("Copyright (c) %s by", "1996--2003").to_str0 ());
printf ("\n");
printf (" Han-Wen Nienhuys <hanwen@cs.uu.nl>\n");
printf (" Jan Nieuwenhuizen <janneke@gnu.org>\n");
printf ("\n");
printf (_ ("GNU LilyPond -- The music typesetter").to_str0 ());
printf ("\n");
- printf (_f ("Copyright (c) %s by", "1996--2002").to_str0 ());
+ printf (_f ("Copyright (c) %s by", "1996--2003").to_str0 ());
printf ("\n");
printf (" Han-Wen Nienhuys <hanwen@cs.uu.nl>\n");
printf (" Jan Nieuwenhuizen <janneke@gnu.org>\n");
"\n"
" You should have received a copy (refer to the file COPYING) of the\n"
"GNU General Public License along with this program; if not, write to\n"
- "the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,\n"
+ "the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,\n"
"USA.\n").to_str0 ());
}
/* Where LilyPond's init files live. Typically:
LILYPOND_DATADIR = /usr/local/share/lilypond
LOCAL_LILYPOND_DATADIR = /usr/local/share/lilypond/1.5.68 */
-char const *prefix_directory[2] = {LILYPOND_DATADIR, LOCAL_LILYPOND_DATADIR};
+char const *prefix_directory[] = {LILYPOND_DATADIR, LOCAL_LILYPOND_DATADIR, 0};
void
setup_paths ()
prefix_directory[1] = lilypond_prefix;
#if HAVE_GETTEXT
- setlocale (LC_ALL, ""); /* enable locales */
- setlocale (LC_NUMERIC, "C"); /* musn't have comma's in TeX output... */
+ /* Enable locales */
+ setlocale (LC_ALL, "");
+ /* Mustn't have commas in TeX output... */
+ setlocale (LC_NUMERIC, "C");
String lily_locale_dir;
String name (PACKAGE);
name.to_lower ();
-
- /*
- urg; what *do* we want with $LILYPONDPREFIX, DIR_DATADIR and $prefix/share
- handy for multiple source-dir runs, though...
- */
- if (!String (prefix_directory[0]).empty_b ())
- {
- lily_locale_dir = String (prefix_directory[0]) + "/share/locale";
- bindtextdomain (name.to_str0 (), lily_locale_dir.to_str0 ());
- }
- else
- bindtextdomain (name.to_str0 (), LOCALEDIR);
+ bindtextdomain (name.to_str0 (), LOCALEDIR);
textdomain (name.to_str0 ());
#endif
LILYPONDPREFIX to lilypond-x.y.z */
char *suffixes[] = {"ly", "afm", "mf/out", "scm", "tfm", "ps", 0};
- for (unsigned i = 0; i < sizeof (prefix_directory)
- / sizeof (*prefix_directory); i++)
+ for (unsigned i = 0; prefix_directory[i]; i++)
for (char **s = suffixes; *s; s++)
{
String p = prefix_directory[i] + to_string ('/') + String (*s);
- global_path.add (p);
+ global_path.prepend (p);
#if !KPATHSEA
/* Urg: GNU make's $ (word) index starts at 1 */
distill_inname (String str)
{
Path p = split_path (str);
- if (str.empty_b () || str == "-")
+ if (str.is_empty () || str == "-")
p.base = "-";
else
{
String orig_ext = p.ext;
- char const *extensions[] = {"ly", "fly", "sly", "", 0};
+ char const *extensions[] = {"ly", "", 0};
for (int i = 0; extensions[i]; i++)
{
p.ext = orig_ext;
- if (*extensions[i] && !p.ext.empty_b ())
+ if (*extensions[i] && !p.ext.is_empty ())
p.ext += ".";
p.ext += extensions[i];
- if (!global_path.find (p.string ()).empty_b ())
+ if (!global_path.find (p.to_string ()).is_empty ())
break;
}
/* Reshuffle extension */
- p = split_path (p.string ());
+ p = split_path (p.to_string ());
}
return p;
}
-String
-format_to_ext (String format)
-{
- if (format == "tex")
- /* .lytex change put off */
- return "tex"; // "lytex";
- return format;
-}
-
void
prepend_load_path (String dir)
{
/* Engravers use lily.scm contents, need to make Guile find it.
Prepend onto GUILE %load-path, very ugh. */
- for (unsigned i = 0; i < sizeof (prefix_directory)
- / sizeof (*prefix_directory); i++)
+ for (unsigned i = 0; prefix_directory[i]; i++)
{
prepend_load_path (prefix_directory[i]);
+
/* Junk this. We should make real modules iso. just loading files. */
prepend_load_path (String (prefix_directory[i]) + "/scm");
}
dirinfo (stderr);
ly_init_guile ();
+ call_constructors ();
progress_indication ("\n");
- call_constructors ();
- all_fonts_global = new All_font_metrics (global_path.string ());
+ 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 ());
do
{
String infile (arg);
- Midi_def::reset_score_count ();
- Paper_def::reset_score_count ();
-
Path inpath = distill_inname (infile);
/* By default, use base name of input file for output file name */
Path outpath = inpath;
- if (inpath.string () != "-")
- outpath.ext = format_to_ext (output_format_global);
+ if (inpath.to_string () != "-")
+ outpath.ext = output_format_global;
/* By default, write output to cwd; do not copy directory part
of input file name */
outpath.root = "";
outpath.dir = "";
- if (!output_name_global.empty_b ())
+ if (!output_name_global.is_empty ())
outpath = split_path (output_name_global);
String init;
- if (!init_name_global.empty_b ())
+ if (!init_name_global.is_empty ())
init = init_name_global;
- else if (!inpath.ext.empty_b ())
- init = "init." + inpath.ext;
else
init = "init.ly";
- /* Burp: output name communication goes through _global */
- String save_output_name_global = output_name_global;
- output_name_global = outpath.string ();
- do_one_file (init, inpath.string ());
- output_name_global = save_output_name_global;
+ do_one_file (init, inpath.to_string (), outpath.to_string ());
p++;
} while ((arg = oparser_p_static->get_next_arg ()));
delete oparser_p_static;
oparser_p_static = 0;
+
+ 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);
}
sane_putenv ("GUILE_INIT_SEGMENT_SIZE_1", "4194304", false);
sane_putenv ("GUILE_MAX_SEGMENT_SIZE", "8388608", false);
- ly_init_kpath (argv[0]);
+ init_kpath (argv[0]);
bool help_b = false;
oparser_p_static = new Getopt_long (argc, argv, options_static);
{
String s = oparser_p_static->optional_argument_str0_;
Path p = split_path (s);
- if (s != "-" && p.ext.empty_b ())
- p.ext = format_to_ext (output_format_global);
- output_name_global = p.string ();
+ if (s != "-" && p.ext.is_empty ())
+ p.ext = output_format_global;
+
+ output_name_global = p.to_string ();
}
break;
case 'e':
case 'f':
if (oparser_p_static->optional_argument_str0_ == "help")
{
- printf("See http://lilypond.org/wiki?OutputFormats for more information.\n"\
- "This option is for developers only.\n");
+ printf("This option is for developers only; Read the source code for more information\n");
+
+ // actually it's not here,
+ // but we award you special points for looking here.
+
exit (0);
}
output_format_global = oparser_p_static->optional_argument_str0_;
break;
}
}
- identify (stderr);
if (help_b)
{