Make winelauncher smarter about finding the Wine libraries and
binaries. Change the color scheme. Handle launches with no arguments, correctly handle invocation as a mime-type handler from KDE.
This commit is contained in:
parent
da0acca7d8
commit
28fd558077
|
@ -17,8 +17,6 @@
|
|||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Primary configuration area - change this if you installed Wine to
|
||||
# a location other than @prefix@
|
||||
|
@ -31,9 +29,82 @@ prefix=@prefix@
|
|||
exec_prefix=@exec_prefix@
|
||||
WINEBIN=@bindir@
|
||||
WINELIB=@libdir@
|
||||
WINESERVERBIN=
|
||||
WINELIBDLLS=
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Establish Color Scheme
|
||||
#------------------------------------------------------------------------------
|
||||
COLOR=' -xrm *.Command.background:darkgrey
|
||||
-xrm *.Command.foreground:black
|
||||
-xrm *.Text.background:black
|
||||
-xrm *.Text.foreground:green
|
||||
-xrm *.Form.background:grey
|
||||
-xrm *.Form.foreground:green
|
||||
-xrm *.foreground:green
|
||||
-xrm *.background:black'
|
||||
|
||||
|
||||
XMESSAGE="xmessage $COLOR"
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# We're going to do a lot of fancy footwork below.
|
||||
# Before we get started, it would be nice to know the argv0,
|
||||
# of the actual script we're running (and lets remove at least
|
||||
# one level of symlinking).
|
||||
#------------------------------------------------------------------------------
|
||||
real_name=`find $0 -type l -printf "%l\n"`
|
||||
if [ ! $real_name ]; then
|
||||
real_name=$0;
|
||||
fi
|
||||
argv0_dir=`find $real_name -printf "%h\n"`
|
||||
|
||||
if [ -z $argv0_dir ] ; then
|
||||
argv0_dir=.
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Okay, now all that junk above was established at configure time.
|
||||
# However, if this is an RPM install, they may have chosen
|
||||
# to relocate this installation. If so, that stuff above
|
||||
# is all broken and we should rejigger it.
|
||||
#------------------------------------------------------------------------------
|
||||
if [ ! -x $WINEBIN/wine ] ; then
|
||||
WINEBIN=`find $argv0_dir -maxdepth 1 -perm +0111 -type f -name 'wine' -printf "%h\n" | head -1`
|
||||
fi
|
||||
|
||||
if [ ! -x $WINEBIN/wine ] ; then
|
||||
WINEBIN=`find $argv0_dir/../ -maxdepth 1 -perm +0111 -type f -name 'wine' -printf "%h\n" | head -1`
|
||||
fi
|
||||
|
||||
if [ ! -r $WINELIB/libwine.so ] ; then
|
||||
WINELIB=`find $argv0_dir -maxdepth 2 -name 'libwine.so' -printf "%h\n" | head -1`
|
||||
fi
|
||||
|
||||
if [ ! -r $WINELIB/libwine.so ] ; then
|
||||
WINELIB=`find $argv0_dir/../ -maxdepth 2 -name 'libwine.so' -printf "%h\n" | head -1`
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Hey, if we built Wine from source, let's add a little extra fun to
|
||||
# mix it up a bit
|
||||
#------------------------------------------------------------------------------
|
||||
if [ -x $WINEBIN/server/wineserver ] ; then
|
||||
WINESERVERBIN=$WINEBIN/server
|
||||
fi
|
||||
|
||||
if [ -r $WINELIB/dlls/libuser.so ] ; then
|
||||
WINELIBDLLS=$WINELIB/dlls
|
||||
fi
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Okay, set the paths and move on.
|
||||
#------------------------------------------------------------------------------
|
||||
export LD_LIBRARY_PATH=$WINELIB:$WINELIBDLLS:$LD_LIBRARY_PATH
|
||||
export PATH=$WINEBIN:$WINESERVERBIN:$PATH
|
||||
|
||||
export LD_LIBRARY_PATH=$WINELIB:$LD_LIBRARY_PATH
|
||||
export PATH=$WINEBIN:$PATH
|
||||
|
||||
info_flag=~/.wine/.no_prelaunch_window_flag
|
||||
debug_flag=~/.wine/.no_debug_window_flag
|
||||
|
@ -52,16 +123,127 @@ else
|
|||
fi
|
||||
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# No arguments? Help 'em out
|
||||
#------------------------------------------------------------------------------
|
||||
always_see_output=0
|
||||
no_args=0
|
||||
if [ $# -eq 0 ] ; then
|
||||
no_args=1
|
||||
fi
|
||||
|
||||
if [ $# -eq 1 -a foo$1 = foo ] ; then
|
||||
no_args=1
|
||||
fi
|
||||
|
||||
if [ $no_args -eq 1 ] ; then
|
||||
echo "Wine called with no arguments."
|
||||
echo "Invoking $WINEBIN/wine $@ ..."
|
||||
$XMESSAGE -buttons " Okay ":0," See the Wine Usage Statement ":1," Configure Wine ":2 \
|
||||
-title "Welcome to Wine" \
|
||||
"
|
||||
|
||||
You have started Wine without specifying any arguments.
|
||||
|
||||
Wine requires a least one argument - the name of the Windows
|
||||
application you would like to run.
|
||||
|
||||
If you have launched this through the KDE menu system,
|
||||
you can use the KDE file browser to select a Windows
|
||||
exectuable and then click on it to launch Wine with
|
||||
that application.
|
||||
|
||||
You can similarly use the GNOME file manager to
|
||||
select a Windows executable and double click on it.
|
||||
|
||||
If you would like to see the command line arguments
|
||||
for Wine, select the second option, below.
|
||||
|
||||
"
|
||||
welcome_rc=$?
|
||||
if [ $welcome_rc -eq 0 ] ; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ $welcome_rc -eq 2 ] ; then
|
||||
which winesetup
|
||||
if [ $? -eq 0 ] ; then
|
||||
winesetup
|
||||
else
|
||||
if [ -x /opt/wine/bin/winesetup ] ; then
|
||||
/opt/wine/bin/winesetup
|
||||
else
|
||||
$XMESSAGE -title "Error" "Error: Unable to find winesetup in your PATH or in /opt/wine/bin"
|
||||
fi
|
||||
fi
|
||||
exit
|
||||
fi
|
||||
|
||||
use_info_message=0
|
||||
always_see_output=1
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Optionally Warn the user we're going to be launching Wine...
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $use_info_message -ne 0 ] ; then
|
||||
echo "Invoking $WINEBIN/wine $* ..."
|
||||
xmessage -timeout 10 -buttons Dismiss:0,"Never display this message again":3 \
|
||||
"Invoking $WINEBIN/wine $* ..." &
|
||||
echo "Invoking $WINEBIN/wine $@ ..."
|
||||
$XMESSAGE -timeout 30 -buttons " Dismiss ":0," Never display this message again ":3 \
|
||||
-title "Wine Launch Window" \
|
||||
"Invoking $WINEBIN/wine $@ ...
|
||||
|
||||
This dialog box is a temporary status dialog to let you know
|
||||
that Wine is attempting to launch your application.
|
||||
|
||||
Since Wine is still very much in a development stage, many
|
||||
applications will fail silently. This dialog box is your indication
|
||||
that we're *trying* to run your application.
|
||||
|
||||
This dialog box will automatically disappear after 30 seconds,
|
||||
or after your application finishes.
|
||||
|
||||
You can permanently disable this dialog by selecting the option below.
|
||||
" &
|
||||
info_message_pid=$!
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Here's a little function to clean up after that dialog...
|
||||
#------------------------------------------------------------------------------
|
||||
function clean_up_info_message ()
|
||||
{
|
||||
if [ $use_info_message -ne 0 ] ; then
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Okay, make sure that the notice window is dead (and kill it if it ain't)
|
||||
#------------------------------------------------------------------------------
|
||||
ps $info_message_pid >/dev/null 2>&1
|
||||
if [ $? -ne 0 ] ; then
|
||||
wait $info_message_pid
|
||||
info_return=$?
|
||||
else
|
||||
info_return=0
|
||||
kill $info_message_pid
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# If they didn't like the warning window, turn it off
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $info_return -eq 3 ] ; then
|
||||
$XMESSAGE -title "Wine Prelaunch Control" \
|
||||
"Wine will now disable the prelaunch Window you just saw.
|
||||
You will no longer be notified when Wine is attempting
|
||||
to start a Windows application.
|
||||
|
||||
You can reenable this Window by removing the $info_flag file." -buttons " Okay ":0," Cancel ":1
|
||||
if [ $? -eq 0 ] ; then
|
||||
touch $info_flag
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
use_info_message=0
|
||||
}
|
||||
#------------------------------------------------------------------------------
|
||||
# Generate a temporary log file name
|
||||
#------------------------------------------------------------------------------
|
||||
|
@ -83,9 +265,9 @@ if [ $use_log_name -ne 0 ] ; then
|
|||
# but still display its output to the screen.
|
||||
# The obvious thing to do is to run wine and pipe output to tee,
|
||||
# but then I can't find a way to get the return code of wine;
|
||||
# I only get the return code of Wine.
|
||||
# I only get the return code of tee.
|
||||
#------------------------------------------------------------------------------
|
||||
$WINEBIN/wine $* >$log_name 2>&1 &
|
||||
$WINEBIN/wine "$@" >$log_name 2>&1 &
|
||||
wine_pid=$!
|
||||
|
||||
tail -f $log_name &
|
||||
|
@ -96,46 +278,22 @@ if [ $use_log_name -ne 0 ] ; then
|
|||
|
||||
kill $tail_pid
|
||||
else
|
||||
$WINEBIN/wine $*
|
||||
$WINEBIN/wine "$@"
|
||||
wine_return=$?
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Clean up the info message
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $use_info_message -ne 0 ] ; then
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Okay, make sure that the notice window is dead (and kill it if it ain't)
|
||||
#------------------------------------------------------------------------------
|
||||
ps $info_message_pid >/dev/null 2>&1
|
||||
if [ $? -ne 0 ] ; then
|
||||
wait $info_message_pid
|
||||
info_return=$?
|
||||
else
|
||||
info_return=0
|
||||
kill $info_message_pid
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# If they didn't like the warning window, turn it off
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $info_return -eq 3 ] ; then
|
||||
echo "Disabling Wine prelaunch Window. Remove $info_flag to enable"
|
||||
touch $info_flag
|
||||
fi
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Test the return code, and see if it fails
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $wine_return -eq 0 ] ; then
|
||||
if [ $always_see_output -eq 0 -a $wine_return -eq 0 ] ; then
|
||||
echo "Wine exited with a successful status"
|
||||
if [ $use_log_name -ne 0 ] ; then
|
||||
rm -f $log_name
|
||||
fi
|
||||
else
|
||||
echo "Wine failed with return code $wine_return"
|
||||
if [ $always_see_output -eq 0 ] ; then
|
||||
echo "Wine failed with return code $wine_return"
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Gracefully display a debug message if they like...
|
||||
|
@ -143,20 +301,89 @@ else
|
|||
while [ $use_debug_message -gt 0 ] ; do
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# If they didn't like the warning window, turn it off
|
||||
# Build up the menu of choices they can make...
|
||||
#------------------------------------------------------------------------------
|
||||
BUTTONS=' Okay :0'
|
||||
if [ $use_log_name -ne 0 ] ; then
|
||||
echo "Error log stored in $log_name"
|
||||
xmessage -buttons Ok:0,"View Log ($log_name)":1,"Rerun with debug":2,"Never display this message again":3\
|
||||
"Wine failed with return code $wine_return"
|
||||
else
|
||||
xmessage -buttons Ok:0,"Rerun with debug":2,"Never display this message again":3\
|
||||
"Wine failed with return code $wine_return"
|
||||
BUTTONS="$BUTTONS"', View Log :1'
|
||||
fi
|
||||
info_return=$?
|
||||
|
||||
if [ $info_return -eq 1 ] ; then
|
||||
xmessage -file $log_name -buttons Ok:0,"Delete $log_name":1
|
||||
BUTTONS="$BUTTONS"', Debug :2'
|
||||
BUTTONS="$BUTTONS"', Configure :4'
|
||||
BUTTONS="$BUTTONS"', Disable :3'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Build an error message
|
||||
#------------------------------------------------------------------------------
|
||||
MESSAGE="
|
||||
Wine has exited with a failure status of $wine_return.
|
||||
|
||||
Wine is still development software, so there can be many
|
||||
explanations for this problem.
|
||||
|
||||
You can choose to run Wine again with a higher level
|
||||
of debug messages (the debug option, below).
|
||||
|
||||
You can attempt to reconfigure Wine to make it work better.
|
||||
Note that one change you can make that will dramatically
|
||||
effect Wine's behaviour is to change whether or not
|
||||
Wine uses a true Windows partition, mounted under Linux,
|
||||
or whether it uses an empty Windows directory.
|
||||
The Wine Configuration program can assist you in making
|
||||
those changes (select Configure, below, for more).
|
||||
|
||||
You can disable this message entirely by selecting the
|
||||
Disable option below."
|
||||
|
||||
if [ $always_see_output -ne 0 -a $wine_return -eq 0 ] ; then
|
||||
MESSAGE="
|
||||
Wine has exited with a failure status of $wine_return.
|
||||
|
||||
You can disable this message entirely by selecting the
|
||||
Disable option below."
|
||||
|
||||
fi
|
||||
|
||||
if [ $use_log_name -ne 0 ] ; then
|
||||
MESSAGE="$MESSAGE
|
||||
|
||||
Wine has captured a log of the Wine output in the file $log_name.
|
||||
You may view this file by selecting View Log, below."
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Display the message
|
||||
#------------------------------------------------------------------------------
|
||||
$XMESSAGE -title "Wine Finished With Error" -buttons "$BUTTONS" "$MESSAGE"
|
||||
debug_return=$?
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Dismiss the other window...
|
||||
#------------------------------------------------------------------------------
|
||||
clean_up_info_message
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Process a configure instruction
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $debug_return -eq 4 ] ; then
|
||||
which winesetup
|
||||
if [ $? -eq 0 ] ; then
|
||||
winesetup
|
||||
else
|
||||
if [ -x /opt/wine/bin/winesetup ] ; then
|
||||
/opt/wine/bin/winesetup
|
||||
else
|
||||
$XMESSAGE -title "Error" "Error: Unable to find winesetup in your PATH or in /opt/wine/bin"
|
||||
fi
|
||||
fi
|
||||
continue;
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# Process a view instruction
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $debug_return -eq 1 ] ; then
|
||||
$XMESSAGE -title "View Wine Log" -file $log_name -buttons " Okay ":0,"Delete $log_name":1
|
||||
if [ $? -eq 1 ] ; then
|
||||
echo "Deleting $log_name"
|
||||
rm -f $log_name
|
||||
|
@ -169,18 +396,30 @@ else
|
|||
#------------------------------------------------------------------------------
|
||||
# If they didn't like the warning window, turn it off
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $info_return -eq 3 ] ; then
|
||||
echo "Disabling Wine debug window. Remove $debug_flag to enable"
|
||||
touch $debug_flag
|
||||
if [ $debug_return -eq 3 ] ; then
|
||||
$XMESSAGE -title "Wine Debug Log Control" \
|
||||
"Wine will now disable the Wine debug output control window you just saw.
|
||||
You will no longer be notified when Wine fails to start a
|
||||
Windows application.
|
||||
|
||||
You can reenable this Window by removing the $debug_flag file." -buttons " Okay ":0," Cancel ":1
|
||||
|
||||
if [ $? -eq 0 ] ; then
|
||||
touch $debug_flag
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
# If they want to retry with debug, let 'em.
|
||||
#------------------------------------------------------------------------------
|
||||
if [ $info_return -eq 2 ] ; then
|
||||
echo "Rerunning $0 $debug_options $*"
|
||||
exec $0 $debug_options $*
|
||||
if [ $debug_return -eq 2 ] ; then
|
||||
echo "Rerunning $0 $debug_options $@"
|
||||
exec $0 $debug_options $@
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
clean_up_info_message
|
||||
|
||||
|
|
Loading…
Reference in New Issue