aboutsummaryrefslogtreecommitdiff
blob: 3109b7d4e4742c1d42e9206421bf3036d7239bf2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#! /usr/bin/python2
#
# Copyright(c) 2004, Karl Trygve Kalleberg <karltk@gentoo.org>
# Copyright(c) 2004, Gentoo Foundation
#
# Licensed under the GNU General Public License, v2
#
# $Header: /var/cvsroot/gentoo-src/javatoolkit/src/bsfix/bsfix-eclipse.py,v 1.1 2004/12/20 19:13:05 karltk Exp $

#
# Usage:
#
# bsfix-eclipse --prefix /usr/lib/eclipse-3 --versions 3.0.0,3.0.1 --varnames eclipse_classpath build.properties
#

import os
import re
import sys
import optparse	

import javatoolkit.parser as parser
from javatoolkit.classpath import Classpath

from javatoolkit import die
	
__author__ = "Karl Trygve Kalleberg <karltk@gentoo.org>"
__version__ = "0.1.0"
__productname__ = "bsfix-eclipse"
__description__ = "Gentoo Eclipse Build Script Fixer"
	   
def find_best_version(path, vers):
	for ver in vers:
		x = re.sub("[0-9].[0-9].[0-9]", ver, path)
		if os.path.exists(x):
			return ver
	return None

def resolve_version(doc, var, versions, prefix):

	node = doc.find_node(var)
	oldcp = Classpath(parser.expand(doc, node.value))
	newcp = Classpath()
							
	for i in range(len(oldcp)):
		entry = oldcp[i]
		if entry.startswith(prefix):
			ver = find_best_version(entry, versions)
			if ver is None:
				die(2, "Failed to resolve " + entry)
				
			substed_entry = re.sub("[0-9].[0-9].[0-9]", ver, entry)
			newcp.append(substed_entry)
		else:
			newcp.append(entry)
			
	node.value = str(newcp)
	return node

"""
Print program version to stdout.
"""
def print_version():
	print __productname__ + "(" + __version__ + ") - " + \
		__description__
	print "Author(s): " + __author__

"""
Parse command line arguments
"""
def parse_args():
	
	parser = optparse.OptionParser(version="%prog " + __version__ )

	parser.add_option("-p", "--prefix-path", dest="prefix_path", 
			default="", help="path of Eclipse installation")

	parser.add_option("-a", "--allowed-versions", dest="versions", 
			default=".", help="versions to check for (comma separated)")

	parser.add_option("-n", "--varnames", dest="varnames", 
			default=".", help="attribute names to be considered as classpaths (comma separated)")
	
	(opts, args) = parser.parse_args()		
	opts.varnames = opts.varnames.split(",")
	opts.versions = opts.versions.split(",")
	
	return (opts, args)
	
def main():

	(options, args) = parse_args()

	for arg in args:
		
		doc = parser.buildproperties.parse(open(arg))
		if doc == None:
			raise "File not readable, '" + arg + "'"
		
		for var in options.varnames:
			resolve_version(doc, var, options.versions, options.prefix_path)
				
		doc.dump()

if __name__ == "__main__":
	main()