Merge "Ban --coverage now that we have native coverage"
diff --git a/cc/library.go b/cc/library.go
index efaf440..f7194e4 100644
--- a/cc/library.go
+++ b/cc/library.go
@@ -64,7 +64,9 @@
 		// export headers generated from .proto sources
 		Export_proto_headers bool
 	}
+}
 
+type LibraryMutatedProperties struct {
 	VariantName string `blueprint:"mutated"`
 
 	// Build a static variant
@@ -175,7 +177,8 @@
 // libraryDecorator wraps baseCompiler, baseLinker and baseInstaller to provide library-specific
 // functionality: static vs. shared linkage, reusing object files for shared libraries
 type libraryDecorator struct {
-	Properties LibraryProperties
+	Properties        LibraryProperties
+	MutatedProperties LibraryMutatedProperties
 
 	// For reusing static library objects for shared library
 	reuseObjects Objects
@@ -213,6 +216,7 @@
 	props = append(props, library.baseLinker.linkerProps()...)
 	return append(props,
 		&library.Properties,
+		&library.MutatedProperties,
 		&library.flagExporter.Properties,
 		&library.stripper.StripProperties,
 		&library.relocationPacker.Properties)
@@ -230,11 +234,11 @@
 
 	if library.static() {
 		flags.CFlags = append(flags.CFlags, library.Properties.Static.Cflags...)
-	} else {
+	} else if library.shared() {
 		flags.CFlags = append(flags.CFlags, library.Properties.Shared.Cflags...)
 	}
 
-	if !library.static() {
+	if library.shared() {
 		libName := library.getLibName(ctx)
 		// GCC for Android assumes that -shared means -Bsymbolic, use -Wl,-shared instead
 		sharedFlag := "-Wl,-shared"
@@ -303,7 +307,7 @@
 		srcs := android.PathsForModuleSrc(ctx, library.Properties.Static.Srcs)
 		objs = objs.Append(compileObjs(ctx, buildFlags, android.DeviceStaticLibrary,
 			srcs, library.baseCompiler.deps))
-	} else {
+	} else if library.shared() {
 		srcs := android.PathsForModuleSrc(ctx, library.Properties.Shared.Srcs)
 		objs = objs.Append(compileObjs(ctx, buildFlags, android.DeviceSharedLibrary,
 			srcs, library.baseCompiler.deps))
@@ -324,7 +328,8 @@
 	buildShared() bool
 
 	// Sets whether a specific variant is static or shared
-	setStatic(bool)
+	setStatic()
+	setShared()
 }
 
 func (library *libraryDecorator) getLibName(ctx ModuleContext) string {
@@ -339,7 +344,7 @@
 		}
 	}
 
-	return name + library.Properties.VariantName
+	return name + library.MutatedProperties.VariantName
 }
 
 func (library *libraryDecorator) linkerInit(ctx BaseModuleContext) {
@@ -362,7 +367,7 @@
 			library.Properties.Static.Whole_static_libs...)
 		deps.StaticLibs = append(deps.StaticLibs, library.Properties.Static.Static_libs...)
 		deps.SharedLibs = append(deps.SharedLibs, library.Properties.Static.Shared_libs...)
-	} else {
+	} else if library.shared() {
 		if ctx.toolchain().Bionic() && !Bool(library.baseLinker.Properties.Nocrt) {
 			if !ctx.sdk() && !ctx.vndk() {
 				deps.CrtBegin = "crtbegin_so"
@@ -395,13 +400,13 @@
 	library.objects = library.objects.Append(objs)
 
 	outputFile := android.PathForModuleOut(ctx,
-		ctx.ModuleName()+library.Properties.VariantName+staticLibraryExtension)
+		ctx.ModuleName()+library.MutatedProperties.VariantName+staticLibraryExtension)
 	builderFlags := flagsToBuilderFlags(flags)
 
 	TransformObjToStaticLib(ctx, library.objects.objFiles, builderFlags, outputFile, objs.tidyFiles)
 
 	library.coverageOutputFile = TransformCoverageFilesToLib(ctx, library.objects, builderFlags,
-		ctx.ModuleName()+library.Properties.VariantName)
+		ctx.ModuleName()+library.MutatedProperties.VariantName)
 
 	library.wholeStaticMissingDeps = ctx.GetMissingDependencies()
 
@@ -522,7 +527,7 @@
 	objs = objs.Append(deps.Objs)
 
 	var out android.Path
-	if library.static() {
+	if library.static() || library.header() {
 		out = library.linkStatic(ctx, flags, deps, objs)
 	} else {
 		out = library.linkShared(ctx, flags, deps, objs)
@@ -555,12 +560,12 @@
 }
 
 func (library *libraryDecorator) buildStatic() bool {
-	return library.Properties.BuildStatic &&
+	return library.MutatedProperties.BuildStatic &&
 		(library.Properties.Static.Enabled == nil || *library.Properties.Static.Enabled)
 }
 
 func (library *libraryDecorator) buildShared() bool {
-	return library.Properties.BuildShared &&
+	return library.MutatedProperties.BuildShared &&
 		(library.Properties.Shared.Enabled == nil || *library.Properties.Shared.Enabled)
 }
 
@@ -587,31 +592,45 @@
 }
 
 func (library *libraryDecorator) static() bool {
-	return library.Properties.VariantIsStatic
+	return library.MutatedProperties.VariantIsStatic
 }
 
-func (library *libraryDecorator) setStatic(static bool) {
-	library.Properties.VariantIsStatic = static
+func (library *libraryDecorator) shared() bool {
+	return library.MutatedProperties.VariantIsShared
+}
+
+func (library *libraryDecorator) header() bool {
+	return !library.static() && !library.shared()
+}
+
+func (library *libraryDecorator) setStatic() {
+	library.MutatedProperties.VariantIsStatic = true
+	library.MutatedProperties.VariantIsShared = false
+}
+
+func (library *libraryDecorator) setShared() {
+	library.MutatedProperties.VariantIsStatic = false
+	library.MutatedProperties.VariantIsShared = true
 }
 
 func (library *libraryDecorator) BuildOnlyStatic() {
-	library.Properties.BuildShared = false
+	library.MutatedProperties.BuildShared = false
 }
 
 func (library *libraryDecorator) BuildOnlyShared() {
-	library.Properties.BuildStatic = false
+	library.MutatedProperties.BuildStatic = false
 }
 
 func (library *libraryDecorator) HeaderOnly() {
-	library.Properties.BuildShared = false
-	library.Properties.BuildStatic = false
+	library.MutatedProperties.BuildShared = false
+	library.MutatedProperties.BuildStatic = false
 }
 
 func NewLibrary(hod android.HostOrDeviceSupported) (*Module, *libraryDecorator) {
 	module := newModule(hod, android.MultilibBoth)
 
 	library := &libraryDecorator{
-		Properties: LibraryProperties{
+		MutatedProperties: LibraryMutatedProperties{
 			BuildShared: true,
 			BuildStatic: true,
 		},
@@ -637,8 +656,8 @@
 				static := modules[0].(*Module)
 				shared := modules[1].(*Module)
 
-				static.linker.(libraryInterface).setStatic(true)
-				shared.linker.(libraryInterface).setStatic(false)
+				static.linker.(libraryInterface).setStatic()
+				shared.linker.(libraryInterface).setShared()
 
 				if staticCompiler, ok := static.compiler.(*libraryDecorator); ok {
 					sharedCompiler := shared.compiler.(*libraryDecorator)
@@ -652,10 +671,10 @@
 				}
 			} else if library.buildStatic() {
 				modules = mctx.CreateLocalVariations("static")
-				modules[0].(*Module).linker.(libraryInterface).setStatic(true)
+				modules[0].(*Module).linker.(libraryInterface).setStatic()
 			} else if library.buildShared() {
 				modules = mctx.CreateLocalVariations("shared")
-				modules[0].(*Module).linker.(libraryInterface).setStatic(false)
+				modules[0].(*Module).linker.(libraryInterface).setShared()
 			}
 		}
 	}
diff --git a/cc/ndk_library.go b/cc/ndk_library.go
index da3d5c7..6ebd0c4 100644
--- a/cc/ndk_library.go
+++ b/cc/ndk_library.go
@@ -335,7 +335,7 @@
 	module.linker = stub
 	module.installer = stub
 
-	return module, []interface{}{&stub.properties}
+	return module, []interface{}{&stub.properties, &library.MutatedProperties}
 }
 
 func ndkLibraryFactory() (blueprint.Module, []interface{}) {
diff --git a/cc/ndk_prebuilt.go b/cc/ndk_prebuilt.go
index 676d63d..f1bd3b5 100644
--- a/cc/ndk_prebuilt.go
+++ b/cc/ndk_prebuilt.go
@@ -194,7 +194,7 @@
 
 	libName := strings.TrimPrefix(ctx.ModuleName(), "ndk_")
 	libExt := flags.Toolchain.ShlibSuffix()
-	if ndk.Properties.BuildStatic {
+	if ndk.static() {
 		libExt = staticLibraryExtension
 	}