@c -*-texinfo-*-
@node Running LilyPond
@chapter Running LilyPond

This chapter details the technicalities of running LilyPond.

 
@menu
* Invoking lilypond::           
* Error messages::              
* Reporting bugs::              
* Editor support::              
* Invoking lilypond-latex::     
@end menu

@node Invoking lilypond
@section Invoking lilypond
@cindex Invoking LilyPond
@cindex command line options
@cindex options, command line
@cindex switches


The @code{lilypond} may be called as follows from the command line.

@example
        lilypond [@var{option}]@dots{} @var{file}@dots{}
@end example


When invoked with a filename that has no extension, the @file{.ly}
extension is tried first.  To read input from  stdin, use a
dash @code{-} for @var{file}.

When @file{filename.ly} is processed it will produce
@file{filename.tex} as output (or @file{filename.ps} for PostScript
output).  If @file{filename.ly} contains more than one @code{\score}
block, then the rest of the scores will be output in numbered files,
starting with @file{filename-1.tex}.  Several files can be specified;
they will each be processed independently.  @footnote{The status of
GUILE is not reset after processing a @code{.ly} files, so be careful
not to change any system defaults from within Scheme.}


@section Command line options

The following options are supported:

@table @code

@item -e,--evaluate=@var{expr}
Evaluate the Scheme @var{expr} before parsing any @file{.ly} files.
Multiple @code{-e} options may be given, they will be evaluated
sequentially.  The function @code{ly:set-option} allows for access to
some internal variables.  Use @code{-e '(ly:option-usage)'} for more
information.

@item -f,--format=@var{format}
@c
@c
A comma separated list of back-end output formats to use.  Choices are
@code{tex} (for @TeX{} output, to be processed with La@TeX{}, and
@code{ps} for PostScript.

There are other output options, but they are intended for developers.


@cindex output format, setting
@cindex PostScript output
@cindex Scheme dump

@item -h,--help
Show a summary of usage.
@item --include, -I=@var{directory}
Add @var{directory} to the search path for input files.
@cindex file searching
@cindex search path
@item -i,--init=@var{file}
Set init file to @var{file} (default: @file{init.ly}).
@item -o,--output=@var{FILE}
    Set the default output file to @var{FILE}.
@item --ps
    Generate PostScript.
@item --dvi
    Generate DVI files. In this case, the @TeX{} backend  should be
    specified, i.e. @code{-f tex}.
@item --png
    Generate pictures of each page, in PNG format.  This implies @code{--ps}.
@item --pdf
    Generate PDF. This implies @code{--ps}.
@item --preview
    Generate an output file containing the titles and the first system
of the score.

@item -s,--safe
Do not trust the @code{.ly} input. 

When LilyPond formatting available through a web server, the
@code{--safe} @b{MUST} be passed.  This will prevent inline Scheme
code from wreaking havoc, for example 

@verbatim
  #(system "rm -rf /")
  {
    c4^#(ly:export (ly:gulp-file "/etc/passwd"))
  }
@end verbatim

The @code{--safe} option works by evaluating in-line Scheme
expressions in a special safe module. This safe module is derived from
GUILE @file{safe-r5rs} module, but adds a number of functions of the
LilyPond API. These functions are listed in @file{scm/safe-lily.scm}.

In addition, @code{--safe} disallows @code{\include} directives and
disables the use of backslashes in @TeX{} strings.

In @code{--safe} mode, it is not possible to import LilyPond variables
into Scheme. 

@item -v,--version
Show version information.
@item -V,--verbose
Be verbose: show full paths of all  files read, and give timing
information.

@item -w,--warranty
Show the warranty with which GNU LilyPond comes. (It comes with 
@strong{NO WARRANTY}!)
@end table

@section Environment variables


For processing both the @TeX{} and the PostScript output, the
appropriate environment variables must be set.  The following scripts
do this:

@itemize @bullet
@item @file{buildscripts/out/lilypond-profile}
(for SH shells)
@item  @file{buildscripts/out/lilypond-login} (for C-shells)
@end itemize

They should normally be sourced as part of the login process. If these
scripts are not run from the system wide login process, then you must
run it yourself.

@cindex installing LilyPond

If you use sh, bash, or a similar shell, then add the following to
your @file{.profile}:
@example
	. @var{/the/path/to/}lilypond-profile
@end example

If you use csh, tcsh or a similar shell, then add the following to
your @file{~/.login}:
@example
	source @var{/the/path/to/}lilypond-login
@end example

Of course, in both cases, you should substitute the proper location of
either script.

These scripts set the following variables:
@table @code
@item TEXMF
 To make sure that @TeX{} and lilypond find data files (among
others @file{.tex}, @file{.mf} and @file{.tfm}),
you have to set @code{TEXMF} to point to the lilypond data
file tree. A typical setting would be
@example
@{/usr/share/lilypond/1.6.0,@{!!/usr/share/texmf@}@}
@end example

@end table


@cindex PostScript
@cindex TEXMF
@cindex printing postscript

The  binary itself recognizes the following environment variables:
@table @code
@item LILYPONDPREFIX
This specifies a directory where locale messages and
data files will be looked up by default. The directory should contain
subdirectories called @file{ly/}, @file{ps/}, @file{tex/}, etc.

@item LANG
This selects the language for the warning messages.
@end table

@cindex LANG
@cindex LILYPONDPREFIX

@node Error messages
@section Error messages

@cindex error messages
Different error messages can appear while compiling a file:

@table @emph
@cindex warning

@item Warning
  Something looks suspect. If you are requesting something out of the
ordinary then you will understand the message, and can ignore it.
However, warnings usually indicate that something is wrong with the
input file.

@item Error
Something is definitely wrong.  The current processing step (parsing,
interpreting, or formatting) will be finished, but the next step will
be skipped.

@cindex error
@cindex fatal error
@item Fatal error
Something is definitely wrong, and LilyPond cannot continue. This
happens rarely. The most usual cause is misinstalled fonts.

@cindex trace, Scheme
@cindex call trace
@cindex Scheme error
@item Scheme error
Errors that occur while executing Scheme code are caught by the Scheme
interpreter. If running with the verbose option (@code{-V} or
@code{--verbose}) then a call trace is printed of the offending
function call.

@cindex Programming error
@item Programming error
There was some internal inconsistency. These error messages are
intended to help the programmers and debuggers. Usually, they can be
ignored. Sometimes, they come in such big quantities that they obscure
other output. In this case, file a bug-report.

@item Aborted (core dumped)
This signals a serious programming error that caused the program to
crash. Such errors are considered critical. If you stumble on one,
send a bugreport.


@end table

@cindex errors, message format
If warnings and errors can
be linked to some part of the input file, then error messages have the
following form

@example
  @var{filename}:@var{lineno}:@var{columnno}: @var{message}
  @var{offending input line}
@end example 

A line-break is inserted in offending line to indicate the column
where the error was found. For example, 

@example
test.ly:2:19: error: not a duration: 5:
  @{ c'4 e'5 
             g' @}
@end example


@node Reporting bugs
@section Reporting bugs

@cindex bugs
@cindex reporting bugs

If you have input that results in a crash or an erroneous output, then
that is a bug. We try respond to bug-reports promptly, and fix them as
soon as possible.  Help us by sending a defective input file, so we can
reproduce the problem. Make it small, so we can easily debug the
problem. Don't forget to tell which version you use, and on which
platform you run it.  Send the report to
@email{bug-lilypond@@gnu.org}.

@node Editor support
@section Editor support

@cindex editors
@cindex vim
@cindex emacs
@cindex modes, editor 
@cindex syntax coloring
@cindex coloring, syntax

There is support from different editors  for LilyPond.

@table @asis
@item Emacs
Emacs has a @file{lilypond-mode}, which provides keyword
autocompletion, indentation, LilyPond specific parenthesis matching
and syntax coloring, handy compile short-cuts and reading LilyPond
manuals using Info.  If @file{lilypond-mode} is not installed on your
platform, then read the
@ifhtml
@uref{../../../topdocs/out-www/INSTALL.html,installation instructions}.
@end ifhtml
@ifnothtml
installation instructions.
@end ifnothtml
for more information.

@item VIM

For @uref{http://www.vim.org,VIM}, a @file{vimrc} is supplied, along with
syntax coloring tools. For more information, refer to the
@ifhtml
@uref{../../../topdocs/out-www/INSTALL.html,installation instructions}.
@end ifhtml
@ifnothtml
installation instructions.
@end ifnothtml


@item JEdit

There exists a plugin for @uref{http://www.jedit.org/,jEdit}. Refer to
the @uref{http://lily4jedit.sourceforge.net,plugin website} for more
information.

@end table

For both VIM and Emacs editors, there is also a facility to jump in
the input file to the source of errors in the graphical output. See
@ref{Point and click}.




@node Invoking lilypond-latex
@section Invoking lilypond-latex

Before LilyPond 3.0, the @code{lilypond} program only generated music
notation.  Titles and page layout was done in a separate wrapper
program. For compatibility with older files, this wrapper program has
been retained as @code{lilypond-latex}. It uses the LilyPond program
and La@TeX{} to create a nicely titled piece of sheet music.  Use of
this program is only necessary if the input file contains special
La@TeX{} options or formatting codes in markup texts.

The @code{lilypond-latex} wrapper is invoked from the command-line as
follows
@example
        @code{lilypond-latex} [@var{option}]@dots{} @var{file}@dots{}
@end example

To have @code{lilypond-latex} read from stdin, use a dash @code{-} for
@var{file}.  The program supports the following options.

@cindex stdin, reading

@table @code
@item -k,--keep
    Keep the temporary directory with all output
files. The temporary directory is created in the current directory as @code{@code{lilypond}.dir}.
@item -h,--help
    Print usage help.
@item -I,--include=@var{dir}
    Add @var{dir} to LilyPond's include path.
@item -o,--output=@var{file}
    Generate output to @var{file}.  The extension of @var{file} is ignored.
@item --png
    Also generate pictures of each page, in PNG format. 
@item --preview
    Also generate a picture of the first system of the score.

@cindex preview
@cindex picture
@cindex bitmap
@cindex pixmap
@cindex thumbnail
@cindex screen shot
    
@item -s,--set=@var{key}=@var{val}
    Add @var{key}= @var{val} to the settings, overriding those specified
in the files. Possible keys: @code{language}, @code{latexheaders},
@code{latexpackages}, @code{latexoptions}, @code{papersize},
@code{linewidth}, @code{orientation},
@code{textheight}.
@item -v,--version
Show version information.
@item -V,--verbose
Be verbose. This prints out commands as they are executed, and more
information about the formatting process is printed.
@item --debug
Print even more information. This is useful when generating bug reports.
@item -w,--warranty
Show the warranty with which GNU LilyPond comes. (It comes with 
@strong{NO WARRANTY}!)
@end table



@subsection Additional parameters

The @code{lilypond} program responds to several parameters specified
in a @code{\paper} section of the input file. They can be overridden
by supplying a @code{--set} command line option.

@table @code
@item language
    Specify La@TeX{} language: the @code{babel} package will be
included.  Default: unset.

        Read from the @code{\header} block.

@item latexheaders
    Specify additional La@TeX{} headers file.
        Normally read from the @code{\header} block. Default value: empty.

@item latexpackages
    Specify additional La@TeX{} packages file. This works cumulative,
so you can add multiple packages using multiple @code{-s=latexpackages} options.
       Normally read from the @code{\header} block. Default value:
@code{geometry}.

@item latexoptions
    Specify additional options for the La@TeX{}
@code{\documentclass}. You can put any valid value here. This was
designed to allow @code{lilypond} to produce output for double-sided
paper, with balanced margins and page numbers on alternating sides. To
achieve this specify @code{twoside}.

@item orientation
    Set orientation. Choices are @code{portrait} or @code{landscape}. Is
read from the @code{\paper} block, if set.
        
@item textheight
    The vertical extension of the music on the page. It is normally 
    calculated automatically, based on the paper size.

@item linewidth
        The music line width. It is normally read from the @code{\paper}
block.

@item papersize
   The paper size (as a name, e.g. @code{a4}). It is normally read from
the @code{\paper} block.
  
@item fontenc
     The font encoding, should be set identical to the @code{font-encoding}
     property in the score.
@end table



