#!/usr/bin/env php

<?php declare(strict_types=1);

/*

 * This file is part of PHPUnit.

 *

 * (c) Sebastian Bergmann <sebastian@phpunit.de>

 *

 * For the full copyright and license information, please view the LICENSE

 * file that was distributed with this source code.

 */



if (!version_compare(PHP_VERSION, PHP_VERSION, '=')) {

    fwrite(

        STDERR,

        sprintf(

            '%s declares an invalid value for PHP_VERSION.' . PHP_EOL .

            'This breaks fundamental functionality such as version_compare().' . PHP_EOL .

            'Please use a different PHP interpreter.' . PHP_EOL,



            PHP_BINARY

        )

    );



    die(1);

}



if (version_compare('7.3.0', PHP_VERSION, '>')) {

    fwrite(

        STDERR,

        sprintf(

            'This version of PHPUnit requires PHP >= 7.3.' . PHP_EOL .

            'You are using PHP %s (%s).' . PHP_EOL,

            PHP_VERSION,

            PHP_BINARY

        )

    );



    die(1);

}



foreach (['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'] as $extension) {

    if (extension_loaded($extension)) {

        continue;

    }



    fwrite(

        STDERR,

        sprintf(

            'PHPUnit requires the "%s" extension.' . PHP_EOL,

            $extension

        )

    );



    die(1);

}



if (!ini_get('date.timezone')) {

    ini_set('date.timezone', 'UTC');

}



if (isset($GLOBALS['_composer_autoload_path'])) {

    define('PHPUNIT_COMPOSER_INSTALL', $GLOBALS['_composer_autoload_path']);



    unset($GLOBALS['_composer_autoload_path']);

} else {

    foreach (array(__DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php') as $file) {

        if (file_exists($file)) {

            define('PHPUNIT_COMPOSER_INSTALL', $file);



            break;

        }

    }



    unset($file);

}



if (!defined('PHPUNIT_COMPOSER_INSTALL')) {

    fwrite(

        STDERR,

        'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL .

        '    composer install' . PHP_EOL . PHP_EOL .

        'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL

    );



    die(1);

}



$options = getopt('', array('prepend:'));



if (isset($options['prepend'])) {

    require $options['prepend'];

}



unset($options);



require PHPUNIT_COMPOSER_INSTALL;



PHPUnit\TextUI\Command::main();

