xref: /openbsd/regress/usr.sbin/pkg_add/my (revision d415bd75)
1#! /usr/bin/perl
2
3# ex:ts=8 sw=4:
4# $OpenBSD: my,v 1.6 2019/08/19 12:11:04 espie Exp $
5#
6# Copyright (c) 2011 Marc Espie <espie@openbsd.org>
7#
8# Permission to use, copy, modify, and distribute this software for any
9# purpose with or without fee is hereby granted, provided that the above
10# copyright notice and this permission notice appear in all copies.
11#
12# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19use strict;
20use warnings;
21use File::Path;
22
23my $root = $ENV{'ROOT'};
24
25File::Path::make_path("$root/pkgdb");
26
27$ENV{'PKG_DBDIR'} = "$root/pkgdb";
28my $prog = "pkg_".(shift @ARGV);
29
30my @args = ('-D', 'nonroot', @ARGV);
31if ($prog ne 'pkg_info') {
32	unshift(@args, '-B', $root);
33}
34if ($prog eq 'pkg_add') {
35	unshift(@args, '-D', 'unsigned');
36}
37unshift(@args, '-D', 'NOINSTALLPATH');
38unshift(@args, '-D', 'DONTLOG');
39if ($ENV{'DEBUG'}) {
40	unshift(@args, 'perl', '-d', "/usr/sbin/$prog", '-D', 'debug');
41} else {
42	unshift(@args, $prog);
43}
44print STDERR join(' ', $prog, @ARGV), "\n" unless $ENV{'SILENT'} || $ENV{'VERBOSE'};
45print join(' ', @args), "\n" if $ENV{'VERBOSE'};
46
47my $choices = {
48	pkg_add => 'PkgAdd',
49	pkg_check => 'PkgCheck',
50	pkg_create => 'PkgCreate',
51	pkg_delete => 'PkgDelete',
52	pkg_info => 'PkgInfo',
53	pkg_sign => 'PkgSign',
54	fw_update => 'FwUpdate',
55};
56
57if (defined $ENV{INJECT}) {
58	my $module = "OpenBSD::$choices->{$prog}";
59	eval "require $module";
60	if ($@) {
61		die $@;
62	}
63	eval "require \"$ENV{INJECT}\"";
64	if ($@) {
65		die $@;
66	}
67	@ARGV = @args;
68	exit($module->parse_and_run(shift @ARGV));
69} else {
70	exec {$args[0]} @args;
71}
72