X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=python%2Flilylib.py;h=686993e5d87165b69c131aa33e7b1ca141eb22b8;hb=87eedcd59f4082cb0841528ad5bc82cb1d1191e3;hp=23d268f6206dc39cdf4589fad9ea6b036430db04;hpb=2653452d1d96361a98118b231cc0aed489d27dab;p=lilypond.git diff --git a/python/lilylib.py b/python/lilylib.py index 23d268f620..686993e5d8 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -1,9 +1,9 @@ -################################################################ +############################################################### # lilylib.py -- options and stuff # # source file of the GNU LilyPond music typesetter # -# (c) 1998--2006 Han-Wen Nienhuys +# (c) 1998--2006 Han-Wen Nienhuys # Jan Nieuwenhuizen import __main__ @@ -14,15 +14,7 @@ import shutil import string import sys import optparse -import subprocess -## windows mingw cross compile doesn't have selectmodule.so -have_select = True -try: - import select -except ImportError: - have_select = False - ################################################################ # Users of python modules should include this snippet # and customize variables below. @@ -37,11 +29,11 @@ except ImportError: datadir = '@local_lilypond_datadir@' if not os.path.isdir (datadir): - datadir = '@lilypond_datadir@' + datadir = '@lilypond_datadir@' if os.environ.has_key ('LILYPONDPREFIX') : - datadir = os.environ['LILYPONDPREFIX'] - while datadir[-1] == os.sep: - datadir= datadir[:-1] + datadir = os.environ['LILYPONDPREFIX'] + while datadir[-1] == os.sep: + datadir= datadir[:-1] sys.path.insert (0, os.path.join (datadir, 'python')) @@ -50,127 +42,170 @@ sys.path.insert (0, os.path.join (datadir, 'python')) localedir = '@localedir@' try: - import gettext - gettext.bindtextdomain ('lilypond', localedir) - gettext.textdomain ('lilypond') - _ = gettext.gettext + import gettext + gettext.bindtextdomain ('lilypond', localedir) + gettext.textdomain ('lilypond') + _ = gettext.gettext except: - def _ (s): - return s + def _ (s): + return s underscore = _ progress = sys.stderr.write +# Modified version of the commands.mkarg(x), which always uses +# double quotes (since Windows can't handle the single quotes: +def mkarg(x): + s = ' "' + for c in x: + if c in '\\$"`': + s = s + '\\' + s = s + c + s = s + '"' + return s def command_name (cmd): - # Strip all stuf after command, - # deal with "((latex ) >& 1 ) .." too - 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): - - show_progress= progress_p - name = command_name (cmd) - error_log_file = '' - - if be_verbose: - show_progress = 1 - progress (_ ("Invoking `%s\'") % cmd) + # Strip all stuf after command, + # deal with "((latex ) >& 1 ) .." too + cmd = re.match ('([\(\)]*)([^\\\ ]*)', cmd).group (2) + return os.path.basename (cmd) + +def subprocess_system (cmd, + ignore_error=False, + progress_p=True, + be_verbose=False, + log_file=None): + import subprocess + + show_progress= progress_p + name = command_name (cmd) + error_log_file = '' + + if be_verbose: + show_progress = 1 + progress (_ ("Invoking `%s\'") % cmd) + else: + progress ( _("Running %s...") % name) + + + stdout_setting = None + if not show_progress: + stdout_setting = subprocess.PIPE + + proc = subprocess.Popen (cmd, + shell=True, + universal_newlines=True, + stdout=stdout_setting, + stderr=stdout_setting) + + log = '' + + if show_progress: + retval = proc.wait() + else: + log = proc.communicate () + retval = proc.returncode + + + 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: - progress ( _("Running %s...") % name) - - - stdout_setting = None - if not show_progress: - stdout_setting = subprocess.PIPE - - proc = subprocess.Popen (cmd, - shell=True, - universal_newlines=True, - stdout=stdout_setting, - stderr=stdout_setting) - - log = '' - - if not have_select: - show_progress = True - - if show_progress: - retval = proc.wait() + if not show_progress: + print log[0] + print log[1] + sys.exit (1) + + 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: - log = proc.communicate () - retval = proc.returncode - + sys.exit (1) - 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 + return abs (retval) - if ignore_error: - print >>sys.stderr, "Error ignored" - else: - if not show_progress: - print log[0] - print log[1] - 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: - e = '' - return p + e + (p, e) = os.path.splitext (f) + if e == ext: + e = '' + return p + e def search_exe_path (name): - p = os.environ['PATH'] - exe_paths = string.split (p, ':') - for e in exe_paths: - full = os.path.join (e, name) - if os.path.exists (full): - return full - return None + p = os.environ['PATH'] + exe_paths = string.split (p, ':') + for e in exe_paths: + full = os.path.join (e, name) + if os.path.exists (full): + return full + return None def print_environment (): - for (k,v) in os.environ.items (): - sys.stderr.write ("%s=\"%s\"\n" % (k, v)) - + for (k,v) in os.environ.items (): + sys.stderr.write ("%s=\"%s\"\n" % (k, v)) class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter): def format_heading(self, heading): - if heading: - return heading[0].upper() + heading[1:] + ':\n' - return '' + if heading: + return heading[0].upper() + heading[1:] + ':\n' + return '' def format_option_strings(self, option): - sep = ' ' - if option._short_opts and option._long_opts: - sep = ',' + sep = ' ' + if option._short_opts and option._long_opts: + sep = ',' - metavar = '' - if option.takes_value(): - metavar = '=%s' % option.metavar or option.dest.upper() + metavar = '' + if option.takes_value(): + metavar = '=%s' % option.metavar or option.dest.upper() - return "%3s%s %s%s" % (" ".join (option._short_opts), - sep, - " ".join (option._long_opts), - metavar) + return "%3s%s %s%s" % (" ".join (option._short_opts), + sep, + " ".join (option._long_opts), + metavar) def format_usage(self, usage): - return _("Usage: %s\n") % usage - + return _("Usage: %s") % usage + '\n' + def format_description(self, description): - return description + return description def get_option_parser (*args, **kwargs): - p = optparse.OptionParser (*args, **kwargs) - p.formatter = NonDentedHeadingFormatter () - return p + p = optparse.OptionParser (*args, **kwargs) + p.formatter = NonDentedHeadingFormatter () + return p