Commit: 7a1f065ebfe3fc943dfb563ad825ad88e7314878 Author: Anatol Belski <[email protected]> Sat, 31 Aug 2013 16:31:52 +0200 Parents: 52f1ba37514c122b8f175e9f1eea0aca391a53e3 Branches: master
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=7a1f065ebfe3fc943dfb563ad825ad88e7314878 Log: implemented guessing with/enable config option and more checks Changed paths: M client/include/PeclExt.php Diff: diff --git a/client/include/PeclExt.php b/client/include/PeclExt.php index 07afc27..d850981 100644 --- a/client/include/PeclExt.php +++ b/client/include/PeclExt.php @@ -93,10 +93,7 @@ class PeclExt if (file_exists($tmp_path . DIRECTORY_SEPARATOR . 'package.xml')) { $this->tmp_package_xml_path = $tmp_path . DIRECTORY_SEPARATOR . 'package.xml'; - $this->package_xml = new \DOMDocument; - $this->package_xml->loadXML( - file_get_contents($this->tmp_package_xml_path) - ); + $this->package_xml = new \SimpleXMLElement($this->tmp_package_xml_path, 0, true); } $this->tgz_path = NULL; @@ -194,9 +191,9 @@ class PeclExt what non core exts it deps on */ - $config = NULL; + $config = array(); - /* First look if it's on the known ext list */ + /* look if it's on the known ext list */ $known_path = __DIR__ . '/../data/config/pecl/exts.ini'; $exts = parse_ini_file($known_path, true, INI_SCANNER_RAW); @@ -206,6 +203,22 @@ class PeclExt } } + /* if it's not known yet, we have to gather the info */ + $config_w32_path = $this->tmp_extract_path . DIRECTORY_SEPARATOR . 'config.w32'; + foreach (array('enable' => 'ARG_ENABLE', 'with' => 'ARG_WITH') as $arg => $str) { + if (preg_match(',' . $str .'.*' . $this->name . ',Sm', file_get_contents($config_w32_path))) { + $config['type'] = $arg; + } + } + if (!isset($config['type'])) { + throw new Exception("Couldn't determine whether 'with' or 'enable' configure option to use"); + } + + /* XXX Extension deps have to be checked here using + $this->package_xml->dependencies; */ + + /* XXX Library deps have to be checked using + $this->tmp_extract_path . DIRECTORY_SEPARATOR . 'lib_versions.txt'; */ return $this->buildConfigureLine($config); @@ -221,6 +234,9 @@ class PeclExt $dll_name = 'php_' . $this->name . '.dll'; $dll_file = $target . DIRECTORY_SEPARATOR . $dll_name; + if (!file_exists($base . DIRECTORY_SEPARATOR . $dll_name)) { + throw new \Exception("'$dll_name' doesn't exist after build, build failed"); + } if (!copy($base . DIRECTORY_SEPARATOR . $dll_name, $dll_file)) { throw new \Exception("Couldn't copy '$dll_name' into '$target'"); } @@ -228,6 +244,9 @@ class PeclExt $pdb_name = 'php_' . $this->name . '.pdb'; $pdb_file = $target . DIRECTORY_SEPARATOR . $pdb_name; + if (!file_exists($base . DIRECTORY_SEPARATOR . $pdb_name)) { + throw new \Exception("'$pdb_name' doesn't exist after build"); + } if (!copy($base . DIRECTORY_SEPARATOR . $pdb_name, $pdb_file)) { throw new \Exception("Couldn't copy '$pdb_name' into '$target'"); } @@ -321,8 +340,31 @@ class PeclExt } if (!file_exists($this->tmp_extract_path . DIRECTORY_SEPARATOR . 'config.w32')) { - throw new \Exception("config.w32 not found"); + throw new \Exception("config.w32 doesn't exist in the tarball"); } + + $min_php_ver = (string)$this->package_xml->dependencies->required->php->min; + $max_php_ver = (string)$this->package_xml->dependencies->required->php->max; + $php_ver = ''; + + $ver_hdr = $this->build->getSourceDir() . '/main/php_version.h'; + if(preg_match(',#define PHP_VERSION "(.*)",Sm', file_get_contents($ver_hdr), $m)) { + $php_ver = $m[1]; + } else { + throw new \Exception("Couldn't parse PHP sources for version"); + } + + if ($min_php_ver && version_compare($php_ver, $min_php_ver) < 0) { + throw new \Exception("At least PHP '$min_php_ver' required, got '$php_ver'"); + } + + if ($max_php_ver && version_compare($php_ver, $max_php_ver) >= 0) { + throw new \Exception("At most PHP '$max_php_ver' required, got '$php_ver'"); + } + + //var_dump($php_ver, $min_php_ver, $max_php_ver, $this->package_xml->dependencies);die; + + } } -- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
