@c -*- coding: utf-8; mode: texinfo; -*-


@c DO NOT TRANSLATE THIS FILE

@c include any node/sections from the higher-level *texi file.
@c   @n ode Compiling from source
@c   @s ection Compiling from source

@menu
* Downloading source code::
* Requirements::
* Building LilyPond::
* Building documentation::
* Testing LilyPond::
* Problems::
@end menu

@node Downloading source code
@subsection Downloading source code

Download source

@itemize
@item tarballs from
@uref{http://lilypond.org/download/} by HTTP.
@item tarballs from
@uref{http://download.linuxaudio.org/lilypond/} by HTTP.
@item
GIT from @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=summary,git.sv.gnu.org}

@example
git clone git://git.sv.gnu.org/lilypond.git
@end example

The repository does not contain generated files.  To create
@file{configure}, run
@example
./autogen.sh
@end example
@end itemize

For information on packaging, see @uref{http://lilypond.org/devel}.


@node Requirements
@subsection Requirements

@unnumberedsubsubsec Compilation

In addition to the packages needed for running LilyPond (see below), you
need the following extra packages for building.

Below is a full list of packages needed to build LilyPond.  However, for
most common distributions there is an easy way of installing most all
build dependencies in one go

@multitable @columnfractions .5 .5
@headitem Distribution
@tab Command

@item Debian, Ubuntu
@tab @code{sudo apt-get build-dep lilypond}

@item Fedora, RHEL
@tab @code{sudo yum-builddep lilypond}

@item openSUSE, SLED
@c sorry for the idiosyncratic command, I really asked and argued
@c for "zypper build-dep" :-(
@tab @code{sudo zypper --build-deps-only source-install lilypond}

@end multitable

When installing a binary package FOO, you may need to install the
FOO-devel, libFOO-dev or FOO-dev package too.

@itemize

@item @uref{http://fontforge.sf.net/,FontForge} 20060125 or newer.

@item @uref{http://metafont.tutorial.free.fr/,MetaFont} (mf-nowin, mf, mfw or
mfont binaries) and @uref{http://cm.bell-labs.com/who/hobby/MetaPost.html,MetaPost}
(mpost binary), usually packaged with a @LaTeX{} distribution like
tetex or texlive.

@item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils,t1utils}
(version 1.33 or newer recommended).

@item New Century Schoolbook fonts, as PFB files.  These are shipped with
X11 and Ghostscript, and are named @file{c059033l.pfb}
@file{c059036l.pfb}, @file{c059013l.pfb} and @file{c059016l.pfb}.

@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE} (version
1.8.2 or newer).  If you are installing binary packages, you may need to
install guile-devel or guile-dev or libguile-dev too.

@item @uref{ftp://ftp.gnu.org/gnu/texinfo/,Texinfo} (version 4.11 or newer).

@item @uref{http://gcc.gnu.org/, The GNU c++ compiler} (version 3.4 or
newer.  4.x is strongly recommended).

@item @uref{http://www.python.org,Python} (version 2.4 or newer)

@item @uref{ftp://ftp.gnu.org/gnu/make/,GNU Make} (version 3.78 or newer).

@item @uref{http://www.gnu.org/software/gettext/gettext.html,gettext}
(version 0.17 or newer).

@item @uref{http://www.gnu.org/software/flex/,Flex}.

@item @uref{http://www.perl.org/,Perl}.

@item @uref{http://www.gnu.org/software/bison/,GNU Bison}.

@item All packages required for running, including development packages with
header files and libraries.

@end itemize


@unnumberedsubsubsec Running requirements

Running LilyPond requires proper installation of the following software

@itemize

@item @uref{http://www.freetype.org/,Freetype} (version 2.1.10 or newer).
@item @uref{http://fontconfig.org/,FontConfig} (version 2.2 or newer).
@item @uref{http://www.pango.org/,Pango} (version 1.12 or newer).
@item @uref{http://www.gnu.org/software/guile/guile.html,GUILE}
(version 1.8.2 or newer), or patch 1.8.1 with
@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch}.
@item @uref{http://www.python.org,Python} (version 2.4 or newer).
@item @uref{http://www.ghostscript.com,Ghostscript} (version 8.15 or
newer. 8.60 recommended)
@item Dejaview.  (This is normally installed by default)
@end itemize

International fonts are required to create music with international text
or lyrics.


@unnumberedsubsubsec Requirements for building documentation

You can view the documentation online at
@uref{http://lilypond.org/doc/}, but you can also build it locally.
This process requires a successful compile of LilyPond, and some
additional tools and packages:

@itemize
@item The @uref{http://netpbm.sourceforge.net/,netpbm utilities}
@item ImageMagick
@item International fonts (see input/regression/utf-8.ly for hints
about which font packages are necessary for your platform)
@item Ghostscript 8.60 or newer, or 8.50 with the patch from
@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688154}
and the patch from
@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688017}.
@item @uref{http://www.nongnu.org/texi2html/,Texi2HTML} 1.82 or newer
@item rsync
@end itemize


@node Building LilyPond
@subsection Building LilyPond

@unnumberedsubsubsec Compiling

To install GNU LilyPond, type

@example
gunzip -c lilypond-x.y.z | tar xf -
cd lilypond-x.y.z
./configure		# run with --help for applicable options
make
su -c 'make install'
@end example

@noindent
If you are not root, you should choose a @code{--prefix} argument that
points into your home directory, e.g.

@example
./configure --prefix=$HOME/usr
@end example

If you encounter any problems, please see @ref{Problems}.


@unnumberedsubsubsec Compiling for multiple platforms

If you want to build multiple versions of LilyPond with different
configuration settings, you can use the @code{--enable-config=CONF}
option of @command{configure}.  You should use @code{make conf=CONF}
to generate the output in @file{out-CONF}.  For example, suppose you
want to build with and without profiling, then use the following for
the normal build

@example
./configure --prefix=$HOME/usr/ --enable-checking
make
make install
@end example

and for the profiling version, specify a different configuration

@example
./configure --prefix=$HOME/usr/ --enable-profiling --enable-config=prof --disable-checking
make conf=prof
make conf=prof install
@end example


@unnumberedsubsubsec Compiling outside the source tree

It is possible to compile LilyPond in a build tree different from the
source tree, with @code{--srcdir} option of @command{configure}:

@example
mkdir lily-build && cd lily-build
@var{sourcedir}/configure --srcdir=@var{sourcedir}

@end example


@unnumberedsubsubsec Useful @command{make} variables

If a less verbose build output if desired, the variable
@code{QUIET_BUILD} may be set to @code{1} on @command{make} command
line, or in @file{local.make} at top of the build tree.


@node Building documentation
@subsection Building documentation

This requires a successful compile of LilyPond, or using an external
LilyPond binary.

@menu
* Commands for building documentation:: Compiling and installing the documentation.
* Building documentation without compiling LilyPond:: Using a LilyPond binary already installed.
@end menu

@node Commands for building documentation
@unnumberedsubsubsec Commands for building documentation

The documentation is built by issuing

@example
make doc
@end example

After compilation, the HTML documentation tree is available in
@file{out-www/offline-root/}, and can be browsed locally.

The HTML, PDF and if available Info files can be installed into the
standard documentation path by issuing

@example
make install-doc
@end example

@noindent
This also installs Info documentation with images if the installation
prefix is properly set; otherwise, instructions to complete proper
installation of Info documentation are printed on standard output.

Compilation of documentation in Info format with images can be done
separately by issuing

@example
make info
@end example

@noindent
Separate installation of this documentation is done by issuing

@example
make install-info
@end example

@noindent
Note that to get the images in Info documentation, @code{install-doc}
target creates symbolic links to HTML and PDF installed documentation
tree in @file{@var{prefix}/share/info}, in order to save disk space,
whereas @code{install-info} copies images in
@file{@var{prefix}/share/info} subdirectories.

It is possible to build a documentation tree in
@file{out-www/online-root/}, with special processing, so it can be
used on a website with content negotiation for automatic language
selection; this can be achieved by issuing

@example
make WEB_TARGETS=online doc
@end example

@noindent
and both @q{offline} and @q{online} targets can be generated by issuing

@example
make WEB_TARGETS="offline online" doc
@end example

Several targets are available to clean the documentation build and
help with maintaining documentation; an overview of these targets is
available with

@example
make help
@end example

@noindent
from every directory in the build tree.  Most targets for
documentation maintenance are available from @file{Documentation/};
@c FIXME: xref to CG
for more information, see the Contributors' Guide, section
@emph{Documentation work}.

The makefile variable @code{QUIET_BUILD} may be set to @code{1} for a
less verbose build output, just like for building the programs.


@knownissues

The most time consuming task for building the documentation is running
LilyPond to build images of music, and there cannot be several
simultaneously running @command{lilypond-book} instances, so @code{-j}
@command{make} option does not significantly speed up the build process.
To help speed it up, the makefile variable @var{CPU_COUNT} may be set
in @file{local.make} or on the command line to the number of
@code{.ly} files that LilyPond should process simultaneously, e.g. on
a bi-processor or dual core machine

@example
make -j3 CPU_COUNT=3 doc
@end example

@noindent
The recommended value of @var{CPU_COUNT} is one plus the number of
cores or processors, but it is advisable to set it to a smaller value
if your system has not enough RAM to run that many simultaneous
LilyPond instances.

If source files have changed since last documentation build, output
files that need to be rebuilt are normally rebuilt, even if you do not
run @code{make doc-clean} first.  However, building dependencies in the
documentation are so complex that rebuilding of some targets may not
be triggered as they should be; a workaround is to force rebuilding
by touching appropriate files, e.g.

@example
touch Documentation/notation/*.itely
touch Documentation/snippets/*.ly
@end example


@node Building documentation without compiling LilyPond
@unnumberedsubsubsec Building documentation without compiling LilyPond

The documentation can be built locally without compiling LilyPond
binary, if LilyPond is already installed on your system.

From a fresh Git checkout, do

@example
./autogen.sh   # ignore any warning messages
cp GNUmakefile.in GNUmakefile
make -C python
nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc
@end example

Please note that this may break sometimes -- for example, if a new
feature is added with a test file in input/regression, even the latest
development release of LilyPond will fail to build the docs.

You may build the manual without building all the @file{input/*} stuff
(i.e. mostly regression tests): change directory, for example to
@file{Documentation/}, issue @code{make doc}, which will build
documentation in a subdirectory @file{out-www} from the source files in
current directory.  In this case, if you also want to browse the
documentation in its post-processed form, change back to top directory
and issue

@example
make out=www WWW-post
@end example

@knownissues

You may also need to create a script for @command{pngtopnm} and
@code{pnmtopng}.  On GNU/Linux, I use this:

@verbatim
export LD_LIBRARY_PATH=/usr/lib
exec /usr/bin/pngtopnm "$@"
@end verbatim

On MacOS X with fink, I use this:

@verbatim
export DYLD_LIBRARY_PATH=/sw/lib
exec /sw/bin/pngtopnm "$@"
@end verbatim

On MacOS X with macports, you should use this:

@verbatim
export DYLD_LIBRARY_PATH=/opt/local/lib
exec /opt/local/bin/pngtopnm "$@"
@end verbatim



@node Testing LilyPond
@subsection Testing LilyPond

@html
<a name="testing"></a>
@end html

LilyPond comes with an extensive suite that exercises the entire
program.  This suite can be used to automatically check the impact of a
change.  This is done as follows

@example
make test-baseline
@emph{## apply your changes, compile}
make check
@end example

This will leave an HTML page @file{out/test-results/index.html}.  This
page shows all the important differences that your change introduced,
whether in the layout, MIDI, performance or error reporting.

To rerun tests, use

@example
make test-redo           @emph{## redo files differing from baseline}
make test-clean          @emph{## remove all test results}
@end example

@noindent
and then run @code{make check} again.

For tracking memory usage as part of this test, you will need GUILE
CVS; especially the following patch:
@uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.9-gcstats.patch}.

For checking the coverage of the test suite, do the following

@example
./scripts/auxiliar/build-coverage.sh
@emph{# uncovered files, least covered first}
./scripts/auxiliar/coverage.py  --summary out-cov/*.cc
@emph{# consecutive uncovered lines, longest first}
./scripts/auxiliar/coverage.py  --uncovered out-cov/*.cc
@end example


@node Problems
@subsection Problems

For help and questions use @email{lilypond-user@@gnu.org}.  Send
bug reports to @email{bug-lilypond@@gnu.org}.

Bugs that are not fault of LilyPond are documented here.

@unnumberedsubsubsec Bison 1.875

There is a bug in bison-1.875: compilation fails with "parse error
before `goto'" in line 4922 due to a bug in bison.  To fix, please
recompile bison 1.875 with the following fix

@example
$ cd lily; make out/parser.cc
$ vi +4919 out/parser.cc
# append a semicolon to the line containing "__attribute__ ((__unused__))
# save
$ make
@end example


@unnumberedsubsubsec Compiling on MacOS@tie{}X

Here are special instructions for compiling under MacOS@tie{}X.
These instructions assume that dependencies are installed using
@uref{http://www.macports.org/, MacPorts.} The instructions have
been tested using OS X 10.5 (Leopard).

First, install the relevant dependencies using MacPorts.

Next, add the following to your relevant shell initialization
files. This is @code{~/.profile} by default. You should create
this file if it does not exist.

@example
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export DYLD_LIBRARY_PATH=/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/Resources:\
/opt/local/lib:$DYLD_LIBRARY_PATH
@end example

Now you must edit the generated @code{config.make} file.  Change

@example
FLEXLEXER_FILE = /usr/include/FlexLexer.h
@end example

@noindent
to:

@example
FLEXLEXER_FILE = /opt/local/include/FlexLexer.h
@end example

At this point, you should verify that you have the appropriate
fonts installed with your ghostscript installation. Check @code{ls
/opt/local/share/ghostscript/fonts} for: 'c0590*' files (.pfb,
.pfb and .afm).  If you don't have them, run the following
commands to grab them from the ghostscript SVN server and install
them in the appropriate location:

@example
svn export http://svn.ghostscript.com/ghostscript/tags/urw-fonts-1.0.7pre44/
sudo mv urw-fonts-1.0.7pre44/* /opt/local/share/ghostscript/fonts/
rm -rf urw-fonts-1.07pre44
@end example

Now run the @code{./configure} script. To avoid complications with
automatic font detection, add

@example
--with-ncsb-dir=/opt/local/share/ghostscript/fonts
@end example


@unnumberedsubsubsec Solaris

Solaris7, ./configure

@file{./configure} needs a POSIX compliant shell.  On Solaris7,
@file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash
is.  Run configure like

@example
CONFIG_SHELL=/bin/ksh ksh -c ./configure
@end example

@noindent
or

@example
CONFIG_SHELL=/bin/bash bash -c ./configure
@end example

@unnumberedsubsubsec FreeBSD

To use system fonts, dejaview must be installed.  With the default
port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}.

Open the file @file{$LILYPONDBASE/usr/etc/fonts/local.conf} and add the
following line just after the @code{<fontconfig>} line.  (Adjust as necessary
for your hierarchy.)

@example
<dir>/usr/X11R6/lib/X11/fonts</dir>
@end example


@unnumberedsubsubsec International fonts

On Mac OS X, all fonts are installed by default.  However, finding all
system fonts requires a bit of configuration; see
@uref{http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html,
this post} on the @code{lilypond-user} mailing list.

On Linux, international fonts are installed by different means on
every distribution.  We cannot list the exact commands or packages
that are necessary, as each distribution is different, and the exact
package names within each distribution changes.  Here are some
hints, though:

@verbatim
Red Hat Fedora

    taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \
         ttfonts-zh_CN fonts-ja fonts-hebrew

Debian GNU/Linux

   apt-get install emacs-intl-fonts xfonts-intl-.* \
        ttf-kochi-gothic ttf-kochi-mincho \
        xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi
@end verbatim
