+ self.resolveDependancies(executable)
+
+ self.findPluginsPath()
+ self.installPlugins(requestedPlugins)
+ if not skipInstallQtConf:
+ self.installQtConf()
+
+ def qtProperty(self, qtProperty):
+ """
+ Query persistent property of Qt via qmake
+ """
+ VALID_PROPERTIES = ['QT_INSTALL_PREFIX',
+ 'QT_INSTALL_DATA',
+ 'QT_INSTALL_DOCS',
+ 'QT_INSTALL_HEADERS',
+ 'QT_INSTALL_LIBS',
+ 'QT_INSTALL_BINS',
+ 'QT_INSTALL_PLUGINS',
+ 'QT_INSTALL_IMPORTS',
+ 'QT_INSTALL_TRANSLATIONS',
+ 'QT_INSTALL_CONFIGURATION',
+ 'QT_INSTALL_EXAMPLES',
+ 'QT_INSTALL_DEMOS',
+ 'QMAKE_MKSPECS',
+ 'QMAKE_VERSION',
+ 'QT_VERSION'
+ ]
+ if qtProperty not in VALID_PROPERTIES:
+ return None
+
+ qmakeProcess = Popen('qmake -query %s' % qtProperty, shell=True, stdout=PIPE, stderr=PIPE)
+ result = qmakeProcess.stdout.read().strip()
+ qmakeProcess.stdout.close()
+ qmakeProcess.wait()
+ return result
+
+ def findFrameworkPath(self):
+ self.sourceFrameworkPath = self.qtProperty('QT_INSTALL_LIBS')
+
+ def findPluginsPath(self):
+ self.sourcePluginsPath = self.qtProperty('QT_INSTALL_PLUGINS')
+
+ def findPlugin(self, pluginname):
+ qmakeProcess = Popen('find %s -name %s' % (self.sourcePluginsPath, pluginname), shell=True, stdout=PIPE, stderr=PIPE)
+ result = qmakeProcess.stdout.read().strip()
+ qmakeProcess.stdout.close()
+ qmakeProcess.wait()
+ if not result:
+ raise OSError
+ return result
+
+ def installPlugins(self, requestedPlugins):
+ try:
+ os.mkdir(self.pluginDir)
+ except:
+ pass
+
+ for plugin in requestedPlugins:
+ if not plugin.isalnum():
+ print "Skipping library '%s'..." % plugin
+ continue
+
+ pluginName = "lib%s.dylib" % plugin
+ pluginSource = ''
+ try:
+ pluginSource = self.findPlugin(pluginName)
+ except OSError:
+ print "WARNING: Requested library does not exist: '%s'" % plugin
+ continue
+
+ pluginSubDir = os.path.dirname(pluginSource)
+ pluginSubDir = pluginSubDir.replace(self.sourcePluginsPath, '').strip('/')
+ try:
+ os.mkdir("%s/%s" % (self.pluginDir, pluginSubDir))
+ except OSError:
+ pass
+
+ os.system('cp "%s" "%s/%s"' % (pluginSource, self.pluginDir, pluginSubDir))
+
+ self.resolveDependancies("%s/%s/%s" % (self.pluginDir, pluginSubDir, pluginName))
+
+ def installQtConf(self):
+ qtConfName = self.appDir + "/qt.conf"
+ qtConfContent = QT_CONFIG_NOBUNDLE
+ if self.bundle:
+ qtConfContent = QT_CONFIG
+ qtConfName = self.appDir + "/Resources/qt.conf"
+
+ qtConf = open(qtConfName, 'w')
+ qtConf.write(qtConfContent)
+ qtConf.close()
+
+ def resolveDependancies(self, obj):
+ # obj must be either an application binary or a framework library
+ # print "resolving deps for:", obj
+ for framework, lib in self.determineDependancies(obj):
+ self.installFramework(framework)
+ self.changeDylPath(obj, framework, lib)