ctfcvtptbl.pl revision 7c478bd95313f5f23a4c958a745db2134aa03244
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (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
# 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
#
#
# ident "%Z%%M% %I% %E% SMI"
#
# Copyright 2002 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ctfcvtptbl [-o outfile] patch-makeup-table
#
# Given a path to a patch makeup table, this script converts that table to
# machine-optimal format and deposits it in the file specified by the -o option
# or on stdout depending on whether or not -o is specified.
#
# The user-supplied patch makeup table is in the following format:
#
# #
# # comment
# #
#
#
# patch 100001-01 kureq 100002-01
# module2
#
# patch 100003-08
# module3
#
# The machine-optimal format for the above looks like this:
#
# module1 100001-01 100002-01
# module2 100001-01 100002-01
# module3 100003-08
#
#
# Macros and other time-savers:
#
# * $RELEASE and $MACH in the genunix archive path will be replaced by the
# values of the RELEASE and MACH environment variables, respectively, as
# set by the program calling this one.
#
# * BUILD, BUILD32, and BUILD64 will, when used in the path for the module,
# will be match as follows:
#
# BUILD debug32, debug64, obj32, obj64
# BUILD32 debug32, obj32
# BUILD64 debug64, obj64
#
# assumed, and is not required to be specified.
#
use strict;
my $genunix_archive;
my %moddata;
my %typehash = (
);
my %opts;
my $err = 0;
if ($opts{"o"}) {
close(STDOUT);
exit(1);
}
}
if ($opts{"h"}) {
&usage;
exit(2);
}
if (@ARGV != 1) {
$err = 1;
}
if ($err) {
&usage;
exit(2);
}
if (!open(TABLE, "<$::table")) {
print STDERR "Couldn't open $::table: $!\n";
exit(1);
}
if (!&read_table) {
exit(1);
}
&sub_vars;
exit(0);
sub usage {
print STDERR "Usage: $PROGNAME [-o outfile] table\n";
}
sub read_table {
my $patchid = "";
my $kureq = "";
my $kuprev = "";
$genunix_archive = "";
undef %moddata;
while (<TABLE>) {
chop;
s/\#.*$//; # Strip comments
s/^\s+//;
if (!$patchid && /^genunix_archive=(\S+)\s*$/) {
$genunix_archive = $1;
next;
}
while ($_) {
(!$_ || /^\s/)) {
$patchid = $1;
} elsif ($patchid && s/^(\S+)//) {
my $module = $1;
&parseerror("No kuprev supplied " .
"for entry including genunix");
}
}
if (($module =~
}
} else {
}
} else {
&parseerror("Cannot parse table");
}
s/^\s+//;
}
}
if (!$genunix_archive) {
print STDERR "No genunix_archive line in table\n";
return (0);
}
if (!%moddata) {
print STDERR "No module information read\n";
return (0);
}
return (1);
}
sub parseerror {
my $msg = $_[0];
print STDERR "$msg at line $.\n";
exit(1);
}
sub sub_vars {
}
sub dump_table {
}
}