Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1901 serge 1
#!/bin/sh
2
 
3
 
4
# A minimal replacement for 'install' that supports installing symbolic links.
5
# Only a limited number of options are supported:
6
# -d dir          Create a directory
7
# -m mode         Sets a file's mode when installing
8
 
9
 
10
# If these commands aren't portable, we'll need some "if (arch)" type stuff
11
SYMLINK="ln -s"
12
MKDIR="mkdir -p"
13
RM="rm -f"
14
 
15
MODE=""
16
 
17
if [ "$1" = "-d" ] ; then
18
	# make a directory path
19
	$MKDIR "$2"
20
	exit 0
21
fi
22
 
23
if [ "$1" = "-m" ] ; then
24
	# set file mode
25
	MODE=$2
26
	shift 2
27
fi
28
 
29
# install file(s) into destination
30
if [ $# -ge 2 ] ; then
31
 
32
	# Last cmd line arg is the dest dir
33
	for FILE in $@ ; do
34
		DESTDIR="$FILE"
35
	done
36
 
37
	# Loop over args, moving them to DEST directory
38
	I=1
39
	for FILE in $@ ; do
40
		if [ $I = $# ] ; then
41
			# stop, don't want to install $DEST into $DEST
42
			exit 0
43
		fi
44
 
45
                DEST=$DESTDIR
46
 
47
                # On CYGWIN, because DLLs are loaded by the native Win32 loader,
48
                # they are installed in the executable path.  Stub libraries used
49
                # only for linking are installed in the library path
50
                case `uname` in
51
                    CYGWIN*)
52
                        case $FILE in
53
                            *.dll)
54
                                DEST="$DEST/../bin"
55
                                ;;
56
                            *)
57
                                ;;
58
                        esac
59
	                ;;
60
                    *)
61
                        ;;
62
                esac
63
 
64
		PWDSAVE=`pwd`
65
 
66
		# determine file's type
67
		if [ -h "$FILE" ] ; then
68
			#echo $FILE is a symlink
69
			# Unfortunately, cp -d isn't universal so we have to
70
			# use a work-around.
71
 
72
			# Use ls -l to find the target that the link points to
73
			LL=`ls -l "$FILE"`
74
			for L in $LL ; do
75
				TARGET=$L
76
			done
77
			#echo $FILE is a symlink pointing to $TARGET
78
 
79
			FILE=`basename "$FILE"`
80
			# Go to $DEST and make the link
81
			cd "$DEST"        # pushd
82
				$RM "$FILE"
83
				$SYMLINK "$TARGET" "$FILE"
84
			cd "$PWDSAVE"     # popd
85
 
86
		elif [ -f "$FILE" ] ; then
87
			#echo "$FILE" is a regular file
88
			# Only copy if the files differ
89
			if ! cmp -s $FILE $DEST/`basename $FILE`; then
90
				$RM "$DEST/`basename $FILE`"
91
				cp "$FILE" "$DEST"
92
			fi
93
			if [ $MODE ] ; then
94
				FILE=`basename "$FILE"`
95
				chmod $MODE "$DEST/$FILE"
96
			fi
97
		else
98
			echo "Unknown type of argument: " "$FILE"
99
			exit 1
100
		fi
101
 
102
		I=`expr $I + 1`
103
	done
104
 
105
	exit 0
106
fi
107
 
108
# If we get here, we didn't find anything to do
109
echo "Usage:"
110
echo "  install -d dir                      Create named directory"
111
echo "  install [-m mode] file [...] dest   Install files in destination"
112