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