changeset 3212:fea96d37fc43

Introduce conflicts, to enable saner solution than cross-prefix hack.
author Jan Nieuwenhuizen <janneke@gnu.org>
date Wed, 18 Apr 2007 21:13:01 +0200
parents 5c30b3109df5
children 6087406ff8f4
files gub-builder.py lib/gub.py
diffstat 2 files changed, 18 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/gub-builder.py	Wed Apr 18 21:12:18 2007 +0200
+++ b/gub-builder.py	Wed Apr 18 21:13:01 2007 +0200
@@ -258,6 +258,9 @@
         for p in spec.get_packages ():
             name = p.name ()
             if not manager.is_installed (name):
+                if spec.get_conflict_dict ().has_key (name):
+                    for c in spec.get_conflict_dict ()[name].split ():
+                        manager.uninstall (c)
                 manager.unregister_package_dict (p.name ())
                 manager.register_package_dict (p.dict ())
                 manager.install_package (p.name ())
--- a/lib/gub.py	Wed Apr 18 21:12:18 2007 +0200
+++ b/lib/gub.py	Wed Apr 18 21:13:01 2007 +0200
@@ -18,23 +18,19 @@
         self._os_interface = os_interface
         self._file_specs = []
         self._dependencies = []
+        self._conflicts = []
         
     def set_dict (self, dict, sub_name):
         self._dict = dict.copy ()
         self._dict['sub_name'] = sub_name
-        
         if sub_name:
             sub_name = '-' + sub_name
-
         s = ('%(name)s' % dict) + sub_name
-
         self._dict['split_name'] = s
-
         self._dict['split_ball'] = ('%(gub_uploads)s/%(split_name)s%(ball_suffix)s.%(platform)s.gup') % self._dict
         self._dict['split_hdr'] = ('%(gub_uploads)s/%(split_name)s%(vc_branch_suffix)s.%(platform)s.hdr') % self._dict
-
-        deps =  ';'.join (self._dependencies)
-        self._dict['dependencies_string'] = deps
+        self._dict['conflicts_string'] = ';'.join (self._conflicts)
+        self._dict['dependencies_string'] = ';'.join (self._dependencies)
         
     def expand (self, s):
         return s % self._dict
@@ -103,9 +99,12 @@
     def get_repodir (self):
         return self.settings.downloads + '/' + self.name ()
     
+    def get_conflict_dict (self):
+        """subpackage -> list of confict dict."""
+        return {'': [], 'devel': [], 'doc': [], 'runtime': []}
+  
     def get_dependency_dict (self):
         """subpackage -> list of dependency dict."""
-        
         # FIMXE: '' always depends on runtime?
         return {'': [], 'devel': [], 'doc': [], 'runtime': []}
   
@@ -243,7 +242,7 @@
             ## distcc during configure.
             c = 'DISTCC_HOSTS="%s" %s' % (self.settings.native_distcc_hosts, c)
             c = 'PATH="%(native_distcc_bindir)s:$PATH" ' + c
-        elif self.settings.cpu_count_str <> '1':
+        elif self.settings.cpu_count_str != '1':
             job_spec += ' -j%s ' % self.settings.cpu_count_str
 
         c += job_spec
@@ -487,6 +486,7 @@
 
         ps = []
 
+        conflict_dict = self.get_conflict_dict ()
         dep_dict = self.get_dependency_dict ()
         descr_dict = self.description_dict ()
         category_dict = self.category_dict ()
@@ -501,11 +501,14 @@
             p._file_specs = filespecs
             p.set_dict (self.get_substitution_dict (), sub)
 
+            conflict_str = ';'.join (conflict_dict.get (sub, []))
+            if p._dict.has_key ('conflicts_string'):
+                conflict_str = p._dict['conflicts_string'] + ';' + conflict_str
+            p._dict['conflicts_string'] = conflict_str
+
             dep_str = ';'.join (dep_dict.get (sub, []))
             if p._dict.has_key ('dependencies_string'):
-                dep_str =  p._dict['dependencies_string'] + ';' + dep_str
-
-
+                dep_str = p._dict['dependencies_string'] + ';' + dep_str
             p._dict['dependencies_string'] = dep_str
 
 	    ## FIXME make generic: use cross.get_subpackage_dict_methods () or similar.