xref: /aosp_15_r20/build/blueprint/bpmodify/rename_module_and_deps.py (revision 1fa6dee971e1612fa5cc0aa5ca2d35a22e2c34a3)
1*1fa6dee9SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*1fa6dee9SAndroid Build Coastguard Worker#
3*1fa6dee9SAndroid Build Coastguard Worker# Copyright (C) 2022 The Android Open Source Project
4*1fa6dee9SAndroid Build Coastguard Worker#
5*1fa6dee9SAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
6*1fa6dee9SAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*1fa6dee9SAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*1fa6dee9SAndroid Build Coastguard Worker#
9*1fa6dee9SAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*1fa6dee9SAndroid Build Coastguard Worker#
11*1fa6dee9SAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*1fa6dee9SAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
13*1fa6dee9SAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*1fa6dee9SAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*1fa6dee9SAndroid Build Coastguard Worker# limitations under the License.
16*1fa6dee9SAndroid Build Coastguard Worker"""A tool to run bpmodify for a given module in order to rename it and all references to it"""
17*1fa6dee9SAndroid Build Coastguard Workerimport os
18*1fa6dee9SAndroid Build Coastguard Workerimport subprocess
19*1fa6dee9SAndroid Build Coastguard Workerimport sys
20*1fa6dee9SAndroid Build Coastguard Worker
21*1fa6dee9SAndroid Build Coastguard Worker
22*1fa6dee9SAndroid Build Coastguard Workerdef main():
23*1fa6dee9SAndroid Build Coastguard Worker  if len(sys.argv) < 2:
24*1fa6dee9SAndroid Build Coastguard Worker    print("Usage: rename_module_and_deps <pathToModule1,pathToModule2,...>")
25*1fa6dee9SAndroid Build Coastguard Worker    return
26*1fa6dee9SAndroid Build Coastguard Worker
27*1fa6dee9SAndroid Build Coastguard Worker  modulePaths = sys.argv[1].split(",")
28*1fa6dee9SAndroid Build Coastguard Worker  replacementsList = []
29*1fa6dee9SAndroid Build Coastguard Worker  colonReplacementsList = []
30*1fa6dee9SAndroid Build Coastguard Worker
31*1fa6dee9SAndroid Build Coastguard Worker  for modulePath in modulePaths:
32*1fa6dee9SAndroid Build Coastguard Worker    moduleName = modulePath.split("/")[-1]
33*1fa6dee9SAndroid Build Coastguard Worker    replacementsList.append(moduleName + "=" + moduleName + "_lib")
34*1fa6dee9SAndroid Build Coastguard Worker    # add in the colon replacement
35*1fa6dee9SAndroid Build Coastguard Worker    colonReplaceString = ":" + moduleName + "=" + ":" + moduleName + "_lib"
36*1fa6dee9SAndroid Build Coastguard Worker    replacementsList.append(colonReplaceString)
37*1fa6dee9SAndroid Build Coastguard Worker    colonReplacementsList.append(colonReplaceString)
38*1fa6dee9SAndroid Build Coastguard Worker
39*1fa6dee9SAndroid Build Coastguard Worker  replacementsString = ",".join(replacementsList)
40*1fa6dee9SAndroid Build Coastguard Worker  colonReplacementsString = ",".join(colonReplacementsList)
41*1fa6dee9SAndroid Build Coastguard Worker  buildTop = os.getenv("ANDROID_BUILD_TOP")
42*1fa6dee9SAndroid Build Coastguard Worker
43*1fa6dee9SAndroid Build Coastguard Worker  if not buildTop:
44*1fa6dee9SAndroid Build Coastguard Worker    raise Exception(
45*1fa6dee9SAndroid Build Coastguard Worker        "$ANDROID_BUILD_TOP not found in environment. Have you run lunch?")
46*1fa6dee9SAndroid Build Coastguard Worker
47*1fa6dee9SAndroid Build Coastguard Worker  rename_deps_cmd = f"{buildTop}/prebuilts/go/linux-x86/bin/go run bpmodify.go -w -m=* -property=static_libs,deps,required,test_suites,name,host,libs,data_bins,data_native_bins,tools,shared_libs,file_contexts,target.not_windows.required,target.android.required,target.platform.required -replace-property={replacementsString} {buildTop}"
48*1fa6dee9SAndroid Build Coastguard Worker  print(rename_deps_cmd)
49*1fa6dee9SAndroid Build Coastguard Worker  subprocess.check_output(rename_deps_cmd, shell=True)
50*1fa6dee9SAndroid Build Coastguard Worker
51*1fa6dee9SAndroid Build Coastguard Worker  # Some properties (for example,  data ), refer to files. Such properties may also refer to a filegroup module by prefixing it with a colon. Replacing these module references must thus be done separately.
52*1fa6dee9SAndroid Build Coastguard Worker  colon_rename_deps_cmd = f"{buildTop}/prebuilts/go/linux-x86/bin/go run bpmodify.go -w -m=* -property=data -replace-property={colonReplacementsString} {buildTop}"
53*1fa6dee9SAndroid Build Coastguard Worker  print(colon_rename_deps_cmd)
54*1fa6dee9SAndroid Build Coastguard Worker  subprocess.check_output(colon_rename_deps_cmd, shell=True)
55*1fa6dee9SAndroid Build Coastguard Worker
56*1fa6dee9SAndroid Build Coastguard Worker
57*1fa6dee9SAndroid Build Coastguard Workerif __name__ == "__main__":
58*1fa6dee9SAndroid Build Coastguard Worker  main()
59