/**
* Run the command
* @param array $args
+ * @return \pharext\ExecCmd self
* @throws \pharext\Exception
*/
public function run(array $args = null) {
}
if ($this->status) {
- throw new Exception("Command {$this->command} failed ({$this->status})");
+ throw new Exception("Command {$exec} failed ({$this->status})");
}
+
+ return $this;
}
/**
"sudo -S %s"],
["i", "ini", "Activate in this php.ini instead of loaded default php.ini",
CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::REQARG],
+ [null, "signature", "Dump package signature",
+ CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
+ [null, "license", "Show package license",
+ CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
+ [null, "name", "Show package name",
+ CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
+ [null, "release", "Show package release version",
+ CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
+ [null, "version", "Show pharext version",
+ CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
]);
}
$this->help($prog);
exit;
}
+ try {
+ foreach (["signature", "name", "license", "release", "version"] as $opt) {
+ if ($this->args[$opt]) {
+ printf("%s\n", $this->metadata($opt));
+ exit;
+ }
+ }
+ } catch (\Exception $e) {
+ $this->error("%s\n", $e->getMessage());
+ exit(2);
+ }
foreach ($this->args->validate() as $error) {
$errs[] = $error;
}
$sudo = isset($this->args->sudo) ? $this->args->sudo : null;
-
+ $type = $this->metadata("type") ?: "php";
+
try {
$this->info("Running INI activation ...\n");
- $activate = new Task\Activate($temp, $files, $sudo);
+ $activate = new Task\Activate($temp, $files, $type, $this->args->prefix, $this->args{"common-name"}, $sudo);
if (!$activate->run($this->args->verbose)) {
$this->info("Extension already activated ...\n");
}
} catch (\Exception $e) {
$this->error("%s\n", $e->getMessage());
- $this->error("%s\n", $output);
exit(3);
}
}
CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG],
["S", "sign", "Sign the PHAR with a private key",
CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::REQARG],
- [null, "signature", "Dump signature",
+ ["E", "zend", "Mark as Zend Extension",
+ CliArgs::OPTIONAL|CliARgs::SINGLE|CliArgs::NOARG],
+ [null, "signature", "Dump pharext signature",
CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
- [null, "license", "Show license",
+ [null, "license", "Show pharext license",
CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
- [null, "version", "Show version",
+ [null, "version", "Show pharext version",
CliArgs::OPTIONAL|CliArgs::SINGLE|CliArgs::NOARG|CliArgs::HALT],
]);
}
"release" => $this->args->release,
"license" => @file_get_contents(current(glob($this->source->getBaseDir()."/LICENSE*"))),
"stub" => "pharext_installer.php",
+ "type" => $this->args->zend ? "zend_extension" : "extension",
]);
$file = (new Task\PharBuild($this->source, $meta))->run();
$cmd->warn("%s\n", $error);
}
}
+ if (!isset($args->zend)) {
+ if ($sxe->xpath("/pecl:package/pecl:zendextsrcrelease")) {
+ foreach ($args->parse(1, ["--zend"]) as $error) {
+ $cmd->warn("%s\n", $error);
+ }
+ }
+ }
$this->cmd = $cmd;
$this->sxe = $sxe;
*/
private $inis;
+ /**
+ * @var string
+ */
+ private $type;
+
+ /**
+ * @var string
+ */
+ private $php_config;
+
/**
* @var string
*/
/**
* @param string $cwd working directory
* @param array $inis custom INI or list of loaded/scanned INI files
+ * @param string $type extension or zend_extension
+ * @param string $prefix install prefix, e.g. /usr/local
+ * @param string $common_name PHP programs common name, e.g. php5
* @param string $sudo sudo command
* @throws \pharext\Exception
*/
- public function __construct($cwd, array $inis, $sudo = null) {
+ public function __construct($cwd, array $inis, $type = "extension", $prefix = null, $common_name = "php", $sudo = null) {
$this->cwd = $cwd;
+ $this->type = $type;
$this->sudo = $sudo;
if (!$this->inis = $inis) {
throw new Exception("No PHP INIs given");
}
+ $cmd = $common_name . "-config";
+ if (isset($prefix)) {
+ $cmd = $prefix . "/bin/" . $cmd;
+ }
+ $this->php_config = $cmd;
}
/**
*/
public function run($verbose = false) {
$extension = basename(current(glob("{$this->cwd}/modules/*.so")));
- $pattern = preg_quote($extension);
+
+ if ($this->type === "zend_extension") {
+ $pattern = preg_quote((new ExecCmd($this->php_config))->run(["--extension-dir"])->getOutput() . "/$extension", "/");
+ } else {
+ $pattern = preg_quote($extension, "/");
+ }
foreach ($this->inis as $file) {
$temp = new Tempfile("phpini");
foreach (file($file) as $line) {
- if (preg_match("/^\s*extension\s*=\s*[\"']?{$pattern}[\"']?\s*(;.*)?\$/", $line)) {
+ if (preg_match("/^\s*{$this->type}\s*=\s*[\"']?{$pattern}[\"']?\s*(;.*)?\$/", $line)) {
return false;
}
fwrite($temp->getStream(), $line);
}
/* not found; append to last processed file, which is the main by default */
- fprintf($temp->getStream(), "extension=%s\n", $extension);
+ fprintf($temp->getStream(), $this->type . "=%s\n", $extension);
$temp->closeStream();
$path = $temp->getPathname();