summaryrefslogtreecommitdiffstats
path: root/b2g/simulator/build_xpi.py
diff options
context:
space:
mode:
Diffstat (limited to 'b2g/simulator/build_xpi.py')
-rw-r--r--b2g/simulator/build_xpi.py148
1 files changed, 0 insertions, 148 deletions
diff --git a/b2g/simulator/build_xpi.py b/b2g/simulator/build_xpi.py
deleted file mode 100644
index 392be09b2..000000000
--- a/b2g/simulator/build_xpi.py
+++ /dev/null
@@ -1,148 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-# Generate xpi for the simulator addon by:
-# - building a special gaia profile for it, as we need:
-# * more languages, and,
-# * less apps
-# than b2g desktop's one
-# - retrieve usefull app version metadata from the build system
-# - finally, use addon sdk's cfx tool to build the addon xpi
-# that ships:
-# * b2g desktop runtime
-# * gaia profile
-
-import sys, os, re, subprocess
-from mozbuild.preprocessor import Preprocessor
-from mozbuild.base import MozbuildObject
-from mozbuild.util import ensureParentDir
-from mozpack.mozjar import JarWriter
-from zipfile import ZipFile
-from distutils.version import LooseVersion
-
-ftp_root_path = "/pub/mozilla.org/labs/fxos-simulator"
-UPDATE_URL = "https://ftp.mozilla.org" + ftp_root_path + "/%(update_path)s/update.rdf"
-XPI_NAME = "fxos-simulator-%(version)s-%(platform)s.xpi"
-
-class GaiaBuilder(object):
- def __init__(self, build, gaia_path):
- self.build = build
- self.gaia_path = gaia_path
-
- def clean(self):
- self.build._run_make(target="clean", directory=self.gaia_path)
-
- def profile(self, env):
- self.build._run_make(target="profile", directory=self.gaia_path, num_jobs=1, silent=False, append_env=env)
-
- def override_prefs(self, srcfile):
- # Note that each time we call `make profile` in gaia, a fresh new pref file is created
- # cat srcfile >> profile/user.js
- with open(os.path.join(self.gaia_path, "profile", "user.js"), "a") as userJs:
- userJs.write(open(srcfile).read())
-
-def preprocess_file(src, dst, version, app_buildid, update_url):
- ensureParentDir(dst)
-
- defines = {
- "ADDON_ID": "fxos_" + version.replace(".", "_") + "_simulator@mozilla.org",
- # (reduce the app build id to only the build date
- # as addon manager doesn't handle big ints in addon versions)
- "ADDON_VERSION": ("%s.%s" % (version, app_buildid[:8])),
- "ADDON_NAME": "Firefox OS " + version + " Simulator",
- "ADDON_DESCRIPTION": "a Firefox OS " + version + " simulator",
- "ADDON_UPDATE_URL": update_url
- }
- pp = Preprocessor(defines=defines)
- pp.do_filter("substitution")
- with open(dst, "w") as output:
- with open(src, "r") as input:
- pp.processFile(input=input, output=output)
-
-def add_dir_to_zip(jar, top, pathInZip, blacklist=()):
- for dirpath, subdirs, files in os.walk(top):
- dir_relpath = os.path.relpath(dirpath, top)
- if dir_relpath.startswith(blacklist):
- continue
- for filename in files:
- relpath = os.path.join(dir_relpath, filename)
- if relpath in blacklist:
- continue
- path = os.path.normpath(os.path.join(pathInZip, relpath))
- file = open(os.path.join(dirpath, filename), "rb")
- mode = os.stat(os.path.join(dirpath, filename)).st_mode
- jar.add(path.encode("ascii"), file, mode=mode)
-
-def add_file_to_zip(jar, path, pathInZip):
- file = open(path, "rb")
- mode = os.stat(path).st_mode
- jar.add(pathInZip.encode("ascii"), file, mode=mode)
-
-def main(platform):
- build = MozbuildObject.from_environment()
- topsrcdir = build.topsrcdir
- distdir = build.distdir
-
- srcdir = os.path.join(topsrcdir, "b2g", "simulator")
-
- app_buildid = open(os.path.join(build.topobjdir, "config", "buildid")).read().strip()
-
- # The simulator uses a shorter version string,
- # it only keeps the major version digits A.B
- # whereas MOZ_B2G_VERSION is A.B.C.D
- b2g_version = build.config_environment.defines["MOZ_B2G_VERSION"].replace('"', '')
- version = ".".join(str(n) for n in LooseVersion(b2g_version).version[0:2])
-
- # Build a gaia profile specific to the simulator in order to:
- # - disable the FTU
- # - set custom prefs to enable devtools debugger server
- # - set custom settings to disable lockscreen and screen timeout
- # - only ship production apps
- gaia_path = build.config_environment.substs["GAIADIR"]
- builder = GaiaBuilder(build, gaia_path)
- builder.clean()
- env = {
- "NOFTU": "1",
- "GAIA_APP_TARGET": "production",
- "SETTINGS_PATH": os.path.join(srcdir, "custom-settings.json")
- }
- builder.profile(env)
- builder.override_prefs(os.path.join(srcdir, "custom-prefs.js"))
-
- # Build the simulator addon xpi
- xpi_name = XPI_NAME % {"version": version, "platform": platform}
- xpi_path = os.path.join(distdir, xpi_name)
-
- update_path = "%s/%s" % (version, platform)
- update_url = UPDATE_URL % {"update_path": update_path}
-
- # Preprocess some files...
- manifest = os.path.join(build.topobjdir, "b2g", "simulator", "install.rdf")
- preprocess_file(os.path.join(srcdir, "install.rdf.in"),
- manifest,
- version,
- app_buildid,
- update_url)
-
- with JarWriter(xpi_path, optimize=False) as zip:
- # Ship addon files into the .xpi
- add_file_to_zip(zip, manifest, "install.rdf")
- add_file_to_zip(zip, os.path.join(srcdir, "bootstrap.js"), "bootstrap.js")
- add_file_to_zip(zip, os.path.join(srcdir, "icon.png"), "icon.png")
- add_file_to_zip(zip, os.path.join(srcdir, "icon64.png"), "icon64.png")
-
- # Ship b2g-desktop, but prevent its gaia profile to be shipped in the xpi
- add_dir_to_zip(zip, os.path.join(distdir, "b2g"), "b2g",
- ("gaia", "B2G.app/Contents/MacOS/gaia",
- "B2G.app/Contents/Resources/gaia"))
- # Then ship our own gaia profile
- add_dir_to_zip(zip, os.path.join(gaia_path, "profile"), "profile")
-
-if __name__ == '__main__':
- if 2 != len(sys.argv):
- print("""Usage:
- python {0} MOZ_PKG_PLATFORM
-""".format(sys.argv[0]))
- sys.exit(1)
- main(*sys.argv[1:])