115 return None |
118 return None |
116 return None |
119 return None |
117 |
120 |
118 for minorVersion in minorVersions: |
121 for minorVersion in minorVersions: |
119 versionStr = '{0}.{1}'.format(majorVersion, minorVersion) |
122 versionStr = '{0}.{1}'.format(majorVersion, minorVersion) |
120 exePath = getExePath(winreg.HKEY_CURRENT_USER, |
123 exePath = getExePath( |
|
124 winreg.HKEY_CURRENT_USER, |
121 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
125 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
122 |
126 |
123 if exePath is not None: |
127 if exePath is not None: |
124 executables.add(exePath) |
128 executables.add(exePath) |
125 exePath = getExePath(winreg.HKEY_LOCAL_MACHINE, |
129 exePath = getExePath( |
|
130 winreg.HKEY_LOCAL_MACHINE, |
126 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
131 winreg.KEY_WOW64_32KEY | winreg.KEY_READ, versionStr) |
127 |
132 |
128 # Even on Intel 64-bit machines it's 'AMD64' |
133 # Even on Intel 64-bit machines it's 'AMD64' |
129 if platform.machine() == 'AMD64': |
134 if platform.machine() == 'AMD64': |
130 if exePath is not None: |
135 if exePath is not None: |
131 executables.add(exePath) |
136 executables.add(exePath) |
132 exePath = getExePath(winreg.HKEY_CURRENT_USER, |
137 exePath = getExePath( |
|
138 winreg.HKEY_CURRENT_USER, |
133 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
139 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
134 |
140 |
135 if exePath is not None: |
141 if exePath is not None: |
136 executables.add(exePath) |
142 executables.add(exePath) |
137 exePath = getExePath(winreg.HKEY_LOCAL_MACHINE, |
143 exePath = getExePath( |
|
144 winreg.HKEY_LOCAL_MACHINE, |
138 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
145 winreg.KEY_WOW64_64KEY | winreg.KEY_READ, versionStr) |
139 |
146 |
140 if exePath is not None: |
147 if exePath is not None: |
141 executables.add(exePath) |
148 executables.add(exePath) |
142 else: |
149 else: |
143 # |
150 # |
144 # Linux, Unix ... |
151 # Linux, Unix ... |
145 cxfreezeScript = 'cxfreeze' |
152 cxfreezeScript = 'cxfreeze' |
146 scriptSuffixes = ["", |
153 scriptSuffixes = ["", "-python{0}".format(majorVersion)] |
147 "-python{0}".format(majorVersion)] |
|
148 for minorVersion in minorVersions: |
154 for minorVersion in minorVersions: |
149 scriptSuffixes.append( |
155 scriptSuffixes.append( |
150 "-python{0}.{1}".format(majorVersion, minorVersion)) |
156 "-python{0}.{1}".format(majorVersion, minorVersion)) |
151 # There could be multiple cxfreeze executables in the path |
157 # There could be multiple cxfreeze executables in the path |
152 # e.g. for different python variants |
158 # e.g. for different python variants |
153 path = Utilities.getEnvironmentEntry('PATH') |
159 path = Utilities.getEnvironmentEntry('PATH') |
154 # environment variable not defined |
160 # environment variable not defined |
155 if path is None: |
161 if path is None: |
156 return [] |
162 return [] |
157 |
163 |
158 # step 1: determine possible candidates |
164 # step 1: determine possible candidates |
159 exes = [] |
165 exes = [] |
160 dirs = path.split(os.pathsep) |
166 dirs = path.split(os.pathsep) |
161 for dir in dirs: |
167 for dir in dirs: |
253 return None, False |
260 return None, False |
254 |
261 |
255 project = e5App().getObject("Project") |
262 project = e5App().getObject("Project") |
256 menu = project.getMenu("Packagers") |
263 menu = project.getMenu("Packagers") |
257 if menu: |
264 if menu: |
258 self.__projectAct = E5Action(self.trUtf8('Use cx_freeze'), |
265 self.__projectAct = E5Action( |
259 self.trUtf8('Use cx_&freeze'), 0, 0, |
266 self.trUtf8('Use cx_freeze'), |
260 self, 'packagers_cxfreeze') |
267 self.trUtf8('Use cx_&freeze'), 0, 0, |
|
268 self, 'packagers_cxfreeze') |
261 self.__projectAct.setStatusTip( |
269 self.__projectAct.setStatusTip( |
262 self.trUtf8('Generate a distribution package using cx_freeze')) |
270 self.trUtf8('Generate a distribution package using cx_freeze')) |
263 self.__projectAct.setWhatsThis(self.trUtf8( |
271 self.__projectAct.setWhatsThis(self.trUtf8( |
264 """<b>Use cx_freeze</b>""" |
272 """<b>Use cx_freeze</b>""" |
265 """<p>Generate a distribution package using cx_freeze.""" |
273 """<p>Generate a distribution package using cx_freeze.""" |
266 """ The command is executed in the project path. All""" |
274 """ The command is executed in the project path. All""" |
267 """ files and directories must be given absolute or""" |
275 """ files and directories must be given absolute or""" |
268 """ relative to the project directory.</p>""" |
276 """ relative to the project directory.</p>""" |
269 )) |
277 )) |
270 self.__projectAct.triggered[()].connect(self.__cxfreeze) |
278 self.__projectAct.triggered[()].connect(self.__cxfreeze) |
271 project.addE5Actions([self.__projectAct]) |
279 project.addE5Actions([self.__projectAct]) |
272 menu.addAction(self.__projectAct) |
280 menu.addAction(self.__projectAct) |
273 project.showMenu.connect(self.__projectShowMenu) |
281 project.showMenu.connect(self.__projectShowMenu) |
295 @param menu reference to the menu (QMenu) |
304 @param menu reference to the menu (QMenu) |
296 """ |
305 """ |
297 if menuName == "Packagers": |
306 if menuName == "Packagers": |
298 if self.__projectAct is not None: |
307 if self.__projectAct is not None: |
299 self.__projectAct.setEnabled( |
308 self.__projectAct.setEnabled( |
300 e5App().getObject("Project").getProjectLanguage() in \ |
309 e5App().getObject("Project").getProjectLanguage() in |
301 ["Python", "Python2", "Python3"]) |
310 ["Python", "Python2", "Python3"]) |
302 |
311 |
303 def __loadTranslator(self): |
312 def __loadTranslator(self): |
304 """ |
313 """ |
305 Private method to load the translation file. |
314 Private method to load the translation file. |
306 """ |
315 """ |
314 loaded = translator.load(translation, locale_dir) |
323 loaded = translator.load(translation, locale_dir) |
315 if loaded: |
324 if loaded: |
316 self.__translator = translator |
325 self.__translator = translator |
317 e5App().installTranslator(self.__translator) |
326 e5App().installTranslator(self.__translator) |
318 else: |
327 else: |
319 print("Warning: translation file '{0}' could not be loaded."\ |
328 print("Warning: translation file '{0}' could not be" |
320 .format(translation)) |
329 " loaded.".format(translation)) |
321 print("Using default.") |
330 print("Using default.") |
322 |
331 |
323 def __cxfreeze(self): |
332 def __cxfreeze(self): |
324 """ |
333 """ |
325 Private slot to handle the cxfreeze execution. |
334 Private slot to handle the cxfreeze execution. |
326 """ |
335 """ |
327 project = e5App().getObject("Project") |
336 project = e5App().getObject("Project") |
328 if len(project.pdata["MAINSCRIPT"]) == 0: |
337 if len(project.pdata["MAINSCRIPT"]) == 0: |
329 # no main script defined |
338 # no main script defined |
330 E5MessageBox.critical(None, |
339 E5MessageBox.critical( |
|
340 self, |
331 self.trUtf8("cxfreeze"), |
341 self.trUtf8("cxfreeze"), |
332 self.trUtf8( |
342 self.trUtf8( |
333 """There is no main script defined for the current project."""), |
343 """There is no main script defined for the current""" |
|
344 """ project."""), |
334 E5MessageBox.StandardButtons(E5MessageBox.Abort)) |
345 E5MessageBox.StandardButtons(E5MessageBox.Abort)) |
335 return |
346 return |
336 |
347 |
337 majorVersionStr = project.getProjectLanguage() |
348 majorVersionStr = project.getProjectLanguage() |
338 exe = {"Python": exePy2, "Python2": exePy2, "Python3": exePy3}.get(majorVersionStr) |
349 exe = {"Python": exePy2, "Python2": exePy2, "Python3": exePy3}\ |
|
350 .get(majorVersionStr) |
339 if exe == []: |
351 if exe == []: |
340 E5MessageBox.critical(None, |
352 E5MessageBox.critical( |
|
353 self, |
341 self.trUtf8("cxfreeze"), |
354 self.trUtf8("cxfreeze"), |
342 self.trUtf8("""The cxfreeze executable could not be found.""")) |
355 self.trUtf8("""The cxfreeze executable could not be found.""")) |
343 return |
356 return |
344 |
357 |
345 # check if all files saved and errorfree before continue |
358 # check if all files saved and errorfree before continue |