# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Helper script to run dump_syms on Chrome Linux executables and strip
# them if needed.

from __future__ import print_function

import os
import subprocess
import sys

if len(sys.argv) != 5:
  print("dump_app_syms.py <dump_syms_exe> <strip_binary>")
  print("                 <binary_with_symbols> <symbols_output>")
  sys.exit(1)

dumpsyms = sys.argv[1]
strip_binary = sys.argv[2]
infile = sys.argv[3]
outfile = sys.argv[4]

# Dump only when the output file is out-of-date.
if not os.path.isfile(outfile) or \
   os.stat(outfile).st_mtime < os.stat(infile).st_mtime:
  with open(outfile, 'w') as outfileobj:
    subprocess.check_call([dumpsyms, infile], stdout=outfileobj)

if strip_binary != '0':
  subprocess.check_call(['strip', infile])
