make_recovery_patch.py revision 8b72aefb5a8ed4da28c6f83854e8babf53b9cb53
18b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert#!/usr/bin/env python 28b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# 38b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# Copyright (C) 2014 The Android Open Source Project 48b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# 58b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# Licensed under the Apache License, Version 2.0 (the "License"); 68b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# you may not use this file except in compliance with the License. 78b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# You may obtain a copy of the License at 88b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# 98b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# http://www.apache.org/licenses/LICENSE-2.0 108b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# 118b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# Unless required by applicable law or agreed to in writing, software 128b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# distributed under the License is distributed on an "AS IS" BASIS, 138b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 148b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# See the License for the specific language governing permissions and 158b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert# limitations under the License. 168b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 178b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertimport sys 188b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 198b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertif sys.hexversion < 0x02070000: 208b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert print >> sys.stderr, "Python 2.7 or newer is required." 218b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert sys.exit(1) 228b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 238b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertimport os 248b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertimport common 258b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 268b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan AlbertOPTIONS = common.OPTIONS 278b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 288b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertdef main(argv): 298b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert # def option_handler(o, a): 308b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert # return False 318b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 328b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert args = common.ParseOptions(argv, __doc__) 338b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert input_dir, output_dir = args 348b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 358b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert OPTIONS.info_dict = common.LoadInfoDict(input_dir) 368b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 378b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert recovery_img = common.GetBootableImage("recovery.img", "recovery.img", 388b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert input_dir, "RECOVERY") 398b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert boot_img = common.GetBootableImage("boot.img", "boot.img", 408b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert input_dir, "BOOT") 418b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 428b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert if not recovery_img or not boot_img: 438b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert sys.exit(0) 448b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 458b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert def output_sink(fn, data): 468b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert with open(os.path.join(output_dir, "SYSTEM", *fn.split("/")), "wb") as f: 478b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert f.write(data) 488b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 498b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert common.MakeRecoveryPatch(input_dir, output_sink, recovery_img, boot_img) 508b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 518b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 528b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertif __name__ == '__main__': 538b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert main(sys.argv[1:]) 54