blob: e6575bf4fa20e99fe702feb430a2515083d4bd6d [file] [log] [blame]
#!/bin/sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (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.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# mkshadow.sh -- create a shadow tree
#
# Initially written by Ralf S. Engelschall <rse apache.org>
# for the shadow tree generation option (--shadow) of
# Apache's Autoconf-style Interface (APACI)
# 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"