#!/usr/bin/env python
#
# Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
"""
Wrapper around a build action that should only be executed in release mode.

The mode is defined via an environment variable DART_BUILD_MODE.

The arguments to the script are:

  only_in_release_mode.py files... -- command arguments...

If mode is not 'release', the script will create the files listed
before --.  If mode is release, the script will execute the command
after --.
"""

import os
import subprocess
import sys


def Main():
    # Throws an error if '--' is not in the argument list.
    separator_index = sys.argv.index('--')
    outputs = sys.argv[1:separator_index]
    arguments = sys.argv[separator_index + 1:]
    arguments[0] = os.path.normpath(arguments[0])
    mode = os.getenv('DART_BUILD_MODE', 'release')
    if mode != 'release':
        print >> sys.stderr, 'Not running %s in mode=%s' % (arguments, mode)
        for output in outputs:
            with open(output, 'w'):
                # Create an empty file to ensure that we don't rerun this
                # command unnecessarily.
                pass
        return 0
    else:
        try:
            subprocess.check_call(arguments)
        except subprocess.CalledProcessError as e:
            return e.returncode
        return 0


if __name__ == '__main__':
    sys.exit(Main())
