fix pharext package name, release and metadata
[pharext/pharext.org] / app / Pharext / Package.php
1 <?php
2
3 namespace app\Pharext;
4
5 use pharext\Metadata;
6 use pharext\SourceDir;
7 use pharext\Task;
8
9 class Package
10 {
11 private $source;
12 private $file;
13 private $name;
14 private $release;
15 private $zend;
16
17 function __construct($git_url, $tag_name, $pkg_name, $options) {
18 $dir = (new Task\GitClone($git_url, $tag_name))->run();
19 $src = !empty($options["pecl"])
20 ? new SourceDir\Pecl($dir)
21 : new SourceDir\Git($dir);
22
23 /* setup defaults */
24 $this->release = $tag_name;
25 $this->name = $pkg_name;
26 $this->zend = !empty($options["zend"]);
27
28 /* override with package info from SourceDir */
29 foreach ($src->getPackageInfo() as $key => $val) {
30 switch ($key) {
31 case "name":
32 case "release":
33 case "zend":
34 $this->$key = $val;
35 break;
36 }
37 }
38
39 $this->source = $src;
40 }
41
42 function build() {
43 $meta = Metadata::all() + [
44 "name" => $this->name,
45 "release" => $this->release,
46 "license" => $this->source->getLicense(),
47 "stub" => "pharext_installer.php",
48 "type" => $this->zend ? "zend_extension" : "extension",
49 ];
50 $this->file = (new Task\PharBuild($this->source, $meta))->run();
51
52 return sprintf("%s-%s.ext.phar", $this->name, $this->release);
53 }
54
55 function __toString() {
56 return (string) $this->file;
57 }
58
59 function getFile() {
60 return $this->file;
61 }
62
63 function getName() {
64 return $this->name;
65 }
66
67 function getRelease() {
68 return $this->release;
69 }
70 }