#!/usr/bin/env python3
# Copyright (c) 2023, 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.

import os
import platform
import subprocess
import sys

sys.path.insert(
    0,
    os.path.abspath(
        os.path.join(os.path.dirname(__file__),
                     '../../third_party/fuchsia/test_scripts/test/')))

from common import catch_sigterm, wait_for_sigterm


def Main():
    """
    Execute the test-scripts with required environment variables. It acts like
    /usr/bin/env, but provides some extra functionality to dynamically set up
    the environment variables.
    """
    # Ensures the signals can be correctly forwarded to the subprocesses.
    catch_sigterm()

    os.environ['SRC_ROOT'] = os.path.abspath(
        os.path.join(os.path.dirname(__file__), os.pardir, os.pardir))
    os.environ['FUCHSIA_IMAGES_ROOT'] = os.path.join(os.environ['SRC_ROOT'],
                                                     'third_party', 'fuchsia',
                                                     'images')
    sdk_dir = ''
    if platform.system() == 'Linux':
        sdk_dir = 'linux'
    elif platform.system() == 'Darwin':
        sdk_dir = 'mac'
    else:
        assert False, 'Unsupported OS'
    os.environ['FUCHSIA_SDK_ROOT'] = os.path.join(os.environ['SRC_ROOT'],
                                                  'third_party', 'fuchsia',
                                                  'sdk', sdk_dir)

    os.environ['FUCHSIA_GN_SDK_ROOT'] = os.path.join(os.environ['SRC_ROOT'],
                                                     'third_party', 'fuchsia',
                                                     'gn-sdk', 'src')

    with subprocess.Popen(sys.argv[1:]) as proc:
        try:
            proc.wait()
        except:
            # Use terminate / SIGTERM to allow the subprocess exiting cleanly.
            proc.terminate()
        return proc.returncode


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