Commits

Anthony Tuininga committed 5391e27 Merge

Merged in takluyver/cx_freeze/macqt (pull request #5)

Comments (0)

Files changed (1)

cx_Freeze/macdist.py

 
     user_options = [
         ('bundle-iconfile=', None, 'Name of the application bundle icon file as stored in the '
-                'Info.plist file')
+                'Info.plist file'),
+        ('qt-menu-nib=', None, 'Location of qt_menu.nib folder for Qt applications. '
+                'Will be auto-detected by default.'),
     ]
 
     def initialize_options(self):
         self.bundle_iconfile = 'icon.icns'
+        self.qt_menu_nib = False
 
     def finalize_options(self):
         pass
                     subprocess.call(('install_name_tool', '-change', referencedFile, newReference,
                             filepath))
 
+    def find_qt_menu_nib(self):
+        """Returns a list of locations to try for a qt_menu.nib folder, or None
+        if this is not a Qt application.
+        """
+        if self.qt_menu_nib:
+            return [self.qt_menu_nib]
+        elif any(n.startswith("PyQt4.QtCore" for n in os.listdir(self.binDir)):
+            from PyQt4 import QtCore
+        elif any(n.startswith("PySide.QtCore" for n in os.listdir(self.binDir)):
+            from PyQt4 import QtCore
+        else:
+            return None
+            
+        libpath = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.LibrariesPath)
+        return [os.path.join(libpath, 'QtGui.framework/Resources/qt_menu.nib'),
+                os.path.join(libpath, 'Resources/qt_menu.nib'),
+               ]
+            
+    def prepare_qt_app(self):
+        """Add resource files for a Qt application. Should do nothing if the
+        application does not use QtCore.
+        """
+        nib_locn = self.find_qt_menu_nib()
+        if nib_locn is None:
+            return
+        
+        # Copy qt_menu.nib
+        self.copy_tree(nib_locn, os.path.join(self.resourcesDir, 'qt_menu.nib'))
+        
+        # qt.conf needs to exist, but needn't have any content
+        f = open(os.path.join(self.resourcesDir, 'qt.conf'), "w")
+        f.close()
+
     def run(self):
         self.run_command('build')
         build = self.get_finalized_command('build')
 
         # Make all references to libraries relative
         self.execute(self.setRelativeReferencePaths,())
+        
+        # For a Qt application, run some tweaks
+        self.execute(self.prepare_qt_app, ())
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.