1eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien#!/usr/bin/env python 2ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# 3ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# Copyright (C) 2011-2012 The Android Open Source Project 4ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# 5ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# Licensed under the Apache License, Version 2.0 (the "License"); 6ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# you may not use this file except in compliance with the License. 7ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# You may obtain a copy of the License at 8ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# 9ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# http://www.apache.org/licenses/LICENSE-2.0 10ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# 11ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# Unless required by applicable law or agreed to in writing, software 12ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# distributed under the License is distributed on an "AS IS" BASIS, 13ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# See the License for the specific language governing permissions and 15ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# limitations under the License. 16ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang# 17ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang 18ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Changimport datetime 19eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 20eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chienimport re 21eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chienimport sys 22eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 23eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chiendef extract_config(f): 244885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien conf_patt = re.compile('# Configurations') 254885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien split_patt = re.compile('#={69}') 26eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien var_patt = re.compile('libbcc_([A-Z_]+)\\s*:=\\s*([01])') 27eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 284885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien STATE_PRE_CONFIG = 0 294885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien STATE_FOUND_CONFIG = 1 304885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien STATE_IN_CONFIG = 2 314885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien 324885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien state = STATE_PRE_CONFIG 334885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien 34eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien for line in f: 354885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien if state == STATE_PRE_CONFIG: 364885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien if conf_patt.match(line.strip()): 37ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang print '#ifndef BCC_CONFIG_FROM_MK_H' 38ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang print '#define BCC_CONFIG_FROM_MK_H' 394885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien state = STATE_FOUND_CONFIG 404885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien 414885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien elif state == STATE_FOUND_CONFIG: 424885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien if split_patt.match(line.strip()): 434885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien # Start reading the configuration 444885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien print '/* BEGIN USER CONFIG */' 454885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien state = STATE_IN_CONFIG 464885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien 474885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien elif state == STATE_IN_CONFIG: 484885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien match = var_patt.match(line.strip()) 494885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien if match: 504885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien print '#define', match.group(1), match.group(2) 514885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien 524885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien elif split_patt.match(line.strip()): 534885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien # Stop reading the configuration 544885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien print '/* END USER CONFIG */' 55ddf5661793de8fb4e16906b7f7822972fcb13c6dZonr Chang print '#endif // BCC_CONFIG_FROM_MK_H' 564885cf8889f2290ecd04a02e067cb2f44c3cdf6cLogan Chien break 57eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 58eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chiendef main(): 59eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien if len(sys.argv) != 1: 60eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien print >> sys.stderr, 'USAGE:', sys.argv[0] 61eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien sys.exit(1) 62eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 63eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien extract_config(sys.stdin) 64eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 65eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien 66eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chienif __name__ == '__main__': 67eb567849ac8b123f7afe78bb81ff8a4f921a6a6fLogan Chien main() 68