Support FreeBSD PKGNG in 'software'

The below unified diff can also be found at https://www.jr-hosting.nl/patches/software-freebsd-lib-dot-pl.diff

This diff makes it possible to use the pkgNG framework that is being developed and actively migrated towards within FreeBSD. The diff below checks whether pkg is installed and if so then it will modify the commandline to get the output accordingly .

Please commit this to the latest webmin tree :)

-- freebsd-lib.pl.orig 2013-05-14 04:51:42.000000000 +0200
+++ freebsd-lib.pl 2013-08-03 23:47:14.000000000 +0200
@@ -3,11 +3,26 @@

use POSIX;
chop($system_arch = `uname -m`);
+
+# check whether the new pkg manager is available and use that.
+if( -e "/usr/sbin/pkg" ) {
+
+ $pkg_info = "pkg info";
+ $pkg_add = "pkg add";
+ $pkg_delete = "pkg delete";
+}
+# If not, default to the previous pkg manager tools
+else {
+ $pkg_info = "pkg_info";
+ $pkg_add = "pkg_add";
+ $pkg_delete = "pkg_delete";
+}
+
$package_dir = "/var/db/pkg";

sub list_package_system_commands
{
-return ("pkg_info", "pkg_add");
+return ("$pkg_info", "$pkg_add");
}

# list_packages([package]*)
@@ -17,7 +32,7 @@
local $i = 0;
local $arg = @_ ? join(" ", map { quotemeta($_) } @_) : "-a";
%packages = ( );
-&open_execute_command(PKGINFO, "pkg_info -I $arg", 1, 1);
+&open_execute_command(PKGINFO, "$pkg_info -I $arg", 1, 1);
while() {
if (/^(\S+)\-(\d\S+)\s+(.*)/) {
$packages{$i,'name'} = $1;
@@ -38,7 +53,7 @@
{
local ($name, $ver) = @_;
local $qm = quotemeta($name.($ver ? '='.$ver : '>=0'));
-local $out = &backquote_command("pkg_info $qm 2>&1", 1);
+local $out = &backquote_command("$pkg_info $qm 2>&1", 1);
return () if ($?);
local @rv = ( $name );
push(@rv, "");
@@ -60,7 +75,7 @@
local $i = 0;
local $file;
local $qm = quotemeta($name.($ver ? '='.$ver : '>=0'));
-&open_execute_command(PKGINFO, "pkg_info -L $qm", 1, 1);
+&open_execute_command(PKGINFO, "$pkg_info -L $qm", 1, 1);
while($file = ) {
$file =~ s/\r|\n//g;
next if ($file !~ /^\//);
@@ -86,7 +101,7 @@
local ($pkg, $v) = @_;
local $qn = quotemeta($pkg.($v ? '='.$v : '>=0'));
local @rv;
-&open_execute_command(RPM, "pkg_info -L $qn", 1, 1);
+&open_execute_command(RPM, "$pkg_info -L $qn", 1, 1);
while() {
s/\r|\n//g;
if (/^\//) {
@@ -106,7 +121,7 @@
local (%packages, $file, $i, @pkgin);
local $n = &list_packages();
for($i=0; $i<$n; $i++) {
- &open_execute_command(PKGINFO, "pkg_info -L $packages{$i,'name'}", 1, 1);
+ &open_execute_command(PKGINFO, "$pkg_info -L $packages{$i,'name'}", 1, 1);
while($file = ) {
$file =~ s/\r|\n//g;
if ($file eq $_[0]) {
@@ -246,7 +261,7 @@
local $in = $_[2] ? $_[2] : \%in;
local $args = ($in->{"scripts"} ? " -I" : "").
($in->{"force"} ? " -f" : "");
-local $out = &backquote_logged("pkg_add $args $_[0] 2>&1");
+local $out = &backquote_logged("$pkg_add $args $_[0] 2>&1");
if ($?) {
return "$out";
}
@@ -267,7 +282,7 @@
else {
$file = $_[0];
}
-local $out = &backquote_logged("pkg_add $args $file 2>&1");
+local $out = &backquote_logged("$pkg_add $args $file 2>&1");
if ($?) {
return "$out";
}
@@ -280,7 +295,7 @@
{
local ($name, $in, $ver) = @_;
local $qm = quotemeta($name.($ver ? '='.$ver : '>=0'));
-local $out = &backquote_logged("pkg_delete $qm 2>&1");
+local $out = &backquote_logged("$pkg_delete $qm 2>&1");
if ($?) { return "$out"; }
return undef;
}
@@ -295,7 +310,7 @@
local $qm = quotemeta($names[$i].($vers[$i] ? '='.$vers[$i] : '>=0'));
push(@qm, $qm);
}
-local $out = &backquote_logged("pkg_delete ".join(" ", @qm)." 2>&1");
+local $out = &backquote_logged("$pkg_delete ".join(" ", @qm)." 2>&1");
if ($?) { return "$out"; }
return undef;
}
@@ -307,7 +322,7 @@

sub package_help
{
-return "pkg_add pkg_info pkg_delete";
+return "$pkg_add $pkg_info $pkg_delete";
}

1;

Status: 
Active

Comments

Thanks! I will include this in the next Webmin release.