15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import traceback
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Note: some of these files are imported to register cmdline options.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from idl_generator import Generator
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from idl_option import ParseOptions
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from idl_outfile import IDLOutFile
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from idl_parser import ParseFiles
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from idl_c_header import HGen
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)from idl_thunk import TGen
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from idl_gen_pnacl import PnaclGen
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)def Main(args):
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # If no arguments are provided, assume we are trying to rebuild the
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  # C headers with warnings off.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  try:
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if not args:
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      args = [
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          '--wnone', '--cgen', '--range=start,end',
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          '--pnacl', '--pnaclshim',
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          '../native_client/src/untrusted/pnacl_irt_shim/pnacl_shim.c',
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          '--tgen',
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ]
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      current_dir = os.path.abspath(os.getcwd())
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      script_dir = os.path.abspath(os.path.dirname(__file__))
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if current_dir != script_dir:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        print '\nIncorrect CWD, default run skipped.'
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        print 'When running with no arguments set CWD to the scripts directory:'
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        print '\t' + script_dir + '\n'
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        print 'This ensures correct default paths and behavior.\n'
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return 1
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    filenames = ParseOptions(args)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ast = ParseFiles(filenames)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if ast.errors:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      print 'Found %d errors.  Aborting build.\n' % ast.errors
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return 1
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return Generator.Run(ast)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  except SystemExit, ec:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print 'Exiting with %d' % ec.code
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sys.exit(ec.code)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  except:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    typeinfo, value, tb = sys.exc_info()
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    traceback.print_exception(typeinfo, value, tb)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    print 'Called with: ' + ' '.join(sys.argv)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    sys.exit(Main(sys.argv[1:]))
58