From 25adac8859f36bfbd3e4de03170b88d31536671f Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 10 Sep 2017 19:23:34 +0100 Subject: [PATCH] Added support for Composer (#323) --- .gitignore | 2 ++ .travis.yml | 1 + composer.json | 33 ++++++++++++++++++++++++++++++++ composer.lock | 36 +++++++++++++++++++++++++++++++++++ src/pocketmine/PocketMine.php | 14 +++++++++++++- src/pocketmine/Thread.php | 3 ++- src/pocketmine/Worker.php | 3 ++- tests/travis.sh | 2 +- 8 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 composer.json create mode 100644 composer.lock diff --git a/.gitignore b/.gitignore index 17d9ae8d1..20fb4ec1f 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,5 @@ Desktop.ini # Sphinx-doc /docs/build/ !/docs/requirements.txt + +vendor/* diff --git a/.travis.yml b/.travis.yml index bdf5e55e5..fd491e7aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ before_script: - make install - cd .. - echo "extension=pthreads.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini + - composer install script: - ./tests/travis.sh diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..3c5b01883 --- /dev/null +++ b/composer.json @@ -0,0 +1,33 @@ +{ + "name": "pmmp/pocketmine-mp", + "description": "A server software for Minecraft: Pocket Edition written in PHP", + "type": "project", + "homepage": "https://pmmp.io", + "license": "LGPL-3.0", + "require": { + "php": ">=7.2", + "ext-bcmath": "*", + "ext-curl": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-phar": "*", + "ext-pthreads": ">=3.1.7dev", + "ext-reflection": "*", + "ext-sockets": "*", + "ext-spl": "*", + "ext-yaml": ">=2.0.0", + "ext-zip": "*", + "ext-zlib": ">=1.2.11" + }, + "autoload": { + "exclude-from-classmap": [ + "src/spl/stubs" + ], + "psr-0": { + "": ["src", "src/spl"] + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 000000000..f23e45dd8 --- /dev/null +++ b/composer.lock @@ -0,0 +1,36 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "d4fecad9dce5314493052c870c8cf059", + "packages": [], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "ext-pthreads": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=7.2", + "ext-bcmath": "*", + "ext-curl": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-pcre": "*", + "ext-phar": "*", + "ext-pthreads": ">=3.1.7dev", + "ext-reflection": "*", + "ext-sockets": "*", + "ext-spl": "*", + "ext-yaml": ">=2.0.0", + "ext-zip": "*", + "ext-zlib": ">=1.2.11" + }, + "platform-dev": [] +} diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index 865147692..a0a959c68 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -70,6 +70,7 @@ namespace { } namespace pocketmine { + use pocketmine\utils\Binary; use pocketmine\utils\MainLogger; use pocketmine\utils\ServerKiller; @@ -134,15 +135,26 @@ namespace pocketmine { exit(1); } + if(is_file(\pocketmine\PATH . "vendor/autoload.php")){ + require_once(\pocketmine\PATH . "vendor/autoload.php"); + }else{ + echo "[CRITICAL] Composer autoloader not found" . PHP_EOL; + echo "[CRITICAL] Please initialize composer dependencies before running." . PHP_EOL; + exit(1); + } + if(!class_exists("ClassLoader", false)){ require_once(\pocketmine\PATH . "src/spl/ClassLoader.php"); require_once(\pocketmine\PATH . "src/spl/BaseClassLoader.php"); } + /* + * We now use the Composer autoloader, but this autoloader is still used by RakLib and for loading plugins. + */ $autoloader = new \BaseClassLoader(); $autoloader->addPath(\pocketmine\PATH . "src"); $autoloader->addPath(\pocketmine\PATH . "src" . DIRECTORY_SEPARATOR . "spl"); - $autoloader->register(true); + $autoloader->register(false); if(!class_exists(RakLib::class)){ echo "[CRITICAL] Unable to find the RakLib library." . PHP_EOL; diff --git a/src/pocketmine/Thread.php b/src/pocketmine/Thread.php index b6a4d2b62..40ff50985 100644 --- a/src/pocketmine/Thread.php +++ b/src/pocketmine/Thread.php @@ -51,12 +51,13 @@ abstract class Thread extends \Thread{ * (unless you are using a custom autoloader). */ public function registerClassLoader(){ + require(\pocketmine\PATH . "vendor/autoload.php"); if(!interface_exists("ClassLoader", false)){ require(\pocketmine\PATH . "src/spl/ClassLoader.php"); require(\pocketmine\PATH . "src/spl/BaseClassLoader.php"); } if($this->classLoader !== null){ - $this->classLoader->register(true); + $this->classLoader->register(false); } } diff --git a/src/pocketmine/Worker.php b/src/pocketmine/Worker.php index f9ade5071..81365d271 100644 --- a/src/pocketmine/Worker.php +++ b/src/pocketmine/Worker.php @@ -52,12 +52,13 @@ abstract class Worker extends \Worker{ * (unless you are using a custom autoloader). */ public function registerClassLoader(){ + require(\pocketmine\PATH . "vendor/autoload.php"); if(!interface_exists("ClassLoader", false)){ require(\pocketmine\PATH . "src/spl/ClassLoader.php"); require(\pocketmine\PATH . "src/spl/BaseClassLoader.php"); } if($this->classLoader !== null){ - $this->classLoader->register(true); + $this->classLoader->register(false); } } diff --git a/tests/travis.sh b/tests/travis.sh index 17cba4d11..0a705ceac 100755 --- a/tests/travis.sh +++ b/tests/travis.sh @@ -24,7 +24,7 @@ cd tests/plugins/PocketMine-DevTools "$PHP_BINARY" -dphar.readonly=0 ./src/DevTools/ConsoleScript.php --make ./ --relative ./ --out ../../../DevTools.phar cd ../../.. -"$PHP_BINARY" -dphar.readonly=0 DevTools.phar --make src --relative ./ --entry src/pocketmine/PocketMine.php --out PocketMine-MP.phar +"$PHP_BINARY" -dphar.readonly=0 DevTools.phar --make src,vendor --relative ./ --entry src/pocketmine/PocketMine.php --out PocketMine-MP.phar if [ -f PocketMine-MP.phar ]; then echo Server phar created successfully. else