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