Files
xen/linux-2.6-xen-sparse/mkbuildtree
T
kaf24@firebug.cl.cam.ac.uk ba4a95bee1 In some cases, say for instance for some bizzare reason
the tree was checked out of CVS, which doens't neccessarily
store file permissions, mkbuildtree may not be executable.
So run them explicitly via bash.

Signed-Off-By: Horms <horms@verge.net.au>
2006-04-13 11:24:00 +01:00

121 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
# mkbuildtree <build tree>
#
# Creates symbolic links in <build tree> for the sparse tree
# in the current directory.
# Script to determine the relative path between two directories.
# Copyright (c) D. J. Hawkey Jr. 2002
# Fixed for Xen project by K. Fraser in 2003.
abs_to_rel ()
{
local CWD SRCPATH
if [ "$1" != "/" -a "${1##*[^/]}" = "/" ]; then
SRCPATH=${1%?}
else
SRCPATH=$1
fi
if [ "$2" != "/" -a "${2##*[^/]}" = "/" ]; then
DESTPATH=${2%?}
else
DESTPATH=$2
fi
CWD=$PWD
[ "${1%%[^/]*}" != "/" ] && cd $1 && SRCPATH=$PWD
[ "${2%%[^/]*}" != "/" ] && cd $2 && DESTPATH=$PWD
[ "$CWD" != "$PWD" ] && cd $CWD
BASEPATH=$SRCPATH
[ "$SRCPATH" = "$DESTPATH" ] && DESTPATH="." && return
[ "$SRCPATH" = "/" ] && DESTPATH=${DESTPATH#?} && return
while [ "$BASEPATH/" != "${DESTPATH%${DESTPATH#$BASEPATH/}}" ]; do
BASEPATH=${BASEPATH%/*}
done
SRCPATH=${SRCPATH#$BASEPATH}
DESTPATH=${DESTPATH#$BASEPATH}
DESTPATH=${DESTPATH#?}
while [ -n "$SRCPATH" ]; do
SRCPATH=${SRCPATH%/*}
DESTPATH="../$DESTPATH"
done
[ -z "$BASEPATH" ] && BASEPATH="/"
[ "${DESTPATH##*[^/]}" = "/" ] && DESTPATH=${DESTPATH%?}
}
# relative_lndir <target_dir>
# Creates a tree of symlinks in the current working directory that mirror
# real files in <target_dir>. <target_dir> should be relative to the current
# working directory. Symlinks in <target_dir> are ignored. Source-control files
# are ignored.
relative_lndir ()
{
local SYMLINK_DIR REAL_DIR pref i j
SYMLINK_DIR=$PWD
REAL_DIR=$1
(
cd $REAL_DIR
for i in `find . -type d | grep -v SCCS`; do
[ -d $SYMLINK_DIR/$i ] || mkdir -p $SYMLINK_DIR/$i
(
cd $i
pref=`echo $i | sed -e 's#/[^/]*#../#g' -e 's#^\.##'`
for j in `find . -maxdepth 1 -type f -o -type l`; do
ln -sf ${pref}${REAL_DIR}/$i/$j ${SYMLINK_DIR}/$i/$j
done
)
done
)
}
[ "$1" == "" ] && { echo "Syntax: $0 <linux tree to xenify>"; exit 1; }
# Get absolute path to the destination directory
pushd . >/dev/null
cd ${1} || { echo "cannot cd to ${1}"; exit 1; }
AD=$PWD
popd >/dev/null
# Get absolute path to the source directory
AS=`pwd`
# Get path to source, relative to destination
abs_to_rel ${AD} ${AS}
RS=$DESTPATH
# Arch-specific pre-processing
if [ -e arch/${LINUX_ARCH}/xen-mkbuildtree-pre ]; then
bash arch/${LINUX_ARCH}/xen-mkbuildtree-pre
fi
# Remove old copies of files and directories at the destination
for i in `find . -type f -o -type l` ; do rm -f ${AD}/${i#./} ; done
# We now work from the destination directory
cd ${AD} || { echo "cannot cd to ${AD}"; exit 1; }
# Remove old symlinks
for i in `find . -type l`; do rm -f $i; done
# Create symlinks of files and directories which exist in the sparse source
relative_lndir ${RS}
rm -f mkbuildtree
# Create links to the shared definitions of the Xen interfaces.
rm -rf ${AD}/include/xen/interface
mkdir ${AD}/include/xen/interface
cd ${AD}/include/xen/interface
relative_lndir ../../../${RS}/../xen/include/public
# Arch-specific post-processing
cd ${AD}
if [ -e arch/${LINUX_ARCH}/xen-mkbuildtree-post ]; then
bash arch/${LINUX_ARCH}/xen-mkbuildtree-post
fi