Add note about removing -jX to facilitate finding make errors
[lilypond/mpolesky.git] / Documentation / included / compile.itexi
blob3966ccfce47868e95ca2c308f067cba3a7e66b4f
1 @c -*- coding: utf-8; mode: texinfo; -*-
4 @c DO NOT TRANSLATE THIS FILE
6 @c include any node/sections from the higher-level *texi file.
7 @c   @n ode Compiling from source
8 @c   @s ection Compiling from source
11 @menu
12 * Overview of compiling::
13 * Requirements::
14 * Getting the source code::
15 * Configuring make::
16 * Compiling LilyPond::
17 * Post-compilation options::
18 * Problems::
19 * Concurrent stable and development versions::
20 * Using a Virtual Machine to Compile LilyPond::
21 * Build system::
22 @end menu
25 @node Overview of compiling
26 @section Overview of compiling
28 Compiling LilyPond from source is an involved process, and is only
29 recommended for developers and packagers.  Typical program users
30 are instead encouraged to obtain the program from a package
31 manager (on Unix) or by downloading a precompiled binary
32 configured for a specific operating system.  Pre-compiled binaries
33 are available on the @rweb{Download} page.
35 Compiling LilyPond from source is necessary if you want to build,
36 install, or test your own version of the program.
38 A successful compile can also be used to generate and install the
39 documentation, incorporating any changes you may have made.
40 However, a successful compile is not a requirement for generating
41 the documentation.  The documentation can be built using a Git
42 repository in conjunction with a locally installed copy of the
43 program.  For more information, see @ref{Building documentation
44 without compiling}.
46 Attempts to compile LilyPond natively on Windows have been
47 unsuccessful, though a workaround is available (see @ref{Using a
48 Virtual Machine to Compile LilyPond}).
51 @node Requirements
52 @section Requirements
55 @menu
56 * Requirements for running LilyPond::
57 * Requirements for compiling LilyPond::
58 * Requirements for building documentation::
59 @end menu
62 @node Requirements for running LilyPond
63 @subsection Requirements for running LilyPond
65 Running LilyPond requires proper installation of the following
66 software:
68 @itemize
69 @item @uref{http://www.dejavu-fonts.org/, DejaVu fonts} (normally
70 installed by default)
72 @item @uref{http://www.fontconfig.org/, FontConfig} (2.4.0 or newer)
74 @item @uref{http://www.freetype.org/, Freetype} (2.1.10 or newer)
76 @item @uref{http://www.ghostscript.com, Ghostscript} (8.60 or
77 newer)
79 @item @uref{http://www.gnu.org/software/guile/guile.html, Guile}
80 (1.8.2 or newer)
82 @item @uref{http://www.pango.org/, Pango} (1.12 or newer)
84 @item @uref{http://www.python.org, Python} (2.4 or newer)
85 @end itemize
87 International fonts are required to create music with
88 international text or lyrics.
91 @node Requirements for compiling LilyPond
92 @subsection Requirements for compiling LilyPond
94 Below is a full list of packages needed to build LilyPond.
95 However, for most common distributions there is an easy way of
96 installing most all build dependencies in one go:
98 @multitable @columnfractions .5 .5
99 @headitem Distribution @tab Command
100 @item Debian, Ubuntu
101 @tab @code{sudo apt-get build-dep lilypond}
103 @item Fedora, RHEL
104 @tab @code{sudo yum-builddep lilypond}
106 @item openSUSE, SLED
107 @c sorry for the idiosyncratic command, I really asked and argued
108 @c for "zypper build-dep" :-(
109 @tab @code{sudo zypper --build-deps-only source-install lilypond}
110 @end multitable
112 @itemize
113 @item Everything listed in @ref{Requirements for running
114 LilyPond}
116 @item Development packages for the above items (which should
117 include header files and libraries).
119 Red Hat Fedora:
121 @c ghostscript-devel-[version] isn't needed
122 @example
123 guile-devel-@var{version}
124 fontconfig-devel-@var{version}
125 freetype-devel-@var{version}
126 pango-devel-@var{version}
127 python-devel-@var{version}
128 @end example
130 Debian GNU/Linux:
132 @c libgs-dev isn't needed
133 @example
134 guile-@var{version}-dev
135 libfontconfig1-dev
136 libfreetype6-dev
137 libpango1.0-dev
138 python@var{version}-dev
139 @end example
141 @item @uref{http://flex.sourceforge.net/, Flex}
143 @item @uref{http://fontforge.sf.net/, FontForge} (20060125 or
144 newer)
146 @item @uref{http://www.gnu.org/software/bison/, GNU Bison}
148 @item @uref{http://gcc.gnu.org/, GNU Compiler Collection} (3.4 or
149 newer, 4.@var{x} recommended)
151 @item @uref{http://www.gnu.org/software/gettext/gettext.html, GNU
152 gettext} (0.17 or newer)
154 @item @uref{http://www.gnu.org/software/make/, GNU Make} (3.78 or
155 newer)
157 @item @uref{http://metafont.tutorial.free.fr/, MetaFont}
158 (mf-nowin, mf, mfw or mfont binaries), usually packaged with
159 @uref{http://www.latex-project.org/ftp.html, @TeX{}}.
161 @item @uref{http://cm.bell-labs.com/who/hobby/MetaPost.html,
162 MetaPost} (mpost binary), usually packaged with
163 @uref{http://www.latex-project.org/ftp.html, @TeX{}}.
165 @item @uref{http://www.perl.org/, Perl}
167 @item @uref{http://www.gnu.org/software/texinfo/, Texinfo} (4.11
168 or newer)
170 @item @uref{http://www.lcdf.org/~eddietwo/type/#t1utils, Type 1
171 utilities} (1.33 or newer recommended)
172 @end itemize
175 @node Requirements for building documentation
176 @subsection Requirements for building documentation
178 You can view the documentation online at
179 @uref{http://www.lilypond.org/doc/}, but you can also build it
180 locally.  This process requires some additional tools and
181 packages:
183 @itemize
184 @item Everything listed in @ref{Requirements for compiling
185 LilyPond}
187 @item @uref{http://www.imagemagick.org/, ImageMagick}
189 @item @uref{http://netpbm.sourceforge.net/, Netpbm}
191 @item @uref{http://rsync.samba.org/, rsync}
193 @item @uref{http://www.nongnu.org/texi2html/, Texi2HTML} (1.82)
195 @item International fonts
197 Red Hat Fedora:
199 @example
200 fonts-arabic
201 fonts-hebrew
202 fonts-ja
203 fonts-xorg-truetype
204 taipeifonts
205 ttfonts-ja
206 ttfonts-zh_CN
207 @end example
209 Debian GNU/Linux:
211 @example
212 emacs-intl-fonts
213 ttf-kochi-gothic
214 ttf-kochi-mincho
215 xfonts-bolkhov-75dpi
216 xfonts-cronyx-75dpi
217 xfonts-cronyx-100dpi
218 xfonts-intl-.*
219 @end example
220 @end itemize
223 @node Getting the source code
224 @section Getting the source code
227 @subheading Downloading the Git repository
229 In general, developers compile LilyPond from within a local Git
230 repository.  Setting up a local Git repository is explained in
231 @rcontrib{Starting with Git}.
234 @subheading Downloading a source tarball
236 Packagers are encouraged to use source tarballs for compiling.
238 The tarball for the latest stable release is available on the
239 @rweb{Source} page.
241 @noindent
242 The latest
243 @uref{http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=snapshot, source code snapshot}
244 is also available as a tarball from the GNU Savannah Git server.
246 @noindent
247 All tagged releases (including legacy stable
248 versions and the most recent development release) are available
249 here:
251 @example
252 @uref{http://download.linuxaudio.org/lilypond/source/}
253 @end example
255 Download the tarball to your @file{~/src/} directory, or some
256 other appropriate place.
258 @warning{Be careful where you unpack the tarball!  Any
259 subdirectories of the current folder named @file{lilypond/} or
260 @file{lilypond-@var{x.y.z}/} (where @var{x.y.z} is the release
261 number) will be overwritten if there is a name clash with the
262 tarball.}
264 Unpack the tarball with this command:
266 @example
267 tar -xzf lilypond-@var{x.y.z}.tar.gz
268 @end example
270 This creates a subdirectory within the current directory called
271 @file{lilypond-@var{x.y.z}/}.  Once unpacked, the source files
272 occupy about 40 MB of disk space.
274 Windows users wanting to look at the source code may have to
275 download and install the free-software
276 @uref{http://www.7-zip.org, 7zip archiver} to extract the tarball.
279 @node Configuring make
280 @section Configuring @command{make}
283 @menu
284 * Running ./autogen.sh::
285 * Running ./configure::
286 @end menu
289 @node Running ./autogen.sh
290 @subsection Running @command{./autogen.sh}
292 After you unpack the tarball (or download the Git repository), the
293 contents of your top source directory should be similar to the
294 current source tree listed at
295 @uref{http://git.sv.gnu.org/gitweb/?p=lilypond.git;a=tree}.
297 Next, you need to create the generated files; enter the following
298 command from your top source directory:
300 @example
301 ./autogen.sh
302 @end example
304 This will:
306 @enumerate
307 @item generate a number of files and directories to aid
308 configuration, such as @file{configure}, @file{README.txt}, etc.
310 @item automatically run the @command{./configure} command.
311 @end enumerate
314 @node Running ./configure
315 @subsection Running @command{./configure}
317 @menu
318 * Configuration options::
319 * Checking build dependencies::
320 * Configuring target directories::
321 * Making an out-of-tree build::
322 @end menu
325 @node Configuration options
326 @unnumberedsubsubsec Configuration options
328 The @command{./configure} command (generated by
329 @command{./autogen.sh}) provides many options for configuring
330 @command{make}.  To see them all, run:
332 @example
333 ./configure --help
334 @end example
337 @node Checking build dependencies
338 @unnumberedsubsubsec Checking build dependencies
340 When @command{./configure} is run without any arguments, it will
341 check to make sure your system has everything required for
342 compilation.  This is done automatically when
343 @command{./autogen.sh} is run.  If any build dependency is
344 missing, @command{./configure} will return with:
346 @example
347 ERROR: Please install required programs:  @var{foo}
348 @end example
350 The following message is issued if you are missing programs that
351 are only needed for building the documentation:
353 @example
354 WARNING: Please consider installing optional programs:  @var{bar}
355 @end example
357 If you intend to build the documentation locally, you will need to
358 install or update these programs accordingly.
360 @warning{@command{./configure} may fail to issue warnings for
361 certain documentation build requirements that are not met.  If you
362 experience problems when building the documentation, you may need
363 to do a manual check of @ref{Requirements for building
364 documentation}.}
367 @node Configuring target directories
368 @unnumberedsubsubsec Configuring target directories
370 If you intend to use your local build to install a local copy of
371 the program, you will probably want to configure the installation
372 directory.  Here are the relevant lines taken from the output of
373 @command{./configure@tie{}--help}:
375 @quotation
376 By default, `@command{make@tie{}install}' will install all the
377 files in @file{/usr/local/bin}, @file{/usr/local/lib} etc.  You
378 can specify an installation prefix other than @file{/usr/local}
379 using `@code{--prefix}', for instance `@code{--prefix=$HOME}'.
380 @end quotation
382 A typical installation prefix is @file{$HOME/usr}:
384 @example
385 ./configure --prefix=$HOME/usr
386 @end example
388 Note that if you plan to install a local build on a system where
389 you do not have root privileges, you will need to do something
390 like this anyway---@command{make@tie{}install} will only succeed
391 if the installation prefix points to a directory where you have
392 write permission (such as your home directory).  The installation
393 directory will be automatically created if necessary.
395 The location of the @command{lilypond} command installed by this
396 process will be @file{@var{prefix}/bin/lilypond}; you may want to
397 add @file{@var{prefix}/bin/} to your @code{$PATH} if it is not
398 already included.
400 It is also possible to specify separate installation directories
401 for different types of program files.  See the full output of
402 @command{./configure@tie{}--help} for more information.
404 If you encounter any problems, please see @ref{Problems}.
407 @node Making an out-of-tree build
408 @unnumberedsubsubsec Making an out-of-tree build
410 It is possible to compile LilyPond in a build tree different from
411 the source tree, using the @option{--srcdir} option of
412 @command{configure}.  Note that in some cases you may need to
413 remove the output of a previous @command{configure} command by
414 running @command{make@tie{}distclean} in the main source directory
415 before configuring the out-of-tree build:
417 @example
418 make distclean
419 mkdir lily-build && cd lily-build
420 @var{sourcedir}/configure --srcdir=@var{sourcedir}
421 @end example
424 @node Compiling LilyPond
425 @section Compiling LilyPond
428 @menu
429 * Using make::
430 * Saving time with the -j option::
431 * Compiling for multiple platforms::
432 * Useful make variables::
433 @end menu
436 @node Using make
437 @subsection Using @command{make}
439 LilyPond is compiled with the @command{make} command.  Assuming
440 @command{make} is configured properly, you can simply run:
442 @example
443 make
444 @end example
446 @samp{make} is short for @samp{make all}.  To view a list of @command{make}
447 targets, run:
449 @example
450 make help
451 @end example
453 TODO: Describe what @command{make} actually does.
456 @node Saving time with the -j option
457 @subsection Saving time with the @option{-j} option
459 If your system has multiple CPUs, you can speed up compilation by
460 adding @samp{-j@var{X}} to the @command{make} command, where
461 @samp{@var{X}} is one more than the number of cores you have.  For
462 example, a typical Core2Duo machine would use:
464 @example
465 make -j3
466 @end example
468 If you get errors using the @option{-j} option, and @samp{make}
469 succeeds without it, try lowering the @code{@var{X}} value.
471 Because multiple jobs run in parallel when @option{-j} is used, it can
472 be difficult to determine the source of an error when one occurs.  In
473 that case, running @samp{make} without the @option{-j} is advised.
475 @node Compiling for multiple platforms
476 @subsection Compiling for multiple platforms
478 If you want to build multiple versions of LilyPond with different
479 configuration settings, you can use the
480 @code{--enable-config=@var{CONF}} option of @command{configure}.
481 You should use @code{make@tie{}conf=@var{CONF}} to generate the
482 output in @file{out-@var{CONF}}.  For example, suppose you want to
483 build with and without profiling, then use the following for the
484 normal build
486 @example
487 ./configure --prefix=$HOME/usr/ --enable-checking
488 make
489 @end example
491 and for the profiling version, specify a different configuration
493 @example
494 ./configure --prefix=$HOME/usr/ --enable-profiling \
495   --enable-config=prof --disable-checking
496 make conf=prof
497 @end example
499 If you wish to install a copy of the build with profiling, don't
500 forget to use @code{conf=@var{CONF}} when issuing
501 @command{make@tie{}install}:
503 @example
504 make conf=prof install
505 @end example
508 @seealso
509 @ref{Installing LilyPond from a local build}
512 @node Useful make variables
513 @subsection Useful @command{make} variables
515 If a less verbose build output if desired, the variable
516 @code{QUIET_BUILD} may be set to @code{1} on @command{make}
517 command line, or in @file{local.make} at top of the build tree.
520 @node Post-compilation options
521 @section Post-compilation options
524 @menu
525 * Installing LilyPond from a local build::
526 * Generating documentation::
527 * Testing LilyPond::
528 @end menu
531 @node Installing LilyPond from a local build
532 @subsection Installing LilyPond from a local build
534 If you configured @command{make} to install your local build in a
535 directory where you normally have write permission (such as your
536 home directory), and you have compiled LilyPond by running
537 @command{make}, you can install the program in your target
538 directory by running:
540 @example
541 make install
542 @end example
544 If instead, your installation directory is not one that you can
545 normally write to (such as the default @file{/usr/local/}, which
546 typically is only writeable by the superuser), you will need to
547 temporarily become the superuser when running
548 @command{make@tie{}install}:
550 @example
551 sudo make install
552 @end example
554 @noindent
555 or...
557 @example
558 su -c 'make install'
559 @end example
561 If you don't have superuser privileges, then you need to configure
562 the installation directory to one that you can write to, and then
563 re-install.  See @ref{Configuring target directories}.
566 @node Generating documentation
567 @subsection Generating documentation
570 @menu
571 * Documentation editor's edit/compile cycle::
572 * Building documentation::
573 * Saving time with CPU_COUNT::
574 * AJAX search::
575 * Installing documentation::
576 * Building documentation without compiling::
577 @end menu
580 @node Documentation editor's edit/compile cycle
581 @unnumberedsubsubsec Documentation editor's edit/compile cycle
583 @itemize
584 @item
585 Initial documentation build:
587 @example
588 make [-j@var{X}]
589 make [-j@var{X} CPU_COUNT=@var{X}] doc  @emph{## can take an hour or more}
590 @end example
592 @item
593 Edit/compile cycle:
595 @example
596 @emph{## edit source files, then...}
598 make [-j@var{X}]                  @emph{## needed if editing outside}
599                             @emph{##   Documentation/, but useful anyway}
600                             @emph{##   for finding Texinfo errors.}
601 touch Documentation/*te??   @emph{## bug workaround}
602 make [-j@var{X} CPU_COUNT=@var{X}] doc  @emph{## usually faster than initial build.}
603 @end example
605 @item
606 Reset:
608 @example
609 make doc-clean              @emph{## use only as a last resort.}
610 @end example
611 @end itemize
613 @node Building documentation
614 @unnumberedsubsubsec Building documentation
616 After a successful compile (using @command{make}), the
617 documentation can be built by issuing:
619 @example
620 make doc
621 @end example
623 The first time you run @command{make@tie{}doc}, the process can
624 easily take an hour or more.  After that, @command{make@tie{}doc}
625 only makes changes to the pre-built documentation where needed,
626 so it may only take a minute or two to test changes if the
627 documentation is already built.
629 If @command{make@tie{}doc} succeeds, the HTML documentation tree
630 is available in @file{out-www/offline-root/}, and can be browsed
631 locally.  Various portions of the documentation can be found by
632 looking in @file{out/} and @file{out-www} subdirectories in other
633 places in the source tree, but these are only @emph{portions} of
634 the docs.  Please do not complain about anything which is broken
635 in those places; the only complete set of documentation is in
636 @file{out-www/offline-root/} from the top of the source tree.
638 Compilation of documentation in Info format with images can be
639 done separately by issuing:
641 @example
642 make info
643 @end example
645 @knownissues
647 If source files have changed since the last documentation build,
648 output files that need to be rebuilt are normally rebuilt, even if
649 you do not run @code{make@tie{}doc-clean} first.  However, build
650 dependencies in the documentation are so complex that some
651 newly-edited files may not be rebuilt as they should be; a
652 workaround is to @command{touch} the top source file for any
653 manual you've edited.  For example, if you make changes to a file
654 in @file{notation/}, do:
656 @example
657 touch Documentation/notation.tely
658 @end example
660 @noindent
661 The top sources possibly affected by this are:
663 @example
664 Documentation/extend.texi
665 Documentation/changes.tely
666 Documentation/contributor.texi
667 Documentation/essay.tely
668 Documentation/extending.tely
669 Documentation/learning.tely
670 Documentation/notation.tely
671 Documentation/snippets.tely
672 Documentation/usage.tely
673 Documentation/web.texi
674 @end example
676 @noindent
677 You can @command{touch} all of them at once with:
679 @example
680 touch Documentation/*te??
681 @end example
683 @noindent
684 However, this will rebuild all of the manuals
685 indiscriminately---it is more efficient to @command{touch} only
686 the affected files.
689 @node Saving time with CPU_COUNT
690 @unnumberedsubsubsec Saving time with @code{CPU_COUNT}
692 The most time consuming task for building the documentation is
693 running LilyPond to build images of music, and there cannot be
694 several simultaneously running @command{lilypond-book} instances,
695 so the @option{-j} @command{make} option does not significantly
696 speed up the build process.  To help speed it up, the makefile
697 variable @option{CPU_COUNT} may be set in @file{local.make} or on
698 the command line to the number of @code{.ly} files that LilyPond
699 should process simultaneously, e.g. on a bi-processor or dual core
700 machine:
702 @example
703 make -j3 CPU_COUNT=3 doc
704 @end example
706 @noindent
707 The recommended value of @option{CPU_COUNT} is one plus the number
708 of cores or processors, but it is advisable to set it to a smaller
709 value unless your system has enough RAM to run that many
710 simultaneous LilyPond instances.  Also, values for the @option{-j}
711 option that pose problems with @samp{make} are less likely to pose
712 problems with @samp{make doc} (this applies to both @option{-j}
713 and @option{CPU_COUNT}).  For example, with a quad-core processor,
714 it is possible for @samp{make -j5 CPU_COUNT=5 doc} to work
715 consistently even if @samp{make -j5} rarely succeeds.
718 @node AJAX search
719 @unnumberedsubsubsec AJAX search
721 To build the documentation with interactive searching, use:
723 @example
724 make doc AJAX_SEARCH=1
725 @end example
727 This requires PHP, and you must view the docs via a http
728 connection (you cannot view them on your local filesystem).
730 @warning{Due to potential security or load issues, this option is
731 not enabled in the official documentation builds.  Enable at your
732 own risk.}
735 @node Installing documentation
736 @unnumberedsubsubsec Installing documentation
738 The HTML, PDF and if available Info files can be installed into
739 the standard documentation path by issuing
741 @example
742 make install-doc
743 @end example
745 @noindent
746 This also installs Info documentation with images if the
747 installation prefix is properly set; otherwise, instructions to
748 complete proper installation of Info documentation are printed on
749 standard output.
751 To install the Info documentation separately, run:
753 @example
754 make install-info
755 @end example
757 @noindent
758 Note that to get the images in Info documentation, @code{install-doc}
759 target creates symbolic links to HTML and PDF installed documentation
760 tree in @file{@var{prefix}/share/info}, in order to save disk space,
761 whereas @code{install-info} copies images in
762 @file{@var{prefix}/share/info} subdirectories.
764 It is possible to build a documentation tree in
765 @file{out-www/online-root/}, with special processing, so it can be
766 used on a website with content negotiation for automatic language
767 selection; this can be achieved by issuing
769 @example
770 make WEB_TARGETS=online doc
771 @end example
773 @noindent
774 and both @q{offline} and @q{online} targets can be generated by issuing
776 @example
777 make WEB_TARGETS="offline online" doc
778 @end example
780 Several targets are available to clean the documentation build and
781 help with maintaining documentation; an overview of these targets is
782 available with
784 @example
785 make help
786 @end example
788 @noindent
789 from every directory in the build tree.  Most targets for
790 documentation maintenance are available from
791 @file{Documentation/}; for more information, see
792 @rcontrib{Documentation work}.
794 The makefile variable @code{QUIET_BUILD} may be set to @code{1}
795 for a less verbose build output, just like for building the
796 programs.
799 @node Building documentation without compiling
800 @unnumberedsubsubsec Building documentation without compiling
803 The documentation can be built locally without compiling LilyPond
804 binary, if LilyPond is already installed on your system.
806 From a fresh Git checkout, do
808 @example
809 ./autogen.sh   # ignore any warning messages
810 cp GNUmakefile.in GNUmakefile
811 make -C scripts && make -C python
812 nice make LILYPOND_EXTERNAL_BINARY=/path/to/bin/lilypond doc
813 @end example
815 Please note that this may break sometimes -- for example, if a new
816 feature is added with a test file in input/regression, even the latest
817 development release of LilyPond will fail to build the docs.
819 You may build the manual without building all the @file{input/*} stuff
820 (i.e. mostly regression tests): change directory, for example to
821 @file{Documentation/}, issue @code{make doc}, which will build
822 documentation in a subdirectory @file{out-www} from the source files in
823 current directory.  In this case, if you also want to browse the
824 documentation in its post-processed form, change back to top directory
825 and issue
827 @example
828 make out=www WWW-post
829 @end example
831 @knownissues
833 You may also need to create a script for @command{pngtopnm} and
834 @code{pnmtopng}.  On GNU/Linux, I use this:
836 @verbatim
837 export LD_LIBRARY_PATH=/usr/lib
838 exec /usr/bin/pngtopnm "$@"
839 @end verbatim
841 On MacOS X with fink, I use this:
843 @verbatim
844 export DYLD_LIBRARY_PATH=/sw/lib
845 exec /sw/bin/pngtopnm "$@"
846 @end verbatim
848 On MacOS X with macports, you should use this:
850 @verbatim
851 export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib
852 exec /opt/local/bin/pngtopnm "$@"
853 @end verbatim
856 @node Testing LilyPond
857 @subsection Testing LilyPond
860 LilyPond comes with an extensive suite that exercises the entire
861 program. This suite can be used to automatically check the impact
862 of a change.
864 @menu
865 * Developer's edit/compile/test cycle::
866 * Other tests::
867 @end menu
869 @node Developer's edit/compile/test cycle
870 @unnumberedsubsubsec Developer's edit/compile/test cycle
872 TODO: is @code{[-j@var{X} CPU_COUNT=@var{X}]} useful for
873 @code{test-baseline}, @code{check}, @code{clean},
874 @code{test-redo}?
876 @itemize
877 @item
878 Initial test:
880 @example
881 make [-j@var{X}]
882 make test-baseline
883 make [-j@var{X} CPU_COUNT=@var{X}] check
884 @end example
886 @item
887 Edit/compile/test cycle:
889 @example
890 @emph{## edit source files, then...}
892 make clean                    @emph{## only if needed (see below)}
893 make [-j@var{X}]                    @emph{## only if needed (see below)}
894 make test-redo                @emph{## redo files differing from baseline}
895 make [-j@var{X} CPU_COUNT=@var{X}] check  @emph{## CPU_COUNT here?}
896 @end example
898 @item
899 Reset:
901 @example
902 make test-clean
903 @end example
904 @end itemize
906 If you modify any source files that have to be compiled (such as
907 @file{.cc} or @file{.hh} files in @file{flower/} or @file{lily/}),
908 then you must run @command{make} before @command{make test-redo},
909 so @command{make} can compile the modified files and relink all
910 the object files.  If you only modify files which are interpreted,
911 like those in the @file{scm/} and @file{ly/} directories, then
912 @command{make} is not needed before @command{make test-redo}.
914 Also, if you modify any font definitions in the @file{mf/}
915 directory then you must run @command{make clean} and
916 @command{make} before running @command{make test-redo}.  This will
917 recompile everything, whether modified or not, and takes a lot
918 longer.
920 Running @command{make@tie{}check} will leave an HTML page
921 @file{out/test-results/index.html}.  This page shows all the
922 important differences that your change introduced, whether in the
923 layout, MIDI, performance or error reporting.
926 @node Other tests
927 @unnumberedsubsubsec Other tests
929 For tracking memory usage as part of this test, you will need
930 GUILE CVS; especially the following patch:
931 @uref{http://www.lilypond.org/vc/old/gub.darcs/patches/guile-1.9-gcstats.patch}.
933 For checking the coverage of the test suite, do the following
935 @example
936 ./scripts/auxiliar/build-coverage.sh
937 @emph{# uncovered files, least covered first}
938 ./scripts/auxiliar/coverage.py  --summary out-cov/*.cc
939 @emph{# consecutive uncovered lines, longest first}
940 ./scripts/auxiliar/coverage.py  --uncovered out-cov/*.cc
941 @end example
944 @node Problems
945 @section Problems
947 For help and questions use @email{lilypond-user@@gnu.org}.  Send
948 bug reports to @email{bug-lilypond@@gnu.org}.
950 Bugs that are not fault of LilyPond are documented here.
952 @unnumberedsubsubsec Bison 1.875
954 There is a bug in bison-1.875: compilation fails with "parse error
955 before `goto'" in line 4922 due to a bug in bison.  To fix, please
956 recompile bison 1.875 with the following fix
958 @example
959 $ cd lily; make out/parser.cc
960 $ vi +4919 out/parser.cc
961 # append a semicolon to the line containing "__attribute__ ((__unused__))
962 # save
963 $ make
964 @end example
967 @unnumberedsubsubsec Compiling on MacOS@tie{}X
969 Here are special instructions for compiling under MacOS@tie{}X.
970 These instructions assume that dependencies are installed using
971 @uref{http://www.macports.org/, MacPorts.} The instructions have
972 been tested using OS X 10.5 (Leopard).
974 First, install the relevant dependencies using MacPorts.
976 Next, add the following to your relevant shell initialization
977 files. This is @code{~/.profile} by default. You should create
978 this file if it does not exist.
980 @example
981 export PATH=/opt/local/bin:/opt/local/sbin:$PATH
982 export DYLD_FALLBACK_LIBRARY_PATH=/opt/local/lib:$DYLD_FALLBACK_LIBRARY_PATH
983 @end example
985 Now you must edit the generated @code{config.make} file.  Change
987 @example
988 FLEXLEXER_FILE = /usr/include/FlexLexer.h
989 @end example
991 @noindent
994 @example
995 FLEXLEXER_FILE = /opt/local/include/FlexLexer.h
996 @end example
998 At this point, you should verify that you have the appropriate
999 fonts installed with your ghostscript installation. Check @code{ls
1000 /opt/local/share/ghostscript/fonts} for: 'c0590*' files (.pfb,
1001 .pfb and .afm).  If you don't have them, run the following
1002 commands to grab them from the ghostscript SVN server and install
1003 them in the appropriate location:
1005 @example
1006 svn export http://svn.ghostscript.com/ghostscript/tags/urw-fonts-1.0.7pre44/
1007 sudo mv urw-fonts-1.0.7pre44/* /opt/local/share/ghostscript/fonts/
1008 rm -rf urw-fonts-1.07pre44
1009 @end example
1011 Now run the @code{./configure} script. To avoid complications with
1012 automatic font detection, add
1014 @example
1015 --with-ncsb-dir=/opt/local/share/ghostscript/fonts
1016 @end example
1019 @unnumberedsubsubsec Solaris
1021 Solaris7, ./configure
1023 @file{./configure} needs a POSIX compliant shell.  On Solaris7,
1024 @file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash
1025 is.  Run configure like
1027 @example
1028 CONFIG_SHELL=/bin/ksh ksh -c ./configure
1029 @end example
1031 @noindent
1034 @example
1035 CONFIG_SHELL=/bin/bash bash -c ./configure
1036 @end example
1038 @unnumberedsubsubsec FreeBSD
1040 To use system fonts, dejaview must be installed.  With the default
1041 port, the fonts are installed in @file{usr/X11R6/lib/X11/fonts/dejavu}.
1043 Open the file @file{$LILYPONDBASE/usr/etc/fonts/local.conf} and add the
1044 following line just after the @code{<fontconfig>} line.  (Adjust as necessary
1045 for your hierarchy.)
1047 @example
1048 <dir>/usr/X11R6/lib/X11/fonts</dir>
1049 @end example
1052 @unnumberedsubsubsec International fonts
1054 On Mac OS X, all fonts are installed by default.  However, finding all
1055 system fonts requires a bit of configuration; see
1056 @uref{http://lists.gnu.org/archive/html/lilypond-user/2007-03/msg00472.html,
1057 this post} on the @code{lilypond-user} mailing list.
1059 On Linux, international fonts are installed by different means on
1060 every distribution.  We cannot list the exact commands or packages
1061 that are necessary, as each distribution is different, and the exact
1062 package names within each distribution changes.  Here are some
1063 hints, though:
1065 @verbatim
1066 Red Hat Fedora
1068     taipeifonts fonts-xorg-truetype ttfonts-ja fonts-arabic \
1069          ttfonts-zh_CN fonts-ja fonts-hebrew
1071 Debian GNU/Linux
1073    apt-get install emacs-intl-fonts xfonts-intl-.* \
1074         ttf-kochi-gothic ttf-kochi-mincho \
1075         xfonts-bolkhov-75dpi xfonts-cronyx-100dpi xfonts-cronyx-75dpi
1076 @end verbatim
1079 @unnumberedsubsubsec Using lilypond python libraries
1081 If you want to use lilypond's python libraries (either running
1082 certain build scripts manually, or using them in other programs),
1083 set @code{PYTHONPATH} to @file{python/out} in your build
1084 directory, or @file{.../usr/lib/lilypond/current/python} in the
1085 installation directory structure.
1090 @node Concurrent stable and development versions
1091 @section Concurrent stable and development versions
1094 It can be useful to have both the stable and the development versions
1095 of Lilypond available at once. One way to do this on GNU/Linux is to
1096 install the stable version using the precompiled binary, and run the
1097 development version from the source tree. After running @command{make
1098 all} from the top directory of the Lilypond source files, there will
1099 be a binary called @code{lilypond} in the @code{out} directory:
1101 @example
1102 <@var{path to}>/lilypond/out/bin/lilypond
1103 @end example
1105 This binary can be run without actually doing the @code{make
1106 install} command. The advantage to this is that you can have all
1107 of the latest changes available after pulling from git and running
1108 @code{make all}, without having to uninstall the old version and
1109 reinstall the new.
1111 So, to use the stable version, install it as usual and use the
1112 normal commands:
1114 @example
1115 lilypond foobar.ly
1116 @end example
1118 To use the development version, create a link to the binary in the
1119 source tree by saving the following line in a file somewhere in your
1120 @code{$PATH}:
1122 @example
1123 exec <@var{path to}>/lilypond/out/bin/lilypond "$@@"
1124 @end example
1126 Save it as @code{Lilypond} (with a capital L to distinguish it
1127 from the stable @code{lilypond}), and make it executable:
1129 @example
1130 chmod +x Lilypond
1131 @end example
1133 Then you can invoke the development version this way:
1135 @example
1136 Lilypond foobar.ly
1137 @end example
1140 TODO: ADD
1142 - other compilation tricks for developers
1145 @node Using a Virtual Machine to Compile LilyPond
1146 @section Using a Virtual Machine to Compile LilyPond
1149 TODO: rewrite for lily-git.tcl !!!  do before GOP!  -gp
1151 Since it is not possible to compile Lilypond on Windows, some
1152 developers may find it useful to install a GNU/Linux virtual
1153 machine. A disk image with a special remix of @strong{Ubuntu}
1154 has been created for this purpose. It has all of the Lilypond
1155 build dependencies in place, so that once installed, it is
1156 ready to compile both Lilypond and the Documentation.
1157 The @code{lilybuntu} remix is available for download here:
1159 @example
1160 @uref{http://@/files.lilynet.net/@/lilybuntu.iso}
1161 @end example
1163 We do not necessarily recommend any one virtualization tool,
1164 however the @code{lilybuntu} remix is known to work well on
1165 @uref{http://www.virtualbox.org/wiki/Downloads, Sun VirtualBox},
1166 which is a free download. Consult your virtualization software's
1167 documentation for instructions on setting up the software and
1168 for general instructions on installing a virtual machine.
1170 Steps to setting up @code{lilybuntu} in a virtual machine:
1172 @enumerate
1173 @item Download the @code{lilybuntu} disk image.
1175 @item Install @code{lilybuntu}. You will use the @code{.iso}
1176 file as the boot disk. It should not be necessary to burn it
1177 to a DVD, but consult the documentation for your virtualization
1178 software for specific instructions. If possible, use at least
1179 the recommended amount of RAM for the virtual machine (384 MB on
1180 VirtualBox), and use a dynamically expanding virtual hard drive.
1181 A virtual hard drive with 6 GB will be enough to compile LilyPond,
1182 but if you intend to build the docs and run the regression tests
1183 the virtual hard drive should be at least 10 GB.
1184 The Ubuntu installation should be straightforward, although in the
1185 partitioning stage do not be afraid to select @qq{use entire disk,}
1186 since this is only your @strong{virtual disk} and not your
1187 machine's actual hard drive.
1189 @item After installation is complete, restart the virtual
1190 machine.  If you are using @strong{VirtualBox}, you may wish
1191 to install the @qq{Guest Additions}, which while not essential for
1192 compiling @code{Lilypond} will allow you to use the virtual machine
1193 in full screen, Seamless mode (also known as Unity mode on other
1194 virtualization platforms) and allow you to share clipboards between
1195 the physical and virtual machine.  From the @code{Devices} menu select
1196 @code{Install Guest Additions...}, the @code{VBOXADDITIONS} CDROM device
1197 will appear on the desktop.  Open a @strong{terminal} session.
1198 (@code{Applications > Accessories > Terminal}) and @code{cd} to the
1199 top level of the CDROM.  Run the @code{autorun.sh} script as superuser
1200 (@code{sudo ./autorun.sh }), a console window will open while the
1201 @qq{Guest Additions} are being installed.  Once the script has
1202 been finished, reboot your Virtual Machine to complete the installation
1203 of the @qq{Guest Additions}.
1205 @item Open a @strong{terminal} session.
1206 (@code{Applications > Accessories > Terminal})
1208 @item Open @strong{Firefox} (there's an icon for it on the
1209 panel at the top of the screen) and go to the online Lilypond
1210 @uref{http://lilypond.org/doc/latest/Documentation/contributor/,
1211 Contributor's Guide}.
1213 @item To retrieve the Lilypond source code from @code{git},
1214 copy-and-paste each command from the CG @qq{Main source code}
1215 section into the terminal. (paste into the terminal with keystroke
1216 @code{CTRL+SHIFT+V})
1218 @item Prepare to build Lilypond by running the configuration script.
1219 Type
1221 @example
1222 ./autogen.sh
1223 @end example
1225 When it is finished you should be presented
1226 with the three most common @code{make} options:
1228 @example
1229 Type:
1230     make all       to build LilyPond
1231     make install   to install LilyPond
1232     make help      to see all possible targets
1234 Edit local.make for local Makefile overrides.
1235 @end example
1237 @item First type @code{make all} to build Lilypond. This will take
1238 a while.
1240 @item When Lilypond is finished building, build the documentation
1241 by typing
1243 @example
1244 make doc
1245 @end example
1247 Depending on your system specs it could take from 30-60 minutes
1248 to finish.
1250 @end enumerate
1252 At this point everything has been compiled.
1253 You may install Lilypond using @code{make install}, or you may wish
1254 to set up your system with concurrent stable and development
1255 versions as described in the previous section.
1258 @node Build system
1259 @section Build system
1262 We currently use make and stepmake, which is complicated and only
1263 used by us.  Hopefully this will change in the future.
1266 @subsubheading Version-specific texinfo macors
1268 @itemize
1270 @item
1271 made with @command{scripts/build/create-version-itexi.py} and@*
1272 @command{scripts/build/create-weblinks-itexi.py}
1274 @item
1275 used extensively in the @code{WEBSITE_ONLY_BUILD} version of the
1276 website (made with website.make, used on lilypond.org)
1278 @item
1279 not (?) used in the main docs?
1281 @item
1282 the numbers in VERSION file: MINOR_VERSION should be 1 more than
1283 the last release, VERSION_DEVEL should be the last @strong{online}
1284 release.  Yes, VERSION_DEVEL is less than VERSION.
1286 @end itemize