summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2010-07-02 12:42:49 +0000
committerespie <espie@openbsd.org>2010-07-02 12:42:49 +0000
commita265275022819db04d0b0609f31df7af8e0e3346 (patch)
tree7a7aeb369c45cb993b83e59740ba5045d17fb008
parentmove the empty url message up to PackageRepository, so that we can print (diff)
downloadwireguard-openbsd-a265275022819db04d0b0609f31df7af8e0e3346.tar.xz
wireguard-openbsd-a265275022819db04d0b0609f31df7af8e0e3346.zip
parse pkg.conf and use it for default_path if PKG_PATH is not defined.
-rw-r--r--usr.sbin/pkg_add/OpenBSD/PackageLocator.pm35
-rw-r--r--usr.sbin/pkg_add/OpenBSD/State.pm71
2 files changed, 91 insertions, 15 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm b/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
index 99c1f884ea1..71d43931ae8 100644
--- a/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
+++ b/usr.sbin/pkg_add/OpenBSD/PackageLocator.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: PackageLocator.pm,v 1.94 2010/07/02 11:41:30 espie Exp $
+# $OpenBSD: PackageLocator.pm,v 1.95 2010/07/02 12:42:49 espie Exp $
#
# Copyright (c) 2003-2010 Marc Espie <espie@openbsd.org>
#
@@ -25,23 +25,30 @@ use OpenBSD::PackageRepository;
my $default_path;
-sub default_path
+sub build_default_path
{
- if (!defined $default_path) {
- my ($self, $state) = @_;
- $default_path = OpenBSD::PackageRepositoryList->new($state);
+ my ($self, $state) = @_;
+ $default_path = OpenBSD::PackageRepositoryList->new($state);
- if (defined $ENV{PKG_PATH}) {
- my $v = $ENV{PKG_PATH};
- $v =~ s/^\:+//o;
- $v =~ s/\:+$//o;
- while (my $o = OpenBSD::PackageRepository->parse(\$v, $state)) {
- $default_path->add($o);
- }
- } else {
- $default_path->add(OpenBSD::PackageRepository->new("./", $state));
+ if (defined $ENV{PKG_PATH}) {
+ my $v = $ENV{PKG_PATH};
+ $v =~ s/^\:+//o;
+ $v =~ s/\:+$//o;
+ while (my $o = OpenBSD::PackageRepository->parse(\$v, $state)) {
+ $default_path->add($o);
}
+ return;
+ }
+ $default_path->add(OpenBSD::PackageRepository->new("./", $state)->can_be_empty);
+ if (my $i = $state->config->value("installpath")) {
+ $default_path->add(OpenBSD::PackageRepository->new($i, $state));
+ }
+}
+sub default_path
+{
+ if (!defined $default_path) {
+ &build_default_path;
}
return $default_path;
}
diff --git a/usr.sbin/pkg_add/OpenBSD/State.pm b/usr.sbin/pkg_add/OpenBSD/State.pm
index e875fea0929..59926da1081 100644
--- a/usr.sbin/pkg_add/OpenBSD/State.pm
+++ b/usr.sbin/pkg_add/OpenBSD/State.pm
@@ -1,5 +1,5 @@
# ex:ts=8 sw=4:
-# $OpenBSD: State.pm,v 1.11 2010/07/02 11:17:46 espie Exp $
+# $OpenBSD: State.pm,v 1.12 2010/07/02 12:42:49 espie Exp $
#
# Copyright (c) 2007-2010 Marc Espie <espie@openbsd.org>
#
@@ -19,6 +19,70 @@
use strict;
use warnings;
+package OpenBSD::Configuration;
+sub new
+{
+ my ($class, $state) = @_;
+ my $self = bless {}, $class;
+ require OpenBSD::Paths;
+ $self->read_file(OpenBSD::Paths->pkgconf, $state);
+ return $self;
+}
+
+sub read_file
+{
+ my ($self, $filename, $state) = @_;
+ open(my $fh, '<', $filename) or return;
+ my $_;
+ while (<$fh>) {
+ chomp;
+ next if m/^\s*\#/;
+ next if m/^\s*$/;
+ my ($cmd, $k, $v, $add);
+ my $h = $self;
+ if (($cmd, $k, $add, $v) = m/^\s*(.*?)\.(.*?)\s*(\+?)\=\s*(.*)\s*$/) {
+ next unless $cmd eq $state->{cmd};
+ my $h = $self->{cmd} = {};
+ } elsif (($k, $add, $v) = m/^\s*(.*?)\s*(\+?)\=\s*(.*)\s*$/) {
+ } else {
+ # bad line: should we say so ?
+ $state->errsay("Bad line in #1: #2 (#3)",
+ $filename, $_, $.);
+ }
+ # remove caps
+ $k =~ tr/A-Z/a-z/;
+ if ($add eq '') {
+ $h->{$k} = [$v];
+ } else {
+ push(@{$h->{$k}}, $v);
+ }
+ }
+}
+
+sub ref
+{
+ my ($self, $k) = @_;
+ if (defined $self->{cmd}{$k}) {
+ return $self->{cmd}{$k};
+ } else {
+ return $self->{$k};
+ }
+}
+
+sub value
+{
+ my ($self, $k) = @_;
+ my $r = $self->ref($k);
+ if (!defined $r) {
+ return $r;
+ }
+ if (wantarray) {
+ return @$r;
+ } else {
+ return $r->[0];
+ }
+}
+
package OpenBSD::PackageRepositoryFactory;
sub new
{
@@ -105,6 +169,11 @@ sub repo
return $self->{repo};
}
+OpenBSD::Auto::cache(config,
+ sub {
+ return OpenBSD::Configuration->new(shift);
+ });
+
sub usage_is
{
my ($self, @usage) = @_;