#!/bin/perl -w # # 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 # 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 # # # 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 # # # # genunix_archive=/path/to/genunix/archive # # patch 100001-01 kureq 100002-01 # usr/src/uts/sparc/sd/debug32/sd # module2 # # patch 100003-08 # module3 # # The machine-optimal format for the above looks like this: # # GENUNIX_ARCHIVE=/path/to/genunix/archive # 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 # # * The presence of `usr/src' at the beginning of each module path will be # assumed, and is not required to be specified. # use strict; use Getopt::Std; use File::Basename; my $PROGNAME = basename($0); my $genunix_archive; my %moddata; my %typehash = ( BUILD => [ "debug32", "debug64", "obj32", "obj64" ], BUILD32 => [ "debug32", "obj32" ], BUILD64 => [ "debug64", "obj64" ] ); my %opts; my $err = 0; $err = 1 unless getopts("ho:", \%opts); if ($opts{"o"}) { close(STDOUT); open(STDOUT, ">" . $opts{"o"}) || do { print STDERR "Couldn't open " . $opts{"o"} . ": $!\n"; exit(1); } } if ($opts{"h"}) { &usage; exit(2); } if (@ARGV != 1) { $err = 1; } if ($err) { &usage; exit(2); } $::table = $ARGV[0]; if (!open(TABLE, "<$::table")) { print STDERR "Couldn't open $::table: $!\n"; exit(1); } if (!&read_table) { exit(1); } &sub_vars; &dump_table; 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 (