28 # Start-of-Header |
22 # Start-of-Header |
29 name = "CxFreeze Plugin" |
23 name = "CxFreeze Plugin" |
30 author = "Detlev Offenbach <detlev@die-offenbachs.de>" |
24 author = "Detlev Offenbach <detlev@die-offenbachs.de>" |
31 autoactivate = True |
25 autoactivate = True |
32 deactivateable = True |
26 deactivateable = True |
33 version = "6.1.0" |
27 version = "7.0.0" |
34 className = "CxFreezePlugin" |
28 className = "CxFreezePlugin" |
35 packageName = "CxFreeze" |
29 packageName = "CxFreeze" |
36 shortDescription = "Show the CxFreeze dialogs." |
30 shortDescription = "Show the CxFreeze dialogs." |
37 longDescription = ( |
31 longDescription = ( |
38 """This plugin implements the CxFreeze dialogs.""" |
32 """This plugin implements the CxFreeze dialogs.""" |
39 """ CxFreeze is used to generate a distribution package.""" |
33 """ CxFreeze is used to generate a distribution package.""" |
40 ) |
34 ) |
41 needsRestart = False |
35 needsRestart = False |
42 pyqtApi = 2 |
36 pyqtApi = 2 |
43 python2Compatible = True |
|
44 # End-of-Header |
37 # End-of-Header |
45 |
38 |
46 error = "" |
39 error = "" |
47 |
40 |
48 exePy2 = [] |
|
49 exePy3 = [] |
41 exePy3 = [] |
50 |
42 |
51 |
43 |
52 def exeDisplayDataList(): |
44 def exeDisplayDataList(): |
53 """ |
45 """ |
87 @return names of the executable (list) |
79 @return names of the executable (list) |
88 """ |
80 """ |
89 # Determine Python Version |
81 # Determine Python Version |
90 if majorVersion == 3: |
82 if majorVersion == 3: |
91 minorVersions = range(10) |
83 minorVersions = range(10) |
92 elif majorVersion == 2: |
|
93 minorVersions = range(6, 8) |
|
94 else: |
84 else: |
95 return [] |
85 return [] |
96 |
86 |
97 executables = set() |
87 executables = set() |
98 if Utilities.isWindowsPlatform(): |
88 if Utilities.isWindowsPlatform(): |
183 exe = os.path.join(directory, cxfreezeScript + suffix) |
173 exe = os.path.join(directory, cxfreezeScript + suffix) |
184 if os.access(exe, os.X_OK): |
174 if os.access(exe, os.X_OK): |
185 exes.append(exe) |
175 exes.append(exe) |
186 |
176 |
187 # step 2: determine the Python variant |
177 # step 2: determine the Python variant |
188 _exePy2 = set() |
|
189 _exePy3 = set() |
178 _exePy3 = set() |
190 versionArgs = ["-c", "import sys; print(sys.version_info[0])"] |
179 versionArgs = ["-c", "import sys; print(sys.version_info[0])"] |
191 for exe in exes: |
180 for exe in exes: |
192 try: |
181 try: |
193 f = open(exe, "r") |
182 f = open(exe, "r") |
199 # get a QByteArray of the output |
188 # get a QByteArray of the output |
200 versionBytes = process.readAllStandardOutput() |
189 versionBytes = process.readAllStandardOutput() |
201 versionStr = str(versionBytes, encoding='utf-8').strip() |
190 versionStr = str(versionBytes, encoding='utf-8').strip() |
202 if versionStr == "3": |
191 if versionStr == "3": |
203 _exePy3.add(exe) |
192 _exePy3.add(exe) |
204 elif versionStr == "2": |
|
205 _exePy2.add(exe) |
|
206 finally: |
193 finally: |
207 f.close() |
194 f.close() |
208 |
195 |
209 executables = _exePy3 if majorVersion == 3 else _exePy2 |
196 executables = _exePy3 |
210 |
197 |
211 # sort items, the probably newest topmost |
198 # sort items, the probably newest topmost |
212 executables = list(executables) |
199 executables = list(executables) |
213 executables.sort(reverse=True) |
200 executables.sort(reverse=True) |
214 return executables |
201 return executables |
218 """ |
205 """ |
219 Restricted function to check the availability of cxfreeze. |
206 Restricted function to check the availability of cxfreeze. |
220 |
207 |
221 @return flag indicating availability (boolean) |
208 @return flag indicating availability (boolean) |
222 """ |
209 """ |
223 global error, exePy2, exePy3 |
210 global error, exePy3 |
224 |
211 |
225 exePy2 = _findExecutable(2) |
|
226 exePy3 = _findExecutable(3) |
212 exePy3 = _findExecutable(3) |
227 if (exePy2 + exePy3) == []: |
213 if exePy3 == []: |
228 if Utilities.isWindowsPlatform(): |
214 if Utilities.isWindowsPlatform(): |
229 error = QCoreApplication.translate( |
215 error = QCoreApplication.translate( |
230 "CxFreezePlugin", |
216 "CxFreezePlugin", |
231 "The cxfreeze.bat executable could not be found." |
217 "The cxfreeze.bat executable could not be found." |
232 "Did you run the cxfreeze-postinstall script?") |
218 "Did you run the cxfreeze-postinstall script?") |
329 @param menu reference to the menu (QMenu) |
315 @param menu reference to the menu (QMenu) |
330 """ |
316 """ |
331 if menuName == "Packagers": |
317 if menuName == "Packagers": |
332 if self.__projectAct is not None: |
318 if self.__projectAct is not None: |
333 self.__projectAct.setEnabled( |
319 self.__projectAct.setEnabled( |
334 e5App().getObject("Project").getProjectLanguage() in |
320 e5App().getObject("Project").getProjectLanguage() == |
335 ["Python", "Python2", "Python3"]) |
321 "Python3" |
|
322 ) |
336 |
323 |
337 def __loadTranslator(self): |
324 def __loadTranslator(self): |
338 """ |
325 """ |
339 Private method to load the translation file. |
326 Private method to load the translation file. |
340 """ |
327 """ |
369 """ project."""), |
356 """ project."""), |
370 E5MessageBox.StandardButtons(E5MessageBox.Abort)) |
357 E5MessageBox.StandardButtons(E5MessageBox.Abort)) |
371 return |
358 return |
372 |
359 |
373 majorVersionStr = project.getProjectLanguage() |
360 majorVersionStr = project.getProjectLanguage() |
374 exe = {"Python": exePy2, |
361 exe = {"Python3": exePy3}.get(majorVersionStr) |
375 "Python2": exePy2, |
|
376 "Python3": exePy3}.get(majorVersionStr) |
|
377 if exe == []: |
362 if exe == []: |
378 E5MessageBox.critical( |
363 E5MessageBox.critical( |
379 self.__ui, |
364 self.__ui, |
380 self.tr("cxfreeze"), |
365 self.tr("cxfreeze"), |
381 self.tr("""The cxfreeze executable could not be found.""")) |
366 self.tr("""The cxfreeze executable could not be found.""")) |