Use correct install paths in generated Android.mk

Extract Soong's install path and put it in the generated Android.mk file
so that tests get installed in the correct place.

Change-Id: Id4726855c5677855406de20773a5da533bdd4cea
diff --git a/cc/androidmk.go b/cc/androidmk.go
index aa5c4dc..8b1b349 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -17,6 +17,7 @@
 import (
 	"fmt"
 	"io"
+	"path/filepath"
 	"strings"
 
 	"android/soong/common"
@@ -105,5 +106,17 @@
 }
 
 func (test *testLinker) AndroidMk(ret *common.AndroidMkData) {
-	ret.Disabled = true
+	test.binaryLinker.AndroidMk(ret)
+	if Bool(test.Properties.Test_per_src) {
+		ret.SubName = test.binaryLinker.Properties.Stem
+	}
+}
+
+func (installer *baseInstaller) AndroidMk(ret *common.AndroidMkData) {
+	ret.Extra = append(ret.Extra, func(w io.Writer, outputFile common.Path) error {
+		path := installer.path.RelPathString()
+		fmt.Fprintln(w, "LOCAL_MODULE_PATH := $(OUT_DIR)/"+filepath.Dir(path))
+		fmt.Fprintln(w, "LOCAL_MODULE_STEM := "+filepath.Base(path))
+		return nil
+	})
 }
diff --git a/cc/cc.go b/cc/cc.go
index d20a197..251d1cd 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -1195,7 +1195,7 @@
 	dir64 string
 	data  bool
 
-	path common.Path
+	path common.OutputPath
 }
 
 var _ installer = (*baseInstaller)(nil)
diff --git a/common/androidmk.go b/common/androidmk.go
index 49380e0..a16a652 100644
--- a/common/androidmk.go
+++ b/common/androidmk.go
@@ -38,6 +38,7 @@
 
 type AndroidMkData struct {
 	Class      string
+	SubName    string
 	OutputFile OptionalPath
 	Disabled   bool
 
@@ -141,6 +142,10 @@
 		return err
 	}
 
+	if data.SubName != "" {
+		name += "_" + data.SubName
+	}
+
 	hostCross := false
 	if amod.Host() && amod.HostType() != CurrentHostType() {
 		hostCross = true
diff --git a/common/module.go b/common/module.go
index 8e45952..ee028da 100644
--- a/common/module.go
+++ b/common/module.go
@@ -76,8 +76,8 @@
 	ExpandSources(srcFiles, excludes []string) Paths
 	Glob(outDir, globPattern string, excludes []string) Paths
 
-	InstallFile(installPath OutputPath, srcPath Path, deps ...Path) Path
-	InstallFileName(installPath OutputPath, name string, srcPath Path, deps ...Path) Path
+	InstallFile(installPath OutputPath, srcPath Path, deps ...Path) OutputPath
+	InstallFileName(installPath OutputPath, name string, srcPath Path, deps ...Path) OutputPath
 	CheckbuildFile(srcPath Path)
 
 	AddMissingDependencies(deps []string)
@@ -531,7 +531,7 @@
 }
 
 func (a *androidModuleContext) InstallFileName(installPath OutputPath, name string, srcPath Path,
-	deps ...Path) Path {
+	deps ...Path) OutputPath {
 
 	fullInstallPath := installPath.Join(a, name)
 
@@ -552,7 +552,7 @@
 	return fullInstallPath
 }
 
-func (a *androidModuleContext) InstallFile(installPath OutputPath, srcPath Path, deps ...Path) Path {
+func (a *androidModuleContext) InstallFile(installPath OutputPath, srcPath Path, deps ...Path) OutputPath {
 	return a.InstallFileName(installPath, filepath.Base(srcPath.String()), srcPath, deps...)
 }
 
diff --git a/common/paths.go b/common/paths.go
index 93cad13..554ce3f 100644
--- a/common/paths.go
+++ b/common/paths.go
@@ -478,6 +478,10 @@
 	return filepath.Join(p.config.buildDir, p.path)
 }
 
+func (p OutputPath) RelPathString() string {
+	return p.path
+}
+
 // Join creates a new OutputPath with paths... joined with the current path. The
 // provided paths... may not use '..' to escape from the current path.
 func (p OutputPath) Join(ctx PathContext, paths ...string) OutputPath {