def getAllPackages(self): """ Returns a list of all available packages provided by this host. """ result = [] items = self.packages.items() items.sort() for key, platforms in items: if self.perPlatform: # If we maintain a different answer per platform, # return all of them. pitems = platforms.items() pitems.sort() for pkey, package in pitems: result.append(package) else: # If we maintain a a host for the current platform # only (e.g. a client copy), then return only the # current platform, or no particular platform. package = platforms.get(PandaSystem.getPlatform(), None) if not package: package = platforms.get(None, None) if package: result.append(package) return result
def dummyAppRunner(tokens=[], argv=None): """ This function creates a dummy global AppRunner object, which is useful for testing running in a packaged environment without actually bothering to package up the application. Call this at the start of your application to enable it. It places the current working directory under /mf, as if it were mounted from a packed multifile. It doesn't convert egg files to bam files, of course; and there are other minor differences from running in an actual packaged environment. But it can be a useful first-look sanity check. """ if AppRunnerGlobal.appRunner: print "Already have AppRunner, not creating a new one." return AppRunnerGlobal.appRunner appRunner = AppRunner() appRunner.dummy = True AppRunnerGlobal.appRunner = appRunner platform = PandaSystem.getPlatform() version = PandaSystem.getPackageVersionString() hostUrl = PandaSystem.getPackageHostUrl() if platform.startswith('win'): rootDir = Filename(Filename.getUserAppdataDirectory(), 'Panda3D') elif platform.startswith('osx'): rootDir = Filename(Filename.getHomeDirectory(), 'Library/Caches/Panda3D') else: rootDir = Filename(Filename.getHomeDirectory(), '.panda3d') appRunner.rootDir = rootDir appRunner.logDirectory = Filename(rootDir, 'log') # Of course we will have the panda3d application loaded. appRunner.addPackageInfo('panda3d', platform, version, hostUrl) appRunner.tokens = tokens appRunner.tokenDict = dict(tokens) if argv is None: argv = sys.argv appRunner.argv = argv appRunner.altHost = appRunner.tokenDict.get('alt_host', None) appRunner.p3dInfo = None appRunner.p3dPackage = None # Mount the current directory under the multifileRoot, as if it # were coming from a multifile. cwd = ExecutionEnvironment.getCwd() vfs = VirtualFileSystem.getGlobalPtr() vfs.mount(cwd, appRunner.multifileRoot, vfs.MFReadOnly) appRunner.initPackedAppEnvironment() return appRunner
def dummyAppRunner(tokens = [], argv = None): """ This function creates a dummy global AppRunner object, which is useful for testing running in a packaged environment without actually bothering to package up the application. Call this at the start of your application to enable it. It places the current working directory under /mf, as if it were mounted from a packed multifile. It doesn't convert egg files to bam files, of course; and there are other minor differences from running in an actual packaged environment. But it can be a useful first-look sanity check. """ if AppRunnerGlobal.appRunner: print "Already have AppRunner, not creating a new one." return AppRunnerGlobal.appRunner appRunner = AppRunner() appRunner.dummy = True AppRunnerGlobal.appRunner = appRunner platform = PandaSystem.getPlatform() version = PandaSystem.getPackageVersionString() hostUrl = PandaSystem.getPackageHostUrl() if platform.startswith('win'): rootDir = Filename(Filename.getUserAppdataDirectory(), 'Panda3D') elif platform.startswith('osx'): rootDir = Filename(Filename.getHomeDirectory(), 'Library/Caches/Panda3D') else: rootDir = Filename(Filename.getHomeDirectory(), '.panda3d') appRunner.rootDir = rootDir appRunner.logDirectory = Filename(rootDir, 'log') # Of course we will have the panda3d application loaded. appRunner.addPackageInfo('panda3d', platform, version, hostUrl) appRunner.tokens = tokens appRunner.tokenDict = dict(tokens) if argv is None: argv = sys.argv appRunner.argv = argv appRunner.altHost = appRunner.tokenDict.get('alt_host', None) appRunner.p3dInfo = None appRunner.p3dPackage = None # Mount the current directory under the multifileRoot, as if it # were coming from a multifile. cwd = ExecutionEnvironment.getCwd() vfs = VirtualFileSystem.getGlobalPtr() vfs.mount(cwd, appRunner.multifileRoot, vfs.MFReadOnly) appRunner.initPackedAppEnvironment() return appRunner
def build(self, output, platform=None, extraTokens={}): """ Builds a standalone executable and stores it into the path indicated by the 'output' argument. You can specify to build for a different platform by altering the 'platform' argument. """ if platform == None: platform = PandaSystem.getPlatform() vfs = VirtualFileSystem.getGlobalPtr() for package in self.host.getPackages(name="p3dembed", platform=platform): if not package.downloadDescFile(self.http): Standalone.notify.warning( " -> %s failed for platform %s" % (package.packageName, package.platform)) continue if not package.downloadPackage(self.http): Standalone.notify.warning( " -> %s failed for platform %s" % (package.packageName, package.platform)) continue # Figure out where p3dembed might be now. if package.platform.startswith("win"): # Use p3dembedw unless console_environment was set. if extraTokens.get("console_environment", self.tokens.get("console_environment", 0)) != 0: p3dembed = Filename( self.host.hostDir, "p3dembed/%s/p3dembed.exe" % package.platform) else: p3dembed = Filename( self.host.hostDir, "p3dembed/%s/p3dembedw.exe" % package.platform) # Fallback for older p3dembed versions if not vfs.exists(p3dembed): Filename(self.host.hostDir, "p3dembed/%s/p3dembed.exe" % package.platform) else: p3dembed = Filename(self.host.hostDir, "p3dembed/%s/p3dembed" % package.platform) if not vfs.exists(p3dembed): Standalone.notify.warning( " -> %s failed for platform %s" % (package.packageName, package.platform)) continue return self.embed(output, p3dembed, extraTokens) Standalone.notify.error("Failed to build standalone for platform %s" % platform)
def build(self, output, platform=None): """ Builds (graphical) installers and stores it into the path indicated by the 'output' argument. You can specify to build for a different platform by altering the 'platform' argument. If 'output' is a directory, the installer will be stored in it. """ if platform == None: platform = PandaSystem.getPlatform() if platform == "win32": self.buildNSIS(output, platform) return elif "_" in platform: osname, arch = platform.split("_", 1) if osname == "linux": self.buildDEB(output, platform) self.buildArch(output, platform) return elif osname == "osx": self.buildPKG(output, platform) return Installer.notify.info("Ignoring unknown platform " + platform)
def build(self, output, platform=None): """ Builds (graphical) installers and stores it into the path indicated by the 'output' argument. You can specify to build for a different platform by altering the 'platform' argument. If 'output' is a directory, the installer will be stored in it. """ if platform == None: platform = PandaSystem.getPlatform() if platform == "win32": self.buildNSIS(output, platform) return elif "_" in platform: osname, arch = platform.split("_", 1) if osname == "linux": self.buildDEB(output, platform) self.buildArch(output, platform) return elif osname == "osx": self.buildPKG(output, platform) return Installer.notify.info("Ignoring unknown platform " + platform)
def build(self, output, platform=None, extraTokens={}): """ Builds a standalone executable and stores it into the path indicated by the 'output' argument. You can specify to build for a different platform by altering the 'platform' argument. """ if platform == None: platform = PandaSystem.getPlatform() vfs = VirtualFileSystem.getGlobalPtr() for package in self.host.getPackages(name="p3dembed", platform=platform): if not package.downloadDescFile(self.http): Standalone.notify.warning(" -> %s failed for platform %s" % (package.packageName, package.platform)) continue if not package.downloadPackage(self.http): Standalone.notify.warning(" -> %s failed for platform %s" % (package.packageName, package.platform)) continue # Figure out where p3dembed might be now. if package.platform.startswith("win"): # Use p3dembedw unless console_environment was set. if extraTokens.get("console_environment", self.tokens.get("console_environment", 0)) != 0: p3dembed = Filename(self.host.hostDir, "p3dembed/%s/p3dembed.exe" % package.platform) else: p3dembed = Filename(self.host.hostDir, "p3dembed/%s/p3dembedw.exe" % package.platform) # Fallback for older p3dembed versions if not vfs.exists(p3dembed): Filename(self.host.hostDir, "p3dembed/%s/p3dembed.exe" % package.platform) else: p3dembed = Filename(self.host.hostDir, "p3dembed/%s/p3dembed" % package.platform) if not vfs.exists(p3dembed): Standalone.notify.warning(" -> %s failed for platform %s" % (package.packageName, package.platform)) continue return self.embed(output, p3dembed, extraTokens) Standalone.notify.error("Failed to build standalone for platform %s" % platform)
def getPackage(self, name, version, platform = None): """ Returns a PackageInfo that matches the indicated name and version and the indicated platform or the current runtime platform, if one is provided by this host, or None if not. """ assert self.hasContentsFile platforms = self.packages.get((name, version or None), {}) if platform is not None: # In this case, we are looking for a specific platform # only. return platforms.get(platform or None, None) # We are looking for one matching the current runtime # platform. First, look for a package matching the current # platform exactly. package = platforms.get(PandaSystem.getPlatform(), None) # If not found, look for one matching no particular platform. if not package: package = platforms.get(None, None) return package
if not outputDir: print '\nYou must name the output directory with the -o parameter.\n' sys.exit(1) if not outputDir.exists(): print '\nThe specified output directory does not exist!\n' sys.exit(1) elif not outputDir.isDirectory(): print '\nThe specified output directory is a file!\n' sys.exit(1) if deploy_mode == 'standalone': s = Standalone(appFilename, tokens) s.basename = shortname if currentPlatform: platform = PandaSystem.getPlatform() if platform.startswith("win"): s.build(Filename(outputDir, shortname + ".exe"), platform) else: s.build(Filename(outputDir, shortname), platform) elif len(platforms) == 0: s.buildAll(outputDir) else: for platform in platforms: if platform.startswith("win"): s.build( Filename(outputDir, platform + "/" + shortname + ".exe"), platform) else: s.build(Filename(outputDir, platform + "/" + shortname), platform)
if not outputDir: print "\nYou must name the output directory with the -o parameter.\n" sys.exit(1) if not outputDir.exists(): print "\nThe specified output directory does not exist!\n" sys.exit(1) elif not outputDir.isDirectory(): print "\nThe specified output directory is a file!\n" sys.exit(1) if deploy_mode == "standalone": s = Standalone(appFilename, tokens) s.basename = shortname if currentPlatform: platform = PandaSystem.getPlatform() if platform.startswith("win"): s.build(Filename(outputDir, shortname + ".exe"), platform) else: s.build(Filename(outputDir, shortname), platform) elif len(platforms) == 0: s.buildAll(outputDir) else: for platform in platforms: if platform.startswith("win"): s.build(Filename(outputDir, platform + "/" + shortname + ".exe"), platform) else: s.build(Filename(outputDir, platform + "/" + shortname), platform) elif deploy_mode == "installer": if includeRequires: