copy_contrib.sh revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/bin/ksh -p
#
# 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
#
#
# Copyright (c) 2001 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident "%Z%%M% %I% %E% SMI"
#
# Because we build more than one copy of perl at the same time we need each
# to have its own copy of the contrib subdirectory so that the concurrent
# builds don't interfere with each other. Rather than duplicating the contents
# of the contrib directory under each version of perl we copy the clearfiles
# from usr/src/cmd/perl/contrib to the appropriate build directory, taking
# care only to do the copy if necessary so as not to cause unnecessary rebuilds.
#
function usage
{
printf 'copy_contrib: usage is <src dir> <dst dir> <module> ...\n'
exit 1
}
# Check arguments.
typeset -r src=$1
typeset -r dst=$2
[[ $src = $dst || ! ( -d $src && -d $dst ) ]] && usage
shift 2
typeset -r modules=$*
[[ -z $modules ]] && usage
typeset -r pwd=$PWD
#
# Make sure all the modules have the necessary clearfiles fetched,
# but only if we have SCCS files (not true for the source product).
#
for dir in $(cd $src && find $modules -type d -name SCCS); do
dir=${dir%/SCCS}
cd $src/$dir
for file in SCCS/s.*; do
file=${file#SCCS/s\.}
if [[ ! ( -f $file || -f SCCS/p.$file ) ]]; then
set -e
printf 'sccs get %s/%s\n' $dir $file
sccs get $file
set +e
fi
done
cd $pwd
done
#
# Now copy all the clearfiles over to the destination directory, but only if
# the destination file doesn't exist or is older than the source file.
#
for obj in $(cd $src && find $modules -name SCCS -prune -o -print); do
# Handle directories.
if [[ -d $src/$obj ]]; then
# Create destination directory if required.
if [[ ! -d $dst/$obj ]]; then
set -e
printf 'mkdir -p %s/%s\n' $dst $obj
mkdir -p $dst/$obj
set +e
fi
# Handle plain files.
elif [[ -f $src/$obj ]]; then
if [[ $src/$obj -nt $dst/$obj ]]; then
set -e
rm -f $dst/$obj
printf 'cp -p %s/%s %s/%s\n' \
$src $obj $dst $obj
cp -p $src/$obj $dst/$obj
set +e
fi
# Anything else isn't handled.
else
printf 'copy_contrib: ERROR: unable to copy %s/%s' $src $obj
exit 1
fi
done
exit 0