1// Copyright (C) 2019 The Android Open Source Project
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
15
16package {
17    // See: http://go/android-license-faq
18    // A large-scale-change added 'default_applicable_licenses' to import
19    // all of the 'license_kinds' from "frameworks_base_license"
20    // to get the below license kinds:
21    //   SPDX-license-identifier-Apache-2.0
22    default_applicable_licenses: ["frameworks_base_license"],
23}
24
25java_defaults {
26    name: "mimemap-defaults",
27    srcs: [
28        "java/android/content/type/DefaultMimeMapFactory.java",
29    ],
30    sdk_version: "core_platform",
31}
32
33java_library {
34    name: "mimemap",
35    defaults: ["mimemap-defaults"],
36    static_libs: ["mimemap-res.jar"],
37    visibility: [
38        "//frameworks/base:__subpackages__",
39    ],
40}
41
42java_library {
43    name: "mimemap-testing",
44    defaults: ["mimemap-defaults"],
45    static_libs: ["mimemap-testing-res.jar"],
46    jarjar_rules: "jarjar-rules.txt",
47    visibility: [
48        "//cts/tests/tests/mimemap:__subpackages__",
49        "//frameworks/base:__subpackages__",
50    ],
51}
52
53// The mimemap-res.jar and mimemap-testing-res.jar genrules produce a .jar that
54// has the resource file in a subdirectory res/ and testres/, respectively.
55// They need to be in different paths because one of them ends up in a
56// bootclasspath jar whereas the other one ends up in a test jar. Bootclasspath
57// resources hide test or application resources under the same path because
58// ClassLoader.getResource(String) consults the parent ClassLoader first.
59//
60// Further notes:
61//  - the "cp" command will flatten any directory paths that occur in $(in),
62//    but here they happen to already be in the root directory. If we needed
63//    to preserve sub paths then we might want to zip the files first and then
64//    unzip them below the new parent directory.
65//  - the path names "res/" and "testres/" and duplicated in .java source files
66//    (DefaultMimeMapFactory.java and MimeMapTest.java, as of October 2019).
67java_genrule {
68    name: "mimemap-res.jar",
69    tools: [
70        "soong_zip",
71    ],
72    srcs: [":mime.types.minimized"],
73    out: ["mimemap-res.jar"],
74    cmd: "mkdir $(genDir)/res/ && cp $(in) $(genDir)/res/ && $(location soong_zip) -C $(genDir) -o $(out) -D $(genDir)/res/",
75}
76
77// The same as mimemap-res.jar except that the resources are placed in a different directory.
78// They get bundled with CTS so that CTS can compare a device's MimeMap implementation vs.
79// the stock Android one from when CTS was built.
80java_genrule {
81    name: "mimemap-testing-res.jar",
82    tools: [
83        "soong_zip",
84    ],
85    srcs: [":mime.types.minimized"],
86    out: ["mimemap-testing-res.jar"],
87    cmd: "mkdir $(genDir)/testres/ && cp $(in) $(genDir)/testres/ && $(location soong_zip) -C $(genDir) -o $(out) -D $(genDir)/testres/",
88}
89
90// Combination of all *mime.types.minimized resources.
91filegroup {
92    name: "mime.types.minimized",
93    visibility: [
94        "//visibility:private",
95    ],
96    srcs: [
97        ":debian.mime.types.minimized",
98        ":android.mime.types.minimized",
99        ":vendor.mime.types.minimized",
100    ],
101}
102
103java_genrule {
104    name: "android.mime.types.minimized",
105    visibility: [
106        "//visibility:private",
107    ],
108    out: ["android.mime.types"],
109    srcs: [
110        "java-res/android.mime.types",
111    ],
112    //    strip comments            normalize whitepace       drop empty lines
113    cmd: "awk '{gsub(/#.*$$/,\"\"); $$1=$$1; print;}' $(in) | grep ' ' > $(out)",
114}
115
116// Unlike the other *mime.types files, vendor.mime.types gets '?' prepended to
117// every field so that its mappings will never overwrite earlier mappings by
118// the other resource files. http://b/141842825
119java_genrule {
120    name: "vendor.mime.types.minimized",
121    visibility: [
122        "//visibility:private",
123    ],
124    out: ["vendor.mime.types"],
125    srcs: [
126        "java-res/vendor.mime.types",
127    ],
128    //    strip comments            normalize whitepace       drop empty lines   prepend ? to fields that are missing it
129    cmd: "awk '{gsub(/#.*$$/,\"\"); $$1=$$1; print;}' $(in) | grep ' '         | awk '{for(i=1;i<=NF;i++) { sub(/^\\??/, \"?\", $$i); }; print}' > $(out)",
130}
131