source: vendor/bash/3.1-p17/support/mkclone

Last change on this file was 3228, checked in by bird, 18 years ago

bash 3.1

File size: 2.9 KB
Line 
1#! /bin/bash
2#
3# mkclone - symlink every file appearing in $src/MANIFEST to a corresponding
4# file in the target directory ($1). Directories specified in
5# MANIFEST are created in the target directory
6#
7# Copyright (C) 1996-2002 Free Software Foundation, Inc.
8#
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2, or (at your option)
12# any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
22#
23prog=`basename $0`
24
25SRCDIR=src
26
27USAGE="usage: $prog [-m manifest] [-s srcdir] [-v] [-d] [-h] target"
28while getopts dhm:s:v opt
29do
30 case "$opt" in
31 m) MANIFEST=$OPTARG ;;
32 s) SRCDIR=$OPTARG ;;
33 v) verbose=y ;;
34 d) ECHO=echo debug=y ;;
35 h) hardlinks=y ;;
36 ?) echo $USAGE >&2
37 exit 2;;
38 esac
39done
40
41: ${MANIFEST:=${SRCDIR}/MANIFEST}
42
43[ -n "$debug" ] && verbose=
44
45shift $(( $OPTIND - 1 ))
46
47if [ $# -lt 1 ]; then
48 echo $USAGE >&2
49 exit 2
50fi
51
52if [ ! -f $MANIFEST ]; then
53 echo "$prog: $MANIFEST: no such file or directory" >&2
54 echo "$prog: must be run with valid -s argument or from source directory" >&2
55 exit 1
56fi
57
58rm_ltmp=false
59LINKTEMP=`mktemp -t linktmp.XXXXXXXX 2>/dev/null`
60if [ -z "$LINKTEMP" ]; then
61 : ${TMPDIR:=/tmp}
62 LINKTEMP=${TMPDIR}/linktmp.$$
63 rm_ltmp=true
64fi
65
66$rm_ltmp && rm -f ${LINKTEMP}
67# if the user specified hard links, then do that. otherwise, try to use
68# symlinks if they're present
69if [ -n "$hardlinks" ]; then
70 LN=ln
71elif (ln -s /dev/null ${LINKTEMP}) >/dev/null 2>&1; then
72 LN="ln -s"
73else
74 LN=ln
75fi
76rm -f ${LINKTEMP}
77
78TARGET=$1
79
80if [ ! -d "$TARGET" ]; then
81 mkdir "$TARGET"
82fi
83
84echo "${prog}: creating clone of bash source tree (from $SRCDIR) in $TARGET"
85
86cd "$TARGET" || { echo "${prog}: cannot cd to $TARGET" >&2 ; exit 1; }
87
88while read fname type mode
89do
90 [ -z "$fname" ] && continue
91
92 case "$fname" in
93 \#*) continue ;;
94 esac
95
96 case "$type" in
97 d) [ -n "$verbose" ] && echo mkdir $fname
98 $ECHO mkdir $fname ;; # already in $TARGET
99 f) fn=${fname##*/}
100 case "$fname" in
101 */*) dn=${fname%/*} ;;
102 *) dn=. ;;
103 esac
104 if [ -n "$verbose" ] || [ -n "$debug" ]; then
105 echo "( cd $dn && $LN $SRCDIR/$fname $fn )"
106 fi
107 [ -z "$debug" ] && ( cd $dn && $LN $SRCDIR/$fname $fn )
108 ;;
109 *) echo "${prog}: ${fname}: unknown file type $type" 1>&2 ;;
110 esac
111done < $MANIFEST
112
113# special
114SPECIAL="parser-built y.tab.c y.tab.h"
115
116rm -f $SPECIAL
117for sf in $SPECIAL
118do
119 [ -n "$verbose" ] && echo cp -p $SRCDIR/$sf $TARGET
120 $ECHO cp -p $SRCDIR/$sf $TARGET
121done
122
123exit 0
Note: See TracBrowser for help on using the repository browser.