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)