| 1 | # ========== Copyright Header Begin ========================================== |
| 2 | # |
| 3 | # OpenSPARC T2 Processor File: sed.py |
| 4 | # Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. |
| 5 | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES. |
| 6 | # |
| 7 | # The above named program is free software; you can redistribute it and/or |
| 8 | # modify it under the terms of the GNU General Public |
| 9 | # License version 2 as published by the Free Software Foundation. |
| 10 | # |
| 11 | # The above named program is distributed in the hope that it will be |
| 12 | # useful, but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | # General Public License for more details. |
| 15 | # |
| 16 | # You should have received a copy of the GNU General Public |
| 17 | # License along with this work; if not, write to the Free Software |
| 18 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. |
| 19 | # |
| 20 | # ========== Copyright Header End ============================================ |
| 21 | # |
| 22 | # use baseline file to generate a target specific file. |
| 23 | # |
| 24 | # usage: sed.py base_file [key1:val1,key2:val2,...] dest_file |
| 25 | # replace every @-keyX-@ in base_file with valX, and store the final |
| 26 | # result in dest_file. |
| 27 | # |
| 28 | import os, sys |
| 29 | |
| 30 | ######################## |
| 31 | ##### MAIN ##### |
| 32 | ######################## |
| 33 | if __name__ == '__main__': |
| 34 | |
| 35 | if len(sys.argv) < 4: |
| 36 | sys.stdout.write('usage: python %s base-file [key1:val1,key2:val2,...] dest-file\n' % (sys.argv[0])) |
| 37 | sys.exit(1) |
| 38 | |
| 39 | base_file = sys.argv[1] |
| 40 | opts = sys.argv[2] |
| 41 | dest_file = sys.argv[3] |
| 42 | |
| 43 | i = opts.find('[') |
| 44 | if i > -1: |
| 45 | opts = opts[i+1:] |
| 46 | i = opts.rfind(']') |
| 47 | if i > -1: |
| 48 | opts = opts[:i] |
| 49 | |
| 50 | options = { } |
| 51 | tokens = opts.split(',') |
| 52 | for token in tokens: |
| 53 | i = token.find(':') |
| 54 | key = token[:i] |
| 55 | val = token[i+1:] |
| 56 | if not options.has_key(key): |
| 57 | options[key] = val |
| 58 | else: |
| 59 | sys.stdout.write('ERROR: %s: duplicate option "%s"\n' % (sys.argv[0], key)) |
| 60 | |
| 61 | tmp1 = os.path.basename(dest_file) + '_tmp1' |
| 62 | tmp2 = os.path.basename(dest_file) + '_tmp2' |
| 63 | os.system('/usr/bin/cp -f %s %s' % (base_file, tmp1)) |
| 64 | for key in options.keys(): |
| 65 | cmd = "/usr/bin/sed 's!@-%s-@!%s!g' < %s > %s" % (key, options[key], tmp1, tmp2) |
| 66 | os.system(cmd) |
| 67 | os.system('/usr/bin/cp -f %s %s' % (tmp2, tmp1)) |
| 68 | |
| 69 | os.system('/usr/bin/cp -f %s %s' % (tmp1, dest_file)) |
| 70 | os.remove(tmp1) |
| 71 | os.remove(tmp2) |