blob: 23ba2b01e03d312fb015606fb5c6264dea90c605 [file] [log] [blame]
atrostdb25ac02019-08-05 12:26:07 +01001// Copyright 2019 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package java
16
17import (
18 "android/soong/android"
19)
20
21func init() {
22 android.RegisterModuleType("platform_compat_config", platformCompatConfigFactory)
23}
24
25type platformCompatConfigProperties struct {
atrost87901b02019-08-29 12:48:43 +010026 Src *string `android:"path"`
atrostdb25ac02019-08-05 12:26:07 +010027}
28
29type platformCompatConfig struct {
30 android.ModuleBase
31
32 properties platformCompatConfigProperties
Colin Cross70dda7e2019-10-01 22:05:35 -070033 installDirPath android.InstallPath
atrostdb25ac02019-08-05 12:26:07 +010034 configFile android.OutputPath
35}
36
37func (p *platformCompatConfig) GenerateAndroidBuildActions(ctx android.ModuleContext) {
38 rule := android.NewRuleBuilder()
39
atrost87901b02019-08-29 12:48:43 +010040 configFileName := p.Name() + ".xml"
atrostdb25ac02019-08-05 12:26:07 +010041 p.configFile = android.PathForModuleOut(ctx, configFileName).OutputPath
42 path := android.PathForModuleSrc(ctx, String(p.properties.Src))
43
44 // Use the empty config if the compat config file idoesn't exist (can happen if @ChangeId
45 // annotation is not used).
atrost87901b02019-08-29 12:48:43 +010046 emptyConfig := `'<?xml version="1.0" encoding="UTF-8" standalone="no"?><config/>'`
atrostdb25ac02019-08-05 12:26:07 +010047 configPath := `compat/compat_config.xml`
48
49 rule.Command().
50 Text(`unzip`).
51 Flag(`-l`).
52 Input(path).
53 Text(`| grep`).
54 Flag(`-q`).
55 Text(configPath).
56 Text(`; if [ "$?" = "0" ] ; then`).
57 Text(`unzip`).
58 Flag(`-qp`).
59 Input(path).
60 Text(configPath).
61 Text(`>`).
62 Output(p.configFile).
atrost87901b02019-08-29 12:48:43 +010063 Text(`; else echo `).
atrostdb25ac02019-08-05 12:26:07 +010064 Text(emptyConfig).
atrost87901b02019-08-29 12:48:43 +010065 Text(`>`).
atrostdb25ac02019-08-05 12:26:07 +010066 Output(p.configFile).
67 Text(`; fi`)
68
atrost87901b02019-08-29 12:48:43 +010069 p.installDirPath = android.PathForModuleInstall(ctx, "etc", "compatconfig")
atrostdb25ac02019-08-05 12:26:07 +010070 rule.Build(pctx, ctx, configFileName, "Extract compat/compat_config.xml and install it")
71
72}
73
74func (p *platformCompatConfig) AndroidMkEntries() android.AndroidMkEntries {
75 return android.AndroidMkEntries{
76 Class: "ETC",
77 OutputFile: android.OptionalPathForPath(p.configFile),
78 Include: "$(BUILD_PREBUILT)",
Jaewoong Junge0dc8df2019-08-27 17:33:16 -070079 ExtraEntries: []android.AndroidMkExtraEntriesFunc{
80 func(entries *android.AndroidMkEntries) {
Colin Crossff6c33d2019-10-02 16:01:35 -070081 entries.SetString("LOCAL_MODULE_PATH", p.installDirPath.ToMakePath().String())
Jaewoong Junge0dc8df2019-08-27 17:33:16 -070082 entries.SetString("LOCAL_INSTALLED_MODULE_STEM", p.configFile.Base())
83 },
atrostdb25ac02019-08-05 12:26:07 +010084 },
85 }
86}
87
88func platformCompatConfigFactory() android.Module {
89 module := &platformCompatConfig{}
90 module.AddProperties(&module.properties)
91 android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibFirst)
92 return module
93}