ProjectController.py
changeset 1685 578a46fb6b30
parent 1680 6db967480b7d
child 1708 24416137cda7
--- a/ProjectController.py	Tue May 23 16:06:29 2017 +0300
+++ b/ProjectController.py	Tue May 30 17:09:33 2017 +0300
@@ -88,25 +88,50 @@
 
 class Iec2CSettings():
     def __init__(self):
-        self.iec2c = os.path.join(base_folder, "matiec", "iec2c"+(".exe" if wx.Platform == '__WXMSW__' else ""))
+        self.iec2c = None
         self.iec2c_buildopts = None
-        self.ieclib_path   = os.path.join(base_folder, "matiec", "lib")
-        self.ieclib_c_path = None
-
+        self.ieclib_path   = self.findLibPath()
+        self.ieclib_c_path = self.findLibCPath()
+
+    def findObject(self, paths, test):
+        path=None
+        for p in paths:
+            if test(p):
+                path = p
+                break           
+        return path
+        
+    def findCmd(self):
+        cmd="iec2c"+(".exe" if wx.Platform == '__WXMSW__' else "")
+        paths=[
+            os.path.join(base_folder, "matiec")
+        ]
+        path = self.findObject(paths, lambda p:os.path.isfile(os.path.join(p, cmd)))
+
+        # otherwise use iec2c from PATH
+        if path is not None:
+            cmd=os.path.join(path, cmd)
+
+        return cmd
+    
+    def findLibPath(self):
+        paths=[
+            os.path.join(base_folder, "matiec", "lib"),
+            "/usr/lib/matiec"
+        ]
+        path = self.findObject(paths, lambda p:os.path.isfile(os.path.join(p, "ieclib.txt")))
+        return path
+        
     def findLibCPath(self):
-        path=""
+        path=None
         paths=[
-            os.path.join(base_folder, "matiec", "lib", "C"),
-            os.path.join(base_folder, "matiec", "lib") ]
-        for p in paths:
-            filename=os.path.join(p, "iec_types.h")
-            if (os.path.isfile(filename)):
-                path = p
-                break
+            os.path.join(self.ieclib_path, "C"),
+            self.ieclib_path]
+        path = self.findObject(paths, lambda p:os.path.isfile(os.path.join(p, "iec_types.h")))
         return path
 
     def findSupportedOptions(self):
-        buildcmd = "\"%s\" -h"%(self.iec2c)
+        buildcmd = "\"%s\" -h"%(self.getCmd())
         options =["-f", "-l", "-p"]
 
         buildopt = ""
@@ -123,6 +148,8 @@
         return buildopt
 
     def getCmd(self):
+        if self.iec2c is None:
+            self.iec2c = self.findCmd()
         return self.iec2c
 
     def getOptions(self):