Add a rule that builds an eclipse project file for an app.

Type make ECLIPSE-<app1>-<app2>... with the apps as listed in LOCAL_PACKAGE_NAME.

Change-Id: Ieb96dfc9dfc13bdf1b3be53572092fc7bc695869
diff --git a/core/base_rules.mk b/core/base_rules.mk
index 0ad797a..d9290c4 100644
--- a/core/base_rules.mk
+++ b/core/base_rules.mk
@@ -496,6 +496,8 @@
     $(ALL_MODULES.$(LOCAL_MODULE).REQUIRED) $(LOCAL_REQUIRED_MODULES)
 ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS := \
     $(ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS) $(event_log_tags)
+ALL_MODULES.$(LOCAL_MODULE).INTERMEDIATE_SOURCE_DIR := \
+    $(ALL_MODULES.$(LOCAL_MODULE).EVENT_LOG_TAGS) $(LOCAL_INTERMEDIATE_SOURCE_DIR)
 
 ###########################################################
 ## Take care of LOCAL_MODULE_TAGS
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 0fe3c8b..14ead83 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -51,6 +51,7 @@
 LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES:=
 LOCAL_PREBUILT_STRIP_COMMENTS:=
 LOCAL_INTERMEDIATE_SOURCES:=
+LOCAL_INTERMEDIATE_SOURCE_DIRS:=
 LOCAL_JAVACFLAGS:=
 LOCAL_JAVA_LIBRARIES:=
 LOCAL_NO_STANDARD_LIBRARIES:=
diff --git a/core/java.mk b/core/java.mk
index baa83ee..4955a33 100644
--- a/core/java.mk
+++ b/core/java.mk
@@ -87,6 +87,7 @@
     $(full_classes_jarjar_jar) \
     $(built_dex)
 
+LOCAL_INTERMEDIATE_SOURCE_DIR := $(intermediates.COMMON)/src
 
 # TODO: It looks like the only thing we need from base_rules is
 # all_java_sources.  See if we can get that by adding a
@@ -104,7 +105,7 @@
 $(LOCAL_INTERMEDIATE_TARGETS): \
 	PRIVATE_CLASS_INTERMEDIATES_DIR := $(intermediates.COMMON)/classes
 $(LOCAL_INTERMEDIATE_TARGETS): \
-	PRIVATE_SOURCE_INTERMEDIATES_DIR := $(intermediates.COMMON)/src
+	PRIVATE_SOURCE_INTERMEDIATES_DIR := $(LOCAL_INTERMEDIATE_SOURCE_DIR)
 
 # Since we're using intermediates.COMMON, make sure that it gets cleaned
 # properly.
diff --git a/core/main.mk b/core/main.mk
index d9e8dd8..f52b473 100644
--- a/core/main.mk
+++ b/core/main.mk
@@ -49,6 +49,10 @@
 DEFAULT_GOAL := droid
 $(DEFAULT_GOAL):
 
+# Used to force goals to build.  Only use for conditionally defined goals.
+.PHONY: FORCE
+FORCE:
+
 # Set up various standard variables based on configuration
 # and host information.
 include $(BUILD_SYSTEM)/config.mk
diff --git a/core/tasks/ide.mk b/core/tasks/ide.mk
new file mode 100644
index 0000000..57a4609
--- /dev/null
+++ b/core/tasks/ide.mk
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2010 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+define filter-ide-goals
+$(strip $(filter $(1)-%,$(MAKECMDGOALS)))
+endef
+
+define filter-ide-modules
+$(strip $(subst -,$(space),$(patsubst $(1)-%,%,$(2))))
+endef
+
+# eclipse
+eclipse_project_goals := $(call filter-ide-goals,ECLIPSE)
+ifdef eclipse_project_goals
+  ifneq ($(words $(eclipse_project_goals)),1)
+    $(error Only one ECLIPSE- goal may be specified: $(eclipse_project_goals))
+  endif
+  eclipse_project_modules := $(call filter-ide-modules,ECLIPSE,$(eclipse_project_goals))
+
+  source_paths := $(foreach m,$(eclipse_project_modules),$(ALL_MODULES.$(m).PATH)) \
+              $(foreach m,$(eclipse_project_modules),$(ALL_MODULES.$(m).INTERMEDIATE_SOURCE_DIR))
+
+.classpath: PRIVATE_MODULES := $(eclipse_project_modules)
+.classpath: PRIVATE_DIRS := $(source_paths) $(INTERNAL_SDK_SOURCE_DIRS)
+
+# the mess below with ./src tries to guess whether the src
+$(eclipse_project_goals): .classpath
+.classpath: FORCE
+	$(hide) echo Generating .classpath for modules: $(PRIVATE_MODULES)
+	$(hide) echo '<classpath>' > $@
+	$(hide) for p in $(PRIVATE_DIRS) ; do \
+		echo -n '  <classpathentry kind="src" path="' >> $@ ; \
+		( if [ -d $$p/src ] ; then echo -n $$p/src ; else echo -n $$p ; fi ) >> $@ ; \
+		echo '"/>' >> $@ ; \
+	done
+	$(hide) echo '</classpath>' >> $@
+endif
+