import os, sys, re __LXML_VERSION = None def version(): global __LXML_VERSION if __LXML_VERSION is None: f = open(os.path.join(get_base_dir(), 'version.txt')) try: __LXML_VERSION = f.read().strip() finally: f.close() return __LXML_VERSION def branch_version(): return version()[:3] def is_pre_release(): version_string = version() return "dev" in version_string or "alpha" in version_string or "beta" in version_string def svn_version(): _version = version() src_dir = get_base_dir() revision = 0 base_url = None urlre = re.compile('url="([^"]+)"') revre = re.compile('committed-rev="(\d+)"') for base, dirs, files in os.walk(src_dir): if '.svn' not in dirs: dirs[:] = [] continue # no sense walking uncontrolled subdirs dirs.remove('.svn') f = open(os.path.join(base, '.svn', 'entries')) data = f.read() f.close() if data[:1] in ('8', '9') or data[:2] == '10': # SVN >= 1.4 data = [ d.splitlines() for d in data.split('\n\x0c\n') ] del data[0][0] # get rid of the '8' dirurl = data[0][3] try: localrev = max([int(d[9]) for d in data if len(d)>9 and d[9]]) except ValueError: pass # may be some newly added directory elif data.startswith(' 1: break if lines: lines.append(line) elif line.startswith(_version): lines.append(line) f.close() return ''.join(lines[:-1]) def create_version_h(svn_version): """Create lxml-version.h """ # make sure we have a triple part version number if '-' in svn_version: while svn_version.count('.') < 2: svn_version = svn_version.replace('-', '.0-') else: while svn_version.count('.') < 2: svn_version += '.0' version_h = open( os.path.join(get_base_dir(), 'src', 'lxml', 'include', 'lxml-version.h'), 'w') version_h.write('''\ #ifndef LXML_VERSION_STRING #define LXML_VERSION_STRING "%s" #endif ''' % svn_version) version_h.close() def get_base_dir(): return os.path.join(os.getcwd(), os.path.dirname(sys.argv[0])) def fix_alphabeta(version, alphabeta): if ('.' + alphabeta) in version: return version return version.replace(alphabeta, '.' + alphabeta) def split_version(version): find_digits = re.compile('([0-9]+)(.*)').match l = [] for part in version.split('.'): try: l.append( int(part) ) except ValueError: match = find_digits(part) if match: l.append( int(match.group(1)) ) l.append( match.group(2) ) return tuple(l)