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 1789fbb0f6d586b4111b9207438d5d047ba0ad6d5fTao Baofrom __future__ import print_function 1889fbb0f6d586b4111b9207438d5d047ba0ad6d5fTao Bao 198b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertimport sys 208b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 218b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertif sys.hexversion < 0x02070000: 2289fbb0f6d586b4111b9207438d5d047ba0ad6d5fTao Bao print("Python 2.7 or newer is required.", file=sys.stderr) 238b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert sys.exit(1) 248b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 258b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertimport os 268b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertimport common 278b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 288b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan AlbertOPTIONS = common.OPTIONS 298b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 308b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertdef main(argv): 318b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert # def option_handler(o, a): 328b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert # return False 338b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 348b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert args = common.ParseOptions(argv, __doc__) 358b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert input_dir, output_dir = args 368b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 378b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert OPTIONS.info_dict = common.LoadInfoDict(input_dir) 388b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 398b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert recovery_img = common.GetBootableImage("recovery.img", "recovery.img", 408b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert input_dir, "RECOVERY") 418b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert boot_img = common.GetBootableImage("boot.img", "boot.img", 428b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert input_dir, "BOOT") 438b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 448b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert if not recovery_img or not boot_img: 458b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert sys.exit(0) 468b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 478b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert def output_sink(fn, data): 488b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert with open(os.path.join(output_dir, "SYSTEM", *fn.split("/")), "wb") as f: 498b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert f.write(data) 508b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 518b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert common.MakeRecoveryPatch(input_dir, output_sink, recovery_img, boot_img) 528b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 538b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert 548b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albertif __name__ == '__main__': 558b72aefb5a8ed4da28c6f83854e8babf53b9cb53Dan Albert main(sys.argv[1:]) 56