178 lines
4.2 KiB
Plaintext
178 lines
4.2 KiB
Plaintext
|
#!/usr/bin/env bash
|
||
|
#
|
||
|
# Does various checks for people that we can use to diagnose
|
||
|
# an end user installation
|
||
|
#
|
||
|
temp_cs=temp$$.cs
|
||
|
temp_exe=temp$$.exe
|
||
|
if test -f $temp_cs; then
|
||
|
echo Error: need a temporary file name, and $temp_cs already exists
|
||
|
echo Run this program from a different directory, or delete the file and try again.
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
set `echo $PATH | sed 's/:/ /g'`
|
||
|
|
||
|
while test x$1 != x; do
|
||
|
if test -x $1/mono; then
|
||
|
if test x$monocmd = x; then
|
||
|
monocmd=$1/mono
|
||
|
else
|
||
|
other_monos="$1/mono $other_monos"
|
||
|
fi
|
||
|
fi
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
echo Active Mono: $monocmd
|
||
|
|
||
|
if test "x$other_monos" != x; then
|
||
|
echo "Other Mono executables: $other_monos"
|
||
|
fi
|
||
|
|
||
|
|
||
|
#
|
||
|
# Check that the pkg-config mono points to this mono
|
||
|
#
|
||
|
if pkg-config --modversion mono >& /dev/null; then
|
||
|
pkg_config_mono=`(cd \`pkg-config --variable prefix mono\`/bin; pwd)`/mono
|
||
|
if test $pkg_config_mono != $monocmd; then
|
||
|
echo "Error: pkg-config Mono installation points to a different install"
|
||
|
echo " than the Mono found:"
|
||
|
echo " Mono on PATH: $monocmd"
|
||
|
echo " Mono from pkg-config: $pkg_config_mono"
|
||
|
fi
|
||
|
else
|
||
|
echo "Warning: pkg-config could not find mono installed on this system"
|
||
|
fi
|
||
|
|
||
|
##########################################################################################
|
||
|
#
|
||
|
# Tests below this point require the dotnet install
|
||
|
#
|
||
|
#
|
||
|
|
||
|
#
|
||
|
# Check that -pkg:dotnet is available
|
||
|
#
|
||
|
if pkg-config --modversion dotnet >& /dev/null; then
|
||
|
echo ""
|
||
|
else
|
||
|
echo "No dotnet pkgconfig found, Windows.Forms, System.Drawing and others will not work"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
case `uname` in
|
||
|
Darwin)
|
||
|
macos=true
|
||
|
libgdiplus=libgdiplus.dylib
|
||
|
LD_PATH=DYLD_LIBRARY_PATH
|
||
|
;;
|
||
|
*)
|
||
|
macos=false;
|
||
|
libgdiplus=libgdiplus.so
|
||
|
LD_PATH=LD_LIBRARY_PATH
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
search_libgdiplus_on_path()
|
||
|
{
|
||
|
libgdiplus_found=false
|
||
|
if $macos; then
|
||
|
set `echo $DYLD_LIBRARY_PATH | sed 's/:/ /g'`
|
||
|
else
|
||
|
set `echo $LD_LIBRARY_PATH | sed 's/:/ /g'`
|
||
|
fi
|
||
|
while test x$1 != x; do
|
||
|
if test -e $1/$libgdiplus; then
|
||
|
echo " The $libgdiplus is found on $libdir/$libgdiplus"
|
||
|
libgdiplus_found=true
|
||
|
libgdiplus_path=$1/$libgdiplus
|
||
|
break
|
||
|
fi
|
||
|
shift
|
||
|
done
|
||
|
}
|
||
|
|
||
|
#
|
||
|
# Check GDI+ installation
|
||
|
#
|
||
|
cat > $temp_cs <<EOF
|
||
|
using System;
|
||
|
using System.Drawing;
|
||
|
|
||
|
class X {
|
||
|
static void Main ()
|
||
|
{
|
||
|
Bitmap b = new Bitmap (100, 100);
|
||
|
}
|
||
|
}
|
||
|
EOF
|
||
|
if mcs -pkg:dotnet $temp_cs >& /dev/null; then
|
||
|
if mono $temp_exe >& /dev/null; then
|
||
|
echo Your have a working System.Drawing setup
|
||
|
else
|
||
|
echo Your system has a broken System.Drawing setup
|
||
|
if mono $temp_exe 2>&1 | grep 'System.DllNotFoundException: gdiplus.dll' > /dev/null; then
|
||
|
echo " your gdiplus.dll can not be loaded"
|
||
|
|
||
|
libdir=`dirname $monocmd`/../lib
|
||
|
if test -f $libdir/$libgdiplus; then
|
||
|
echo " The $libgdiplus is found on $libdir/$libgdiplus"
|
||
|
if test -e $libdir/$libgdiplus; then
|
||
|
libgdiplus_path=$libdir/$libgdiplus
|
||
|
libgdiplus_found=true
|
||
|
else
|
||
|
echo " but it seems to be a broken link"
|
||
|
fi
|
||
|
else
|
||
|
search_libgdiplus_on_path
|
||
|
fi
|
||
|
if $libgdiplus_found; then
|
||
|
echo ssss
|
||
|
if which ldd >/dev/null; then
|
||
|
LANG=C dirs=`ldd $libgdiplus_path | grep 'not found'`
|
||
|
if echo $dirs | grep 'not found' >& /dev/null; then
|
||
|
echo " libgdiplus is missing the following dependencies to run:"
|
||
|
echo $dirs | sed 's/^/ /'
|
||
|
fi
|
||
|
fi
|
||
|
else
|
||
|
echo " No libgdiplus was found on your $LD_PATH"
|
||
|
fi
|
||
|
fi
|
||
|
fi
|
||
|
else
|
||
|
echo Failed to compile sample System.Drawing program, your installation is broken
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
cat > $temp_cs <<EOF
|
||
|
using System;
|
||
|
using System.Reflection;
|
||
|
using System.IO;
|
||
|
|
||
|
class Program {
|
||
|
|
||
|
public static void Main()
|
||
|
{
|
||
|
object watcher = new FileSystemWatcher()
|
||
|
.GetType ()
|
||
|
.GetField ("watcher", BindingFlags.NonPublic | BindingFlags.Static)
|
||
|
.GetValue (null);
|
||
|
|
||
|
Console.WriteLine ("Your file system watcher is: {0}",
|
||
|
watcher != null
|
||
|
? watcher.GetType ().FullName
|
||
|
: "unknown");
|
||
|
}
|
||
|
}
|
||
|
EOF
|
||
|
|
||
|
if mcs $temp_cs >& /dev/null; then
|
||
|
mono $temp_exe
|
||
|
else
|
||
|
echo Failed to compile sample test program, your installation is broken
|
||
|
exit 1
|
||
|
fi
|