Add harvard tag.
[bertos.git] / wizard / BToolchainPage.py
index 4c832c4a97e31b75f194587466b6aef9bef1f535..8a1edc1e43ddc8d0f9aa4bd9d6789868ae3bb87d 100644 (file)
@@ -45,16 +45,16 @@ class BToolchainPage(BWizardPage):
         self.pageContent.toolchainList.clear()
     
     def _selectionChanged(self):
-        if self.pageContent.toolchainList.currentIndex != -1:
+        if self.pageContent.toolchainList.currentRow() != -1:
             infos = collections.defaultdict(lambda: unicode("not defined"))
             infos.update(qvariant_converter.getStringDict(self.pageContent.toolchainList.currentItem().data(Qt.UserRole)))
-            self.pageContent.infoLabel.setText("GCC " + infos["version"] + " (" + infos["build"] + ")\nTarget: " + infos["target"] + "\nPath: " + infos["path"])
+            self.pageContent.infoLabel.setText("GCC " + infos["version"] + " (" + infos["build"] + ")\nTarget: " + infos["target"] + "\nPath: " + os.path.normpath(infos["path"]))
             self.pageContent.infoLabel.setVisible(True)
             self.emit(SIGNAL("completeChanged()"))
     
     def _search(self):
         dirList = self.searchDirList()
-        if(self.pathSearch()):
+        if self.pathSearch():
             dirList += [element for element in bertos_utils.getSystemPath()]
         toolchainList = bertos_utils.findToolchains(dirList)
         storedToolchains = self.toolchains()
@@ -79,11 +79,12 @@ class BToolchainPage(BWizardPage):
         newData.update(infos)
         item.setData(Qt.UserRole, qvariant_converter.convertStringDict(newData))
         needed = self._projectInfoRetrieve("CPU_INFOS")
-        if infos["target"].find(needed["TOOLCHAIN"]) != -1:
+        if "target" in infos.keys() and infos["target"].find(needed["TOOLCHAIN"]) != -1:
             item.setIcon(QIcon(":/images/ok.png"))
         else:
             item.setIcon(QIcon(":/images/warning.png"))
-        item.setText("GCC " + infos["version"] + " - " + infos["target"])
+        if "version" in infos.keys() and "target" in infos.keys():
+            item.setText("GCC " + infos["version"] + " - " + infos["target"])
     
     def _invalidItem(self, index):
         item = self.pageContent.toolchainList.item(index)
@@ -113,23 +114,38 @@ class BToolchainPage(BWizardPage):
         search.exec_()
     
     def validateAllToolchains(self):
+        QApplication.instance().setOverrideCursor(Qt.WaitCursor)
         for i in range(self.pageContent.toolchainList.count()):
             self.validateToolchain(i)
+        QApplication.instance().restoreOverrideCursor()
     
     def validateToolchain(self, i):
         filename = qvariant_converter.getStringDict(self.pageContent.toolchainList.item(i).data(Qt.UserRole))["path"]
-        self._validationProcess = QProcess()
-        self._validationProcess.start(filename, ["-v"])
-        self._validationProcess.waitForStarted(1000)
-        if self._validationProcess.waitForFinished(200):
-            description = str(self._validationProcess.readAllStandardError())
-            infos = bertos_utils.getToolchainInfo(description)
-            if len(infos.keys()) >= 4:
-                self._validItem(i, infos)
+        valid = False
+        info = {}
+        ## Check for the other tools of the toolchain
+        for tool in TOOLCHAIN_ITEMS:
+            if os.path.exists(filename.replace("gcc", tool)):
+                valid = True
+            else:
+                valid = False
+                break
+        ## Try to retrieve the informations about the toolchain only for the valid toolchains
+        if valid:
+            self._validationProcess = QProcess()
+            self._validationProcess.start(filename, ["-v"])
+            self._validationProcess.waitForStarted(1000)
+            if self._validationProcess.waitForFinished(200):
+                description = str(self._validationProcess.readAllStandardError())
+                info = bertos_utils.getToolchainInfo(description)
+                if len(info.keys()) >= 4:
+                    valid = True
             else:
-                self._invalidItem(i)
+                self._validationProcess.kill()
+        ## Add the item in the list with the appropriate associate data.
+        if valid:
+            self._validItem(i, info)
         else:
-            self._validationProcess.kill()
             self._invalidItem(i)
         toolchains = self.toolchains()
         toolchains[filename] = True