178 строки
4.2 KiB
Bash
Executable File
178 строки
4.2 KiB
Bash
Executable File
#!/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 You 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
|