#!/bin/sh ## ## mkshadow.sh -- create a shadow tree ## ## Initially written by Ralf S. Engelschall ## for the shadow tree generation option (--shadow) of ## Apache's Autoconf-style Interface (APACI) ## # # This script falls under the Apache License. # See http://www.apache.org/docs/LICENSE # default IFS DIFS=' ' # source and destination directory src=`echo $1 | sed -e 's:/$::'` dst=`echo $2 | sed -e 's:/$::'` # check whether source exists if [ ! -d $src ]; then echo "mkshadow.sh:Error: source directory not found" 1>&2 exit 1 fi # determine if one of the paths is an absolute path, # because then we have to use an absolute symlink oneisabs=0 case $src in /* ) oneisabs=1 ;; esac case $dst in /* ) oneisabs=1 ;; esac # determine reverse directory for destination directory dstrevdir='' if [ "x$oneisabs" = "x0" ]; then # (inlined fp2rp) OIFS2="$IFS"; IFS='/' for pe in $dst; do dstrevdir="../$dstrevdir" done IFS="$OIFS2" else src="`cd $src; pwd`"; fi # create directory tree at destination if [ ! -d $dst ]; then mkdir $dst fi DIRS="`cd $src; \ find . -type d -print |\ sed -e '/\/CVS/d' \ -e '/^\.$/d' \ -e 's:^\./::'`" OIFS="$IFS" IFS="$DIFS" for dir in $DIRS; do mkdir $dst/$dir done IFS="$OIFS" # fill directory tree with symlinks to files FILES="`cd $src; \ find . -depth -print |\ sed -e '/\.o$/d' \ -e '/\.a$/d' \ -e '/\.so$/d' \ -e '/\.so-o$/d' \ -e '/\.cvsignore$/d' \ -e '/\/CVS/d' \ -e '/\.indent\.pro$/d' \ -e '/\.apaci.*/d' \ -e '/Makefile$/d' \ -e '/\/\.#/d' \ -e '/\.orig$/d' \ -e 's/^\.\///'`" OIFS="$IFS" IFS="$DIFS" for file in $FILES; do # don't use `-type f' above for find because of symlinks if [ -d "$src/$file" ]; then continue fi basename=`echo $file | sed -e 's:^.*/::'` dir=`echo $file | sed -e 's:[^/]*$::' -e 's:/$::' -e 's:$:/:' -e 's:^/$::'` from="$src/$file" to="$dst/$dir$basename" if [ "x$oneisabs" = "x0" ]; then if [ "x$dir" != "x" ]; then subdir=`echo $dir | sed -e 's:/$::'` # (inlined fp2rp) revdir='' OIFS2="$IFS"; IFS='/' for pe in $subdir; do revdir="../$revdir" done IFS="$OIFS2" # finalize from from="$revdir$from" fi from="$dstrevdir$from" fi echo " $to" ln -s $from $to done IFS="$OIFS"