diff options
author | Colin Smith <colin@pfsense.org> | 2005-03-11 23:58:38 +0000 |
---|---|---|
committer | Colin Smith <colin@pfsense.org> | 2005-03-11 23:58:38 +0000 |
commit | 2bccc5fce04d814f7eb85025ae77d329e1d1ca7d (patch) | |
tree | 044ea7a83c28b496bfb70351e0ae562fae39c802 /etc | |
parent | 5ffe08156bd603179d333627402d65ba0cdb379d (diff) | |
download | pfsense-2bccc5fce04d814f7eb85025ae77d329e1d1ca7d.zip pfsense-2bccc5fce04d814f7eb85025ae77d329e1d1ca7d.tar.gz |
Properly handle a mix of both package XML and other package dependencies.
Diffstat (limited to 'etc')
-rw-r--r-- | etc/inc/pfsense-utils.inc | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc index 1f7818b..4a84617 100644 --- a/etc/inc/pfsense-utils.inc +++ b/etc/inc/pfsense-utils.inc @@ -651,8 +651,10 @@ function reverse_strrchr($haystack, $needle) { /* * get_package_depends($pkg_name, $filetype = ".xml", $format = "files"): Return a package's XML dependencies. - * "files" = filenames - * "names" = stripped filenames + * + * $filetype = "all" || ".xml", ".tgz", etc. + * $format = "files" (full filenames) || + * */ function get_package_depends($pkg_name, $filetype = ".xml", $format = "files") { global $config; @@ -670,9 +672,9 @@ function get_package_depends($pkg_name, $filetype = ".xml", $format = "files") { if($pkg_xml['additional_files_needed'] != "") { foreach($pkg_xml['additional_files_needed']['0'] as $item) { $depend_file = substr(strrchr($item['0'], "/"),1); // Strip URLs down to filenames. + $depend_name = reverse_strrchr($depend_file, "."); // Strip filename down to dependency name. if ($filetype != "all" && !preg_match("/\{$filetype}/i", $depend_file)) break; // If the file doesn't end in desired extension (case-insensitive) exit the loop. if(!file_exists("/usr/local/pkg/" . $pkg_name)) { - $depend_name = reverse_strrchr($depend_file, "."); // Strip filename down to dependency name. log_error("Fetching missing dependency \(" . $depend_name . "\) for " . $pkg_name); if($item['prefix'] != "") { // Use the prefix defined in XML if applicable. $prefix = $item['prefix']; @@ -688,9 +690,24 @@ function get_package_depends($pkg_name, $filetype = ".xml", $format = "files") { $depends[] = $depend_file; break; case "names": - $depend_xml = parse_xml_config_pkg("/usr/local/pkg/" . $depend_file, "packagegui"); - $depends[] = $depend_xml['name']; - break; + switch ($filetype) { + case "all": + if(preg_match("/\.xml/i", $depend_file)) { + $depend_xml = parse_xml_config_pkg("/usr/local/pkg/" . $depend_file, "packagegui"); + $depends[] = $depend_xml['name']; + break; + } else { + $depends[] = $depend_name; // If this dependency isn't package XML, use the stripped filename. + break; + } + case ".xml": + $depend_xml = parse_xml_config_pkg("/usr/local/pkg/" . $depend_file, "packagegui"); + $depends[] = $depend_xml['name']; + break; + default: + $depends[] = $depend_name; // If we aren't looking for XML, use the stripped filename (it's all we have). + break; + } } } return $depends; |