Force to bash
[mono.git] / scripts / mono-test-install
1 #!/bin/bash
2 #
3 # Does various checks for people that we can use to diagnose
4 # an end user installation
5 #
6 temp_cs=temp$$.cs
7 temp_exe=temp$$.exe
8 if test -f $temp_cs; then
9     echo Error: need a temporary file name, and $temp_cs already exists
10     echo Run this program from a different directory, or delete the file and try again.
11     exit 1
12 fi
13
14 set `echo $PATH | sed 's/:/ /g'`
15
16 while test x$1 != x; do
17     if test -x $1/mono; then
18         if test x$monocmd = x; then
19            monocmd=$1/mono
20         else
21            other_monos="$1/mono $other_monos"
22         fi
23     fi
24     shift
25 done
26
27 echo Active Mono: $monocmd
28
29 if test "x$other_monos" != x; then
30         echo "Other Mono executables: $other_monos"
31 fi
32
33
34 #
35 # Check that the pkg-config mono points to this mono
36 #
37 if pkg-config --modversion mono >& /dev/null; then 
38         pkg_config_mono=`(cd \`pkg-config --variable prefix mono\`/bin; pwd)`/mono
39         if test $pkg_config_mono != $monocmd; then
40             echo "Error: pkg-config Mono installation points to a different install"
41             echo "       than the Mono found:"
42             echo "       Mono on PATH: $monocmd"
43             echo "       Mono from pkg-config: $pkg_config_mono"
44             exit 1
45         fi
46 else 
47         echo "Warning: pkg-config could not find mono installed on this system"
48 fi
49
50 ##########################################################################################
51 #
52 # Tests below this point require the dotnet install
53 #
54 #
55
56 #
57 # Check that -pkg:dotnet is available
58 #
59 if pkg-config --modversion dotnet >& /dev/null; then
60        echo ""
61 else
62        echo "No dotnet pkgconfig found, Windows.Forms, System.Drawing and others will not work"
63        exit 1
64 fi
65
66 case `uname` in
67     Darwin) 
68         macos=true
69         libgdiplus=libgdiplus.dylib
70         LD_PATH=DYLD_LIBRARY_PATH
71         ;;
72     *) 
73         macos=false;
74         libgdiplus=libgdiplus.so
75         LD_PATH=LD_LIBRARY_PATH
76         ;;
77 esac
78
79 search_libgdiplus_on_path()
80 {
81     libgdiplus_found=false
82         if $macos; then
83             set `echo $DYLD_LIBRARY_PATH | sed 's/:/ /g'`
84         else
85             set `echo $LD_LIBRARY_PATH | sed 's/:/ /g'`
86         fi
87         while test x$1 != x; do
88             if test -e $1/$libgdiplus; then
89                    echo "    The $libgdiplus is found on $libdir/$libgdiplus"
90                    libgdiplus_found=true
91                    libgdiplus_path=$1/$libgdiplus
92                    break
93             fi
94             shift
95         done
96 }
97
98 #
99 # Check GDI+ installation
100 #
101 cat > $temp_cs <<EOF
102 using System;
103 using System.Drawing;
104
105 class X { 
106     static void Main ()
107     {
108             Bitmap b = new Bitmap (100, 100);
109     }
110 }
111 EOF
112 if mcs -pkg:dotnet $temp_cs >& /dev/null; then
113     if mono $temp_exe >& /dev/null; then
114         echo Your have a working System.Drawing setup
115     else
116         echo Your system has a broken System.Drawing setup
117         if mono $temp_exe 2>&1 | grep 'System.DllNotFoundException: gdiplus.dll' > /dev/null; then
118            echo "    your gdiplus.dll can not be loaded"
119
120            libdir=`dirname $monocmd`/../lib
121            if test -f $libdir/$libgdiplus; then
122                echo "    The $libgdiplus is found on $libdir/$libgdiplus"
123                if test -e $libdir/$libgdiplus; then
124                    libgdiplus_path=$libdir/$libgdiplus
125                    libgdiplus_found=true
126                else
127                    echo "    but it seems to be a broken link"
128                fi
129            else
130                search_libgdiplus_on_path
131            fi
132            if $libgdiplus_found; then
133                echo ssss 
134                if which ldd >/dev/null; then
135                    LANG=C dirs=`ldd $libgdiplus_path | grep 'not found'`
136                    if echo $dirs | grep 'not found' >& /dev/null; then
137                        echo "    libgdiplus is missing the following dependencies to run:"
138                        echo $dirs | sed 's/^/        /'
139                    fi
140                fi 
141            else
142                echo "    No libgdiplus was found on your $LD_PATH"
143            fi
144         fi
145     fi
146 else
147     echo Failed to compile sample System.Drawing program, your installation is broken
148     exit 1
149 fi