xref: /aosp_15_r20/external/e2fsprogs/util/install-symlink.in (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
1*6a54128fSAndroid Build Coastguard Worker#!/bin/sh
2*6a54128fSAndroid Build Coastguard Worker#
3*6a54128fSAndroid Build Coastguard Worker# install-symlink source destination destdir
4*6a54128fSAndroid Build Coastguard Worker#
5*6a54128fSAndroid Build Coastguard Worker
6*6a54128fSAndroid Build Coastguard WorkerSYMLINKS=symlinks
7*6a54128fSAndroid Build Coastguard WorkerLN_S="@LN_S@"
8*6a54128fSAndroid Build Coastguard WorkerRM="@RM@"
9*6a54128fSAndroid Build Coastguard WorkerFORCE_RELATIVE=NO
10*6a54128fSAndroid Build Coastguard WorkerFORCE_ABSOLUTE=NO
11*6a54128fSAndroid Build Coastguard Worker
12*6a54128fSAndroid Build Coastguard Workerwhile echo $1 | grep -q -- ^- ;
13*6a54128fSAndroid Build Coastguard Workerdo
14*6a54128fSAndroid Build Coastguard Worker	case $1 in
15*6a54128fSAndroid Build Coastguard Worker		--relative)
16*6a54128fSAndroid Build Coastguard Worker			FORCE_RELATIVE=YES
17*6a54128fSAndroid Build Coastguard Worker			;;
18*6a54128fSAndroid Build Coastguard Worker		--absolute)
19*6a54128fSAndroid Build Coastguard Worker			FORCE_ABSOLUTE=YES
20*6a54128fSAndroid Build Coastguard Worker			;;
21*6a54128fSAndroid Build Coastguard Worker		--debian)
22*6a54128fSAndroid Build Coastguard Worker			FORCE_ABSOLUTE=NO
23*6a54128fSAndroid Build Coastguard Worker			FORCE_RELATIVE=NO
24*6a54128fSAndroid Build Coastguard Worker			;;
25*6a54128fSAndroid Build Coastguard Worker		--symlinks=*)
26*6a54128fSAndroid Build Coastguard Worker			SYMLINKS=$(echo $1 | sed -e 's/--symlinks=//')
27*6a54128fSAndroid Build Coastguard Worker			;;
28*6a54128fSAndroid Build Coastguard Worker		*)
29*6a54128fSAndroid Build Coastguard Worker			echo "Unknown option $1"
30*6a54128fSAndroid Build Coastguard Worker			exit 1
31*6a54128fSAndroid Build Coastguard Worker			;;
32*6a54128fSAndroid Build Coastguard Worker	esac
33*6a54128fSAndroid Build Coastguard Worker	shift;
34*6a54128fSAndroid Build Coastguard Workerdone
35*6a54128fSAndroid Build Coastguard Worker
36*6a54128fSAndroid Build Coastguard Worker
37*6a54128fSAndroid Build Coastguard WorkerFIX_SYMLINK="$SYMLINKS -c"
38*6a54128fSAndroid Build Coastguard Worker
39*6a54128fSAndroid Build Coastguard WorkerSRC="$1"
40*6a54128fSAndroid Build Coastguard WorkerDEST="$2"
41*6a54128fSAndroid Build Coastguard WorkerDESTDIR="$3"
42*6a54128fSAndroid Build Coastguard Worker
43*6a54128fSAndroid Build Coastguard Workerif ! echo $SRC | grep -q ^/ ; then
44*6a54128fSAndroid Build Coastguard Worker	echo $SRC: Source pathname must be absolute
45*6a54128fSAndroid Build Coastguard Worker	exit 1
46*6a54128fSAndroid Build Coastguard Workerfi
47*6a54128fSAndroid Build Coastguard Worker
48*6a54128fSAndroid Build Coastguard Workerif ! echo $DEST | grep -q ^/ ; then
49*6a54128fSAndroid Build Coastguard Worker	echo $DEST: Destination pathname must be absolute
50*6a54128fSAndroid Build Coastguard Worker	exit 1
51*6a54128fSAndroid Build Coastguard Workerfi
52*6a54128fSAndroid Build Coastguard Worker
53*6a54128fSAndroid Build Coastguard Workerif ! test -e "$DESTDIR$SRC" ; then
54*6a54128fSAndroid Build Coastguard Worker	echo $DESTDIR$SRC: file or directory does not exist
55*6a54128fSAndroid Build Coastguard Worker	exit 1
56*6a54128fSAndroid Build Coastguard Workerfi
57*6a54128fSAndroid Build Coastguard Worker
58*6a54128fSAndroid Build Coastguard Worker$RM -f "$DESTDIR$DEST"
59*6a54128fSAndroid Build Coastguard Worker
60*6a54128fSAndroid Build Coastguard Workerif test "$LN_S" != "ln -s" ; then
61*6a54128fSAndroid Build Coastguard Worker	$LN_S "$DESTDIR$SRC" "$DESTDIR$DEST"
62*6a54128fSAndroid Build Coastguard Worker	exit 0
63*6a54128fSAndroid Build Coastguard Workerfi
64*6a54128fSAndroid Build Coastguard Worker
65*6a54128fSAndroid Build Coastguard Workerif test $(dirname "$SRC") = $(dirname "$DEST") ; then
66*6a54128fSAndroid Build Coastguard Worker	$LN_S "$(basename "$SRC")" "$DESTDIR$DEST"
67*6a54128fSAndroid Build Coastguard Worker	exit 0
68*6a54128fSAndroid Build Coastguard Workerfi
69*6a54128fSAndroid Build Coastguard Worker
70*6a54128fSAndroid Build Coastguard WorkerTOP_SRC=$(echo $SRC | awk -F/ '{print $2}')
71*6a54128fSAndroid Build Coastguard WorkerTOP_DEST=$(echo $DEST | awk -F/ '{print $2}')
72*6a54128fSAndroid Build Coastguard Worker
73*6a54128fSAndroid Build Coastguard Workerif test $FORCE_RELATIVE = YES ; then
74*6a54128fSAndroid Build Coastguard Worker	TOP_SRC=FORCE
75*6a54128fSAndroid Build Coastguard Worker	TOP_DEST=FORCE
76*6a54128fSAndroid Build Coastguard Workerfi
77*6a54128fSAndroid Build Coastguard Worker
78*6a54128fSAndroid Build Coastguard Workerif test $FORCE_ABSOLUTE = YES ; then
79*6a54128fSAndroid Build Coastguard Worker	TOP_SRC=FORCE
80*6a54128fSAndroid Build Coastguard Worker	TOP_DEST=FORCE_ABSOLUTE
81*6a54128fSAndroid Build Coastguard Workerfi
82*6a54128fSAndroid Build Coastguard Worker
83*6a54128fSAndroid Build Coastguard Workerif test $TOP_SRC != $TOP_DEST ; then
84*6a54128fSAndroid Build Coastguard Worker	$LN_S "$SRC" "$DESTDIR$DEST"
85*6a54128fSAndroid Build Coastguard Workerelse
86*6a54128fSAndroid Build Coastguard Worker	$LN_S "$DESTDIR$SRC" "$DESTDIR$DEST"
87*6a54128fSAndroid Build Coastguard Worker	$FIX_SYMLINK "$DESTDIR$DEST"
88*6a54128fSAndroid Build Coastguard Workerfi
89*6a54128fSAndroid Build Coastguard Worker
90