Added a filter to remove buildenv's warnings.

Warnings about makefiles and build scripts interfere
with `next-error'. If you are interested only in the
errors from the source file, a custom variable allows
you to nuke build env warnings.

The filter is registered as a compilation-filter-hook.
diff --git a/ide/emacs/android-common.el b/ide/emacs/android-common.el
index 7bf82a2..cebd087 100644
--- a/ide/emacs/android-common.el
+++ b/ide/emacs/android-common.el
@@ -43,6 +43,14 @@
   :group 'android)
 
 ;;;###autoload
+(defcustom android-compilation-no-buildenv-warning t
+  "If not nil, suppress warnings from the build env (Makefile,
+bash) from the compilation output since they interfere with
+`next-error'."
+  :type 'boolean
+  :group 'android)
+
+;;;###autoload
 (defcustom android-product-alias-map nil
   "Alist between product targets (declared in buildspec.mk) and actual
  product build directory used by `android-product'.
diff --git a/ide/emacs/android-compile.el b/ide/emacs/android-compile.el
index d0a2b7b..1b5092f 100644
--- a/ide/emacs/android-compile.el
+++ b/ide/emacs/android-compile.el
@@ -39,6 +39,13 @@
 (require 'compile)
 (require 'android-common)
 
+;; No need to be customized.
+(defvar android-compile-ignore-re
+  "\\(^\\(\\sw\\|[/_]\\)+\\(Makefile\\|\\.mk\\):[0-9]+:.*warning\\)\\|\\(^/bin/bash\\)"
+  "RE to match line to suppress during a compilation.
+During the compilation process line matching the above will be
+suppressed if `android-compilation-no-buildenv-warning' is non nil.")
+
 (defun android-makefile-exists-p (directory)
   "Return t if an Android makefile exists in DIRECTORY."
   ; Test for Android.mk first: more likely.
@@ -75,6 +82,45 @@
       (setq file (concat default-directory "Android.mk"))
       (list file nil))))
 
+;; This filter is registered as a `compilation-filter-hook' and is
+;; called when new data has been inserted in the compile buffer. Don't
+;; assume that only one line has been inserted, typically more than
+;; one has changed since the last call due to stdout buffering.
+;; We store in a buffer local variable the process to detect a new
+;; compilation. We also store the point position to limit our
+;; search. On entry (point) is at the end of the last block inserted.
+(defun android-compile-filter ()
+  "Filter to discard unwanted lines from the compilation buffer.
+
+This filter is registered as a `compilation-filter-hook' and is
+called when new data has been inserted in the compile buffer.
+
+Has effect only if `android-compilation-no-buildenv-warning' is
+not nil."
+  ;; Currently we are looking only for compilation warnings from the
+  ;; build env. Move this test lower, near the while loop if we
+  ;; support more than one category of regexp.
+  (when android-compilation-no-buildenv-warning
+
+    ;; Check if android-compile-context does not exist or if the
+    ;; process has changed: new compilation.
+    (let ((proc (get-buffer-process (current-buffer))))
+      (unless (and (local-variable-p 'android-compile-context)
+                   (eq proc (cadr android-compile-context)))
+        (setq android-compile-context (list (point-min) proc))
+        (make-local-variable 'android-compile-context)))
+
+    (let ((beg (car android-compile-context))
+          (end (point)))
+      (save-excursion
+        (goto-char beg)
+        (while (search-forward-regexp android-compile-ignore-re end t)
+          ;; Nuke the line
+          (let ((bol (point-at-bol)))
+            (forward-line 1)
+            (delete-region bol (point)))))
+      ;; Remember the new end for next time around.
+      (setcar android-compile-context (point)))))
 
 (defun android-compile ()
   "Elisp equivalent of mm shell function.
@@ -91,6 +137,9 @@
               (concat " -j " (number-to-string android-compilation-jobs))))
         (unless (file-exists-p (concat topdir "buildspec.mk"))
           (error "buildspec.mk missing in %s." topdir))
+        ;; Add-hook do not re-add if already present. The compile
+        ;; filter hooks run after the comint cleanup (^M).
+        (add-hook 'compilation-filter-hook 'android-compile-filter)
         (set (make-local-variable 'compile-command)
              (if (cadr makefile)
                  ;; The root Makefile is not invoked using ONE_SHOT_MAKEFILE.