Backout changeset 572b3980300c (bug 792050) for windows pymake bustage.
authorMike Hommey <mh+mozilla@glandium.org>
Tue, 02 Oct 2012 15:03:45 +0200
changeset 109011 bf9c0d80b36e4b48b415e5c6a911fc0c955cd2ee
parent 109010 74a06c56da4eade326fb40c808b72d4adbeccf28
child 109012 e956f3e5b10e4d84f2b102f5ce04ee9eb7ad00a4
push id82
push usershu@rfrn.org
push dateFri, 05 Oct 2012 13:20:22 +0000
bugs792050
milestone18.0a1
backs out572b3980300cf81df71f5ae27a9aa281f4586d40
Backout changeset 572b3980300c (bug 792050) for windows pymake bustage.
toolkit/mozapps/installer/packager.mk
toolkit/mozapps/installer/precompile_cache.js
--- a/toolkit/mozapps/installer/packager.mk
+++ b/toolkit/mozapps/installer/packager.mk
@@ -450,26 +450,28 @@ endif # MOZ_CAN_RUN_PROGRAMS
 
 ifdef GENERATE_CACHE
 ifdef MOZ_CAN_RUN_PROGRAMS
 ifdef RUN_TEST_PROGRAM
 _ABS_RUN_TEST_PROGRAM = $(call core_abspath,$(RUN_TEST_PROGRAM))
 endif
 
 ifdef LIBXUL_SDK
+PRECOMPILE_DIR=XCurProcD
 PRECOMPILE_RESOURCE=app
 PRECOMPILE_GRE=$(LIBXUL_DIST)/bin
 else
+PRECOMPILE_DIR=GreD
 PRECOMPILE_RESOURCE=gre
 PRECOMPILE_GRE=$$PWD
 endif
 
 # Silence the unzip step so we don't print any binary data from the comment field.
 GENERATE_CACHE = \
-  MOZ_STARTUP_CACHE=$$PWD/startupCache.zip $(_ABS_RUN_TEST_PROGRAM) $(LIBXUL_DIST)/bin/xpcshell$(BIN_SUFFIX) -g "$(PRECOMPILE_GRE)" -a "$$PWD" -f $(call core_abspath,$(MOZILLA_DIR)/toolkit/mozapps/installer/precompile_cache.js) -e "populate_startupcache();" && \
+  $(_ABS_RUN_TEST_PROGRAM) $(LIBXUL_DIST)/bin/xpcshell$(BIN_SUFFIX) -g "$(PRECOMPILE_GRE)" -a "$$PWD" -f $(call core_abspath,$(MOZILLA_DIR)/toolkit/mozapps/installer/precompile_cache.js) -e "populate_startupcache('$(PRECOMPILE_DIR)', '$(OMNIJAR_NAME)', 'startupCache.zip');" && \
   rm -rf jsloader jssubloader && \
   $(UNZIP) -q startupCache.zip && \
   rm startupCache.zip && \
   $(ZIP) -r9m $(OMNIJAR_NAME) jsloader/resource/$(PRECOMPILE_RESOURCE) jssubloader/*/resource/$(PRECOMPILE_RESOURCE) && \
   rm -rf jsloader jssubloader
 else
 GENERATE_CACHE = true
 endif
--- a/toolkit/mozapps/installer/precompile_cache.js
+++ b/toolkit/mozapps/installer/precompile_cache.js
@@ -5,87 +5,62 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 // see http://mxr.mozilla.org/mozilla-central/source/services/sync/Weave.js#76
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-Cu.import("resource://gre/modules/Services.jsm");
-
-const rph = Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
-
-function endsWith(str, end) {
-  return str.slice(-end.length) == end;
-}
-
-function jar_entries(jarReader, pattern) {
-  var entries = [];
-  var enumerator = jarReader.findEntries(pattern);
-  while (enumerator.hasMore()) {
-    entries.push(enumerator.getNext());
+function setenv(name, val) {
+  try {
+    var environment = Components.classes["@mozilla.org/process/environment;1"].
+      getService(Components.interfaces.nsIEnvironment);
+    environment.set(name, val);
+  } catch(e) {
+    displayError("setenv", e);
   }
-  return entries;
 }
 
-function dir_entries(baseDir, subpath, ext) {
-  var dir = baseDir.clone();
-  dir.append(subpath);
-  var enumerator = dir.directoryEntries;
-  var entries = [];
-  while (enumerator.hasMoreElements()) {
-    var file = enumerator.getNext().QueryInterface(Ci.nsIFile);
-    if (file.isDirectory()) {
-      entries = entries.concat(dir_entries(dir, file.leafName, ext).map(function(p) subpath + "/" + p));
-    } else if (endsWith(file.leafName, ext)) {
-      entries.push(subpath + "/" + file.leafName);
-    }
+function load(url) {
+  print(url);
+  try {
+    Cu.import(url, null);
+  } catch(e) {
+    dump("Failed to import " + url + ":" + e + "\n");
   }
-  return entries;
 }
 
-function get_modules_under(uri) {
-  if (uri instanceof Ci.nsIJARURI) {
-    var jar = uri.QueryInterface(Ci.nsIJARURI);
-    var jarReader = Cc["@mozilla.org/libjar/zip-reader;1"].createInstance(Ci.nsIZipReader);
-    var file = jar.JARFile.QueryInterface(Ci.nsIFileURL);
-    jarReader.open(file.file);
-    var entries = jar_entries(jarReader, "components/*.js")
-                  .concat(jar_entries(jarReader, "modules/*.js"))
-                  .concat(jar_entries(jarReader, "modules/*.jsm"));
-    jarReader.close();
-    return entries;
-  } else if (uri instanceof Ci.nsIFileURL){
-    var file = uri.QueryInterface(Ci.nsIFileURL);
-    return dir_entries(file.file, "components", ".js")
-           .concat(dir_entries(file.file, "modules", ".js"))
-           .concat(dir_entries(file.file, "modules", ".jsm"));
-  } else {
-    throw "Expected a nsIJARURI or nsIFileURL";
+function load_entries(entries, prefix) {
+  while (entries.hasMore()) {
+    var c = entries.getNext();
+    load(prefix + c);
   }
 }
 
-function load_modules_under(spec, uri) {
-  var entries = get_modules_under(uri);
-  for each (let entry in entries) {
-    try {
-      dump(spec + entry + "\n");
-      Cu.import(spec + entry, null);
-    } catch(e) {}
-  }
+function getDir(prop) {
+  return Cc["@mozilla.org/file/directory_service;1"].
+    getService(Ci.nsIProperties).get(prop, Ci.nsIFile);
+}
+
+function openJar(file) {
+  var zipreader = Cc["@mozilla.org/libjar/zip-reader;1"].
+    createInstance(Ci.nsIZipReader);
+  zipreader.open(file);
+  return zipreader;
 }
 
-function resolveResource(spec) {
-  var uri = Services.io.newURI(spec, null, null);
-  return Services.io.newURI(rph.resolveURI(uri), null, null);
-}
+function populate_startupcache(prop, omnijarName, startupcacheName) {
+  var file = getDir(prop);
+  file.append(omnijarName);
+  zipreader = openJar(file);
 
-function populate_startupcache() {
-  var greURI = resolveResource("resource://gre/");
-  var appURI = resolveResource("resource://app/");
+  var scFile = getDir(prop);
+  scFile.append(startupcacheName);
+  setenv("MOZ_STARTUP_CACHE", scFile.path);
+
+  let prefix = "resource:///";
 
-  load_modules_under("resource://gre/", greURI);
-  if (!appURI.equals(greURI))
-    load_modules_under("resource://app/", appURI);
+  load_entries(zipreader.findEntries("components/*js"), prefix);
+  load_entries(zipreader.findEntries("modules/*js"), prefix);
+  load_entries(zipreader.findEntries("modules/*jsm"), prefix);
+  zipreader.close();
 }
-
-