Improve test support for art tests

Make gtest property a *bool so it can be overriden by defaults.
Make per-test install directory come after relative_install_path
property.

Change-Id: I2da38965c99c40415a39bf97b706b2d40bb082d6
diff --git a/cc/installer.go b/cc/installer.go
index a133bf2..fa8fc32 100644
--- a/cc/installer.go
+++ b/cc/installer.go
@@ -24,7 +24,7 @@
 
 type InstallerProperties struct {
 	// install to a subdirectory of the default install path for the module
-	Relative_install_path string
+	Relative_install_path string `android:"arch_variant"`
 
 	// install symlinks to the module
 	Symlinks []string `android:"arch_variant"`
@@ -50,6 +50,7 @@
 
 	dir      string
 	dir64    string
+	relative string
 	location installLocation
 
 	path android.OutputPath
@@ -69,7 +70,7 @@
 	if !ctx.Host() && !ctx.Arch().Native {
 		subDir = filepath.Join(subDir, ctx.Arch().ArchType.String())
 	}
-	dir := android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path)
+	dir := android.PathForModuleInstall(ctx, subDir, installer.Properties.Relative_install_path, installer.relative)
 	installer.path = ctx.InstallFile(dir, file)
 	for _, symlink := range installer.Properties.Symlinks {
 		ctx.InstallSymlink(dir, symlink, installer.path)
diff --git a/cc/test.go b/cc/test.go
index 5418ebf..5a34d1d 100644
--- a/cc/test.go
+++ b/cc/test.go
@@ -26,7 +26,7 @@
 
 type TestProperties struct {
 	// if set, build against the gtest library. Defaults to true.
-	Gtest bool
+	Gtest *bool
 }
 
 type TestBinaryProperties struct {
@@ -116,8 +116,12 @@
 	linker     *baseLinker
 }
 
+func (test *testDecorator) gtest() bool {
+	return test.Properties.Gtest == nil || *test.Properties.Gtest == true
+}
+
 func (test *testDecorator) linkerFlags(ctx ModuleContext, flags Flags) Flags {
-	if !test.Properties.Gtest {
+	if !test.gtest() {
 		return flags
 	}
 
@@ -143,7 +147,7 @@
 }
 
 func (test *testDecorator) linkerDeps(ctx BaseModuleContext, deps Deps) Deps {
-	if test.Properties.Gtest {
+	if test.gtest() {
 		if ctx.sdk() && ctx.Device() {
 			switch ctx.selectedStl() {
 			case "ndk_libc++_shared", "ndk_libc++_static":
@@ -208,8 +212,9 @@
 }
 
 func (test *testBinary) install(ctx ModuleContext, file android.Path) {
-	test.binaryDecorator.baseInstaller.dir = filepath.Join("nativetest", ctx.ModuleName())
-	test.binaryDecorator.baseInstaller.dir64 = filepath.Join("nativetest64", ctx.ModuleName())
+	test.binaryDecorator.baseInstaller.dir = "nativetest"
+	test.binaryDecorator.baseInstaller.dir64 = "nativetest64"
+	test.binaryDecorator.baseInstaller.relative = ctx.ModuleName()
 	test.binaryDecorator.baseInstaller.install(ctx, file)
 }
 
@@ -225,7 +230,6 @@
 		binaryDecorator: binary,
 		baseCompiler:    NewBaseCompiler(),
 	}
-	test.testDecorator.Properties.Gtest = true
 	module.compiler = test
 	module.linker = test
 	module.installer = test
@@ -267,7 +271,6 @@
 		},
 		libraryDecorator: library,
 	}
-	test.testDecorator.Properties.Gtest = true
 	module.linker = test
 	return module
 }