]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/contributor/build-notes.itexi
DOC: more build notes
[lilypond.git] / Documentation / contributor / build-notes.itexi
1 @c -*- coding: utf-8; mode: texinfo; -*-
2
3
4 @node Build system notes
5 @chapter Build system notes
6
7 @warning{This chapter is in high flux, and is being run in a
8 @qq{wiki-like} fashion.  Do not trust anything you read in this
9 chapter.}
10
11 @menu
12 * Build system overview::
13 * Tips for working on the build system::
14 * General build system notes::
15 * Doc build::
16 * Website build::
17 * Building an Ubuntu distro::
18 @end menu
19
20
21 @node Build system overview
22 @section Build system overview
23
24 Build system is currently GNU make, with an extra "stepmake" layer
25 on top.  Look at files in @file{make/} and @file{stepmake/} and
26 all @file{GNUmakefile}s.
27
28 There is wide-spread dissatisfaction with this system, and we are
29 considering changing.  This would be a huge undertaking (estimated
30 200+ hours).  This change will probably involve not using GNU make
31 any more -- but a discussion about the precise build system will
32 have to wait.  Before we reach that point, we need to figure out
33 (at least approximately) what the current build system does.
34
35 Fundamentally, a build system does two things:
36
37 @enumerate
38 @item
39 Constructs command-line commands, for example:
40
41 @example
42 lilypond-book \
43   --tons --of --options \
44   pitches.itely
45 texi2pdf \
46   --more --imperial --and --metric --tons --of --options \
47   pitches.texi
48 @end example
49
50 @item
51 If there was a previous build, it decides which parts of the
52 system need to be rebuilt.
53
54 @end enumerate
55
56 When I try to do anything in the build system, it helps to remind
57 myself of this.  The "end result" is just a series of command-line
58 commands.  All the black magick is just an attempt to construct
59 those commands.
60
61 @node Tips for working on the build system
62 @section Tips for working on the build system
63
64 @itemize
65 @item
66 Add:
67
68 @example
69 echo "aaa"
70
71 echo "bbb"
72 @end example
73
74 to the build system files in various places.  This will let you
75 track where the program is, in various points of the build.
76
77 PH note.  There are lots of places where Make doesn't let you put
78 echo commands.  My top tip for tracing how make runs is to put
79
80 @example
81 $(error Some Text to display)
82 @end example
83
84 This will stop make running and print the text @code{Some Text to
85 display}.
86
87 End PH note.
88
89 @item
90 First task: understand how @code{make website} works,
91 @emph{without} the translations.  Looking at the english-only
92 website is the best introduction to the build system... it only
93 covers about 5% of the whole thing, but even that will likely take
94 10 hours or more.
95
96 @end itemize
97
98
99 @node General build system notes
100 @section General build system notes
101
102 @menu
103 * How stepmake works::
104 @end menu
105
106 @node How stepmake works
107 @subsection How stepmake works
108
109 Typing make website runs the file @file{GNUmakefile} from the
110 build directory.  This only contains 3 lines:
111
112 @example
113 depth = .
114 include config$(if $(conf),-$(conf),).make
115 include $(configure-srcdir)/GNUmakefile.in
116 @end example
117
118 The variable @code{depth} is used throughout the make system to
119 track how far down the directory structure the make is.  The first
120 include sets lots of variables but doesn't "do" anything.  The
121 second runs the file @file{GNUmakefile.in} from the top level
122 source directory.
123
124 This sets another load of variables, and then includes (i.e.
125 immediately runs) @file{stepmake.make} from the @file{make}
126 subdirectory.  This sets a load of other variables, does some
127 testing to see if SCONS (another build tool?) is being used, and
128 then runs @file{make/config.make} - which doesn't seem to exist...
129
130 GP: scons is indeed a different build tool; I think that Jan
131 experimented with it 5 years ago or something.  It seems like we
132 still have bits and pieces of it floating around.
133
134 Next, it runs @file{make/toplevel-version.make}, which sets the
135 version variables for major, minor, patch, stable, development and
136 mypatchlevel (which seems to be used for patch numbers for
137 non-stable versions only?).
138
139 Next - @file{make/local.make}, which doesn't exist.
140
141 Then a few more variable and the interesting comment:
142
143 @example
144 # Don't try to outsmart us, you puny computer!
145 # Well, UGH.  This only removes builtin rules from
146 @end example
147
148 and then tests to see whether BUILTINS_REMOVED is defined.  It
149 appears to be when I run make, and so
150 @file{stepmake/stepmake/no-builtin-rules.make} is run.  The
151 comment at the head of this file says:
152
153 @example
154 # UGH.  GNU make comes with implicit rules.
155 # We don't want any of them, and can't force users to run
156 # --no-builtin-rules
157 @end example
158
159 I've not studied that file at length, but assume it removes all
160 make's build-in rules (e.g. @file{*.c} files are run through the
161 GNU C compiler) - there's a lot of them in here, and a lot of
162 comments, and I'd guess most of it isn't needed.
163
164 We return to @file{stepmake.make}, where we hit the make rule all:
165 The first line of this is:
166
167 @example
168 -include $(addprefix $(depth)/make/,$(addsuffix -inclusions.make, $(LOCALSTEPMAKE_TEMPLATES)))
169 @end example
170
171 which, when the variables are substituted, gives:
172
173 @example
174 ./make/generic-inclusions.make
175 ./make/lilypond-inclusions.make.
176 @end example
177
178 (Note - according to the make documentation, -include is only
179 different from include in that it doesn't produce any kind of
180 error message when the included file doesn't exist).
181
182 And the first file doesn't exist.  Nor the second.  Next:
183
184 @example
185 -include $(addprefix $(stepdir)/,$(addsuffix -inclusions.make, $(STEPMAKE_TEMPLATES)))
186 @end example
187
188 which expands to the following files:
189
190 @example
191 /home/phil/lilypond-git/stepmake/stepmake/generic-inclusions.make
192 /home/phil/lilypond-git/stepmake/stepmake/toplevel-inclusions.make
193 /home/phil/lilypond-git/stepmake/stepmake/po-inclusions.make
194 /home/phil/lilypond-git/stepmake/stepmake/install-inclusions.make.
195 @end example
196
197 One little feature to notice here - these are all absolute file
198 locations - the line prior to this used relative locations.  And
199 none of these files exist, either.  (Further note - I'm assuming
200 all these lines of make I'm following are autogenerated, but
201 that'll be something else to discover.)
202
203 Next in @file{stepmake.make}:
204
205 @example
206 include $(addprefix $(stepdir)/,$(addsuffix -vars.make, $(STEPMAKE_TEMPLATES)))
207 @end example
208
209 which expands to:
210
211 @example
212 /home/phil/lilypond-git/stepmake/stepmake/generic-vars.make
213 /home/phil/lilypond-git/stepmake/stepmake/toplevel-vars.make
214 /home/phil/lilypond-git/stepmake/stepmake/po-vars.make
215 /home/phil/lilypond-git/stepmake/stepmake/install-vars.make.
216 @end example
217
218 Woo.  They all exist (they should as there's no - in front of the
219 include).  @file{generic-vars.make} sets loads of variables
220 (funnily enough).  @file{toplevel-vars.make} is very short - one
221 line commented as @code{# override Generic_vars.make:} and 2 as
222 follows:
223
224 @example
225 # urg?
226 include $(stepdir)/documentation-vars.make
227 @end example
228
229 I assume the urg comment refers to the fact that this should
230 really just create more variables, but it actually sends us off to
231 @file{/home/phil/lilypond-git/stepmake/stepmake/documentation-vars.make}.
232
233 That file is a 3 line variable setting one.
234
235 @file{po-vars.make} has the one-line comment @code{# empty}, as
236 does @file{install-vars.make}.
237
238 So now we're back to @file{stepmake.make}.
239
240 The next lines are
241 :
242 @example
243 # ugh. need to do this because of PATH :=$(top-src-dir)/..:$(PATH)
244 include $(addprefix $(depth)/make/,$(addsuffix -vars.make, $(LOCALSTEPMAKE_TEMPLATES)))
245 @end example
246
247 and the include expands to:
248
249 @example
250 include ./make/generic-vars.make ./make/lilypond-vars.make.
251 @end example
252
253 These again set variables, and in some cases export them to allow
254 child @code{make} processes to use them.
255
256 The final 4 lines of @file{stepmake.make} are:
257
258 @example
259 include $(addprefix $(depth)/make/,$(addsuffix -rules.make, $(LOCALSTEPMAKE_TEMPLATES)))
260 include $(addprefix $(stepdir)/,$(addsuffix -rules.make, $(STEPMAKE_TEMPLATES)))
261 include $(addprefix $(depth)/make/,$(addsuffix -targets.make, $(LOCALSTEPMAKE_TEMPLATES)))
262 include $(addprefix $(stepdir)/,$(addsuffix -targets.make, $(STEPMAKE_TEMPLATES)))
263 @end example
264
265 which expand as follows:
266
267 @example
268 include ./make/generic-rules.make ./make/lilypond-rules.make
269 include
270   /home/phil/lilypond-git/stepmake/stepmake/generic-rules.make
271   /home/phil/lilypond-git/stepmake/stepmake/toplevel-rules.make
272   /home/phil/lilypond-git/stepmake/stepmake/po-rules.make
273   /home/phil/lilypond-git/stepmake/stepmake/install-rules.make
274 include ./make/generic-targets.make ./make/lilypond-targets.make
275 include
276   /home/phil/lilypond-git/stepmake/stepmake/generic-targets.make
277   /home/phil/lilypond-git/stepmake/stepmake/toplevel-targets.make
278   /home/phil/lilypond-git/stepmake/stepmake/po-targets.make
279   /home/phil/lilypond-git/stepmake/stepmake/install-targets.make
280 @end example
281
282 @file{lilypond-rules.make} is @code{#empty}
283
284 @file{generic-rules.make} does seem to have 2 rules in it.  They
285 are:
286
287 @example
288 $(outdir)/%.ly: %.lym4
289         $(M4) $< | sed "s/\`/,/g" > $@
290
291 $(outdir)/%: %.in
292         rm -f $@
293         cat $< | sed $(sed-atfiles) | sed $(sed-atvariables) > $@
294 @end example
295
296 I believe the first rule is for *.ly files, and has a prerequisite
297 that *.lym4 files must be built first.  The recipe is @code{m4  |
298 sed "s/\`/,/g" >}.  Perhaps someone with more Unix/make knowledge
299 can comment on exactly what the rules mean/do.
300
301 @file{toplevel-rules.make} is @code{#empty}
302
303 @file{po-rules.make} is @code{#empty}
304
305 @file{install-rules.make} is @code{#empty}
306
307 @file{generic-targets.make} contains 2 lines of comments.
308
309 @file{lilypond-targets.make} contains only:
310
311 @example
312 ## TODO: fail dist or web if no \version present.
313 check-version:
314         grep -L version $(LY_FILES)
315 @end example
316
317 @file{stepmake/generic-targets.make} contains lots of rules - too
318 many to list here - it seems to be the main file for rules. (FWIW
319 I haven't actually found a rule for website: anywhere, although
320 it clearly exists.  I have also found that you can display a rule
321 in the terminal by typing, say @code{make -n website}.  This is
322 probably common knowledge.
323
324 @file{stepmake/toplevel-targets.make} adds a load of other (and
325 occasionally the same) rules to the gernric-targets.
326
327 @file{stepmake/po-targets.make} is rules for po* makes.
328
329 @file{stepmake/install-targets.make} has rules for local-install*.
330
331 And that's the end of stepmake.make.  Back to
332 @file{GNUmakefile.in}.
333
334 A bit more info from 27 March.  I've put some error traces into
335 @code{GNUmakefile} in the build directory, and it looks like the
336 following lines actually cause the make to run (putting an error
337 call above them - no make; below them - make):
338
339 @example
340 ifeq ($(out),www)
341 # All web targets, except info image symlinks and info docs are
342 # installed in non-recursing target from TOP-SRC-DIR
343 install-WWW:
344         -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir)
345         rsync -rl --exclude='*.signature' $(outdir)/offline-root $(DESTDIR)$(webdir)
346         $(MAKE) -C Documentation omf-local-install
347 @end example
348
349 I don't currently understand the @code{ifeq}, since @code{$(out)}
350 is empty at this point, but the line starting @code{-$(INSTALL)}
351 translates to:
352
353 @example
354 -/usr/bin/python /home/phil/lilypond-git/stepmake/bin/install.py -c -m 755 -d /usr/local/share/doc/lilypond/html
355 @end example
356
357 End of work for Sunday 27th.
358
359 Another alterative approach to understanding the website build
360 would be to redirect @code{make -n website} and @code{make website}
361 to a text file and work through a) what it does and b) where the
362 errors are occurring.
363
364 GP: wow, all the above is much more complicated than I've ever
365 looked at stuff -- I tend to do a "back first" approach (where I
366 begin from the command-line that I want to modify, figure out
367 where it's generated, and then figure out how to change the
368 generated command-line), rather than a "front first" (where you
369 begin from the "make" command).
370
371
372 @node Doc build
373 @section Doc build
374
375 @menu
376 * Building a bibliography::
377 @end menu
378
379 @node Building a bibliography
380 @subsection Building a bibliography
381
382 Bibliography files contain a list of citations, like this:
383
384 @example
385 @@Book@{vinci,
386   author = @{Vinci, Albert C.@},
387   title = @{Fundamentals of Traditional Music Notation@},
388   publisher = @{Kent State University Press@},
389   year = @{1989@}
390 @}
391 @end example
392
393 There are a variety of types of citation (e.g. Book (as above),
394 article, publication).  Each cited publication has a list of
395 entries that can be used to identify the publication.
396 Bibliograpies are normally stored as files with a .bib
397 extension.  One part of the doc-build process is transforming the
398 bibliography information into @code{texinfo} files.  The commands
399 to do this are in the @file{GNUmakefile} in the
400 @file{Documentation} directory.
401
402 A typical line of the makefile to translate a single bibliography
403 is:
404
405 @example
406 $(outdir)/colorado.itexi:
407         BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
408                 -s $(top-src-dir)/Documentation/lily-bib \
409                 -o $(outdir)/colorado.itexi \
410                 $(src-dir)/essay/colorado.bib
411 @end example
412
413 Line by line:
414
415 @example
416 $(outdir)/colorado.itexi:
417 @end example
418
419 We're making the file @file{colorado.itexi} and so this is the
420 make instruction.
421
422 @example
423         BSTINPUTS=$(src-dir)/essay $(buildscript-dir)/bib2texi \
424 @end example
425
426 It's in the @file{essay} directory and we want to run the
427 bib2texi.py script against it.
428
429 @example
430                 -s $(top-src-dir)/Documentation/lily-bib \
431 @end example
432
433 The style template is @file{lily-bib.bst} and is found in the
434 @file{Documentation} directory.
435
436 @example
437                 -o $(outdir)/colorado.itexi \
438 @end example
439
440 The output file in @file{colorado.itexi}.
441
442 @example
443                 $(src-dir)/essay/colorado.bib
444 @end example
445
446 The input file is @file{colorado.bib} in the @file{essay}
447 directory.
448
449 The @code{bib2texi} Python script used to be used with a variety
450 of options, but now is always called using the same options, as
451 above.  Its job is to create the file containing the options for
452 @code{bibtex} (the program that actually does the translation),
453 run bibtex, and then clean up some temporary files.  Its main
454 "value add" is the creation of the options file, using this code:
455
456 @example
457 open (tmpfile + '.aux', 'w').write (r'''
458 \relax
459 \citation@{*@}
460 \bibstyle@{%(style)s@}
461 \bibdata@{%(files)s@}''' % vars ())
462 @end example
463
464 The key items are the style file (now always lily-bib for us) and
465 the input file.
466
467 The style file is written in its own specialised language,
468 described to some extent at
469
470 @example
471 @uref{http://amath.colorado.edu/documentation/LaTeX/reference/faq/bibtex.pdf}
472 @end example
473
474 The file @file{lily-bib.bst} also has fairly extensive commenting.
475
476 @node Website build
477 @section Website build
478
479 Start here: @file{make/website.make}
480
481 The overall build system begins with @ref{How stepmake works}.
482
483 However, we do believe that note that *none* of the variables that
484 are loaded (from depth to version numbers to whatever) are used in
485 @file{website.make}.  Instead, @file{website.make} sets up its own
486 variables at the top of the file.  If you're wondering if there's
487 some smart reason for this, then the answer is "no".  It's because
488 I didn't know/trust the original variables when I was writing that
489 file.
490
491
492 Website build includes @ref{Building a bibliography}.
493
494 @subsubheading Output from @code{make -n website}
495
496 Running @code{make -n website} gives the following output:
497
498 @example
499 make --no-builtin-rules config_make=./config.make \
500                 top-src-dir=/home/phil/lilypond-git \
501                 -f /home/phil/lilypond-git/make/website.make \
502                 website
503 make[1]: Entering directory `/home/phil/lilypond-git/build'
504 mkdir -p out-website
505 python /home/phil/lilypond-git/scripts/build/create-version-itexi.py /home/phil/lilypond-git > out-website/version.itexi
506 python /home/phil/lilypond-git/scripts/build/create-weblinks-itexi.py /home/phil/lilypond-git > out-website/weblinks.itexi
507 for l in '' cs de es fr hu it ja nl zh; do \
508                 python /home/phil/lilypond-git/scripts/build/extract_texi_filenames.py \
509                         -I /home/phil/lilypond-git/Documentation \
510                         -I /home/phil/lilypond-git/Documentation/"$l" \
511                         -I out-website -o out-website --split=node \
512                         /home/phil/lilypond-git/Documentation/"$l"/web.texi ;\
513                 for m in /home/phil/lilypond-git/Documentation/changes.tely /home/phil/lilypond-git/Documentation/essay.tely /home/phil/lilypond-git/Documentation/extending.tely /home/phil/lilypond-git/Documentation/learning.tely /home/phil/lilypond-git/Documentation/music-glossary.tely /home/phil/lilypond-git/Documentation/notation.tely /home/phil/lilypond-git/Documentation/snippets.tely /home/phil/lilypond-git/Documentation/usage.tely /home/phil/lilypond-git/Documentation/contributor.texi; do \
514                         n=`echo "$m" | sed 's/Documentation/Documentation\/'$l'/'` ; \
515                         b=`basename "$n" .texi`; \
516                         d=`basename "$b" .tely`; \
517                         if [ -e "$n" ] ; then \
518                                 python /home/phil/lilypond-git/scripts/build/extract_texi_filenames.py \
519                                 -I /home/phil/lilypond-git/Documentation \
520                                 -I /home/phil/lilypond-git/Documentation/"$l" \
521                                 -I /home/phil/lilypond-git/Documentation/"$l"/"$d" \
522                                 -I out-website -o out-website "$n" ; \
523                         fi ; \
524                 done; \
525         done;
526 BSTINPUTS=/home/phil/lilypond-git/Documentation/web \
527                 python /home/phil/lilypond-git/scripts/build/bib2texi.py -s web \
528                 -s /home/phil/lilypond-git/Documentation/lily-bib \
529                 -o out-website/others-did.itexi \
530                 /home/phil/lilypond-git/Documentation/web/others-did.bib
531 BSTINPUTS=/home/phil/lilypond-git/Documentation/web \
532                 python /home/phil/lilypond-git/scripts/build/bib2texi.py -s web \
533                 -s /home/phil/lilypond-git/Documentation/lily-bib \
534                 -o out-website/we-wrote.itexi \
535                 /home/phil/lilypond-git/Documentation/web/we-wrote.bib
536 for l in '' cs de es fr hu it ja nl zh; do \
537                 if test -n "$l"; then \
538                         langopt=--lang="$l"; \
539                         langsuf=.$l; \
540                 fi; \
541                 ONLY_WEB=1 TOP_SRC_DIR=/home/phil/lilypond-git DEPTH= PERL_UNICODE=SD texi2html --prefix=index \
542                         --split=section \
543                         --I=/home/phil/lilypond-git/Documentation/"$l" \
544                         --I=/home/phil/lilypond-git/Documentation \
545                         --I=out-website \
546                         $langopt \
547                         --init-file=/home/phil/lilypond-git/Documentation/lilypond-texi2html.init \
548                         -D web_version \
549                         --output=out-website/"$l" \
550                         /home/phil/lilypond-git/Documentation/"$l"/web.texi ; \
551                 ls out-website/$l/*.html | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | sed 's!out-website/'$l'/!!g' | xargs python /home/phil/lilypond-git/scripts/build/mass-link.py --prepend-suffix="$langsuf" hard out-website/$l/ out-website/website/ ; \
552         done
553 cp /home/phil/lilypond-git/Documentation/css/*.css out-website/website
554 mkdir -p out-website/website/pictures
555 if [ -d Documentation/pictures/out-www ]; \
556         then \
557                 cp Documentation/pictures/out-www/* out-website/website/pictures ; \
558                 ln -sf website/pictures out-website/pictures  ;\
559         fi
560 mkdir -p out-website/website/ly-examples
561 if [ -d Documentation/web/ly-examples/out-www ]; \
562         then \
563                 cp Documentation/web/ly-examples/out-www/* out-website/website/ly-examples ; \
564         fi
565 python /home/phil/lilypond-git/scripts/build/website_post.py out-website/website
566 cp /home/phil/lilypond-git/Documentation/web/server/favicon.ico out-website/website
567 cp /home/phil/lilypond-git/Documentation/web/server/robots.txt out-website/website
568 cp /home/phil/lilypond-git/Documentation/web/server/lilypond.org.htaccess out-website/.htaccess
569 cp /home/phil/lilypond-git/Documentation/web/server/website-dir.htaccess out-website/website/.htaccess
570 make[1]: Leaving directory `/home/phil/lilypond-git/build'
571 @end example
572
573 And, although there's rather a lot of text here, here's the output
574 when @code{make website} is run:
575
576 @example
577 make --no-builtin-rules config_make=./config.make \
578                 top-src-dir=/home/phil/lilypond-git \
579                 -f /home/phil/lilypond-git/make/website.make \
580                 website
581 make[1]: Entering directory `/home/phil/lilypond-git/build'
582 mkdir -p out-website
583 python /home/phil/lilypond-git/scripts/build/create-version-itexi.py /home/phil/lilypond-git > out-website/version.itexi
584 python /home/phil/lilypond-git/scripts/build/create-weblinks-itexi.py /home/phil/lilypond-git > out-website/weblinks.itexi
585 for l in '' cs de es fr hu it ja nl zh; do \
586                 python /home/phil/lilypond-git/scripts/build/extract_texi_filenames.py \
587                         -I /home/phil/lilypond-git/Documentation \
588                         -I /home/phil/lilypond-git/Documentation/"$l" \
589                         -I out-website -o out-website --split=node \
590                         /home/phil/lilypond-git/Documentation/"$l"/web.texi ;\
591                 for m in /home/phil/lilypond-git/Documentation/changes.tely /home/phil/lilypond-git/Documentation/essay.tely /home/phil/lilypond-git/Documentation/extending.tely /home/phil/lilypond-git/Documentation/learning.tely /home/phil/lilypond-git/Documentation/music-glossary.tely /home/phil/lilypond-git/Documentation/notation.tely /home/phil/lilypond-git/Documentation/snippets.tely /home/phil/lilypond-git/Documentation/usage.tely /home/phil/lilypond-git/Documentation/contributor.texi; do \
592                         n=`echo "$m" | sed 's/Documentation/Documentation\/'$l'/'` ; \
593                         b=`basename "$n" .texi`; \
594                         d=`basename "$b" .tely`; \
595                         if [ -e "$n" ] ; then \
596                                 python /home/phil/lilypond-git/scripts/build/extract_texi_filenames.py \
597                                 -I /home/phil/lilypond-git/Documentation \
598                                 -I /home/phil/lilypond-git/Documentation/"$l" \
599                                 -I /home/phil/lilypond-git/Documentation/"$l"/"$d" \
600                                 -I out-website -o out-website "$n" ; \
601                         fi ; \
602                 done; \
603         done;
604 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//web.texi
605 writing: out-website/web.xref-map
606 NOT A DIR from:  /home/phil/lilypond-git/build /home/phil/lilypond-git/Documentation//changes
607 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//changes.tely
608 writing: out-website/changes.xref-map
609 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//essay.tely
610 No such file: colorado.itexi
611 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//essay:out-website
612 No such file: computer-notation.itexi
613 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//essay:out-website
614 No such file: engravingbib.itexi
615 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//essay:out-website
616 writing: out-website/essay.xref-map
617 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//extending.tely
618 writing: out-website/extending.xref-map
619 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//learning.tely
620 writing: out-website/learning.xref-map
621 NOT A DIR from:  /home/phil/lilypond-git/build /home/phil/lilypond-git/Documentation//music-glossary
622 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//music-glossary.tely
623 writing: out-website/music-glossary.xref-map
624 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//notation.tely
625 No such file: markup-commands.tely
626 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
627 No such file: markup-list-commands.tely
628 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
629 No such file: context-properties.tely
630 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
631 No such file: layout-properties.tely
632 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
633 No such file: identifiers.tely
634 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
635 No such file: type-predicates.tely
636 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
637 No such file: scheme-functions.tely
638 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//notation:out-website
639 writing: out-website/notation.xref-map
640 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//snippets.tely
641 No such file: pitches.itely
642 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
643 No such file: rhythms.itely
644 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
645 No such file: expressive-marks.itely
646 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
647 No such file: repeats.itely
648 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
649 No such file: simultaneous-notes.itely
650 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
651 No such file: staff-notation.itely
652 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
653 No such file: editorial-annotations.itely
654 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
655 No such file: text.itely
656 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
657 No such file: vocal-music.itely
658 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
659 No such file: chords.itely
660 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
661 No such file: keyboards.itely
662 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
663 No such file: percussion.itely
664 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
665 No such file: fretted-strings.itely
666 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
667 No such file: unfretted-strings.itely
668 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
669 No such file: winds.itely
670 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
671 No such file: ancient-notation.itely
672 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
673 No such file: world-music.itely
674 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
675 No such file: contexts-and-engravers.itely
676 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
677 No such file: tweaks-and-overrides.itely
678 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
679 No such file: paper-and-layout.itely
680 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
681 No such file: titles.itely
682 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
683 No such file: spacing.itely
684 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
685 No such file: midi.itely
686 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
687 No such file: template.itely
688 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/:/home/phil/lilypond-git/Documentation//snippets:out-website
689 writing: out-website/snippets.xref-map
690 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//usage.tely
691 writing: out-website/usage.xref-map
692 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation//contributor.texi
693 writing: out-website/contributor.xref-map
694 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/cs/web.texi
695 writing: out-website/web.cs.xref-map
696 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/cs/learning.tely
697 No such file: learning/working.itely
698 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/cs:/home/phil/lilypond-git/Documentation/cs/learning:out-website
699 No such file: learning/scheme-tutorial.itely
700 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/cs:/home/phil/lilypond-git/Documentation/cs/learning:out-website
701 writing: out-website/learning.cs.xref-map
702 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/de/web.texi
703 writing: out-website/web.de.xref-map
704 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/de/essay.tely
705 No such file: colorado.itexi
706 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/essay:out-website
707 No such file: computer-notation.itexi
708 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/essay:out-website
709 No such file: engravingbib.itexi
710 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/essay:out-website
711 writing: out-website/essay.de.xref-map
712 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/de/extending.tely
713 writing: out-website/extending.de.xref-map
714 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/de/learning.tely
715 No such file: learning/working.itely
716 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/learning:out-website
717 No such file: learning/scheme-tutorial.itely
718 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/learning:out-website
719 writing: out-website/learning.de.xref-map
720 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/de/notation.tely
721 No such file: notation/programming-interface.itely
722 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
723 No such file: markup-commands.tely
724 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
725 No such file: markup-list-commands.tely
726 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
727 No such file: context-properties.tely
728 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
729 No such file: layout-properties.tely
730 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
731 No such file: identifiers.tely
732 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
733 No such file: type-predicates.tely
734 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
735 No such file: scheme-functions.tely
736 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/de:/home/phil/lilypond-git/Documentation/de/notation:out-website
737 writing: out-website/notation.de.xref-map
738 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/de/usage.tely
739 writing: out-website/usage.de.xref-map
740 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/web.texi
741 writing: out-website/web.es.xref-map
742 NOT A DIR from:  /home/phil/lilypond-git/build /home/phil/lilypond-git/Documentation/es/changes
743 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/changes.tely
744 writing: out-website/changes.es.xref-map
745 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/essay.tely
746 No such file: colorado.itexi
747 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/essay:out-website
748 No such file: computer-notation.itexi
749 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/essay:out-website
750 No such file: engravingbib.itexi
751 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/essay:out-website
752 writing: out-website/essay.es.xref-map
753 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/extending.tely
754 writing: out-website/extending.es.xref-map
755 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/learning.tely
756 writing: out-website/learning.es.xref-map
757 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/notation.tely
758 No such file: markup-commands.tely
759 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
760 No such file: markup-list-commands.tely
761 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
762 No such file: context-properties.tely
763 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
764 No such file: layout-properties.tely
765 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
766 No such file: identifiers.tely
767 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
768 No such file: type-predicates.tely
769 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
770 No such file: scheme-functions.tely
771 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/es:/home/phil/lilypond-git/Documentation/es/notation:out-website
772 writing: out-website/notation.es.xref-map
773 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/es/usage.tely
774 writing: out-website/usage.es.xref-map
775 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/fr/web.texi
776 writing: out-website/web.fr.xref-map
777 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/fr/essay.tely
778 No such file: colorado.itexi
779 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/essay:out-website
780 No such file: computer-notation.itexi
781 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/essay:out-website
782 No such file: engravingbib.itexi
783 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/essay:out-website
784 writing: out-website/essay.fr.xref-map
785 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/fr/learning.tely
786 writing: out-website/learning.fr.xref-map
787 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/fr/notation.tely
788 No such file: markup-commands.tely
789 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
790 No such file: markup-list-commands.tely
791 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
792 No such file: context-properties.tely
793 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
794 No such file: layout-properties.tely
795 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
796 No such file: identifiers.tely
797 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
798 No such file: type-predicates.tely
799 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
800 No such file: scheme-functions.tely
801 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/fr:/home/phil/lilypond-git/Documentation/fr/notation:out-website
802 writing: out-website/notation.fr.xref-map
803 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/fr/usage.tely
804 writing: out-website/usage.fr.xref-map
805 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/hu/web.texi
806 writing: out-website/web.hu.xref-map
807 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/hu/learning.tely
808 writing: out-website/learning.hu.xref-map
809 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/hu/usage.tely
810 writing: out-website/usage.hu.xref-map
811 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/it/web.texi
812 writing: out-website/web.it.xref-map
813 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/it/learning.tely
814 writing: out-website/learning.it.xref-map
815 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/ja/web.texi
816 writing: out-website/web.ja.xref-map
817 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/ja/learning.tely
818 writing: out-website/learning.ja.xref-map
819 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/ja/notation.tely
820 No such file: markup-commands.tely
821 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
822 No such file: markup-list-commands.tely
823 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
824 No such file: context-properties.tely
825 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
826 No such file: layout-properties.tely
827 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
828 No such file: identifiers.tely
829 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
830 No such file: type-predicates.tely
831 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
832 No such file: scheme-functions.tely
833 Search path: .:/home/phil/lilypond-git/Documentation:/home/phil/lilypond-git/Documentation/ja:/home/phil/lilypond-git/Documentation/ja/notation:out-website
834 writing: out-website/notation.ja.xref-map
835 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/ja/usage.tely
836 writing: out-website/usage.ja.xref-map
837 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/nl/web.texi
838 writing: out-website/web.nl.xref-map
839 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/nl/learning.tely
840 writing: out-website/learning.nl.xref-map
841 extract_texi_filenames.py: Processing /home/phil/lilypond-git/Documentation/zh/web.texi
842 writing: out-website/web.zh.xref-map
843 BSTINPUTS=/home/phil/lilypond-git/Documentation/web \
844                 python /home/phil/lilypond-git/scripts/build/bib2texi.py -s web \
845                 -s /home/phil/lilypond-git/Documentation/lily-bib \
846                 -o out-website/others-did.itexi \
847                 /home/phil/lilypond-git/Documentation/web/others-did.bib
848 This is BibTeX, Version 0.99c (TeX Live 2009/Debian)
849 The top-level auxiliary file: /tmp/tmpvZPaJNbib2texi.aux
850 The style file: /home/phil/lilypond-git/Documentation/lily-bib.bst
851 Database file #1: /home/phil/lilypond-git/Documentation/web/others-did.bib
852 Invoking `TEXMFOUTPUT=/tmp bibtex /tmp/tmpvZPaJNbib2texi'
853 BSTINPUTS=/home/phil/lilypond-git/Documentation/web \
854                 python /home/phil/lilypond-git/scripts/build/bib2texi.py -s web \
855                 -s /home/phil/lilypond-git/Documentation/lily-bib \
856                 -o out-website/we-wrote.itexi \
857                 /home/phil/lilypond-git/Documentation/web/we-wrote.bib
858 This is BibTeX, Version 0.99c (TeX Live 2009/Debian)
859 The top-level auxiliary file: /tmp/tmpgB8NhBbib2texi.aux
860 The style file: /home/phil/lilypond-git/Documentation/lily-bib.bst
861 Database file #1: /home/phil/lilypond-git/Documentation/web/we-wrote.bib
862 Invoking `TEXMFOUTPUT=/tmp bibtex /tmp/tmpgB8NhBbib2texi'
863 for l in '' cs de es fr hu it ja nl zh; do \
864                 if test -n "$l"; then \
865                         langopt=--lang="$l"; \
866                         langsuf=.$l; \
867                 fi; \
868                 ONLY_WEB=1 TOP_SRC_DIR=/home/phil/lilypond-git DEPTH= PERL_UNICODE=SD texi2html --prefix=index \
869                         --split=section \
870                         --I=/home/phil/lilypond-git/Documentation/"$l" \
871                         --I=/home/phil/lilypond-git/Documentation \
872                         --I=out-website \
873                         $langopt \
874                         --init-file=/home/phil/lilypond-git/Documentation/lilypond-texi2html.init \
875                         -D web_version \
876                         --output=out-website/"$l" \
877                         /home/phil/lilypond-git/Documentation/"$l"/web.texi ; \
878                 ls out-website/$l/*.html | xargs grep -L 'UNTRANSLATED NODE: IGNORE ME' | sed 's!out-website/'$l'/!!g' | xargs python /home/phil/lilypond-git/scripts/build/mass-link.py --prepend-suffix="$langsuf" hard out-website/$l/ out-website/website/ ; \
879         done
880 Initializing settings for web site: []
881 mass-link.py
882 Initializing settings for web site: [cs]
883 WARNING: Unable to find node 'Řešení potíží' in book usage.
884 WARNING: Unable to find node 'Proč se mění skladba?' in book usage.
885 mass-link.py
886 Initializing settings for web site: [de]
887 mass-link.py
888 Initializing settings for web site: [es]
889 mass-link.py
890 Initializing settings for web site: [fr]
891 mass-link.py
892 Initializing settings for web site: [hu]
893 mass-link.py
894 Initializing settings for web site: [it]
895 mass-link.py
896 Initializing settings for web site: [ja]
897 mass-link.py
898 Initializing settings for web site: [nl]
899 mass-link.py
900 Initializing settings for web site: [zh]
901 mass-link.py
902 cp /home/phil/lilypond-git/Documentation/css/*.css out-website/website
903 mkdir -p out-website/website/pictures
904 if [ -d Documentation/pictures/out-www ]; \
905         then \
906                 cp Documentation/pictures/out-www/* out-website/website/pictures ; \
907                 ln -sf website/pictures out-website/pictures  ;\
908         fi
909 mkdir -p out-website/website/ly-examples
910 if [ -d Documentation/web/ly-examples/out-www ]; \
911         then \
912                 cp Documentation/web/ly-examples/out-www/* out-website/website/ly-examples ; \
913         fi
914 python /home/phil/lilypond-git/scripts/build/website_post.py out-website/website
915 cp /home/phil/lilypond-git/Documentation/web/server/favicon.ico out-website/website
916 cp /home/phil/lilypond-git/Documentation/web/server/robots.txt out-website/website
917 cp /home/phil/lilypond-git/Documentation/web/server/lilypond.org.htaccess out-website/.htaccess
918 cp /home/phil/lilypond-git/Documentation/web/server/website-dir.htaccess out-website/website/.htaccess
919 make[1]: Leaving directory `/home/phil/lilypond-git/build'@end example
920
921
922
923 @subsubheading website.make variables
924
925 The file begins by setting up some variables.  These
926 may/might/probably mirror existing variables, but lacking any docs
927 about those variables, I thought it would be simpler to keep
928 everything in the same file.
929
930 Note that for security reasons, we @strong{don't} call scripts in
931 the git dir when building on the web server.  See @ref{Uploading
932 and security}.  So we definitely want to keep those definitions
933 for the WEBSITE_ONLY_BUILD.
934
935 After some split WEBSITE_ONLY_BUILD vs. normal build definitions,
936 there's another bunch of lines setting up generic variables.
937
938 @subsubheading website.make building parts
939
940 Parts of @file{website.make}:
941
942 @itemize
943
944 @item
945 @code{website-version}:
946 this calls python scripts to define teinxfo macros.
947
948 @itemize
949 @item
950 @example
951 scripts/build/create-version-itexi.py
952 @end example
953
954 This writes a @@version, @@versionStable, and @@versionDevel based
955 on the top-level VERSIONS file, to
956 @code{out-website/version.itexi}
957
958 @item
959 @example
960 scripts/build/create-weblinks-itexi.py
961 @end example
962
963 This creates a ton of macros in @code{out-website/weblinks.itexi}.
964 Stuff like @@downloadStableLinuxNormal, @@downloadStableWidows,
965 @code{@@stableDocsNotationPdf@{@}}, @@downloadDevelSourch-zh.
966
967 It's quite monstrous because it deals with combinations of
968 stable/devel, source/docs, lang/lang/lang*10, etc.
969
970 @end itemize
971
972
973 @item
974 @code{website-xrefs:}
975 creates files used for complicated "out-of-build" references to
976 @code{out-website/*.xref-map}
977
978 If you just write @@ref@{@}, then all's groovy and we wouldn't
979 need this.  But if you write @@rlearning@{@}, then our custom
980 texi2html init file needs to know about our custom xref file
981 format, which tells our custom texi2html init file how to create
982 the link.
983
984 GP: we should have a separate @@node to discuss xrefs.  Also, take a
985 quick look at a generated xref file -- it's basically just a list
986 of @@node's [sic teenager pluralization rule] from the file.
987
988 @item
989 @code{website-bib:}
990 generates the bibliography texinfo files from the .bib files.
991
992 @item
993 @code{website-texinfo:}
994 this is the main part; it calles texi2html to generate the actual
995 html.  It also has a ton of options to texi2html to pass info to
996 our custom init file.
997
998 We have somewhere between 2-4 different ways "to pass info to our
999 custom init file".  This is highly Not Good (tm), but that's how
1000 things work at the moment.
1001
1002 After texi2html, it does some black magick to deal with
1003 untranslated nodes in the translations.  Despite writing that
1004 part, I can't remember how it works.  But in theory, you could
1005 figure it out by copy&pasting each part of the command (by "part",
1006 I mean "stuff before each | pipe"), substituting the variables,
1007 then looking at the text that's output.  For example,
1008
1009 @example
1010   ls $(OUT)/$$l/*.html
1011 @end example
1012
1013 is going to print a list of all html files, in all languages, in
1014 the build directory.  Then more stuff happens to each of those
1015 files (that's what xargs does).
1016
1017 @item
1018 @code{website-css:}
1019 just copies files to the build dir.
1020
1021 @item
1022 @code{website-pictures, website-examples:}
1023 more file copies, with an if statement to handle if you don't have
1024 any generated pictures/examples.
1025
1026 @item
1027 @code{web-post:}
1028 runs:
1029
1030 @example
1031 scripts/build/website_post.py
1032 @end example
1033
1034 which, it adds the "this page is translated in klingon" to the
1035 bottom of html pages, and adds the google analytics javascript.
1036 It also has hard-coded lilypond version numbers, which is Bad
1037 (tm).
1038
1039 @item
1040 @code{website:}
1041 this is the "master" rule.  It calls the bits and pieces in order,
1042 then copies some extra files around.
1043
1044 @end itemize
1045
1046
1047 @node Building an Ubuntu distro
1048 @section Building an Ubuntu distro
1049
1050 @enumerate
1051 @item
1052 Install ubuntu, reboot
1053 @item
1054 Run all updates, reboot if asked
1055 @item
1056 Enable src repos, refresh package lists
1057 @item
1058 Install LilyPond build deps:
1059 @example
1060   sudo apt-get build-dep lilypond
1061 @end example
1062 @item
1063 Install git and autoconf:
1064 @example
1065   sudo apt-get install git-core gitk autoconf
1066 @end example
1067
1068 @item
1069 TEST TO SEE WHETHER EVERYTHING WORKS NOW:
1070 @enumerate
1071 @item
1072 Use lily-git.tcl to grab source files
1073 @item
1074 Go to source dir and do "./autogen.sh" ; make ; make doc
1075 @item
1076 If all compiles, move on to iso creation...
1077
1078 @end enumerate
1079
1080 @item
1081 Download & install "remastersys":
1082 @example
1083   http://sourceforge.net/projects/remastersys/
1084 @end example
1085 @item
1086 Copy lily-git.tcl script file into /etc/skel/
1087 @item
1088 Modify /etc/remastersys.conf as desired (change .iso name, default
1089 live session username, etc)
1090 @item
1091 Remove non-essential desktop software as desired
1092 @item
1093 Create iso:  sudo remastersys dist
1094 @item
1095 New iso is in /home/remastersys/remastersys/
1096 @item
1097 Test iso by installing in VM and repeating steps above for
1098 getting source files and building lp and docs
1099 @end enumerate
1100
1101
1102