#!/bin/csh
-# env. vars for the C-shell.
-# set environment for LilyPond. To be installed in /etc/profile.d/
+# Setup TeX/LaTeX Ghostscript C-shell environment for LilyPond.
+#
+# Red Hat-like systems should install this in /etc/profile.d/
-setenv GS_FONTPATH "@datadir@/afm"
+setenv GS_FONTPATH "@datadir@/afm:@datadir@/pfa:$GS_FONTPATH"
+setenv GS_LIB "@datadir@/ps:$GS_LIB"
# bit silly. for ly2dvi, overrules compiled-in datadir...
-setenv LILYPONDPREFIX "@datadir@"
+# setenv LILYPONDPREFIX "@datadir@"
# include an empty path component for the system wide includes.
if ($?MFINPUTS) then
else
setenv TEXINPUTS "/usr/share/lilypond/tex::"
endif
-if ($?TEXINPUTS) then
+if ($?TFMFONTS) then
setenv TFMFONTS "@datadir@/tfm:$TFMFONTS"
else
setenv TFMFONTS "@datadir@/tfm:"
#!/bin/sh
+# Setup TeX/LaTeX Ghostscript environment for LilyPond.
-# set environment for LilyPond. To be installed in /etc/profile.d/
-GS_FONTPATH="@datadir@/afm:@datadir@/pfa"
+# Red Hat-like systems should install this in /etc/profile.d/
+
+# This is a bit of a kludge. Ideally, lilypond's tex, afm, pfa, ps
+# directories should be installed into their location in the texmf/gs
+# trees, rather than messing around with environment variables (eg,
+# see Debian or SuSE package).
+
+datadir="@datadir@"
+
+# For direct ps output fonts
+GS_FONTPATH="$datadir/afm:$datadir/pfa"
+
+# For direct ps output: ps/lilyponddefs.ps
+GS_LIB="$datadir/ps"
# bit silly. for ly2dvi, overrules compiled-in datadir...
-LILYPONDPREFIX="@datadir@"
+# Better comment this out. Compiled-in datadir serves exactly the
+# same purpose, but is more likely to be correct (think multiple
+# versions of lilypond).
+# LILYPONDPREFIX="$datadir"
# include an empty path component for the system wide includes.
-MFINPUTS="@datadir@/mf:"${MFINPUTS:=":"}
-TEXINPUTS="@datadir@/tex:@datadir@/ps:"${TEXINPUTS:=":"}
-
-# TFMFONTS="@datadir@/tfm:$TFMFONTS"
+MFINPUTS="$datadir/mf:"${MFINPUTS:=":"}
+TEXINPUTS="$datadir/tex:$datadir/ps:"${TEXINPUTS:=":"}
+TFMFONTS="$datadir/tfm:"${TFMFONTS:=":"}
-## gs_lib ???
-export LILYINCLUDE LILYPONDPREFIX MFINPUTS TEXINPUTS GS_LIB GS_FONTPATH
+export MFINPUTS TEXINPUTS TFMFONTS GS_LIB GS_FONTPATH
--- /dev/null
+\include "norsk.ly"
+
+\header {
+texidoc ="``baz'' should be centered on the a (tenor voice), but it is
+not.";
+}
+
+\version "1.3.140";
+
+sop = \notes \transpose c'' {e2 e fis1 }
+alt = \notes \relative c' {cis2 e e d }
+ten = \notes \relative c' {a2 a a1 }
+txt = \lyrics {foo2 bar baz jazz }
+
+\score {
+ <
+ \context Staff = up \notes <
+ \context Voice=sopv {\stemUp \sop}
+ \context Voice=altv {\stemDown \alt}
+ >
+ \context Staff = down \notes < \clef "F";
+ \context Voice=tenv {\stemUp \ten}
+ >
+ \context Lyrics = la { \txt }
+ >
+ \paper { linewidth = -1; }
+}
\paper {
\translator {
\ChordNamesContext
- ChordNames \override #'word-space = #1
- ChordNames \override #'style = #'american
+ ChordName \override #'word-space = #1
+ ChordName \override #'style = #'american
}
}
}
\paper{
\translator {
\ChordNamesContext
- ChordNames \override #'word-space = #1
+ ChordName \override #'word-space = #1
}
}
}
\paper {
\translator {
\ChordNamesContext
- ChordNames \override #'word-space = #1
- ChordNames \override #'style = #'jazz
+ ChordName \override #'word-space = #1
+ ChordName \override #'style = #'jazz
}
}
}
str = re.sub ('LyricVoice', 'LyricsVoice', str)
# old fix
str = re.sub ('Chord[Nn]ames*.Chord[Nn]ames*', 'ChordNames.ChordName', str)
+ str = re.sub ('Chord[Nn]ames([ \t\n]+\\\\override)', 'ChordName\\1', str)
return str
conversions.append (((1,3,113), conv, 'LyricVoice -> LyricsVoice'))
conversions.append (((1,3,141), conv, 'xNoDots -> xSolid'))
+if 1:
+ def conv (str):
+ str = re.sub ('([Cc])horda', '\\1orda', str)
+ return str
+
+ conversions.append (((1,3,144), conv, 'Chorda -> Corda'))
+
############################
endfooter=\tagline -> 'lily was here <version>'
}
+ lilytagline (->lily was here), usertagline, copyright etc.
+
* head/header tagline/endfooter
* dvi from lilypond .tex output? This is hairy, because we create dvi
from lilypond .tex *and* header output.
- * windows compatibility: rm -rf, cp file... dir
+ * multiple \score blocks?
+
+ * windows-sans-cygwin compatibility? rm -rf, cp file... dir
'''
import operator
import tempfile
-sys.path.append ('@datadir@/python')
-import gettext
-gettext.bindtextdomain ('lilypond', '@localedir@')
-gettext.textdomain('lilypond')
-_ = gettext.gettext
+datadir = '@datadir@'
+sys.path.append (datadir + '/python')
+try:
+ import gettext
+ gettext.bindtextdomain ('lilypond', '@localedir@')
+ gettext.textdomain('lilypond')
+ _ = gettext.gettext
+except:
+ def _ (s):
+ return s
layout_fields = ['title', 'subtitle', 'subsubtitle', 'footer', 'head',
keep_temp_dir_p = 0
verbose_p = 0
+#
+# Try to cater for bad installations of LilyPond, that have
+# broken TeX setup. Just hope this doesn't hurt good TeX
+# setups. Maybe we should check if kpsewhich can find
+# feta16.{afm,mf,tex,tfm}, and only set env upon failure.
+#
+environment = {
+ 'MFINPUTS' : datadir + '/mf:',
+ 'TEXINPUTS': datadir + '/tex:' + datadir + '/ps:.:',
+ 'TFMFONTS' : datadir + '/tfm:',
+ 'GS_FONTPATH' : datadir + '/afm:' + datadir + '/pfa',
+ 'GS_LIB' : datadir + '/ps',
+}
+
+def setup_environment ():
+ for key in environment.keys ():
+ val = environment[key]
+ if os.environ.has_key (key):
+ val = val + os.pathsep + os.environ[key]
+ os.environ[key] = val
+
def identify ():
sys.stdout.write ('%s (GNU LilyPond) %s\n' % (program_name, program_version))
def cleanup_temp ():
if not keep_temp_dir_p:
if verbose_p:
- progress (_ ('Cleaning up `%s\'') % temp_dir)
+ progress (_ ("Cleaning %s...") % temp_dir)
system ('rm -rf %s' % temp_dir)
orientation = extra['orientation'][0]
# set sane geometry width (a4-width) for linewidth = -1.
- linewidth = extra['linewidth'][0]
- if linewidth < 0:
+ if not extra['linewidth'] or extra['linewidth'][0] < 0:
linewidth = 597
+ else:
+ linewidth = extra['linewidth'][0]
s = s + '\geometry{width=%spt%s,headheight=2mm,headsep=0pt,footskip=2mm,%s}\n' % (linewidth, textheight, orientation)
s = s + r'''
s = s + r'''
\makeatletter
-\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\lilypondtagline}}%
+\renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\makelilypondtagline}}%
\makeatother
'''
s = s + '\\end{document}'
if files:
setup_temp ()
+ setup_environment ()
+
extra = extra_init
dvi_name = do_files (files, extra)
type = 'DVI'
dest = os.path.join (outdir, dest)
+ midi = base + '.midi'
+ midi = os.path.join (outdir, midi)
+
if outdir != '.':
system ('mkdir -p %s' % outdir)
- system ('cp \"%s\" \"%s\"' % (srcname, dest ))
- if re.match ('[.]midi', string.join (os.listdir ('.'))):
- system ('cp *.midi %s' % outdir, ignore_error = 1)
+
+ #if re.match ('.*[.]dvi', string.join (os.listdir ('.'))):
+ if os.path.isfile (srcname):
+ # huh, and what bout all other (-1, -2) scores?
+ system ('cp \"%s\" \"%s\"' % (srcname, dest))
+ else:
+ dest = 0
+ if re.match ('.*[.]midi', string.join (os.listdir ('.'))):
+ system ('cp *.midi %s' % outdir)
+ else:
+ midi = 0
depfile = os.path.join (outdir, base + '.dep')
cleanup_temp ()
# most insteresting info last
- progress (_ ("dependencies output to %s...") % depfile)
- progress (_ ("%s output to %s...") % (type, dest))
+ # don't say silly things
+ if os.path.isfile (depfile):
+ progress (_ ("dependencies output to %s...") % depfile)
+ if dest and os.path.isfile (dest):
+ progress (_ ("%s output to %s...") % (type, dest))
+ if midi and os.path.isfile (midi):
+ progress (_ ("%s output to %s...") % ('MIDI', midi))
'''
TODO:
- * more flexible build paths
- * cleanup previous tree
+ * more flexible build/ftp/patches/releases paths
* flexible build command
* show only?
'''
import operator
import tempfile
+try:
+ import gettext
+ gettext.bindtextdomain ('lilypond', '@localedir@')
+ gettext.textdomain('lilypond')
+ _ = gettext.gettext
+except:
+ def _ (s):
+ return s
sys.path.append ('@datadir@/python')
import gettext
package_name = 'lilypond'
help_summary = _("Fetch and rebuild from latest source package")
build_root = os.environ ['HOME'] + '/usr/src'
-build_command = './configure; make web'
+build_command = '(./configure --prefix=$HOME/usr && make all web) >> log.txt 2>&1'
+
release_dir = build_root + '/releases'
patch_dir = build_root + '/patches'
url = 'ftp://appel.lilypond.org/pub/gnu/LilyPond/development/lilypond-*.tar.gz'
url = 'ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development/lilypond-*.tar.gz'
+remove_previous_p = 0
+
# lily_py.py -- options and stuff
#
def cleanup_temp ():
if not keep_temp_dir_p:
if verbose_p:
- progress (_ ('Cleaning up `%s\'') % temp_dir)
+ progress (_ ("Cleaning %s...") % temp_dir)
system ('rm -rf %s' % temp_dir)
('DIR', 'b', 'build-root', _ ("unpack and build in DIR [%s]") % build_root),
('', 'h', 'help', _ ("this help")),
('', 'k', 'keep', _ ("keep all output, and name the directory %s") % temp_dir),
+ ('', 'r', 'remove-previous', _ ("remove previous build")),
('', 'V', 'verbose', _ ("verbose")),
('', 'v', 'version', _ ("print version number")),
('URL', 'u', 'url', _ ("fetch and build URL [%s]") % url),
def build (p):
os.chdir (build_root)
system ('tar xzf %s/%s.tar.gz' % (release_dir, p))
+ system ('rm -f building')
+ os.symlink ('%s/%s' % (build_root, p), 'building')
os.chdir (p)
return system (build_command)
help ()
elif o == '--buid-root' or o == '-b':
build_root = a
+ elif o == '--remove-previous' or o == '-r':
+ remove_previous_p = 1
elif o == '--url' or o == '-u':
url = a
elif o == '--verbose' or o == '-V':
if 1:
latest = find_latest (url)
- if os.path.isdir ('%s/%s' % (build_root, latest)):
+ #if os.path.isdir ('%s/%s' % (build_root, latest)):
+ if os.path.isdir ('%s/%s/%s' % (build_root, latest, 'lily/out/lilypond')):
progress (_ ("latest is %s") % latest)
progress (_ ("relax, %s is up to date" % package_name))
sys.exit (0)
progress (_ ("fetching %s...") % get)
copy_url (get, '.')
- build_command = './configure --prefix=$HOME/usr && make web'
if not build (latest):
if os.path.isdir ('%s/%s' % (build_root, package_name)):
os.chdir ('%s/%s' % (build_root, package_name))
previous = os.getcwd ()
os.chdir (build_root)
- system ('rm -f %s' % package_name)
- system ('echo rm -rf %s/%s' % (build_root, previous))
+ if remove_previous_p:
+ system ('echo rm -rf %s/%s' % (build_root, previous))
+ system ('rm -f %s' % package_name)
os.symlink ('%s/%s' % (build_root, latest), package_name)
os.chdir (original_dir)
'Generate a patch to go to current version\n'
' -f, --from=FROM old is FROM\n'
' -h, --help print this help\n'
+ ' --outdir=DIR generate in DIR\n'
+ ' -o, --output=NAME write patch to NAME\n'
' -p, --package=DIR specify package\n'
' -r, --release diff against latest release\n'
' -t, --to=TO to version TO\n'
)
def cleanup ():
- global from_diff, to_diff, prev_cwd
+ global from_diff, to_diff, original_dir
os.chdir ('/tmp/package-diff')
sys.stderr.write ('Cleaning ... ')
os.system ('rm -fr %s %s' % (from_diff, to_diff))
sys.stderr.write ('\n')
- os.chdir (prev_cwd)
+ os.chdir (original_dir)
def untar (fn):
# os.system ('pwd');
os.environ['GZIP'] = '-q'
-print 'argv: ' + string.join (sys.argv[2:])
+print 'argv: ' + string.join (sys.argv[1:])
(options, files) = getopt.getopt (sys.argv[1:],
- 'hF:f:o:p:rT:t:', ['from=', 'dir-from=', 'dir-to=', 'help', 'output=', 'package=', 'release', 'to='])
+ 'hF:f:o:p:rT:t:', ['conf=', 'from=', 'dir-from=', 'dir-to=', 'help', 'outdir=', 'output=', 'package=', 'release', 'to='])
patch_name = ''
+conf = ''
+outdir = ''
from_src = ''
to_src = ''
release=0
elif o == '--help' or o == '-h':
help ()
sys.exit (0)
+ elif o == '--outdir':
+ outdir = a
+ elif o == '--conf':
+ conf = a
elif o == '--output' or o == '-o':
- patch_name = os.path.join (os.getcwd (), a)
+ patch_name = a
elif o == '-p' or o == '--package':
topdir = a
elif o == '--release' or o == '-r':
flags.from_version[1], flags.from_version[2], '');
import tempfile
-prev_cwd = os.getcwd ();
+original_dir = os.getcwd ();
os.system ('rm -rf /tmp/package-diff')
try:
sys.stderr.write (patch_name + ': nothing to do: to == from = ' + from_diff + '\n')
sys.exit (1)
+def compat_abspath (path):
+ return os.path.normpath (os.path.join (os.getcwd (), path))
+
+if conf and not outdir:
+ outdir = 'out-' + conf
+
if not patch_name:
- pn = to_diff + '.diff'
- patch_name = os.path.join (os.getcwd (), 'out')
- patch_name = os.path.join (patch_name, pn)
+ to_diff + '.diff'
+patch_name = compat_abspath (os.path.join (outdir, to_diff + '.diff'))
from_diff = '/tmp/package-diff/' + from_diff
to_diff = '/tmp/package-diff/' + to_diff
if not from_src:
os.chdir ('/tmp/package-diff')
untar (released_tarball (flags.from_version))
- os.chdir (prev_cwd)
+ os.chdir (original_dir)
else:
sys.stderr.write ('copying ' + from_src + ' to ' + from_diff + '\n')
# os.system ('cp -pr %s %s' % (srcdir, from_diff))
if not to_src:
os.chdir ('/tmp/package-diff')
untar (released_tarball (flags.to_version))
- os.chdir (prev_cwd)
+ os.chdir (original_dir)
else:
sys.stderr.write ('copying ' + to_src + ' to ' + to_diff + '\n')
os.system ('mkdir -p %s '% (to_diff))
os.link(orig, os.path.join (package.release_dir, tarball))
# urg: howto check exit code?
-os.system(sys.executable + ' ' + package.topdir + '/stepmake/bin/package-diff.py --package=' + topdir)
+os.system(sys.executable + ' ' + package.topdir + '/stepmake/bin/package-diff.py --outdir=%s --package=%s' % (outdir, topdir))
diffname = pn + '.diff.gz'
rel_pn = package.patch_dir + diffname
makeflags=$(patsubst %==, %, $(patsubst ---%,,$(patsubst ----%,,$(MAKEFLAGS:%=--%))))
diff:
- $(PYTHON) $(step-bindir)/package-diff.py --package=$(topdir) $(makeflags)
+ $(PYTHON) $(step-bindir)/package-diff.py --outdir=$(topdir)/$(outdir) --package=$(topdir) $(makeflags)
+ -ln -f $(depth)/$(outdir)/$(distname).diff.gz $(patch-dir)
release:
$(PYTHON) $(step-bindir)/release.py --outdir=$(topdir)/$(outdir) --package=$(topdir)