From: janneke <janneke>
Date: Wed, 6 Nov 2002 13:29:00 +0000 (+0000)
Subject: * Merge from stable:
X-Git-Tag: release/1.7.25~644
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=dc63e44c97378ed36a0fe2acfd534a13174dd234;p=lilypond.git

* Merge from stable:

    cvs update -jlilypond_1_6_6 -jlilypond_1_6_6_1
---

diff --git a/ChangeLog b/ChangeLog
index 14305d368a..60ad34f219 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2002-11-06  Jan Nieuwenhuizen  <janneke@gnu.org>
 
+	* Merge from stable:
+
+	    cvs update -jlilypond_1_6_6 -jlilypond_1_6_6_1
+	
 	* ly/paper16-init.ly (paperSixteen): Bugfix: set fonts instead of
 	stylesheet.
 
@@ -465,6 +469,61 @@
 	(schedule_lilypond_block): Implement `noquote' option for LaTeX
 	mode.
 
+2002-11-03  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* ChangeLog: Add 1.6.6 release marker.  See below.
+
+	* stepmake/stepmake/po-targets.make: Remove --c++ option.
+
+	* scripts/midi2ly.py: Fix global syntax warnings.
+
+	* GNUmakefile.in: Generate builddir locale tree too.
+
+	* scripts/ly2dvi.py:
+	* scripts/midi2ly.py: 
+	* scripts/mup2ly.py: 
+	* scripts/update-lily.py:
+	* lily/main.cc (setup_paths): Fix for locales setup.
+
+2002-10-29  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* Documentation/windows/installing.texi: Soften wording about
+	necessity of becoming Administrator.  tommie@iae.nl reports this
+	does not seem to be necessary for his flavour of Windows 2000.
+	Explicitely discourage text mode mounts.
+
+2002-10-27  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* lily/rest.cc (after_line_breaking): backport dot position fix.
+
+	* lily/rest-collision.cc (do_shift): also remove dots for suicided
+	rests. Thanks to Klaus Zimmermann for finding this bug.
+
+2002-10-24  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* Documentation/topdocs/INSTALL.texi: Correction for broken /bin/sh.
+
+2002-10-24  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* Documentation/user/music-glossary.tely: fix links.
+
+2002-10-21  Werner Lemberg  <wl@gnu.org>
+
+	* tex/lily-ps-defs.tex (\lilypondsetdimen): Define ID macro.
+	(\lilypondpostscript): Define PS macros `lyscaleXXX' (`XXX' is the
+	scaling factor) only once and use them in the definition of
+	\embeddedps.
+	* ps/music-drawing-routines.ps (skeel): Removed.
+
+2002-10-21  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+	* stepmake/aclocal.m4: Changed 6 instances of $( ) to ` `, for
+	Solaris7, as we don't use nested $( ) constructs.
+
+2002-10-21  Han-Wen Nienhuys  <hanwen@cs.uu.nl>
+
+	* VERSION: Release 1.6.6.
+	
 2002-10-21  Jan Nieuwenhuizen  <janneke@gnu.org>
 
 	* Documentation/topdocs/INSTALL.texi: Add note about using ksh for
diff --git a/Documentation/topdocs/INSTALL.texi b/Documentation/topdocs/INSTALL.texi
index c96536c400..2ff60036d3 100644
--- a/Documentation/topdocs/INSTALL.texi
+++ b/Documentation/topdocs/INSTALL.texi
@@ -730,11 +730,11 @@ CFLAGS='-I /usr/pkg/include' LDFLAGS='-L/usr/pkg/lib' ./configure
 @file{/bin/sh} is not yet POSIX compliant, but @file{/bin/ksh} or bash
 is.  Please run configure like:
 @example
-        /bin/ksh -c ./configure
+        CONFIG_SHELL=/bin/ksh ksh -c ./configure
 @end example
 or
 @example
-        bash -c ./configure
+        CONFIG_SHELL=/bin/bash bash -c ./configure
 @end example
 
 @item Sparc64/Solaris 2.6, GNU make-3.77
diff --git a/Documentation/user/music-glossary.tely b/Documentation/user/music-glossary.tely
index 9f24f0b04b..5a3baae926 100644
--- a/Documentation/user/music-glossary.tely
+++ b/Documentation/user/music-glossary.tely
@@ -7,8 +7,8 @@
 @end html
 
 @ifhtml
-This document is also available in @uref{glossary.ps.gz,gzipped
-PostScript} and @uref{glossary.pdf,PDF}.
+This document is also available in @uref{music-glossary.ps.gz,gzipped
+PostScript} and @uref{music-glossary.pdf,PDF}.
 @end ifhtml
 
 @titlepage
diff --git a/Documentation/user/refman.itely b/Documentation/user/refman.itely
index 970ab92817..23b02e40cb 100644
--- a/Documentation/user/refman.itely
+++ b/Documentation/user/refman.itely
@@ -752,23 +752,27 @@ emacsclient --no-wait +%l %f
 If you use xemacs instead of emacs, you use @code{(gnuserve-start)} in
 your @file{.emacs}, and set @code{XEDITOR} to @code{gnuclient -q +%l %f}
 
-For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or use this
-argument with xdvi's @code{-editor} option.
+For using Vim, set @code{XEDITOR} to @code{gvim --remote +%l %f}, or
+use this argument with xdvi's @code{-editor} option.
+
 @cindex NEdit
 For using NEdit, set @code{XEDITOR} to @code{nc -noask +%l %f}, or
 use this argument with xdvi's @code{-editor} option.
 
 If can also make your editor jump to the exact location of the note
-you clicked. This is only supported on Emacs. Users of version 20 must
-apply the patch @file{emacsclient.patch}. Users of version 21 must
-apply @file{server.el.patch} (version 21.2 and earlier).  At the top
-of the @code{ly} file, replace the @code{set!} line with the following
-line,
+you clicked. This is only supported on Emacs and VIM. Users of Emacs version
+20 must apply the patch @file{emacsclient.patch}. Users of version 21
+must apply @file{server.el.patch} (version 21.2 and earlier).  At the
+top of the @code{ly} file, replace the @code{set-point-and-click} line
+with the following line,
 @example
 #(ly:set-point-and-click 'line-column)
 @end example
 @cindex line-colomn-location
-and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}.
+and set @code{XEDITOR} to @code{emacsclient --no-wait +%l:%c %f}.  Vim
+users can set @var{XEDITOR} to @code{gvim --remote +:%l:norm%c| %f}.
+
+
 
 @refbugs
 
diff --git a/Documentation/windows/installing.texi b/Documentation/windows/installing.texi
index 9f7c4c9b08..40bdc9ac96 100644
--- a/Documentation/windows/installing.texi
+++ b/Documentation/windows/installing.texi
@@ -31,11 +31,13 @@ The binary LilyPond setup for Windows is in fact a
 @uref{http://cygwin.com, Cygwin} installation, including the LilyPond
 package for Cygwin.
 
-If you run Windows NT, 2000 or XP, please become administrator first
-(currently, installing as an ordinary user will not work).  Download
-and run @uref{http://cygwin.com/setup.exe, setup.exe}.  You will be
-asked some questions.  If you are unsure just click "Next".  Do not
-change the default install directory @file{c:/cygwin}.
+If you run Windows NT, 2000 or XP, please become administrator first;
+installing as an ordinary user does not seem to work on certain
+Windows-NT variants.  Download and run
+@uref{http://cygwin.com/setup.exe, setup.exe}.  You will be asked some
+questions.  If you are unsure just click "Next".  Do not change the
+default install directory @file{c:/cygwin}.  Do not change the default
+text type @samp{UNIX}, i.e., do not use @samp{DOS} mounts.
 
 In the Package View dialogue window, click on the Publishing section
 to view the available publishing software for Cygwin.  Make sure that
diff --git a/GNUmakefile.in b/GNUmakefile.in
index 275b232952..fd2292d8aa 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -126,6 +126,10 @@ default: $(config_h) builddir-setup
 
 builddir-setup: $(builddir)/share/lilypond-force
 
+PO_FILES = $(wildcard $(srcdir)/po/*.po)
+HELP_CATALOGS = $(PO_FILES:$(srcdir)/po/%.po=%)
+CATALOGS = $(HELP_CATALOGS:lilypond=) 
+
 $(builddir)/share/lilypond-force:
 # Preparing LilyPond tree for builddir exec
 	cd $(builddir) && rm -rf share
@@ -149,6 +153,10 @@ $(builddir)/share/lilypond-force:
 		ln -s ../../../mf/$(outconfbase) afm && \
 		ln -s ../../../mf/$(outconfbase) tfm && \
 		ln -s ../../../mf/$(outconfbase) type1
+	$(foreach i,$(CATALOGS), \
+		mkdir -p $(builddir)/share/locale/$i/LC_MESSAGES && \
+		cd $(builddir)/share/locale/$i/LC_MESSAGES && \
+		ln -fs ../../../../po/$(outconfbase)/$i.mo lilypond.mo &&) true
 	touch $@
 
 local-clean: builddir-setup-clean
diff --git a/THANKS b/THANKS
index 505ed74f14..6a90e7a25d 100644
--- a/THANKS
+++ b/THANKS
@@ -17,3 +17,4 @@ Karl-Johan Karlsson
 Karl Berry
 Werner Lemberg
 Thomas Rijniers
+Klaus Zimmermann
diff --git a/aclocal.m4 b/aclocal.m4
index 19c2947aab..e448f2e47a 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,6 +1,6 @@
 dnl aclocal.m4   -*-shell-script-*-
 dnl WARNING WARNING WARNING
-dnl do not edit! this is aclocal.m4, generated from /users/hanwen/usr/src/lilypond/stepmake/aclocal.m4
+dnl do not edit! this is aclocal.m4, generated from /home/fred/lily/stepmake/aclocal.m4
 dnl aclocal.m4   -*-shell-script-*-
 dnl StepMake subroutines for configure.in
 
@@ -250,10 +250,10 @@ AC_DEFUN(STEPMAKE_DATADIR, [
     local_package_datadir=$package_datadir/$FULL_VERSION
     build_package_datadir=$builddir/share/$package
     
-    DATADIR=$(echo ${datadir} | sed "s!\\\${prefix}!$presome!")
-    PACKAGE_DATADIR=$(echo ${package_datadir} | sed "s!\\\${prefix}!$presome!")
-    LOCAL_PACKAGE_DATADIR=$(echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!")
-    BUILD_PACKAGE_DATADIR=$(echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!")
+    DATADIR=`echo ${datadir} | sed "s!\\\${prefix}!$presome!"`
+    PACKAGE_DATADIR=`echo ${package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    LOCAL_PACKAGE_DATADIR=`echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(datadir)
     AC_SUBST(package_datadir)
@@ -344,7 +344,7 @@ AC_DEFUN(STEPMAKE_GETTEXT, [
     if test "$prefix" = "NONE"; then
 	    presome=${ac_default_prefix}
     fi
-    LOCALEDIR=$(echo ${localedir} | sed "s!\\\${prefix}!$presome!")
+    LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(localedir)
     AC_DEFINE_UNQUOTED(LOCALEDIR, "${LOCALEDIR}")
@@ -565,16 +565,18 @@ AC_DEFUN(STEPMAKE_INIT, [
 
     STEPMAKE_PROGS(TAR, tar, REQUIRED)
 
-    if test "x`uname`" = "xHP-UX"; then
-	AC_PATH_PROG(BASH, bash, /bin/sh)
+    if test "$(echo 2)" != "2" ||
+	test "x`uname`" = "xHP-UX"; then
+	AC_PATH_PROG(KSH, ksh, /bin/ksh)
+	AC_PATH_PROG(BASH, bash, $KSH)
 	STEPMAKE_WARN(avoiding buggy /bin/sh)
-	AC_PATH_PROG(SHELL, bash, /bin/ksh)
+	AC_PATH_PROG(SHELL, bash, $KSH)
     else
-	AC_PATH_PROG(BASH, bash, /bin/sh)
 	SHELL=/bin/sh
-	AC_SUBST(SHELL)
+	AC_PATH_PROG(BASH, bash, $SHELL)
     fi
-
+    AC_SUBST(SHELL)
+    
     STEPMAKE_PATH_PROG(PYTHON, python, REQUIRED)
 
     if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
@@ -693,7 +695,7 @@ AC_DEFUN(STEPMAKE_LIBTOOL, [
     REVISION=$PATCH_LEVEL
     # CURRENT=$MINOR_VERSION
     CURRENT=`expr $MINOR_VERSION + 1`
-    # AGE=$(expr $MAJOR_VERSION + 1)
+    # AGE=`expr $MAJOR_VERSION + 1`
     AGE=$MAJOR_VERSION
     AC_SUBST(CURRENT)
     AC_SUBST(REVISION)
diff --git a/lily/main.cc b/lily/main.cc
index 20ecf61532..16446cc8b3 100644
--- a/lily/main.cc
+++ b/lily/main.cc
@@ -231,23 +231,14 @@ setup_paths ()
     prefix_directory[1] = lilypond_prefix;
 
 #if HAVE_GETTEXT
-  setlocale (LC_ALL, ""); /* enable locales */
-  setlocale (LC_NUMERIC, "C"); /* musn't have comma's in TeX output... */
+  /* Enable locales */
+  setlocale (LC_ALL, "");
+  /* Mustn't have commas in TeX output... */
+  setlocale (LC_NUMERIC, "C");
   String lily_locale_dir;
   String name (PACKAGE);
   name.to_lower ();
-
-  /*
-    urg; what *do* we want with $LILYPONDPREFIX, DIR_DATADIR and $prefix/share
-    handy for multiple source-dir runs, though...
-   */
-  if (!String (prefix_directory[0]).empty_b ())
-    {
-      lily_locale_dir = String (prefix_directory[0]) + "/share/locale";
-      bindtextdomain (name.to_str0 (), lily_locale_dir.to_str0 ());
-    }
-  else
-    bindtextdomain (name.to_str0 (), LOCALEDIR);
+  bindtextdomain (name.to_str0 (), LOCALEDIR);
   textdomain (name.to_str0 ());
 #endif
 
diff --git a/lily/rest-collision.cc b/lily/rest-collision.cc
index 3950585da3..47c8d51f08 100644
--- a/lily/rest-collision.cc
+++ b/lily/rest-collision.cc
@@ -140,7 +140,12 @@ Rest_collision::do_shift (Grob *me)
 	      Grob* r = unsmob_grob (rests[i-1]->get_grob_property ("rest"));
 #if 1
 	      if (r)
-		r->suicide ();
+		{
+		  Grob * d = unsmob_grob (r->get_grob_property ("dot"));
+		  if (d)
+		    d->suicide();
+		  r->suicide ();
+		}
 	      rests[i-1]->suicide ();
 #else
 	      if (r)
diff --git a/ps/music-drawing-routines.ps b/ps/music-drawing-routines.ps
index b5796e11d2..114669bbb6 100644
--- a/ps/music-drawing-routines.ps
+++ b/ps/music-drawing-routines.ps
@@ -4,9 +4,6 @@
 
 /blot-diameter { lilypondpaperblotdiameter } bind def
 
-% fucking redhat xdvi patch.
-/skeel { scale } bind def
-
 /set_tex_dimen {
 	cvr def     
 } bind def
diff --git a/python/lilylib.py b/python/lilylib.py
index d9250f0807..683585d0a8 100644
--- a/python/lilylib.py
+++ b/python/lilylib.py
@@ -86,6 +86,7 @@ try:
 except:
        pass
 
+localedir = '@localedir@'
 try:
 	import gettext
 	gettext.bindtextdomain ('lilypond', localedir)
diff --git a/scripts/midi2ly.py b/scripts/midi2ly.py
index ea47e15835..a6c3acd926 100644
--- a/scripts/midi2ly.py
+++ b/scripts/midi2ly.py
@@ -4,8 +4,8 @@
 # 
 # source file of the GNU LilyPond music typesetter
 #
-# convert MIDI to LilyPond source
-#
+# (c) 1998--2002  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+#                 Jan Nieuwenhuizen <janneke@gnu.org>
 
 
 '''
@@ -430,6 +430,7 @@ class Note:
 		return (o, n, a)
 		
 	def dump (self):
+		global reference_note
 		s = chr ((self.notename + 2)  % 7 + ord ('a'))
 		s = s + self.alteration_names[self.alteration + 2]
 		if absolute_p:
@@ -450,10 +451,10 @@ class Note:
 			s = s + "," * -commas
 
 		if explicit_durations_p \
-		   or Duration.compare (self.duration, reference_note.duration):
+		   or Duration.compare (self.duration,
+					reference_note.duration):
 			s = s + self.duration.dump ()
 
-		global reference_note
 		reference_note = self
 		
 		# TODO: move space
@@ -1051,13 +1052,10 @@ for opt in options:
 
 
 	elif o == '--absolute-pitches' or o == '-a':
-		global absolute_p
 		absolute_p = 1
 	elif o == '--duration-quant' or o == '-d':
-		global duration_quant
 		duration_quant = string.atoi (a)
 	elif o == '--explicit-durations' or o == '-e':
-		global explicit_durations_p
 		explicit_durations_p = 1
 	elif o == '--key' or o == '-k':
 		(alterations, minor) = map (string.atoi, string.split (a + ':0', ':'))[0:2]
@@ -1067,7 +1065,6 @@ for opt in options:
  			sharps = alterations
  		else:
  			flats = - alterations
-		global key
 		key = Key (sharps, flats, minor)
 	elif o == '--start-quant' or o == '-s':
 		start_quant = string.atoi (a)
diff --git a/scripts/mup2ly.py b/scripts/mup2ly.py
index da3a43be25..88868a8e03 100644
--- a/scripts/mup2ly.py
+++ b/scripts/mup2ly.py
@@ -55,9 +55,10 @@ errorport = sys.stderr
 keep_temp_dir_p = 0
 verbose_p = 0
 
+localedir = '@localedir@'
 try:
 	import gettext
-	gettext.bindtextdomain ('lilypond', '@localedir@')
+	gettext.bindtextdomain ('lilypond', localedir)
 	gettext.textdomain ('lilypond')
 	_ = gettext.gettext
 except:
diff --git a/scripts/update-lily.py b/scripts/update-lily.py
index 8c3ab757a5..224601e3ed 100644
--- a/scripts/update-lily.py
+++ b/scripts/update-lily.py
@@ -54,10 +54,10 @@ release_dir = build_root + '/releases'
 patch_dir = build_root + '/patches'
 symlink_name = ''
 
-
+localedir = '@localedir@'
 try:
 	import gettext
-	gettext.bindtextdomain ('lilypond', '@localedir@')
+	gettext.bindtextdomain ('lilypond', localedir)
 	gettext.textdomain ('lilypond')
 	_ = gettext.gettext
 except:
diff --git a/stepmake/aclocal.m4 b/stepmake/aclocal.m4
index 3a3257072d..603ea8b49d 100644
--- a/stepmake/aclocal.m4
+++ b/stepmake/aclocal.m4
@@ -247,10 +247,10 @@ AC_DEFUN(STEPMAKE_DATADIR, [
     local_package_datadir=$package_datadir/$FULL_VERSION
     build_package_datadir=$builddir/share/$package
     
-    DATADIR=$(echo ${datadir} | sed "s!\\\${prefix}!$presome!")
-    PACKAGE_DATADIR=$(echo ${package_datadir} | sed "s!\\\${prefix}!$presome!")
-    LOCAL_PACKAGE_DATADIR=$(echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!")
-    BUILD_PACKAGE_DATADIR=$(echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!")
+    DATADIR=`echo ${datadir} | sed "s!\\\${prefix}!$presome!"`
+    PACKAGE_DATADIR=`echo ${package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    LOCAL_PACKAGE_DATADIR=`echo ${local_package_datadir} | sed "s!\\\${prefix}!$presome!"`
+    BUILD_PACKAGE_DATADIR=`echo ${build_package_datadir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(datadir)
     AC_SUBST(package_datadir)
@@ -341,7 +341,7 @@ AC_DEFUN(STEPMAKE_GETTEXT, [
     if test "$prefix" = "NONE"; then
 	    presome=${ac_default_prefix}
     fi
-    LOCALEDIR=$(echo ${localedir} | sed "s!\\\${prefix}!$presome!")
+    LOCALEDIR=`echo ${localedir} | sed "s!\\\${prefix}!$presome!"`
     
     AC_SUBST(localedir)
     AC_DEFINE_UNQUOTED(LOCALEDIR, "${LOCALEDIR}")
@@ -562,16 +562,18 @@ AC_DEFUN(STEPMAKE_INIT, [
 
     STEPMAKE_PROGS(TAR, tar, REQUIRED)
 
-    if test "x`uname`" = "xHP-UX"; then
-	AC_PATH_PROG(BASH, bash, /bin/sh)
+    if test "$(echo 2)" != "2" ||
+	test "x`uname`" = "xHP-UX"; then
+	AC_PATH_PROG(KSH, ksh, /bin/ksh)
+	AC_PATH_PROG(BASH, bash, $KSH)
 	STEPMAKE_WARN(avoiding buggy /bin/sh)
-	AC_PATH_PROG(SHELL, bash, /bin/ksh)
+	AC_PATH_PROG(SHELL, bash, $KSH)
     else
-	AC_PATH_PROG(BASH, bash, /bin/sh)
 	SHELL=/bin/sh
-	AC_SUBST(SHELL)
+	AC_PATH_PROG(BASH, bash, $SHELL)
     fi
-
+    AC_SUBST(SHELL)
+    
     STEPMAKE_PATH_PROG(PYTHON, python, REQUIRED)
 
     if expr "$MAKE" : '.*\(echo\)' >/dev/null; then
@@ -690,7 +692,7 @@ AC_DEFUN(STEPMAKE_LIBTOOL, [
     REVISION=$PATCH_LEVEL
     # CURRENT=$MINOR_VERSION
     CURRENT=`expr $MINOR_VERSION + 1`
-    # AGE=$(expr $MAJOR_VERSION + 1)
+    # AGE=`expr $MAJOR_VERSION + 1`
     AGE=$MAJOR_VERSION
     AC_SUBST(CURRENT)
     AC_SUBST(REVISION)
diff --git a/tex/lily-ps-defs.tex b/tex/lily-ps-defs.tex
index 71e31e8aab..8a4522a2e7 100644
--- a/tex/lily-ps-defs.tex
+++ b/tex/lily-ps-defs.tex
@@ -6,30 +6,46 @@
 % Header info (macros/defs, etc) should go into a \special{! ... };
 % note the ! sign.  See dvips.info for details.
 %
-% Escape the colon with \string to avoid problems with French while using
-% the Babel package.
+% We protect punctuation characters with \string to avoid problems with
+% language specific shorthands (e.g. `:' for French, `"' for German, etc.).
 
 \gdef\lilypondsetdimen#1{
-  \expandafter\special{
-    ! /#1 (\csname #1\endcsname) set_tex_dimen
+  \expandafter\gdef\csname #1ps\endcsname{}
+  \special{
+    \string!
+    /#1 (\csname #1\endcsname) set_tex_dimen
   }
 }
 
 \gdef\lilypondspace{ }
 
 \gdef\lilypondpostscript{
-  % This sets CTM so that you get to the currentpoint
-  % by executing a 0 0 moveto
+  % A document processed with lilypond-book can contain music fragments in
+  % different sizes.  To reduce overhead, we define `lyscaleXXX' PS macros
+  % only once.
+  \lilypondifundefined{lyscale\lilypondpaperoutputscale}
+    {
+      \expandafter\gdef\csname lyscale\lilypondpaperoutputscale\endcsname{}
+      % This sets CTM so that you get to the currentpoint
+      % by executing a 0 0 moveto
+      \special{
+        \string!
+        /lyscale\lilypondpaperoutputscale
+          {\lilypondpaperoutputscale\lilypondspace\scaletounit %
+           dup scale} def
+      }
+    }
+    {}
+                      
   \def\embeddedps##1{
     \special{
-      ps\string: @beginspecial @setspecial %
-                 \lilypondpaperoutputscale\lilypondspace\scaletounit %
-                 \lilypondpaperoutputscale\lilypondspace\scaletounit %
-                 % FUCKING REDHAT XDVI -- ARG!
-                 skeel ##1 @endspecial
-    }
+      \string"
+      lyscale\lilypondpaperoutputscale\lilypondspace ##1}
   }
-  \lilypondsetdimen{lilypondpaperblotdiameter}
+
+  \lilypondifundefined{lilypondpaperblotdiameterps}
+    {\lilypondsetdimen{lilypondpaperblotdiameter}}
+    {}
 }
 
 \gdef\lilypondexperimentalfeatures{}