X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fincluded%2Fcompile.itexi;h=896fa0cb3c31c10137310542ce534aa40c6ff728;hb=f2f2ed7bd177ed22334c9d3bc1ab3352050557e7;hp=c124b84d2f81c2ab7aff7074adc8975d03f10ff8;hpb=efdc514b7a7357d67c6e0f3927c38b70d645f9c7;p=lilypond.git diff --git a/Documentation/included/compile.itexi b/Documentation/included/compile.itexi index c124b84d2f..896fa0cb3c 100644 --- a/Documentation/included/compile.itexi +++ b/Documentation/included/compile.itexi @@ -8,275 +8,1198 @@ @c @s ection Compiling from source @menu -* Downloading source code:: +* Overview of compiling:: * Requirements:: -* Building LilyPond:: -* Building documentation:: -* Testing LilyPond:: +* Getting the source code:: +* Configuring make:: +* Compiling LilyPond:: +* Post-compilation options:: * Problems:: +* Concurrent stable and development versions:: +* Build system:: +@end menu + + +@node Overview of compiling +@section Overview of compiling + +Compiling LilyPond from source is an involved process, and is only +recommended for developers and packagers. Typical program users +are instead encouraged to obtain the program from a package +manager (on Unix) or by downloading a precompiled binary +configured for a specific operating system. Pre-compiled binaries +are available on the @rweb{Download} page. + +Compiling LilyPond from source is necessary if you want to build, +install, or test your own version of the program. + +A successful compile can also be used to generate and install the +documentation, incorporating any changes you may have made. +However, a successful compile is not a requirement for generating +the documentation. The documentation can be built using a Git +repository in conjunction with a locally installed copy of the +program. For more information, see @ref{Building documentation +without compiling}. + +Attempts to compile LilyPond natively on Windows have been +unsuccessful, though a workaround is available (see +@rcontrib{LilyDev}). + + +@node Requirements +@section Requirements + + +@menu +* Requirements for running LilyPond:: +* Requirements for compiling LilyPond:: +* Requirements for building documentation:: @end menu -@node Downloading source code -@subsection Downloading source code -Download source +@node Requirements for running LilyPond +@subsection Requirements for running LilyPond + +This section contains the list of separate software packages that are +required to run LilyPond. + +@itemize + +@item @uref{http://www.dejavu-fonts.org/, DejaVu fonts} +These are normally installed by default. + +@item +@uref{http://www.fontconfig.org/, FontConfig} +Use version 2.4.0 or newer. + +@item +@uref{http://www.freetype.org/, Freetype} +Use version 2.1.10 or newer. + +@item +@uref{http://www.ghostscript.com, Ghostscript} +Use version 8.60 or newer. + +@item +@uref{http://www.gnu.org/software/guile/guile.html, Guile} +Use version 1.8.8. Version 2.x of Guile is not currently supported. + +@item +@uref{http://www.pango.org/, Pango} +User version 1.12 or newer. + +@item +@uref{http://www.python.org, Python} +Use version 2.4 or newer. + +@item +International fonts. For example: + +Fedora: + +@example +fonts-arabic +fonts-hebrew +fonts-ja +fonts-xorg-truetype +taipeifonts +ttfonts-ja +ttfonts-zh_CN +@end example + +Debian based distributions: + +@example +emacs-intl-fonts +fonts-ipafont-gothic +fonts-ipafont-mincho +xfonts-bolkhov-75dpi +xfonts-cronyx-75dpi +xfonts-cronyx-100dpi +xfonts-intl-.* +@end example + +These are normally installed by default and are required only to create +music with international text or lyrics. + +@end itemize + + +@node Requirements for compiling LilyPond +@subsection Requirements for compiling LilyPond + +This section contains instructions on how to quickly and easily get all +the software packages required to build LilyPond. + +Most of the more popular Linux distributions only require a few simple +commands to download all the software needed. For others, there is an +explicit list of all the individual packages (as well as where to get +them from) for those that are not already included in your +distributions' own repositories. + +@ignore +I have tested all of the following four Linux Distributions listed here +Using a simple virtual machine and the appropriate ISO image file +downloaded from each distribution's own website. The instructions +documented were run immediately after the initial installation +(without any further additional configuration to the OS) and I made sure +that I was able to run the full set of make, make test-baseline, make +check and a full make doc. - James +@end ignore + +@menu +* Fedora:: +* Linux Mint:: +* OpenSUSE:: +* Ubuntu:: +* Other:: +@end menu + + +@node Fedora +@unnumberedsubsubsec Fedora + +The following instructions were tested on @q{Fedora} versions 22 & 23 +and will download all the software required to both compile LilyPond and +build the documentation. + +@itemize + +@item +Download and install all the LilyPond build-dependencies (approximately +700MB); + +@example +sudo dnf builddep lilypond --nogpgcheck +@end example + +@item +Download and install additional @q{build} tools required for compiling; + +@example +sudo dnf install autoconf gcc-c++ +@end example + +@item +Download @code{texi2html 1.82} directly from: +@uref{http://download.savannah.gnu.org/releases/texi2html/texi2html-1.82.tar.gz}; + +@code{texi2html} is only required if you intend to compile LilyPond's +own documentation (e.g. to help with any document writing). The version +available in the Fedora repositories is too new and will not work. +Extract the files into an appropriate location and then run the +commands; + +@example +./configure +make +sudo make install +@end example + +This should install @code{texi2html 1.82} into @code{/usr/local/bin}, +which will normally take priority over @code{/usr/bin} where the +later, pre-installed versions gets put. Now verify that your operating +system is able to see the correct version of @code{texi2html}. + +@example +texi2html --version +@end example + +@item +Although not @q{required} to compile LilyPond, if you intend to +contribute to LilyPond (codebase or help improve the documentation) then +it is recommended that you also need to install @code{git}. + +@example +sudo dnf install git +@end example + +Also see @ruser{Starting with Git}. + +@item +To use the @code{lily-git.tcl} GUI; + +@example +sudo dnf install tk +@end example + +See @ruser{lily-git}. + +@end itemize + +@warning{By default, when building LilyPond's documentation, +@code{pdfTeX} is be used. However ligatures (fi, fl, ff etc.) may not +be printed in the PDF output. In this case XeTeX can be used instead. +Download and install the @code{texlive-xetex} package. + +@example +sudo dnf install texlive-xetex +@end example + +The scripts used to build the LilyPond documentation will use +@code{XeTex} instead of @code{pdfTex} to generate the PDF documents if +it is available. No additional configuration is required.} + + + +@node Linux Mint +@unnumberedsubsubsec Linux Mint + +The following instructions were tested on @q{Linux Mint 17.1} and +@q{LMDE - Betsy} and will download all the software required to both +compile LilyPond and build the documentation.. + +@itemize + +@item +Enable the @emph{sources} repository; + +@enumerate + +@item +Using the @emph{Software Sources} GUI (located under +@emph{Administration}). + +@item +Select @emph{Official Repositories}. + +@item +Check the @emph{Enable source code repositories} box under the +@emph{Source Code} section. + +@item +Click the @emph{Update the cache} button and when it has completed, +close the @emph{Software Sources} GUI. + +@end enumerate + +@item +Download and install all the LilyPond build-dependencies (approximately +200MB); + +@example +sudo apt-get build-dep lilypond +@end example + +@item +Download and install additional @q{build} tools required for compiling; + +@example +sudo apt-get install autoconf fonts-texgyre texlive-lang-cyrillic +@end example + +@item +Although not @q{required} to compile LilyPond, if you intend to +contribute to LilyPond (codebase or help improve the documentation) then +it is recommended that you also need to install @code{git}. + +@example +sudo apt-get install git +@end example + +Also see @ruser{Starting with Git}. + +@item +To use the @code{lily-git.tcl} GUI; + +@example +sudo apt-get install tk +@end example + +Also see @ruser{lily-git}. + +@end itemize + +@warning{By default, when building LilyPond's documentation, +@code{pdfTeX} is be used. However ligatures (fi, fl, ff etc.) may not +be printed in the PDF output. In this case XeTeX can be used instead. +Download and install the @code{texlive-xetex} package. + +@example +sudo apt-get install texlive-xetex +@end example + +The scripts used to build the LilyPond documentation will use +@code{XeTex} instead of @code{pdfTex} to generate the PDF documents if +it is available. No additional configuration is required.} + + +@node OpenSUSE +@unnumberedsubsubsec OpenSUSE + +The following instructions were tested on @q{OpenSUSE 13.2} and will +download all the software required to both compile LilyPond and build +the documentation. + +@itemize + +@item +Add the @emph{sources} repository; + +@smallexample +sudo zypper addrepo -f \ +"http://download.opensuse.org/source/distribution/13.2/repo/oss/" sources +@end smallexample + +@item +Download and install all the LilyPond build-dependencies (approximately +680MB); + +@example +sudo zypper source-install lilypond +@end example + +@item +Download and install additional @q{build} tools required for compiling; + +@example +sudo zypper install make +@end example + +@item +Although not @q{required} to compile LilyPond, if you intend to +contribute to LilyPond (codebase or help improve the documentation) then +it is recommended that you also need to install @code{git}. + +@example +sudo zypper install git +@end example + +Also see @ruser{Starting with Git}. + +@item +To use the @code{lily-git.tcl} GUI; + +@example +sudo zypper install tk +@end example + +Also see @ruser{lily-git}. + +@end itemize + +@warning{By default, when building LilyPond's documentation, +@code{pdfTeX} is be used. However ligatures (fi, fl, ff etc.) may not +be printed in the PDF output. In this case XeTeX can be used instead. +Download and install the @code{texlive-xetex} package. + +@example +sudo zypper install texlive-xetex +@end example + +The scripts used to build the LilyPond documentation will use +@code{XeTex} instead of @code{pdfTex} to generate the PDF documents if +it is available. No additional configuration is required.} + +@node Ubuntu +@unnumberedsubsubsec Ubuntu + +The following commands were tested on Ubuntu versions @code{14.04 LTS}, +@code{14.10} and @code{15.04} and will download all the software +required to both compile LilyPond and build the documentation. + +@itemize + +@item +Download and install all the LilyPond build-dependencies (approximately +200MB); + +@example +sudo apt-get build-dep lilypond +@end example + +@item +Download and install additional @q{build} tools required for compiling; + +@example +sudo apt-get install autoconf fonts-texgyre texlive-land-cyrillic +@end example + +@item +Although not @q{required} to compile LilyPond, if you intend to +contribute to LilyPond (codebase or help improve the documentation) then +it is recommended that you also need to install @code{git}. + +@example +sudo apt-get install git +@end example + +Also see @ruser{Starting with Git}. + +@item +To use the @code{lily-git.tcl} GUI; + +@example +sudo apt-get install tk +@end example + +Also see @ruser{lily-git}. + +@end itemize + +@warning{By default, when building LilyPond's documentation, +@code{pdfTeX} is be used. However ligatures (fi, fl, ff etc.) may not +be printed in the PDF output. In this case XeTeX can be used instead. +Download and install the @code{texlive-xetex} package. + +@example +sudo apt-get install texlive-xetex +@end example + +The scripts used to build the LilyPond documentation will use +@code{XeTex} instead of @code{pdfTex} to generate the PDF documents if +it is available. No additional configuration is required.} + + +@node Other +@unnumberedsubsubsec Other + +The following individual software packages are required just to compile +LilyPond. + +@itemize + +@item +@uref{http://www.gnu.org/software/autoconf, GNU Autoconf} + +@item +@uref{http://www.gnu.org/software/bison/, GNU Bison} + +Use version @code{2.0} or newer. + +@item +@uref{http://gcc.gnu.org/, GNU Compiler Collection} + +Use version @code{3.4} or newer (@code{4.x} recommended). + +@item +@uref{http://flex.sourceforge.net/, Flex} + +@item +@uref{http://fontforge.sf.net/, FontForge} + +Use version @code{20060125} or newer (we recommend using at least +@code{20100501}); it must also be compiled with the +@option{--enable-double} switch, else this can lead to inaccurate +intersection calculations which end up with poorly-rendered glyphs in +the output. + +@item +@uref{http://www.gnu.org/software/gettext/gettext.html, GNU gettext} + +Use version @code{0.17} or newer. + +@item +@uref{http://www.gnu.org/software/make/, GNU Make} + +Use version @code{3.78} or newer. + +@item +@uref{http://metafont.tutorial.free.fr/, MetaFont} + +The @code{mf-nowin}, @code{mf}, @code{mfw} or @code{mfont} binaries are +usually packaged along with +@uref{http://www.latex-project.org/ftp.html, @TeX{}}. + +@item +@uref{http://cm.bell-labs.com/who/hobby/MetaPost.html, MetaPost} + +The @code{mpost} binary is also usually packaged with +@uref{http://www.latex-project.org/ftp.html, @TeX{}}. + +@item +@uref{http://www.perl.org/, Perl} + +@item +@uref{http://www.gnu.org/software/texinfo/, Texinfo} + +Use version @code{4.11} or newer. + +@item +@uref{http://www.lcdf.org/~eddietwo/type/#t1utils, Type 1 utilities} + +Use version @code{1.33} or newer. + +@item +@uref{https://www.ctan.org/pkg/cyrillic?lang=en, Cyrillic fonts} + +Often packaged in repositories as @code{texlive-lang-cyrillic}. + +@item +TeX Gyre @q{OTF} font packages. As of LilyPond version @code{2.19.26}, +the previous default serif, san serif and monospace fonts now use Tex +Gyre's @emph{Schola}, @emph{Heros} and @emph{Cursor} fonts respectively. +Also See @ruser{Fonts}. + +Some distributions do not always provide @q{OTF} font files in the Tex +Gyre packages from their repositories. Use the command +@code{fc-list | grep texgyre} to list the fonts available to your system +and check that the appropriate @code{*.otf} files are reported. If they +are not then download and manually extract the @q{OTF} files to either +your local @code{~/.fonts/} directory or use the +@code{configure} command and the +@code{--with-texgyre-dir=/path_to_otf_files/} option. + +The following font families are required: + +@uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/schola, Schola}, +@uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/heros, Heros} +and +@uref{http://www.gust.org.pl/projects/e-foundry/tex-gyre/cursor, Cursor}. + +@end itemize + + + +@node Requirements for building documentation +@subsection Requirements for building documentation + +The entire set of documentation for the most current build of LilyPond +is available online at +@uref{http://lilypond.org/doc/v2.19/Documentation/web/development}, but +you can also build them locally from the source code. This process +requires some additional tools and packages. + +@warning{If the instructions for one of the previously listed Linux +in the previous section (@rcontrib{Requirements for compiling LilyPond}) +have been used, then the following can be ignored as the software should +already be installed.} + +@itemize + +@item +Everything listed in @ref{Requirements for compiling LilyPond} + +@item +@uref{http://www.imagemagick.org/, ImageMagick} + +@item +@uref{http://netpbm.sourceforge.net/, Netpbm} + +@item +@uref{http://gzip.org/, gzip} + +@item +@uref{http://rsync.samba.org/, rsync} + +@item +@uref{http://www.nongnu.org/texi2html/, Texi2HTML} + +Use version @code{1.82}. Later versions will not work. + +Download @code{texi2html 1.82} directly from: +@uref{http://download.savannah.gnu.org/releases/texi2html/texi2html-1.82.tar.gz}; + +Extract the files into an appropriate location and then run the +commands; + +@example +./configure +make +sudo make install +@end example + +Now verify that your operating system is able to see the correct version +of @code{texi2html}. + +@example +texi2html --version +@end example -@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} +Fonts required to build the documentation in addition to those required +to run LilyPond: @example -git clone git://git.sv.gnu.org/lilypond.git +gsfonts +fonts-linuxlibertine +fonts-liberation +fonts-dejavu +fonts-freefont-otf +ttf-bitstream-vera +texlive-fonts-recommended +ttf-xfree86-nonfree @end example -The repository does not contain generated files. To create -@file{configure}, run +@end itemize + +@warning{By default, when building LilyPond's documentation, +@code{pdfTeX} is be used. However ligatures (fi, fl, ff etc.) may not +be printed in the PDF output. In this case XeTeX can be used instead. +Download and install the @code{texlive-xetex} package. The scripts used +to build the LilyPond documentation will use @code{XeTex} instead of +@code{pdfTex} to generate the PDF documents if it is available. No +additional configuration is required.} + + +@node Getting the source code +@section Getting the source code + + +@subheading Downloading the Git repository + +In general, developers compile LilyPond from within a local Git +repository. Setting up a local Git repository is explained in +@rcontrib{Starting with Git}. + + +@subheading Downloading a source tarball + +Packagers are encouraged to use source tarballs for compiling. + +The tarball for the latest stable release is available on the +@rweb{Source} page. + +@noindent +The latest +@uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=snapshot, source code snapshot} +is also available as a tarball from the GNU Savannah Git server. + +@noindent +All tagged releases (including legacy stable +versions and the most recent development release) are available +here: + @example -./autogen.sh +@uref{http://download.linuxaudio.org/lilypond/source/} @end example -@end itemize -For information on packaging, see @uref{http://lilypond.org/devel}. +Download the tarball to your @file{~/src/} directory, or some +other appropriate place. +@warning{Be careful where you unpack the tarball! Any +subdirectories of the current folder named @file{lilypond/} or +@file{lilypond-@var{x.y.z}/} (where @var{x.y.z} is the release +number) will be overwritten if there is a name clash with the +tarball.} -@node Requirements -@subsection Requirements +Unpack the tarball with this command: -@unnumberedsubsubsec Compilation +@example +tar -xzf lilypond-@var{x.y.z}.tar.gz +@end example + +This creates a subdirectory within the current directory called +@file{lilypond-@var{x.y.z}/}. Once unpacked, the source files +occupy about 40 MB of disk space. + +Windows users wanting to look at the source code may have to +download and install the free-software +@uref{http://www.7-zip.org, 7zip archiver} to extract the tarball. -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 +@node Configuring make +@section Configuring @command{make} -@multitable @columnfractions .5 .5 -@headitem Distribution -@tab Command -@item Debian, Ubuntu -@tab @code{sudo apt-get build-dep lilypond} +@menu +* Running ./autogen.sh:: +* Running ../configure:: +@end menu -@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} +@node Running ./autogen.sh +@subsection Running @command{./autogen.sh} -@end multitable +After you unpack the tarball (or download the Git repository), the +contents of your top source directory should be similar to the +current source tree listed at +@uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=tree}. -When installing a binary package FOO, you may need to install the -FOO-devel, libFOO-dev or FOO-dev package too. +Next, you need to create the generated files; enter the following +command from your top source directory: -@itemize +@example +./autogen.sh --noconfigure +@end example -@item @uref{http://fontforge.sf.net/,FontForge} 20060125 or newer. +This will generate a number of files and directories to aid +configuration, such as @file{configure}, @file{README.txt}, etc. -@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. +Next, create the build directory with: -@item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils,t1utils} -(version 1.33 or newer recommended). +@example +mkdir build/ +cd build/ +@end example -@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}. +We heavily recommend building lilypond inside a separate directory +with this method. -@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). +@node Running ../configure +@subsection Running @command{../configure} -@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) +@menu +* Configuration options:: +* Checking build dependencies:: +* Configuring target directories:: +@end menu -@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). +@node Configuration options +@unnumberedsubsubsec Configuration options -@item @uref{http://www.gnu.org/software/flex/,Flex}. +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} -@item @uref{http://www.perl.org/,Perl}. +The @command{../configure} command (generated by +@command{./autogen.sh}) provides many options for configuring +@command{make}. To see them all, run: -@item @uref{http://www.gnu.org/software/bison/,GNU Bison}. +@example +../configure --help +@end example -@item All packages required for running, including development packages with -header files and libraries. -@end itemize +@node Checking build dependencies +@unnumberedsubsubsec Checking build dependencies +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} -@unnumberedsubsubsec Running requirements +When @command{../configure} is run without any arguments, it will +check to make sure your system has everything required for +compilation: -Running LilyPond requires proper installation of the following software +@example +../configure +@end example -@itemize +If any build dependency is missing, @command{../configure} will +return with: -@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) -@item @uref{http://www.python.org,Python} (version 2.4 or newer). -@item @uref{http://www.ghostscript.com,Ghostscript} (version 8.60 or -newer). -@item Dejaview. (This is normally installed by default) -@end itemize +@example +ERROR: Please install required programs: @var{foo} +@end example + +The following message is issued if you are missing programs that +are only needed for building the documentation: + +@example +WARNING: Please consider installing optional programs: @var{bar} +@end example -International fonts are required to create music with international text -or lyrics. +If you intend to build the documentation locally, you will need to +install or update these programs accordingly. +@warning{@command{../configure} may fail to issue warnings for +certain documentation build requirements that are not met. If you +experience problems when building the documentation, you may need +to do a manual check of @ref{Requirements for building +documentation}.} -@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: +@node Configuring target directories +@unnumberedsubsubsec Configuring target directories + +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} + +If you intend to use your local build to install a local copy of +the program, you will probably want to configure the installation +directory. Here are the relevant lines taken from the output of +@command{../configure@tie{}--help}: + +@quotation +By default, `@command{make@tie{}install}' will install all the +files in @file{/usr/local/bin}, @file{/usr/local/lib} etc. You +can specify an installation prefix other than @file{/usr/local} +using `@option{--prefix}', for instance `@option{--prefix=$HOME}'. +@end quotation + +A typical installation prefix is @file{$HOME/usr}: + +@example +../configure --prefix=$HOME/usr +@end example + +Note that if you plan to install a local build on a system where +you do not have root privileges, you will need to do something +like this anyway---@command{make@tie{}install} will only succeed +if the installation prefix points to a directory where you have +write permission (such as your home directory). The installation +directory will be automatically created if necessary. + +The location of the @command{lilypond} command installed by this +process will be @file{@var{prefix}/bin/lilypond}; you may want to +add @file{@var{prefix}/bin/} to your @code{$PATH} if it is not +already included. + +It is also possible to specify separate installation directories +for different types of program files. See the full output of +@command{../configure@tie{}--help} for more information. + +If you encounter any problems, please see @ref{Problems}. -@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 -@item @uref{http://www.nongnu.org/texi2html/,Texi2HTML} 1.82 -@item rsync -@end itemize +@node Compiling LilyPond +@section Compiling LilyPond -@node Building LilyPond -@subsection Building LilyPond -@unnumberedsubsubsec Compiling +@menu +* Using make:: +* Saving time with the -j option:: +* Compiling for multiple platforms:: +* Useful make variables:: +@end menu + + +@node Using make +@subsection Using @command{make} -To install GNU LilyPond, type +@warning{make sure that you are in the @file{build/} subdirectory +of your source tree.} + +LilyPond is compiled with the @command{make} command. Assuming +@command{make} is configured properly, you can simply run: @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. +@samp{make} is short for @samp{make all}. To view a list of @command{make} +targets, run: @example -./configure --prefix=$HOME/usr +make help @end example -If you encounter any problems, please see @ref{Problems}. +TODO: Describe what @command{make} actually does. + +@seealso +@ref{Generating documentation} provides more info on the @command{make} targets +used to build the LilyPond documentation. + + +@node Saving time with the -j option +@subsection Saving time with the @option{-j} option + +If your system has multiple CPUs, you can speed up compilation by +adding @samp{-j@var{X}} to the @command{make} command, where +@samp{@var{X}} is one more than the number of cores you have. For +example, a typical Core2Duo machine would use: + +@example +make -j3 +@end example +If you get errors using the @option{-j} option, and @samp{make} +succeeds without it, try lowering the @code{@var{X}} value. -@unnumberedsubsubsec Compiling for multiple platforms +Because multiple jobs run in parallel when @option{-j} is used, it can +be difficult to determine the source of an error when one occurs. In +that case, running @samp{make} without the @option{-j} is advised. + +@node Compiling for multiple platforms +@subsection 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 +configuration settings, you can use the +@option{--enable-config=@var{conf}} option of @command{configure}. +You should use @code{make@tie{}conf=@var{conf}} to generate the +output in @file{out-@var{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 +./configure --prefix=$HOME/usr/ --enable-profiling \ + --enable-config=prof --disable-checking make conf=prof +@end example + +If you wish to install a copy of the build with profiling, don't +forget to use @code{conf=@var{CONF}} when issuing +@command{make@tie{}install}: + +@example make conf=prof install @end example -@unnumberedsubsubsec Compiling outside the source tree +@seealso +@ref{Installing LilyPond from a local build} + + +@node Useful make variables +@subsection 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 Post-compilation options +@section Post-compilation options + + +@menu +* Installing LilyPond from a local build:: +* Generating documentation:: +* Testing LilyPond binary:: +@end menu + + +@node Installing LilyPond from a local build +@subsection Installing LilyPond from a local build -It is possible to compile LilyPond in a build tree different from the -source tree, with @code{--srcdir} option of @command{configure}: +If you configured @command{make} to install your local build in a +directory where you normally have write permission (such as your +home directory), and you have compiled LilyPond by running +@command{make}, you can install the program in your target +directory by running: @example -mkdir lily-build && cd lily-build -@var{sourcedir}/configure --srcdir=@var{sourcedir} +make install +@end example +If instead, your installation directory is not one that you can +normally write to (such as the default @file{/usr/local/}, which +typically is only writeable by the superuser), you will need to +temporarily become the superuser when running +@command{make@tie{}install}: + +@example +sudo make install @end example +@noindent +or@dots{} -@unnumberedsubsubsec Useful @command{make} variables +@example +su -c 'make install' +@end example -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. +If you don't have superuser privileges, then you need to configure +the installation directory to one that you can write to, and then +re-install. See @ref{Configuring target directories}. -@node Building documentation -@subsection Building documentation +@node Generating documentation +@subsection Generating 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. +* Documentation editor's edit/compile cycle:: +* Building documentation:: +* Building a single document:: +* Saving time with CPU_COUNT:: +* AJAX search:: +* Installing documentation:: +* Building documentation without compiling:: @end menu -@node Commands for building documentation -@unnumberedsubsubsec Commands for building documentation -The documentation is built by issuing +@node Documentation editor's edit/compile cycle +@unnumberedsubsubsec Documentation editor's edit/compile cycle + +@itemize +@item +Initial documentation build: + +@example +make [-j@var{X}] +make [-j@var{X} CPU_COUNT=@var{X}] doc @emph{## can take an hour or more} +make [-j@var{X} CPU_COUNT=@var{X}] doc-stage-1 @emph{## to build only PDF documentation} +@end example + +@item +Edit/compile cycle: + +@example +@emph{## edit source files, then@dots{}} + +make [-j@var{X}] @emph{## needed if editing outside} + @emph{## Documentation/, but useful anyway} + @emph{## for finding Texinfo errors.} +make [-j@var{X} CPU_COUNT=@var{X}] doc @emph{## usually faster than initial build.} +@end example + +@item +Reset: + +It is generally possible to remove the compiled documentation from +your system +with @samp{make@tie{}doc-clean}, but this method is not 100% +guaranteed. Instead, if you want to be sure you have a clean +system, we recommend that you delete your +@file{build/} directory, and begin compiling from scratch. Since +the documentation compile takes much longer than the +non-documentation compile, this does not increase the overall time +by a great deal. + +@end itemize + +@node Building documentation +@unnumberedsubsubsec Building documentation + +After a successful compile (using @command{make}), the +documentation can be 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. Various -portions of the documentation can be found by looking in -@file{out/} and @file{out-www} subdirectories in other places in -the source tree, but these are only @emph{portions} of the docs. -Please do not complain about anything which is broken in those -places; the only complete set of documentation is in +or, to build only the PDF documentation and not the HTML, + +@example +make doc-stage-1 +@end example + +@warning{The first time you run @command{make@tie{}doc}, the +process can easily take an hour or more with not much output +on the command line.} + +After this initial build, @command{make@tie{}doc} only makes +changes to the documentation where needed, so it may only take +a minute or two to test changes if the documentation is already +built. + +If @command{make@tie{}doc} succeeds, the HTML documentation tree +is available in @file{out-www/offline-root/}, and can be browsed +locally. Various portions of the documentation can be found by +looking in @file{out/} and @file{out-www} subdirectories in other +places in the source tree, but these are only @emph{portions} of +the docs. Please do not complain about anything which is broken +in those places; the only complete set of documentation is in @file{out-www/offline-root/} from the top of the source tree. -The HTML, PDF and if available Info files can be installed into the -standard documentation path by issuing +@command{make@tie{}doc} sends the output from most of the +compilation to logfiles. If the build fails for any reason, it +should prompt you with the name of a logfile which will provide +information to help you work out why the build failed. These +logfiles are not deleted with @command{make@tie{}doc-clean}. To +remove all the logfiles generated by the compilation process, use: @example -make install-doc +make log-clean @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. +@code{make@tie{}doc} compiles the documents for all languages. To +save some compile time, the English language documents can be +compiled on their own with: + +@example +make LANGS='' doc +@end example + +@noindent Similarly, it is possible to compile a subset of the +translated documentation by specifying their language codes on the +command line. For example, the French and German translations are +compiled with: + +@example +make LANGS='de fr' doc +@end example + +@noindent Note that this will also compile the English version. -Compilation of documentation in Info format with images can be done -separately by issuing +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 +An issue when switching branches between master and translation +is the appearance/disappearance of translated versions of some manuals. +If you see such a warning from make: + +@example +No rule to make target `X', needed by `Y' +@end example + +@noindent +Your best bet is to delete the file Y.dep and to try again. + +@node Building a single document +@unnumberedsubsubsec Building a single document +It's possible to build a single document. For example, to rebuild +only @file{contributor.pdf}, do the following: + +@example +cd build/ +cd Documentation/ +touch ../../Documentation/contributor.texi +make out=www out-www/contributor.pdf +@end example + +If you are only working on a single document, test-building it in +this way can give substantial time savings - recreating +@file{contributor.pdf}, for example, takes a matter of seconds. + +@node Saving time with CPU_COUNT +@unnumberedsubsubsec Saving time with @code{CPU_COUNT} + +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 the @option{-j} @command{make} option does not significantly +speed up the build process. To help speed it up, the makefile +variable @option{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 @option{CPU_COUNT} is one plus the number +of cores or processors, but it is advisable to set it to a smaller +value unless your system has enough RAM to run that many +simultaneous LilyPond instances. Also, values for the @option{-j} +option that pose problems with @samp{make} are less likely to pose +problems with @samp{make doc} (this applies to both @option{-j} +and @option{CPU_COUNT}). For example, with a quad-core processor, +it is possible for @samp{make -j5 CPU_COUNT=5 doc} to work +consistently even if @samp{make -j5} rarely succeeds. + + +@node AJAX search +@unnumberedsubsubsec AJAX search + +To build the documentation with interactive searching, use: + +@example +make doc AJAX_SEARCH=1 +@end example + +This requires PHP, and you must view the docs via a http +connection (you cannot view them on your local filesystem). + +@warning{Due to potential security or load issues, this option is +not enabled in the official documentation builds. Enable at your +own risk.} + + +@node Installing documentation +@unnumberedsubsubsec Installing documentation + +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. + +To install the Info documentation separately, run: @example make install-info @@ -316,50 +1239,17 @@ make help @noindent from every directory in the build tree. Most targets for documentation maintenance are available from -@file{Documentation/}. For more information, see +@file{Documentation/}; for more information, see @rcontrib{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. +The makefile variable @code{QUIET_BUILD} may be set to @code{1} +for a less verbose build output, just like for building the +programs. -@example -touch Documentation/extend.texi -touch Documentation/*te?? -touch Documentation/snippets/*.te?? -@end example +@node Building documentation without compiling +@unnumberedsubsubsec Building documentation without compiling -@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. @@ -409,82 +1299,41 @@ exec /sw/bin/pngtopnm "$@" On MacOS X with macports, you should use this: @verbatim -export DYLD_LIBRARY_PATH=/opt/local/lib +export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib exec /opt/local/bin/pngtopnm "$@" @end verbatim +@node Testing LilyPond binary +@subsection Testing LilyPond binary -@node Testing LilyPond -@subsection Testing LilyPond - -@html - -@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 +program. This suite can be used to test that the binary has +been built correctly. -@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}. +The test suite can be executed with: -For checking the coverage of the test suite, do the following +@verbatim +make test +@end verbatim -@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 +If the test suite completes successfully, the LilyPond binary +has been verified. +More information on the regression test suite is found at +@rcontrib{Regression tests}. @node Problems -@subsection Problems +@section 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 +@unnumberedsubsec Compiling on MacOS@tie{}X Here are special instructions for compiling under MacOS@tie{}X. These instructions assume that dependencies are installed using @@ -494,16 +1343,15 @@ 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 +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 +export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH @end example -Now you must edit the generated @code{config.make} file. Change +Now you must edit the generated @file{config.make} file. Change @example FLEXLEXER_FILE = /usr/include/FlexLexer.h @@ -517,7 +1365,7 @@ 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 +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 @@ -529,15 +1377,15 @@ 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 +Now run the @code{./configure} script. To avoid complications with automatic font detection, add @example ---with-ncsb-dir=/opt/local/share/ghostscript/fonts +--with-fonts-dir=/opt/local/share/ghostscript/fonts @end example -@unnumberedsubsubsec Solaris +@unnumberedsubsec Solaris Solaris7, ./configure @@ -556,7 +1404,7 @@ or CONFIG_SHELL=/bin/bash bash -c ./configure @end example -@unnumberedsubsubsec FreeBSD +@unnumberedsubsec 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}. @@ -570,7 +1418,7 @@ for your hierarchy.) @end example -@unnumberedsubsubsec International fonts +@unnumberedsubsec International fonts On Mac OS X, all fonts are installed by default. However, finding all system fonts requires a bit of configuration; see @@ -592,17 +1440,103 @@ Red Hat Fedora Debian GNU/Linux apt-get install emacs-intl-fonts xfonts-intl-.* \ - ttf-kochi-gothic ttf-kochi-mincho \ + fonts-ipafont-gothic fonts-ipafont-mincho \ xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi @end verbatim -@unnumberedsubsubsec Using lilypond python libraries +@unnumberedsubsec Using lilypond python libraries If you want to use lilypond's python libraries (either running certain build scripts manually, or using them in other programs), set @code{PYTHONPATH} to @file{python/out} in your build -directory, or @file{.../usr/lib/lilypond/current/python} in the +directory, or @file{@dots{}/usr/lib/lilypond/current/python} in the installation directory structure. + + +@node Concurrent stable and development versions +@section Concurrent stable and development versions + + +It can be useful to have both the stable and the development versions +of Lilypond available at once. One way to do this on GNU/Linux is to +install the stable version using the precompiled binary, and run the +development version from the source tree. After running @command{make +all} from the top directory of the Lilypond source files, there will +be a binary called @code{lilypond} in the @code{out} directory: + +@example +<@var{path to}>/lilypond/out/bin/lilypond +@end example + +This binary can be run without actually doing the @code{make +install} command. The advantage to this is that you can have all +of the latest changes available after pulling from git and running +@code{make all}, without having to uninstall the old version and +reinstall the new. + +So, to use the stable version, install it as usual and use the +normal commands: + +@example +lilypond foobar.ly +@end example + +To use the development version, create a link to the binary in the +source tree by saving the following line in a file somewhere in your +@code{$PATH}: + +@example +exec <@var{path to}>/lilypond/out/bin/lilypond "$@@" +@end example + +Save it as @code{Lilypond} (with a capital L to distinguish it +from the stable @code{lilypond}), and make it executable: + +@example +chmod +x Lilypond +@end example + +Then you can invoke the development version this way: + +@example +Lilypond foobar.ly +@end example + + +TODO: ADD + +- other compilation tricks for developers + + +@node Build system +@section Build system + + +We currently use make and stepmake, which is complicated and only +used by us. Hopefully this will change in the future. + + +@subheading Version-specific texinfo macros + +@itemize + +@item +made with @command{scripts/build/create-version-itexi.py} and@* +@command{scripts/build/create-weblinks-itexi.py} + +@item +used extensively in the @code{WEBSITE_ONLY_BUILD} version of the +website (made with @file{website.make}, used on lilypond.org) + +@item +not (?) used in the main docs? + +@item +the numbers in VERSION file: MINOR_VERSION should be 1 more than +the last release, VERSION_DEVEL should be the last @strong{online} +release. Yes, VERSION_DEVEL is less than VERSION. + +@end itemize