summaryrefslogtreecommitdiff
path: root/usr/src/tools/scripts/interface_cmp.1
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/tools/scripts/interface_cmp.1')
-rw-r--r--usr/src/tools/scripts/interface_cmp.1231
1 files changed, 231 insertions, 0 deletions
diff --git a/usr/src/tools/scripts/interface_cmp.1 b/usr/src/tools/scripts/interface_cmp.1
new file mode 100644
index 0000000000..1802c6dd56
--- /dev/null
+++ b/usr/src/tools/scripts/interface_cmp.1
@@ -0,0 +1,231 @@
+.\" Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+.\" Use is subject to license terms.
+.\"
+.\" 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
+.\"
+.TH interface_cmp 1 "2 July 2009"
+.SH NAME
+interface_cmp \- compare shared object interface descriptions
+.SH SYNOPSIS
+\fBinterface_cmp [-dot] [-e exfile] old new\fP
+.LP
+.SH DESCRIPTION
+.IX "OS-Net build tools" "interface_cmp" "" "\fBinterface_cmp\fP"
+The
+.I interface_cmp
+command compares the interface definition files for two workspaces
+and reports versioning inconsistencies. Interface definition
+files are created by
+.IR interface_check.
+.PP
+.I interface_cmp
+is typically called from \fBnightly(1)\fP when the \fB-A\fP
+option is in effect following the creation of a new database by
+.IR interface_check .
+To insure symbolic
+interface consistency between successive software releases, existing
+version definitions and their symbol association should remain intact.
+Any discrepancies between the two interface definitions are flagged as
+errors.
+.PP
+Note that version definition inheritance has the effect of causing a
+symbol to be viewed as existing in multiple definitions. This insures
+that both version definitions and their inheritance relationship are
+processed as part of the comparison.
+.LP
+.SH OPTIONS
+.LP
+The following options are supported:
+.TP 4
+.B \-d
+Asserts that the \fBnew\fP interface is a direct descendant of
+\fBold\fP. If so, the following additional checks are enabled:
+.RS +4
+.TP
+.ie t \(bu
+.el o
+The top version of an inheritance chain must not increase
+by more than one.
+.RE
+.RS +4
+.TP
+.ie t \(bu
+.el o
+The new interface must not add new empty versions. Pre-existing empty
+versions represent public interfaces that cannot be changed, but new
+ones should be removed before the product ships.
+.RE
+.sp
+.LP
+.TP 4
+.B \-e exfile
+An exception file is used to exclude objects from
+the usual rules. See EXCEPTION FILE FORMAT.
+.TP 4
+.B \-o
+Produce one-liner output, with each line of diagnostic output
+prefixed with the object pathname.
+.TP 4
+.B \-t
+If the \fB-t\fP option is present, only one argument is allowed.
+The interface description file is parsed, and then regenerated on
+stdout in the same format used by the
+.I interface_check
+\fB-I\fP option. The \fB-I\fP output from
+.I interface_check
+and the output from
+.I interface_cmp
+\fB-t\fP
+should be identical, excluding header comments.
+This is a debugging feature, and not intended for general use.
+.LP
+.SH EXCEPTION FILE FORMAT
+Exceptions to the rules enforced by
+.I interface_cmp
+are specified using an exception file. The \fB-e\fP option is used to
+specify an explicit exception file. Otherwise, if used in an activated
+workspace, the default exception file is
+$CODEMGR_WS/exception_list/interface_cmp
+if that file exists. If not used in an activated workspace, or if
+$CODEMGR_WS/exception_list/interface_cmp does not exist,
+.I interface_cmp
+will use
+.I /opt/onbld/etc/exception_list/interface_cmp
+as a fallback default exception file.
+.p
+To run
+.I interface_cmp
+without applying exceptions, specify \fB-e\fP with a value of /dev/null.
+.P
+A '#' character at the beginning of a line, or at any point in
+a line when preceded by whitespace, introduces a comment. Empty lines,
+and lines containing only comments, are ignored by
+.I interface_cmp.
+Exceptions are specified as space separated keyword, and \fBperl(1)\fP
+regular expressions. The number of regular expressions depends on the
+particular exception in questions:
+.sp
+.in +4
+.nf
+keyword perl-regex...
+.fi
+.in -4
+.sp
+Since whitespace is used as a separator, the regular
+expression cannot itself contain whitespace. Use of the \\s character
+class to represent whitespace within the regular expression is recommended.
+Before the perl regular expression is used, constructs of the form
+MACH(dir) are expanded into a regular expression that matches the directory
+given, as well as any 64-bit architecture subdirectory that
+might be present (i.e. amd64, sparcv9). For instance, MACH(lib) will
+match any of the following:
+.sp
+.in +4
+.nf
+lib
+lib/amd64
+lib/sparcv9
+.fi
+.in -4
+.sp
+The exceptions understood by
+.I interface_cmp
+are:
+.sp
+.ne 2
+.mk
+.na
+\fBADDSYM\fR sym_re version_re object_re
+.ad
+.RS 17n
+.rt
+.sp
+The interfaces in a given version are not supposed to change.
+.I interface_cmp
+will normally issue an error if a new interface is added to a previously
+released version. ADDSYM is used to override this
+requirement. If the added symbol, version, and object match
+the regular expressions specified by ADDSYM, the added symbol is ignored.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fBDELDYM\fR sym_re version_re object_re
+.ad
+.RS 17n
+.rt
+.sp
+Once released to the public, interfaces are required to remain available
+in subsequent releases. DELSYM is used to override this
+requirement, as can occur when interfaces are EOL'd. Such an action generally
+requires a PSARC case. If the deleted symbol, version, and object match
+the regular expressions specified by DELSYM, the deleted symbol is ignored.
+.RE
+
+.sp
+.ne 2
+.mk
+.na
+\fBEMPTY_TOPVERSION\fR version_re object_re
+.ad
+.RS 17n
+.rt
+.sp
+.I
+interface_cmp
+normally issues an error if the old object has an empty top version
+that is non-empty in the new object. Such a situation is normally
+an error, but may legitimately occur as part of a fix to another versioning
+error. If the version, and object match
+the regular expressions specified by EMPTY_TOPVERSION, the error is suppressed.
+.RE
+
+.PP
+.SH EXAMPLES
+The following example uses
+.I interface_cmp
+to compare this releases interface definition with a previous
+builds results:
+.PP
+.RS
+.nf
+.B % interface_cmp -d -o $SRC/ELF-data.$MACH.ref/interfaces\ \\\\
+.B \ \ \ \ \ \ \ $SRC/ELF-data.$MACH/interfaces
+lib/libadm.so.1: SUNW_1.1: added interface: circf(4)
+lib/libaio.so.1: SUNW_1.1: deleted interface: _aiocancel
+.fi
+.RE
+.sp
+.PP
+Note: the above comparison files were doctored in order to provide
+the example, they do not indicate any real changes that have
+occurred in the associated system libraries.
+.br
+.SH SEE ALSO
+.BR find_elf(1),
+.BR interface_check(1),
+.BR ld(1),
+.BR ldd(1),
+.BR elfdump(1),
+.BR pvs(1).
+.LP
+.TZ LLM