Added composer extension checks to phar bootstrap
This commit is contained in:
parent
dd0e6c6b58
commit
113ca68bd9
@ -26,6 +26,8 @@ class Builder
|
|||||||
|
|
||||||
protected $bins;
|
protected $bins;
|
||||||
|
|
||||||
|
protected $dependencies = [];
|
||||||
|
|
||||||
private static $default_options = [
|
private static $default_options = [
|
||||||
'install' => false,
|
'install' => false,
|
||||||
];
|
];
|
||||||
@ -57,6 +59,18 @@ class Builder
|
|||||||
|
|
||||||
$composer = json_decode($json);
|
$composer = json_decode($json);
|
||||||
|
|
||||||
|
if (isset($composer->require)) {
|
||||||
|
foreach ($composer->require as $package=>$constraint) {
|
||||||
|
if ($package == "php") {
|
||||||
|
$this->dependencies[$package] = $constraint;
|
||||||
|
print_info(" ! require php: %s", $constraint);
|
||||||
|
} elseif (strpos($package, "ext-") === 0) {
|
||||||
|
$this->dependencies[$package] = $constraint;
|
||||||
|
print_info(" ! require ext: %s %s", $package, $constraint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!isset($composer->bin) || !is_array($composer->bin)) {
|
if (!isset($composer->bin) || !is_array($composer->bin)) {
|
||||||
print_warn("No executable defined, building a library phar...");
|
print_warn("No executable defined, building a library phar...");
|
||||||
} elseif (count($composer->bin)>1) {
|
} elseif (count($composer->bin)>1) {
|
||||||
@ -159,10 +173,22 @@ class Builder
|
|||||||
|
|
||||||
$bins = (array)$bins;
|
$bins = (array)$bins;
|
||||||
|
|
||||||
|
$indexFile = "<?php\n";
|
||||||
|
|
||||||
|
$depcheck = null;
|
||||||
|
foreach ($this->dependencies as $dep=>$constraint) {
|
||||||
|
if ($dep == "php") {
|
||||||
|
|
||||||
|
} elseif (strpos($dep, "ext-") === 0) {
|
||||||
|
$ext = substr($dep, 4);
|
||||||
|
$depcheck.= 'if (!extension_loaded("' . $ext . '")) { @fwrite(STDERR, "Fatal: Missing required extension ' . $ext . '.\n"); exit(2); }' . PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!$index && count($bins)==0) {
|
if (!$index && count($bins)==0) {
|
||||||
$indexFile = '<?php require_once __DIR__."/vendor/autoload.php";';
|
$indexFile.= 'require_once __DIR__."/vendor/autoload.php";';
|
||||||
} elseif (count($bins)>1) {
|
} elseif (count($bins)>1) {
|
||||||
$indexFile = '<?php $bin=basename($argv[0],".phar"); switch($bin) {';
|
$indexFile.= '$bin=basename($argv[0],".phar"); switch($bin) {';
|
||||||
for ($n = 1; $n<count($bins); $n++) {
|
for ($n = 1; $n<count($bins); $n++) {
|
||||||
$indexFile.= 'case '.var_export(basename($bins[$n]),true).': require_once __DIR__."/".'.var_export($bins[$n],true).'; break;';
|
$indexFile.= 'case '.var_export(basename($bins[$n]),true).': require_once __DIR__."/".'.var_export($bins[$n],true).'; break;';
|
||||||
}
|
}
|
||||||
@ -183,6 +209,8 @@ class Builder
|
|||||||
$index = "bootstrap.php";
|
$index = "bootstrap.php";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$indexFile = str_replace("<?php", "<?php ".$depcheck, $indexFile);
|
||||||
|
|
||||||
$stub = "#!/usr/bin/env php\n".$phar->createDefaultStub($index);
|
$stub = "#!/usr/bin/env php\n".$phar->createDefaultStub($index);
|
||||||
$phar->setStub($stub);
|
$phar->setStub($stub);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user