X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=python%2Flilylib.py;h=4bf4e1ceebc23c0d281ecbb2b137932938659cc2;hb=fc2b57cd64badbd76b3776742821808321fe3314;hp=cfa5e67d0a7b0de58428f76b3ea96efac1cecdc1;hpb=703ad9d9cf5b48abfbd14cac074859189f4cda81;p=lilypond.git diff --git a/python/lilylib.py b/python/lilylib.py index cfa5e67d0a..4bf4e1ceeb 100644 --- a/python/lilylib.py +++ b/python/lilylib.py @@ -1,17 +1,26 @@ -############################################################### -# lilylib.py -- options and stuff -# -# source file of the GNU LilyPond music typesetter +# This file is part of LilyPond, the GNU music typesetter. # -# (c) 1998--2007 Han-Wen Nienhuys -# Jan Nieuwenhuizen +# Copyright (C) 1998--2010 Han-Wen Nienhuys +# Jan Nieuwenhuizen +# +# LilyPond is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# LilyPond is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with LilyPond. If not, see . import __main__ import glob import os import re import shutil -import string import sys import optparse @@ -19,24 +28,6 @@ import optparse # Users of python modules should include this snippet # and customize variables below. -# We'll suffer this path init stuff as long as we don't install our -# python packages in /lib/pythonx.y (and don't kludge around -# it as we do with teTeX on Red Hat Linux: set some environment var -# (PYTHONPATH) in profile) - -# 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 ('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 @@ -64,12 +55,43 @@ def encoded_write(f, s): def display_encode (s): return s.encode (sys.stderr.encoding or 'utf_8') +# Lilylib globals. +program_version = '@TOPLEVEL_VERSION@' +program_name = os.path.basename (sys.argv[0]) + + +# Check if program_version contains @ characters. This will be the case if +# the .py file is called directly while building the lilypond documentation. +# If so, try to check for the env var LILYPOND_VERSION, which is set by our +# makefiles and use its value. +at_re = re.compile (r'@') +if at_re.match (program_version): + if os.environ.has_key('LILYPOND_VERSION'): + program_version = os.environ['LILYPOND_VERSION'] + else: + program_version = "unknown" + def stderr_write (s): encoded_write (sys.stderr, s) +def warning (s): + stderr_write (program_name + ": " + _ ("warning: %s") % s + '\n') + +def error (s): + stderr_write (program_name + ": " + _ ("error: %s") % s + '\n') + progress = stderr_write -# Modified version of the commands.mkarg(x), which always uses + +def require_python_version (): + if sys.hexversion < 0x02040000: + stderr_write ("Python 2.4 or newer is required to run this program.\n\ +Please upgrade Python from http://python.org/download/, and if you use MacOS X,\n\ +please read 'Setup for MacOS X' in Application Usage.") + os.system ("open http://python.org/download/") + sys.exit (2) + +# Modified version of the commands.mkarg(x), which always uses # double quotes (since Windows can't handle the single quotes: def mkarg(x): s = ' "' @@ -93,7 +115,7 @@ def subprocess_system (cmd, log_file=None): import subprocess - show_progress= progress_p + show_progress= progress_p name = command_name (cmd) error_log_file = '' @@ -172,7 +194,7 @@ def ossystem_system (cmd, system = subprocess_system if sys.platform == 'mingw32': - + ## subprocess x-compile doesn't work. system = ossystem_system @@ -185,7 +207,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): @@ -195,7 +217,7 @@ def search_exe_path (name): def print_environment (): for (k,v) in os.environ.items (): - sys.stderr.write ("%s=\"%s\"\n" % (k, v)) + sys.stderr.write ("%s=\"%s\"\n" % (k, v)) class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter): def format_heading(self, heading): @@ -216,13 +238,25 @@ class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter): " ".join (option._long_opts), metavar) + # Only use one level of indentation (even for groups and nested groups), + # since we don't indent the headeings, either + def indent(self): + self.current_indent = self.indent_increment + self.level += 1 + def dedent(self): + self.level -= 1 + if self.level <= 0: + self.current_indent = '' + self.level = 0; + def format_usage(self, usage): return _("Usage: %s") % usage + '\n' def format_description(self, description): return description -def get_option_parser (*args, **kwargs): +def get_option_parser (*args, **kwargs): p = optparse.OptionParser (*args, **kwargs) - p.formatter = NonDentedHeadingFormatter () + p.formatter = NonDentedHeadingFormatter () + p.formatter.set_parser (p) return p