Commits

Thomas Kluyver committed 665fd8b

Automatically detect Qt applications & search more locations for qt_menu.nib

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'),
-        ('qt-app=', None, 'Make specific changes for a Qt application.'),
+        ('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_app = False
+        self.qt_menu_nib = False
 
     def finalize_options(self):
         pass
                     subprocess.call(('install_name_tool', '-change', referencedFile, newReference,
                             filepath))
 
-    def qt_tweaks(self):
-        self.copy_tree('/opt/local/lib/Resources/qt_menu.nib',\
-                       os.path.join(self.resourcesDir, 'qt_menu.nib'))
-        # This needs to exist, but needn't have any content
+    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()
 
         self.execute(self.setRelativeReferencePaths,())
         
         # For a Qt application, run some tweaks
-        if self.qt_app:
-            self.execute(self.qt_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.