From 34284101c2aa60ec1e824a54de543148aaa28b58 Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Tue, 24 Mar 2015 19:15:57 +0100 Subject: [PATCH] support for zend_extension --- bin/pharext | Bin 62765 -> 64772 bytes src/pharext/ExecCmd.php | 5 ++++- src/pharext/Installer.php | 27 ++++++++++++++++++++++++--- src/pharext/Packager.php | 9 ++++++--- src/pharext/SourceDir/Pecl.php | 7 +++++++ src/pharext/Task/Activate.php | 32 ++++++++++++++++++++++++++++---- 6 files changed, 69 insertions(+), 11 deletions(-) diff --git a/bin/pharext b/bin/pharext index dbde37d8ae89529d271f2a087833d8c9252d2def..ab09749d7e0a67da7726820110b5d8d721279faf 100755 GIT binary patch delta 1332 zcmZuwZD>Dy@?J72OiG* z`Ml40&+IQ{pFS^}n9}6d&(qrlQYAXV<|Lo4&@Ib7E`|didu;AW_K&T%fM4J!})2#>> z>28Dtx*cJo$ApmQ9lRa)1lAyu@Sa#RKLyv&IB`ZV{Tk!UwxC3EYY(@A^ zd>i3~1uas*6}D$X+%_?Eo%1)lpOH*1cO|pRKaxqX$s54*QSVmQ7h9~U5NA&gB;b@+ zLf=g*WZ7%xi49oA7;G4LbCbsOtfrFT^q8WtgZgmSK^A_0JVG)o88yyrKUrGNxCPo; zDRh7RmXT;(sDPD68*9=^IHANC$;4x-!b>o4&G$kgzrMouz>)lrpeo~xHWE58mYN`i z6f|PASIs7q+^Ml7Q!=l|*>+gW_rrW%sIV#W`>-(_Tr7w16Hk4iLoyy_s#V0ygU_El zGYRL?(}>Mp{J{i%ligbK_s-!b%?1ESte6F%^8mpAB^;odNgt^Gg`PX zniT@ygoMp4jbw=W{TM?>WTIq<$TTgbnML4v$W!Xf8GrTt(QS3Um20Tt+(yGGH5!j` zhVWiag8P%z@Z!tE#2k#b;-kk?DoJSs>y8#Jux!*q!_jg0({RDmsn|MO30jPxaObEO zrVlk&*)CJ8Hs}oqu;p|Jo}H)%&#{5ZmmJ{Z&zb>FUuxtt0dgSPa4a3Q!pz zFGpB1!|Z-^wdH_4odQhEd{Q;_3ey}c&-_;XiUErnKcA^1hB>IbAI=jat=6bSJ{RDkF^(o$TLFRF-4zMv=yGU2(RIfznF z(gjieN_rrwUP%i?tyZ!EQO}i(K$NsHnDSRP0r6Uu^?5)p`pwM1a4^mB%;b-XB9pHu zOM>LyLzJkh7=m~aDrO*Rf{H1KI<8_2qW(ZALsfl&!|V{(foP5@7D=G{!M4v)1-s>p zD%h0&s$d7|sp*5X$E#@x+?Ivt1JT|pOAbz+siq2&I{;DgQ4Oq5MIB_y<`DH@?#XRa zO*a2E3TEOh$;d3$wM)*=%}vZpnH*xOH2J@&_~v=0_t-b@vH!|4xonZ}<_oS|9Bf>i zoFzq-lP9_hPhRiIFA4+~ z_t%L|mYg3nnXle<@~`=RlLg9jC+qEIpZt5lyvZJml$bQFCzmd2status) { - throw new Exception("Command {$this->command} failed ({$this->status})"); + throw new Exception("Command {$exec} failed ({$this->status})"); } + + return $this; } /** diff --git a/src/pharext/Installer.php b/src/pharext/Installer.php index 4b90c49..10486d2 100644 --- a/src/pharext/Installer.php +++ b/src/pharext/Installer.php @@ -38,6 +38,16 @@ class Installer implements Command "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], ]); } @@ -93,6 +103,17 @@ class Installer implements Command $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; @@ -177,16 +198,16 @@ class Installer implements Command } $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); } } diff --git a/src/pharext/Packager.php b/src/pharext/Packager.php index ba7de89..5194951 100644 --- a/src/pharext/Packager.php +++ b/src/pharext/Packager.php @@ -55,11 +55,13 @@ class Packager implements Command 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], ]); } @@ -220,6 +222,7 @@ class Packager implements Command "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(); diff --git a/src/pharext/SourceDir/Pecl.php b/src/pharext/SourceDir/Pecl.php index 0b7055a..9ca9726 100644 --- a/src/pharext/SourceDir/Pecl.php +++ b/src/pharext/SourceDir/Pecl.php @@ -57,6 +57,13 @@ class Pecl implements \IteratorAggregate, SourceDir $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; diff --git a/src/pharext/Task/Activate.php b/src/pharext/Task/Activate.php index 29341cc..1bbd9a8 100644 --- a/src/pharext/Task/Activate.php +++ b/src/pharext/Task/Activate.php @@ -22,6 +22,16 @@ class Activate implements Task */ private $inis; + /** + * @var string + */ + private $type; + + /** + * @var string + */ + private $php_config; + /** * @var string */ @@ -30,15 +40,24 @@ class Activate implements Task /** * @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; } /** @@ -47,12 +66,17 @@ class Activate implements Task */ 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); @@ -60,7 +84,7 @@ class Activate implements Task } /* 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(); -- 2.30.2