# 
# 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: prototype_sparc,v 1.4 2005/02/25 20:20:52 christophe.ravel.bugs%sun.com Exp $"
#
# This required package information file contains a list of package contents.
# The 'pkgmk' command uses this file to identify the contents of a package
# and their location on the development machine when building the package.
# Can be created via a text editor or through use of the 'pkgproto' command.

#!search <pathname pathname ...>	# where to find pkg objects
#!include <filename>			# include another 'prototype' file
#!default <mode> <owner> <group>	# default used if not specified on entry
#!<param>=<value>			# puts parameter in pkg environment

#
# Include ISA independent files (prototype_com)
#
!include prototype_com
#
#
#
# List files which are SPARC specific here
#
# source locations relative to the prototype file
#
#
# SUNWpr
#
d none usr/lib/mps/cpu 755 root bin
d none usr/lib/mps/cpu/sparcv8plus 755 root bin
d none usr/lib/mps/secv1/cpu 755 root bin
d none usr/lib/mps/secv1/cpu/sparcv8plus 755 root bin
f none usr/lib/mps/cpu/sparcv8plus/libnspr_flt4.so 755 root bin
s none usr/lib/mps/secv1/cpu/sparcv8plus/libnspr_flt4.so=../../../cpu/sparcv8plus/libnspr_flt4.so
#64#s none usr/lib/mps/64=sparcv9
#64#s none usr/lib/mps/secv1/64=sparcv9
#64#d none usr/lib/mps/sparcv9 755 root bin
#64#d none usr/lib/mps/secv1/sparcv9 755 root bin
#64#f none usr/lib/mps/sparcv9/libnspr4.so 755 root bin
#64#f none usr/lib/mps/sparcv9/libplc4.so 755 root bin
#64#f none usr/lib/mps/sparcv9/libplds4.so 755 root bin
#64#s none usr/lib/mps/secv1/sparcv9/libnspr4.so=../../sparcv9/libnspr4.so
#64#s none usr/lib/mps/secv1/sparcv9/libplc4.so=../../sparcv9/libplc4.so
#64#s none usr/lib/mps/secv1/sparcv9/libplds4.so=../../sparcv9/libplds4.so

