Merge change 4057 into donut

* changes:
  make applypatch into a static library
diff --git a/cleanspec.mk b/cleanspec.mk
index cba6cfa..4cf3f59 100644
--- a/cleanspec.mk
+++ b/cleanspec.mk
@@ -82,6 +82,7 @@
 
 $(call add-clean-step, rm -rf $(OUT_DIR)/product/*/obj/SHARED_LIBRARIES/lib?camera_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/product/*/obj/STATIC_LIBRARIES/lib?camera_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/product/*/obj/SHARED_LIBRARIES/libwebcore_intermediates)
 
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
diff --git a/core/pathmap.mk b/core/pathmap.mk
index 2dd8f96..e281b9d 100644
--- a/core/pathmap.mk
+++ b/core/pathmap.mk
@@ -82,9 +82,9 @@
 	    opengl \
 	    sax \
 	    telephony \
-	    tts \
 	    wifi \
-            vpn \
+	    vpn \
+	    keystore \
 	 )
 
 #
diff --git a/target/product/core.mk b/target/product/core.mk
index ed9c4e9..d9bf34d 100644
--- a/target/product/core.mk
+++ b/target/product/core.mk
@@ -17,8 +17,10 @@
     DownloadProvider \
     GoogleSearch \
     MediaProvider \
+    PicoTts \
     SettingsProvider \
     TelephonyProvider \
+    TtsService \
     UserDictionaryProvider \
     PackageInstaller \
     WebSearchProvider \
diff --git a/tools/droiddoc/templates/assets/search_autocomplete.js b/tools/droiddoc/templates/assets/search_autocomplete.js
index 2e12e0f..929751f 100644
--- a/tools/droiddoc/templates/assets/search_autocomplete.js
+++ b/tools/droiddoc/templates/assets/search_autocomplete.js
@@ -168,6 +168,6 @@
 
 function submit_search() {
   var query = document.getElementById('search_autocomplete').value;
-  document.location = '/search.html#q=' + query; 
+  document.location = toRoot + 'search.html#q=' + query; // toRoot is initialized in android-developer-docs.js 
   return false;
 }
diff --git a/tools/signapk/SignApk.java b/tools/signapk/SignApk.java
index 340a9f5..fb55028 100644
--- a/tools/signapk/SignApk.java
+++ b/tools/signapk/SignApk.java
@@ -62,6 +62,7 @@
 import java.util.jar.JarFile;
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
+import java.util.regex.Pattern;
 import javax.crypto.Cipher;
 import javax.crypto.EncryptedPrivateKeyInfo;
 import javax.crypto.SecretKeyFactory;
@@ -75,6 +76,10 @@
     private static final String CERT_SF_NAME = "META-INF/CERT.SF";
     private static final String CERT_RSA_NAME = "META-INF/CERT.RSA";
 
+    // Files matching this pattern are not copied to the output.
+    private static Pattern stripPattern =
+            Pattern.compile("^META-INF/(.*)[.](SF|RSA|DSA)$");
+
     private static X509Certificate readPublicKey(File file)
             throws IOException, GeneralSecurityException {
         FileInputStream input = new FileInputStream(file);
@@ -193,7 +198,9 @@
         for (JarEntry entry: byName.values()) {
             String name = entry.getName();
             if (!entry.isDirectory() && !name.equals(JarFile.MANIFEST_NAME) &&
-                !name.equals(CERT_SF_NAME) && !name.equals(CERT_RSA_NAME)) {
+                !name.equals(CERT_SF_NAME) && !name.equals(CERT_RSA_NAME) &&
+                (stripPattern == null ||
+                 !stripPattern.matcher(name).matches())) {
                 InputStream data = jar.getInputStream(entry);
                 while ((num = data.read(buffer)) > 0) {
                     md.update(buffer, 0, num);