summaryrefslogtreecommitdiff
blob: 9b49cd53f55ed8d4a3c0251a1b8066a11baea4cd (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
diff -ru --exclude .svn tags/2.0.33/src/gjl trunk/src/gjl
--- tags/2.0.33/src/gjl	2007-05-26 11:10:15.000000000 +0200
+++ trunk/src/gjl	2007-05-28 13:59:52.000000000 +0200
@@ -34,7 +34,7 @@
         pkg = unresolved.pop()
         resolved.add(pkg)
         # dep is in the form of (jar, pkg)
-        for dep in pkg.deps():
+        for dep in manager.get_pkg_deps(pkg):
             dep_pkg = dep[-1]
             p = manager.get_package(dep_pkg)
             if p is None:
diff -ru --exclude .svn tags/2.0.33/src/java_config/EnvironmentManager.py trunk/src/java_config/EnvironmentManager.py
--- tags/2.0.33/src/java_config/EnvironmentManager.py	2007-05-26 11:10:15.000000000 +0200
+++ trunk/src/java_config/EnvironmentManager.py	2007-05-28 11:40:03.000000000 +0200
@@ -263,6 +263,19 @@
     def build_classpath(self, pkgs):
         return self.build_path(pkgs, "CLASSPATH")
 
+    def get_pkg_deps(self, pkg):
+        """
+        Returns list of package's deps and optional deps.
+        Filters out optional deps that are not present.
+        """
+        deps = pkg.deps();
+        for opt_dep in pkg.opt_deps():
+            p = self.get_package(opt_dep[-1])
+            if p:
+                deps.append(opt_dep)
+
+        return deps
+
     def add_dep_classpath(self, pkg, dep, classpath): 
         pkg_cp = pkg.classpath()
         if pkg_cp:
@@ -295,7 +308,7 @@
                 lpath = pkg.query(query)
                 self.add_path_elements(lpath, path)
 
-            for dep in pkg.deps():
+            for dep in self.get_pkg_deps(pkg):
                 p = self.get_package(dep[-1])
 
                 if p:
@@ -344,7 +357,7 @@
 
             self.add_pkg_env_vars(pkg, env)
 
-            for dep in pkg.deps():
+            for dep in self.get_pkg_deps(pkg):
                 p = self.get_package(dep[-1])
 
                 if p:
diff -ru --exclude .svn tags/2.0.33/src/java_config/Package.py trunk/src/java_config/Package.py
--- tags/2.0.33/src/java_config/Package.py	2007-05-26 11:10:15.000000000 +0200
+++ trunk/src/java_config/Package.py	2007-05-28 11:36:50.000000000 +0200
@@ -55,11 +55,13 @@
         """
         Return all packages this package depends on
         """
-        depstr = self.query("DEPEND")
-        if depstr:
-            return [dep.split("@") for dep in depstr.split(":")]
-        else:
-            return []
+        return self.__get_deps("DEPEND")
+        
+    def opt_deps(self):
+        """
+        Return all packages this package optionally depends on
+        """
+        return self.__get_deps("OPTIONAL_DEPEND")
 
     def provides(self):
         """
@@ -69,5 +71,18 @@
         if pv:
             return pv.split(" ")
         return []
+    
+    def __get_deps(self, query):
+        """
+        Internal function to get package's (optional) dependencies;
+        @param query: variable to read from package.env
+        """
+        depstr = self.query(query)
+        if depstr:
+            return [dep.split("@") for dep in depstr.split(":")]
+        else:
+            return []
+        
+    
 
 # vim:set expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap:
diff -ru --exclude .svn tags/2.0.33/src/java_config/VersionManager.py trunk/src/java_config/VersionManager.py
--- tags/2.0.33/src/java_config/VersionManager.py	2007-05-26 11:10:15.000000000 +0200
+++ trunk/src/java_config/VersionManager.py	2007-05-27 17:43:01.000000000 +0200
@@ -127,6 +127,7 @@
 
         prefs = self.get_prefs()
 
+        # first try to find vm based on preferences
         low = self.get_lowest(atoms) # Lowest vm version we can use
         for atom in matched_atoms: 
             for pref in prefs:
@@ -143,12 +144,14 @@
                             else:
                                 return gvm          # use it!
 
-        low = self.get_lowest_atom(matched_atoms)
-        vm = self.find_vm("", low)
-        if vm:
-            return vm
-        else:
-            raise Exception("Couldn't find suitable VM. Possible invalid dependency string.")
+        # no match in preferences, find anything we have
+        for atom in matched_atoms:
+            vm = self.find_vm("", atom)
+            if vm:
+                return vm
+
+        # nothing found
+        raise Exception("Couldn't find suitable VM. Possible invalid dependency string.")
 
     def find_vm(self, vm, atom):
         vm_list = EnvironmentManager().find_vm(vm)