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 
  39 function usage
  40 {
  41         printf 'copy_contrib: usage is <src dir> <dst dir> <module> ...\n'
  42         exit 1
  43 }
  44 
  45 # Check arguments.
  46 typeset -r src=$1
  47 typeset -r dst=$2
  48 [[ $src = $dst || ! ( -d $src && -d $dst ) ]] && usage
  49 shift 2
  50 typeset -r modules=$*
  51 [[ -z $modules ]] && usage
  52 typeset -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 #
  58 for 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
  71 done
  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 
  80 for 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
 107 done
 108 exit 0