return s
underscore = _
-def progress (s):
- sys.stderr.write (s)
-
-def warning (s):
- sys.stderr.write (__main__.program_name + ": " + _ ("warning: %s") % s + '\n')
-
-def error (s):
- sys.stderr.write (__main__.program_name + ": " + _ ("error: %s") % s + '\n')
-
-def exit (i):
- be_verbose = get_global_option('verbose_p', 'verbose')
- if be_verbose:
- raise _ ('Exiting (%d)...') % i
- else:
- sys.exit (i)
-
-def lilypond_version (binary):
- p = read_pipe ('%s --version ' % binary)
-
- ls = p.split ('\n')
- v= '<not found>'
- for l in ls:
- m = re.search ('GNU LilyPond ([0-9a-z.]+)', p)
- if m:
- v = m.group (1)
-
- return v
-
-def lilypond_version_check (binary, req):
- if req[0] <> '@' :
- v = lilypond_version (binary)
- if v <> req:
- error (_("Binary %s has version %s, looking for version %s") % \
- (binary, v, req))
- sys.exit (1)
-
-
def command_name (cmd):
# Strip all stuf after command,
name = re.sub('[^a-z]','x', name)
return tempfile.mktemp ('%s.errorlog' % name)
-def read_pipe (cmd, mode = 'r'):
-
-
- redirect = ''
- error_log_file = ''
- if be_verbose:
- progress (_ ("Opening pipe `%s\'") % cmd)
- else:
- error_log_file = error_log (command_name (cmd))
- redirect = ' 2>%s' % error_log_file
-
- pipe = os.popen (cmd + redirect, mode)
- output = pipe.read ()
- status = pipe.close ()
- # successful pipe close returns 'None'
- if not status:
- status = 0
- signal = 0x0f & status
- exit_status = status >> 8
-
- if status:
- error (_ ("`%s\' failed (%d)") % (cmd, exit_status))
-
- if not be_verbose:
- contents = open (error_log_file).read ()
- if contents:
- error (_ ("The error log is as follows:"))
- sys.stderr.write (contents)
-
- # Ugh. code dup
- if error_log_file:
- os.unlink (error_log_file)
- exit (1)
-
- if be_verbose:
- progress ('\n')
-
- if error_log_file:
- os.unlink (error_log_file)
-
- return output
-
-def get_global_option (old, new):
- try:
- return __main__.__dict__[old]
- except KeyError:
- return __main__.global_options.__dict__[new]
-
-def system (cmd, ignore_error = 0, progress_p = 0):
+def system (cmd, ignore_error = 0, progress_p = 0, be_verbose=0):
'''System CMD. If IGNORE_ERROR, do not complain when CMD
returns non zero. If PROGRESS_P, always show progress.
name = command_name (cmd)
error_log_file = ''
- ## UGH
- be_verbose = get_global_option('verbose_p', 'verbose')
- pseudo_filter = get_global_option ('pseudo_filter_p', 'pseudo_filter')
-
if be_verbose:
progress_p = 1
progress (_ ("Invoking `%s\'") % cmd)
if not progress_p:
error_log_file = error_log (name)
redirect = ' 1>/dev/null 2>' + error_log_file
- elif pseudo_filter:
- redirect = ' 1>/dev/null'
status = os.system (cmd + redirect)
signal = 0x0f & status
progress ('\n')
return status
-def cleanup_temp ():
- be_verbose = get_global_option('verbose_p', 'verbose')
- if not __main__.keep_temp_dir_p:
- if be_verbose:
- progress (_ ("Cleaning %s...") % __main__.temp_dir)
- shutil.rmtree (__main__.temp_dir)
- if be_verbose:
- progress ('\n')
-
-
def strip_extension (f, ext):
(p, e) = os.path.splitext (f)
if e == ext:
return p + e
-def cp_to_dir (pattern, dir):
- "Copy files matching re PATTERN from cwd to DIR"
-
- # Duh. Python style portable: cp *.EXT OUTDIR
- # system ('cp *.%s %s' % (ext, outdir), 1)
-
- files = filter (lambda x, p=pattern: re.match (p, x), os.listdir ('.'))
- map (lambda x, d=dir: shutil.copy2 (x, os.path.join (d, x)), files)
-
-
def search_exe_path (name):
p = os.environ['PATH']
exe_paths = string.split (p, ':')
return None
-def mkdir_p (dir, mode=0777):
- if not os.path.isdir (dir):
- makedirs (dir, mode)
-
def print_environment ():
for (k,v) in os.environ.items ():
sys.stderr.write ("%s=\"%s\"\n" % (k, v))
return string.atoi (m.group (1))
return 0
-def make_ps_images (ps_name, resolution = 90, papersize = "a4",
- rename_page1_p = 0):
- base = os.path.basename (re.sub (r'\.e?ps', '', ps_name))
- header = open (ps_name).read (1024)
-
- png1 = base + '.png'
- pngn = base + '-page%d.png'
- output_file = pngn
- multi_page = re.search ('\n%%Pages: ', header)
-
- # png16m is because Lily produces color nowadays.
- if not multi_page:
-
- # GS can produce empty 2nd page if pngn is used.
- output_file = png1
- cmd = r'''gs\
- -dEPSCrop\
- -dGraphicsAlphaBits=4\
- -dNOPAUSE\
- -dTextAlphaBits=4\
- -sDEVICE=png16m\
- -sOutputFile='%(output_file)s'\
- -sPAPERSIZE=%(papersize)s\
- -q\
- -r%(resolution)d\
- '%(ps_name)s'\
- -c showpage\
- -c quit ''' % vars ()
- else:
- cmd = r'''gs\
- -s\
- -dGraphicsAlphaBits=4\
- -dNOPAUSE\
- -dTextAlphaBits=4\
- -sDEVICE=png16m\
- -sOutputFile='%(output_file)s'\
- -sPAPERSIZE=%(papersize)s\
- -q\
- -r%(resolution)d\
- '%(ps_name)s'\
- -c quit''' % vars ()
-
- remove = glob.glob (png1) + glob.glob (base + '-page*.png')
- map (os.unlink, remove)
-
- status = system (cmd)
- signal = 0xf & status
- exit_status = status >> 8
-
- if status:
- remove = glob.glob (png1) + glob.glob (base + '-page*.png')
- map (os.unlink, remove)
- error (_ ("%s exited with status: %d") % ('GS', status))
- exit (1)
-
- if rename_page1_p and multi_page:
- os.rename (pngn % 1, png1)
- files = glob.glob (png1) + glob.glob (re.sub ('%d', '*', pngn))
- return files
-
class NonDentedHeadingFormatter (optparse.IndentedHelpFormatter):
def format_heading(self, heading):
if heading: