X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=python%2Flilylib.py;h=f9cbff2c60a84ee84a3ebeb772e6eacc720b9adc;hb=f6e9afcbcca74efbf3d18bf05e32f4c5291e04de;hp=56e7b1bceee671fcac23f5ebfa08ef389e227a83;hpb=b2d53220bc88ac15e891c7e6c5e078906d51b811;p=lilypond.git diff --git a/python/lilylib.py b/python/lilylib.py index 56e7b1bcee..f9cbff2c60 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -3,7 +3,7 @@ # # source file of the GNU LilyPond music typesetter # -# (c) 1998--2006 Han-Wen Nienhuys +# (c) 1998--2007 Han-Wen Nienhuys # Jan Nieuwenhuizen import __main__ @@ -11,7 +11,6 @@ import glob import os import re import shutil -import string import sys import optparse @@ -24,33 +23,50 @@ import optparse # it as we do with teTeX on Red Hat Linux: set some environment var # (PYTHONPATH) in profile) -# If set, LILYPONDPREFIX must take prevalence -# if datadir is not set, we're doing a build and LILYPONDPREFIX +# If set, LILYPOND_DATADIR must take prevalence +# if datadir is not set, we're doing a build and LILYPOND_DATADIR datadir = '@local_lilypond_datadir@' if not os.path.isdir (datadir): datadir = '@lilypond_datadir@' -if os.environ.has_key ('LILYPONDPREFIX') : - datadir = os.environ['LILYPONDPREFIX'] +if os.environ.has_key ('LILYPOND_DATADIR') : + datadir = os.environ['LILYPOND_DATADIR'] while datadir[-1] == os.sep: datadir= datadir[:-1] sys.path.insert (0, os.path.join (datadir, 'python')) - +# Python 2.5 only accepts strings with proper Python internal encoding +# (i.e. ASCII or Unicode) when writing to stdout/stderr, so we must +# use ugettext iso gettext, and encode the string when writing to +# stdout/stderr localedir = '@localedir@' try: import gettext - gettext.bindtextdomain ('lilypond', localedir) - gettext.textdomain ('lilypond') - _ = gettext.gettext + t = gettext.translation ('lilypond', localedir) + _ = t.ugettext except: def _ (s): return s underscore = _ -progress = sys.stderr.write + +# Urg, Python 2.4 does not define stderr/stdout encoding +# Maybe guess encoding from LANG/LC_ALL/LC_CTYPE? + +def encoded_write(f, s): + f.write (s.encode (f.encoding or 'utf_8')) + +# ugh, Python 2.5 optparse requires Unicode strings in some argument +# functions, and refuse them in some other places +def display_encode (s): + return s.encode (sys.stderr.encoding or 'utf_8') + +def stderr_write (s): + encoded_write (sys.stderr, s) + +progress = stderr_write # Modified version of the commands.mkarg(x), which always uses # double quotes (since Windows can't handle the single quotes: @@ -69,12 +85,11 @@ def command_name (cmd): cmd = re.match ('([\(\)]*)([^\\\ ]*)', cmd).group (2) return os.path.basename (cmd) -def system (cmd, - ignore_error=False, - progress_p=True, - be_verbose=False, - log_file=None): - +def subprocess_system (cmd, + ignore_error=False, + progress_p=True, + be_verbose=False, + log_file=None): import subprocess show_progress= progress_p @@ -124,6 +139,42 @@ def system (cmd, return abs (retval) +def ossystem_system (cmd, + ignore_error=False, + progress_p=True, + be_verbose=False, + log_file=None): + + + name = command_name (cmd) + if be_verbose: + show_progress = 1 + progress (_ ("Invoking `%s\'") % cmd) + else: + progress ( _("Running %s...") % name) + + retval = os.system (cmd) + if retval: + print >>sys.stderr, 'command failed:', cmd + if retval < 0: + print >>sys.stderr, "Child was terminated by signal", -retval + elif retval > 0: + print >>sys.stderr, "Child returned", retval + + if ignore_error: + print >>sys.stderr, "Error ignored" + else: + sys.exit (1) + + return abs (retval) + + +system = subprocess_system +if sys.platform == 'mingw32': + + ## subprocess x-compile doesn't work. + system = ossystem_system + def strip_extension (f, ext): (p, e) = os.path.splitext (f) if e == ext: @@ -133,7 +184,7 @@ def strip_extension (f, ext): def search_exe_path (name): p = os.environ['PATH'] - exe_paths = string.split (p, ':') + exe_paths = p.split (':') for e in exe_paths: full = os.path.join (e, name) if os.path.exists (full): @@ -165,7 +216,7 @@ class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter): metavar) def format_usage(self, usage): - return _("Usage: %s\n") % usage + return _("Usage: %s") % usage + '\n' def format_description(self, description): return description