]> git.donarmstrong.com Git - lilypond.git/blobdiff - stepmake/bin/packagepython.py
release: 1.0.1
[lilypond.git] / stepmake / bin / packagepython.py
diff --git a/stepmake/bin/packagepython.py b/stepmake/bin/packagepython.py
new file mode 100755 (executable)
index 0000000..68c7abd
--- /dev/null
@@ -0,0 +1,173 @@
+#!/usr/bin/python
+
+# packagepython.py --  implement general StepMake-wide python stuff
+# 
+# source file of the GNU LilyPond music typesetter
+# 
+# (c) 1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
+#                Jan Nieuwenhuizen <janneke@gnu.org>
+
+import regex
+import regsub
+from string import *
+# from flower import *
+import sys
+import os
+import getopt
+
+make_assign_re = regex.compile('^\([A-Z_]*\)=\(.*\)$')
+
+def read_makefile (fn):
+       file = open (fn)
+       lines = file.readlines()
+
+       mi = pa = mj = 0
+       mp = ''
+
+       make_dict = {}
+       for l in lines:
+               if make_assign_re.search(l) <> -1:
+                       nm = make_assign_re.group(1)
+                       val = make_assign_re.group(2)
+                       make_dict[nm] = val
+       return make_dict
+
+class Package:
+       def __init__ (self, dirname):
+               dict = read_makefile (dirname + '/VERSION')
+               version_list = []
+               for x in [ 'MAJOR_VERSION', 'MINOR_VERSION',   'PATCH_LEVEL']:
+                       version_list.append (atoi (dict[x]))
+               version_list.append (dict['MY_PATCH_LEVEL'])
+               self.topdir = dirname
+               self.groupdir = self.topdir + '/..'
+               self.patch_dir = self.groupdir + '/patches/'
+               self.release_dir = self.groupdir + '/releases/'
+               self.test_dir = self.groupdir + '/test/'
+               self.version =  tuple(version_list)
+               self.Name = dict['PACKAGE_NAME']
+               self.name = lower (self.Name)
+               if self.name == 'lilypond':
+                       self.nickname = 'lelie'
+               else:
+                       self.nickname = self.name
+               self.NAME = upper (self.Name)
+
+
+class Packager:
+       def __init__ (self):
+               try:
+                       m= os.environ['MAILADDRESS']
+               except KeyError:
+                       m= '(address unknown)'
+               self.mail= m
+
+
+def full_version_tup(tup):
+       t = [0,0,0,'']
+       for i in range (4):
+         try:
+                 t[i] = tup[i]
+         except IndexError:
+                 break
+       return tuple(t)
+
+def split_my_patchlevel(str):
+       return (regsub.sub('[0-9]*$', '', str),
+               atoi(regsub.sub('[^0-9]*', '', str)))
+       
+
+def next_version(tup):
+       l = list(full_version_tup (tup))
+       t3name=t3num=''
+       if l[3]:
+               (t3name,t3num)= split_my_patchlevel (l[3])
+               if t3num: 
+                       t3num = '%d' % (t3num + 1)
+               else:
+                       t3num = t3name =''
+       else:
+               l[2] = l[2] +1
+
+       return tuple(l[0:3] + [t3name +  t3num])
+
+def prev_version(tup):
+       l = list(full_version_tup (tup))
+       t3name=t3num=''
+       if l[3]:
+               (t3name,t3num)= split_my_patchlevel (l[3])
+               if t3num and t3num - 1 > 0:
+                       t3num = '%d' %(t3num - 1)
+               else:
+                       t3num = t3name =''
+
+       else:
+               l[2] = l[2] -1
+               
+       return tuple(l[0:3] + [t3name +  t3num])
+
+def version_tuple_to_str(tup):
+       tup = full_version_tup (tup)
+       if tup[3]:
+               my = '.' + tup[3]
+       else:
+               my = ''
+       return ('%d.%d.%d' % tup[0:3]) + my
+
+def version_str_to_tuple(str):
+       t = split(str, '.')
+       try:
+               mypatch = t[3]
+       except IndexError:
+               mypatch = ''
+       return (atoi(t[0]), atoi(t[1]), atoi(t[2]), mypatch)
+
+def version_compare (tupl, tupr):
+       tupl = full_version_tup (tupl)
+       tupr = full_version_tup (tupr)
+       for i in (0,1,2):
+               if tupl[i] - tupr[i]: return tupl[i] - tupr[i]
+       if tupl[3] and tupr[3]:
+               lname = regsub.sub('[0-9]*$', '', tupl[3])
+               lnum = atoi(regsub.sub('[^0-9]*', '', tupl[3]))
+               rname = regsub.sub('[0-9]*$', '', tupr[3])
+               rnum = atoi(regsub.sub('[^0-9]*', '', tupr[3]))
+               if lname != rname:
+                       raise 'ambiguous'
+               return sign (lnum - rnum)
+       if tupl[3]:
+               return 1
+       else:
+               return -1
+
+       
+if __name__ == '__main__':
+       p = Package ('.')
+       v=  p.version
+       print v, prev_version(v), next_version(v)
+       pv=(0,1,1,'jcn4')
+       print version_tuple_to_str(pv), prev_version(pv), next_version(pv)
+       print version_tuple_to_str((0,1,1,''))    
+       print full_version_tup ((0,1))
+
+       
+def dump_file(f, s):
+       i = open(f, 'w')
+       i.write(s)
+       i.close ()
+
+def gulp_file(f):
+       try:
+               i = open(f)
+               i.seek (0, 2)
+               n = i.tell ()
+               i.seek (0,0)
+       except:
+               sys.stderr.write( 'can\'t open file %s\n ' % f)
+               return ''
+       s = i.read (n)
+       if len (s) <= 0:
+               sys.stderr.write( 'gulped empty file: %s\n'% f)
+       return s
+
+