xref: /onnv-gate/usr/src/cmd/perl/contrib/copy_contrib.sh (revision 1277:fbc63bc995ee)
1#!/bin/ksh -p
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License (the "License").
7# You may not use this file except in compliance with the License.
8#
9# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10# or http://www.opensolaris.org/os/licensing.
11# See the License for the specific language governing permissions
12# and limitations under the License.
13#
14# When distributing Covered Code, include this CDDL HEADER in each
15# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16# If applicable, add the following below this CDDL HEADER, with the
17# fields enclosed by brackets "[]" replaced with your own identifying
18# information: Portions Copyright [yyyy] [name of copyright owner]
19#
20# CDDL HEADER END
21#
22
23#
24# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27# ident	"%Z%%M%	%I%	%E% SMI"
28#
29
30#
31# Because we build more than one copy of perl at the same time we need each
32# to have its own copy of the contrib subdirectory so that the concurrent
33# builds don't interfere with each other.  Rather than duplicating the contents
34# of the contrib directory under each version of perl we copy the clearfiles
35# from usr/src/cmd/perl/contrib to the appropriate build directory, taking
36# care only to do the copy if necessary so as not to cause unnecessary rebuilds.
37#
38
39function usage
40{
41	printf 'copy_contrib: usage is <src dir> <dst dir> <module> ...\n'
42	exit 1
43}
44
45# Check arguments.
46typeset -r src=$1
47typeset -r dst=$2
48[[ $src = $dst || ! ( -d $src && -d $dst ) ]] && usage
49shift 2
50typeset -r modules=$*
51[[ -z $modules ]] && usage
52typeset -r pwd=$PWD
53
54#
55# Make sure all the modules have the necessary clearfiles fetched,
56# but only if we have SCCS files (not true for the source product).
57#
58for dir in $(cd $src && find $modules -type d -name SCCS); do
59	dir=${dir%/SCCS}
60	cd $src/$dir
61	for file in SCCS/s.*; do
62		file=${file#SCCS/s\.}
63		if [[ ! ( -f $file || -f SCCS/p.$file ) ]]; then
64			set -e
65			printf 'sccs get %s/%s\n' $dir $file
66			sccs get $file
67			set +e
68		fi
69	done
70	cd $pwd
71done
72
73#
74# Now copy all the clearfiles over to the destination directory, but only if
75# the destination file doesn't exist or is older than the source file.
76# Note we also ignore the Teamware req.flg and inc.flg files, to prevent
77# Teamware bringover and putback warning about them not being in SCCS.
78#
79
80for obj in $(cd $src && find $modules -name SCCS -prune -o -print); do
81	# Handle directories.
82	if [[ -d $src/$obj ]]; then
83		# Create destination directory if required.
84		if [[ ! -d $dst/$obj ]]; then
85			set -e
86			printf 'mkdir -p %s/%s\n' $dst $obj
87			mkdir -p $dst/$obj
88			set +e
89		fi
90
91	# Handle plain files.
92	elif [[ -f $src/$obj ]]; then
93		if [[ $obj != */@(req|inc).flg && \
94		    $src/$obj -nt $dst/$obj ]]; then
95			set -e
96			rm -f $dst/$obj
97			printf 'cp -p %s/%s %s/%s\n' $src $obj $dst $obj
98			cp -p $src/$obj $dst/$obj
99			set +e
100		fi
101
102	# Anything else isn't handled.
103	else
104		printf 'copy_contrib: ERROR: unable to copy %s/%s' $src $obj
105		exit 1
106	fi
107done
108exit 0
109