# 
# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
# 
# ***** BEGIN LICENSE BLOCK *****
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
#
# The contents of this file are subject to the Mozilla Public License Version
# 1.1 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS IS" basis,
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
# for the specific language governing rights and limitations under the
# License.
#
# The Original Code is the Netscape Portable Runtime (NSPR).
#
# The Initial Developer of the Original Code is
# Netscape Communications Corporation.
# Portions created by the Initial Developer are Copyright (C) 1998-2000
# the Initial Developer. All Rights Reserved.
#
# Contributor(s):
#
# Alternatively, the contents of this file may be used under the terms of
# either the GNU General Public License Version 2 or later (the "GPL"), or
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
# in which case the provisions of the GPL or the LGPL are applicable instead
# of those above. If you wish to allow use of your version of this file only
# under the terms of either the GPL or the LGPL, and not to allow others to
# use your version of this file under the terms of the MPL, indicate your
# decision by deleting the provisions above and replace them with the notice
# and other provisions required by the GPL or the LGPL. If you do not delete
# the provisions above, a recipient may use your version of this file under
# the terms of any one of the MPL, the GPL or the LGPL.
#
# ***** END LICENSE BLOCK *****
#
#ident	"$Id: pkginfo.tmpl,v 1.3 2005/02/25 20:20:52 christophe.ravel.bugs%sun.com Exp $"
#
#
# This required package information file describes characteristics of the
# package, such as package abbreviation, full package name, package version,
# and package architecture.
#
PKG="SUNWpr"
NAME="Netscape Portable Runtime"
ARCH="ISA"
VERSION="NSPRVERS,REV=0.0.0"
SUNW_PRODNAME="Netscape Portable Runtime"
SUNW_PRODVERS="NSPRVERS"
SUNW_PKGTYPE="usr"
MAXINST="1000"
CATEGORY="system"
DESC="Netscape Portable Runtime Interface"
VENDOR="Sun Microsystems, Inc."
HOTLINE="Please contact your local service provider"
EMAIL=""
CLASSES="none"
BASEDIR=/
SUNW_PKGVERS="1.0"
#VSTOCK="<reserved by Release Engineering for package part #>"
#ISTATES="<developer defined>"
#RSTATES='<developer defined>'
#ULIMIT="<developer defined>"
#ORDER="<developer defined>"
#PSTAMP="<developer defined>"
#INTONLY="<developer defined>"
