#!/usr/bin/env python
# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Script for converting celt_pitch_xcorr_arm.s -> celt_pitch_xcorr_arm.S
# using the arm2gnu.pl script.

from __future__ import print_function

import os
import sys


USAGE = ('Usage:\n'
         './convert_rtcd_assembler.py arm2gnu_script input_file output_file')


def main(argv):
  if len(argv) != 3:
    print('Error: You must pass the following arguments:\n'
          ' * arm2gnu_script_path\n'
          ' * input_file\n'
          ' * output_file', file=sys.stderr)
    print(USAGE)
    return 1

  arm2gnu_script = os.path.abspath(argv[0])
  if not os.path.exists(arm2gnu_script):
    print('Error: Cannot find arm2gnu.pl script at: %s.' %
          arm2gnu_script, file=sys.stderr)
    return 2

  input_file = os.path.abspath(argv[1])
  if not os.path.exists(input_file):
    print('Error: Cannot find input file at: %s.' % input_file, file=sys.stderr)
    return 3

  output_file = argv[2]

  # Ensure the output file's directory path exists.
  output_dir = os.path.dirname(output_file)
  if not os.path.exists(output_dir):
    os.makedirs(output_dir)

  cmd = ('perl %s %s | '
         'sed "s/OPUS_ARM_MAY_HAVE_[A-Z]*/1/g" | '
         'sed "/.include/d" '
         '> %s') % (arm2gnu_script, input_file, output_file)
  return os.system(cmd)

if __name__ == '__main__':
  sys.exit(main(sys.argv[1:]))
