OSDN Git Service

Merge remote-tracking branch 'x86/froyo-x86' into froyo-next
[android-x86/external-mesa.git] / bin / minstall
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