#!/usr/perl5/bin/perl
|
#
|
# CDDL HEADER START
|
#
|
# The contents of this file are subject to the terms of the
|
# Common Development and Distribution License (the "License").
|
# You may not use this file except in compliance with the License.
|
#
|
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
|
# or http://www.opensolaris.org/os/licensing.
|
# See the License for the specific language governing permissions
|
# and limitations under the License.
|
#
|
# When distributing Covered Code, include this CDDL HEADER in each
|
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
|
# If applicable, add the following below this CDDL HEADER, with the
|
# fields enclosed by brackets "[]" replaced with your own identifying
|
# information: Portions Copyright [yyyy] [name of copyright owner]
|
#
|
# CDDL HEADER END
|
#
|
# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
#
|
# sunw-history-package
|
# A simple program to generate the actions contained in the SUNW package
|
# that maps between the old (pre build-133) and new ips package names.
|
#
|
|
$|=1;
|
|
use Getopt::Long;
|
use File::Basename /qw basename/;
|
|
my $PKG = '/usr/bin/pkg';
|
|
sub generate_manifest {
|
local ($package_name) = @_;
|
my ($package, %depends) = ();
|
|
# gather some data
|
open($FP, "$PKG contents -r -H -o action.raw $package_name |");
|
|
while (<$FP>) { # save what we want
|
if (m{set\s+name=pkg.fmri\s+value=pkg://.+/(.+):.+$}) {
|
$package = $1;
|
} elsif (m{depend fmri=(.+)\s+type=require$}) {
|
$depends{$1} = 1;
|
}
|
}
|
|
close($FP);
|
|
# generate the manifest actions
|
print <<EOF;
|
set name=pkg.fmri value=pkg:/$package
|
set name=pkg.renamed value=true
|
|
set name=org.opensolaris.consolidation value=\$(CONSOLIDATION)
|
|
set name=variant.opensolaris.zone value=global value=nonglobal
|
set name=variant.arch value=\$(ARCH)
|
|
EOF
|
foreach (sort keys %depends) {
|
(m{^consolidation/}) ||
|
print "depend fmri=$_ type=require\n"
|
}
|
}
|
|
sub usage {
|
my $program = basename($0);
|
print <<EOF;
|
Usage: $program (--package (new-ips-name)) ...
|
|
EOF
|
exit(1);
|
}
|
|
sub main {
|
my (@current_packages, %SUNWpackages) = ();
|
|
GetOptions('package:s' => \@current_packages);
|
|
($#current_packages == -1) && usage();
|
|
# find all SUNW packages that require the supplied packages
|
foreach (@current_packages) {
|
open($FP, "$PKG search -r -H -o pkg.name 'SUNW*:depend::*/$_' |");
|
|
while (<$FP>) {
|
chomp;
|
$SUNWpackages{$_} = 1;
|
}
|
|
close($FP);
|
}
|
|
# generate manifests for each SUNWpackage
|
foreach (sort keys %SUNWpackages) {
|
print "\n\n$_.p5m actions:\n";
|
generate_manifest($_);
|
}
|
}
|
|
#
|
# Main execution starts here.
|
#
|
main();
|