[Xfce4-commits] r23064 - in installit/trunk: . backends components data data/pixmaps data/ui i18n i18n/po tools ui

Jannis Pohlmann jannis at xfce.org
Sun Sep 3 16:38:40 UTC 2006


Author: jannis
Date: 2006-09-03 16:38:19 +0000 (Sun, 03 Sep 2006)
New Revision: 23064

Added:
   installit/trunk/data/pixmaps/
   installit/trunk/data/pixmaps/i2t-large.png
   installit/trunk/data/pixmaps/i2t-old.png
   installit/trunk/data/pixmaps/i2t.png
   installit/trunk/data/pixmaps/i2t.svg
   installit/trunk/data/pixmaps/initial.png
   installit/trunk/data/pixmaps/package-available.png
   installit/trunk/data/pixmaps/package-install.png
   installit/trunk/data/pixmaps/package-installed.png
   installit/trunk/data/pixmaps/package-reinstall.png
   installit/trunk/data/pixmaps/package-remove.png
   installit/trunk/data/pixmaps/system-software-update.png
   installit/trunk/data/ui/
   installit/trunk/data/ui/main-window.ui
   installit/trunk/tools/lookup.py
Removed:
   installit/trunk/tmp-cmd.py
   installit/trunk/ui/pixmaps/
   installit/trunk/ui/xml/
Modified:
   installit/trunk/ChangeLog
   installit/trunk/backends/Source.py
   installit/trunk/components/packages.py
   installit/trunk/i18n/__init__.py
   installit/trunk/i18n/po/POTFILES.in
   installit/trunk/i18n/po/de.po
   installit/trunk/i18n/po/i2t.pot
   installit/trunk/i2t
   installit/trunk/setup.py
   installit/trunk/tools/__init__.py
   installit/trunk/tools/env.py
   installit/trunk/tools/pkgconfig.py
   installit/trunk/tools/shell.py
   installit/trunk/ui/initial.py
   installit/trunk/ui/main.py
   installit/trunk/ui/packages.py
   installit/trunk/ui/tasks.py
Log:
	* tools/pkgconfig.py: Add i18n support.
	* tools/env.py: Add support for list of compilers. Search for the first
	  available compiler and use it (as a fallback to $CC).
	  Improve linking (add optional path argument to hasLibrary and link
	  methods; also search in $PATH/../lib/).
	* tools/lookup.py, setup.py, ui/main.py, ui/initial.py, ui/packages.py,
	  ui/tasks.py, i18n/__init__.py: Add lookup class which searches local 
	  as well as system paths for resources such as icons, translations 
	  etc. Use this class for all resource lookups.
	* tools/shell.py: Add option to pass custom environment variables to the
	  Command class. 
	* components/packages.py: Remove UnresolvedLibrary and UnresolvedProgram
	  classes and add path information and self.resolved variable instead.
	  Add isResolved and some environment variable methods (like
	  getLinkerFlags) to both classes. Improve dependency resolving.
	* backends/Source.py: Re-implement manual program and library resolving.
	  It still looks ugly as hell, but that's something for later.
	* setup.py: Improve build, add package data information so all
	  translations, images, UI descriptions and other resources are
	  installed into the system. We're almost done!
	* i18n/po/i2t.po, i18n/po/de.po, i18n/po/POTFILES.in: Merge new strings, 
	  update German translations.

Modified: installit/trunk/ChangeLog
===================================================================
--- installit/trunk/ChangeLog	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/ChangeLog	2006-09-03 16:38:19 UTC (rev 23064)
@@ -1,3 +1,28 @@
+2006-09-03	Jannis Pohlmann <jannis at xfce.org>
+
+	* tools/pkgconfig.py: Add i18n support.
+	* tools/env.py: Add support for list of compilers. Search for the first
+	  available compiler and use it (as a fallback to $CC).
+	  Improve linking (add optional path argument to hasLibrary and link
+	  methods; also search in $PATH/../lib/).
+	* tools/lookup.py, setup.py, ui/main.py, ui/initial.py, ui/packages.py,
+	  ui/tasks.py, i18n/__init__.py: Add lookup class which searches local 
+	  as well as system paths for resources such as icons, translations 
+	  etc. Use this class for all resource lookups.
+	* tools/shell.py: Add option to pass custom environment variables to the
+	  Command class. 
+	* components/packages.py: Remove UnresolvedLibrary and UnresolvedProgram
+	  classes and add path information and self.resolved variable instead.
+	  Add isResolved and some environment variable methods (like
+	  getLinkerFlags) to both classes. Improve dependency resolving.
+	* backends/Source.py: Re-implement manual program and library resolving.
+	  It still looks ugly as hell, but that's something for later.
+	* setup.py: Improve build, add package data information so all
+	  translations, images, UI descriptions and other resources are
+	  installed into the system. We're almost done!
+	* i18n/po/i2t.po, i18n/po/de.po, i18n/po/POTFILES.in: Merge new strings, 
+	  update German translations.
+
 2006-07-19	Jannis Pohlmann <jannis at xfce.org>
 
 	* components/packages.py: Added methods to return sets of 

Modified: installit/trunk/backends/Source.py
===================================================================
--- installit/trunk/backends/Source.py	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/backends/Source.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -27,6 +27,7 @@
 import gobject
 
 from tools.shell import Command
+from tools.env import Environment
 from components.mirrors import MirrorList
 from components.config import Config
 from components.packages import Program, Library
@@ -80,18 +81,17 @@
 
         # Determine working directory
         directory = path.join(Config.get("TempDir"), package.unpackDir)
-        
+
         # Build configure command
         return Command("./configure %s" % " ".join(options), directory,
-                       ":".join(package.getProgramPaths()))
+            package.getEnvironmentVars())
     
     def getBuildCommand(self, package):
         # Determine working directory
         directory = path.join(Config.get("TempDir"), package.unpackDir)
 
         # Generate build command
-        return Command("make", directory,
-                       ":".join(package.getProgramPaths()))
+        return Command("make", directory, package.getEnvironmentVars())
     
     def getTestInstallCommand(self, package):
         # Determine working directory
@@ -100,16 +100,15 @@
         # Generate temporary installation command
         return Command("make DESTDIR=%s install" 
                 % package.getTempInstallPrefix(), directory,
-                ":".join(package.getProgramPaths()))
+                package.getEnvironmentVars())
 
     def getInstallCommand(self, package):
         # Determine working directory
         directory = path.join(Config.get("TempDir"), package.unpackDir)
 
         # Generate installation command
-        return Command("make install", directory,
-                       ":".join(package.getProgramPaths()))
-    
+        return Command("make install", directory, package.getEnvironmentVars())
+ 
     def writeInstallLog(self, package):
         # Determine log directory
         logDir = MirrorList.getActiveMirror().getLogDir()
@@ -671,6 +670,7 @@
         SourceWizardPage.activate(self, wizard)
 
         wizard.backButton.set_sensitive(True)
+        wizard.forwardButton.set_sensitive(False)
 
         if self.box.get_child():
             self.box.remove(self.box.get_child())
@@ -684,12 +684,12 @@
         self.locations.clear()
         self.statusButtons.clear()
 
-        # Determine unresolved programs
-        self.programs = self.package.getUnresolvedPrograms()
+        # Determine programs this package depends on
+        self.programs = self.package.dependencies.programs
 
         if len(self.programs) > 0:
             # Add description label
-            label = gtk.Label(_("The following programs could not be found:"))
+            label = gtk.Label(_("The following programs are required:"))
             label.set_alignment(0.0, 0.5)
             container.pack_start(label, False, False, 0)
             label.show()
@@ -713,8 +713,12 @@
                 status.connect("clicked", lambda button:
                         self._locateProgram(program))
                 status.set_relief(gtk.RELIEF_NONE)
-                status.set_image(gtk.image_new_from_stock(gtk.STOCK_NO,
+                if program.isResolved():
+                    status.set_image(gtk.image_new_from_stock(gtk.STOCK_YES,
                         gtk.ICON_SIZE_BUTTON))
+                else:
+                    status.set_image(gtk.image_new_from_stock(gtk.STOCK_NO,
+                            gtk.ICON_SIZE_BUTTON))
                 hbox.pack_start(status, False, True, 0)
                 status.show()
 
@@ -728,25 +732,86 @@
                 label.show()
 
                 # Locate manually via file chooser
-                button = gtk.Button(_("Locate manually..."))
-                button.connect("clicked", lambda button:
-                        self._locateProgram(program))
-                button.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND,
-                        gtk.ICON_SIZE_BUTTON))
-                table.attach(button, 1, 2, i, i+1, gtk.SHRINK)
-                button.show()
+                if not program.isResolved():
+                    button = gtk.Button(_("Locate manually..."))
+                    button.connect("clicked", lambda button:
+                            self._locateProgram(program))
+                    button.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND,
+                            gtk.ICON_SIZE_BUTTON))
+                    table.attach(button, 1, 2, i, i+1, gtk.SHRINK)
+                    button.show()
 
-        # Determine unresolved libraries
-        self.libraries = self.package.getUnresolvedLibraries()
+                i += 1
 
+        # Determine libraries this program depends on
+        self.libraries = self.package.dependencies.libraries
+
+        if len(self.libraries) > 0:
+            # Add description label
+            label = gtk.Label(_("The following libraries are required:"))
+            label.set_alignment(0.0, 0.5)
+            container.pack_start(label, False, False, 0)
+            label.show()
+
+            # Add table
+            table = gtk.Table(1, 2)
+            table.set_border_width(6)
+            table.set_col_spacings(12)
+            container.pack_start(table, False, False, 0)
+            table.show()
+
+            i = 0
+
+            for library in self.libraries:
+                hbox = gtk.HBox(False, 0)
+                table.attach(hbox, 0, 1, i, i+1, gtk.SHRINK)
+                hbox.show()
+
+                # Status button
+                status = gtk.Button()
+                status.connect("clicked", lambda button:
+                        self._locateLibrary(library))
+                status.set_relief(gtk.RELIEF_NONE)
+                if library.isResolved():
+                    status.set_image(gtk.image_new_from_stock(gtk.STOCK_YES,
+                            gtk.ICON_SIZE_BUTTON))
+                else:
+                    status.set_image(gtk.image_new_from_stock(gtk.STOCK_NO,
+                            gtk.ICON_SIZE_BUTTON))
+                hbox.pack_start(status, False, True, 0)
+                status.show()
+
+                self.statusButtons[library] = status
+
+                # Library label
+                label = gtk.Label()
+                label.set_markup("<b>%s</b>" % library.name)
+                label.set_alignment(0.0, 0.5)
+                hbox.pack_start(label, False, True, 0)
+                label.show()
         
-        if self.validate():
+                # Locate manually via file chooser
+                if not library.isResolved():
+                    button = gtk.Button(_("Locate manually..."))
+                    button.connect("clicked", lambda button:
+                            self._locateLibrary(library))
+                    button.set_image(gtk.image_new_from_stock(gtk.STOCK_FIND,
+                            gtk.ICON_SIZE_BUTTON))
+                    table.attach(button, 1, 2, i, i+1, gtk.SHRINK)
+                    button.show()
+
+                i += 1
+        
+        if len(self.programs) == 0 and len(self.libraries) == 0:
             self.emit("page-success")
 
+        if self.validate():
+            wizard.forwardButton.set_sensitive(True)
+
     def validate(self):
         # We're done when there are no missing depdendencies left
-        if len(self.programs) == 0 and len(self.libraries) == 0:
-            return True
+        return len(self.package.getUnresolvedPrograms()) == 0 and \
+            len(self.package.getUnresolvedLibraries()) == 0
 
     def _locateProgram(self, program):
         if self.locations.has_key(program):
@@ -766,15 +831,7 @@
                 self.statusButtons[program].set_image(image)
                 
                 # Create new (resolved) program object
-                newProgram = Program(program.name,
-                                     self.fileChooser.get_filename())
-                
-                # Replace UnresolvedProgram with Program
-                self.package.dependencies.programs.remove(program)
-                self.package.dependencies.programs.add(newProgram)
-                
-                # Remove program from unresolved dependencies
-                self.programs.remove(program)
+                program.path = self.fileChooser.get_filename()
             else:
                 # Update status icon
                 image = gtk.image_new_from_stock(gtk.STOCK_NO,
@@ -783,8 +840,38 @@
         
         # Hide the file chooser again
         self.fileChooser.hide()
+
+        if self.validate():
+            self.wizard.forwardButton.set_sensitive(True)
     
+    def _locateLibrary(self, library):
+        if self.locations.has_key(library):
+            self.fileChooser.set_filename(self.locations[library])
 
+        if self.fileChooser.run() == gtk.RESPONSE_ACCEPT:
+            self.locations[library] = self.fileChooser.get_filename()
+
+            # Try to link with library located in this path
+            if Environment.hasLibrary(library, self.fileChooser.get_filename()):
+                library.path = self.fileChooser.get_filename()
+                library.resolved = True
+
+                # Update status icon
+                image = gtk.image_new_from_stock(gtk.STOCK_YES,
+                        gtk.ICON_SIZE_BUTTON)
+                self.statusButtons[library].set_image(image)
+            else:
+                # Update status icon
+                image = gtk.image_new_from_stock(gtk.STOCK_NO,
+                        gtk.ICON_SIZE_BUTTON)
+                self.statusButtons[library].set_image(image)
+
+        # Hide the file chooser again
+        self.fileChooser.hide()
+
+        if self.validate():
+            self.wizard.forwardButton.set_sensitive(True)
+
 class BuildPage(SourceWizardPage):
 
     def __init__(self, wizard, package):

Modified: installit/trunk/components/packages.py
===================================================================
--- installit/trunk/components/packages.py	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/components/packages.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -76,20 +76,6 @@
         self.install = None
 
 
-class UnresolvedLibrary:
-
-    def __init__(self, name, version, backend=None):
-        self.name = name
-        self.version = version
-        self.backend = backend
-
-
-class UnresolvedProgram:
-
-    def __init__(self, name):
-        self.name = name
-
-
 class Dependencies:
 
     def __init__(self):
@@ -135,7 +121,7 @@
         results = set()
 
         for dep in self.dependencies.programs:
-            if isinstance(dep, UnresolvedProgram):
+            if not dep.isResolved():
                 results.add(dep)
 
         return results
@@ -144,20 +130,41 @@
         results = set()
         
         for dep in self.dependencies.libraries:
-            if isinstance(dep, UnresolvedLibrary):
+            if not dep.isResolved():
                 results.add(dep)
 
         return results
     
-    def getProgramPaths(self):
+    def getPath(self):
         paths = set()
         
         for program in self.dependencies.programs:
             paths.add(program.path)
-            
-        return paths
 
+        return ":" + ":".join(paths)
 
+    def getLinkerFlags(self):
+        flags = set()
+
+        for library in self.dependencies.libraries:
+            if library.path:
+                flags.add("-L%s" % library.path)
+
+            if library.name:
+                flags.add("-l%s" % library.name)
+
+        return " " + " ".join(flags)
+
+    def getCompilerFlags(self):
+        return ""
+
+    def getEnvironmentVars(self):
+        vars = dict()
+        vars["PATH"] = self.getPath()
+        vars["CFLAGS"] = self.getCompilerFlags()
+        vars["LDFLAGS"] = self.getLinkerFlags()
+        return vars
+
 # Register Package to GObject type system
 gobject.type_register(Package)
 
@@ -178,18 +185,34 @@
 
 class Program:
     
-    def __init__(self, name, path):
+    def __init__(self, name, path=None, resolved=False):
         self.name = name
         self.path = path
+        self.resolved = resolved
 
+    def isResolved(self):
+        if self.path:
+            dirExists = os.path.isdir(self.path)
+            fileExists = os.path.isfile(os.path.join(self.path, self.name))
+        else:
+            dirExists = False
+            fileExists = False
 
+        return self.resolved or (dirExists and fileExists)
+
+
 class Library:
 
-    def __init__(self, name, path):
+    def __init__(self, name, version, path=None, resolved=False):
         self.name = name
+        self.version = version
         self.path = path
+        self.resolved = resolved
 
+    def isResolved(self):
+        return self.resolved or (self.path and os.path.isdir(self.path))
 
+
 class ProgramNotFoundError(Exception):
     pass
 
@@ -559,7 +582,7 @@
 
         for location in paths:
             if os.access(path.join(location, name), os.X_OK):
-                return Program(name, path.join(location, name))
+                return Program(name, path.join(location, name), True)
         
         raise ProgramNotFoundError(name)
 
@@ -573,21 +596,14 @@
                 pkg = self.getPackage(dep["name"], dep["version"], 
                         package.backend, True)
             except PackageNotFoundError, e:
+                pkg = Library(dep["name"], dep["version"])
                 try:
-                    pkg = PkgConfig.resolve(dep["name"], dep["version"])
+                    PkgConfig.resolve(dep["name"], dep["version"])
+                    pkg.resolved = True
                 except PkgConfigModuleNotFound:
                     if Config.get("UseLibrarySearch"):
-                        ## TODO: Replace the line below with a call of the
-                        ## Library lookup class
-                        if Environment.hasLibrary(dep["name"], dep["version"]):
-                            return Library(dep["name"], dep["version"])
-                        else:
-                            return UnresolvedLibrary(dep["name"],
-                                    dep["version"])
-                    else:
-                        # Mark this dependency as unresolved and try resolving
-                        # it manually during installation.
-                        pkg = UnresolvedLibrary(dep["name"], dep["version"])
+                        if Environment.hasLibrary(library):
+                            pkg.resolved = True
 
             newDeps.add(pkg)
 
@@ -601,7 +617,7 @@
             try:
                 pkg = self._resolveProgram(dep["name"])
             except ProgramNotFoundError, e:
-                pkg = UnresolvedProgram(dep["name"])
+                pkg = Program(dep["name"], None, False)
 
             newDeps.add(pkg)
 

Added: installit/trunk/data/pixmaps/i2t-large.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/i2t-large.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/i2t-old.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/i2t-old.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/i2t.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/i2t.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/i2t.svg
===================================================================
--- installit/trunk/data/pixmaps/i2t.svg	                        (rev 0)
+++ installit/trunk/data/pixmaps/i2t.svg	2006-09-03 16:38:19 UTC (rev 23064)
@@ -0,0 +1,927 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://web.resource.org/cc/"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="600pt"
+   height="600pt"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.43"
+   sodipodi:docbase="/home/jannis/devel/xfce/installit/branches/experimental/ui/pixmaps"
+   sodipodi:docname="i2t.svg"
+   inkscape:export-filename="/home/jannis/devel/xfce/installit/branches/experimental/ui/pixmaps/i2t-selfmade.png"
+   inkscape:export-xdpi="96.07"
+   inkscape:export-ydpi="96.07"
+   version="1.0">
+  <defs
+     id="defs4">
+    <linearGradient
+       id="linearGradient25224">
+      <stop
+         id="stop25226"
+         offset="0"
+         style="stop-color:#fffbff;stop-opacity:0;" />
+      <stop
+         id="stop25228"
+         offset="1"
+         style="stop-color:#fffbff;stop-opacity:0.36548224;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient22589">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.49746192;"
+         offset="0"
+         id="stop22591" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop22593" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient15418">
+      <stop
+         id="stop15420"
+         offset="0"
+         style="stop-color:#1796ff;stop-opacity:1;" />
+      <stop
+         id="stop15422"
+         offset="1"
+         style="stop-color:#c8c8ff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12793">
+      <stop
+         id="stop12795"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0.49746192;" />
+      <stop
+         id="stop12797"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11900">
+      <stop
+         style="stop-color:#1796ff;stop-opacity:1;"
+         offset="0"
+         id="stop11902" />
+      <stop
+         style="stop-color:#dcdcff;stop-opacity:1;"
+         offset="1"
+         id="stop11904" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11900"
+       id="linearGradient19964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.97618,0,0,0.942681,-171.919,45.70037)"
+       x1="381.11731"
+       y1="473.29172"
+       x2="349.48495"
+       y2="454.65271" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12793"
+       id="linearGradient19966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.998623,0,0,0.980266,-180.3311,27.67028)"
+       x1="358.35162"
+       y1="492.15802"
+       x2="353.04834"
+       y2="484.18497" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient25224"
+       id="linearGradient25222"
+       x1="178.66624"
+       y1="489.97043"
+       x2="211.86824"
+       y2="489.97043"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-8.029081,-4.713411e-2)" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="313.934"
+     inkscape:cy="428.62305"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1015"
+     inkscape:window-height="674"
+     inkscape:window-x="0"
+     inkscape:window-y="30"
+     gridspacingx="0.01px"
+     gridspacingy="0.01px"
+     gridtolerance="0.01px"
+     guidetolerance="0.01px"
+     showgrid="false" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Ebene 1"
+     inkscape:groupmode="layer"
+     id="layer1">
+    <g
+       id="g19903"
+       transform="matrix(12.74469,0,0,13.19758,-2111.912,-6098.982)">
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         d="M 215.51854,498.73952 L 215.51955,474.59873 C 215.51955,473.3565 214.43097,472.31751 213.12948,472.31751 L 177.15588,472.31751 C 175.85439,472.31751 174.79646,473.35649 174.79646,474.59873 L 175.06552,499.02442 L 166.59961,508.69649 L 223.66826,508.69649 L 215.51854,498.73952 z "
+         style="fill:#f0f0f0;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.43700004;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect2223" />
+      <rect
+         ry="1.0224533"
+         rx="0.99228549"
+         y="474.84753"
+         x="177.79449"
+         height="21.677744"
+         width="34.850262"
+         id="rect6626"
+         style="opacity:1;fill:url(#linearGradient19964);fill-opacity:1;stroke:#000000;stroke-width:0.38553003;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         style="fill:url(#linearGradient25222);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 178.72172,496.19853 C 189.79115,496.16289 205.63352,496.10853 211.64631,496.19889 C 190.02885,490.88409 186.58456,472.60708 178.72172,496.19853 z "
+         id="path21714"
+         sodipodi:nodetypes="ccc" />
+      <path
+         sodipodi:nodetypes="czzcsc"
+         id="path11910"
+         d="M 178.31268,495.96242 L 210.76487,496.20474 C 212.28548,496.21609 212.36196,496.35136 212.36196,494.77588 L 212.36195,476.19646 C 212.36195,476.19646 211.50167,483.71625 195.5827,484.13098 C 187.13285,484.3528 186.582,491.68116 178.31268,495.96242 z "
+         style="fill:url(#linearGradient19966);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         y="500.29074"
+         x="179.67856"
+         height="1"
+         width="1"
+         id="rect18043"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18918"
+         width="1"
+         height="1"
+         x="181.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="183.67856"
+         height="1"
+         width="1"
+         id="rect18920"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18922"
+         width="1"
+         height="1"
+         x="185.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="187.67856"
+         height="1"
+         width="1"
+         id="rect18924"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18926"
+         width="1"
+         height="1"
+         x="189.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="191.67856"
+         height="1"
+         width="1"
+         id="rect18928"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18930"
+         width="1"
+         height="1"
+         x="193.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="195.67856"
+         height="1"
+         width="1"
+         id="rect18932"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18934"
+         width="1"
+         height="1"
+         x="197.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="199.67856"
+         height="1"
+         width="1"
+         id="rect18936"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18938"
+         width="1"
+         height="1"
+         x="201.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="203.67856"
+         height="1"
+         width="1"
+         id="rect18940"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18942"
+         width="1"
+         height="1"
+         x="205.67856"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="207.67856"
+         height="1"
+         width="1"
+         id="rect18944"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18946"
+         width="1"
+         height="1"
+         x="209.67856"
+         y="500.29074" />
+      <rect
+         y="502.29074"
+         x="211.67856"
+         height="1"
+         width="1"
+         id="rect18948"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18950"
+         width="1"
+         height="1"
+         x="209.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="207.67856"
+         height="1"
+         width="1"
+         id="rect18952"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18954"
+         width="1"
+         height="1"
+         x="205.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="203.67856"
+         height="1"
+         width="1"
+         id="rect18956"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18958"
+         width="1"
+         height="1"
+         x="201.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="199.67856"
+         height="1"
+         width="1"
+         id="rect18960"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18962"
+         width="1"
+         height="1"
+         x="197.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="195.67856"
+         height="1"
+         width="1"
+         id="rect18964"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18966"
+         width="1"
+         height="1"
+         x="193.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="191.67856"
+         height="1"
+         width="1"
+         id="rect18968"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18970"
+         width="1"
+         height="1"
+         x="189.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="187.67856"
+         height="1"
+         width="1"
+         id="rect18972"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18974"
+         width="1"
+         height="1"
+         x="185.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="183.67856"
+         height="1"
+         width="1"
+         id="rect18976"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18978"
+         width="1"
+         height="1"
+         x="181.67856"
+         y="502.29074" />
+      <rect
+         y="502.29074"
+         x="179.67856"
+         height="1"
+         width="1"
+         id="rect18980"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18982"
+         width="1"
+         height="1"
+         x="177.67856"
+         y="502.29074" />
+      <rect
+         y="504.29074"
+         x="175.67856"
+         height="1"
+         width="1"
+         id="rect18984"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18986"
+         width="1"
+         height="1"
+         x="177.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="179.67856"
+         height="1"
+         width="1"
+         id="rect18988"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18990"
+         width="1"
+         height="1"
+         x="181.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="183.67856"
+         height="1"
+         width="1"
+         id="rect18992"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18994"
+         width="1"
+         height="1"
+         x="185.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="187.67856"
+         height="1"
+         width="1"
+         id="rect18996"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect18998"
+         width="1"
+         height="1"
+         x="189.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="191.67856"
+         height="1"
+         width="1"
+         id="rect19000"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19002"
+         width="1"
+         height="1"
+         x="193.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="195.67856"
+         height="1"
+         width="1"
+         id="rect19004"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19006"
+         width="1"
+         height="1"
+         x="197.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="199.67856"
+         height="1"
+         width="1"
+         id="rect19008"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19010"
+         width="1"
+         height="1"
+         x="201.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="203.67856"
+         height="1"
+         width="1"
+         id="rect19012"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19014"
+         width="1"
+         height="1"
+         x="205.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="205.67856"
+         height="1"
+         width="1"
+         id="rect19016"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19018"
+         width="1"
+         height="1"
+         x="207.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="209.67856"
+         height="1"
+         width="1"
+         id="rect19020"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19022"
+         width="1"
+         height="1"
+         x="209.67856"
+         y="504.29074" />
+      <rect
+         y="504.29074"
+         x="211.67856"
+         height="1"
+         width="1"
+         id="rect19024"
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#505050;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect19026"
+         width="1"
+         height="1"
+         x="213.67856"
+         y="504.29074" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect25230"
+         width="1.0217898"
+         height="1"
+         x="180.67451"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="182.6577"
+         height="1"
+         width="1.0217898"
+         id="rect26109"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26111"
+         width="1.0217898"
+         height="1"
+         x="184.66399"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="188.66116"
+         height="1"
+         width="1.0217898"
+         id="rect26113"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26115"
+         width="1.0217898"
+         height="1"
+         x="190.65974"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="192.65833"
+         height="1"
+         width="1.0680128"
+         id="rect26117"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26119"
+         width="1.0217898"
+         height="1"
+         x="192.65833"
+         y="502.28772" />
+      <rect
+         y="502.28772"
+         x="194.65691"
+         height="1"
+         width="1.0217898"
+         id="rect26121"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26123"
+         width="1.0217898"
+         height="1"
+         x="196.65549"
+         y="502.28772" />
+      <rect
+         y="500.29074"
+         x="196.65549"
+         height="1"
+         width="1.0217898"
+         id="rect26125"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26127"
+         width="1.0217898"
+         height="1"
+         x="198.66177"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="200.66035"
+         height="1"
+         width="1.0217898"
+         id="rect26129"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26131"
+         width="1.0217898"
+         height="1"
+         x="202.65123"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="204.65752"
+         height="1"
+         width="1.0217898"
+         id="rect26133"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26135"
+         width="1.0217898"
+         height="1"
+         x="206.67921"
+         y="500.29074" />
+      <rect
+         y="500.29074"
+         x="208.6624"
+         height="1"
+         width="1.0217898"
+         id="rect26137"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26139"
+         width="1.0217898"
+         height="1"
+         x="194.65691"
+         y="500.29074" />
+      <rect
+         y="502.28772"
+         x="190.67178"
+         height="1"
+         width="1.0217898"
+         id="rect26141"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26143"
+         width="1.0217898"
+         height="1"
+         x="188.65594"
+         y="502.28772" />
+      <rect
+         y="502.28772"
+         x="186.65475"
+         height="1"
+         width="1.0217898"
+         id="rect26145"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26147"
+         width="1.0217898"
+         height="1"
+         x="184.66333"
+         y="502.29242" />
+      <rect
+         y="502.29242"
+         x="182.66702"
+         height="1"
+         width="1.0217898"
+         id="rect26149"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26151"
+         width="1.0217898"
+         height="1"
+         x="180.65607"
+         y="502.29242" />
+      <rect
+         y="502.29242"
+         x="178.67441"
+         height="1"
+         width="1.0217898"
+         id="rect26153"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26155"
+         width="1.0217898"
+         height="1"
+         x="178.65976"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="176.65857"
+         height="1"
+         width="1.0217898"
+         id="rect26157"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26159"
+         width="1.0217898"
+         height="1"
+         x="180.66095"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="182.66702"
+         height="1"
+         width="1.0217898"
+         id="rect26161"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26163"
+         width="1.0217898"
+         height="1"
+         x="184.65356"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="186.66452"
+         height="1"
+         width="1.0217898"
+         id="rect26165"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26167"
+         width="1.0217898"
+         height="1"
+         x="188.67059"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="190.67178"
+         height="1"
+         width="1.0217898"
+         id="rect26169"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26171"
+         width="1.0217898"
+         height="1"
+         x="192.65833"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="194.65952"
+         height="1"
+         width="1.0217898"
+         id="rect26173"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26175"
+         width="1.0217898"
+         height="1"
+         x="196.66063"
+         y="504.29095" />
+      <rect
+         y="504.29059"
+         x="198.6619"
+         height="1"
+         width="1.0217898"
+         id="rect26177"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26179"
+         width="1.0217898"
+         height="1"
+         x="200.6582"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="202.65939"
+         height="1"
+         width="1.0217898"
+         id="rect26181"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26183"
+         width="1.0217898"
+         height="1"
+         x="202.67404"
+         y="502.29242" />
+      <rect
+         y="502.29242"
+         x="200.66797"
+         height="1"
+         width="1.0217898"
+         id="rect26185"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26187"
+         width="1.0217898"
+         height="1"
+         x="198.67157"
+         y="502.28772" />
+      <rect
+         y="502.29242"
+         x="204.66058"
+         height="1"
+         width="1.0217898"
+         id="rect26189"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26191"
+         width="1.0217898"
+         height="1"
+         x="206.67154"
+         y="502.29242" />
+      <rect
+         y="502.28772"
+         x="208.66785"
+         height="1"
+         width="1.0217898"
+         id="rect26193"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26195"
+         width="1.0217898"
+         height="1"
+         x="210.66904"
+         y="502.29242" />
+      <rect
+         y="504.29059"
+         x="210.65927"
+         height="1"
+         width="1.0217898"
+         id="rect26197"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26199"
+         width="1.0217898"
+         height="1"
+         x="212.66534"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="208.66785"
+         height="1"
+         width="1.0217898"
+         id="rect26201"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect26203"
+         width="1.0217898"
+         height="1"
+         x="206.66177"
+         y="504.29059" />
+      <rect
+         y="504.29059"
+         x="204.66058"
+         height="1"
+         width="1.0217898"
+         id="rect26205"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="500.29074"
+         x="186.65617"
+         height="1"
+         width="1.0217898"
+         id="rect26207"
+         style="opacity:1;fill:#b4b4b4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+  </g>
+</svg>

Added: installit/trunk/data/pixmaps/initial.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/initial.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/package-available.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/package-available.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/package-install.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/package-install.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/package-installed.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/package-installed.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/package-reinstall.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/package-reinstall.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/package-remove.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/package-remove.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/pixmaps/system-software-update.png
===================================================================
(Binary files differ)


Property changes on: installit/trunk/data/pixmaps/system-software-update.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: installit/trunk/data/ui/main-window.ui
===================================================================
--- installit/trunk/data/ui/main-window.ui	                        (rev 0)
+++ installit/trunk/data/ui/main-window.ui	2006-09-03 16:38:19 UTC (rev 23064)
@@ -0,0 +1,67 @@
+<!--
+  
+    $Id: main-window.ui 20466 2006-03-17 13:55:50Z jannis $
+    
+    vi:set ts=4 sw=4 sts=4 et ai nocindent:
+    
+    This program is free software; you can redistribute it and/or 
+    modify it under the terms of the GNU General Public License as 
+    published by the Free Software Foundation; either version 2 of the 
+    License, or (at your option) any later version.
+    
+    This program is distributed in the hope that it will be useful, but 
+    WITHOUT ANY WARRANTY; without even the implied warranty of 
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+    General Public License for more details.
+    
+    You should have received a copy of the GNU General Public License 
+    along with this program; if not, write to the Free Software 
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
+    MA 02111-1307 USA
+
+-->
+<ui>
+    <menubar name="main-menu">
+        <menu action="file-menu">
+            <menuitem action="quit" />
+        </menu>
+        <menu action="edit-menu">
+            <menuitem action="preferences" />
+        </menu>
+        <menu action="actions-menu">
+            <menuitem action="install-package" />
+            <menuitem action="remove-package" />
+            <menuitem action="revert-package" />
+            <menuitem action="revert-all" />
+            <separator />
+            <menuitem action="apply-changes" />
+            <separator />
+            <menuitem action="select-mirror" />
+            <menuitem action="update-packages" />
+        </menu>
+        <menu action="view-menu">
+            <menuitem action="view-toolbar" />
+        </menu>
+        <menu action="help-menu">
+            <menuitem action="help" />
+            <menuitem action="about" />
+        </menu>
+    </menubar>
+    <toolbar name="main-toolbar">
+        <toolitem action="install-package" />
+        <toolitem action="remove-package" />
+        <toolitem action="revert-package" />
+        <separator />
+        <toolitem action="apply-changes" />
+        <separator />
+        <toolitem action="update-packages" />
+    </toolbar>
+    <popup name="package-context-menu">
+        <menuitem action="install-package" />
+        <menuitem action="remove-package" />
+        <menuitem action="revert-package" />
+        <menuitem action="revert-all" />
+        <separator />
+        <menuitem action="apply-changes" />
+    </popup>
+</ui>

Modified: installit/trunk/i18n/__init__.py
===================================================================
--- installit/trunk/i18n/__init__.py	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/i18n/__init__.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -22,6 +22,8 @@
 import locale
 from gettext import translation, NullTranslations
 
+from tools.lookup import Lookup
+
 locale.setlocale(locale.LC_ALL, "")
 
 _translation = None
@@ -31,7 +33,7 @@
 
     if not _translation:
         try:
-            _translation = translation("i2t", path.join("i18n", "locale"))
+            _translation = translation("i2t", Lookup.locale())
         except IOError:
             _translation = NullTranslations()
 

Modified: installit/trunk/i18n/po/POTFILES.in
===================================================================
--- installit/trunk/i18n/po/POTFILES.in	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/i18n/po/POTFILES.in	2006-09-03 16:38:19 UTC (rev 23064)
@@ -1,3 +1,4 @@
+..//setup.py
 ..//backends/Source.py
 ..//backends/DPKG.py
 ..//components/backends.py
@@ -4,6 +5,7 @@
 ..//components/packages.py
 ..//components/config.py
 ..//components/mirrors.py
+..//ui/tasks.py
 ..//ui/main.py
 ..//ui/initial.py
 ..//ui/categories.py
@@ -11,8 +13,6 @@
 ..//ui/download.py
 ..//ui/packages.py
 ..//ui/extensions.py
-..//ui/tasks.py
-..//setup.py
 ..//standards/xdg.py
 ..//tools/download.py
 ..//tools/logger.py
@@ -21,3 +21,4 @@
 ..//tools/shell.py
 ..//tools/env.py
 ..//tools/pkgconfig.py
+..//tools/lookup.py

Modified: installit/trunk/i18n/po/de.po
===================================================================
--- installit/trunk/i18n/po/de.po	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/i18n/po/de.po	2006-09-03 16:38:19 UTC (rev 23064)
@@ -7,8 +7,8 @@
 msgstr ""
 "Project-Id-Version: InstallIt 0.1beta1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-07-12 00:04+0200\n"
-"PO-Revision-Date: 2006-07-12 00:07+0100\n"
+"POT-Creation-Date: 2006-09-03 18:33+0200\n"
+"PO-Revision-Date: 2006-09-03 18:35+0100\n"
 "Last-Translator: Jannis Pohlmann <jannis at xfce.org>\n"
 "Language-Team: German <de at li.org>\n"
 "MIME-Version: 1.0\n"
@@ -18,476 +18,589 @@
 "X-Poedit-Country: GERMANY\n"
 "X-Poedit-SourceCharset: utf-8\n"
 
-#: ../..//backends/Source.py:209
+#: ../..//setup.py:42
+msgid "You need at least PyGTK 2.6 to run InstallIt (i2t)"
+msgstr "Sie benötigen mindestens PyGTK 2.6 um InstallIt (i2t) nutzen zu können."
+
+#: ../..//setup.py:52
+msgid "The program 'libtool' could not been found in $PATH."
+msgstr "Das Programm 'libtool' konnte nicht in $PATH gefunden werden."
+
+#: ../..//setup.py:67
+msgid "Graphical source-based package manager and installer"
+msgstr "Grafisches, quellenbasiertes Paketverwaltungs- und Installationsprogramm"
+
+#: ../..//setup.py:68
+msgid "InstallIt (i2t) is a source-based package management solution"
+msgstr "InstallIt (i2t) ist eine quellenbasierte Paketverwaltungslösung"
+
+#: ../..//backends/Source.py:213
+#: ../..//build/lib/i2t/backends/Source.py:213
 msgid "Removing Previous Installation"
 msgstr "Entferne aktuelle Installation"
 
-#: ../..//backends/Source.py:333
+#: ../..//backends/Source.py:337
+#: ../..//build/lib/i2t/backends/Source.py:337
 #, python-format
 msgid "Select installation prefix for %s"
 msgstr "Wähle Zielverzeichnis für %s"
 
-#: ../..//backends/Source.py:341
+#: ../..//backends/Source.py:345
+#: ../..//build/lib/i2t/backends/Source.py:345
 #, python-format
-msgid ""
-"Please specify the installation prefix <b>%(name)s</b> should be installed "
-"to. You need write permissions for this directory."
-msgstr ""
-"Bitte geben Sie das Zielverzeichnis an, in das <b>%(name)s</b> installiert "
-"werden soll. Sie benötigen für dieses Verzeichnis Schreibrechte."
+msgid "Please specify the installation prefix <b>%(name)s</b> should be installed to. You need write permissions for this directory."
+msgstr "Bitte geben Sie das Zielverzeichnis an, in das <b>%(name)s</b> installiert werden soll. Sie benötigen für dieses Verzeichnis Schreibrechte."
 
 #. File chooser dialog
-#: ../..//backends/Source.py:351 ../..//ui/main.py:82
+#: ../..//backends/Source.py:355
+#: ../..//ui/main.py:82
+#: ../..//build/lib/i2t/backends/Source.py:355
+#: ../..//build/lib/i2t/ui/main.py:82
 msgid "Installation Prefix"
 msgstr "Zielverzeichnis"
 
-#: ../..//backends/Source.py:378 ../..//ui/initial.py:306
+#: ../..//backends/Source.py:382
+#: ../..//ui/initial.py:307
+#: ../..//build/lib/i2t/backends/Source.py:382
+#: ../..//build/lib/i2t/ui/initial.py:307
 #, python-format
 msgid "Directory %s is not writable."
 msgstr "Verzeichnis %s ist schreibgeschützt."
 
-#: ../..//backends/Source.py:390
+#: ../..//backends/Source.py:394
+#: ../..//build/lib/i2t/backends/Source.py:394
 #, python-format
 msgid "Select %(package)s features"
 msgstr "Wähle Features für %(package)s"
 
-#: ../..//backends/Source.py:434
+#: ../..//backends/Source.py:438
+#: ../..//build/lib/i2t/backends/Source.py:438
 #, python-format
 msgid "Extracting %s"
 msgstr "Entpacke %s"
 
-#: ../..//backends/Source.py:554
+#: ../..//backends/Source.py:558
+#: ../..//build/lib/i2t/backends/Source.py:558
 #, python-format
 msgid "Preparing %s"
 msgstr "Bereite %s vor"
 
-#: ../..//backends/Source.py:630
+#: ../..//backends/Source.py:634
+#: ../..//build/lib/i2t/backends/Source.py:634
 #, python-format
 msgid "Could not configure %s."
 msgstr "Konnte %s nicht konfigurieren"
 
-#: ../..//backends/Source.py:644
+#: ../..//backends/Source.py:648
+#: ../..//build/lib/i2t/backends/Source.py:648
 #, python-format
+msgid "System Requirements for %s"
+msgstr "Systemvoraussetzungen für %s"
+
+#. Create a file chooser dialog for manually resolving dependencies
+#: ../..//backends/Source.py:657
+#: ../..//build/lib/i2t/backends/Source.py:657
+msgid "Choose Folder"
+msgstr "Wähle Verzeichnis aus"
+
+#. Add description label
+#: ../..//backends/Source.py:692
+#: ../..//build/lib/i2t/backends/Source.py:692
+msgid "The following programs are required:"
+msgstr "Die folgenden Programme werden benötigt:"
+
+#: ../..//backends/Source.py:736
+#: ../..//backends/Source.py:795
+#: ../..//build/lib/i2t/backends/Source.py:736
+#: ../..//build/lib/i2t/backends/Source.py:795
+msgid "Locate manually..."
+msgstr "Manuell auflösen..."
+
+#. Add description label
+#: ../..//backends/Source.py:751
+#: ../..//build/lib/i2t/backends/Source.py:751
+msgid "The following libraries are required:"
+msgstr "Die folgenden Bibliotheken werden benötigt:"
+
+#: ../..//backends/Source.py:879
+#: ../..//build/lib/i2t/backends/Source.py:879
+#, python-format
 msgid "Compiling %s"
 msgstr "Übersetze %s"
 
-#: ../..//backends/Source.py:721
+#: ../..//backends/Source.py:956
+#: ../..//build/lib/i2t/backends/Source.py:956
 #, python-format
 msgid "Could not build %s."
 msgstr "Konnte %s nicht übersetzen."
 
-#: ../..//backends/Source.py:746
+#: ../..//backends/Source.py:981
+#: ../..//build/lib/i2t/backends/Source.py:981
 #, python-format
 msgid "Tracking files of %s"
 msgstr "Bestimme installierte Dateien von %s"
 
-#: ../..//backends/Source.py:825
+#: ../..//backends/Source.py:1060
+#: ../..//build/lib/i2t/backends/Source.py:1060
 msgid "Could not track files to be installed."
 msgstr "Konnte Zusammenfassung der zu installierenden Dateien nicht erstellen."
 
-#: ../..//backends/Source.py:849
+#: ../..//backends/Source.py:1084
+#: ../..//build/lib/i2t/backends/Source.py:1084
 #, python-format
 msgid "Installing %s"
 msgstr "Installiere %s"
 
-#: ../..//backends/Source.py:931
+#: ../..//backends/Source.py:1166
+#: ../..//build/lib/i2t/backends/Source.py:1166
 #, python-format
 msgid "Could not install %s."
 msgstr "Konnte %s nicht installieren."
 
-#: ../..//backends/Source.py:1021
+#: ../..//backends/Source.py:1256
+#: ../..//build/lib/i2t/backends/Source.py:1256
 #, python-format
 msgid "Removing %s"
 msgstr "Entferne %s"
 
-#: ../..//backends/Source.py:1115
+#: ../..//backends/Source.py:1350
+#: ../..//build/lib/i2t/backends/Source.py:1350
 #, python-format
 msgid "Removing file %s"
 msgstr "Entferne Datei %s"
 
-#: ../..//backends/Source.py:1117
+#: ../..//backends/Source.py:1352
+#: ../..//build/lib/i2t/backends/Source.py:1352
 #, python-format
 msgid "Removing directory %s"
 msgstr "Entferne Verzeichnis %s"
 
 #. Title
 #: ../..//backends/DPKG.py:61
+#: ../..//build/lib/i2t/backends/DPKG.py:61
 #, python-format
 msgid "Installing %(name)s %(version)s ..."
 msgstr "Installiere %(name)s %(version)s ..."
 
-#: ../..//components/packages.py:350
+#: ../..//components/packages.py:405
+#: ../..//build/lib/i2t/components/packages.py:405
 #, python-format
 msgid "Could not parse package description %s: %s"
 msgstr "Konnte Paketbeschreibung %s nicht lesen: %s"
 
 #: ../..//components/config.py:267
+#: ../..//build/lib/i2t/components/config.py:267
 msgid "Skipping global config."
 msgstr "Überspringe globale Konfiguration."
 
 #: ../..//components/config.py:276
+#: ../..//build/lib/i2t/components/config.py:276
 msgid "Skipping user config."
 msgstr "Überspringe Benutzerkonfiguration."
 
+#. Create dialog
+#: ../..//ui/tasks.py:204
+#: ../..//build/lib/i2t/ui/tasks.py:204
+msgid "Updating the mirror list"
+msgstr "Aktualisiere die Mirror-Liste"
+
+#: ../..//ui/tasks.py:226
+#: ../..//build/lib/i2t/ui/tasks.py:226
+#, python-format
+msgid "Could not fetch mirror list from %s."
+msgstr "Konnte Mirror-Liste nicht von %s holen."
+
+#. Create input dialog
+#: ../..//ui/tasks.py:270
+#: ../..//build/lib/i2t/ui/tasks.py:270
+msgid "Select Mirror"
+msgstr "Mirror auswählen"
+
+#. Create download wizard
+#: ../..//ui/tasks.py:393
+#: ../..//build/lib/i2t/ui/tasks.py:393
+msgid "Updating the package list"
+msgstr "Aktualisiere die Paketliste"
+
+#. Create and run download wizard
+#: ../..//ui/tasks.py:423
+#: ../..//build/lib/i2t/ui/tasks.py:423
+msgid "Updating Packages"
+msgstr "Aktualisiere Pakete"
+
+#: ../..//ui/tasks.py:429
+#: ../..//ui/main.py:484
+#: ../..//build/lib/i2t/ui/main.py:484
+#: ../..//build/lib/i2t/ui/tasks.py:429
+#, python-format
+msgid "Could not fetch package from %s."
+msgstr "Konnte Paket nicht von %s holen."
+
+#: ../..//ui/tasks.py:445
+#: ../..//build/lib/i2t/ui/tasks.py:445
+#, python-format
+msgid "Could not fetch package list from %s."
+msgstr "Konnte Paketliste nicht von %s holen."
+
+#: ../..//ui/tasks.py:449
+#: ../..//build/lib/i2t/ui/tasks.py:449
+#, python-format
+msgid "Could not fetch package %s from %s."
+msgstr "Konnte Paket %s nicht von %s herunterladen."
+
 #: ../..//ui/main.py:59
+#: ../..//build/lib/i2t/ui/main.py:59
 msgid "Translation by Jannis Pohlmann <jannis at xfce.org>"
 msgstr "Übersetzung von Jannis Pohlmann <jannis at xfce.org>"
 
 #: ../..//ui/main.py:66
+#: ../..//build/lib/i2t/ui/main.py:66
 msgid "InstallIt Preferences"
 msgstr "InstallIt Einstellungen"
 
 #: ../..//ui/main.py:78
+#: ../..//build/lib/i2t/ui/main.py:78
 msgid "Default installation prefix:"
 msgstr "Standardzielverzeichnis:"
 
 #: ../..//ui/main.py:114
+#: ../..//build/lib/i2t/ui/main.py:114
 msgid "_File"
 msgstr "_Datei"
 
 #: ../..//ui/main.py:115
+#: ../..//build/lib/i2t/ui/main.py:115
 msgid "_Quit"
 msgstr "B_eenden"
 
 #: ../..//ui/main.py:116
+#: ../..//build/lib/i2t/ui/main.py:116
 msgid "Exit InstallIt"
 msgstr "InstallIt beenden"
 
 #: ../..//ui/main.py:121
+#: ../..//build/lib/i2t/ui/main.py:121
 msgid "_Edit"
 msgstr "B_earbeiten"
 
 #: ../..//ui/main.py:122
+#: ../..//build/lib/i2t/ui/main.py:122
 msgid "_Preferences"
 msgstr "_Einstellungen"
 
 #: ../..//ui/main.py:123
+#: ../..//build/lib/i2t/ui/main.py:123
 msgid "Edit Preferences"
 msgstr "Einstellungen bearbeiten"
 
 #: ../..//ui/main.py:128
+#: ../..//build/lib/i2t/ui/main.py:128
 msgid "_Actions"
 msgstr "_Aktionen"
 
 #: ../..//ui/main.py:129
+#: ../..//build/lib/i2t/ui/main.py:129
 msgid "_Install Package(s)"
 msgstr "Paket(e) _installieren"
 
 #: ../..//ui/main.py:130
+#: ../..//build/lib/i2t/ui/main.py:130
 msgid "Mark the selected package(s) for installation."
 msgstr "Die ausgewählten Pakete für die Installation vormerken."
 
 #: ../..//ui/main.py:132
+#: ../..//build/lib/i2t/ui/main.py:132
 msgid "R_emove Package(s)"
 msgstr "Paket(e) _entfernen"
 
 #: ../..//ui/main.py:133
+#: ../..//build/lib/i2t/ui/main.py:133
 msgid "Mark the selected package(s) for being removed."
 msgstr "Die ausgewählten Pakete für die Deinstallation vormerken."
 
 #: ../..//ui/main.py:135
+#: ../..//build/lib/i2t/ui/main.py:135
 msgid "_Revert Package(s) Changes"
 msgstr "Paketänderungen _rückgängig machen"
 
 #: ../..//ui/main.py:136
+#: ../..//build/lib/i2t/ui/main.py:136
 msgid "Revert changes made to the selected package(s)."
 msgstr "Änderungen der ausgewählten Pakete rückgängig machen."
 
 #: ../..//ui/main.py:138
+#: ../..//build/lib/i2t/ui/main.py:138
 msgid "Revert all _Changes"
 msgstr "Änderungen _rückgängig machen"
 
 #: ../..//ui/main.py:139
+#: ../..//build/lib/i2t/ui/main.py:139
 msgid "Revert all Changes."
 msgstr "Alle Änderungen rückgängig machen."
 
 #: ../..//ui/main.py:141
+#: ../..//build/lib/i2t/ui/main.py:141
 msgid "_Apply Changes"
 msgstr "_Änderungen durchführen"
 
 #: ../..//ui/main.py:142
+#: ../..//build/lib/i2t/ui/main.py:142
 msgid "Perform package installations/removals/updates."
-msgstr ""
-"Die gewünschten Installationen/Deinstallationen und Aktualisierungen "
-"durchführen."
+msgstr "Die gewünschten Installationen/Deinstallationen und Aktualisierungen durchführen."
 
 #: ../..//ui/main.py:144
+#: ../..//build/lib/i2t/ui/main.py:144
 msgid "Select _Mirror"
 msgstr "Mirror auswählen"
 
 #: ../..//ui/main.py:146
+#: ../..//build/lib/i2t/ui/main.py:146
 msgid "Update _Packages"
 msgstr "_Pakete aktualisieren"
 
 #: ../..//ui/main.py:147
+#: ../..//build/lib/i2t/ui/main.py:147
 msgid "Update package list from the mirror."
 msgstr "Paketliste aus dem Internet aktualisieren"
 
 #: ../..//ui/main.py:166
+#: ../..//build/lib/i2t/ui/main.py:166
 msgid "_View"
 msgstr "An_sicht"
 
 #: ../..//ui/main.py:171
+#: ../..//build/lib/i2t/ui/main.py:171
 msgid "Show _Toolbar"
 msgstr "Werkzeugleis_te anzeigen"
 
 #: ../..//ui/main.py:172
+#: ../..//build/lib/i2t/ui/main.py:172
 msgid "Toggle toolbar visibility."
 msgstr "Werkzeugleiste an-/ausschalten."
 
 #: ../..//ui/main.py:177
+#: ../..//build/lib/i2t/ui/main.py:177
 msgid "_Help"
 msgstr "_Hilfe"
 
 #: ../..//ui/main.py:180
+#: ../..//build/lib/i2t/ui/main.py:180
 msgid "_About InstallIt (i2t)"
 msgstr "Über _InstallIt (i2t)"
 
 #. Display additional packages dialog
-#: ../..//ui/main.py:401
-msgid ""
-"The following additional packages have to be installed. Do you want to "
-"continue?"
-msgstr ""
-"Die folgenden, zusätzlichen Pakete müssen installiert werden. Wollen Sie "
-"fortfahren?"
+#: ../..//ui/main.py:400
+#: ../..//build/lib/i2t/ui/main.py:400
+msgid "The following additional packages have to be installed. Do you want to continue?"
+msgstr "Die folgenden, zusätzlichen Pakete müssen installiert werden. Wollen Sie fortfahren?"
 
-#: ../..//ui/main.py:417
+#: ../..//ui/main.py:416
+#: ../..//build/lib/i2t/ui/main.py:416
 msgid "No changes were made."
 msgstr "Es wurden keine Änderungen vorgenommen."
 
 #. Create download wizard
-#: ../..//ui/main.py:448
+#: ../..//ui/main.py:447
+#: ../..//build/lib/i2t/ui/main.py:447
 msgid "Downloading packages"
 msgstr "Lade Pakete herunter"
 
-#: ../..//ui/main.py:485 ../..//ui/tasks.py:428
-#, python-format
-msgid "Could not fetch package from %s."
-msgstr "Konnte Paket nicht von %s holen."
-
-#: ../..//ui/initial.py:40
+#: ../..//ui/initial.py:41
+#: ../..//build/lib/i2t/ui/initial.py:41
 msgid "Initial Setup Wizard"
 msgstr "Einleitende Konfiguration"
 
-#: ../..//ui/initial.py:112
-msgid ""
-"You have to configure InstallIt on first startup. Do you really want to "
-"abort?"
-msgstr ""
-"InstallIt muss vor dem ersten Start konfiguriert werden. Sind Sie sicher, "
-"dass sie abbrechen wollen?"
+#: ../..//ui/initial.py:113
+#: ../..//build/lib/i2t/ui/initial.py:113
+msgid "You have to configure InstallIt on first startup. Do you really want to abort?"
+msgstr "InstallIt muss vor dem ersten Start konfiguriert werden. Sind Sie sicher, dass sie abbrechen wollen?"
 
-#: ../..//ui/initial.py:135
+#: ../..//ui/initial.py:136
+#: ../..//build/lib/i2t/ui/initial.py:136
 msgid "Please fill out this page correctly."
 msgstr "Bitte füllen Sie diese Seite korrekt aus."
 
-#: ../..//ui/initial.py:216
+#: ../..//ui/initial.py:217
+#: ../..//build/lib/i2t/ui/initial.py:217
 msgid "Welcome To InstallIt"
 msgstr "Willkommen bei InstallIt"
 
 #. Description
-#: ../..//ui/initial.py:219
+#: ../..//ui/initial.py:220
+#: ../..//build/lib/i2t/ui/initial.py:220
 msgid ""
-"InstallIt uses a repository system and needs to store some data on your "
-"harddrive, like the mirror list, package information and temporary "
-"installation files.\n"
+"InstallIt uses a repository system and needs to store some data on your harddrive, like the mirror list, package information and temporary installation files.\n"
 " \n"
 "Please enter/select the directories you want InstallIt to use."
 msgstr ""
-"InstallIt verwendet ein Paketsystem und muss Daten auf Ihrer Festplatte "
-"speichern, wie zum Beispiel die Mirror-Liste, Paketinformationen und "
-"temporäre Installationsdateien. \n"
+"InstallIt verwendet ein Paketsystem und muss Daten auf Ihrer Festplatte speichern, wie zum Beispiel die Mirror-Liste, Paketinformationen und temporäre Installationsdateien. \n"
 "\n"
 "Bitte geben sie die Verzeichnisse an, die InstallIt dafür nutzen soll."
 
-#: ../..//ui/initial.py:241
+#: ../..//ui/initial.py:242
+#: ../..//build/lib/i2t/ui/initial.py:242
 msgid "<b>Data:</b>"
 msgstr "<b>Daten:</b>"
 
-#: ../..//ui/initial.py:257
+#: ../..//ui/initial.py:258
+#: ../..//build/lib/i2t/ui/initial.py:258
 msgid "<b>Temporary:</b>"
 msgstr "<b>Temporär:</b>"
 
-#: ../..//ui/initial.py:303
+#: ../..//ui/initial.py:304
+#: ../..//build/lib/i2t/ui/initial.py:304
 #, python-format
 msgid "Could not create directory %s."
 msgstr "Konnte Verzeichnis %s nicht erstellen."
 
-#: ../..//ui/initial.py:316
+#: ../..//ui/initial.py:317
+#: ../..//build/lib/i2t/ui/initial.py:317
 msgid "Select Directory"
 msgstr "Verzeichnis auswählen"
 
 #. Name column
-#: ../..//ui/categories.py:94 ../..//ui/installation.py:107
-#: ../..//ui/packages.py:158
+#: ../..//ui/categories.py:94
+#: ../..//ui/installation.py:105
+#: ../..//ui/packages.py:159
+#: ../..//build/lib/i2t/ui/categories.py:94
+#: ../..//build/lib/i2t/ui/installation.py:105
+#: ../..//build/lib/i2t/ui/packages.py:159
 msgid "Name"
 msgstr "Name"
 
 #. Packages column
 #: ../..//ui/categories.py:101
+#: ../..//build/lib/i2t/ui/categories.py:101
 msgid "Packages"
 msgstr "Pakete"
 
-#: ../..//ui/installation.py:45
+#: ../..//ui/installation.py:44
+#: ../..//build/lib/i2t/ui/installation.py:44
 #, python-format
 msgid "Installation: %s"
 msgstr "Installation: %s"
 
-#: ../..//ui/installation.py:75
+#: ../..//ui/installation.py:73
+#: ../..//build/lib/i2t/ui/installation.py:73
 #, python-format
 msgid "Deinstallation: %s"
 msgstr "Deinstallation: %s"
 
-#: ../..//ui/installation.py:135
+#: ../..//ui/installation.py:133
+#: ../..//build/lib/i2t/ui/installation.py:133
 #, python-format
 msgid "%(name)s %(version)s"
 msgstr "%(name)s %(version)s"
 
-#: ../..//ui/installation.py:151
+#: ../..//ui/installation.py:149
+#: ../..//build/lib/i2t/ui/installation.py:149
 msgid "Installation Wizard"
 msgstr "Installation"
 
-#: ../..//ui/installation.py:174 ../..//ui/installation.py:312
+#: ../..//ui/installation.py:173
+#: ../..//ui/installation.py:312
+#: ../..//build/lib/i2t/ui/installation.py:173
+#: ../..//build/lib/i2t/ui/installation.py:312
 msgid "<b>Packages:</b>"
 msgstr "<b>Pakete:</b>"
 
 #. Display success message
-#: ../..//ui/installation.py:271
+#: ../..//ui/installation.py:270
+#: ../..//build/lib/i2t/ui/installation.py:270
 msgid "All packages were installed successfully."
 msgstr "Alle Pakete wurden erfolgreich installiert."
 
-#: ../..//ui/installation.py:289
+#: ../..//ui/installation.py:288
+#: ../..//build/lib/i2t/ui/installation.py:288
 msgid "Deinstallation Wizard"
 msgstr "Deinstallation"
 
 #. Display success message
 #: ../..//ui/installation.py:405
+#: ../..//build/lib/i2t/ui/installation.py:405
 msgid "All packages were removed successfully."
 msgstr "Alle Pakete wurden erfolgreich entfernt."
 
-#: ../..//ui/download.py:114 ../..//ui/download.py:115
+#: ../..//ui/download.py:114
+#: ../..//ui/download.py:115
+#: ../..//build/lib/i2t/ui/download.py:114
+#: ../..//build/lib/i2t/ui/download.py:115
 msgid "Establishing connection..."
 msgstr "Stelle Verbindung her..."
 
 #. Log error
 #: ../..//ui/download.py:138
+#: ../..//build/lib/i2t/ui/download.py:138
 #, python-format
 msgid "Could not download %s."
 msgstr "Konnte %s nicht herunterladen."
 
 #: ../..//ui/download.py:149
+#: ../..//build/lib/i2t/ui/download.py:149
 #, python-format
 msgid "Downloading %s"
 msgstr "Lade %s herunter"
 
 #: ../..//ui/download.py:180
+#: ../..//build/lib/i2t/ui/download.py:180
 #, python-format
 msgid "Total: %(percent)d%% [%(bytes)d/%(total)d kB]"
 msgstr "Gesamt: %(percent)d%% [%(bytes)d/%(total)d kB]"
 
 #: ../..//ui/download.py:194
+#: ../..//build/lib/i2t/ui/download.py:194
 #, python-format
 msgid "%(name)s: %(percent)d%% [%(bytes)d/%(total)d kB]"
 msgstr "%(name)s: %(percent)d%% [%(bytes)d/%(total)d kB]"
 
 #. State icon column
-#: ../..//ui/packages.py:151
+#: ../..//ui/packages.py:152
+#: ../..//build/lib/i2t/ui/packages.py:152
 msgid "State"
 msgstr "Status"
 
-#. Create dialog
-#: ../..//ui/tasks.py:203
-msgid "Updating the mirror list"
-msgstr "Aktualisiere die Mirror-Liste"
-
-#: ../..//ui/tasks.py:225
+#: ../..//build/lib/i2t/tools/env.py:94
+#: ../..//tools/env.py:94
 #, python-format
-msgid "Could not fetch mirror list from %s."
-msgstr "Konnte Mirror-Liste nicht von %s holen."
-
-#. Create input dialog
-#: ../..//ui/tasks.py:269
-msgid "Select Mirror"
-msgstr "Mirror auswählen"
-
-#. Create download wizard
-#: ../..//ui/tasks.py:392
-msgid "Updating the package list"
-msgstr "Aktualisiere die Paketliste"
-
-#. Create and run download wizard
-#: ../..//ui/tasks.py:422
-msgid "Updating Packages"
-msgstr "Aktualisiere Pakete"
-
-#: ../..//ui/tasks.py:444
-#, python-format
-msgid "Could not fetch package list from %s."
-msgstr "Konnte Paketliste nicht von %s holen."
-
-#: ../..//ui/tasks.py:448
-#, python-format
-msgid "Could not fetch package %s from %s."
-msgstr "Konnte Paket %s nicht von %s herunterladen."
-
-#: ../..//setup.py:43
-msgid "You need at least PyGTK 2.6 to run InstallIt (i2t)"
-msgstr ""
-"Sie benötigen mindestens PyGTK 2.6 um InstallIt (i2t) nutzen zu können."
-
-#: ../..//setup.py:59
-msgid "Graphical source-based package manager and installer"
-msgstr ""
-"Grafisches, quellenbasiertes Paketverwaltungs- und Installationsprogramm"
-
-#: ../..//setup.py:61
-msgid "InstallIt (i2t) is a source-based package management solution"
-msgstr "InstallIt (i2t) ist eine quellenbasierte Paketverwaltungslösung"
-
-#: ../..//tools/env.py:92
-#, python-format
 msgid "Compiling %s => %s."
 msgstr "Übersetze %s => %s."
 
-#: ../..//tools/env.py:97
+#: ../..//build/lib/i2t/tools/env.py:99
+#: ../..//tools/env.py:99
 #, python-format
 msgid "Failed to compile %s."
 msgstr "Konnte %s nicht übersetzen."
 
-#: ../..//tools/env.py:105
+#: ../..//build/lib/i2t/tools/env.py:112
+#: ../..//tools/env.py:112
 #, python-format
 msgid "Linking %s with %s"
 msgstr "Verlinke %s mit %s"
 
-#: ../..//tools/env.py:111
+#: ../..//build/lib/i2t/tools/env.py:121
+#: ../..//tools/env.py:118
 #, python-format
 msgid "Failed to link %s."
 msgstr "Konnte %s nicht verlinken."
 
-#: ../..//tools/pkgconfig.py:37
+#: ../..//build/lib/i2t/tools/pkgconfig.py:40
+#: ../..//tools/pkgconfig.py:40
 #, python-format
 msgid "pkg-config module missing: %(name)s (%(version)s)."
 msgstr "pkg-config-Modul nicht gefunden: %(name)s %(version)s."
 
 #~ msgid "Features"
 #~ msgstr "Features"
-
 #~ msgid "Configuration"
 #~ msgstr "Konfiguration"
-
 #~ msgid "Performing Test Installation"
 #~ msgstr "Führe Testinstallation durch"
-
 #~ msgid "Download Wizard"
 #~ msgstr "Download"
-
 #~ msgid "Moving %(file)s to %(dir)s"
 #~ msgstr "Verschiebe %(file)s nach %(dir)s"
-
 #~ msgid "All packages were successfully installed."
 #~ msgstr "Alle Pakete wurden erfolgreich installiert."
-
 #~ msgid "Select _mirror"
 #~ msgstr "_Mirror auswählen"
 
@@ -508,20 +621,16 @@
 #~ msgid_plural "Remove packages"
 #~ msgstr[0] "Paket _entfernen"
 #~ msgstr[1] "Paket _entfernen"
-
 #~ msgid "Version"
 #~ msgstr "Version"
-
 #~ msgid "Backend"
 #~ msgstr "Backend"
-
 #~ msgid ""
 #~ "GTK+ bindings for Python could not be found. Please install python-gtk or "
 #~ "pygtk first."
 #~ msgstr ""
 #~ "GTK+-Bindungen für Python konnten nicht gefunden werden. Bitte "
 #~ "installieren Sie zunächst python-gtk oder pygtk."
-
 #~ msgid ""
 #~ "This is your first start of InstallIt. In order to use it you will have "
 #~ "to define working directories first. \n"
@@ -532,3 +641,4 @@
 #~ "können, müssen vorab Arbeitsverzeichnisse festgelegt werden. \n"
 #~ "Sie können alternativ dazu die vordefinierten Verzeichnisse nutzen. Diese "
 #~ "sind für die meisten Benutzer ausreichend."
+

Modified: installit/trunk/i18n/po/i2t.pot
===================================================================
--- installit/trunk/i18n/po/i2t.pot	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/i18n/po/i2t.pot	2006-09-03 16:38:19 UTC (rev 23064)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2006-07-12 00:04+0200\n"
+"POT-Creation-Date: 2006-09-03 18:36+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -16,16 +16,32 @@
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../..//backends/Source.py:209
+#: ../..//setup.py:42
+msgid "You need at least PyGTK 2.6 to run InstallIt (i2t)"
+msgstr ""
+
+#: ../..//setup.py:52
+msgid "The program 'libtool' could not been found in $PATH."
+msgstr ""
+
+#: ../..//setup.py:67
+msgid "Graphical source-based package manager and installer"
+msgstr ""
+
+#: ../..//setup.py:68
+msgid "InstallIt (i2t) is a source-based package management solution"
+msgstr ""
+
+#: ../..//backends/Source.py:213
 msgid "Removing Previous Installation"
 msgstr ""
 
-#: ../..//backends/Source.py:333
+#: ../..//backends/Source.py:337
 #, python-format
 msgid "Select installation prefix for %s"
 msgstr ""
 
-#: ../..//backends/Source.py:341
+#: ../..//backends/Source.py:345
 #, python-format
 msgid ""
 "Please specify the installation prefix <b>%(name)s</b> should be installed "
@@ -33,75 +49,99 @@
 msgstr ""
 
 #. File chooser dialog
-#: ../..//backends/Source.py:351 ../..//ui/main.py:82
+#: ../..//backends/Source.py:355 ../..//ui/main.py:82
 msgid "Installation Prefix"
 msgstr ""
 
-#: ../..//backends/Source.py:378 ../..//ui/initial.py:306
+#: ../..//backends/Source.py:382 ../..//ui/initial.py:307
 #, python-format
 msgid "Directory %s is not writable."
 msgstr ""
 
-#: ../..//backends/Source.py:390
+#: ../..//backends/Source.py:394
 #, python-format
 msgid "Select %(package)s features"
 msgstr ""
 
-#: ../..//backends/Source.py:434
+#: ../..//backends/Source.py:438
 #, python-format
 msgid "Extracting %s"
 msgstr ""
 
-#: ../..//backends/Source.py:554
+#: ../..//backends/Source.py:558
 #, python-format
 msgid "Preparing %s"
 msgstr ""
 
-#: ../..//backends/Source.py:630
+#: ../..//backends/Source.py:634
 #, python-format
 msgid "Could not configure %s."
 msgstr ""
 
-#: ../..//backends/Source.py:644
+#: ../..//backends/Source.py:648
 #, python-format
+msgid "System Requirements for %s"
+msgstr ""
+
+#. Create a file chooser dialog for manually resolving dependencies
+#: ../..//backends/Source.py:657
+msgid "Choose Folder"
+msgstr ""
+
+#. Add description label
+#: ../..//backends/Source.py:692
+msgid "The following programs are required:"
+msgstr ""
+
+#: ../..//backends/Source.py:736 ../..//backends/Source.py:795
+msgid "Locate manually..."
+msgstr ""
+
+#. Add description label
+#: ../..//backends/Source.py:751
+msgid "The following libraries are required:"
+msgstr ""
+
+#: ../..//backends/Source.py:879
+#, python-format
 msgid "Compiling %s"
 msgstr ""
 
-#: ../..//backends/Source.py:721
+#: ../..//backends/Source.py:956
 #, python-format
 msgid "Could not build %s."
 msgstr ""
 
-#: ../..//backends/Source.py:746
+#: ../..//backends/Source.py:981
 #, python-format
 msgid "Tracking files of %s"
 msgstr ""
 
-#: ../..//backends/Source.py:825
+#: ../..//backends/Source.py:1060
 msgid "Could not track files to be installed."
 msgstr ""
 
-#: ../..//backends/Source.py:849
+#: ../..//backends/Source.py:1084
 #, python-format
 msgid "Installing %s"
 msgstr ""
 
-#: ../..//backends/Source.py:931
+#: ../..//backends/Source.py:1166
 #, python-format
 msgid "Could not install %s."
 msgstr ""
 
-#: ../..//backends/Source.py:1021
+#: ../..//backends/Source.py:1256
 #, python-format
 msgid "Removing %s"
 msgstr ""
 
-#: ../..//backends/Source.py:1115
+#: ../..//backends/Source.py:1350
 #, python-format
 msgid "Removing file %s"
 msgstr ""
 
-#: ../..//backends/Source.py:1117
+#: ../..//backends/Source.py:1352
 #, python-format
 msgid "Removing directory %s"
 msgstr ""
@@ -112,7 +152,7 @@
 msgid "Installing %(name)s %(version)s ..."
 msgstr ""
 
-#: ../..//components/packages.py:350
+#: ../..//components/packages.py:405
 #, python-format
 msgid "Could not parse package description %s: %s"
 msgstr ""
@@ -125,6 +165,46 @@
 msgid "Skipping user config."
 msgstr ""
 
+#. Create dialog
+#: ../..//ui/tasks.py:204
+msgid "Updating the mirror list"
+msgstr ""
+
+#: ../..//ui/tasks.py:226
+#, python-format
+msgid "Could not fetch mirror list from %s."
+msgstr ""
+
+#. Create input dialog
+#: ../..//ui/tasks.py:270
+msgid "Select Mirror"
+msgstr ""
+
+#. Create download wizard
+#: ../..//ui/tasks.py:393
+msgid "Updating the package list"
+msgstr ""
+
+#. Create and run download wizard
+#: ../..//ui/tasks.py:423
+msgid "Updating Packages"
+msgstr ""
+
+#: ../..//ui/tasks.py:429 ../..//ui/main.py:484
+#, python-format
+msgid "Could not fetch package from %s."
+msgstr ""
+
+#: ../..//ui/tasks.py:445
+#, python-format
+msgid "Could not fetch package list from %s."
+msgstr ""
+
+#: ../..//ui/tasks.py:449
+#, python-format
+msgid "Could not fetch package %s from %s."
+msgstr ""
+
 #: ../..//ui/main.py:59
 msgid "Translation by Jannis Pohlmann <jannis at xfce.org>"
 msgstr ""
@@ -238,46 +318,41 @@
 msgstr ""
 
 #. Display additional packages dialog
-#: ../..//ui/main.py:401
+#: ../..//ui/main.py:400
 msgid ""
 "The following additional packages have to be installed. Do you want to "
 "continue?"
 msgstr ""
 
-#: ../..//ui/main.py:417
+#: ../..//ui/main.py:416
 msgid "No changes were made."
 msgstr ""
 
 #. Create download wizard
-#: ../..//ui/main.py:448
+#: ../..//ui/main.py:447
 msgid "Downloading packages"
 msgstr ""
 
-#: ../..//ui/main.py:485 ../..//ui/tasks.py:428
-#, python-format
-msgid "Could not fetch package from %s."
-msgstr ""
-
-#: ../..//ui/initial.py:40
+#: ../..//ui/initial.py:41
 msgid "Initial Setup Wizard"
 msgstr ""
 
-#: ../..//ui/initial.py:112
+#: ../..//ui/initial.py:113
 msgid ""
 "You have to configure InstallIt on first startup. Do you really want to "
 "abort?"
 msgstr ""
 
-#: ../..//ui/initial.py:135
+#: ../..//ui/initial.py:136
 msgid "Please fill out this page correctly."
 msgstr ""
 
-#: ../..//ui/initial.py:216
+#: ../..//ui/initial.py:217
 msgid "Welcome To InstallIt"
 msgstr ""
 
 #. Description
-#: ../..//ui/initial.py:219
+#: ../..//ui/initial.py:220
 msgid ""
 "InstallIt uses a repository system and needs to store some data on your "
 "harddrive, like the mirror list, package information and temporary "
@@ -286,26 +361,26 @@
 "Please enter/select the directories you want InstallIt to use."
 msgstr ""
 
-#: ../..//ui/initial.py:241
+#: ../..//ui/initial.py:242
 msgid "<b>Data:</b>"
 msgstr ""
 
-#: ../..//ui/initial.py:257
+#: ../..//ui/initial.py:258
 msgid "<b>Temporary:</b>"
 msgstr ""
 
-#: ../..//ui/initial.py:303
+#: ../..//ui/initial.py:304
 #, python-format
 msgid "Could not create directory %s."
 msgstr ""
 
-#: ../..//ui/initial.py:316
+#: ../..//ui/initial.py:317
 msgid "Select Directory"
 msgstr ""
 
 #. Name column
-#: ../..//ui/categories.py:94 ../..//ui/installation.py:107
-#: ../..//ui/packages.py:158
+#: ../..//ui/categories.py:94 ../..//ui/installation.py:105
+#: ../..//ui/packages.py:159
 msgid "Name"
 msgstr ""
 
@@ -314,35 +389,35 @@
 msgid "Packages"
 msgstr ""
 
-#: ../..//ui/installation.py:45
+#: ../..//ui/installation.py:44
 #, python-format
 msgid "Installation: %s"
 msgstr ""
 
-#: ../..//ui/installation.py:75
+#: ../..//ui/installation.py:73
 #, python-format
 msgid "Deinstallation: %s"
 msgstr ""
 
-#: ../..//ui/installation.py:135
+#: ../..//ui/installation.py:133
 #, python-format
 msgid "%(name)s %(version)s"
 msgstr ""
 
-#: ../..//ui/installation.py:151
+#: ../..//ui/installation.py:149
 msgid "Installation Wizard"
 msgstr ""
 
-#: ../..//ui/installation.py:174 ../..//ui/installation.py:312
+#: ../..//ui/installation.py:173 ../..//ui/installation.py:312
 msgid "<b>Packages:</b>"
 msgstr ""
 
 #. Display success message
-#: ../..//ui/installation.py:271
+#: ../..//ui/installation.py:270
 msgid "All packages were installed successfully."
 msgstr ""
 
-#: ../..//ui/installation.py:289
+#: ../..//ui/installation.py:288
 msgid "Deinstallation Wizard"
 msgstr ""
 
@@ -377,78 +452,31 @@
 msgstr ""
 
 #. State icon column
-#: ../..//ui/packages.py:151
+#: ../..//ui/packages.py:152
 msgid "State"
 msgstr ""
 
-#. Create dialog
-#: ../..//ui/tasks.py:203
-msgid "Updating the mirror list"
-msgstr ""
-
-#: ../..//ui/tasks.py:225
+#: ../..//tools/env.py:94
 #, python-format
-msgid "Could not fetch mirror list from %s."
-msgstr ""
-
-#. Create input dialog
-#: ../..//ui/tasks.py:269
-msgid "Select Mirror"
-msgstr ""
-
-#. Create download wizard
-#: ../..//ui/tasks.py:392
-msgid "Updating the package list"
-msgstr ""
-
-#. Create and run download wizard
-#: ../..//ui/tasks.py:422
-msgid "Updating Packages"
-msgstr ""
-
-#: ../..//ui/tasks.py:444
-#, python-format
-msgid "Could not fetch package list from %s."
-msgstr ""
-
-#: ../..//ui/tasks.py:448
-#, python-format
-msgid "Could not fetch package %s from %s."
-msgstr ""
-
-#: ../..//setup.py:43
-msgid "You need at least PyGTK 2.6 to run InstallIt (i2t)"
-msgstr ""
-
-#: ../..//setup.py:59
-msgid "Graphical source-based package manager and installer"
-msgstr ""
-
-#: ../..//setup.py:61
-msgid "InstallIt (i2t) is a source-based package management solution"
-msgstr ""
-
-#: ../..//tools/env.py:92
-#, python-format
 msgid "Compiling %s => %s."
 msgstr ""
 
-#: ../..//tools/env.py:97
+#: ../..//tools/env.py:99
 #, python-format
 msgid "Failed to compile %s."
 msgstr ""
 
-#: ../..//tools/env.py:105
+#: ../..//tools/env.py:112
 #, python-format
 msgid "Linking %s with %s"
 msgstr ""
 
-#: ../..//tools/env.py:111
+#: ../..//tools/env.py:118
 #, python-format
 msgid "Failed to link %s."
 msgstr ""
 
-#: ../..//tools/pkgconfig.py:37
+#: ../..//tools/pkgconfig.py:40
 #, python-format
 msgid "pkg-config module missing: %(name)s (%(version)s)."
 msgstr ""

Modified: installit/trunk/i2t
===================================================================
--- installit/trunk/i2t	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/i2t	2006-09-03 16:38:19 UTC (rev 23064)
@@ -31,14 +31,14 @@
     # Load InstallIt
     sys.path += map(addI2tSearchPath, sys.path)
 
-    try:
-        import main
-    except ImportError:
-        try:
-            from i2t import main
-        except ImportError:
-            print "Could not locate i2t Python package."
-            sys.exit(1)
+    #try:
+    import main
+    #except ImportError:
+    #    try:
+    #        from i2t import main
+    #    except ImportError:
+    #        print "Could not locate i2t Python package."
+    #        sys.exit(1)
 
     from tools.env import Environment
 

Modified: installit/trunk/setup.py
===================================================================
--- installit/trunk/setup.py	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/setup.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -19,6 +19,7 @@
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
 # MA 02111-1307 USA
 
+import os
 from sys import version_info, exit
 from os import putenv
 from commands import getstatusoutput
@@ -30,36 +31,41 @@
 _ = i18n.init()
 
 def checkDependencies():
-    
+    # Check PyGTK dependency
     try:
         import pygtk
         pygtk.require("2.0")
         import gtk
-
         if gtk.pygtk_version < (2, 6, 0):
             raise ImportError
-
     except ImportError:
         print _("You need at least PyGTK 2.6 to run InstallIt (i2t)")
         exit(1)
 
+    # Make sure libtool is available
+    libtoolFound = False
+    for path in os.environ.get("PATH").split(":"):
+        if os.access(os.path.join(path, "libtool"), os.X_OK):
+            libtoolFound = True
+            break
+    if not libtoolFound:
+        print _("The program 'libtool' could not been found in $PATH.")
+        exit(1)
+
 # Check if required dependencies are available
 checkDependencies()
 
 # Create installation information script
-print sysconfig.get_config_var("BINDIR")
-vars = sysconfig.get_config_vars()
-for key in vars:
-    value = vars.get(key)
-    print "%s => %s" % (key, value)
+#vars = sysconfig.get_config_vars()
+#for key in vars:
+#    value = vars.get(key)
+#    print "%s => %s" % (key, value)
 
 # Setup information
 setup(name = "i2t",
     version = info.version,
-    description = _("Graphical source-based package manager and "
-        "installer"),
-    long_description = _("InstallIt (i2t) is a source-based package "
-        "management solution"),
+    description = _("Graphical source-based package manager and installer"),
+    long_description = _("InstallIt (i2t) is a source-based package management solution"),
     author = "Jannis Pohlmann",
     author_email = "jannis at xfce.org",
     url = "http://installit.xfce.org",
@@ -82,5 +88,13 @@
         "i2t/backends": "backends",
         "i2t/ui": "ui",
     },
+    package_data = { 
+        "i2t": [
+            "data/*.*", 
+            "data/pixmaps/*.*",
+            "data/ui/*.*",
+            "i18n/locale/*/LC_MESSAGES/i2t.mo",
+        ]
+    },
     scripts = ["i2t"],
 )

Deleted: installit/trunk/tmp-cmd.py

Modified: installit/trunk/tools/__init__.py
===================================================================
--- installit/trunk/tools/__init__.py	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/tools/__init__.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -24,4 +24,5 @@
     "pkgconfig",
     "shell",
     "env",
+    "lookup",
 ]

Modified: installit/trunk/tools/env.py
===================================================================
--- installit/trunk/tools/env.py	2006-09-03 13:26:53 UTC (rev 23063)
+++ installit/trunk/tools/env.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -53,7 +53,8 @@
         return False
 
     def getCompiler(self):
-        default = "gcc"
+        defaults = ["gcc", "gcc30", "gcc31", "gcc32", "gcc33", "gcc34",
+            "gcc40", "gcc41", "gcc42", "cc"]
 
         if os.environ.has_key("CC"):
             for pathname in os.environ.get("PATH").split(":"):
@@ -62,11 +63,12 @@
                     return fullpath
 
         for pathname in os.environ.get("PATH").split(":"):
-            fullpath = os.path.join(pathname, default)
-            if os.access(fullpath, os.X_OK):
-                return fullpath
+            for compiler in defaults:
+                fullpath = os.path.join(pathname, compiler)
+                if os.access(fullpath, os.X_OK):
+                    return fullpath
 
-        return default
+        return defaults[0]
 
     def hasLibtool(self):
         for pathname in os.environ.get("PATH").split(":"):
@@ -97,9 +99,14 @@
             Logger.error("Environment", _("Failed to compile %s.") % (source))
             return False
 
-    def link(self, source, library):
-        command = "%s --mode=link %s -o %s %s -l%s" % \
+    def link(self, source, library, path=None):
+        if path:
+            command = "%s --mode=link %s -o %s %s -L%s -l%s" % \
                 (self.getLibtool(), os.path.basename(self.getCompiler()),
+                source + ".linked", source, path, library)
+        else:
+            command = "%s --mode=link %s -o %s %s -l%s" % \
+                (self.getLibtool(), os.path.basename(self.getCompiler()),
                  source + ".linked", source, library)
 
         Logger.debug("Environment", _("Linking %s with %s") 
@@ -111,17 +118,24 @@
             Logger.error("Environment", _("Failed to link %s.") % (source))
             return False
 
-    def hasLibrary(self, name, version):
+    def hasLibrary(self, library, path=None):
         source = os.path.join(Config.get("DataDir"), "test.o")
 
         # Try linking against the library (without version)
-        if self.link(source, name):
+        if self.link(source, library.name, path):
+            library.path = path
             return True
 
-        # Try linking against the library (with version)
-        if self.link(source, name + "-" + version):
-            return True
-
+        # Iterate through $PATH, searching for the library
+        if not path:
+            for path in BaseDir.getPath():
+                path = os.path.join(path, "..", "lib")
+    
+                # Try linking against the library (w/o version)
+                if self.link(source, library.name, path):
+                    library.path = path
+                    return True
+                
         # No direct linking possible
         return False
 

Added: installit/trunk/tools/lookup.py
===================================================================
--- installit/trunk/tools/lookup.py	                        (rev 0)
+++ installit/trunk/tools/lookup.py	2006-09-03 16:38:19 UTC (rev 23064)
@@ -0,0 +1,85 @@
+# $Id$
+#
+# vi:set ts=4 sw=4 sts=4 et ai nocindent:
+#
+# This program is free software; you can redistribute it and/or 
+# modify it under the terms of the GNU General Public License as 
+# published by the Free Software Foundation; either version 2 of the 
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but 
+# WITHOUT ANY WARRANTY; without even the implied warranty of 
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License 
+# along with this program; if not, write to the Free Software 
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
+# MA 02111-1307 USA
+
+import sys
+from os import path
+
+
+class Lookup:
+
+    def __init__(self):
+        # Build search paths list
+