#!/bin/bash # mkbuildtree # # Creates symbolic links in 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 # Creates a tree of symlinks in the current working directory that mirror # real files in . should be relative to the current # working directory. Symlinks in 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 . -type f -o -type l -maxdepth 1`; do ln -sf ${pref}${REAL_DIR}/$i/$j ${SYMLINK_DIR}/$i/$j done ) done ) } [ "$1" == "" ] && { echo "Syntax: $0 "; exit 1; } # Get absolute path to the destination directory pushd . >/dev/null cd ${1} AD=$PWD popd >/dev/null # Get absolute path to the source directory AS=`pwd` # Get name of sparse directory SDN=$(basename $AS) # Get path to source, relative to destination abs_to_rel ${AD} ${AS} RS=$DESTPATH # Remove old copies of files and directories at the destination for i in `find sys -type f -o -type l` ; do rm -f ${AD}/${i#./} ; done # We now work from the destination directory cd ${AD} # Remove old symlinks find sys -type l | while read f do case $(readlink $f) in */$SDN/*) rm -f $f ;; esac done if [ -f ${AD}/BUILDING ]; then # Create symlinks of files and directories which exist in the sparse source (cd sys && relative_lndir ../${RS}/sys) else # Create symlinks of files and directories which exist in the sparse source relative_lndir ${RS} rm -f mkbuildtree fi # Create links to the shared definitions of the Xen interface rm -rf ${AD}/sys/arch/xen/include/xen-public mkdir ${AD}/sys/arch/xen/include/xen-public cd ${AD}/sys/arch/xen/include/xen-public relative_lndir ../../../../../${RS}/../xen/include/public # Remove files which don't exist anymore rm -rf ${AD}/sys/arch/xen/xen/events.c rm -rf ${AD}/sys/arch/xen/include/events.h