From 5ace0fb3b078ac1e11337fc36ca3cd0cdea09c18 Mon Sep 17 00:00:00 2001 From: Jamie Cameron Date: Thu, 14 Mar 2013 18:31:23 -0700 Subject: [PATCH] More work on FreeBSD ports --- software/lang/en | 6 ++++ software/ports-lib.pl | 61 ++++++++++++++++++++++++++++++++++++---- software/software-lib.pl | 2 +- 3 files changed, 62 insertions(+), 7 deletions(-) diff --git a/software/lang/en b/software/lang/en index 9b94ec9c8..6a21b1c65 100644 --- a/software/lang/en +++ b/software/lang/en @@ -393,4 +393,10 @@ hpux_enforce_scripts=Enforce scripts? hpux_enforce_dsa=Enforce disk space analysis? hpux_root=Root directory +ports_install=Installing FreeBSD ports $1 .. +ports_failed=.. some ports failed +ports_ok=.. install complete +ports_input=Package from ports +ports_find=Search Ports + __norefs=1 diff --git a/software/ports-lib.pl b/software/ports-lib.pl index 02522f4fe..1e2cbabbc 100644 --- a/software/ports-lib.pl +++ b/software/ports-lib.pl @@ -17,19 +17,32 @@ print "",&text('ports_install', "$update"),"

\n"; print "

";
 my $err = 0;
 foreach my $w (@want) {
-	my $cmd = "cd /usr/ports/$w && make package";
+	# Build the packages
+	my ($dir) = grep { !/\/distfiles\// } glob("/usr/ports/*/$w");
+	my $cmd = "cd $dir && make package";
 	&additional_log('exec', undef, $cmd);
 	$ENV{'BATCH'} = 1;
+	my @newrv;
 	&open_execute_command(CMD, "$cmd ) {
 		s/\r|\n//g;
 		if (/Building\s+package\s+(\S+)/) {
-			push(@rv, $2);
+			push(@newrv, $2);
 			}
+		print &html_escape($_."\n");
 		}
-	print &html_escape($_."\n");
 	close(CMD);
+	if (@newrv) {
+		# Install the packages
+		&open_execute_command(CMD, "cd $dir && pkg_add ".join(" ", @newrv), 2);
+		while() {
+			s/\r|\n//g;
+			print &html_escape($_."\n");
+			}
+		close(CMD);
+		}
 	$err++ if ($?);
+	push(@rv, @newrv);
 	}
 print "
\n"; if ($err) { @@ -55,9 +68,10 @@ if ($out =~ /make\s+fetchindex/) { $out = &backquote_command("$cmd 2>&1 $1 }; - push(@rv, $1); + if ($line =~ /Path:\s+\/usr\/ports\/(\S+\/(\S+))/) { + my $p = { 'name' => $2, + 'fullname' => $1 }; + push(@rv, $p); } elsif ($line =~ /Info:\s+(.*)/ && @rv) { $rv[$#rv]->{'desc'} = $1; @@ -67,6 +81,41 @@ foreach my $line (split(/\r?\n/, $out)) { return @rv; } +# update_system_resolve(name) +# Converts a standard package name like apache, sendmail or squid into +# the name used by ports. +sub update_system_resolve +{ +local ($name) = @_; +return $name eq "apache" ? "apache22 ap22-mod_.*" : + $name eq "dhcpd" ? "isc-dhcp-42-server" : + $name eq "mysql" ? "mysql-server" : + $name eq "openssh" ? "openssh-portable" : + $name eq "postgresql" ? "postgresql-server" : + $name eq "openldap" ? "openldap-server openldap-client" : + $name; +} +# update_system_available() +# Returns a list of package names and versions that are available from ports +sub update_system_available +{ +local @rv; +&execute_command("cd /usr/ports && make fetchindex"); +&open_execute_command(PKG, "cd /usr/ports && make search 'key=*'", 2, 1); +my @rv; +while(my $line = ) { + s/\r|\n//g; + if ($line =~ /Path:\s+\/usr\/ports\/(\S+\/(\S+))/) { + my $p = { 'name' => $2, + 'fullname' => $1 }; + push(@rv, $p); + } + elsif ($line =~ /Info:\s+(.*)/ && @rv) { + $rv[$#rv]->{'desc'} = $1; + } + } +return @rv; +} 1; diff --git a/software/software-lib.pl b/software/software-lib.pl index 4fc5efe7a..a54b2233a 100755 --- a/software/software-lib.pl +++ b/software/software-lib.pl @@ -21,7 +21,7 @@ elsif ($config{'update_system'}) { else { # Guess which update system we are using if ($gconfig{'os_type'} eq 'freebsd') { - $update_systme = "ports"; + $update_system = "ports"; } elsif (&has_command($config{'apt_mode'} ? "aptitude" : "apt-get")) { $update_system = "apt";